File indexing completed on 2025-05-23 23:48:06
0001
0002 import FWCore.ParameterSet.Config as cms
0003 import FWCore.PythonUtilities.LumiList as LumiList
0004 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultData_HLTPhys2024I
0005
0006 from FWCore.ParameterSet.VarParsing import VarParsing
0007
0008 from Alignment.OfflineValidation.TkAlAllInOneTool.utils import _byteify
0009 import json
0010 import os
0011
0012
0013 process = cms.Process("PrimaryVertexValidation")
0014
0015
0016 options = VarParsing()
0017 options.register("config", "", VarParsing.multiplicity.singleton, VarParsing.varType.string , "AllInOne config")
0018
0019 options.parseArguments()
0020
0021
0022 if options.config == "":
0023 config = {"validation": {},
0024 "alignment": {}}
0025 else:
0026 with open(options.config, "r") as configFile:
0027 config = json.load(configFile)
0028
0029 isDA = config["validation"].get("isda", True)
0030 isMC = config["validation"].get("ismc", True)
0031
0032 runboundary = config["validation"].get("runboundary", 1)
0033
0034
0035 readFiles = []
0036
0037 if "dataset" in config["validation"]:
0038 with open(config["validation"]["dataset"], "r") as datafiles:
0039 for fileName in datafiles.readlines():
0040 readFiles.append(fileName.replace("\n", ""))
0041
0042 process.source = cms.Source("PoolSource",
0043 fileNames = cms.untracked.vstring(readFiles),
0044 skipEvents = cms.untracked.uint32(0)
0045 )
0046 else:
0047 print(">>>>>>>>>> PV_cfg.py: msg%-i: config not specified! Loading default dataset -> filesDefaultData_HLTPhys2024I!")
0048 process.source = cms.Source("PoolSource",
0049 fileNames = filesDefaultData_HLTPhys2024I,
0050 skipEvents = cms.untracked.uint32(0)
0051 )
0052
0053
0054 if "goodlumi" in config["validation"]:
0055 if os.path.isfile(config["validation"]["goodlumi"]):
0056 goodLumiSecs = cms.untracked.VLuminosityBlockRange(LumiList.LumiList(filename = config["validation"]["goodlumi"]).getCMSSWString().split(','))
0057
0058 else:
0059 print("Does not exist: {}. Continue without good lumi section file.")
0060 goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0061
0062 else:
0063 goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0064
0065 if isMC:
0066 print(">>>>>>>>>> PV_cfg.py: msg%-i: This is simulation!")
0067 runboundary = 1
0068 else:
0069 process.source.lumisToProcess = goodLumiSecs
0070
0071 isMultipleRuns=False
0072 if(isinstance(runboundary, (list, tuple))):
0073 isMultipleRuns=True
0074 print("Multiple Runs are selected")
0075 if(isMultipleRuns):
0076 process.source.firstRun = cms.untracked.uint32(runboundary[0])
0077 else:
0078 process.source.firstRun = cms.untracked.uint32(runboundary)
0079
0080
0081 process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(config["validation"].get("maxevents", 1)))
0082
0083
0084 process.options = cms.untracked.PSet(
0085 wantSummary = cms.untracked.bool(False),
0086 Rethrow = cms.untracked.vstring("ProductNotFound"),
0087 fileMode = cms.untracked.string('NOMERGE'),
0088 )
0089
0090 process.load("FWCore.MessageLogger.MessageLogger_cfi")
0091 process.MessageLogger = cms.Service("MessageLogger",
0092 destinations = cms.untracked.vstring('cerr'),
0093 cerr = cms.untracked.PSet(threshold = cms.untracked.string('INFO'))
0094 )
0095
0096
0097 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0098 process.load("Configuration.Geometry.GeometryRecoDB_cff")
0099 process.load('Configuration.StandardSequences.Services_cff')
0100 process.load("Configuration.StandardSequences.MagneticField_cff")
0101
0102
0103
0104
0105 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0106
0107
0108
0109
0110 import Alignment.CommonAlignment.tools.trackselectionRefitting as trackselRefit
0111 process.seqTrackselRefit = trackselRefit.getSequence(process,
0112 config["validation"].get("trackcollection", "ALCARECOTkAlMinBias"),
0113 isPVValidation=True,
0114 TTRHBuilder=config["validation"].get("tthrbuilder", "WithAngleAndTemplate"),
0115 usePixelQualityFlag=config["validation"].get("usePixelQualityFlag", True),
0116 openMassWindow=False,
0117 cosmicsDecoMode=True,
0118 cosmicsZeroTesla=config["validation"].get("cosmicsZeroTesla", False),
0119 momentumConstraint=None,
0120 cosmicTrackSplitting=False,
0121 use_d0cut=False,
0122 )
0123
0124
0125 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0126 from Configuration.AlCa.GlobalTag import GlobalTag
0127 process.GlobalTag = GlobalTag(process.GlobalTag, config["alignment"].get("globaltag", "140X_dataRun3_Prompt_v4"))
0128
0129
0130 if "conditions" in config["alignment"]:
0131 from CalibTracker.Configuration.Common.PoolDBESSource_cfi import poolDBESSource
0132
0133 for condition in config["alignment"]["conditions"]:
0134 setattr(process, "conditionsIn{}".format(condition), poolDBESSource.clone(
0135 connect = cms.string(str(config["alignment"]["conditions"][condition]["connect"])),
0136 toGet = cms.VPSet(
0137 cms.PSet(
0138 record = cms.string(str(condition)),
0139 tag = cms.string(str(config["alignment"]["conditions"][condition]["tag"]))
0140 )
0141 )
0142 )
0143 )
0144
0145 setattr(process, "prefer_conditionsIn{}".format(condition), cms.ESPrefer("PoolDBESSource", "conditionsIn{}".format(condition)))
0146
0147
0148
0149
0150 process.primaryVertexFilter = cms.EDFilter("VertexSelector",
0151 src = cms.InputTag(config["validation"].get("vertexcollection", "offlinePrimaryVertices")),
0152 cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
0153 filter = cms.bool(True)
0154 )
0155
0156 process.noscraping = cms.EDFilter("FilterOutScraping",
0157 applyfilter = cms.untracked.bool(True),
0158 src = cms.untracked.InputTag(config["validation"].get("trackcollection", "ALCARECOTkAlMinBias")),
0159 debugOn = cms.untracked.bool(False),
0160 numtrack = cms.untracked.uint32(10),
0161 thresh = cms.untracked.double(0.25)
0162 )
0163
0164
0165
0166
0167 from RecoVertex.BeamSpotProducer.beamSpotCompatibilityChecker_cfi import beamSpotCompatibilityChecker
0168 process.BeamSpotChecker = beamSpotCompatibilityChecker.clone(
0169 bsFromFile = config["validation"].get("bsFromFile","offlineBeamSpot::RECO"),
0170 bsFromDB = "offlineBeamSpot::@currentProcess",
0171 dbFromEvent = True,
0172 warningThr = config["validation"].get("bsIncompatibleWarnThresh", 3),
0173 errorThr = config["validation"].get("bsIncompatibleErrThresh", 5),
0174 )
0175
0176 process.load("Alignment.CommonAlignment.filterOutLowPt_cfi")
0177 process.filterOutLowPt.src = cms.untracked.InputTag(config["validation"].get("trackcollection", "ALCARECOTkAlMinBias"))
0178 process.filterOutLowPt.ptmin = cms.untracked.double(config["validation"].get("ptCut", 3.))
0179 process.filterOutLowPt.runControl = False
0180 if(isMultipleRuns):
0181 process.filterOutLowPt.runControlNumber.extend((runboundary))
0182 else:
0183 process.filterOutLowPt.runControlNumber = [runboundary]
0184
0185 if isMC:
0186 process.goodvertexSkim = cms.Sequence(process.noscraping + process.filterOutLowPt)
0187 else:
0188 process.goodvertexSkim = cms.Sequence(process.primaryVertexFilter + process.noscraping + process.filterOutLowPt)
0189
0190
0191
0192
0193
0194 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices
0195
0196 FilteringParams = offlinePrimaryVertices.TkFilterParameters.clone(
0197 maxNormalizedChi2 = 5.0,
0198 maxD0Significance = 5.0,
0199 maxEta = 5.0,
0200 )
0201
0202
0203 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
0204 DAClusterizationParams = DA_vectParameters.clone()
0205
0206 GapClusterizationParams = cms.PSet(algorithm = cms.string('gap'),
0207 TkGapClusParameters = cms.PSet(zSeparation = cms.double(0.2))
0208 )
0209
0210
0211
0212
0213 def switchClusterizerParameters(da):
0214 if da:
0215 print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: Running DA Algorithm!")
0216 return DAClusterizationParams
0217 else:
0218 print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: Running GAP Algorithm!")
0219 return GapClusterizationParams
0220
0221
0222
0223
0224 from Alignment.OfflineValidation.primaryVertexValidation_cfi import primaryVertexValidation as _primaryVertexValidation
0225 process.PVValidation = _primaryVertexValidation.clone(
0226 TrackCollectionTag = "FinalTrackRefitter",
0227 VertexCollectionTag = config["validation"].get("vertexcollection", "offlinePrimaryVertices"),
0228 Debug = False,
0229 storeNtuple = False,
0230 useTracksFromRecoVtx = False,
0231 isLightNtuple = True,
0232 askFirstLayerHit = False,
0233 forceBeamSpot = config["validation"].get("forceBeamSpot", False),
0234 probePt = config["validation"].get("ptCut", 3),
0235 probeEta = config["validation"].get("etaCut", 2.5),
0236 minPt = config["validation"].get("minPt", 1.),
0237 maxPt = config["validation"].get("maxPt", 30.),
0238 doBPix = config["validation"].get("doBPix", True),
0239 doFPix = config["validation"].get("doFPix", True),
0240 numberOfBins = config["validation"].get("numberOfBins", 48),
0241 runControl = config["validation"].get("runControl", False),
0242 runControlNumber = [runboundary],
0243 TkFilterParameters = FilteringParams,
0244 TkClusParameters = switchClusterizerParameters(isDA)
0245 )
0246
0247
0248
0249
0250 process.TFileService = cms.Service("TFileService",
0251 fileName = cms.string("{}/PVValidation_{}_{}.root".format(config.get("output", os.getcwd()), config["alignment"].get("name", ""), config["validation"].get("IOV", 1.))),
0252 closeFileFast = cms.untracked.bool(True),
0253 )
0254
0255
0256
0257
0258 process.p = cms.Path(process.goodvertexSkim*
0259 process.seqTrackselRefit*
0260 process.BeamSpotChecker*
0261 process.PVValidation)
0262
0263 print("Done")