Projection Lens (210° FOV)

[1]:
from __future__ import annotations

import optiland.backend as be
from optiland import optic
[2]:
class ProjectionLens210FOV(optic.Optic):
    """A 210-degree FOV projection lens.

    Reference: Milton Laikin, Lens Design, 4th ed., CRC Press, 2007, Table 9.5.
    """

    def __init__(self):
        super().__init__()

        # Object surface (infinite distance)
        self.surfaces.add(index=0, radius=be.inf, thickness=be.inf)

        # Lens surfaces from Table 9.5
        self.surfaces.add(index=1, radius=21.1576, thickness=0.7000, material="N-K5")
        self.surfaces.add(index=2, radius=4.4088, thickness=1.6598)
        self.surfaces.add(index=3, radius=6.1240, thickness=0.6000, material="N-K5")
        self.surfaces.add(index=4, radius=2.6351, thickness=2.8079)
        self.surfaces.add(index=5, radius=-4.9887, thickness=0.6898, material="N-K5")
        self.surfaces.add(index=6, radius=-2.9312, thickness=0.4000, material="SF4")
        self.surfaces.add(index=7, radius=-3.0217, thickness=0.6229, material="N-PSK3")
        self.surfaces.add(index=8, radius=2.3857, thickness=0.8744)
        self.surfaces.add(index=9, radius=22.0209, thickness=0.7000, material="SF4")
        self.surfaces.add(index=10, radius=-8.2506, thickness=0.8566)
        self.surfaces.add(
            index=11, radius=101.6268, thickness=0.7000, material="N-SSK5"
        )
        self.surfaces.add(index=12, radius=-12.9224, thickness=0.4212)
        self.surfaces.add(index=13, radius=7.5022, thickness=0.5714, material="SF4")
        self.surfaces.add(index=14, radius=29.4757, thickness=0.2557)
        self.surfaces.add(index=15, radius=7.6940, thickness=0.4131, material="SF5")
        self.surfaces.add(index=16, radius=19.1201, thickness=0.5462)

        # Surface 17 is the Stop
        self.surfaces.add(index=17, radius=be.inf, thickness=0.1681, is_stop=True)

        self.surfaces.add(index=18, radius=-3.7912, thickness=0.2042, material="SF5")
        self.surfaces.add(index=19, radius=4.0170, thickness=0.2330, material="N-LAK7")
        self.surfaces.add(index=20, radius=-3.5074, thickness=0.0496)
        self.surfaces.add(index=21, radius=9.6933, thickness=0.6446, material="N-LAK7")
        self.surfaces.add(index=22, radius=-1.6179, thickness=0.2000, material="SF4")
        self.surfaces.add(index=23, radius=-6.4888, thickness=0.0150)
        self.surfaces.add(index=24, radius=3.5035, thickness=0.5518, material="N-LAK7")
        self.surfaces.add(index=25, radius=-68.3415, thickness=2.2162)

        # Image plane
        self.surfaces.add(index=26, radius=be.inf, thickness=0.0)

        # Aperture settings
        self.set_aperture("imageFNO", 2.0)

        # Field settings (0, 30, 60, 85, 105 degrees)
        self.fields.set_type("angle")
        self.fields.add(y=0.0)
        self.fields.add(y=30.0)
        self.fields.add(y=60.0)
        self.fields.add(y=85.0)
        self.fields.add(y=105.0)

        # Wavelength settings (F, d, C lines in micrometers)
        self.wavelengths.add(value=0.4861)  # F line
        self.wavelengths.add(value=0.5876, is_primary=True)  # d line
        self.wavelengths.add(value=0.6563)  # C line

        self.ray_tracer.set_aiming("robust")
[3]:
lens = ProjectionLens210FOV()
[4]:
_ = lens.draw()
../../_images/gallery_specialized_lenses_projection_210fov_4_0.png