Source code for optiland.aberrations.chromatic

"""Chromatic Aberrations

Computes first-order chromatic aberration quantities.

Kramer Harrison, 2026
"""

from __future__ import annotations

from typing import TYPE_CHECKING

from optiland.aberrations.third_order import ThirdOrderAberrations

if TYPE_CHECKING:
    from optiland._types import BEArray
    from optiland.optic.context import OpticDataContext


[docs] class ChromaticAberrations: """First-order chromatic aberration quantities. Args: optic: Any object satisfying the OpticDataContext Protocol. """ def __init__(self, optic: OpticDataContext) -> None: self._third_order = ThirdOrderAberrations(optic)
[docs] def TAchC(self) -> BEArray: """Compute first-order transverse axial color. Returns: First-order transverse axial color per surface. """ self._third_order._precalculations() return self._third_order._compute_over_surfaces( self._third_order._TAchC_term ).flatten()
[docs] def LchC(self) -> BEArray: """Compute first-order longitudinal axial color. Returns: First-order longitudinal axial color per surface. """ self._third_order._precalculations() TAchC = self._third_order._compute_over_surfaces(self._third_order._TAchC_term) return (-TAchC / self._third_order._ua[-1]).flatten()
[docs] def TchC(self) -> BEArray: """Compute first-order lateral color. Returns: First-order lateral color per surface. """ self._third_order._precalculations() return self._third_order._compute_over_surfaces( self._third_order._TchC_term ).flatten()