Dyson Imaging Spectrometer

[1]:
from optiland import optic, analysis
import numpy as np
[2]:
class DysonSpectrometer(optic.Optic):
    """Dyson imaging spectrometer
    J. Dyson "Unit Magnification Optical system without Seidel aberrations"
    J. Opt. Soc. Am. 49, 713-716 (1959)

    """

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


        self.surfaces.add(index=0, radius=np.inf, thickness = 18.0)
        self.surfaces.add(index=1, radius=135.903, thickness=33.53, material="N-BK7",aperture = 60)
        self.surfaces.add(index=2, radius=-67.699, thickness=60.668, aperture = 60)
        self.surfaces.add(index=3, radius=-51.467, thickness=8.413, material="N-BK7", aperture = 50)
        self.surfaces.add(index=4, radius=-65.577, thickness=39.389, aperture = 50, conic = -0.132)
        self.surfaces.add(
            index=5,
            radius=-154.020,
            thickness=-39.389,
            material = "mirror",
            surface_type="grating",
            grating_order = 1,
            grating_period = 10.0,
            groove_grating_angle = 0.0*np.pi,
            is_stop=True,
            )
        self.surfaces.add(index=6, radius=-65.577, thickness=-8.413, material="N-BK7", aperture = 50, conic = -0.132)
        self.surfaces.add(index=7, radius=-51.467, thickness=-60.668, aperture = 50)
        self.surfaces.add(index=8, radius=-67.699, thickness=-33.53, material="N-BK7",aperture = 60)
        self.surfaces.add(index=9, radius=135.903, thickness = -18.0,aperture = 60)
        self.surfaces.add(index=10)

        # add aperture
        self.set_aperture(aperture_type="float_by_stop_size", value=40)

        # add field
        self.fields.set_type(field_type="object_height")
        self.fields.add(x=0,y=0)
        self.fields.add(x=10,y=0)
        self.fields.add(x=20,y=0)
        #self.fields.add(x=-20,y=0)

        # add wavelength
        self.wavelengths.add(value=0.550, is_primary=True)
        self.wavelengths.add(value=0.450)
        self.wavelengths.add(value=0.850)
[3]:
spectrometer = DysonSpectrometer()
_ = spectrometer.draw(wavelengths = [0.450, 0.550, 0.850], num_rays=5)
../../_images/gallery_diffractive_Dyson_Spectrometer_3_0.png
[4]:
spot = analysis.SpotDiagram(spectrometer,num_rings=12)
_ = spot.view()
../../_images/gallery_diffractive_Dyson_Spectrometer_4_0.png
[5]:
spot = analysis.SpotDiagram(spectrometer,num_rings=12,wavelengths= [0.550])
_ = spot.view()
../../_images/gallery_diffractive_Dyson_Spectrometer_5_0.png