Skip to content

Commit

Permalink
Update compton_camera_imaging_simulations.rst
Browse files Browse the repository at this point in the history
CC doc2
  • Loading branch information
kochebina authored Dec 15, 2023
1 parent 71758b0 commit 71cfe78
Showing 1 changed file with 2 additions and 268 deletions.
270 changes: 2 additions & 268 deletions docs/compton_camera_imaging_simulations.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
.. _compton_camera_imaging_simulations-label:

Compton camera imaging simulations: CCMod (TO BE ADDED SOON IN GATE 9.3)
Compton camera imaging simulations: CCMod (MOVED TO GENERAL DIGITIZER SINCE GATE 9.3)
=======================================

.. contents:: Table of Contents
Expand Down Expand Up @@ -43,273 +43,7 @@ if we have three scatterer layers and we want to name them scatterer the name

There are no constrains for the geometry.



Digitization
-------------

The main purpose of the digitization is to simulate the behavior of the detector response. The same data structures (i. e. *Hits*, *Singles*, *Coincidences*) as in PET/SPECT systems have been employed to be able to share the digitizer modules between the systems and the CCMod. Therefore, the digitizer modules described in :ref:`digitizer_and_readout_parameters-label` can be directly applied to the Compton camera by inserting the modules using the following command. The key word *layers* instead of *singles* must be employed::

/gate/digitizer/layers/insert [Module name]

Most of the modules available for systems are global modules; thus, they are applied to all the considered sensitive volumes. However, a Compton camera system is typically composed of two different types of detectors (the scatterer and the absorber). Therefore, it is useful to apply a different digitization chain to each of them. To this end, in addition to the global modules, several local modules have been developed that are applied to specific volumes using the following command::

/gate/digitizer/layers/[Module name]/chooseNewVolume [SD volume name]



List of additional digitizer modules
-------------------------------------
Here, there is a list of the additional developed modules.
..
grid discretization (local module), clustering (local and global modules), ideal adder (local and global modules), DoI modeling (global module), time delay (local module), 3D spatial resolution (local module), multiple single rejection (local module), energy threshold module with different policies for effective energies (local and global modules).


Grid discretization module
~~~~~~~~~~~~~~~~~~~~~~~~~~
This module allows to simulate the readout of strip and pixelated detectors. Since it is a local module, the first thing is to attach it to a specific volume that must be acting as a SD::

/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/insert discretization

The number of the strips/pixels must be specified in X and Y directions. In addition, the width of the strips/pixel and an offset can be specified to take into account the insensitive material in the detector layer::


/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/discretization/setNumberStripsX [Nx]
/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/discretization/setNumberStripsY [Ny]
/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/discretization/setStripOffsetX [offSet_x]
/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/discretization/setStripOffsetY [offSet_y]
/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/discretization/setStripOffsetZ [offSet_z]
/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/discretization/setStripWidthX [size_x]
/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/discretization/setStripWidthY [size_y]
/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/discretization/setStripWidthZ [size_z]


The *hits* detected in the strips/pixels are merged at the center of the strip/pixel in each spatial direction. When strips are defined in both spatial directions, only the hits in the volume defined by the intersection of two strips are stored; thus, generating pixels.

When the grid discretization module is employed to reproduce the response of strip detectors, it should be generally applied followed by a strip activation energy threshold and a multiple single rejection module to avoid ambiguous strip-intersection identification.

On the other hand, when pixelated crystals are simulated, it can be of interest to apply the readout at the level of blocks composed of several pixels. The number of readout blocks can be set individually in each direction using the following commands::


/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/discretization/setNumberReadOutBlocksX [NBx]
/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/discretization/setNumberReadOutBlocksY [NBy]

The energy in the block corresponds to the sum of the deposited energy and the position to the energy weighted centroid position in the pixels that composed the block.

Example::


/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/insert discretization
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/discretization/setNumberStripsX 1
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/discretization/setNumberStripsY 1
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/discretization/setStripOffsetX 0.2 cm
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/discretization/setStripOffsetY 0.2 cm
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/discretization/setStripOffsetZ 0.2 cm
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/discretization/setStripWidthX 0.3 cm
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/discretization/setStripWidthY 0.3 cm
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/discretization/setStripWidthZ 0.3 cm
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/discretization/setNumberReadOutBlocksX 1
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/discretization/setNumberReadOutBlocksY 1

Clustering module
~~~~~~~~~~~~~~~~~
This module has been designed with monolithic crystals read-out by segmented photodetectors in mind. Both versions the global module and its local counterpart have been developed::

/gate/digitizer/layers/insert clustering

or for the local counterpart::

/gate/digitizer/layers/insert localClustering
/gate/digitizer/layers/localClustering/chooseNewVolume [volName]

The hits located within the same volume are regrouped by distance, creating clusters. If a detected *hit* is closer than a specified accepted distance to one of the clusters, it is added to the closest one; otherwise, it generates a new cluster. The *hits* are added summing their deposited energies and computing the energy-weighted centroid position. If two clusters are closer than the accepted distance they are merged following the same criteria. If requested, events with multiple clusters in the same volume can be rejected::

/gate/digitizer/layers/clustering/setAcceptedDistance [distance plus units]
/gate/digitizer/layers/clustering/setRejectionMultipleClusters [0/1]

or for the local counterpart::

/gate/digitizer/layers/localClustering/setAcceptedDistance [distance plus units]
/gate/digitizer/layers/localClustering/setRejectionMultipleClusters [0/1]


Ideal adder module
~~~~~~~~~~~~~~~~~~~
This module has been designed with the aim of recovering the exact Compton kinematics to enable further studies.

The adderCompton module was designed with the same aim. However, it does not work properly when there are several photonic hits with secondary electronic hit associated in the same volume since the module only distinguish between photonic and electronic hits. The adderCompton module is designed so that the energy of the electronic *hits* is added to the last photonic hit in the same volume. Therefore, when there are two photonic hits in the same volume, the energy of all the electronic hits is added to the second photonic hit leaving the first hit in general with an incorrect null energy deposition associated.

In order to develop an adder that allows us to recover the exact Compton kinematics also when several primary photonic hits occur in the same volume, extra information such as post-step process, creator process, initial energy of the track, final energy, trackID and parentID was added to the pulses. This module creates a *single* from each primary photon *hit* that undergoes a Compton, Photoelectric or Pair Creation interaction. Additional information, such as the energy of the photon that generates the pulse before (*energyIni*) and after (*energyFinal*) the primary interaction is included to be able to recover the ideal Compton kinematics, hence its name. These attributes have invalid values (-1) when this module is not applied. The deposited energy value (*energy*) of each pulse should correspond to the sum of the deposited energy of the primary hit and all the secondary hits produced by it. The deposited energy was validated using livermore physics list. Note that the method applied to obtained the deposited energy (*energy attribute) is not robust and may lead to incorrect values for other physics list.

It can be employed using the following command::

/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/insert adderComptPhotIdeal
The option to reject those events in which the primary photon undergoes at least one interaction different from Compton or Photoelectric is included in the global module using the following command:::

/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/adderComptPhotIdeal/rejectEvtOtherProcesses [1/0]

In order to get one *single* per volume, the user can apply another module afterwards such as the standard adder to handle multiple interactions.

Example::

/gate/digitizerMgr/scatterer/SinglesDigitizer/Singles/insert adderComptPhotIdeal
/gate/digitizerMgr/scatterer/SinglesDigitizer/Singles/adderComptPhotIdeal/rejectEvtOtherProcesses 0

Energy thresholder module
~~~~~~~~~~~~~~~~~~~~~~~~~
This module apply an energy threshold for the acceptance of pulses. By default, the threshold is applied to the deposited energy. Both versions the global module and its local counterpart have been developed. They can be added using the following commands.::

/gate/digitizer/layers/insert energyThresholder
/gate/digitizer/layers/energyThresholder/[volName]/setThreshold [energy]

or::

/digitizer/layers/insert localEnergyThresholder
/gate/gate/digitizer/layers/localEnergyThresholder/chooseNewVolume [volName]
/gate/digitizer/layers/localEnergyThresholder/[volName]/setThreshold [energy]

This threshold is applied to an effective energy that can be obtained using different criteria. Two options have been implemented namely deposited energy and solid angle weighted energy. In order to explicitly specify that the threshold is applied to the deposited energy, the following command should be employed:::

/gate/digitizer/layers/energyThresholder/setLaw/depositedEnergy

or::

/gate/digitizer/layers/localEnergyThresholder/[volName]/setLaw/depositedEnergy


For the solid angle weighted energy policy, the effective energy for each pulse is calculated multiplying the deposited energy by a factor that represents the fraction of the solid angle from the pulse position subtended by a virtual pixel centered in the X-Y pulse position at the detector layer readout surface. To this end, the size of the pixel and detector readout surface must be specified. Those characteristics are included using the following commands::


/gate/digitizer/layers/energyThresholder/setLaw/solidAngleWeighted
/gate/digitizer/layers/energyThresholder/solidAngleWeighted/setRentangleLengthX [szX]
/gate/digitizer/layers/energyThresholder/solidAngleWeighted/setRentangleLengthY [szY]
/gate/digitizer/layers/energyThresholder/solidAngleWeighted/setZSense4Readout [1/-1]

or for the local counterpart::

/gate/digitizer/layers/localEnergyThresholder/[volName]/setLaw/solidAngleWeighted
/gate/digitizer/layers/localEnergyThresholder/[volName]/solidAngleWeighted/setRentangleLengthX [szX]
/gate/digitizer/layers/localEnergyThresholder/[volName]/solidAngleWeighted/setRentangleLengthY [szY]
/gate/digitizer/layers/localEnergyThresholder/[volName]/solidAngleWeighted/setZSense4Readout [1/-1]


If at least the effective energy of one of the pulses is over the threshold, all the pulses corresponding to the same event registered in the studied sensitive volume are stored, otherwise they are rejected.


The global energy thresholder with the default option (deposited energy law) is equivalent to the already available global thresholder.


DoI modeling
~~~~~~~~~~~~

The DoI modeling digitizer is applied using the following command.::

/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/insert doIModels

..
It is a global module. The local counterpart can be useful::
Example::

/gate/digitizerMgr/scatterer/SinglesDigitizer/Singles/insert doIModels

The different considered DoI models can be applied to two readout geometries (Schaart et al. 2009): front surface (entrance surface) readout, in which the photodetector is placed on the crystal surface facing the radiation source, and conventional back-surface (exit surface) readout. To this end, the growth-direction of the DoI must be specified using the command.::

/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/doIModels/setAxis 0 0 1
Example::

/gate/digitizerMgr/scatterer/SinglesDigitizer/Singles/doIModels/setAxis 0 0 1

In the above example the growth-direction of the DoI is set to the growth direction of the Z-axis.
The criterion for the DoI growth is set towards the readout surface and thereby the DoI value in that surface corresponds to the thickness of the crystal. The opposite surface of the readout surface is referred to as exterior surface. Therefore, the different uncertainty models implemented can be applied to the different readout configurations.

Two options are available for the DoI modelling: dual layer structure and exponential function for the DoI uncertainty. The dual layer model discretizes the ground-truth DoI into two positions in the crystal. If the position of the pulse is recorded in the half of the crystal closer to the readout surface, the DoI is set to the central section, otherwise it is set to the exterior surface.
This model can be selected using the following command::

/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/doIModels/setDoIModel dualLayer
Example::

/gate/digitizerMgr/scatterer/SinglesDigitizer/Singles/doIModels/setDoIModel dualLayer

The DoI exponential uncertainty is modeled as a negative exponential function in the DoI growth-direction. FWHM value at the exterior surface (maximum uncertainty) and the exponential decay constant must be set as input parameters. This uncertainty model and the necessary parameters can be loaded using the following commands.::

/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/doIModels/setDoIModel DoIBlurrNegExp
/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/doIModels/DoIBlurrNegExp/setExpInvDecayConst [length]
/gate/digitizerMgr/<sensitive_detector>/SinglesDigitizer/<singles_digitizer_name>/doIModels/DoIBlurrNegExp/setCrysEntranceFWHM [length]
Example::

/gate/digitizerMgr/scatterer/SinglesDigitizer/Singles/doIModels/setDoIModel DoIBlurrNegExp
/gate/digitizerMgr/scatterer/SinglesDigitizer/Singles/doIModels/DoIBlurrNegExp/setExpInvDecayConst 1.4 nm
/gate/digitizerMgr/scatterer/SinglesDigitizer/Singles/doIModels/DoIBlurrNegExp/setCrysEntranceFWHM 1.4 nm


Time delay
~~~~~~~~~~

This module delays the time value of the detected pulses in a specified *Sensitive Detector* volume. It can be useful in a Compton camera system, for instance, to delay the *singles* in the scatterer detector when the absorber gives the coincidence trigger::

/gate/digitizerMgr/<sensitive_detector_name1>/SinglesDigitizer/<singles_digitizer_name>/insert timeDelay
/gate/digitizerMgr/<sensitive_detector_name1>/SinglesDigitizer/<singles_digitizer_name>/timeDelay/setTimeDelay [time value]

/gate/digitizerMgr/<sensitive_detector_name2>/SinglesDigitizer/<singles_digitizer_name>/insert timeDelay
/gate/digitizerMgr/<sensitive_detector_name2>/SinglesDigitizer/<singles_digitizer_name>/timeDelay/setTimeDelay [time value]

Example::

/gate/digitizerMgr/scatterer/SinglesDigitizer/Singles/insert timeDelay
/gate/digitizerMgr/scatterer/SinglesDigitizer/Singles/timeDelay/setTimeDelay 12 ns

/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/insert timeDelay
/gate/digitizerMgr/absorber/SinglesDigitizer/Singles/timeDelay/setTimeDelaY 14 ns



Local time resolution
~~~~~~~~~~~~~~~~~~~~~
In addition to the global time resolution module described in section :ref:`digitizer_and_readout_parameters-label` a local version has been included in order to be able to set different time resolutions to the different layers::

/gate/digitizer/layers/insert localTimeResolution
/gate/digitizer/layers/localtimeResolution/setTimeResolution [FWHM value]

Local 3D spatial resolution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This local module sets independently a Gaussian spatial resolution in each spatial direction.
The module is inserted using the following command::

/gate/digitizer/layers/insert sp3Dlocalblurring
/gate/digitizer/layers/sp3Dlocalblurring/chooseNewVolume [vol name]

and the sigma of the Gaussian function in each direction is set::

/gate/digitizer/layers/sp3Dlocalblurring/[vol name]/setSigma [vector (length)]



Local Multiple rejection module
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This is a local module that allows you to discard multiple pulses. It can be inserted using the following commands.::

/gate/digitizer/layers/insert localMultipleRejection
/gate/digitizer/layers/localMultipleRejection/chooseNewVolume [vol]

The definition of what is considered multiple pulses must be set. Two options are available: more than one pulse in the same volume name or more than one pulses in the same volumeID.
When several identical volumes are needed, for example for several scatterer layers, they are usually created as copies using a repeater. In that case, all volumes share the same name but they have different volumeID. The difference between the rejection based on volume name and volumeID is important in those cases.
These options are selected using the following command line.::

/gate/digitizer/layers/localMultipleRejection/[vol]/setMultipleDefinition [volumeID/volumeName]

Then, the rejection can be set to the whole event or only to those pulses within the same volume name or volumeID where the multiplicity happened.::

/gate/digitizer/layers/localMultipleRejection/[vol]/setEventRejection [1/0]
For the DIGITIZER check the page: :ref:`_digitizer_and_readout_parameters-label`.



Expand Down

0 comments on commit 71cfe78

Please sign in to comment.