File indexing completed on 2025-01-08 03:35:45
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 bsFromEvent = "offlineBeamSpot::RECO",
0170 bsFromDB = "offlineBeamSpot",
0171 warningThr = config["validation"].get("bsIncompatibleWarnThresh", 3),
0172 errorThr = config["validation"].get("bsIncompatibleErrThresh", 5),
0173 )
0174
0175 process.load("Alignment.CommonAlignment.filterOutLowPt_cfi")
0176 process.filterOutLowPt.src = cms.untracked.InputTag(config["validation"].get("trackcollection", "ALCARECOTkAlMinBias"))
0177 process.filterOutLowPt.ptmin = cms.untracked.double(config["validation"].get("ptCut", 3.))
0178 process.filterOutLowPt.runControl = False
0179 if(isMultipleRuns):
0180 process.filterOutLowPt.runControlNumber.extend((runboundary))
0181 else:
0182 process.filterOutLowPt.runControlNumber = [runboundary]
0183
0184 if isMC:
0185 process.goodvertexSkim = cms.Sequence(process.BeamSpotChecker + process.noscraping + process.filterOutLowPt)
0186 else:
0187 process.goodvertexSkim = cms.Sequence(process.BeamSpotChecker + process.primaryVertexFilter + process.noscraping + process.filterOutLowPt)
0188
0189
0190
0191
0192
0193 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices
0194
0195 FilteringParams = offlinePrimaryVertices.TkFilterParameters.clone(
0196 maxNormalizedChi2 = 5.0,
0197 maxD0Significance = 5.0,
0198 maxEta = 5.0,
0199 )
0200
0201
0202 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
0203 DAClusterizationParams = DA_vectParameters.clone()
0204
0205 GapClusterizationParams = cms.PSet(algorithm = cms.string('gap'),
0206 TkGapClusParameters = cms.PSet(zSeparation = cms.double(0.2))
0207 )
0208
0209
0210
0211
0212 def switchClusterizerParameters(da):
0213 if da:
0214 print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: Running DA Algorithm!")
0215 return DAClusterizationParams
0216 else:
0217 print(">>>>>>>>>> testPVValidation_cfg.py: msg%-i: Running GAP Algorithm!")
0218 return GapClusterizationParams
0219
0220
0221
0222
0223 from Alignment.OfflineValidation.primaryVertexValidation_cfi import primaryVertexValidation as _primaryVertexValidation
0224 process.PVValidation = _primaryVertexValidation.clone(
0225 TrackCollectionTag = "FinalTrackRefitter",
0226 VertexCollectionTag = config["validation"].get("vertexcollection", "offlinePrimaryVertices"),
0227 Debug = False,
0228 storeNtuple = False,
0229 useTracksFromRecoVtx = False,
0230 isLightNtuple = True,
0231 askFirstLayerHit = False,
0232 forceBeamSpot = config["validation"].get("forceBeamSpot", False),
0233 probePt = config["validation"].get("ptCut", 3),
0234 probeEta = config["validation"].get("etaCut", 2.5),
0235 minPt = config["validation"].get("minPt", 1.),
0236 maxPt = config["validation"].get("maxPt", 30.),
0237 doBPix = config["validation"].get("doBPix", True),
0238 doFPix = config["validation"].get("doFPix", True),
0239 numberOfBins = config["validation"].get("numberOfBins", 48),
0240 runControl = config["validation"].get("runControl", False),
0241 runControlNumber = [runboundary],
0242 TkFilterParameters = FilteringParams,
0243 TkClusParameters = switchClusterizerParameters(isDA)
0244 )
0245
0246
0247
0248
0249 process.TFileService = cms.Service("TFileService",
0250 fileName = cms.string("{}/PVValidation_{}_{}.root".format(config.get("output", os.getcwd()), config["alignment"].get("name", ""), config["validation"].get("IOV", 1.))),
0251 closeFileFast = cms.untracked.bool(True),
0252 )
0253
0254
0255
0256
0257 process.p = cms.Path(process.goodvertexSkim*process.seqTrackselRefit*process.PVValidation)
0258
0259 print("Done")