CMS 3D CMS Logo

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