Created
November 7, 2022 11:45
-
-
Save mmusich/1bbb30be65b0a28aee6e6d60ea0ca5b5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from __future__ import print_function | |
import FWCore.ParameterSet.Config as cms | |
import sys | |
from enum import Enum | |
from PhysicsTools.PatAlgos.patInputFiles_cff import filesRelValTTbarPileUpGENSIMRECO | |
class RefitType(Enum): | |
STANDARD = 1 | |
COMMON = 2 | |
isDA = True | |
isMC = True | |
allFromGT = True | |
applyBows = True | |
applyExtraConditions = True | |
theRefitter = RefitType.STANDARD | |
process = cms.Process("Demo") | |
################################################################### | |
# Event source and run selection | |
################################################################### | |
process.source = cms.Source("PoolSource", | |
fileNames = cms.untracked.vstring(['root://eoscms.cern.ch//eos/cms/store/user/cmsbuild/store/relval/CMSSW_9_2_2/RelValTTbar_13/GEN-SIM-RECO/PU25ns_92X_upgrade2017_realistic_v1-v1/10000/ECFEA1BD-BF4D-E711-A404-0CC47A7C345C.root']), | |
duplicateCheckMode = cms.untracked.string('checkAllFilesOpened') | |
) | |
runboundary = 1 | |
process.source.firstRun = cms.untracked.uint32(int(runboundary)) | |
process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10) ) | |
################################################################### | |
# JSON Filtering | |
################################################################### | |
if isMC: | |
print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: This is Simulation!") | |
runboundary = 1 | |
else: | |
print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: This is DATA!") | |
import FWCore.PythonUtilities.LumiList as LumiList | |
process.source.lumisToProcess = LumiList.LumiList(filename ='None').getVLuminosityBlockRange() | |
################################################################### | |
# Messages | |
################################################################### | |
process.load('FWCore.MessageService.MessageLogger_cfi') | |
process.MessageLogger.cerr.enable = False | |
process.MessageLogger.PrimaryVertexValidation=dict() | |
process.MessageLogger.SplitVertexResolution=dict() | |
process.MessageLogger.TkTransientTrackingRecHitBuilderESProducer=dict() | |
process.MessageLogger.FilterOutLowPt=dict() | |
process.MessageLogger.cout = cms.untracked.PSet( | |
enable = cms.untracked.bool(True), | |
threshold = cms.untracked.string("INFO"), | |
default = cms.untracked.PSet(limit = cms.untracked.int32(0)), | |
FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1), | |
reportEvery = cms.untracked.int32(1000) | |
), | |
PrimaryVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)), | |
SplitVertexResolution = cms.untracked.PSet( limit = cms.untracked.int32(-1)), | |
FilterOutLowPt = cms.untracked.PSet( limit = cms.untracked.int32(-1)), | |
TkTransientTrackingRecHitBuilderESProducer = cms.untracked.PSet( limit = cms.untracked.int32(-1)), | |
enableStatistics = cms.untracked.bool(True) | |
) | |
#################################################################### | |
# Produce the Transient Track Record in the event | |
#################################################################### | |
process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi") | |
#################################################################### | |
# Get the Magnetic Field | |
#################################################################### | |
process.load('Configuration.StandardSequences.MagneticField_cff') | |
################################################################### | |
# Standard loads | |
################################################################### | |
process.load("Configuration.Geometry.GeometryRecoDB_cff") | |
#################################################################### | |
# Get the BeamSpot | |
#################################################################### | |
process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff") | |
#################################################################### | |
# Get the GlogalTag | |
#################################################################### | |
process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") | |
from Configuration.AlCa.GlobalTag import GlobalTag | |
process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2017_realistic', '') | |
if allFromGT: | |
print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: All is taken from GT") | |
else: | |
#################################################################### | |
# Get Alignment constants | |
#################################################################### | |
from CondCore.DBCommon.CondDBSetup_cfi import * | |
process.trackerAlignment = cms.ESSource("PoolDBESSource",CondDBSetup, | |
connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'), | |
timetype = cms.string("runnumber"), | |
toGet = cms.VPSet(cms.PSet(record = cms.string('TrackerAlignmentRcd'), | |
tag = cms.string('TrackerAlignment_Upgrade2017_design_v4') | |
) | |
) | |
) | |
process.es_prefer_trackerAlignment = cms.ESPrefer("PoolDBESSource", "trackerAlignment") | |
#################################################################### | |
# Get APE | |
#################################################################### | |
process.setAPE = cms.ESSource("PoolDBESSource",CondDBSetup, | |
connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'), | |
timetype = cms.string("runnumber"), | |
toGet = cms.VPSet(cms.PSet(record = cms.string('TrackerAlignmentErrorExtendedRcd'), | |
tag = cms.string('TrackerAlignmentErrorsExtended_Upgrade2017_design_v0') | |
) | |
) | |
) | |
process.es_prefer_setAPE = cms.ESPrefer("PoolDBESSource", "setAPE") | |
#################################################################### | |
# Kinks and Bows (optional) | |
#################################################################### | |
if applyBows: | |
print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: Applying TrackerSurfaceDeformations!") | |
process.trackerBows = cms.ESSource("PoolDBESSource",CondDBSetup, | |
connect = cms.string('frontier://FrontierProd/CMS_CONDITIONS'), | |
toGet = cms.VPSet(cms.PSet(record = cms.string('TrackerSurfaceDeformationRcd'), | |
tag = cms.string('TrackerSurfaceDeformations_zero') | |
) | |
) | |
) | |
process.es_prefer_Bows = cms.ESPrefer("PoolDBESSource", "trackerBows") | |
else: | |
print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: MultiPVValidation: Not applying TrackerSurfaceDeformations!") | |
#################################################################### | |
# Extra corrections not included in the GT | |
#################################################################### | |
if applyExtraConditions: | |
import CalibTracker.Configuration.Common.PoolDBESSource_cfi | |
##### END OF EXTRA CONDITIONS | |
else: | |
print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: Not applying extra calibration constants!") | |
#################################################################### | |
# Load and Configure event selection | |
#################################################################### | |
process.primaryVertexFilter = cms.EDFilter("VertexSelector", | |
src = cms.InputTag("offlinePrimaryVertices"), | |
cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"), | |
filter = cms.bool(True) | |
) | |
process.noscraping = cms.EDFilter("FilterOutScraping", | |
applyfilter = cms.untracked.bool(True), | |
src = cms.untracked.InputTag("generalTracks"), | |
debugOn = cms.untracked.bool(False), | |
numtrack = cms.untracked.uint32(10), | |
thresh = cms.untracked.double(0.25) | |
) | |
process.noslowpt = cms.EDFilter("FilterOutLowPt", | |
applyfilter = cms.untracked.bool(True), | |
src = cms.untracked.InputTag("generalTracks"), | |
debugOn = cms.untracked.bool(False), | |
numtrack = cms.untracked.uint32(0), | |
thresh = cms.untracked.int32(1), | |
ptmin = cms.untracked.double(3.), | |
runControl = cms.untracked.bool(True), | |
runControlNumber = cms.untracked.vuint32(int(runboundary)) | |
) | |
if isMC: | |
process.goodvertexSkim = cms.Sequence(process.noscraping) | |
else: | |
process.goodvertexSkim = cms.Sequence(process.primaryVertexFilter + process.noscraping + process.noslowpt) | |
if(theRefitter == RefitType.COMMON): | |
print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: using the common track selection and refit sequence!") | |
#################################################################### | |
# Load and Configure Common Track Selection and refitting sequence | |
#################################################################### | |
import Alignment.CommonAlignment.tools.trackselectionRefitting as trackselRefit | |
process.seqTrackselRefit = trackselRefit.getSequence(process, 'generalTracks', | |
isPVValidation=True, | |
TTRHBuilder='WithAngleAndTemplate', | |
usePixelQualityFlag=True, | |
openMassWindow=False, | |
cosmicsDecoMode=True, | |
cosmicsZeroTesla=False, | |
momentumConstraint=None, | |
cosmicTrackSplitting=False, | |
use_d0cut=False, | |
) | |
elif (theRefitter == RefitType.STANDARD): | |
print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: using the standard single refit sequence!") | |
#################################################################### | |
# Load and Configure Measurement Tracker Event | |
# (needed in case NavigationSchool is set != '') | |
#################################################################### | |
# process.load("RecoTracker.MeasurementDet.MeasurementTrackerEventProducer_cfi") | |
# process.MeasurementTrackerEvent.pixelClusterProducer = 'generalTracks' | |
# process.MeasurementTrackerEvent.stripClusterProducer = 'generalTracks' | |
# process.MeasurementTrackerEvent.inactivePixelDetectorLabels = cms.VInputTag() | |
# process.MeasurementTrackerEvent.inactiveStripDetectorLabels = cms.VInputTag() | |
#################################################################### | |
# Load and Configure TrackRefitter | |
#################################################################### | |
process.load('HeterogeneousCore.CUDAServices.CUDAService_cfi') | |
process.load("RecoTracker.TrackProducer.TrackRefitters_cff") | |
import RecoTracker.TrackProducer.TrackRefitters_cff | |
process.FinalTrackRefitter = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone() | |
process.FinalTrackRefitter.src = "generalTracks" | |
process.FinalTrackRefitter.TrajectoryInEvent = True | |
process.FinalTrackRefitter.NavigationSchool = '' | |
process.FinalTrackRefitter.TTRHBuilder = 'WithoutAngleFast' #"WithAngleAndTemplate" | |
#################################################################### | |
# Sequence | |
#################################################################### | |
process.seqTrackselRefit = cms.Sequence(process.offlineBeamSpot* | |
# in case NavigatioSchool is set !='' | |
#process.MeasurementTrackerEvent* | |
process.FinalTrackRefitter) | |
#################################################################### | |
# Output file | |
#################################################################### | |
process.TFileService = cms.Service("TFileService", | |
fileName=cms.string("PVValidation_test_0.root") | |
) | |
#################################################################### | |
# Imports of parameters | |
#################################################################### | |
from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices | |
## modify the parameters which differ | |
FilteringParams = offlinePrimaryVertices.TkFilterParameters.clone( | |
maxNormalizedChi2 = 5.0, # chi2ndof < 5 | |
maxD0Significance = 5.0, # fake cut (requiring 1 PXB hit) | |
maxEta = 5.0, # as per recommendation in PR #18330 | |
) | |
## MM 04.05.2017 (use settings as in: https://github.com/cms-sw/cmssw/pull/18330) | |
from RecoVertex.PrimaryVertexProducer.TkClusParameters_cff import DA_vectParameters | |
DAClusterizationParams = DA_vectParameters.clone() | |
GapClusterizationParams = cms.PSet(algorithm = cms.string('gap'), | |
TkGapClusParameters = cms.PSet(zSeparation = cms.double(0.2)) # 0.2 cm max separation betw. clusters | |
) | |
#################################################################### | |
# Deterministic annealing clustering or Gap clustering | |
#################################################################### | |
def switchClusterizerParameters(da): | |
if da: | |
print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: Running DA Algorithm!") | |
return DAClusterizationParams | |
else: | |
print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: Running GAP Algorithm!") | |
return GapClusterizationParams | |
#################################################################### | |
# Configure the PVValidation Analyzer module | |
#################################################################### | |
process.PVValidation = cms.EDAnalyzer("PrimaryVertexValidation", | |
TrackCollectionTag = cms.InputTag("FinalTrackRefitter"), | |
VertexCollectionTag = cms.InputTag("offlinePrimaryVertices"), | |
Debug = cms.bool(False), | |
storeNtuple = cms.bool(False), | |
useTracksFromRecoVtx = cms.bool(False), | |
isLightNtuple = cms.bool(True), | |
askFirstLayerHit = cms.bool(False), | |
forceBeamSpot = cms.untracked.bool(False), | |
probePt = cms.untracked.double(3.), | |
minPt = cms.untracked.double(1.), | |
maxPt = cms.untracked.double(30.), | |
runControl = cms.untracked.bool(True), | |
runControlNumber = cms.untracked.vuint32(int(runboundary)), | |
TkFilterParameters = FilteringParams, | |
TkClusParameters = switchClusterizerParameters(isDA) | |
) | |
#################################################################### | |
# Path | |
#################################################################### | |
process.p = cms.Path(process.goodvertexSkim* | |
process.seqTrackselRefit* | |
process.PVValidation) | |
## PV refit part | |
process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi") | |
process.offlinePrimaryVerticesFromRefittedTrks = offlinePrimaryVertices.clone() | |
process.offlinePrimaryVerticesFromRefittedTrks.TrackLabel = cms.InputTag("FinalTrackRefitter") | |
process.offlinePrimaryVerticesFromRefittedTrks.vertexCollections.maxDistanceToBeam = 1 | |
process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxNormalizedChi2 = 20 | |
process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.minSiliconLayersWithHits = 5 | |
process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxD0Significance = 5.0 | |
# as it was prior to https://github.com/cms-sw/cmssw/commit/c8462ae4313b6be3bbce36e45373aa6e87253c59 | |
process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxD0Error = 1.0 | |
process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.maxDzError = 1.0 | |
process.offlinePrimaryVerticesFromRefittedTrks.TkFilterParameters.minPixelLayersWithHits = 2 | |
################################################################### | |
# The trigger filter module | |
################################################################### | |
from HLTrigger.HLTfilters.triggerResultsFilter_cfi import * | |
process.HLTFilter = triggerResultsFilter.clone( | |
triggerConditions = cms.vstring("HLT_ZeroBias_*"), | |
#triggerConditions = cms.vstring("HLT_HT*"), | |
hltResults = cms.InputTag( "TriggerResults", "", "HLT" ), | |
l1tResults = cms.InputTag( "" ), | |
throw = cms.bool(False) | |
) | |
################################################################### | |
# The analysis module | |
################################################################### | |
process.myanalysis = cms.EDAnalyzer("GeneralPurposeTrackAnalyzer", | |
TkTag = cms.InputTag('FinalTrackRefitter'), | |
isCosmics = cms.bool(False) | |
) | |
################################################################### | |
# The PV resolution module | |
################################################################### | |
process.PrimaryVertexResolution = cms.EDAnalyzer('SplitVertexResolution', | |
storeNtuple = cms.bool(True), | |
vtxCollection = cms.InputTag("offlinePrimaryVerticesFromRefittedTrks"), | |
trackCollection = cms.InputTag("FinalTrackRefitter"), | |
minVertexNdf = cms.untracked.double(10.), | |
minVertexMeanWeight = cms.untracked.double(0.5), | |
runControl = cms.untracked.bool(True), | |
runControlNumber = cms.untracked.vuint32(int(runboundary)) | |
) | |
process.p2 = cms.Path(process.HLTFilter + | |
process.seqTrackselRefit + | |
process.offlinePrimaryVerticesFromRefittedTrks + | |
process.PrimaryVertexResolution + | |
process.myanalysis | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment