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(1.80), #D.B.: to be confirmed with simulations in CMSSW_6.X
48  ClusterWidth = cms.double(3), #D.B.: this is used as number of sigmas for charge collection (3=+-3sigmas)
49  LorentzAngle_DB = cms.bool(False),
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  ),
62 #Pixel in PS Module
63  PSPDigitizerAlgorithm = cms.PSet(
64  ElectronPerAdc = cms.double(135.0),
65  ReadoutNoiseInElec = cms.double(200.0),#D.B.:Fill readout noise, including all readout chain, relevant for smearing
66  ThresholdInElectrons_Barrel = cms.double(6300.), #(0.4 MIP = 0.4 * 16000 e)
67  ThresholdInElectrons_Endcap = cms.double(6300.), #(0.4 MIP = 0.4 * 16000 e)
68  AddThresholdSmearing = cms.bool(True),
69  ThresholdSmearing_Barrel = cms.double(630.0),
70  ThresholdSmearing_Endcap = cms.double(630.0),
71  HIPThresholdInElectrons_Barrel = cms.double(1.0e10), # very high value to avoid Over threshold bit
72  HIPThresholdInElectrons_Endcap = cms.double(1.0e10), # very high value to avoid Over threshold bit
73  NoiseInElectrons = cms.double(200), # 30% of the readout noise (should be changed in future)
74  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
75  AdcFullScale = cms.int32(255),
76  TofUpperCut = cms.double(12.5),
77  TofLowerCut = cms.double(-12.5),
78  AddNoisyPixels = cms.bool(True),
79  Alpha2Order = cms.bool(True), #D.B.: second order effect, does not switch off magnetic field as described
80  AddNoise = cms.bool(True),
81  AddXTalk = cms.bool(True), #D.B.
82  InterstripCoupling = cms.double(0.05), #D.B.
83  SigmaZero = cms.double(0.00037), #D.B.: 3.7um spread for 300um-thick sensor, renormalized in digitizerAlgo
84  SigmaCoeff = cms.double(1.80), #D.B.: to be confirmed with simulations in CMSSW_6.X
85  ClusterWidth = cms.double(3), #D.B.: this is used as number of sigmas for charge collection (3=+-3sigmas)
86  LorentzAngle_DB = cms.bool(False),
87  TanLorentzAnglePerTesla_Endcap = cms.double(0.07),
88  TanLorentzAnglePerTesla_Barrel = cms.double(0.07),
89  KillModules = cms.bool(False),
90  DeadModules_DB = cms.bool(False),
91  DeadModules = cms.VPSet(),
92  AddInefficiency = cms.bool(False),
93  Inefficiency_DB = cms.bool(False),
94  EfficiencyFactors_Barrel = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999 ),
95  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,
96  0.999, 0.999 ),#Efficiencies kept as Side2Disk1,Side1Disk1 and so on
97  CellsToKill = cms.VPSet()
98  ),
99 #Strip in PS module
100  PSSDigitizerAlgorithm = cms.PSet(
101  ElectronPerAdc = cms.double(135.0),
102 #D.B.:the noise should be a function of strip capacitance, roughly: ReadoutNoiseInElec=500+(64*Cdet[pF]) ~= 500+(64*1.5[cm])
103  ReadoutNoiseInElec = cms.double(700.0),#D.B.:Fill readout noise, including all readout chain, relevant for smearing
104  ThresholdInElectrons_Barrel = cms.double(6300.), #(0.4 MIP = 0.4 * 16000 e)
105  ThresholdInElectrons_Endcap = cms.double(6300.), #(0.4 MIP = 0.4 * 16000 e)
106  AddThresholdSmearing = cms.bool(True),
107  ThresholdSmearing_Barrel = cms.double(630.0),
108  ThresholdSmearing_Endcap = cms.double(630.0),
109  HIPThresholdInElectrons_Barrel = cms.double(21000.), # 1.4 MIP considered as HIP
110  HIPThresholdInElectrons_Endcap = cms.double(21000.), # 1.4 MIP considered as HIP
111  NoiseInElectrons = cms.double(700), # 30% of the readout noise (should be changed in future)
112  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
113  AdcFullScale = cms.int32(255),
114  TofUpperCut = cms.double(12.5),
115  TofLowerCut = cms.double(-12.5),
116  AddNoisyPixels = cms.bool(True),
117  Alpha2Order = cms.bool(True), #D.B.: second order effect, does not switch off magnetic field as described
118  AddNoise = cms.bool(True),
119  AddXTalk = cms.bool(True), #D.B.
120  InterstripCoupling = cms.double(0.05), #D.B.
121  SigmaZero = cms.double(0.00037), #D.B.: 3.7um spread for 300um-thick sensor, renormalized in digitizerAlgo
122  SigmaCoeff = cms.double(1.80), #D.B.: to be confirmed with simulations in CMSSW_6.X
123  ClusterWidth = cms.double(3), #D.B.: this is used as number of sigmas for charge collection (3=+-3sigmas)
124  LorentzAngle_DB = cms.bool(False),
125  TanLorentzAnglePerTesla_Endcap = cms.double(0.07),
126  TanLorentzAnglePerTesla_Barrel = cms.double(0.07),
127  KillModules = cms.bool(False),
128  DeadModules_DB = cms.bool(False),
129  DeadModules = cms.VPSet(),
130  AddInefficiency = cms.bool(False),
131  Inefficiency_DB = cms.bool(False),
132  EfficiencyFactors_Barrel = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999 ),
133  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,
134  0.999, 0.999 ),#Efficiencies kept as Side2Disk1,Side1Disk1 and so on
135  CellsToKill = cms.VPSet()
136  ),
137 #Two Strip Module
138  SSDigitizerAlgorithm = cms.PSet(
139  ElectronPerAdc = cms.double(135.0),
140 #D.B.:the noise should be a function of strip capacitance, roughly: ReadoutNoiseInElec=500+(64*Cdet[pF]) ~= 500+(64*1.5[cm])
141  ReadoutNoiseInElec = cms.double(1000.0),#D.B.:Fill readout noise, including all readout chain, relevant for smearing
142  ThresholdInElectrons_Barrel = cms.double(5800.), #D.B.: this should correspond to a threshold of 530mV
143  ThresholdInElectrons_Endcap = cms.double(5800.),
144  AddThresholdSmearing = cms.bool(True),
145  ThresholdSmearing_Barrel = cms.double(580.0),#D.B.: changed (~5mV peakToPeak --> 1.76mV rms) (was 210.0)
146  ThresholdSmearing_Endcap = cms.double(580.0),#D.B.: changed (~5mV peakToPeak --> 1.76mV rms) (was 245.0)
147  HIPThresholdInElectrons_Barrel = cms.double(1.0e10), # very high value to avoid Over threshold bit
148  HIPThresholdInElectrons_Endcap = cms.double(1.0e10), # very high value to avoid Over threshold bit
149  NoiseInElectrons = cms.double(1000), # 30% of the readout noise (should be changed in future)
150  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
151  AdcFullScale = cms.int32(255),
152  TofUpperCut = cms.double(12.5),
153  TofLowerCut = cms.double(-12.5),
154  AddNoisyPixels = cms.bool(True),
155  Alpha2Order = cms.bool(True), #D.B.: second order effect, does not switch off magnetic field as described
156  AddNoise = cms.bool(True),
157  AddXTalk = cms.bool(True), #D.B.
158  InterstripCoupling = cms.double(0.05), #D.B.
159  SigmaZero = cms.double(0.00037), #D.B.: 3.7um spread for 300um-thick sensor, renormalized in digitizerAlgo
160  SigmaCoeff = cms.double(1.80), #D.B.: to be confirmed with simulations in CMSSW_6.X
161  ClusterWidth = cms.double(3), #D.B.: this is used as number of sigmas for charge collection (3=+-3sigmas)
162  LorentzAngle_DB = cms.bool(False),
163  TanLorentzAnglePerTesla_Endcap = cms.double(0.07),
164  TanLorentzAnglePerTesla_Barrel = cms.double(0.07),
165  KillModules = cms.bool(False),
166  DeadModules_DB = cms.bool(False),
167  DeadModules = cms.VPSet(),
168  AddInefficiency = cms.bool(False),
169  Inefficiency_DB = cms.bool(False),
170  EfficiencyFactors_Barrel = cms.vdouble(0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999, 0.999 ),
171  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,
172  0.999, 0.999 ),#Efficiencies kept as Side2Disk1,Side1Disk1 and so on
173  CellsToKill = cms.VPSet()
174  )
175 )
176 
177 # For premixing stage1
178 # - add noise as by default
179 # - do not add noisy pixels (to be done in stage2)
180 # - do not apply inefficiency (to be done in stage2)
181 # - disable threshold smearing
182 #
183 # For inner pixel
184 # - extend the dynamic range of ADCs
185 #
186 # For outer tracker
187 # - force analog readout to get the ADCs
188 #
189 # NOTE: It is currently assumed that all sub-digitizers have the same ElectronPerAdc.
190 from Configuration.ProcessModifiers.premix_stage1_cff import premix_stage1
191 _premixStage1ModifyDict = dict(
192  premixStage1 = True,
193  PixelDigitizerAlgorithm = dict(
194  AddNoisyPixels = False,
195  AddInefficiency = False,
196  AddThresholdSmearing = False,
197  ElectronPerAdc = phase2TrackerDigitizer.PSPDigitizerAlgorithm.ElectronPerAdc.value(),
198  AdcFullScale = phase2TrackerDigitizer.PSPDigitizerAlgorithm.AdcFullScale.value(),
199  ),
200  PSPDigitizerAlgorithm = dict(
201  AddNoisyPixels = False,
202  AddInefficiency = False,
203  AddThresholdSmearing = False,
204  ),
205  PSSDigitizerAlgorithm = dict(
206  AddNoisyPixels = False,
207  AddInefficiency = False,
208  AddThresholdSmearing = False,
209  ),
210  SSDigitizerAlgorithm = dict(
211  AddNoisyPixels = False,
212  AddInefficiency = False,
213  AddThresholdSmearing = False,
214  ),
215 )
216 premix_stage1.toModify(phase2TrackerDigitizer, **_premixStage1ModifyDict)