"""Aberrations Package
Provides the Aberrations facade and focused sub-classes for computing
first- and third-order aberrations.
The public Aberrations class delegates to three focused classes:
- ThirdOrderAberrations (TSC, SC, CC, TCC, TAC, AC, TPC, PC, DC)
- SeidelAberrations (seidels)
- ChromaticAberrations (TAchC, LchC, TchC)
All public methods on Aberrations continue to work unchanged.
Kramer Harrison, 2026
"""
from __future__ import annotations
from typing import TYPE_CHECKING
from optiland.aberrations.chromatic import ChromaticAberrations
from optiland.aberrations.seidel import SeidelAberrations
from optiland.aberrations.third_order import ThirdOrderAberrations
if TYPE_CHECKING:
from optiland._types import BEArray
from optiland.optic.context import OpticDataContext
[docs]
class Aberrations:
"""Facade over ThirdOrderAberrations, SeidelAberrations, ChromaticAberrations.
All public methods delegate to the appropriate focused class.
``optic.aberrations.seidels()`` continues to work exactly as before.
Args:
optic: The optical system (or any object satisfying OpticDataContext).
"""
def __init__(self, optic: OpticDataContext) -> None:
self.optic = optic
self._third_order = ThirdOrderAberrations(optic)
self._seidel = SeidelAberrations(optic)
self._chromatic = ChromaticAberrations(optic)
# ── Third-order delegates ──────────────────────────────────────────────
[docs]
def third_order(self) -> tuple[BEArray, ...]:
"""Compute all third-order aberrations and first-order color terms."""
return self._third_order.third_order()
[docs]
def TSC(self) -> BEArray:
"""Compute third-order transverse spherical aberration."""
return self._third_order.TSC()
[docs]
def SC(self) -> BEArray:
"""Compute third-order longitudinal spherical aberration."""
return self._third_order.SC()
[docs]
def CC(self) -> BEArray:
"""Compute third-order sagittal coma."""
return self._third_order.CC()
[docs]
def TCC(self) -> BEArray:
"""Compute third-order tangential coma."""
return self._third_order.TCC()
[docs]
def TAC(self) -> BEArray:
"""Compute third-order transverse astigmatism."""
return self._third_order.TAC()
[docs]
def AC(self) -> BEArray:
"""Compute third-order longitudinal astigmatism."""
return self._third_order.AC()
[docs]
def TPC(self) -> BEArray:
"""Compute third-order transverse Petzval sum."""
return self._third_order.TPC()
[docs]
def PC(self) -> BEArray:
"""Compute third-order longitudinal Petzval sum."""
return self._third_order.PC()
[docs]
def DC(self) -> BEArray:
"""Compute third-order distortion."""
return self._third_order.DC()
# ── Seidel delegate ───────────────────────────────────────────────────
[docs]
def seidels(self) -> BEArray:
"""Compute Seidel aberration coefficients."""
return self._seidel.seidels()
# ── Chromatic delegates ───────────────────────────────────────────────
[docs]
def TAchC(self) -> BEArray:
"""Compute first-order transverse axial color."""
return self._chromatic.TAchC()
[docs]
def LchC(self) -> BEArray:
"""Compute first-order longitudinal axial color."""
return self._chromatic.LchC()
[docs]
def TchC(self) -> BEArray:
"""Compute first-order lateral color."""
return self._chromatic.TchC()
__all__ = [
"Aberrations",
"ThirdOrderAberrations",
"SeidelAberrations",
"ChromaticAberrations",
]