Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-12 23:29:24

0001 import FWCore.ParameterSet.Config as cms
0002 import sys
0003 from enum import Enum
0004 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultMC_TTBarPU
0005 
0006 class RefitType(Enum):
0007      STANDARD = 1
0008      COMMON   = 2
0009  
0010 isDA = True
0011 isMC = True
0012 allFromGT = True
0013 applyBows = True
0014 applyExtraConditions = True
0015 theRefitter = RefitType.COMMON
0016 _theTrackCollection = 'generalTracks' # 'ALCARECOTkAlMinBias'
0017 
0018 process = cms.Process("Demo")
0019 
0020 ###################################################################
0021 # Set the process to run multi-threaded
0022 ###################################################################
0023 process.options.numberOfThreads = 8
0024 
0025 ###################################################################
0026 # Event source and run selection
0027 ###################################################################
0028 process.source = cms.Source("PoolSource",
0029                             fileNames = filesDefaultMC_TTBarPU,
0030                             duplicateCheckMode = cms.untracked.string('checkAllFilesOpened')
0031                             )
0032 
0033 runboundary = 1
0034 process.source.firstRun = cms.untracked.uint32(int(runboundary))
0035 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) )
0036 
0037 ###################################################################
0038 # JSON Filtering
0039 ###################################################################
0040 if isMC:
0041      print("############ testPVValidation_cfg.py: msg%-i: This is Simulation!")
0042      runboundary = 1
0043 else:
0044      print("############ testPVValidation_cfg.py: msg%-i: This is DATA!")
0045      import FWCore.PythonUtilities.LumiList as LumiList
0046      process.source.lumisToProcess = LumiList.LumiList(filename ='None').getVLuminosityBlockRange()
0047 
0048 ###################################################################
0049 # Messages
0050 ###################################################################
0051 process.load('FWCore.MessageService.MessageLogger_cfi')   
0052 process.MessageLogger.cerr.enable = False
0053 process.MessageLogger.PrimaryVertexValidation=dict()  
0054 process.MessageLogger.SplitVertexResolution=dict()
0055 process.MessageLogger.FilterOutLowPt=dict()  
0056 process.MessageLogger.cout = cms.untracked.PSet(
0057     enable = cms.untracked.bool(True),
0058     threshold = cms.untracked.string("INFO"),
0059     default   = cms.untracked.PSet(limit = cms.untracked.int32(0)),                       
0060     FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0061                                    reportEvery = cms.untracked.int32(1000)
0062                                    ),                                                      
0063     PrimaryVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0064     SplitVertexResolution   = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0065     FilterOutLowPt          = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0066     enableStatistics = cms.untracked.bool(True)
0067     )
0068 
0069 ####################################################################
0070 # Produce the Transient Track Record in the event
0071 ####################################################################
0072 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0073 
0074 ####################################################################
0075 # Get the Magnetic Field
0076 ####################################################################
0077 process.load('Configuration.StandardSequences.MagneticField_cff')
0078 
0079 ###################################################################
0080 # Standard loads
0081 ###################################################################
0082 process.load("Configuration.Geometry.GeometryRecoDB_cff")
0083 
0084 ####################################################################
0085 # Get the BeamSpot
0086 ####################################################################
0087 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0088 
0089 ####################################################################
0090 # Get the GlogalTag
0091 ####################################################################
0092 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0093 from Configuration.AlCa.GlobalTag import GlobalTag
0094 process.GlobalTag = GlobalTag(process.GlobalTag, '125X_mcRun3_2022_realistic_v3', '')
0095 
0096 if allFromGT:
0097      print("############ testPVValidation_cfg.py: msg%-i: All is taken from GT")
0098 else:
0099      ####################################################################
0100      # Get Alignment constants
0101      ####################################################################
0102      from CondCore.DBCommon.CondDBSetup_cfi import *
0103      process.trackerAlignment = cms.ESSource("PoolDBESSource",CondDBSetup,
0104                                              connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'),
0105                                              toGet = cms.VPSet(cms.PSet(record = cms.string('TrackerAlignmentRcd'),
0106                                                                         tag = cms.string('TrackerAlignment_Upgrade2017_design_v4')
0107                                                                         )
0108                                                                )
0109                                              )
0110      process.es_prefer_trackerAlignment = cms.ESPrefer("PoolDBESSource", "trackerAlignment")
0111 
0112      ####################################################################
0113      # Get APE
0114      ####################################################################
0115      process.setAPE = cms.ESSource("PoolDBESSource",CondDBSetup,
0116                                    connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'),
0117                                    toGet = cms.VPSet(cms.PSet(record = cms.string('TrackerAlignmentErrorExtendedRcd'),
0118                                                               tag = cms.string('TrackerAlignmentErrorsExtended_Upgrade2017_design_v0')
0119                                                               )
0120                                                      )
0121                                    )
0122      process.es_prefer_setAPE = cms.ESPrefer("PoolDBESSource", "setAPE")
0123 
0124      ####################################################################
0125      # Kinks and Bows (optional)
0126      ####################################################################
0127      if applyBows:
0128           print("############ testPVValidation_cfg.py: msg%-i: Applying TrackerSurfaceDeformations!")
0129           process.trackerBows = cms.ESSource("PoolDBESSource",CondDBSetup,
0130                                              connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'),
0131                                              toGet = cms.VPSet(cms.PSet(record = cms.string('TrackerSurfaceDeformationRcd'),
0132                                                                         tag = cms.string('TrackerSurfaceDeformations_zero')
0133                                                                         )
0134                                                                )
0135                                              )
0136           process.es_prefer_Bows = cms.ESPrefer("PoolDBESSource", "trackerBows")
0137      else:
0138           print("############ testPVValidation_cfg.py: msg%-i: MultiPVValidation: Not applying TrackerSurfaceDeformations!")
0139 
0140      ####################################################################
0141      # Extra corrections not included in the GT
0142      ####################################################################
0143      if applyExtraConditions:
0144 
0145           import CalibTracker.Configuration.Common.PoolDBESSource_cfi
0146           ##### END OF EXTRA CONDITIONS
0147  
0148      else:
0149           print("############ testPVValidation_cfg.py: msg%-i: Not applying extra calibration constants!")
0150      
0151 ####################################################################
0152 # Load and Configure event selection
0153 ####################################################################
0154 process.primaryVertexFilter = cms.EDFilter("VertexSelector",
0155                                              src = cms.InputTag("offlinePrimaryVertices"),
0156                                              cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
0157                                              filter = cms.bool(True)
0158                                              )
0159 
0160 process.noscraping = cms.EDFilter("FilterOutScraping",
0161                                   applyfilter = cms.untracked.bool(True),
0162                                   src =  cms.untracked.InputTag(_theTrackCollection),
0163                                   debugOn = cms.untracked.bool(False),
0164                                   numtrack = cms.untracked.uint32(10),
0165                                   thresh = cms.untracked.double(0.25)
0166                                   )
0167 
0168 process.noslowpt = cms.EDFilter("FilterOutLowPt",
0169                                 applyfilter = cms.untracked.bool(True),
0170                                 src =  cms.untracked.InputTag(_theTrackCollection),
0171                                 debugOn = cms.untracked.bool(False),
0172                                 numtrack = cms.untracked.uint32(0),
0173                                 thresh = cms.untracked.int32(1),
0174                                 ptmin  = cms.untracked.double(3.),
0175                                 runControl = cms.untracked.bool(True),
0176                                 runControlNumber = cms.untracked.vuint32(int(runboundary))
0177                                 )
0178 
0179 ####################################################################
0180 # BeamSpot check
0181 ####################################################################
0182 from RecoVertex.BeamSpotProducer.beamSpotCompatibilityChecker_cfi import beamSpotCompatibilityChecker
0183 process.BeamSpotChecker = beamSpotCompatibilityChecker.clone(
0184     bsFromFile = "offlineBeamSpot::RECO",  # source of the event beamspot (in the ALCARECO files)
0185     bsFromDB = "offlineBeamSpot::@currentProcess", # source of the DB beamspot (from Global Tag) NOTE: only if dbFromEvent is True!
0186     dbFromEvent = True,  
0187     warningThr = 3, # significance threshold to emit a warning message
0188     errorThr = 5,    # significance threshold to abort the job
0189 )
0190 
0191 if isMC:
0192      process.goodvertexSkim = cms.Sequence(process.noscraping)
0193 else:
0194      process.goodvertexSkim = cms.Sequence(process.primaryVertexFilter + process.noscraping + process.noslowpt)
0195 
0196 
0197 if(theRefitter == RefitType.COMMON):
0198 
0199      print("############ testPVValidation_cfg.py: msg%-i: using the common track selection and refit sequence!")
0200      ####################################################################
0201      # Load and Configure Common Track Selection and refitting sequence
0202      ####################################################################
0203      import Alignment.CommonAlignment.tools.trackselectionRefitting as trackselRefit
0204      process.seqTrackselRefit = trackselRefit.getSequence(process, _theTrackCollection,
0205                                                           isPVValidation=True, 
0206                                                           TTRHBuilder='WithAngleAndTemplate',
0207                                                           usePixelQualityFlag=True,
0208                                                           openMassWindow=False,
0209                                                           cosmicsDecoMode=True,
0210                                                           cosmicsZeroTesla=False,
0211                                                           momentumConstraint=None,
0212                                                           cosmicTrackSplitting=False,
0213                                                           use_d0cut=False,
0214                                                           )
0215      
0216 elif (theRefitter == RefitType.STANDARD):
0217 
0218      print("############ testPVValidation_cfg.py: msg%-i: using the standard single refit sequence!")
0219      ####################################################################
0220      # Load and Configure Measurement Tracker Event
0221      # (needed in case NavigationSchool is set != '')
0222      ####################################################################
0223      # process.load("RecoTracker.MeasurementDet.MeasurementTrackerEventProducer_cfi") 
0224      # process.MeasurementTrackerEvent.pixelClusterProducer = '_theTrackCollection'
0225      # process.MeasurementTrackerEvent.stripClusterProducer = '_theTrackCollection'
0226      # process.MeasurementTrackerEvent.inactivePixelDetectorLabels = cms.VInputTag()
0227      # process.MeasurementTrackerEvent.inactiveStripDetectorLabels = cms.VInputTag()
0228 
0229      ####################################################################
0230      # Load and Configure TrackRefitter
0231      ####################################################################
0232      process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0233      import RecoTracker.TrackProducer.TrackRefitters_cff
0234      process.FinalTrackRefitter = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone()
0235      process.FinalTrackRefitter.src = _theTrackCollection
0236      process.FinalTrackRefitter.TrajectoryInEvent = True
0237      process.FinalTrackRefitter.NavigationSchool = ''
0238      process.FinalTrackRefitter.TTRHBuilder = "WithAngleAndTemplate"
0239 
0240      ####################################################################
0241      # Sequence
0242      ####################################################################
0243      process.load("RecoLocalTracker.SiPixelRecHits.SiPixelTemplateStoreESProducer_cfi")
0244      process.seqTrackselRefit = cms.Sequence(process.offlineBeamSpot*
0245                                              # in case NavigatioSchool is set !='' 
0246                                              #process.MeasurementTrackerEvent*
0247                                              process.FinalTrackRefitter,
0248                                              cms.Task(process.SiPixelTemplateStoreESProducer))
0249 
0250 ####################################################################
0251 # Output file
0252 ####################################################################
0253 process.TFileService = cms.Service("TFileService",
0254                                    fileName=cms.string("PVValidation_test_0.root")
0255                                   )
0256 
0257 ####################################################################
0258 # Imports of parameters
0259 ####################################################################
0260 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices
0261 ## modify the parameters which differ
0262 FilteringParams = offlinePrimaryVertices.TkFilterParameters.clone(
0263      maxNormalizedChi2 = 5.0,  # chi2ndof < 5
0264      maxD0Significance = 5.0,  # fake cut (requiring 1 PXB hit)
0265      maxEta = 5.0,             # as per recommendation in PR #18330
0266 )
0267 
0268 ## MM 04.05.2017 (use settings as in: https://github.com/cms-sw/cmssw/pull/18330)
0269 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
0270 DAClusterizationParams = DA_vectParameters.clone()
0271 
0272 GapClusterizationParams = cms.PSet(algorithm   = cms.string('gap'),
0273                                    TkGapClusParameters = cms.PSet(zSeparation = cms.double(0.2))  # 0.2 cm max separation betw. clusters
0274                                    )
0275 
0276 ####################################################################
0277 # Deterministic annealing clustering or Gap clustering
0278 ####################################################################
0279 def switchClusterizerParameters(da):
0280      if da:
0281           print("############ testPVValidation_cfg.py: msg%-i: Running DA Algorithm!")
0282           return DAClusterizationParams
0283      else:
0284           print("############ testPVValidation_cfg.py: msg%-i: Running GAP Algorithm!")
0285           return GapClusterizationParams
0286 
0287 ####################################################################
0288 # Configure the PVValidation Analyzer module
0289 ####################################################################
0290 process.PVValidation = cms.EDAnalyzer("PrimaryVertexValidation",
0291                                       TrackCollectionTag = cms.InputTag("FinalTrackRefitter"),
0292                                       VertexCollectionTag = cms.InputTag("offlinePrimaryVertices"),
0293                                       Debug = cms.bool(False),
0294                                       storeNtuple = cms.bool(False),
0295                                       useTracksFromRecoVtx = cms.bool(False),
0296                                       isLightNtuple = cms.bool(True),
0297                                       askFirstLayerHit = cms.bool(False),
0298                                       forceBeamSpot = cms.untracked.bool(False),
0299                                       probePt = cms.untracked.double(3.),
0300                                       minPt   = cms.untracked.double(1.),
0301                                       maxPt   = cms.untracked.double(30.),
0302                                       runControl = cms.untracked.bool(True),
0303                                       runControlNumber = cms.untracked.vuint32(int(runboundary)),
0304                                       TkFilterParameters = FilteringParams,
0305                                       TkClusParameters = switchClusterizerParameters(isDA)
0306                                       )
0307 
0308 ####################################################################
0309 # Path
0310 ####################################################################
0311 process.p = cms.Path(process.goodvertexSkim*
0312                      process.seqTrackselRefit*
0313                      process.BeamSpotChecker*
0314                      process.PVValidation)
0315 
0316 ## PV refit part
0317 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0318 process.offlinePrimaryVerticesFromRefittedTrks  = offlinePrimaryVertices.clone()
0319 process.offlinePrimaryVerticesFromRefittedTrks.TrackLabel                                       = cms.InputTag("FinalTrackRefitter")
0320 process.offlinePrimaryVerticesFromRefittedTrks.vertexCollections.maxDistanceToBeam              = 1
0321 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxNormalizedChi2             = 20
0322 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.minSiliconLayersWithHits      = 5
0323 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxD0Significance             = 5.0
0324 # as it was prior to https://github.com/cms-sw/cmssw/commit/c8462ae4313b6be3bbce36e45373aa6e87253c59
0325 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxD0Error                    = 1.0
0326 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxDzError                    = 1.0
0327 process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.minPixelLayersWithHits        = 2
0328 
0329 ###################################################################
0330 # The trigger filter module
0331 ###################################################################
0332 from HLTrigger.HLTfilters.triggerResultsFilter_cfi import *
0333 process.HLTFilter = triggerResultsFilter.clone(
0334      triggerConditions = cms.vstring("HLT_ZeroBias_*"),
0335      #triggerConditions = cms.vstring("HLT_HT*"),
0336      hltResults = cms.InputTag( "TriggerResults", "", "HLT" ),
0337      l1tResults = cms.InputTag( "" ),
0338      throw = cms.bool(False)
0339 )
0340 
0341 ###################################################################
0342 # The analysis module
0343 ###################################################################
0344 process.myanalysis = cms.EDAnalyzer("GeneralPurposeTrackAnalyzer",
0345                                     TkTag  = cms.InputTag('FinalTrackRefitter'),
0346                                     isCosmics = cms.bool(False)
0347                                     )
0348 
0349 ###################################################################
0350 # The PV resolution module
0351 ###################################################################
0352 process.PrimaryVertexResolution = cms.EDAnalyzer('SplitVertexResolution',
0353                                                  storeNtuple         = cms.bool(True),
0354                                                  vtxCollection       = cms.InputTag("offlinePrimaryVerticesFromRefittedTrks"),
0355                                                  trackCollection     = cms.InputTag("FinalTrackRefitter"),
0356                                                  minVertexNdf        = cms.untracked.double(10.),
0357                                                  minVertexMeanWeight = cms.untracked.double(0.5),
0358                                                  runControl = cms.untracked.bool(True),
0359                                                  runControlNumber = cms.untracked.vuint32(int(runboundary))
0360                                                  )
0361 
0362 process.p2 = cms.Path(process.HLTFilter                               +
0363                       process.seqTrackselRefit                        +
0364                       process.BeamSpotChecker                         +
0365                       process.offlinePrimaryVerticesFromRefittedTrks  +
0366                       process.PrimaryVertexResolution                 +
0367                       process.myanalysis
0368                       )