Aberrations

1st & 3rd Order Aberrations

Decompose performance into classical Seidel coefficients (S1 to S5).

IntermediateAberrationsNumPy backend10 min read

Introduction

This tutorial illustrates how various aberration coefficients are computed.

Core concepts used

lens.aberrations.seidels()
Returns the five primary Seidel sums (Spherical, Coma, Astigmatism, Petzval, and Distortion).
lens.aberrations.TSC()
Extracts the Transverse Spherical Aberration contribution for every surface in the system.
lens.aberrations.TachC()
Computes the first-order transverse axial color, representing the wavelength-dependent focus shift.
lens.aberrations.DC()
Quantifies the 3rd-order distortion contribution of each individual optical interface.

Step-by-step build

1

Import the sample lens

python
from optiland.samples.objectives import TripletTelescopeObjective
2

Instantiate and draw the lens

python
lens = TripletTelescopeObjective()
lens.draw()
Step
3

Compute the five Seidel sums

python
print("Seidel Aberrations:")
for k, seidel in enumerate(lens.aberrations.seidels()):
 print(f"\tS{k + 1}: {seidel:.3e}")
Show full code listing
python
from optiland.samples.objectives import TripletTelescopeObjective

lens = TripletTelescopeObjective()
lens.draw()

print("Seidel Aberrations:")
for k, seidel in enumerate(lens.aberrations.seidels()):
  print(f"\tS{k + 1}: {seidel:.3e}")

print("Third-order transverse spherical aberration:")
for k, value in enumerate(lens.aberrations.TSC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("Third-order longitudinal spherical aberration:")
for k, value in enumerate(lens.aberrations.SC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("Third-order sagittal coma:")
for k, value in enumerate(lens.aberrations.CC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("Third-order tangential coma:")
for k, value in enumerate(lens.aberrations.TCC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("Third-order transverse astigmatism:")
for k, value in enumerate(lens.aberrations.TAC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("Third-order longitudinal astigmatism:")
for k, value in enumerate(lens.aberrations.AC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("Third-order transverse Petzval sum:")
for k, value in enumerate(lens.aberrations.TPC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("Third-order longitudinal Petzval sum:")
for k, value in enumerate(lens.aberrations.PC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("Third-order distortion:")
for k, value in enumerate(lens.aberrations.DC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("First-order transverse axial color:")
for k, value in enumerate(lens.aberrations.TAchC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("First-order longitudinal axial color:")
for k, value in enumerate(lens.aberrations.LchC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

print("First-order lateral color:")
for k, value in enumerate(lens.aberrations.TchC()):
  print(f"\tSurface {k + 1}: {value:.3e}")

Conclusions

  • The five primary Seidel sums (S1–S5) provide a compact, surface-by-surface decomposition of spherical aberration, coma, astigmatism, field curvature, and distortion for a TripletTelescopeObjective.
  • Both transverse and longitudinal forms of each third-order aberration are accessible through dedicated methods such as TSC() / SC(), TAC() / AC(), and TPC() / PC(), allowing direct comparison of ray-height and focus-shift representations.
  • First-order chromatic aberrations — transverse axial color, longitudinal axial color, and lateral color — are computed via TAchC(), LchC(), and TchC(), complementing the monochromatic Seidel analysis.
  • Printing contributions surface-by-surface makes it straightforward to identify which elements dominate each aberration type, guiding targeted design corrections.
  • All aberration methods integrate naturally into the lens.aberrations namespace, making it simple to extend this workflow to any Optiland lens model without changing the analysis code.

Next tutorials