File indexing completed on 2024-04-06 11:57:20
0001 import sys
0002 import FWCore.ParameterSet.Config as cms
0003
0004 import FWCore.ParameterSet.VarParsing as VarParsing
0005 options = VarParsing.VarParsing()
0006 options.register("isPhase2",
0007 False,
0008 VarParsing.VarParsing.multiplicity.singleton,
0009 VarParsing.VarParsing.varType.bool,
0010 "is the test running with phase-2 geometry")
0011 options.register("maxEvents",
0012 -1,
0013 VarParsing.VarParsing.multiplicity.singleton,
0014 VarParsing.VarParsing.varType.int,
0015 "number of events to run")
0016 options.parseArguments()
0017
0018 if (options.isPhase2):
0019 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultMC_TTbarPhase2RECO
0020 else:
0021 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultMC_TTBarPU
0022
0023 from enum import Enum
0024 class RefitType(Enum):
0025 STANDARD = 1
0026 COMMON = 2
0027
0028 _isDA = True
0029 _isMC = True
0030 _allFromGT = True
0031 _applyBows = True
0032 _applyExtraConditions = True
0033 _theRefitter = RefitType.COMMON
0034 _theTrackCollection = 'generalTracks'
0035
0036
0037
0038
0039 if(options.isPhase2):
0040 from Configuration.Eras.Era_Phase2C17I13M9_cff import Phase2C17I13M9
0041 process = cms.Process("Demo",Phase2C17I13M9)
0042 else:
0043 from Configuration.Eras.Era_Run3_cff import Run3
0044 process = cms.Process("Demo", Run3)
0045
0046
0047
0048
0049 process.options.numberOfThreads = 8
0050
0051
0052
0053
0054 process.source = cms.Source("PoolSource",
0055 fileNames = (filesDefaultMC_TTbarPhase2RECO if (options.isPhase2) else filesDefaultMC_TTBarPU),
0056 duplicateCheckMode = cms.untracked.string('checkAllFilesOpened'))
0057
0058 runboundary = 1
0059 process.source.firstRun = cms.untracked.uint32(int(runboundary))
0060 process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(options.maxEvents))
0061
0062
0063
0064
0065 if _isMC:
0066 print("############ testPVValidation_cfg.py: msg%-i: This is Simulation!")
0067 runboundary = 1
0068 else:
0069 print("############ testPVValidation_cfg.py: msg%-i: This is DATA!")
0070 import FWCore.PythonUtilities.LumiList as LumiList
0071 process.source.lumisToProcess = LumiList.LumiList(filename ='None').getVLuminosityBlockRange()
0072
0073
0074
0075
0076 process.load('FWCore.MessageService.MessageLogger_cfi')
0077 process.MessageLogger.cerr.enable = False
0078 process.MessageLogger.PrimaryVertexValidation=dict()
0079 process.MessageLogger.SplitVertexResolution=dict()
0080 process.MessageLogger.FilterOutLowPt=dict()
0081 process.MessageLogger.cout = cms.untracked.PSet(
0082 enable = cms.untracked.bool(True),
0083 threshold = cms.untracked.string("INFO"),
0084 default = cms.untracked.PSet(limit = cms.untracked.int32(0)),
0085 FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0086 reportEvery = cms.untracked.int32(1 if (options.isPhase2) else 10)),
0087 PrimaryVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0088 SplitVertexResolution = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0089 FilterOutLowPt = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0090 enableStatistics = cms.untracked.bool(True)
0091 )
0092
0093
0094
0095
0096 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0097
0098
0099
0100
0101 process.load('Configuration.StandardSequences.MagneticField_cff')
0102
0103
0104
0105
0106 if(options.isPhase2):
0107 process.load('Configuration.Geometry.GeometryExtended2026D88Reco_cff')
0108 else:
0109 process.load("Configuration.Geometry.GeometryRecoDB_cff")
0110
0111
0112
0113
0114 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0115
0116
0117
0118
0119 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0120 from Configuration.AlCa.GlobalTag import GlobalTag
0121 process.GlobalTag = GlobalTag(process.GlobalTag, ('auto:phase2_realistic_T21' if options.isPhase2 else 'auto:phase1_2022_realistic'), '')
0122
0123 if _allFromGT:
0124 print("############ testPVValidation_cfg.py: msg%-i: All is taken from GT")
0125 else:
0126 if(options.isPhase2):
0127 print("########## overriding of phase-2 alignment conditions is not yet supported")
0128 pass
0129 else:
0130
0131
0132
0133 from CondCore.DBCommon.CondDBSetup_cfi import *
0134 process.trackerAlignment = cms.ESSource("PoolDBESSource",CondDBSetup,
0135 connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'),
0136 timetype = cms.string("runnumber"),
0137 toGet = cms.VPSet(cms.PSet(record = cms.string('TrackerAlignmentRcd'),
0138 tag = cms.string('TrackerAlignment_Upgrade2017_design_v4')
0139 )
0140 )
0141 )
0142 process.es_prefer_trackerAlignment = cms.ESPrefer("PoolDBESSource", "trackerAlignment")
0143
0144
0145
0146
0147 process.setAPE = cms.ESSource("PoolDBESSource",CondDBSetup,
0148 connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'),
0149 timetype = cms.string("runnumber"),
0150 toGet = cms.VPSet(cms.PSet(record = cms.string('TrackerAlignmentErrorExtendedRcd'),
0151 tag = cms.string('TrackerAlignmentErrorsExtended_Upgrade2017_design_v0')
0152 )
0153 )
0154 )
0155 process.es_prefer_setAPE = cms.ESPrefer("PoolDBESSource", "setAPE")
0156
0157
0158
0159
0160 if _applyBows:
0161 print("############ testPVValidation_cfg.py: msg%-i: Applying TrackerSurfaceDeformations!")
0162 process.trackerBows = cms.ESSource("PoolDBESSource",CondDBSetup,
0163 connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'),
0164 toGet = cms.VPSet(cms.PSet(record = cms.string('TrackerSurfaceDeformationRcd'),
0165 tag = cms.string('TrackerSurfaceDeformations_zero')
0166 )
0167 )
0168 )
0169 process.es_prefer_Bows = cms.ESPrefer("PoolDBESSource", "trackerBows")
0170 else:
0171 print("############ testPVValidation_cfg.py: msg%-i: MultiPVValidation: Not applying TrackerSurfaceDeformations!")
0172
0173
0174
0175
0176 if _applyExtraConditions:
0177
0178 import CalibTracker.Configuration.Common.PoolDBESSource_cfi
0179
0180
0181 else:
0182 print("############ testPVValidation_cfg.py: msg%-i: Not applying extra calibration constants!")
0183
0184
0185
0186
0187 process.primaryVertexFilter = cms.EDFilter("VertexSelector",
0188 src = cms.InputTag("offlinePrimaryVertices"),
0189 cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
0190 filter = cms.bool(True)
0191 )
0192
0193 process.noscraping = cms.EDFilter("FilterOutScraping",
0194 applyfilter = cms.untracked.bool(True),
0195 src = cms.untracked.InputTag(_theTrackCollection),
0196 debugOn = cms.untracked.bool(False),
0197 numtrack = cms.untracked.uint32(10),
0198 thresh = cms.untracked.double(0.25)
0199 )
0200
0201 process.noslowpt = cms.EDFilter("FilterOutLowPt",
0202 applyfilter = cms.untracked.bool(True),
0203 src = cms.untracked.InputTag(_theTrackCollection),
0204 debugOn = cms.untracked.bool(False),
0205 numtrack = cms.untracked.uint32(0),
0206 thresh = cms.untracked.int32(1),
0207 ptmin = cms.untracked.double(3.),
0208 runControl = cms.untracked.bool(True),
0209 runControlNumber = cms.untracked.vuint32(int(runboundary))
0210 )
0211
0212 if _isMC:
0213 process.goodvertexSkim = cms.Sequence(process.noscraping)
0214 else:
0215 process.goodvertexSkim = cms.Sequence(process.primaryVertexFilter + process.noscraping + process.noslowpt)
0216
0217
0218 if(_theRefitter == RefitType.COMMON):
0219
0220 print("############ testPVValidation_cfg.py: msg%-i: using the common track selection and refit sequence!")
0221
0222
0223
0224 import Alignment.CommonAlignment.tools.trackselectionRefitting as trackselRefit
0225 process.seqTrackselRefit = trackselRefit.getSequence(process, _theTrackCollection,
0226 isPVValidation=True,
0227 TTRHBuilder='WithAngleAndTemplate',
0228 usePixelQualityFlag=True,
0229 openMassWindow=False,
0230 cosmicsDecoMode=True,
0231 cosmicsZeroTesla=False,
0232 momentumConstraint=None,
0233 cosmicTrackSplitting=False,
0234 use_d0cut=False,
0235 )
0236
0237 elif (_theRefitter == RefitType.STANDARD):
0238
0239 print("############ testPVValidation_cfg.py: msg%-i: using the standard single refit sequence!")
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0254 import RecoTracker.TrackProducer.TrackRefitters_cff
0255 process.FinalTrackRefitter = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone()
0256 process.FinalTrackRefitter.src = _theTrackCollection
0257 process.FinalTrackRefitter.TrajectoryInEvent = True
0258 process.FinalTrackRefitter.NavigationSchool = ''
0259 process.FinalTrackRefitter.TTRHBuilder = "WithAngleAndTemplate"
0260
0261
0262
0263
0264 process.seqTrackselRefit = cms.Sequence(process.offlineBeamSpot*
0265
0266
0267 process.FinalTrackRefitter)
0268
0269
0270
0271
0272 process.TFileService = cms.Service("TFileService",
0273 fileName=cms.string("PVValidation_test_0.root")
0274 )
0275
0276
0277
0278
0279 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices
0280
0281 FilteringParams = offlinePrimaryVertices.TkFilterParameters.clone(
0282 maxNormalizedChi2 = 5.0,
0283 maxD0Significance = 5.0,
0284 maxEta = 5.0,
0285 )
0286
0287
0288 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
0289 DAClusterizationParams = DA_vectParameters.clone()
0290
0291 GapClusterizationParams = cms.PSet(algorithm = cms.string('gap'),
0292 TkGapClusParameters = cms.PSet(zSeparation = cms.double(0.2))
0293 )
0294
0295
0296
0297
0298 def switchClusterizerParameters(da):
0299 if da:
0300 print("############ testPVValidation_cfg.py: msg%-i: Running DA Algorithm!")
0301 return DAClusterizationParams
0302 else:
0303 print("############ testPVValidation_cfg.py: msg%-i: Running GAP Algorithm!")
0304 return GapClusterizationParams
0305
0306
0307
0308
0309 from prettytable import PrettyTable
0310 x = PrettyTable()
0311 x.field_names = ["Parameter","Value"]
0312 x.add_row(["is DA",_isDA])
0313 x.add_row(["is MC",_isMC])
0314 x.add_row(["applyBows",_applyBows])
0315 x.add_row(["all from GT",_allFromGT])
0316 x.add_row(["extra conditions",_applyExtraConditions])
0317 x.add_row(["refitter type",_theRefitter])
0318 x.add_row(["track collection",_theTrackCollection])
0319 x.add_row(["GlobalTag",process.GlobalTag.globaltag.value()])
0320 x.add_row(["# events",options.maxEvents])
0321 print(x)
0322
0323
0324
0325
0326 process.PVValidation = cms.EDAnalyzer("PrimaryVertexValidation",
0327 TrackCollectionTag = cms.InputTag("FinalTrackRefitter"),
0328 VertexCollectionTag = cms.InputTag("offlinePrimaryVertices"),
0329 Debug = cms.bool(False),
0330 storeNtuple = cms.bool(False),
0331 useTracksFromRecoVtx = cms.bool(False),
0332 isLightNtuple = cms.bool(True),
0333 askFirstLayerHit = cms.bool(False),
0334 forceBeamSpot = cms.untracked.bool(False),
0335 probePt = cms.untracked.double(3.),
0336 minPt = cms.untracked.double(1.),
0337 maxPt = cms.untracked.double(30.),
0338 runControl = cms.untracked.bool(True),
0339 runControlNumber = cms.untracked.vuint32(int(runboundary)),
0340 TkFilterParameters = FilteringParams,
0341 TkClusParameters = switchClusterizerParameters(_isDA)
0342 )
0343
0344
0345
0346
0347 process.p = cms.Path(process.goodvertexSkim*
0348 process.seqTrackselRefit*
0349 process.PVValidation)
0350
0351
0352 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0353 process.offlinePrimaryVerticesFromRefittedTrks = offlinePrimaryVertices.clone()
0354 process.offlinePrimaryVerticesFromRefittedTrks.TrackLabel = cms.InputTag("FinalTrackRefitter")
0355 process.offlinePrimaryVerticesFromRefittedTrks.vertexCollections.maxDistanceToBeam = 1
0356 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxNormalizedChi2 = 20
0357 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.minSiliconLayersWithHits = 5
0358 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxD0Significance = 5.0
0359
0360 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxD0Error = 1.0
0361 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxDzError = 1.0
0362 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.minPixelLayersWithHits = 2
0363
0364
0365
0366
0367 from HLTrigger.HLTfilters.triggerResultsFilter_cfi import *
0368 process.HLTFilter = triggerResultsFilter.clone(
0369 triggerConditions = cms.vstring("HLT_ZeroBias_*"),
0370
0371 hltResults = cms.InputTag( "TriggerResults", "", "HLT" ),
0372 l1tResults = cms.InputTag( "" ),
0373 throw = cms.bool(False)
0374 )
0375
0376
0377
0378
0379 process.trackanalysis = cms.EDAnalyzer("GeneralPurposeTrackAnalyzer",
0380 TkTag = cms.InputTag('FinalTrackRefitter'),
0381 isCosmics = cms.bool(False))
0382
0383 process.vertexanalysis = cms.EDAnalyzer('GeneralPurposeVertexAnalyzer',
0384 ndof = cms.int32(4),
0385 vertexLabel = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'),
0386 beamSpotLabel = cms.InputTag('offlineBeamSpot'),
0387 Xpos = cms.double(0.1),
0388 Ypos = cms.double(0),
0389 TkSizeBin = cms.int32(100),
0390 TkSizeMin = cms.double(499.5),
0391 TkSizeMax = cms.double(-0.5),
0392 DxyBin = cms.int32(100),
0393 DxyMin = cms.double(5000),
0394 DxyMax = cms.double(-5000),
0395 DzBin = cms.int32(100),
0396 DzMin = cms.double(-2000),
0397 DzMax = cms.double(2000),
0398 PhiBin = cms.int32(32),
0399 PhiBin2D = cms.int32(12),
0400 PhiMin = cms.double(-3.1415926535897931),
0401 PhiMax = cms.double(3.1415926535897931),
0402 EtaBin = cms.int32(26),
0403 EtaBin2D = cms.int32(8),
0404 EtaMin = cms.double(-2.7),
0405 EtaMax = cms.double(2.7))
0406
0407
0408
0409
0410 process.PrimaryVertexResolution = cms.EDAnalyzer('SplitVertexResolution',
0411 storeNtuple = cms.bool(True),
0412 vtxCollection = cms.InputTag("offlinePrimaryVerticesFromRefittedTrks"),
0413 trackCollection = cms.InputTag("FinalTrackRefitter"),
0414 minVertexNdf = cms.untracked.double(10.),
0415 minVertexMeanWeight = cms.untracked.double(0.5),
0416 runControl = cms.untracked.bool(True),
0417 runControlNumber = cms.untracked.vuint32(int(runboundary))
0418 )
0419
0420 process.p2 = cms.Path(process.HLTFilter +
0421 process.seqTrackselRefit +
0422 process.offlinePrimaryVerticesFromRefittedTrks +
0423 process.PrimaryVertexResolution +
0424 process.trackanalysis +
0425 process.vertexanalysis
0426 )