Table of Contents

Class ChargeCoupledDevice

Namespace
NominalSystems.Classes
Assembly
NominalSystems.Classes.dll

[Nominal] A CCD (Charge-Coupled Device) is a sensor that captures light by converting photons into electrical charges at each pixel, which are then transferred sequentially to produce a digital image. Known for high image quality, CCDs excel in applications requiring low noise and precise light detection, such as astronomy and professional photography. This sensor is useful for determining the noise at a particular location in the simulation, due to atmospheric and light effects.


public class ChargeCoupledDevice : Sensor, IPayload
Inheritance
ChargeCoupledDevice
Implements

Constructors

ChargeCoupledDevice()

Default constructor

protected ChargeCoupledDevice()

Fields

Area

The total area of the CCD sensor. This is the area of the sensor covered by the pixels in square millimeters.

[Unit("mm²")]
[Range(1E-06, 1.7976931348623157E+308)]
public double Area

Field Value

double

AtmosphereAbsorption

A constant that represents the atmospheric absorption of the light that is captured by the CCD sensor. This is a value between 0 and 1, where 0 is no absorption and 1 is full absorption.

[Unit("")]
[Range(0, 1)]
public double AtmosphereAbsorption

Field Value

double

Bias

Represents the constant bias signal added to the sensor data. This accounts for any inherent offset in the sensor electronics, such as dark current, readout noise, or electronic biases. Bias is applied even when no light is detected, and should be subtracted during calibration to improve measurement accuracy.

[Unit("ADU")]
[Range(0, 2147483647)]
[Metadata(IsAdvanced = true)]
public double Bias

Field Value

double

CaptureOnTick

A flag whether the sensor should capture an image each frame.

[Unit("")]
[Metadata(IsAdvanced = true)]
public bool CaptureOnTick

Field Value

bool

DarkCurrentNoise

Dark current noise, which is caused by the small current that flows through the sensor even in the absence of light. This current is related to the sensor's temperature and is responsible for generating a constant noise level in the absence of photons.

[Unit("ADU")]
[Range(0, 2147483647)]
[Metadata(IsAdvanced = true)]
public double DarkCurrentNoise

Field Value

double

Efficiency

The quantum efficiency of the CCD sensor. This is the fraction of photons that are converted into electrons at each pixel.

[Unit("")]
[Range(0, 1)]
public double Efficiency

Field Value

double

ExposureTime

The exposure time of the CCD sensor. This is the time in seconds that the sensor is exposed to light.

[Unit("s")]
[Range(1E-06, 1.7976931348623157E+308)]
public double ExposureTime

Field Value

double

FOV

The field of view of the CCD sensor. This is the angle in degrees and represents the angle of the sensor's view.

[Unit("deg")]
[Range(1E-06, 180)]
public double FOV

Field Value

double

In_PlanetStateMsg

A reference to the planet state, which comes from the planet in the simulation that this object exists on. This is optional.

public PlanetStateMessage? In_PlanetStateMsg

Field Value

PlanetStateMessage

In_SunPlanetStateMsg

A reference to the sun planet state, used for calculating the distance to the sun.

public PlanetStateMessage? In_SunPlanetStateMsg

Field Value

PlanetStateMessage

IsEarthGrounded

A flag whether the sensor is grounded on the Earth and should experience the effects from the Earth's atmosphere.

[Hidden]
public bool IsEarthGrounded

Field Value

bool

MaximumADU

This is the maximum ADU (Analog-to-Digital Unit) value that each pixel can have. This is the maximum value that the sensor can record for each pixel.

[Unit("ADU")]
[Range(1, 2147483647)]
public int MaximumADU

Field Value

int

Out_CCDDataMsg

The output message that contains the raw data from the CCD sensor, once an image has been taken.

public CCDDataMessage? Out_CCDDataMsg

Field Value

CCDDataMessage

PointSpreadFactor

A constant that represents the point spread function of the pixels on the CCD sensor. This is a value between 0 and 1, where 0 corresponds to a perfect point and 1 corresponds to a spread across the entire pixel.

[Unit("")]
[Range(0, 1)]
public double PointSpreadFactor

Field Value

double

QuantizationNoise

Quantization noise, which results from the discrete nature of digital signal processing. It occurs because the continuous signal is sampled and rounded to a finite precision (e.g., limited bit-depth of the sensor).

[Unit("ADU")]
[Range(0, 2147483647)]
[Metadata(IsAdvanced = true)]
public double QuantizationNoise

Field Value

double

ReadoutNoise

Readout noise, which is introduced by the sensor's electronics when reading the signal from the sensor pixels. This noise is caused by imperfections in the sensor's analog-to-digital conversion process and is typically fixed for a given sensor.

[Unit("ADU")]
[Range(0, 2147483647)]
[Metadata(IsAdvanced = true)]
public double ReadoutNoise

Field Value

double

SpectralWavelength

The spectral wavelength of the CCD sensor. This is the wavelength in nanometers that the sensor is sensitive to.

[Unit("nm")]
[Range(1, 1.7976931348623157E+308)]
public double SpectralWavelength

Field Value

double

TargetData

A list of target data that is used to store the data from the sensor. This is for serialization purposes and is used to store the targets.

[Hidden]
public List<JObject> TargetData

Field Value

List<JObject>

ThermalNoise

Thermal noise, which arises from the random motion of charge carriers (electrons, for example) in the sensor material due to its temperature. This type of noise is present even when no light is detected and increases with the sensor's temperature.

[Unit("ADU")]
[Range(0, 2147483647)]
[Metadata(IsAdvanced = true)]
public double ThermalNoise

Field Value

double

Properties

Data

The data that is captured by the CCD sensor. This is the raw data that is captured by the sensor and is used to create an image. It is an array of integers, corresponding to the top-left pixel to the bottom-right pixel.

[Unit("ADU")]
[ReadOnly]
[Metadata(ContainedIn = "Out_CCDDataMsg")]
public int[] Data { get; }

Property Value

int[]

MeanNoise

The average noise of the CCD sensor. This is the average noise across all of the pixels in the sensor from the most recent capture.

[Unit("ADU")]
[ReadOnly]
[Metadata(ContainedIn = "Out_CCDDataMsg")]
public int MeanNoise { get; }

Property Value

int

MeanSignal

The average signal and noise of the CCD sensor. This is the average across all of the pixels in the sensor from the most recent capture.

[Unit("ADU")]
[ReadOnly]
[Metadata(ContainedIn = "Out_CCDDataMsg")]
public int MeanSignal { get; }

Property Value

int

NumTargets

The number of targets that the CCD sensor can see, including any light sources or stars.

[Unit("")]
[ReadOnly]
[Metadata(IsAdvanced = true)]
public int NumTargets { get; }

Property Value

int

Resolution

The resolution of the CCD sensor. This is the number of pixels along each axis.

[Unit("px")]
[Range(1, 64)]
[Metadata(ContainedIn = "Out_CCDDataMsg")]
public int Resolution { get; set; }

Property Value

int

SignalToNoise

The signal-to-noise ratio of the CCD sensor. This is the ratio of the average signal to the average noise in the sensor.

[Unit(UnitType.DECIBEL)]
[ReadOnly]
[Metadata(ContainedIn = "Out_CCDDataMsg")]
public double SignalToNoise { get; }

Property Value

double

TotalSignal

The total signal of the CCD sensor. This is the sum of all the pixel values in the sensor from the most recent capture.

[Unit("ADU")]
[ReadOnly]
[Metadata(ContainedIn = "Out_CCDDataMsg")]
public int TotalSignal { get; }

Property Value

int

Methods

AddTarget(UniverseObject?, double, double, double)

Adds a target to the list of targets that the CCD sensor can see. This will create a new target with the specified parameters.

public void AddTarget(UniverseObject? obj, double diameter, double luminosity, double albedo)

Parameters

obj UniverseObject

The object to add

diameter double

[m] The diameter of the target

luminosity double

[W] The absolute luminosity of the target

albedo double

[-] The albedo fraction of the target reflection

AddTargetStruct(LightTarget)

Adds a target to the list of targets that the CCD sensor can see.

[Hidden]
public void AddTargetStruct(LightTarget target)

Parameters

target LightTarget

The target to add

Capture()

A method that will capture the data of the payload and store it in some form of byte array.

public void Capture()

ClearBuffer()

Clears the cache of the CCD sensor, which will reset the data buffer to an empty state.

public void ClearBuffer()

OnBegin(double)

Called when the object is beginning ticking for the first time. This is when the simulation calls the very first tick and will run before the update call.

protected override void OnBegin(double time)

Parameters

time double

[s] Current time of the simulation before the tick

OnCreate()

Called when the 'Component' is created from the controller.

protected override void OnCreate()

OnLoad(double)

Called after all of the data has been loaded from a save state on this object. This enables any post-load operations to be performed and extra data to be loaded from the metadata.

protected override void OnLoad(double time)

Parameters

time double

[s] The current clock time of the simulation

OnSave()

Called before the object is saved into the save state. This ensures that any additional metadata can be saved on the object before it is automatically serialized.

protected override void OnSave()

OnUpdate(double, double)

Called when the object should update from the simulation tick. This will take in a time and a step, where the time is the time of the clock before updating the object.

protected override void OnUpdate(double time, double step)

Parameters

time double

[s] Current time of the simulation before the update

step double

[s] The time-step to update during this tick

RemoveTarget(UniverseObject)

Removes a target from the list of targets that the CCD sensor can see.

public void RemoveTarget(UniverseObject obj)

Parameters

obj UniverseObject

The object to remove

ShutDown()

Disables this device and zeroes out the data.

public void ShutDown()