Angle vs. Image Height - Through Pupil

Represents an analysis of incident angle vs. image height by varying through all pupil coordinates (Px, Py) for a given image field point.

[1]:
import optiland.backend as be
from optiland.analysis import PupilIncidentAngleVsHeight
from optiland.optic import Optic
[2]:
lens = Optic(name="Simple Optic")
lens.wavelengths.add(value=0.63, is_primary=True)
lens.surfaces.add(index=0, thickness=153.2, is_stop=True, comment="scan mirror")
lens.surfaces.add(
    index=1, thickness=5, radius=be.inf, material="N-SF11", comment="PCX front surface"
)
lens.surfaces.add(
    index=2, thickness=157.8, radius=-120, is_stop=True, comment="PCX back surface"
)
lens.surfaces.add(index=3, comment="image plane")
lens.set_aperture(aperture_type="EPD", value=38)
lens.fields.set_type(field_type="angle")
lens.fields.add(y=0)
lens.info()
fig = lens.draw(num_rays=5)
╒════╤═════════════════╤═══════════════════╤══════════╤═════════════╤════════════╤═════════╤═════════════════╕
│    │ Type            │ Comment           │   Radius │   Thickness │ Material   │   Conic │   Semi-aperture │
╞════╪═════════════════╪═══════════════════╪══════════╪═════════════╪════════════╪═════════╪═════════════════╡
│  0 │ Planar          │ scan mirror       │      inf │       153.2 │ Air        │       0 │          0      │
│  1 │ Planar          │ PCX front surface │      inf │         5   │ N-SF11     │       0 │         18.6577 │
│  2 │ Stop - Standard │ PCX back surface  │     -120 │       157.8 │ Air        │       0 │         19      │
│  3 │ Planar          │ image plane       │      inf │       nan   │ Air        │       0 │         18.7561 │
╘════╧═════════════════╧═══════════════════╧══════════╧═════════════╧════════════╧═════════╧═════════════════╛
../../_images/gallery_analysis_angle_vs_image_height_through_pupil_2_1.png
[3]:
angle_vs_height = PupilIncidentAngleVsHeight(lens)
angle_vs_height.view()
../../_images/gallery_analysis_angle_vs_image_height_through_pupil_3_0.png