CMS 3D CMS Logo

phase2TrackerDigitizer_cfi.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 
3 phase2TrackerDigitizer = cms.PSet(
4 # For the Digitizer
5  accumulatorType = cms.string("Phase2TrackerDigitizer"),
6  hitsProducer = cms.string('g4SimHits'),
7  ROUList = cms.vstring(
8  'TrackerHitsPixelBarrelLowTof',
9  'TrackerHitsPixelBarrelHighTof',
10  'TrackerHitsPixelEndcapLowTof',
11  'TrackerHitsPixelEndcapHighTof'),
12  GeometryType = cms.string('idealForDigi'),
13  isOTreadoutAnalog = cms.bool(False),#set this to true if you want analog readout for OT
14 # Common for Algos
15  premixStage1 = cms.bool(False),
16  AlgorithmCommon = cms.PSet(
17  DeltaProductionCut = cms.double(0.03),
18  makeDigiSimLinks = cms.untracked.bool(True),
19  ),
20 # Specific parameters
21 #Pixel Digitizer Algorithm
22  PixelDigitizerAlgorithm = cms.PSet(
23  ElectronPerAdc = cms.double(600.0),
24  ReadoutNoiseInElec = cms.double(0.0),
25  ThresholdInElectrons_Barrel = cms.double(1200.0),
26  ThresholdInElectrons_Endcap = cms.double(1200.0),
27  AddThresholdSmearing = cms.bool(False),
28  ThresholdSmearing_Barrel = cms.double(0.0),
29  ThresholdSmearing_Endcap = cms.double(0.0),
30  HIPThresholdInElectrons_Barrel = cms.double(1.0e10), # very high value to avoid Over threshold bit
31  HIPThresholdInElectrons_Endcap = cms.double(1.0e10), # very high value to avoid Over threshold bit
32  NoiseInElectrons = cms.double(0.0),
33  Phase2ReadoutMode = cms.int32(-1), # Flag to decide Readout Mode :Digital(0) or Analog (linear TDR (-1), dual slope with slope parameters (+1,+2,+3,+4) with threshold subtraction
34  AdcFullScale = cms.int32(15),
35  TofUpperCut = cms.double(12.5),
36  TofLowerCut = cms.double(-12.5),
37  AddNoisyPixels = cms.bool(False),
38  Alpha2Order = cms.bool(True), #D.B.: second order effect, does not switch off magnetic field as described
39  AddNoise = cms.bool(False),
40  AddXTalk = cms.bool(False), #D.B.
41  InterstripCoupling = cms.double(0.0), #D.B. # No need to be used in PixelDigitizerAlgorithm
42  Odd_row_interchannelCoupling_next_row = cms.double(0.20),
43  Even_row_interchannelCoupling_next_row = cms.double(0.0),
44  Odd_column_interchannelCoupling_next_column = cms.double(0.0),
45  Even_column_interchannelCoupling_next_column = cms.double(0.0),
46  SigmaZero = cms.double(0.00037), #D.B.: 3.7um spread for 300um-thick sensor, renormalized in digitizerAlgo
47  SigmaCoeff = cms.double(0), #S.D: setting SigmaCoeff=0 for IT-pixel
48  ClusterWidth = cms.double(3), #D.B.: this is used as number of sigmas for charge collection (3=+-3sigmas)
49  LorentzAngle_DB = cms.bool(True),
50  TanLorentzAnglePerTesla_Endcap = cms.double(0.106),
51  TanLorentzAnglePerTesla_Barrel = cms.double(0.106),
52  KillModules = cms.bool(False),
53  DeadModules_DB = cms.bool(False),
54  DeadModules = cms.VPSet(),
55  AddInefficiency = cms.bool(False),
56  Inefficiency_DB = cms.bool(False),
57  EfficiencyFactors_Barrel = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999 ),
58  EfficiencyFactors_Endcap = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999,
59  0.999, 0.999 ),#Efficiencies kept as Side2Disk1,Side1Disk1 and so on
60  CellsToKill = cms.VPSet(),
61  ApplyTimewalk = cms.bool(False),
62  TimewalkModel = cms.PSet(
63  ThresholdValues = cms.vdouble(1000, 1200, 1500, 3000),
64  Curves = cms.VPSet(
65  cms.PSet(
66  charge = cms.vdouble(1000, 1025, 1050, 1100, 1200, 1500, 2000, 6000, 10000, 15000, 20000, 30000),
67  delay = cms.vdouble(26.8, 23.73, 21.92, 19.46, 16.52, 12.15, 8.88, 3.03, 1.69, 0.95, 0.56, 0.19)
68  ),
69  cms.PSet(
70  charge = cms.vdouble(1200, 1225, 1250, 1500, 2000, 6000, 10000, 15000, 20000, 30000),
71  delay = cms.vdouble(26.28, 23.5, 21.79, 14.92, 10.27, 3.33, 1.86, 1.07, 0.66, 0.27)
72  ),
73  cms.PSet(
74  charge = cms.vdouble(1500, 1525, 1550, 1600, 2000, 6000, 10000, 15000, 20000, 30000),
75  delay = cms.vdouble(25.36, 23.05, 21.6, 19.56, 12.94, 3.79, 2.14, 1.26, 0.81, 0.39)
76  ),
77  cms.PSet(
78  charge = cms.vdouble(3000, 3025, 3050, 3100, 3500, 6000, 10000, 15000, 20000, 30000),
79  delay = cms.vdouble(25.63, 23.63, 22.35, 20.65, 14.92, 6.7, 3.68, 2.29, 1.62, 1.02)
80  )
81  )
82  )
83  ),
84 #Pixel-3D Digitizer Algorithm
85  Pixel3DDigitizerAlgorithm = cms.PSet(
86  ElectronPerAdc = cms.double(600.0),
87  ReadoutNoiseInElec = cms.double(0.0),
88  ThresholdInElectrons_Barrel = cms.double(1200.0),
89  ThresholdInElectrons_Endcap = cms.double(1200.0),
90  AddThresholdSmearing = cms.bool(False),
91  ThresholdSmearing_Barrel = cms.double(0.0),
92  ThresholdSmearing_Endcap = cms.double(0.0),
93  HIPThresholdInElectrons_Barrel = cms.double(1.0e10), # very high value to avoid Over threshold bit
94  HIPThresholdInElectrons_Endcap = cms.double(1.0e10), # very high value to avoid Over threshold bit
95  NoiseInElectrons = cms.double(0.0),
96  Phase2ReadoutMode = cms.int32(-1), # Flag to decide Readout Mode :Digital(0) or Analog (linear TDR (-1), dual slope with slope parameters (+1,+2,+3,+4) with threshold subtraction
97  AdcFullScale = cms.int32(15),
98  TofUpperCut = cms.double(12.5),
99  TofLowerCut = cms.double(-12.5),
100  AddNoisyPixels = cms.bool(False),
101  Alpha2Order = cms.bool(True), #D.B.: second order effect, does not switch off magnetic field as described
102  AddNoise = cms.bool(False),
103  AddXTalk = cms.bool(False), #D.B.
104  InterstripCoupling = cms.double(0.0), #D.B. # No need to be used in PixelDigitizerAlgorithm
105  Odd_row_interchannelCoupling_next_row = cms.double(0.20),
106  Even_row_interchannelCoupling_next_row = cms.double(0.0),
107  Odd_column_interchannelCoupling_next_column = cms.double(0.0),
108  Even_column_interchannelCoupling_next_column = cms.double(0.0),
109  SigmaZero = cms.double(0.00037), #D.B.: 3.7um spread for 300um-thick sensor, renormalized in digitizerAlgo
110  SigmaCoeff = cms.double(1.80), #D.B.: to be confirmed with simulations in CMSSW_6.X
111  ClusterWidth = cms.double(3), #D.B.: this is used as number of sigmas for charge collection (3=+-3sigmas)
112  LorentzAngle_DB = cms.bool(True),
113  TanLorentzAnglePerTesla_Endcap = cms.double(0.106),
114  TanLorentzAnglePerTesla_Barrel = cms.double(0.106),
115  KillModules = cms.bool(False),
116  DeadModules_DB = cms.bool(False),
117  DeadModules = cms.VPSet(),
118  AddInefficiency = cms.bool(False),
119  Inefficiency_DB = cms.bool(False),
120  EfficiencyFactors_Barrel = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999 ),
121  EfficiencyFactors_Endcap = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999,
122  0.999, 0.999 ),#Efficiencies kept as Side2Disk1,Side1Disk1 and so on
123  CellsToKill = cms.VPSet()
124  ),
125 #Pixel in PS Module
126  PSPDigitizerAlgorithm = cms.PSet(
127  ElectronPerAdc = cms.double(135.0),
128  ReadoutNoiseInElec = cms.double(200.0),#D.B.:Fill readout noise, including all readout chain, relevant for smearing
129  ThresholdInElectrons_Barrel = cms.double(6300.), #(0.4 MIP = 0.4 * 16000 e)
130  ThresholdInElectrons_Endcap = cms.double(6300.), #(0.4 MIP = 0.4 * 16000 e)
131  AddThresholdSmearing = cms.bool(True),
132  ThresholdSmearing_Barrel = cms.double(630.0),
133  ThresholdSmearing_Endcap = cms.double(630.0),
134  HIPThresholdInElectrons_Barrel = cms.double(1.0e10), # very high value to avoid Over threshold bit
135  HIPThresholdInElectrons_Endcap = cms.double(1.0e10), # very high value to avoid Over threshold bit
136  NoiseInElectrons = cms.double(200), # 30% of the readout noise (should be changed in future)
137  Phase2ReadoutMode = cms.int32(0), # Flag to decide Readout Mode :Digital(0) or Analog (linear TDR (-1), dual slope with slope parameters (+1,+2,+3,+4) with threshold subtraction
138  AdcFullScale = cms.int32(255),
139  TofUpperCut = cms.double(12.5),
140  TofLowerCut = cms.double(-12.5),
141  AddNoisyPixels = cms.bool(True),
142  Alpha2Order = cms.bool(True), #D.B.: second order effect, does not switch off magnetic field as described
143  AddNoise = cms.bool(True),
144  AddXTalk = cms.bool(True), #D.B.
145  InterstripCoupling = cms.double(0.05), #D.B.
146  SigmaZero = cms.double(0.00037), #D.B.: 3.7um spread for 300um-thick sensor, renormalized in digitizerAlgo
147  SigmaCoeff = cms.double(1.80), #D.B.: to be confirmed with simulations in CMSSW_6.X
148  ClusterWidth = cms.double(3), #D.B.: this is used as number of sigmas for charge collection (3=+-3sigmas)
149  LorentzAngle_DB = cms.bool(False),
150  TanLorentzAnglePerTesla_Endcap = cms.double(0.07),
151  TanLorentzAnglePerTesla_Barrel = cms.double(0.07),
152  KillModules = cms.bool(False),
153  DeadModules_DB = cms.bool(False),
154  DeadModules = cms.VPSet(),
155  AddInefficiency = cms.bool(False),
156  Inefficiency_DB = cms.bool(False),
157  EfficiencyFactors_Barrel = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999 ),
158  EfficiencyFactors_Endcap = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999,
159  0.999, 0.999 ),#Efficiencies kept as Side2Disk1,Side1Disk1 and so on
160  CellsToKill = cms.VPSet()
161  ),
162 #Strip in PS module
163  PSSDigitizerAlgorithm = cms.PSet(
164  ElectronPerAdc = cms.double(135.0),
165 #D.B.:the noise should be a function of strip capacitance, roughly: ReadoutNoiseInElec=500+(64*Cdet[pF]) ~= 500+(64*1.5[cm])
166  ReadoutNoiseInElec = cms.double(700.0),#D.B.:Fill readout noise, including all readout chain, relevant for smearing
167  ThresholdInElectrons_Barrel = cms.double(6300.), #(0.4 MIP = 0.4 * 16000 e)
168  ThresholdInElectrons_Endcap = cms.double(6300.), #(0.4 MIP = 0.4 * 16000 e)
169  AddThresholdSmearing = cms.bool(True),
170  ThresholdSmearing_Barrel = cms.double(630.0),
171  ThresholdSmearing_Endcap = cms.double(630.0),
172  HIPThresholdInElectrons_Barrel = cms.double(21000.), # 1.4 MIP considered as HIP
173  HIPThresholdInElectrons_Endcap = cms.double(21000.), # 1.4 MIP considered as HIP
174  NoiseInElectrons = cms.double(700), # 30% of the readout noise (should be changed in future)
175  Phase2ReadoutMode = cms.int32(0), # Flag to decide Readout Mode :Digital(0) or Analog (linear TDR (-1), dual slope with slope parameters (+1,+2,+3,+4) with threshold subtraction
176  AdcFullScale = cms.int32(255),
177  TofUpperCut = cms.double(12.5),
178  TofLowerCut = cms.double(-12.5),
179  AddNoisyPixels = cms.bool(True),
180  Alpha2Order = cms.bool(True), #D.B.: second order effect, does not switch off magnetic field as described
181  AddNoise = cms.bool(True),
182  AddXTalk = cms.bool(True), #D.B.
183  InterstripCoupling = cms.double(0.05), #D.B.
184  SigmaZero = cms.double(0.00037), #D.B.: 3.7um spread for 300um-thick sensor, renormalized in digitizerAlgo
185  SigmaCoeff = cms.double(1.80), #D.B.: to be confirmed with simulations in CMSSW_6.X
186  ClusterWidth = cms.double(3), #D.B.: this is used as number of sigmas for charge collection (3=+-3sigmas)
187  LorentzAngle_DB = cms.bool(False),
188  TanLorentzAnglePerTesla_Endcap = cms.double(0.07),
189  TanLorentzAnglePerTesla_Barrel = cms.double(0.07),
190  KillModules = cms.bool(False),
191  DeadModules_DB = cms.bool(False),
192  DeadModules = cms.VPSet(),
193  AddInefficiency = cms.bool(False),
194  Inefficiency_DB = cms.bool(False),
195  EfficiencyFactors_Barrel = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999 ),
196  EfficiencyFactors_Endcap = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999,
197  0.999, 0.999 ),#Efficiencies kept as Side2Disk1,Side1Disk1 and so on
198  CellsToKill = cms.VPSet()
199  ),
200 #Two Strip Module
201  SSDigitizerAlgorithm = cms.PSet(
202  ElectronPerAdc = cms.double(135.0),
203 #D.B.:the noise should be a function of strip capacitance, roughly: ReadoutNoiseInElec=500+(64*Cdet[pF]) ~= 500+(64*1.5[cm])
204  ReadoutNoiseInElec = cms.double(1000.0),#D.B.:Fill readout noise, including all readout chain, relevant for smearing
205  ThresholdInElectrons_Barrel = cms.double(5800.), #D.B.: this should correspond to a threshold of 530mV
206  ThresholdInElectrons_Endcap = cms.double(5800.),
207  AddThresholdSmearing = cms.bool(True),
208  ThresholdSmearing_Barrel = cms.double(580.0),#D.B.: changed (~5mV peakToPeak --> 1.76mV rms) (was 210.0)
209  ThresholdSmearing_Endcap = cms.double(580.0),#D.B.: changed (~5mV peakToPeak --> 1.76mV rms) (was 245.0)
210  HIPThresholdInElectrons_Barrel = cms.double(1.0e10), # very high value to avoid Over threshold bit
211  HIPThresholdInElectrons_Endcap = cms.double(1.0e10), # very high value to avoid Over threshold bit
212  NoiseInElectrons = cms.double(1000), # 30% of the readout noise (should be changed in future)
213  Phase2ReadoutMode = cms.int32(0), # Flag to decide Readout Mode :Digital(0) or Analog (linear TDR (-1), dual slope with slope parameters (+1,+2,+3,+4) with threshold subtraction
214  AdcFullScale = cms.int32(255),
215  TofUpperCut = cms.double(12.5),
216  TofLowerCut = cms.double(-12.5),
217  AddNoisyPixels = cms.bool(True),
218  Alpha2Order = cms.bool(True), #D.B.: second order effect, does not switch off magnetic field as described
219  AddNoise = cms.bool(True),
220  AddXTalk = cms.bool(True), #D.B.
221  InterstripCoupling = cms.double(0.05), #D.B.
222  SigmaZero = cms.double(0.00037), #D.B.: 3.7um spread for 300um-thick sensor, renormalized in digitizerAlgo
223  SigmaCoeff = cms.double(1.80), #D.B.: to be confirmed with simulations in CMSSW_6.X
224  ClusterWidth = cms.double(3), #D.B.: this is used as number of sigmas for charge collection (3=+-3sigmas)
225  LorentzAngle_DB = cms.bool(False),
226  TanLorentzAnglePerTesla_Endcap = cms.double(0.07),
227  TanLorentzAnglePerTesla_Barrel = cms.double(0.07),
228  KillModules = cms.bool(False),
229  DeadModules_DB = cms.bool(False),
230  DeadModules = cms.VPSet(),
231  AddInefficiency = cms.bool(False),
232  Inefficiency_DB = cms.bool(False),
233  EfficiencyFactors_Barrel = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999 ),
234  EfficiencyFactors_Endcap = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999,
235  0.999, 0.999 ),#Efficiencies kept as Side2Disk1,Side1Disk1 and so on
236  CellsToKill = cms.VPSet(),
237  HitDetectionMode = cms.int32(0), # (0/1/2/3/4 => SquareWindow/SampledMode/LatchedMode/SampledOrLachedMode/HIPFindingMode)
238  PulseShapeParameters = cms.vdouble(-3.0, 16.043703, 99.999857, 40.571650, 2.0, 1.2459094),
239  CBCDeadTime = cms.double(0.0) # (2.7 ns deadtime in latched mode)
240  )
241 )
242 
243 # For premixing stage1
244 # - add noise as by default
245 # - do not add noisy pixels (to be done in stage2)
246 # - do not apply inefficiency (to be done in stage2)
247 # - disable threshold smearing
248 #
249 # For outer tracker
250 # - force analog readout to get the ADCs
251 #
252 # NOTE: It is currently assumed that all sub-digitizers have the same ElectronPerAdc.
253 from Configuration.ProcessModifiers.premix_stage1_cff import premix_stage1
254 _premixStage1ModifyDict = dict(
255  premixStage1 = True,
256  PixelDigitizerAlgorithm = dict(
257  AddNoisyPixels = False,
258  AddInefficiency = False,
259  AddThresholdSmearing = False,
260  ),
261  PSPDigitizerAlgorithm = dict(
262  AddNoisyPixels = False,
263  AddInefficiency = False,
264  AddThresholdSmearing = False,
265  ),
266  PSSDigitizerAlgorithm = dict(
267  AddNoisyPixels = False,
268  AddInefficiency = False,
269  AddThresholdSmearing = False,
270  Phase2ReadoutMode = -1
271  ),
272  SSDigitizerAlgorithm = dict(
273  AddNoisyPixels = False,
274  AddInefficiency = False,
275  AddThresholdSmearing = False,
276  ),
277 )
278 premix_stage1.toModify(phase2TrackerDigitizer, **_premixStage1ModifyDict)