design_single#

esis.flights.f1.optics.models.design_single(grid=None, num_distribution=11)#

Final ESIS optical design prepared by Charles Kankelborg and Hans Courrier.

This instance includes only one channel. Since the system is rotationally symmetric, sometimes it’s nice to model only one channel

Parameters:
  • grid (None | ObjectVectorArray) – sampling of wavelength, field, and pupil positions that will be used to characterize the optical system.

  • num_distribution (int) – number of Monte Carlo samples to draw when computing uncertainties

Return type:

OpticsModel

Examples

Plot the rays traveling through the optical system, as viewed from the side.

import numpy as np
import matplotlib.pyplot as plt
import astropy.units as u
import astropy.visualization
import named_arrays as na
import optika
import esis

grid = optika.vectors.ObjectVectorArray(
    wavelength=na.linspace(-1, 1, axis="wavelength",  num=2) / 2,
    field=0,
    pupil=na.Cartesian2dVectorLinearSpace(
        start=-1,
        stop=1,
        axis=na.Cartesian2dVectorArray("pupil_x", "pupil_y"),
        num=5,
    ),
)

model = esis.flights.f1.optics.models.design_single(
    grid=grid,
    num_distribution=0,
)

with astropy.visualization.quantity_support():
    fig, ax = plt.subplots(
        figsize=(8, 2),
        constrained_layout=True
    )
    ax.set_aspect("equal")
    model.system.plot(
        components=("z", "x"),
        color="black",
        kwargs_rays=dict(
            color=na.ScalarArray(np.array(["tab:orange", "tab:blue"]), axes="wavelength"),
            label=model.system.grid_input.wavelength.astype(int),
        ),
    );
    handles, labels = ax.get_legend_handles_labels()
    labels = dict(zip(labels, handles))
    fig.legend(labels.values(), labels.keys());
../_images/esis.flights.f1.optics.models.design_single_0_2.png