-
Notifications
You must be signed in to change notification settings - Fork 55
Sensitive detectors
A sensitive detector is a property of a logical volume, which allows one to keep track of the "hits" that the volume records. We use sensitive detectors basically in two cases: for photosensors, to save the detected photoelectrons, and for the active volume, to save the true energy depositions.
In NEXT we have two kinds of photosensors, at the moment: PMTs and SiPMs. The SiPMs are placed on boards, in groups of N photosensors for each board. PMTs are numbered starting from 0, in ascending, consecutive order, while SiPMs on board 1 go from 1000 to 1000+N-1, SiPMs on board 2 go from 2000 to 2000+N-1 etc.
In NEXUS we use the SensorSD
class to process each photoelectron that hits the sensitive area of a photosensor. Every time a photon is detected, we need to retrieve the ID of the photosensor that has detected it, to account for it correctly. To do so, we use the copy number assigned during the placement of the photosensors, in the construction of the geometry. The method GetCopyNumber(n)
of the G4VTouchable
class is used to retrieve the copy number of the nth encapsulating volume starting from the logical volume which is set as sensitive detector. Does it look like a tongue-twister? An example can help. Let's have a look, for instance, at the NEXT-100 tracking plane. In the GenericPhotosensor
class, the sensitive detector is set on the window logical volume, which is placed one step inside the logical volume of the class itself. The sensor, in turn, is placed in a volume of gas, which is the one being replicated in the placement. For this reason, GetCopyNumber(2)
will be used to retrieve the correct copy number of the GenericPhotosensor
object being replicated.
We save this number in the sensor_depth_
variable of the SensorSD
class, which is settable through the SetDetectorVolumeDepth()
method.
If the sensor is placed in a volume that is also replicated (such as the SiPMs on the sensor boards), one needs also the copy number of this mother volume, in order to build a unique ID for each one of the sensors. To this aim, we use the naming_order_
and the mother_depth_
variables (set through the SetDetectorNamingOrder()
and the SetMotherVolumeDepth()
methods, respectively). GetCopyNumber(mother_depth_)
will be used to retrieve the correct copy number of the mother volume; in our example, mother_depth_
is the number of steps between the sensitive detector volume and the board volume, which is 4, since the volume of gas is placed inside the mask volume, which is, in turn, placed in the board volume. This number is multiplied by naming_order_
, so that the SiPMs on each board start from a different number, as explained above. In our example, naming_order_
is set to 1000.
- Home
- Installation
- Contributing to NEXUS
- Code documentation
- Releases
- User guide