sequences.sequenced_optic#
SequencedOptic: a view of a base Optic traced through a sub-sequence.
Composition, not inheritance: a SequencedOptic delegates aperture,
fields, wavelengths, polarization, and paraxial analysis to the base optic
untouched, and exposes surfaces as a
SequencedSurfaceGroup.
Ray definition (conjugates, aperture stop, aiming) always comes from the base optic’s own nominal sequence — a sub-sequence defines traversal only. Per-sequence first-order analysis is out of scope for v1 (SPEC §4, phase 5).
Kramer Harrison, 2026
Classes
|
A named sub-sequence over a base optic's surfaces. |
- class SequencedOptic(base_optic: Optic, name: str, steps: list[RawStep])[source]#
A named sub-sequence over a base optic’s surfaces.
- Parameters:
base_optic – The optic whose surfaces this sequence traverses.
name – A name for the sequence, unique within the base optic.
steps – The raw step list. See
optiland.sequences.steps.parse_steps().
- Raises:
ValueError – If
stepsis empty, malformed, or references an out-of-range surface index.SequenceValidationError – If adjacent steps are not physically consistent.
- property aperture#
- property apodization#
- property fields#
- property image_surface#
wherever this sequence terminates.
Unlike the base optic, a sub-sequence does not necessarily end at the system’s physical image plane (e.g. a ghost path that folds back on itself), so “image surface” here means the sequence’s own terminal step.
- Type:
The last step’s view
- n(wavelength: float | str = 'primary')[source]#
Get the exit-medium refractive indices at each step of this sequence.
- Parameters:
wavelength – The wavelength in microns, or
"primary"to use the base optic’s primary wavelength.- Returns:
The refractive indices at each step.
- Return type:
be.ndarray
- property object_surface#
The base optic’s object surface (conjugates are never per-sequence).
- property paraxial#
- property polarization: PolarizationState | str#
- property polarization_state: PolarizationState | None#
- property surface_group#
Alias for
surfaces, matching internal use ofOptic.surface_group.
- trace(Hx, Hy, wavelength: float, num_rays: int | None = 100, distribution: DistributionType | BaseDistribution | None = 'hexapolar') RealRays[source]#
Trace a distribution of rays through this sequence.
Rays are generated exactly as they would be for the base optic (its own conjugates, aperture stop, and ray aiming); only the traversal through the surfaces differs.
- Parameters:
Hx – The normalized x field coordinate(s).
Hy – The normalized y field coordinate(s).
wavelength – The wavelength of the rays in microns.
num_rays – The number of rays to trace. Defaults to 100.
distribution – The distribution of rays. Defaults to ‘hexapolar’.
- Returns:
The traced rays.
- Return type:
- trace_generic(Hx, Hy, Px, Py, wavelength: float) RealRays[source]#
Trace a single generic ray (given field and pupil coordinates).
As with
trace(), the ray is generated exactly as it would be for the base optic; only the traversal through the surfaces differs.- Parameters:
Hx – The normalized x field coordinate(s).
Hy – The normalized y field coordinate(s).
Px – The normalized x pupil coordinate(s).
Py – The normalized y pupil coordinate(s).
wavelength – The wavelength of the rays in microns.
- Returns:
The traced rays.
- Return type:
- property wavelengths#