2 # File: pmtsimulation_icarus.fcl
3 # Purpose: Presets for configuration of ICARUS PMT channel digitization.
5 # Configurations offered:
7 # * `PMTsimulationAlg` algorithm:
8 # * `icarus_pmtsimulationalg_standard`: main configuration, expected to be
9 # used in production and by the general user
10 # * `icarus_pmtsimulationalg_202202`: a general use configuration,
11 # including dark and electronics noise; `noise` and `nonoise` variants
12 # (the latter with dark and electronics noise disabled)
13 # * `icarus_pmtsimulationalg_2018`: legacy configuration (until June 2022),
14 # including dark and electronics noise; `noise` and `nonoise` variants
15 # (the latter with dark and electronics noise disabled)
19 # * `PMTsimulationAlg` algorithm configuration needs to be included verbatim
20 # into the configuration of `SimPMTIcarus` module
24 # 20181024 (petrillo@slac.stanford.edu)
25 # detached from `opdetsim_pmt_icarus.fcl`
26 # 20200212 (petrillo@slac.stanford.edu)
27 # reconnected quantum efficiency to the value in `opticalproperties_icarus.fcl`
28 # 20210206 (petrillo@slac.stanford.edu)
29 # added explicit noise configuration, and made standard an alias of it
30 # 20210212 (petrillo@slac.stanford.edu)
31 # updated baseline to reflect the one in data
32 # 20210615 (petrillo@slac.stanford.edu)
33 # updated PMT readout enable window to 2 ms
34 # 20220706 (petrillo@slac.stanford.edu)
35 # introduced configuration for SPR 202202
42 ################################################################################
43 ### Configurations for `PMTsimulationAlg`
44 ################################################################################
46 ### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
47 ### Detector and readout parameters
48 ### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
52 nominalPMTgain: 7.0e6 #
PMT multiplication gain factor
58 ### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
59 ### Single photoelectron response configurations
60 ### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
62 # Single photoelectron response with a Gaussian rise and a fall shape.
64 # Parameters are as used since forever to at least v08_46_00.
66 icarus_photoelectronresponse_gaussian: {
68 # run `lar --print-description AsymGaussPulseFunctionTool` for configuration
69 tool_type: AsymGaussPulseFunctionTool
71 TransitTime:
"55.1 ns"
74 MeanAmplitude:
"0.9 pC"
75 ADC: -11.1927 #charge to adc factor
77 } # icarus_photoelectronresponse_gaussian
81 # Single photoelectron response with exponential rise and a fall shapes.
83 # Parameters are reworked from an ICARUS trigger note (not yet released as
84 # of April 2020), which come from data analysis from the BNL group.
86 # In particular, raise and fall times are reported to be 1.4 and 3.2 ns for
87 # the PMT, and 1.8 and 4.2 ns including the cable distortion at CERN (10 m),
88 # which is not the setup of the actual ICARUS detector (37 m).
89 # The average gain is considered to be 7 x 10^6 (somehow lower than the nominal
90 # 10^7 which we had targetted).
91 # Attenuation from the cable is considered negligible.
93 # The peak charge is computed starting from the charge of a photoelectron
94 # (-1.6 x 10^-7 pC), multiplied by the gain (7 x 10^6). At signal peak time,
95 # the current from that charge is -0.14 mA, i.e. a voltage drop on 50 ohm
96 # of -7.07 mV. In this parametrisation, we inject the gain and let the code
97 # compute the amplitude.
98 # The digitizer converts a range up to 2 volt with 14 bit, which translates into
99 # about 8.192 ADC/mV and 409.6 ADC/mA.
100 # In short, the peak signal is expected to be -7.07 mV, -0.14 mA, -57.93 ADC.
102 # The integral of the shape is 191.407 ADC (time 0 to infinity, 2 ns sampling).
104 icarus_photoelectronresponse_exponentials: {
106 # run `lar --print-description AsymGaussPulseFunctionTool` for configuration
107 tool_type: AsymExpPulseFunctionTool
109 TransitTime:
"55.1 ns"
110 RaiseTimeConstant:
"1.8 ns"
111 FallTimeConstant:
"4.2 ns"
113 ADC: 409.6 # ADC / mA
115 } # icarus_photoelectronresponse_exponentials
119 # Single photoelectron response from data.
121 icarus_photoelectronresponse_202202: {
123 tool_type: SampledWaveformFunctionTool
125 WaveformData:
"Responses/SPR202202.txt"
126 TransitTime:
"55.1 ns"
129 } # icarus_photoelectronresponse_202202
133 # Custom photoelectron response.
135 # This is just an example for an arbitrary function shape; the example tries to
136 # reproduce an `AsymGaussPulseFunction`.
137 # The names of the parameters are arbitrary and their value must be numerical.
139 icarus_photoelectronresponse_customexample: {
141 # run `lar --print-description CustomPulseFunctionTool` for configuration
142 tool_type: CustomPulseFunctionTool
145 "[ADC] * [MeanAmplitude] * exp(-0.5*((x - [TransitTime])/((x < [TransitTime])? [RaiseTime]: [FallTime]))**2)"
146 PeakTime:
"[TransitTime]"
155 } # icarus_photoelectronresponse_customexample
161 icarus_photoelectronresponse_standard: @local::icarus_photoelectronresponse_exponentials
164 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
166 ### Configuration preset components
168 icarus_pmtsimulation.disable_noise: {
171 } # icarus_pmtsimulation.disable_noise
174 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
176 ### The standard configuration (`icarus_pmtsimulationalg_standard`) is chosen
180 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
181 ### Configuration "2022":
182 ### * based on SPR202202
183 ### * gain: 9.7 x 10^6
184 ### * electronics noise included
185 ### * readout is fundamentally different from the real one: the hardwware readout
186 ### collects channels in groups of 180 (full cryostat in Run1, may change in future)
187 ### based on a trigger logic (channels above a O(10) p.e. threshold); the simulation
188 ### instead does not assume a readout trigger logic and tries to read out every
189 ### photoelectron (each channel independently, against a << 1 p.e. threshold);
190 ### the part that is not included in the simulation but would be included in data
191 ### is comprised only of noise (and exceptionally low response fluctuations of single
192 ### photoelectrons), so post-processing can trim and extend the this simulation to
193 ### reflect the real readout by removing the channels in the regions (cryostats)
194 ### that would not be triggered, and generating the missing waveforms with noise.
195 ### The single photoelectron response 202202 used in the simulation is 800 samples
196 ### (1.6 us) long; since every single photoelectron "triggers" the simulation, each
197 ### waveform will end with pure noise. With the current setting of a 4 us buffer
198 ### we have about 1 us of noise in the pre-trigger buffer, 1.6 us of signal and then
199 ### 1.4 us of noise (additional photoelectrons in these 4 us would just effectively
200 ### extend the "signal" part). All this considered, we keep the PMT readout buffer
201 ### in the simulation 1+3 us, sizeably smaller than the 3+7 us used in the hardware
202 ### for Run1, to save space (using 3+7, we would still have 1.6 us of signal,
203 ### and the 3 us before and 5.4 us after it would still be pure noise).
204 ### Likewise, we don't attempt to cover the full beam gate time like in hardware
205 ### (7+21 us in Run1 settings), since all the signal will be included anyway.
206 ### But we do force all 360 channels to take data at beam gate time ("only" for
207 ### 1+21 us around the beam gate opening though).
210 icarus_pmtsimulationalg_202202_noise: {
212 Baseline: 14999.5 #
in ADC;
try to distribute rounding errors
216 AmpNoise: 3.0 #
in ADC; temporary
value, see SBN DocDB 19187
219 ## This is the readout window size for each "trigger" on the electronics
222 ##fraction of readout window size that should come before the "trigger" on the electronics
223 PreTrigFraction: 0.25 # fraction (1+3 us)
225 ##Threshold in ADC counts for a PMT self-trigger.
226 # 15 ADC = 5x 3 ADC (RMS, see AmpNoise above),~45% of standard SPR (4 mV, 33 ADC);
227 # number of noise samples above 15 ADC: ~206 samples for 2 ms x 360 channels (300 Hz)
228 # number of noise samples above 18 ADC: ~0.36 samples for 2 ms x 360 channels (0.5 Hz)
229 ##NOTE this is assumed to be positive-going and ABOVE BASELINE! Pulse polarity is corrected before determining trigger.
230 ThresholdADC: 18 # ADC
counts
232 PulsePolarity: -1 #Pulse polarity (1 = positive, -1 = negative)
233 TriggerOffsetPMT: "-1.0 ms"
# PMT enable gate start: time relative to trigger when readout begins
234 ReadoutEnablePeriod:
"2.0 ms" #
PMT enable gate duration: time
for which
PMT readout is enabled
235 CreateBeamGateTriggers:
true #Option to create unbiased readout around
beam spill
236 BeamGateTriggerRepPeriod:
"2.0 us" # Repetition period
and number of repetitions
for BeamGateTriggers:
237 BeamGateTriggerNReps: 10 # should cover -7/+21 us, instead just goes -1 to 21 us)
239 FluctuateGain:
true # apply per-photoelectron gain fluctuations
242 DynodeK: 0.75 # gain on
a PMT multiplication
stage
243 # is proportional to dV^
k
244 # relative multiplication
stage resistors
in Hamamatsu 5912,
246 #
the second stage is 3.4 R, etc. The value of R is not necessary.
247 # Only multiplication stages
are included.
248 VoltageDistribution: [ 17.4, 3.4, 5.0, 3.33, 1.67, 1.0, 1.2, 1.5, 2.2, 3.0 ]
252 } # icarus_pmtsimulationalg_202202_noise
255 icarus_pmtsimulationalg_202202_nonoise: {
256 @table::icarus_pmtsimulationalg_202202_noise
257 @table::icarus_pmtsimulation.disable_noise
260 icarus_pmtsimulationalg_202202: @local::icarus_pmtsimulationalg_202202_noise
263 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
265 ### Legacy configuration, pre-2022
267 icarus_pmtsimulationalg_2018: {
269 Baseline: 14999.5 #
in ADC
273 AmpNoise: 3.0 #
in ADC; temporary
value, see SBN DocDB 19187
276 ##This is the readout window size for each "trigger" on the electronics
279 ##fraction of readout window size that should come before the "trigger" on the electronics
280 PreTrigFraction: 0.25 # fraction
282 ##Threshold in ADC counts for a PMT self-trigger.
283 # 18 ADC = 6x 3 ADC (RMS, see AmpNoise above),~35% of standard SPR (55 ADC);
284 # number of noise samples above 18 ADC: ~0.35 samples for 2 ms x 360 channels
285 ##NOTE this is assumed to be positive-going and ABOVE BASELINE! Pulse polarity is corrected before determining trigger.
286 ThresholdADC: 18 # ADC
counts
288 PulsePolarity: -1 #Pulse polarity (1 = positive, -1 = negative)
289 TriggerOffsetPMT: "-1.0 ms"
#Time relative to trigger when readout begins
290 ReadoutEnablePeriod:
"2.0 ms" #Time
for which pmt readout is enabled
291 CreateBeamGateTriggers:
true #Option to create unbiased readout around
beam spill
292 BeamGateTriggerRepPeriod:
"2.0 us" #Repetition Period
for BeamGateTriggers
293 BeamGateTriggerNReps: 10 #
Number of beamgate trigger reps to produce
296 FluctuateGain:
true # apply per-photoelectron gain fluctuations
299 DynodeK: 0.75 # gain on
a PMT multiplication
stage
300 # is proportional to dV^k
301 # relative multiplication stage resistors in Hamamatsu 5912, from
302 # JINST 13 (2018) 10, P10030 (https://doi.org/10.1088/1748-0221/13/10/P10030);
303 # if the resistor on first stage is 17.4 R, the one on the second stage is 3.4 R,
304 # etc. The value of R is not necessary.
305 # Only multiplication stages are included.
306 VoltageDistribution: [ 17.4, 3.4, 5.0, 3.33, 1.67, 1.0, 1.2, 1.5, 2.2, 3.0 ]
310 } # icarus_pmtsimulationalg_2018
313 icarus_pmtsimulationalg_2018_noise: @local::icarus_pmtsimulationalg_2018
316 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
318 ### Legacy no-noise configuration: `icarus_pmtsimulationalg_2018_nonoise`
321 icarus_pmtsimulationalg_2018_nonoise: {
322 @table::icarus_pmtsimulationalg_2018
323 @table::icarus_pmtsimulation.disable_noise
324 } # icarus_pmtsimulationalg_2018_nonoise
327 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
329 ### Configuration used for standard simulation
334 icarus_pmtsimulationalg_standard: @local::icarus_pmtsimulationalg_2018_nonoise
337 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
temporary see SBN DocDB from CERN test stand measurement ReadoutWindowSize
stream1 stream1 can override from command line with o or output services LArPropertiesService ScintPreScale
esac done echo Signal files are
tick ticks
Alias for common language habits.
BEGIN_PROLOG icarus_opticalproperties
BEGIN_PROLOG icarus_settings_opdet
counts_as<> counts
Number of ADC counts, represented by signed short int.
process_name drop raw::OpDetWaveforms_DataApr2016RecoStage1_saturation_ saturation
return match has_match and(match.match_pdg==11 or match.match_pdg==-11)
then echo Cowardly refusing to create a new FHiCL file with the same name as the original one('${SourceName}')." >&2 exit 1 fi echo "'$
fhicl::Table< sbnd::crt::CRTDetSimParams > Parameters
try to distribute rounding errors SinglePhotonResponse
if &&[-z"$BASH_VERSION"] then echo Attempting to switch to bash bash shellSwitch exit fi &&["$1"= 'shellSwitch'] shift declare a IncludeDirectives for Dir in
temporary see SBN DocDB DarkNoiseRate
BEGIN_PROLOG hitmakerfive clustermakerfour pfparticlemakerthree showermakertwo END_PROLOG hitmakerfive clustermakerfour pfparticlemakerthree sequence::inline_paths sequence::inline_paths sequence::inline_paths showermakers test
process_name showerreco Particles Coinciding wih the Vertex services ScanOptions nu_mu services ScanOptions Number