Camera#

class esis.optics.Camera(sensor=None, gain=<Quantity 2.5 electron / DN>, bits_adc=16, timedelta_exposure=<Quantity 10. s>, timedelta_exposure_min=<Quantity 2. s>, timedelta_exposure_max=<Quantity 600. s>, timedelta_exposure_step=<Quantity 100. ms>, timedelta_transfer=<Quantity 50. ms>, timedelta_readout=<Quantity 1.1 s>, timedelta_sync=<Quantity 0. s>, channel='', channel_trigger=0, *, axis_tap_x='tap_x', axis_tap_y='tap_y')[source]#

Bases: Replaceable, Camera

A model of the cameras developed by MSFC.

Attributes

axis_tap_x

The name of the logical axis corresponding to changing horizontal tap.

axis_tap_y

The name of the logical axis corresponding to changing vertical tap.

bits_adc

The number of bits supported by the analog-to-digital converter

channel

Human-readable name of each channel of this camera array.

channel_trigger

The master channel which triggers the other channels to start exposing.

gain

The conversion factor between electrons and DN.

sensor

A model of the sensor used by this camera to capture light.

surface

Represent this object as an optika surface.

timedelta_exposure

The current exposure length.

timedelta_exposure_max

The maximum exposure length supported by this camera

timedelta_exposure_min

The minimum exposure length supported by this camera.

timedelta_exposure_step

The smallest possible change in exposure length supported by this camera.

timedelta_readout

The time required to perform a readout operation.

timedelta_sync

The synchronization error between the different channels.

timedelta_transfer

The time required to transfer the exposed pixels into the storage region.

Methods

__init__([sensor, gain, bits_adc, ...])

calibrate_temperature_adc_1(value)

Convert the ADC 1 temperature from counts to physical units.

calibrate_temperature_adc_234(value)

Convert the ADC 2, 3, or 4 temperature from counts to physical units.

calibrate_temperature_fpga(value)

Convert the FPGA temperature from counts to physical units.

calibrate_timedelta_exposure(value)

Convert the exposure time from counts to physical units.

calibrate_voltage_fpga(value)

Convert the FPGA voltage from counts to physical units.

dn_to_electrons(a)

Convert an array from DN to electrons by multiplying by gain.

replace(**changes)

A copy of this object with the given fields replaced.

to_string([prefix])

Public-facing version of the __repr__ method that allows for defining a prefix string, which can be used to calculate how much whitespace to add to the beginning of each line of the result.

Inheritance Diagram

Inheritance diagram of esis.optics.Camera
Parameters:
classmethod calibrate_temperature_adc_1(value)#

Convert the ADC 1 temperature from counts to physical units.

Parameters:

value (int) – The ADC 1 temperature in counts.

Return type:

Quantity

classmethod calibrate_temperature_adc_234(value)#

Convert the ADC 2, 3, or 4 temperature from counts to physical units.

Parameters:

value (int) – The ADC 2, 3, or 4 temperature in counts.

Return type:

Quantity

classmethod calibrate_temperature_fpga(value)#

Convert the FPGA temperature from counts to physical units.

Parameters:

value (int) – The FPGA temperature in counts.

Return type:

Quantity

classmethod calibrate_timedelta_exposure(value)#

Convert the exposure time from counts to physical units.

Parameters:

value (int) – The exposure time in counts.

Return type:

Quantity

classmethod calibrate_voltage_fpga(value)#

Convert the FPGA voltage from counts to physical units.

Parameters:

value (int) – The FPGA voltage in counts.

Return type:

Quantity

dn_to_electrons(a)#

Convert an array from DN to electrons by multiplying by gain.

Parameters:

a (Quantity | AbstractArray) – The array, in units of DN, to convert into units of electrons.

Raises:

ValueError – If gain is None, since there is no measured default gain for these cameras.

Return type:

AbstractArray

replace(**changes)#

A copy of this object with the given fields replaced.

A method version of dataclasses.replace(), matching named_arrays.AbstractArray.replace(), so that a nested change reads the same at every level:

system.replace(
    surface=system.surface.replace(
        sag=system.surface.sag.replace(radius=r),
    ),
)

The copy is shallow, as dataclasses.replace() is: every field which is not named is shared with the original, and mutating one through the copy is mutating it in both. Take copy.deepcopy() of the result where that matters.

Parameters:

changes – The fields to overwrite in the copy.

Return type:

Self

to_string(prefix=None)#

Public-facing version of the __repr__ method that allows for defining a prefix string, which can be used to calculate how much whitespace to add to the beginning of each line of the result.

Parameters:

prefix (None | str) – an optional string, the length of which is used to calculate how much whitespace to add to the result.

Return type:

str

axis_tap_x: str = 'tap_x'#

The name of the logical axis corresponding to changing horizontal tap.

axis_tap_y: str = 'tap_y'#

The name of the logical axis corresponding to changing vertical tap.

bits_adc: int = 16#

The number of bits supported by the analog-to-digital converter

channel: str | AbstractScalar = ''#

Human-readable name of each channel of this camera array.

channel_trigger: int = 0#

The master channel which triggers the other channels to start exposing.

gain: None | Quantity | AbstractScalar = <Quantity 2.5 electron / DN>#

The conversion factor between electrons and DN.

This is usually tap-dependent and contains axis_tap_x and axis_tap_y dimensions.

sensor: None | Sensor = None#

A model of the sensor used by this camera to capture light.

If None (the default), esis.optics.Sensor() will be used.

property surface: AbstractImagingSensor#

Represent this object as an optika surface.

timedelta_exposure: Quantity = <Quantity 10. s>#

The current exposure length.

timedelta_exposure_max: Quantity = <Quantity 600. s>#

The maximum exposure length supported by this camera

timedelta_exposure_min: Quantity = <Quantity 2. s>#

The minimum exposure length supported by this camera.

timedelta_exposure_step: Quantity = <Quantity 100. ms>#

The smallest possible change in exposure length supported by this camera.

timedelta_readout: Quantity = <Quantity 1.1 s>#

The time required to perform a readout operation.

timedelta_sync: Quantity = <Quantity 0. s>#

The synchronization error between the different channels.

timedelta_transfer: Quantity = <Quantity 50. ms>#

The time required to transfer the exposed pixels into the storage region.