Detector#

class furst.detectors.Detector(name='detector', manufacturer='', model_number='', serial_number='', width_pixel=<Quantity 0. mm>, axis_pixel=None, num_pixel=0, num_pixel_overscan=0, num_pixel_blank=0, material=None, rowland_radius=<Quantity 0. mm>, rowland_azimuth=<Quantity 0. deg>, translation=<Quantity 0. mm>, pitch=<Quantity 0. deg>, yaw=<Quantity 0. deg>, roll=<Quantity 0. deg>, temperature=<Quantity 0. K>, gain=<Quantity 0. electron / DN>, readout_noise=<Quantity 0. DN>, dark_current=<Quantity 0. electron / s>, charge_diffusion=<Quantity 0. um>, timedelta_transfer=<Quantity 0. s>, timedelta_readout=<Quantity 0. s>, timedelta_exposure=<Quantity 0. s>, timedelta_exposure_min=<Quantity 0. s>, timedelta_exposure_max=<Quantity 0. s>, bits_adc=0)[source]#

Bases: Rollable, Yawable, Pitchable, Translatable, AbstractRowlandComponent

A model of FURST’s imaging sensor and camera.

These are manufactured by Marshall Space Flight Center for use with FURST.

Examples

Plot the surface of the detector and the Rowland circle.

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 furst

# Define the Rowland circle
rowland_radius = 1000 * u.mm
a = na.linspace(0, 360, axis="angle", num=1001) * u.deg
rowland_circle = rowland_radius * na.Cartesian3dVectorArray(
    x=np.sin(a),
    z=np.cos(a),
)

# Define the grating model
detector = furst.detectors.Detector(
    width_pixel=15 * u.um,
    axis_pixel=na.Cartesian2dVectorArray(
        x="detector_x",
        y="detector_y",
    ),
    num_pixel=4096,
    material=optika.materials.Mirror(),
    rowland_radius=rowland_radius,
    rowland_azimuth=10 * u.deg,
)

# Plot the grating surface and the Rowland circle
with astropy.visualization.quantity_support():
    fig, ax = plt.subplots()
    na.plt.plot(
        rowland_circle,
        ax=ax,
        components=("z", "x"),
        color="black",
        linestyle="dashed",
        zorder=-10,
    )
    detector.surface.plot(
        ax=ax,
        components=("z", "x"),
        color="tab:orange",
    )
    ax.set_aspect("equal")
    ax.set_xlim(960 * u.mm, 1020 * u.mm)
    ax.set_ylim(120 * u.mm, 220 * u.mm)
../_images/furst.detectors.Detector_0_0.png

Attributes

axis_pixel

The name of each axis of the pixel array.

bits_adc

The number of bits collected by the analog-to-digital converter on this detector.

charge_diffusion

The standard deviation of the charge diffusion kernel.

dark_current

The amount of dark signal measured by the detector at the current temperature.

gain

The ratio between the number of electrons measured by the sensor and the data number reported by the ADC

manufacturer

The company that manufactured this detector.

material

A model of the light-sensitive material of this detector.

model_number

The model number of this detector.

name

The human-readable name of this detector.

num_pixel

The number of pixels along each axis of the pixel array.

num_pixel_blank

The number of blank columns for each tap.

num_pixel_overscan

The number of overscan columns for each tap.

pitch

The angle of rotation about the long axis of the detector.

readout_noise

The standard deviation of the noise introduced by the readout electronics.

roll

The angle of rotation about the vector normal to the surface of the detector.

rowland_azimuth

The azimuth of the center of the detector on the Rowland circle, relative to the optic axis of the instrument.

rowland_radius

The distance from the center of the Rowland circle to the center of the detector.

serial_number

The unique serial number associated with this detector.

surface

Convert this object into an instance of optika.surfaces.AbstractSurface.

temperature

The operating temperature of this detector.

timedelta_exposure

The current exposure time of this detector.

timedelta_exposure_max

The maximum exposure time allowed by this detector.

timedelta_exposure_min

The minimum exposure time allowed by this detector.

timedelta_readout

The time required to digitize an image collected by the sensor.

timedelta_transfer

The time required to transfer an image from the light-sensitive area of the detector to the masked area.

transformation

the coordinate transformation between the global coordinate system and this object's local coordinate system

translation

Physical offset from the optic's nominal position on the Rowland circle.

width_pixel

The physical width of a pixel for this detector.

yaw

The angle of rotation about the short axis of the detector.

Methods

__init__([name, manufacturer, model_number, ...])

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 furst.detectors.Detector
Parameters:
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_pixel: None | Cartesian2dVectorArray[str, str] = None#

The name of each axis of the pixel array.

bits_adc: int = 0#

The number of bits collected by the analog-to-digital converter on this detector.

charge_diffusion: Quantity | AbstractScalar = <Quantity 0. um>#

The standard deviation of the charge diffusion kernel.

dark_current: Quantity | ScalarArray = <Quantity 0. electron / s>#

The amount of dark signal measured by the detector at the current temperature.

gain: Quantity | ScalarArray = <Quantity 0. electron / DN>#

The ratio between the number of electrons measured by the sensor and the data number reported by the ADC

manufacturer: str = ''#

The company that manufactured this detector.

material: None | AbstractSensorMaterial = None#

A model of the light-sensitive material of this detector.

model_number: str = ''#

The model number of this detector.

name: str = 'detector'#

The human-readable name of this detector.

num_pixel: int | Cartesian2dVectorArray[int, int] = 0#

The number of pixels along each axis of the pixel array.

num_pixel_blank: int = 0#

The number of blank columns for each tap.

num_pixel_overscan: int = 0#

The number of overscan columns for each tap.

pitch: Quantity | AbstractScalar = <Quantity 0. deg>#

The angle of rotation about the long axis of the detector.

readout_noise: Quantity | ScalarArray = <Quantity 0. DN>#

The standard deviation of the noise introduced by the readout electronics.

roll: Quantity | AbstractScalar = <Quantity 0. deg>#

The angle of rotation about the vector normal to the surface of the detector.

rowland_azimuth: Quantity | AbstractScalar = <Quantity 0. deg>#

The azimuth of the center of the detector on the Rowland circle, relative to the optic axis of the instrument.

rowland_radius: Quantity | AbstractScalar = <Quantity 0. mm>#

The distance from the center of the Rowland circle to the center of the detector.

serial_number: str = ''#

The unique serial number associated with this detector.

property surface: ImagingSensor#

Convert this object into an instance of optika.surfaces.AbstractSurface.

temperature: Quantity | ScalarArray = <Quantity 0. K>#

The operating temperature of this detector.

timedelta_exposure: Quantity | AbstractScalar = <Quantity 0. s>#

The current exposure time of this detector.

timedelta_exposure_max: Quantity | AbstractScalar = <Quantity 0. s>#

The maximum exposure time allowed by this detector.

timedelta_exposure_min: Quantity | AbstractScalar = <Quantity 0. s>#

The minimum exposure time allowed by this detector.

timedelta_readout: Quantity | AbstractScalar = <Quantity 0. s>#

The time required to digitize an image collected by the sensor.

timedelta_transfer: Quantity | AbstractScalar = <Quantity 0. s>#

The time required to transfer an image from the light-sensitive area of the detector to the masked area.

property transformation: AbstractTransformation#

the coordinate transformation between the global coordinate system and this object’s local coordinate system

translation: Quantity | AbstractCartesian3dVectorArray = <Quantity 0. mm>#

Physical offset from the optic’s nominal position on the Rowland circle.

width_pixel: Quantity | AbstractCartesian2dVectorArray = <Quantity 0. mm>#

The physical width of a pixel for this detector.

yaw: Quantity | AbstractScalar = <Quantity 0. deg>#

The angle of rotation about the short axis of the detector.