/
phase2TkCustomsBE5DPixel10Ddev.py
348 lines (300 loc) · 18.2 KB
/
phase2TkCustomsBE5DPixel10Ddev.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
import FWCore.ParameterSet.Config as cms
import SLHCUpgradeSimulations.Configuration.customise_PFlow as customise_PFlow
#GEN-SIM so far...
def customise(process):
if hasattr(process,'DigiToRaw'):
process=customise_DigiToRaw(process)
if hasattr(process,'RawToDigi'):
process=customise_RawToDigi(process)
n=0
if hasattr(process,'reconstruction') or hasattr(process,'dqmoffline_step'):
if hasattr(process,'mix'):
if hasattr(process.mix,'input'):
n=process.mix.input.nbPileupEvents.averageNumber.value()
else:
print 'phase1TkCustoms requires a --pileup option to cmsDriver to run the reconstruction/dqm'
print 'Please provide one!'
sys.exit(1)
if hasattr(process,'reconstruction'):
process=customise_Reco(process,float(n))
if hasattr(process,'digitisation_step'):
process=customise_Digi(process)
if hasattr(process,'dqmoffline_step'):
process=customise_DQM(process,n)
if hasattr(process,'dqmHarvesting'):
process=customise_harvesting(process)
if hasattr(process,'validation_step'):
process=customise_Validation(process,float(n))
process=customise_condOverRides(process)
return process
def customise_Digi(process):
process.digitisation_step.remove(process.mix.digitizers.pixel)
process.load('Geometry.TrackerGeometryBuilder.StackedTrackerGeometry_cfi')
process.load('SimTracker.SiPhase2Digitizer.phase2TrackerDigitizer_cfi')
process.mix.digitizers.pixel=process.phase2TrackerDigitizer
process.mix.digitizers.strip.ROUList = cms.vstring("g4SimHitsTrackerHitsPixelBarrelLowTof",
'g4SimHitsTrackerHitsPixelEndcapLowTof')
# Check if mergedtruth is in the sequence first, could be taken out depending on cmsDriver options
if hasattr(process.mix.digitizers,"mergedtruth") :
process.mix.digitizers.mergedtruth.simHitCollections.tracker.remove( cms.InputTag("g4SimHits","TrackerHitsTIBLowTof"))
process.mix.digitizers.mergedtruth.simHitCollections.tracker.remove( cms.InputTag("g4SimHits","TrackerHitsTIBHighTof"))
process.mix.digitizers.mergedtruth.simHitCollections.tracker.remove( cms.InputTag("g4SimHits","TrackerHitsTOBLowTof"))
process.mix.digitizers.mergedtruth.simHitCollections.tracker.remove( cms.InputTag("g4SimHits","TrackerHitsTOBHighTof"))
process.mix.digitizers.mergedtruth.simHitCollections.tracker.remove( cms.InputTag("g4SimHits","TrackerHitsTECLowTof"))
process.mix.digitizers.mergedtruth.simHitCollections.tracker.remove( cms.InputTag("g4SimHits","TrackerHitsTECHighTof"))
process.mix.digitizers.mergedtruth.simHitCollections.tracker.remove( cms.InputTag("g4SimHits","TrackerHitsTIDLowTof"))
process.mix.digitizers.mergedtruth.simHitCollections.tracker.remove( cms.InputTag("g4SimHits","TrackerHitsTIDHighTof"))
return process
def customise_DigiToRaw(process):
process.digi2raw_step.remove(process.siPixelRawData)
process.digi2raw_step.remove(process.rpcpacker)
return process
def customise_RawToDigi(process):
process.raw2digi_step.remove(process.siPixelDigis)
return process
def customise_Reco(process,pileup):
# insert the new clusterizer
process.load('SimTracker.SiPhase2Digitizer.phase2TrackerClusterizer_cfi')
itIndex = process.pixeltrackerlocalreco.index(process.siPixelClusters)
process.pixeltrackerlocalreco.insert(itIndex, process.siPhase2Clusters)
# keep new clusters
alist=['RAWSIM','FEVTDEBUG','FEVTDEBUGHLT','GENRAW','RAWSIMHLT','FEVT']
for a in alist:
b=a+'output'
if hasattr(process,b):
getattr(process,b).outputCommands.append('keep *_siPhase2Clusters_*_*')
#use with latest pixel geometry
process.ClusterShapeHitFilterESProducer.PixelShapeFile = cms.string('RecoPixelVertexing/PixelLowPtUtilities/data/pixelShape_Phase1Tk.par')
# Need this line to stop error about missing siPixelDigis.
process.MeasurementTracker.inactivePixelDetectorLabels = cms.VInputTag()
# new layer list (3/4 pixel seeding) in InitialStep and pixelTracks
process.pixellayertriplets.layerList = cms.vstring('BPix1+BPix2+BPix3', 'BPix2+BPix3+BPix4',
'BPix2+BPix3+FPix1_pos', 'BPix2+BPix3+FPix1_neg',
'BPix1+BPix2+FPix1_pos', 'BPix1+BPix2+FPix1_neg',
'BPix2+FPix1_pos+FPix2_pos', 'BPix2+FPix1_neg+FPix2_neg',
'BPix1+FPix1_pos+FPix2_pos', 'BPix1+FPix1_neg+FPix2_neg',
'BPix1+FPix2_pos+FPix3_pos', 'BPix1+FPix2_neg+FPix3_neg',
'FPix1_pos+FPix2_pos+FPix3_pos', 'FPix1_neg+FPix2_neg+FPix3_neg',
'FPix2_pos+FPix3_pos+FPix4_pos', 'FPix2_neg+FPix3_neg+FPix4_neg',
'FPix3_pos+FPix4_pos+FPix5_pos', 'FPix3_neg+FPix4_neg+FPix5_neg',
'FPix4_pos+FPix5_pos+FPix6_pos', 'FPix4_neg+FPix5_neg+FPix6_neg',
'FPix5_pos+FPix6_pos+FPix7_pos', 'FPix5_neg+FPix6_neg+FPix7_neg',
'FPix6_pos+FPix7_pos+FPix8_pos', 'FPix6_neg+FPix7_neg+FPix8_neg',
'FPix6_pos+FPix7_pos+FPix9_pos', 'FPix6_neg+FPix7_neg+FPix9_neg')
# New tracking. This is really ugly because it redefines globalreco and reconstruction.
# It can be removed if change one line in Configuration/StandardSequences/python/Reconstruction_cff.py
# from RecoTracker_cff.py to RecoTrackerPhase1PU140_cff.py
# remove all the tracking first
itIndex=process.globalreco.index(process.trackingGlobalReco)
grIndex=process.reconstruction.index(process.globalreco)
process.reconstruction.remove(process.globalreco)
process.globalreco.remove(process.iterTracking)
process.globalreco.remove(process.electronSeedsSeq)
process.reconstruction_fromRECO.remove(process.trackingGlobalReco)
del process.iterTracking
del process.ckftracks
del process.ckftracks_woBH
del process.ckftracks_wodEdX
del process.ckftracks_plus_pixelless
del process.trackingGlobalReco
del process.electronSeedsSeq
del process.InitialStep
del process.LowPtTripletStep
del process.PixelPairStep
del process.DetachedTripletStep
del process.MixedTripletStep
del process.PixelLessStep
del process.TobTecStep
del process.earlyGeneralTracks
del process.ConvStep
del process.earlyMuons
del process.muonSeededStepCore
del process.muonSeededStepExtra
del process.muonSeededStep
del process.muonSeededStepDebug
# add the correct tracking back in
process.load("RecoTracker.Configuration.RecoTrackerPhase2BEPixel10D_cff")
process.globalreco.insert(itIndex,process.trackingGlobalReco)
process.reconstruction.insert(grIndex,process.globalreco)
#Note process.reconstruction_fromRECO is broken
# End of new tracking configuration which can be removed if new Reconstruction is used.
process.reconstruction.remove(process.castorreco)
process.reconstruction.remove(process.CastorTowerReco)
process.reconstruction.remove(process.ak7BasicJets)
process.reconstruction.remove(process.ak7CastorJetID)
#the quadruplet merger configuration
process.load("RecoPixelVertexing.PixelTriplets.quadrupletseedmerging_cff")
process.pixelseedmergerlayers.BPix.TTRHBuilder = cms.string("PixelTTRHBuilderWithoutAngle" )
process.pixelseedmergerlayers.BPix.HitProducer = cms.string("siPixelRecHits" )
process.pixelseedmergerlayers.FPix.TTRHBuilder = cms.string("PixelTTRHBuilderWithoutAngle" )
process.pixelseedmergerlayers.FPix.HitProducer = cms.string("siPixelRecHits" )
process.pixelseedmergerlayers.layerList = cms.vstring('BPix1+BPix2+BPix3+BPix4',
'BPix1+BPix2+BPix3+FPix1_pos','BPix1+BPix2+BPix3+FPix1_neg',
'BPix1+BPix2+FPix1_pos+FPix2_pos', 'BPix1+BPix2+FPix1_neg+FPix2_neg',
'BPix1+FPix1_pos+FPix2_pos+FPix3_pos', 'BPix1+FPix1_neg+FPix2_neg+FPix3_neg',
'FPix1_pos+FPix2_pos+FPix3_pos+FPix4_pos', 'FPix1_neg+FPix2_neg+FPix3_neg+FPix4_neg',
'FPix2_pos+FPix3_pos+FPix4_pos+FPix5_pos', 'FPix2_neg+FPix3_neg+FPix4_neg+FPix5_neg',
'FPix3_pos+FPix4_pos+FPix5_pos+FPix6_pos', 'FPix3_neg+FPix4_neg+FPix5_neg+FPix6_pos',
'FPix4_pos+FPix5_pos+FPix6_pos+FPix7_pos', 'FPix4_neg+FPix5_neg+FPix6_neg+FPix7_neg',
'FPix5_pos+FPix6_pos+FPix7_pos+FPix8_pos', 'FPix5_neg+FPix6_neg+FPix7_neg+FPix8_neg',
'FPix5_pos+FPix6_pos+FPix7_pos+FPix9_pos', 'FPix5_neg+FPix6_neg+FPix7_neg+FPix9_neg',
'FPix6_pos+FPix7_pos+FPix8_pos+FPix9_pos', 'FPix6_neg+FPix7_neg+FPix8_neg+FPix9_neg')
# Need these until pixel templates are used
process.load("SLHCUpgradeSimulations.Geometry.recoFromSimDigis_cff")
# PixelCPEGeneric #
process.PixelCPEGenericESProducer.Upgrade = cms.bool(True)
process.PixelCPEGenericESProducer.UseErrorsFromTemplates = cms.bool(False)
process.PixelCPEGenericESProducer.LoadTemplatesFromDB = cms.bool(False)
process.PixelCPEGenericESProducer.TruncatePixelCharge = cms.bool(False)
process.PixelCPEGenericESProducer.IrradiationBiasCorrection = False
process.PixelCPEGenericESProducer.DoCosmics = False
# CPE for other steps
process.siPixelRecHits.CPE = cms.string('PixelCPEGeneric')
# Turn of template use in tracking (iterative steps handled inside their configs)
process.mergedDuplicateTracks.TTRHBuilder = 'WithTrackAngle'
process.ctfWithMaterialTracks.TTRHBuilder = 'WithTrackAngle'
process.muonSeededSeedsInOut.TrackerRecHitBuilder=cms.string('WithTrackAngle')
process.muonSeededTracksInOut.TTRHBuilder=cms.string('WithTrackAngle')
process.muons1stStep.TrackerKinkFinderParameters.TrackerRecHitBuilder=cms.string('WithTrackAngle')
process.regionalCosmicTracks.TTRHBuilder=cms.string('WithTrackAngle')
process.cosmicsVetoTracksRaw.TTRHBuilder=cms.string('WithTrackAngle')
# End of pixel template needed section
process.regionalCosmicTrackerSeeds.OrderedHitsFactoryPSet.LayerPSet.layerList = cms.vstring('BPix9+BPix8') # Optimize later
process.regionalCosmicTrackerSeeds.OrderedHitsFactoryPSet.LayerPSet.BPix = cms.PSet(
HitProducer = cms.string('siPixelRecHits'),
hitErrorRZ = cms.double(0.006),
useErrorsFromParam = cms.bool(True),
TTRHBuilder = cms.string('TTRHBuilderWithoutAngle4PixelPairs'),
skipClusters = cms.InputTag("pixelPairStepClusters"),
hitErrorRPhi = cms.double(0.0027)
)
# Make pixelTracks use quadruplets
process.pixelTracks.SeedMergerPSet = cms.PSet(
layerListName = cms.string('PixelSeedMergerQuadruplets'),
addRemainingTriplets = cms.bool(False),
mergeTriplets = cms.bool(True),
ttrhBuilderLabel = cms.string('PixelTTRHBuilderWithoutAngle')
)
process.pixelTracks.OrderedHitsFactoryPSet.GeneratorPSet.maxElement = cms.uint32(0)
process.pixelTracks.FilterPSet.chi2 = cms.double(50.0)
process.pixelTracks.FilterPSet.tipMax = cms.double(0.05)
process.pixelTracks.RegionFactoryPSet.RegionPSet.originRadius = cms.double(0.02)
# Particle flow needs to know that the eta range has increased, for
# when linking tracks to HF clusters
process=customise_PFlow.customise_extendedTrackerBarrel( process )
return process
def customise_condOverRides(process):
process.load('SLHCUpgradeSimulations.Geometry.fakeConditions_BarrelEndcap5DPixel10D_cff')
process.trackerNumberingSLHCGeometry.layerNumberPXB = cms.uint32(20)
process.trackerTopologyConstants.pxb_layerStartBit = cms.uint32(20)
process.trackerTopologyConstants.pxb_ladderStartBit = cms.uint32(12)
process.trackerTopologyConstants.pxb_moduleStartBit = cms.uint32(2)
process.trackerTopologyConstants.pxb_layerMask = cms.uint32(15)
process.trackerTopologyConstants.pxb_ladderMask = cms.uint32(255)
process.trackerTopologyConstants.pxb_moduleMask = cms.uint32(1023)
process.trackerTopologyConstants.pxf_diskStartBit = cms.uint32(18)
process.trackerTopologyConstants.pxf_bladeStartBit = cms.uint32(12)
process.trackerTopologyConstants.pxf_panelStartBit = cms.uint32(10)
process.trackerTopologyConstants.pxf_moduleMask = cms.uint32(255)
return process
def l1EventContent(process):
#extend the event content
alist=['RAWSIM','FEVTDEBUG','FEVTDEBUGHLT','GENRAW','RAWSIMHLT','FEVT']
for a in alist:
b=a+'output'
if hasattr(process,b):
getattr(process,b).outputCommands.append('keep *_TTClustersFromPixelDigis_*_*')
getattr(process,b).outputCommands.append('keep *_TTStubsFromPixelDigis_*_*')
getattr(process,b).outputCommands.append('keep *_TTTracksFromPixelDigis_*_*')
getattr(process,b).outputCommands.append('keep *_TTClusterAssociatorFromPixelDigis_*_*')
getattr(process,b).outputCommands.append('keep *_TTStubAssociatorFromPixelDigis_*_*')
getattr(process,b).outputCommands.append('keep *_TTTrackAssociatorFromPixelDigis_*_*')
getattr(process,b).outputCommands.append('drop PixelDigiSimLinkedmDetSetVector_mix_*_*')
getattr(process,b).outputCommands.append('drop PixelDigiedmDetSetVector_mix_*_*')
getattr(process,b).outputCommands.append('keep *_simSiPixelDigis_*_*')
return process
def customise_DQM(process,pileup):
# We cut down the number of iterative tracking steps
# process.dqmoffline_step.remove(process.TrackMonStep3)
# process.dqmoffline_step.remove(process.TrackMonStep4)
# process.dqmoffline_step.remove(process.TrackMonStep5)
# process.dqmoffline_step.remove(process.TrackMonStep6)
#The following two steps were removed
#process.PixelLessStep*
#process.TobTecStep*
# process.dqmoffline_step.remove(process.muonAnalyzer)
process.dqmoffline_step.remove(process.jetMETAnalyzer)
# process.dqmoffline_step.remove(process.TrackMonStep9)
# process.dqmoffline_step.remove(process.TrackMonStep10)
# process.dqmoffline_step.remove(process.PixelTrackingRecHitsValid)
#add Phase 2 Upgrade Outer Tracker
stripIndex=process.DQMOfflinePreDPG.index(process.SiStripDQMTier0)
process.load("DQM.Phase2OuterTracker.OuterTrackerSourceConfig_cff")
process.dqmoffline_step.insert(stripIndex, process.OuterTrackerSource)
#put isUpgrade flag==true
process.SiPixelRawDataErrorSource.isUpgrade = cms.untracked.bool(True)
process.SiPixelDigiSource.isUpgrade = cms.untracked.bool(True)
process.SiPixelClusterSource.isUpgrade = cms.untracked.bool(True)
process.SiPixelRecHitSource.isUpgrade = cms.untracked.bool(True)
process.SiPixelTrackResidualSource.isUpgrade = cms.untracked.bool(True)
process.SiPixelHitEfficiencySource.isUpgrade = cms.untracked.bool(True)
from DQM.TrackingMonitor.customizeTrackingMonitorSeedNumber import customise_trackMon_IterativeTracking_PHASE1PU140
process=customise_trackMon_IterativeTracking_PHASE1PU140(process)
process.dqmoffline_step.remove(process.Phase1Pu70TrackMonStep2)
process.dqmoffline_step.remove(process.Phase1Pu70TrackMonStep4)
if hasattr(process,"globalrechitsanalyze") : # Validation takes this out if pileup is more than 30
process.globalrechitsanalyze.ROUList = cms.vstring(
'g4SimHitsTrackerHitsPixelBarrelLowTof',
'g4SimHitsTrackerHitsPixelBarrelHighTof',
'g4SimHitsTrackerHitsPixelEndcapLowTof',
'g4SimHitsTrackerHitsPixelEndcapHighTof')
return process
def customise_Validation(process,pileup):
process.validation_step.remove(process.PixelTrackingRecHitsValid)
process.validation_step.remove(process.stripRecHitsValid)
process.validation_step.remove(process.trackerHitsValid)
process.validation_step.remove(process.StripTrackingRecHitsValid)
# Include Phase 2 Upgrade Outer Tracker
stripVIndex=process.globalValidation.index(process.trackerDigisValidation)
process.load("Validation.Phase2OuterTracker.OuterTrackerSourceConfig_cff")
process.validation_step.insert(stripVIndex, process.OuterTrackerSource)
# We don't run the HLT
process.validation_step.remove(process.HLTSusyExoVal)
process.validation_step.remove(process.hltHiggsValidator)
process.validation_step.remove(process.relvalMuonBits)
if pileup>30:
process.trackValidator.label=cms.VInputTag(cms.InputTag("cutsRecoTracksHp"))
process.tracksValidationSelectors = cms.Sequence(process.cutsRecoTracksHp)
process.globalValidation.remove(process.recoMuonValidation)
process.validation.remove(process.recoMuonValidation)
process.validation_preprod.remove(process.recoMuonValidation)
process.validation_step.remove(process.recoMuonValidation)
process.validation.remove(process.globalrechitsanalyze)
process.validation_prod.remove(process.globalrechitsanalyze)
process.validation_step.remove(process.globalrechitsanalyze)
process.validation.remove(process.stripRecHitsValid)
process.validation_step.remove(process.stripRecHitsValid)
process.validation_step.remove(process.StripTrackingRecHitsValid)
process.globalValidation.remove(process.vertexValidation)
process.validation.remove(process.vertexValidation)
process.validation_step.remove(process.vertexValidation)
process.mix.input.nbPileupEvents.averageNumber = cms.double(0.0)
process.mix.minBunch = cms.int32(0)
process.mix.maxBunch = cms.int32(0)
if hasattr(process,'simHitTPAssocProducer'):
process.simHitTPAssocProducer.simHitSrc=cms.VInputTag(cms.InputTag("g4SimHits","TrackerHitsPixelBarrelLowTof"),
cms.InputTag("g4SimHits","TrackerHitsPixelEndcapLowTof"))
return process
def customise_harvesting(process):
process.dqmHarvesting.remove(process.jetMETDQMOfflineClient)
process.dqmHarvesting.remove(process.dataCertificationJetMET)
process.dqmHarvesting.remove(process.sipixelEDAClient)
process.dqmHarvesting.remove(process.sipixelCertification)
# Include Phase 2 Upgrade Outer Tracker
strip2Index=process.DQMOffline_SecondStep_PreDPG.index(process.SiStripOfflineDQMClient)
process.load("DQM.Phase2OuterTracker.OuterTrackerClientConfig_cff")
process.dqmHarvesting.insert(strip2Index, process.OuterTrackerClient)
strip2VIndex=process.postValidation.index(process.bTagCollectorSequenceMCbcl)
process.load("Validation.Phase2OuterTracker.OuterTrackerClientConfig_cff")
process.validationHarvesting.insert(strip2VIndex, process.OuterTrackerClient)
return (process)