22.3. SVD Simulation#
The SVD simulation starts with SVDSimHits
and ends with SVDShaperDigits and SVDEventInfo.
First of all the SVD configuration is written in the SVDEventInfo (DAQ mode, number of APV samples in the event, …). Each chargelet (small group of ionized \(e^{-}\) or \(h^{+}\)) is drifted towards the sensor sides (\(e^{-}\) are collected on the v/N side, \(h^{+}\) are collected on the u/P side) in a simplified electromagnetic field (including diffusion) and then each charge is assigned to the nearest readout or floating implant. Charge sharing among implants is simulated using coupling constants measured on data and stored in SVDChargeSimulationCalibrations. Each charge \(Q\) on a readout strip is assigned an approximate time \(\delta\) equals to the time it reaches half-way to the sensor side. The APV25 waveform is simulated in \(e^{-}\) for each chargelet getting to the sensor side with the following function:
where \(Q\) is the charge, \(\delta\) is the start time of the waveform and \(\tau = 250\) ns.
The total analog APV waveform is the sum of contributions from each charge.
When all ionized charges are collected on the implants, the final APV waveform is digitized in ADC taking into account that an \(e^{-}/h^{+}\) in Geant4 is not exactly equivalent to a real \(e^{-}/h^{+}\) and therefore is weighted with the electronWeight
stored in SVDChargeSimulationCalibrations, and then transformed in ADC using the gain stored in SVDPulseShapeCalibrations. Noise from SVDNoiseCalibrations is superimposed to the samples. We then check that at least one of the 6 samples is above the zero-suppression threshold and we mask strips according to SVDFADCMaskedStrips and disable APVs according to the channel mapping. Finally SVDShaperDigits are created.
In case the event is a 3-sample event, the 3 out of the 6 samples are identified and SVDShaperDigits are filled with the 3 selected samples in the first 3 positions, and 0 in the rest, and the zero-suppression is checked again.
Note
SVD sampling clock period is \(t_{\rm APV} = 31.44\) ns, 4 times larger than the system (trigger) clock. In order to include this in the simulation, we move the acquisition window (start of APV sampling) by units of 1/4 of APV clock (0,1,2,3, the TriggerBin
), synchronized with the other detectors (i.e. detector clocks keep the same phase across events).
Use the following python function if you want to add the SVD simulation to your steering file:
- svd.__init__.add_svd_simulation(path, useConfigFromDB=False, daqMode=2, relativeShift=9)[source]#
Adds the SVD simulation to the path.
Simulation ends with SVDShaperDigits and SVDEventInfo.
- Parameters:
path – add the modules to this basf2 path.
useConfigFromDB – if True, read the SVD configuration from SVDGlobalConfigParameters.
daqMode – = 2 for the default 6-sample mode, = 1 for the 3-sample mode, = 3 for the 3-mixed-6 sample mode.
relativeShift – relative time shift between the 3-sample and the 6-sample mode in units of 1/4 of APV clock. If
useConfigFromDB
is True, the value of this parameter is overwritten.
22.3.1. Simulation Modules#
This is a list of the svd
modules used for simulation.
- SVDDigitizer#
Creates SVDShaperDigits from SVDSimHits
- Package:
svd
- Library:
libsvdSimulation.so
- Parameters:
- ADCSamplingTime (float, default=-1.0)
Interval between ADC samples in ns, if = -1 taken from HardwareClockSettings payload (default).
- BetaPrimeDecayTimeU (float, default=250.0)
Decay time of betaprime waveform in ns, U-side
- BetaPrimeDecayTimeV (float, default=250.0)
Decay time of betaprime waveform in ns, V-side
- FADCmode (bool, default=True)
FADC mode: if True, ZS cut is rounded to nearest ADU
- MCParticles (str, default=’’)
MCParticle collection name
- PoissonSmearing (bool, default=True)
Apply Poisson smearing on chargelets
- RandomizeEventTimes (bool, default=False)
Randomize event times over a frame interval
- SVDEventInfo (str, default=’SVDEventInfoSim’)
SVDEventInfo name
- SegmentLength (float, default=0.02)
Maximum segment length (in millimeters)
- ShaperDigits (str, default=’’)
ShaperDigits collection name
- SimHits (str, default=’’)
SimHit collection name
- StartSampling (float, default=-2.0)
Start of the sampling window, in ns. Used to tune the SVD latency.
- TimeFrameHigh (float, default=150.0)
Right edge of event time randomization window, ns
- TimeFrameLow (float, default=-300.0)
Left edge of event time randomization window, ns
- TrueHits (str, default=’’)
TrueHit collection name
- ZeroSuppressionCut (float, default=3.0)
Zero suppression cut in sigmas of strip noise
- numberOfSamples (int, default=1)
Keep digit if numberOfSamples or more samples are over ZS threshold
- signalsList (str, default=’’)
Store signals (time/charge/tau) in a tab-delimited file
- statisticsFilename (str, default=’’)
ROOT Filename for statistics generation. If filename is empty, no statistics will be produced
- storeWaveforms (bool, default=False)
Store waveforms in a TTree in the statistics file.
- SVDEventInfoSetter#
Sets the SVD event information. Use this module to fill SVDEventInfo object which tells the digitizer the conditions for creating ShaperDigits.
- Package:
svd
- Library:
libsvdSimulation.so
- Parameters:
- SVDEventInfo (str, default=’SVDEventInfoSim’)
SVDEventInfo name
- TRGSummaryName (str, default=’TRGSummary’)
TRGSummary name
- crossTalk (bool, default=False)
Defines the cross-talk flag for the event
- daqMode (int, default=2)
Defines the DAQ mode: = 2 for the default 6-sample mode, = 1 for the 3-sample mode, = 3 for the 3-mixed-6 sample mode.
- eventType (int, default=0)
Defines the event type: TTD event (global run)/standalone event (local run)
- fixedTriggerBin (int, default=999)
Trigger bin 0/1/2/3 - useful for timing studies. The default is random if SimClockState is not valid.
- relativeShift (int, default=0)
Relative shift between 3- and 6-sample events, in units of APV clock / 4
- runType (int, default=2)
Defines the run type: raw/transparent/zero-suppressed/z-s+hit time finding
- triggerType (???, default=3)
Defines the trigger type, default: CDC trigger
- useDB (bool, default=False)
default = False. If true reads the DAQMode from SVDGlobalConfigParameters