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
pyxel.models.load_detector(detector, filename)[source]

Load a new detector from a file.

Raises:

TypeError – If the loaded detector has not the same type of the current detector.

Charge Distortion Model (CDM)#

Note

This model is specific for the CCD detector.

PixelPixel

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.

Poppy

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 of float) – Trap release time constants \(\tau_r\). Unit: \(s\).

  • trap_densities (sequence of float) – Absolute trap densities \(n_t\). Unit: \(cm^{-3}\).

  • sigma (sequence of float) – 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#

PixelPixel

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:
  • detector (CCD) – Pyxel CCD Detector object.

  • well_fill_power (float)

  • trap_densities (sequence of float) – A 1D arrays of all trap species densities for serial clocking.

  • trap_release_timescales (sequence of float) – 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. The express 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 where N is the total number of pixels.

    Default express = 0 is a convenient input for automatic express = N.

Notes

The external library arcticpy is used to add the CTI trails.

Remove CTI trails#

PixelPixel

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:
  • detector (CCD) – Pyxel CCD Detector object.

  • 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. The express 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 where N is the total number of pixels.

    Default express = 0 is a convenient input for automatic express = N.

EMCCD Model#

Note

This model is specific for the CCD detector.

PixelPixel

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
pyxel.models.charge_transfer.multiplication_register(detector, total_gain, gain_elements)[source]#

Calculate total gain of image with EMCCD multiplication register.

Takes in CCD detector along with the gain and the total elements of the EMCCD multiplication register.

Parameters:
  • detector (CCD)

  • total_gain (int)

  • gain_elements (int) – Amount of single stage gain elements in the EMCCD register.

EMCCD Clock Induced Charge (CIC)#

PixelPixel

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:
  • detector (CCD)

  • total_gain (int)

  • gain_elements (int) – Amount of single stage gain elements in the EMCCD register.

  • pcic_rate (float) – Parallel CIC rate

  • scic_rate (float) – Serial CIC rate

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.