Charge Transfer models (CCD)#
Important
This model group is only for CCD detectors!
Charge transfer models are used to manipulate data in Pixel
array
inside the Detector
object.
Multiple models can be linked together one after another.
Create and Store a detector#
The models Save detector and Load detector
can be used respectively to create and to store a Detector
to/from a file.
These models can be used when you want to store or to inject a Detector
into the current Pipeline.
Save detector#
This model saves the current Detector
into a file.
Accepted file formats are .h5
, .hdf5
, .hdf
and .asdf
.
- name: save_detector
func: pyxel.models.save_detector
enabled: true
arguments:
filename: my_detector.h5
- pyxel.models.save_detector(detector, filename)[source]
Save the current detector into a file.
Load detector#
This model loads a Detector
from a file and injects it in the current pipeline.
Accepted file formats are .h5
, .hdf5
, .hdf
and .asdf
.
- name: load_detector
func: pyxel.models.load_detector
enabled: true
arguments:
filename: my_detector.h5
Charge Distortion Model (CDM)#
Note
This model is specific for the CCD detector.
Pixel → Pixel
The Charge Distortion Model - CDM [20] describes the effects of the radiation damage causing charge deferral and image shape distortion. The analytical model is physically realistic, yet fast enough. It was developed specifically for the Gaia CCD operating mode, implemented in Fortran and Python. However, a generalized version has already been applied in a broader context, for example to investigate the impact of radiation damage on the Euclid mission. This generalized version has been included and used in Pyxel.
Use this model to add radiation induced CTI effects to Pixel
array of the
to CCD
detector. Argument direction
should be set as either "parallel"
for parallel direction CTI or "serial"
for serial register CTI.
User should also set arguments trap_release_times
, trap_densities
and sigma
as lists for an arbitrary number of trap species. See below for descriptions.
Other arguments include max_electron_volume
, transfer_period
,
charge injection
for parallel mode and full_well_capacity
to override the one set in
detector Characteristics
.

CDM (Charge Distortion Model)#
Note
You can find examples of this model in these Jupyter Notebooks from Pyxel Data:
Example of the configuration file.
- name: cdm
func: pyxel.models.charge_transfer.cdm
enabled: true
arguments:
direction: "parallel"
trap_release_times: [0.1, 1.]
trap_densities: [0.307, 0.175]
sigma: [1.e-15, 1.e-15]
beta: 0.3
max_electron_volume: 1.e-10,
transfer_period: float = 1.e-4,
charge_injection: true # only used for parallel mode
full_well_capacity: 1000. # optional (otherwise one from detector characteristics is used)
- pyxel.models.charge_transfer.cdm(detector, direction, beta, trap_release_times, trap_densities, sigma, full_well_capacity=None, max_electron_volume=0.0, transfer_period=0.0, charge_injection=False, electron_effective_mass=0.5)[source]#
Charge Distortion Model (CDM) model wrapper.
- Parameters:
detector (
CCD
) – Pyxel CCD detector object.direction (
literal
) – Set"parallel"
for CTI in parallel direction or"serial"
for CTI in serial register.beta (
float
) – Electron cloud expansion coefficient \(\beta\).trap_release_times (
sequence
offloat
) – Trap release time constants \(\tau_r\). Unit: \(s\).trap_densities (
sequence
offloat
) – Absolute trap densities \(n_t\). Unit: \(cm^{-3}\).sigma (
sequence
offloat
) – Trap capture cross section \(\sigma\). Unit: \(cm^2\).full_well_capacity (
float
) – Full well capacity \(FWC\). Unit: \(e^-\).max_electron_volume (
float
) – Maximum geometrical volume \(V_g\) that electrons can occupy within a pixel. Unit: \(cm^3\).transfer_period (
float
) – Transfer period \(t\) (TDI period). Unit: \(s\).charge_injection (
bool
) – Enable charge injection (only used in"parallel"
mode).electron_effective_mass (
float
) – Electron effective mass in the semiconductor lattice. Unit: 1 electron mass
Notes
For more information, you can find examples here:
Add CTI trails#
Pixel → Pixel
Add image trails due to charge transfer inefficiency in CCD detectors by modelling the trapping, releasing, and moving of charge along pixels.
The primary inputs are the initial image followed by the properties of the CCD, readout electronics and trap species for serial clocking.
More information about adding CTI trailing is described in section 2.1 in [21].
Example of the configuration file:
- name: arctic_add
func: pyxel.models.charge_transfer.arctic_add
enabled: true
arguments:
well_fill_power: 10.
trap_densities: [1., 2., 3.] # Add three traps
trap_release_timescales: [10., 20., 30.]
express: 0
- pyxel.models.charge_transfer.arctic_add(detector, well_fill_power, trap_densities, trap_release_timescales, express=0)[source]#
Add CTI trails to an image by trapping, releasing and moving electrons.
- Parameters:
well_fill_power (
float
)trap_densities (
sequence
offloat
) – A 1D arrays of all trap species densities for serial clocking.trap_release_timescales (
sequence
offloat
) – A 1D arrays of all trap release timescales for serial clocking.express (
int
) – As described in more detail in [22] section 2.1.5, the effects of each individual pixel-to-pixel transfer can be very similar, so multiple transfers can be computed at once for efficiency. Theexpress
input sets the number of times the transfers are calculated.express = 1
is the fastest and least accurate.express = 2
means the transfers are re-computed half-way through readout.express = N
whereN
is the total number of pixels.
Default
express = 0
is a convenient input for automaticexpress = N
.
Notes
The external library arcticpy is used to add the CTI trails.
Remove CTI trails#
Pixel → Pixel
Remove CTI trails is done by iteratively modelling the addition of CTI, as described in [21] section 3.2 and Table 1.
Example of the configuration file:
- name: arctic_remove
func: pyxel.models.charge_transfer.arctic_remove
enabled: true
arguments:
well_fill_power: 10.
instant_traps: # Add two traps
- density: 1.0
release_timescale: 10.0
- density: 2.0
release_timescale: 20.0
express: 0
- pyxel.models.charge_transfer.arctic_remove(detector, well_fill_power, trap_densities, trap_release_timescales, num_iterations, express=0)[source]#
Remove CTI trails from an image by first modelling the addition of CTI.
- Parameters:
well_fill_power (
float
)trap_densities
trap_release_timescales
num_iterations (
int
) – Number of iterations for the forward modelling. More iterations provide higher accuracy at the cost of longer runtime. In practice, just 1 to 3 iterations are usually sufficient.express (
int
) – As described in more detail in [22] section 2.1.5, the effects of each individual pixel-to-pixel transfer can be very similar, so multiple transfers can be computed at once for efficiency. Theexpress
input sets the number of times the transfers are calculated.express = 1
is the fastest and least accurate.express = 2
means the transfers are re-computed half-way through readout.express = N
whereN
is the total number of pixels.
Default
express = 0
is a convenient input for automaticexpress = N
.
EMCCD Model#
Note
This model is specific for the CCD detector.
Pixel → Pixel
The Electron Multiplying CCD (EMCCD) model for the CCD detector includes a multiplication_register
.
This register takes each pixel, and applies a Poisson distribution, centered around the total_gain
.
Each pixel is inputted and iterated through the number of gain_elements
with probability of multiplication \(P\):
\(P = {G}^(\frac{1}{N_E}) - 1\)
\(G\) is the total gain, and \(N_E\) is the number of gain elements.
The output is a Pixel
array, with
each pixel having gone through a multiplication register.
Example of the configuration file:
- name: multiplication_register
func: pyxel.models.charge_transfer.multiplication_register
enabled: true
arguments:
gain_elements: 100
total_gain: 1000
EMCCD Clock Induced Charge (CIC)#
Pixel → Pixel
Clock Induced Charge (CIC), can be included with multiplication_register_cic
.
Here a parallel CIC rate, pcic_rate
, and serial CIC rate scic_rate
are specified,
and added to the Pixel
array.
Each gain_elements
has possibility to introduce a serial CIC event.
Serial and parallel CIC is assumed to be Poisson distributed.
Example of the configuration file:
- name: multiplication_register_cic
func: pyxel.models.charge_transfer.multiplication_register_cic
enabled: true
arguments:
gain_elements: 100
total_gain: 1000
pcic_rate: 0.01
scic_rate: 0.005
Note
You can find an example of this model used in this Jupyter Notebook EMCCD Observation Mode from Pyxel Data.
- pyxel.models.charge_transfer.multiplication_register_cic(detector, total_gain, gain_elements, pcic_rate, scic_rate)[source]#
Calculate total gain of image with EMCCD multiplication register.
- Parameters:
Notes
For more information, you can find an example here: EMCCD Observation Mode.
Note
This model is specific for photon counting, and should be used with very low individual pixel values.