Achromatic Doublet

[1]:
import numpy as np

from optiland import optic

Initialization empty ‘Optic’ object, which is the core class in Optiland representing an optical system.

[2]:
lens = optic.Optic()

Add surfaces, one at a time. We first define an N-BAK1 lens, which is bonded to an SF2 lens. The lens radii and thicknesses are defined as follows.

[3]:
# add surfaces
lens.surfaces.add(index=0, thickness=np.inf)
lens.surfaces.add(
    index=1,
    radius=12.38401,
    thickness=0.4340,
    is_stop=True,
    material="N-BAK1",
)
lens.surfaces.add(index=2, radius=-7.94140, thickness=0.3210, material=("SF2", "schott"))
lens.surfaces.add(index=3, radius=-48.44396, thickness=19.6059)
lens.surfaces.add(index=4)

Add the aperture. We choose image-space F-number (imageFNO) as the aperture type and choose a value of 6.

[4]:
# add aperture
lens.set_aperture(aperture_type="imageFNO", value=6.0)

Set the field type to angle and choose fields at 0.0, 3.5 and 5.0 degrees.

[5]:
# add field
lens.fields.set_type(field_type="angle")
lens.fields.add(y=0.0)
lens.fields.add(y=3.5)
lens.fields.add(y=5.0)

We add wavelengths across the visible spectrum based on the standard F, d and C lines Fraunhofer lines. The wavelength at 0.5876 microns is defined as the primary wavelength.

[6]:
# add wavelength
lens.wavelengths.add(value=0.4861)
lens.wavelengths.add(value=0.5876, is_primary=True)
lens.wavelengths.add(value=0.6563)

View the system in 2D:

[7]:
lens.draw(num_rays=10)
../../_images/gallery_basic_lenses_doublet_13_0.png