as_built#

esis.flights.f1.optics.as_built(grid=None, axis_channel='channel', num_distribution=11)[source]#

Load the as-built optical model, focused and pointed at the sensor.

The measured radii leave the as-built model imaging the O V line about eight pixels from where the design puts it. _as_built_focused() moves each grating along the optic axis until the spots are as small as the design’s, which happens to carry the line most of the way back, since the same error in the radius causes both the defocus and the displacement. It stops a pixel or two short.

The instrument which flew was aligned as well as focused, so this model rotates each grating about \(y\) afterwards, by a few arcseconds, until the center of the field of view lands where esis.optics.Sensor.position_image says it should.

This is the model of the instrument that flew, and the one to use. as_built_unfocused() and _as_built_focused() are the steps on the way to it, kept for comparison rather than for use.

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

  • axis_channel (str) – The name of the logical axis corresponding to changing camera channel.

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

Return type:

Instrument

Examples

Confirm the O V line lands where the sensor says it should.

import astropy.units as u
import named_arrays as na
import esis

instrument = esis.flights.f1.optics.as_built(num_distribution=0)

error = instrument.position_line(
    esis.flights.f1.spectrum.O_V.wavelength,
) - instrument.camera.sensor.position_image

na.nominal(error.length.to(u.um))
ScalarArray(
    ndarray=[0.54460087, 0.57571499, 0.57800339, 0.52791335] um,
    shape={'channel': 4},
)