CMS 3D CMS Logo

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