|
LDMX Software
|
Realistic digitization of silicon strip sensor hits. More...
#include <SiStripDigitizer.h>
Classes | |
| struct | SensorParams |
| All parameters describing one silicon strip sensor layer. More... | |
Public Member Functions | |
| SiStripDigitizer (const SensorParams ¶ms) | |
| void | seed (uint64_t s) |
| Seed the internal random-number engine. | |
| std::map< int, double > | computeStripCharges (double edep, const Acts::Vector3 &local_pos, const Acts::Vector3 &local_dir, double path_length) const |
| Simulate charge collection for a single hit. | |
| void | applyNoiseAndThreshold (std::map< int, double > &strip_charges) |
| Add Gaussian electronic noise to signal strips and their immediate neighbours, then remove strips below the readout threshold. | |
| const SensorParams & | params () const |
| SensorParams & | mutableParams () |
| void | setThickness (double thickness) |
| Set the sensor thickness [mm] from the geometry before processing hits. | |
Private Member Functions | |
| int | adaptiveNSegments (const Acts::Vector3 &local_dir, double path_length) const |
| Number of track sub-segments, chosen adaptively so that the U displacement per segment does not exceed deposition_granularity × sense_pitch. | |
| double | diffusionSigma (double d, bool is_minority) const |
Diffusion sigma [mm] for carriers drifting distance d [mm]. | |
| double | stripFraction (double u0, double sigma, double strip_center, double pitch) const |
Fraction of a Gaussian charge cloud (centred at u0 with sigma sigma) collected by a strip of width pitch centred at strip_center. | |
| std::map< int, double > | computeCarrierCharges (double q_per_seg, int n_seg, const Acts::Vector3 &local_pos, const Acts::Vector3 &local_dir, double path_length, double w_collect, double lorentz_tan, bool is_minority) const |
| Simulate one carrier type and return the sense-strip charge map. | |
| std::map< int, double > | senseToReadout (const std::map< int, double > &sense_charges) const |
| Sum sense-strip charges into readout-strip charges according to the AC-coupling ratio ratio = round(readout_pitch / sense_pitch). | |
Private Attributes | |
| SensorParams | params_ |
| std::default_random_engine | generator_ |
| std::normal_distribution< double > | normal_ {0.0, 1.0} |
Realistic digitization of silicon strip sensor hits.
Follows the physics model of CDFSiSensorSim (itself a port of the LCSIM / HPS Java digitization). For each SimTrackerHit the track segment through the sensor is divided adaptively into sub-segments whose number is chosen so that the U displacement per segment is at most a configurable fraction of the sense pitch. For each sub-segment:
Both electron and hole sides can be simulated independently; by default only the electron (n-strip) side is read out, as for a single-sided p-type sensor.
local[0] = U (precision direction, perpendicular to strips) local[1] = V (strip direction) local[2] = W (surface normal)
Electrons are collected at W = +thickness/2 (the n-strip side). Holes are collected at W = −thickness/2 (the p-bulk/backplane side).
Strip indexing: readout strip m is centred at U = (m − N/2) · readout_pitch, where N = n_readout_strips (default 512). Strip 0 is at the most-negative U edge; strip N−1 at the most-positive U edge. The sensor centre is between strips N/2−1 and N/2. Mapping: sense strip n → readout strip ⌊n / ratio⌋ + N/2 where ratio = round(readout_pitch / sense_pitch).
Definition at line 60 of file SiStripDigitizer.h.
|
inlineexplicit |
Definition at line 118 of file SiStripDigitizer.h.
|
private |
Number of track sub-segments, chosen adaptively so that the U displacement per segment does not exceed deposition_granularity × sense_pitch.
Definition at line 25 of file SiStripDigitizer.cxx.
References tracking::digitization::SiStripDigitizer::SensorParams::deposition_granularity, tracking::digitization::SiStripDigitizer::SensorParams::n_segments_min, and tracking::digitization::SiStripDigitizer::SensorParams::sense_pitch.
Referenced by computeStripCharges().
| void tracking::digitization::SiStripDigitizer::applyNoiseAndThreshold | ( | std::map< int, double > & | strip_charges | ) |
Add Gaussian electronic noise to signal strips and their immediate neighbours, then remove strips below the readout threshold.
| strip_charges | Readout-strip charge map. Modified in place. |
Definition at line 242 of file SiStripDigitizer.cxx.
References tracking::digitization::SiStripDigitizer::SensorParams::noise_electrons, and tracking::digitization::SiStripDigitizer::SensorParams::threshold_electrons.
|
private |
Simulate one carrier type and return the sense-strip charge map.
| q_per_seg | Charge per sub-segment [electrons]. |
| n_seg | Number of sub-segments. |
| local_pos | 3D hit midpoint in local coordinates [mm]. |
| local_dir | Unit track direction in local coordinates. |
| path_length | Path length through sensor [mm]. |
| w_collect | W coordinate of collection electrode [mm]. |
| lorentz_tan | tan(θ_Lorentz) for this carrier (may be 0). |
| is_minority | True if this carrier is the minority species. |
Definition at line 89 of file SiStripDigitizer.cxx.
References diffusionSigma(), tracking::digitization::SiStripDigitizer::SensorParams::sense_pitch, stripFraction(), tracking::digitization::SiStripDigitizer::SensorParams::thickness, and tracking::digitization::SiStripDigitizer::SensorParams::trapping.
Referenced by computeStripCharges().
| std::map< int, double > tracking::digitization::SiStripDigitizer::computeStripCharges | ( | double | edep, |
| const Acts::Vector3 & | local_pos, | ||
| const Acts::Vector3 & | local_dir, | ||
| double | path_length ) const |
Simulate charge collection for a single hit.
Runs both electron and hole sides as configured, performs the sense-to-readout charge transfer, and returns the final readout-strip charge map.
| edep | Energy deposited in the sensitive volume [MeV]. |
| local_pos | 3D hit midpoint in sensor-local coordinates [mm]. |
| local_dir | Unit track direction in sensor-local coordinates. |
| path_length | Track path length through the sensor volume [mm]. |
Definition at line 201 of file SiStripDigitizer.cxx.
References adaptiveNSegments(), computeCarrierCharges(), tracking::digitization::SiStripDigitizer::SensorParams::electron_lorentz_tangent, tracking::digitization::SiStripDigitizer::SensorParams::electron_side_readout, tracking::digitization::SiStripDigitizer::SensorParams::hole_lorentz_tangent, tracking::digitization::SiStripDigitizer::SensorParams::hole_side_readout, tracking::digitization::SiStripDigitizer::SensorParams::is_n_type, senseToReadout(), and tracking::digitization::SiStripDigitizer::SensorParams::thickness.
|
private |
Diffusion sigma [mm] for carriers drifting distance d [mm].
| d | Drift distance [mm]. |
| is_minority | True for minority carriers (e⁻ in p-type, h⁺ in n-type); false for majority carriers. |
Definition at line 37 of file SiStripDigitizer.cxx.
References tracking::digitization::SiStripDigitizer::SensorParams::bias_voltage, tracking::digitization::SiStripDigitizer::SensorParams::depletion_voltage, tracking::digitization::SiStripDigitizer::SensorParams::temperature, and tracking::digitization::SiStripDigitizer::SensorParams::thickness.
Referenced by computeCarrierCharges().
|
inline |
Definition at line 154 of file SiStripDigitizer.h.
|
inline |
Definition at line 153 of file SiStripDigitizer.h.
|
inline |
Seed the internal random-number engine.
Call from onNewRun once a seed is available from the framework seed service.
Definition at line 122 of file SiStripDigitizer.h.
|
private |
Sum sense-strip charges into readout-strip charges according to the AC-coupling ratio ratio = round(readout_pitch / sense_pitch).
Sense strip n maps to readout strip floor(n / ratio).
Definition at line 150 of file SiStripDigitizer.cxx.
References tracking::digitization::SiStripDigitizer::SensorParams::n_readout_strips, tracking::digitization::SiStripDigitizer::SensorParams::readout_pitch, tracking::digitization::SiStripDigitizer::SensorParams::readout_transfer_efficiency, tracking::digitization::SiStripDigitizer::SensorParams::sense_pitch, and tracking::digitization::SiStripDigitizer::SensorParams::sense_transfer_efficiency.
Referenced by computeStripCharges().
|
inline |
Set the sensor thickness [mm] from the geometry before processing hits.
Definition at line 157 of file SiStripDigitizer.h.
References tracking::digitization::SiStripDigitizer::SensorParams::thickness.
|
private |
Fraction of a Gaussian charge cloud (centred at u0 with sigma sigma) collected by a strip of width pitch centred at strip_center.
Definition at line 78 of file SiStripDigitizer.cxx.
Referenced by computeCarrierCharges().
|
private |
Definition at line 211 of file SiStripDigitizer.h.
|
private |
Definition at line 212 of file SiStripDigitizer.h.
|
private |
Definition at line 210 of file SiStripDigitizer.h.