File indexing completed on 2024-04-06 11:57:11
0001 from __future__ import print_function
0002 from fnmatch import fnmatch
0003 import FWCore.ParameterSet.Config as cms
0004 import FWCore.PythonUtilities.LumiList as LumiList
0005 import FWCore.Utilities.FileUtils as FileUtils
0006 from FWCore.ParameterSet.VarParsing import VarParsing
0007 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultMC_DoubleMuon_string
0008
0009 import sys
0010 import json
0011 import os
0012
0013
0014
0015
0016 process = cms.Process("DiMuonVertexValidation")
0017
0018
0019
0020
0021 options = VarParsing()
0022 options.register("config", "", VarParsing.multiplicity.singleton, VarParsing.varType.string , "AllInOne config")
0023
0024 options.parseArguments()
0025
0026
0027
0028
0029 if options.config == "":
0030 config = {"validation": {},
0031 "alignment": {}}
0032 else:
0033 with open(options.config, "r") as configFile:
0034 config = json.load(configFile)
0035
0036 isMC = config["validation"].get("ismc", True)
0037
0038
0039
0040
0041 readFiles = []
0042
0043 if "dataset" in config["validation"]:
0044 with open(config["validation"]["dataset"], "r") as datafiles:
0045 for fileName in datafiles.readlines():
0046 readFiles.append(fileName.replace("\n", ""))
0047
0048 process.source = cms.Source("PoolSource",
0049 fileNames = cms.untracked.vstring(readFiles),
0050 skipEvents = cms.untracked.uint32(0))
0051 else:
0052 process.source = cms.Source("PoolSource",
0053 fileNames = cms.untracked.vstring(filesDefaultMC_DoubleMuon_string),
0054 skipEvents = cms.untracked.uint32(0))
0055
0056
0057
0058
0059 if "goodlumi" in config["validation"]:
0060 if os.path.isfile(config["validation"]["goodlumi"]):
0061 goodLumiSecs = cms.untracked.VLuminosityBlockRange(LumiList.LumiList(filename = config["validation"]["goodlumi"]).getCMSSWString().split(','))
0062
0063 else:
0064 print("Does not exist: {}. Continue without good lumi section file.")
0065 goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0066
0067 else:
0068 goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0069
0070 if isMC:
0071 pass
0072 else:
0073 process.source.lumisToProcess = goodLumiSecs
0074
0075
0076
0077
0078 process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(config["validation"].get("maxevents", 100)))
0079
0080
0081
0082
0083 process.options = cms.untracked.PSet(
0084 wantSummary = cms.untracked.bool(False),
0085 Rethrow = cms.untracked.vstring("ProductNotFound"),
0086 fileMode = cms.untracked.string('NOMERGE'),
0087 )
0088
0089
0090
0091
0092 process.load('FWCore.MessageService.MessageLogger_cfi')
0093 process.MessageLogger.cerr.enable = False
0094 process.MessageLogger.TrackRefitter=dict()
0095 process.MessageLogger.PrimaryVertexProducer=dict()
0096 process.MessageLogger.DiMuonVertexValidation=dict()
0097 process.MessageLogger.DiLeptonHelpCounts=dict()
0098 process.MessageLogger.PlotsVsKinematics=dict()
0099 process.MessageLogger.cout = cms.untracked.PSet(
0100 enable = cms.untracked.bool(True),
0101 threshold = cms.untracked.string("INFO"),
0102 default = cms.untracked.PSet(limit = cms.untracked.int32(0)),
0103 FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0104 reportEvery = cms.untracked.int32(100)
0105 ),
0106 DiMuonVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0107 DiLeptonHelpCounts = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0108 enableStatistics = cms.untracked.bool(True)
0109 )
0110
0111
0112
0113
0114 process.load('Configuration.StandardSequences.Services_cff')
0115 process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
0116 process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff')
0117 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
0118
0119
0120
0121
0122 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0123 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
0124 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
0125 process.load('TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff')
0126
0127
0128
0129
0130 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0131
0132
0133
0134
0135 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0136 from Configuration.AlCa.GlobalTag import GlobalTag
0137
0138 process.GlobalTag = GlobalTag(process.GlobalTag, config["alignment"].get("globaltag", "auto:phase1_2022_realistic"))
0139
0140
0141
0142
0143 if "conditions" in config["alignment"]:
0144 from CalibTracker.Configuration.Common.PoolDBESSource_cfi import poolDBESSource
0145
0146 for condition in config["alignment"]["conditions"]:
0147 setattr(process, "conditionsIn{}".format(condition), poolDBESSource.clone(
0148 connect = cms.string(str(config["alignment"]["conditions"][condition]["connect"])),
0149 toGet = cms.VPSet(
0150 cms.PSet(
0151 record = cms.string(str(condition)),
0152 tag = cms.string(str(config["alignment"]["conditions"][condition]["tag"]))
0153 )
0154 )
0155 )
0156 )
0157
0158 setattr(process, "prefer_conditionsIn{}".format(condition), cms.ESPrefer("PoolDBESSource", "conditionsIn{}".format(condition)))
0159
0160
0161
0162
0163 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0164 import RecoTracker.TrackProducer.TrackRefitters_cff
0165 process.refittedMuons = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone(
0166 src = config["validation"].get("muonTrackcollection", "ALCARECOTkAlDiMuon"),
0167 TrajectoryInEvent = True,
0168 NavigationSchool = '',
0169 TTRHBuilder = config["validation"].get("tthrbuilder", "WithAngleAndTemplate"))
0170
0171
0172
0173
0174 process.refittedVtxTracks = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone(
0175 src = config["validation"].get("trackcollection", "generalTracks"),
0176 TrajectoryInEvent = True,
0177 NavigationSchool = '',
0178 TTRHBuilder = config["validation"].get("tthrbuilder", "WithAngleAndTemplate"))
0179
0180
0181
0182
0183 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices
0184 process.offlinePrimaryVerticesFromRefittedTrks = offlinePrimaryVertices.clone()
0185 process.offlinePrimaryVerticesFromRefittedTrks.TrackLabel = cms.InputTag("refittedVtxTracks")
0186
0187
0188
0189
0190 process.seqRefitting = cms.Sequence(process.offlineBeamSpot +
0191 process.refittedMuons +
0192 process.refittedVtxTracks +
0193 process.offlinePrimaryVerticesFromRefittedTrks)
0194
0195
0196
0197
0198 process.TFileService = cms.Service("TFileService",
0199 fileName = cms.string("{}/DiMuonVertexValidation.root".format(config.get("output", os.getcwd()))),
0200 closeFileFast = cms.untracked.bool(True))
0201
0202
0203
0204
0205 from Alignment.OfflineValidation.diMuonVertexValidation_cfi import diMuonVertexValidation
0206 process.DiMuonVertexValidation = diMuonVertexValidation.clone(useReco = config["validation"].get("useReco",True),
0207 vertices = 'offlinePrimaryVerticesFromRefittedTrks')
0208
0209
0210
0211
0212 if (config["validation"].get("useReco",True)):
0213 print("I AM USING RECO DATA-TIER")
0214 process.DiMuonVertexValidation.muons = 'muons'
0215 process.DiMuonVertexValidation.tracks = 'refittedVtxTracks'
0216 else:
0217 print("I AM USING ALCARECO DATA-TIER")
0218 if(hasattr(process.DiMuonVertexValidation,'muons')):
0219 delattr(process.DiMuonVertexValidation,'muons')
0220 process.DiMuonVertexValidation.muonTracks = cms.InputTag('refittedMuons')
0221
0222
0223
0224
0225 process.p = cms.Path(process.seqRefitting +
0226 process.offlinePrimaryVerticesFromRefittedTrks +
0227 process.DiMuonVertexValidation)
0228
0229 print("# Done")