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