File indexing completed on 2025-01-09 23:33:05
0001 import json
0002 import os
0003 import FWCore.ParameterSet.Config as cms
0004 import FWCore.PythonUtilities.LumiList as LumiList
0005 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultMC_NoPU
0006 from FWCore.ParameterSet.VarParsing import VarParsing
0007
0008
0009
0010
0011 process = cms.Process("GenericTrackAndVertexValidation")
0012
0013
0014
0015
0016 options = VarParsing()
0017 options.register("config", "", VarParsing.multiplicity.singleton, VarParsing.varType.string , "AllInOne config")
0018 options.parseArguments()
0019
0020
0021
0022
0023 if options.config == "":
0024 config = {"validation": {},
0025 "alignment": {}}
0026 else:
0027 with open(options.config, "r") as configFile:
0028 config = json.load(configFile)
0029
0030
0031
0032
0033 readFiles = []
0034
0035 if "dataset" in config["validation"]:
0036 with open(config["validation"]["dataset"], "r") as datafiles:
0037 for fileName in datafiles.readlines():
0038 readFiles.append(fileName.replace("\n", ""))
0039
0040 process.source = cms.Source("PoolSource",
0041 fileNames = cms.untracked.vstring(readFiles),
0042 skipEvents = cms.untracked.uint32(0)
0043 )
0044 else:
0045 print(">>>>>>>>>> GenericV_cfg.py: msg%-i: config not specified! Loading default MC simulation -> filesDefaultMC_NoPU!")
0046 process.source = cms.Source("PoolSource",
0047 fileNames = filesDefaultMC_NoPU,
0048 skipEvents = cms.untracked.uint32(0)
0049 )
0050
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 else:
0058 print("Does not exist: {}. Continue without good lumi section file.")
0059 goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0060
0061 else:
0062 goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0063
0064
0065
0066
0067 runboundary = config["validation"].get("runboundary", 1)
0068 isMultipleRuns=False
0069 if(isinstance(runboundary, (list, tuple))):
0070 isMultipleRuns=True
0071 print("Multiple Runs are selected")
0072 if(isMultipleRuns):
0073 process.source.firstRun = cms.untracked.uint32(runboundary[0])
0074 else:
0075 process.source.firstRun = cms.untracked.uint32(runboundary)
0076
0077
0078
0079
0080 process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(config["validation"].get("maxevents", 1)))
0081
0082
0083
0084
0085 process.options = cms.untracked.PSet(
0086 wantSummary = cms.untracked.bool(False),
0087 Rethrow = cms.untracked.vstring("ProductNotFound"),
0088 fileMode = cms.untracked.string('NOMERGE'),
0089 )
0090
0091
0092
0093
0094 process.load("FWCore.MessageLogger.MessageLogger_cfi")
0095 process.MessageLogger.cerr.FwkReport.reportEvery = 1000
0096 process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True)
0097
0098
0099
0100
0101 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0102 process.load("Configuration.Geometry.GeometryDB_cff")
0103 process.load('Configuration.StandardSequences.Services_cff')
0104 process.load("Configuration.StandardSequences.MagneticField_cff")
0105
0106
0107
0108
0109 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0110 process.TrackRefitter.src = config["validation"].get("trackcollection", "generalTracks")
0111 process.TrackRefitter.TTRHBuilder = config["validation"].get("tthrbuilder", "WithAngleAndTemplate")
0112 process.TrackRefitter.NavigationSchool = ""
0113
0114
0115
0116
0117 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0118 from Configuration.AlCa.GlobalTag import GlobalTag
0119 process.GlobalTag = GlobalTag(process.GlobalTag, config["alignment"].get("globaltag", "auto:phase1_2017_realistic"))
0120
0121
0122
0123
0124 if "conditions" in config["alignment"]:
0125 from CalibTracker.Configuration.Common.PoolDBESSource_cfi import poolDBESSource
0126
0127 for condition in config["alignment"]["conditions"]:
0128 setattr(process, "conditionsIn{}".format(condition), poolDBESSource.clone(
0129 connect = cms.string(str(config["alignment"]["conditions"][condition]["connect"])),
0130 toGet = cms.VPSet(
0131 cms.PSet(
0132 record = cms.string(str(condition)),
0133 tag = cms.string(str(config["alignment"]["conditions"][condition]["tag"]))
0134 )
0135 )
0136 )
0137 )
0138
0139 setattr(process, "prefer_conditionsIn{}".format(condition), cms.ESPrefer("PoolDBESSource", "conditionsIn{}".format(condition)))
0140
0141
0142
0143
0144 process.TFileService = cms.Service("TFileService",
0145 fileName = cms.string("{}/GenericValidation.root".format(config.get("output", os.getcwd()))),
0146 closeFileFast = cms.untracked.bool(True))
0147
0148 print("Saving the output at %s" % process.TFileService.fileName.value())
0149
0150
0151
0152
0153 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0154 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices as _offlinePVs
0155 process.offlinePrimaryVerticesFromRefittedTrks = _offlinePVs.clone(
0156 TrackLabel = "TrackRefitter",
0157 TkFilterParameters = dict(
0158 maxNormalizedChi2 = 20,
0159 minSiliconLayersWithHits = 5,
0160 maxD0Significance = 5.0,
0161 maxD0Error = 1.0,
0162 maxDzError = 1.0,
0163 minPixelLayersWithHits = 2
0164 )
0165 )
0166
0167
0168
0169
0170 process.trackanalysis = cms.EDAnalyzer("GeneralPurposeTrackAnalyzer",
0171 TkTag = cms.InputTag("TrackRefitter"),
0172 isCosmics = cms.bool(config["validation"].get("isCosmics", False))
0173 )
0174
0175 process.vertexanalysis = cms.EDAnalyzer('GeneralPurposeVertexAnalyzer',
0176 ndof = cms.int32(4),
0177 vertexLabel = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'),
0178 beamSpotLabel = cms.InputTag('offlineBeamSpot'),
0179 Xpos = cms.double(0.1),
0180 Ypos = cms.double(0),
0181 TkSizeBin = cms.int32(100),
0182 TkSizeMin = cms.double(499.5),
0183 TkSizeMax = cms.double(-0.5),
0184 DxyBin = cms.int32(100),
0185 DxyMin = cms.double(5000),
0186 DxyMax = cms.double(-5000),
0187 DzBin = cms.int32(100),
0188 DzMin = cms.double(-2000),
0189 DzMax = cms.double(2000),
0190 PhiBin = cms.int32(32),
0191 PhiBin2D = cms.int32(12),
0192 PhiMin = cms.double(-3.1415926535897931),
0193 PhiMax = cms.double(3.1415926535897931),
0194 EtaBin = cms.int32(26),
0195 EtaBin2D = cms.int32(8),
0196 EtaMin = cms.double(-2.7),
0197 EtaMax = cms.double(2.7))
0198
0199 process.theValidSequence = cms.Sequence(process.offlineBeamSpot +
0200 process.TrackRefitter +
0201 process.offlinePrimaryVerticesFromRefittedTrks +
0202 process.trackanalysis +
0203 process.vertexanalysis)
0204
0205
0206
0207
0208 from HLTrigger.HLTfilters.triggerResultsFilter_cfi import *
0209 process.theHLTFilter = triggerResultsFilter.clone(
0210 triggerConditions = cms.vstring(config["validation"].get("triggerBits", "*")),
0211 hltResults = cms.InputTag( "TriggerResults", "", "HLT" ),
0212 l1tResults = cms.InputTag( "" ),
0213 throw = cms.bool(False)
0214 )
0215
0216 HLTSel = config["validation"].get("HLTselection", False)
0217
0218 if (HLTSel):
0219 process.p = cms.Path(process.theHLTFilter + process.theValidSequence)
0220 else:
0221 process.p = cms.Path(process.theValidSequence)
0222
0223 print("Done")