File indexing completed on 2025-01-08 03:35:45
0001 import math
0002 import json
0003 import os
0004 from sys import version_info
0005
0006 import FWCore.ParameterSet.Config as cms
0007 import FWCore.PythonUtilities.LumiList as LumiList
0008 from FWCore.ParameterSet.VarParsing import VarParsing
0009 from Alignment.OfflineValidation.TkAlAllInOneTool.utils import _byteify
0010 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultMC_DoubleMuonAlCa_string
0011
0012
0013
0014
0015 process = cms.Process("TkAlignmentDiMuonValidation")
0016
0017
0018
0019
0020 options = VarParsing()
0021 options.register("config", "", VarParsing.multiplicity.singleton, VarParsing.varType.string , "AllInOne config")
0022 options.parseArguments()
0023
0024
0025 valiMode = "StandAlone"
0026
0027
0028
0029
0030 if options.config == "":
0031 config = {"validation": {},
0032 "alignment": {}}
0033 else:
0034 with open(options.config, "r") as configFile:
0035 if version_info.major == 2:
0036 config = _byteify(json.load(configFile, object_hook=_byteify),ignore_dicts=True)
0037 else:
0038 config = json.load(configFile)
0039
0040
0041
0042
0043 readFiles = []
0044
0045 if "dataset" in config["validation"]:
0046 with open(config["validation"]["dataset"], "r") as datafiles:
0047 for fileName in datafiles.readlines():
0048 readFiles.append(fileName.replace("\n", ""))
0049 else:
0050 readFiles = filesDefaultMC_DoubleMuonAlCa_string
0051
0052
0053
0054
0055 if "goodlumi" in config["validation"]:
0056 if os.path.isfile(config["validation"]["goodlumi"]):
0057 goodLumiSecs = cms.untracked.VLuminosityBlockRange(LumiList.LumiList(filename = config["validation"]["goodlumi"]).getCMSSWString().split(','))
0058
0059 else:
0060 print("Does not exist: {}. Continue without good lumi section file.")
0061 goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0062
0063 else:
0064 goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0065
0066
0067
0068
0069 process.source = cms.Source("PoolSource",
0070 fileNames = cms.untracked.vstring(readFiles),
0071 lumisToProcess = goodLumiSecs,
0072 skipEvents = cms.untracked.uint32(0)
0073 )
0074 process.maxEvents = cms.untracked.PSet(
0075 input = cms.untracked.int32(config["validation"].get("maxevents", 2000000))
0076 )
0077
0078
0079
0080
0081 process.options = cms.untracked.PSet(
0082 wantSummary = cms.untracked.bool(False),
0083 Rethrow = cms.untracked.vstring("ProductNotFound"),
0084 fileMode = cms.untracked.string('NOMERGE'),
0085 )
0086
0087
0088
0089
0090 process.load("FWCore.MessageService.MessageLogger_cfi")
0091 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0092 process.load("Configuration.StandardSequences.Services_cff")
0093 process.load("Configuration.StandardSequences.GeometryRecoDB_cff")
0094 process.load("Configuration.StandardSequences.MagneticField_cff")
0095 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0096
0097
0098
0099
0100 process.load("FWCore.MessageLogger.MessageLogger_cfi")
0101 process.MessageLogger.cerr.FwkReport.reportEvery = 1000
0102
0103
0104
0105
0106 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0107 import RecoTracker.TrackProducer.TrackRefitters_cff
0108 process.TrackRefitter = process.TrackRefitterP5.clone(
0109 src = config["validation"].get("trackcollection", "ALCARECOTkAlZMuMu"),
0110 TrajectoryInEvent = True,
0111 TTRHBuilder = config["validation"].get("tthrbuilder", "WithAngleAndTemplate"),
0112 NavigationSchool = "",
0113 )
0114
0115
0116
0117
0118 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0119 from Configuration.AlCa.GlobalTag import GlobalTag
0120 process.GlobalTag = GlobalTag(process.GlobalTag, config["alignment"].get("globaltag", "auto:phase1_2024_realistic"))
0121
0122
0123
0124
0125 import CalibTracker.Configuration.Common.PoolDBESSource_cfi
0126 if "conditions" in config["alignment"]:
0127 from CalibTracker.Configuration.Common.PoolDBESSource_cfi import poolDBESSource
0128 for condition in config["alignment"]["conditions"]:
0129 setattr(process, "conditionsIn{}".format(condition), poolDBESSource.clone(
0130 connect = cms.string(str(config["alignment"]["conditions"][condition]["connect"])),
0131 toGet = cms.VPSet(cms.PSet(record = cms.string(str(condition)),
0132 tag = cms.string(str(config["alignment"]["conditions"][condition]["tag"]))
0133 )
0134 )
0135 )
0136 )
0137
0138 setattr(process, "prefer_conditionsIn{}".format(condition), cms.ESPrefer("PoolDBESSource", "conditionsIn{}".format(condition)))
0139
0140
0141
0142
0143 from Alignment.OfflineValidation.diMuonValidation_cfi import diMuonValidation as _diMuonValidation
0144 process.DiMuonMassValidation = _diMuonValidation.clone(
0145 TkTag = 'TrackRefitter',
0146
0147 Pair_mass_min = 60.,
0148 Pair_mass_max = 120.,
0149 Pair_mass_nbins = 80,
0150 Pair_etaminpos = -2.4,
0151 Pair_etamaxpos = 2.4,
0152 Pair_etaminneg = -2.4,
0153 Pair_etamaxneg = 2.4,
0154
0155 Variable_CosThetaCS_xmin = -1.,
0156 Variable_CosThetaCS_xmax = 1.,
0157 Variable_CosThetaCS_nbins = 20,
0158
0159 Variable_DeltaEta_xmin = -4.8,
0160 Variable_DeltaEta_xmax = 4.8,
0161 Variable_DeltaEta_nbins = 20,
0162
0163 Variable_EtaMinus_xmin = -2.4,
0164 Variable_EtaMinus_xmax = 2.4,
0165 Variable_EtaMinus_nbins = 12,
0166
0167 Variable_EtaPlus_xmin = -2.4,
0168 Variable_EtaPlus_xmax = 2.4,
0169 Variable_EtaPlus_nbins = 12,
0170
0171 Variable_PhiCS_xmin = -math.pi/2.,
0172 Variable_PhiCS_xmax = math.pi/2.,
0173 Variable_PhiCS_nbins = 20,
0174
0175 Variable_PhiMinus_xmin = -math.pi,
0176 Variable_PhiMinus_xmax = math.pi,
0177 Variable_PhiMinus_nbins = 16,
0178
0179 Variable_PhiPlus_xmin = -math.pi,
0180 Variable_PhiPlus_xmax = math.pi,
0181 Variable_PhiPlus_nbins = 16,
0182
0183 Variable_PairPt_xmin = 0.,
0184 Variable_PairPt_xmax = 100.,
0185 Variable_PairPt_nbins = 100)
0186
0187
0188
0189
0190 if valiMode == "StandAlone":
0191
0192 process.TFileService = cms.Service("TFileService",
0193 fileName = cms.string("{}/Zmumu.root".format(config.get("output", os.getcwd()))),
0194 closeFileFast = cms.untracked.bool(True),
0195 )
0196
0197
0198
0199
0200 from RecoVertex.BeamSpotProducer.beamSpotCompatibilityChecker_cfi import beamSpotCompatibilityChecker
0201 process.BeamSpotChecker = beamSpotCompatibilityChecker.clone(
0202 bsFromEvent = "offlineBeamSpot::RECO",
0203 bsFromDB = "offlineBeamSpot",
0204 warningThr = config["validation"].get("bsIncompatibleWarnThresh", 3),
0205 errorThr = config["validation"].get("bsIncompatibleErrThresh", 5),
0206 )
0207
0208 process.p = cms.Path(process.offlineBeamSpot*
0209
0210 process.TrackRefitter*
0211 process.DiMuonMassValidation)