File indexing completed on 2024-04-06 11:57:19
0001 from __future__ import print_function
0002 from fnmatch import fnmatch
0003 import FWCore.ParameterSet.Config as cms
0004 import FWCore.Utilities.FileUtils as FileUtils
0005 import FWCore.ParameterSet.VarParsing as VarParsing
0006 import sys
0007
0008 from Configuration.StandardSequences.Eras import eras
0009 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultMC_DoubleMuon_string
0010
0011
0012 def best_match(rcd):
0013
0014 '''
0015 find out where to best match the input conditions
0016 '''
0017 print(rcd)
0018 for pattern, string in connection_map:
0019 print(pattern, fnmatch(rcd, pattern))
0020 if fnmatch(rcd, pattern):
0021 return string
0022
0023 options = VarParsing.VarParsing ()
0024 options.register('maxEvents',
0025 -1,
0026 VarParsing.VarParsing.multiplicity.singleton,
0027 VarParsing.VarParsing.varType.int,
0028 "number of events to process (\"-1\" for all)")
0029 options.register ('era',
0030 '2022',
0031 VarParsing.VarParsing.multiplicity.singleton,
0032 VarParsing.VarParsing.varType.string,
0033 "CMS running era")
0034
0035 options.register ('GlobalTag',
0036 'auto:phase1_2022_realistic',
0037 VarParsing.VarParsing.multiplicity.singleton,
0038 VarParsing.VarParsing.varType.string,
0039 "seed number")
0040
0041 options.register ('records',
0042 [],
0043 VarParsing.VarParsing.multiplicity.list,
0044 VarParsing.VarParsing.varType.string,
0045 "record:tag names to be used/changed from GT")
0046
0047 options.register ('external',
0048 [],
0049 VarParsing.VarParsing.multiplicity.list,
0050 VarParsing.VarParsing.varType.string,
0051 "record:fle.db picks the following record from this external file")
0052
0053 options.register ('myseed',
0054 '1',
0055 VarParsing.VarParsing.multiplicity.singleton,
0056 VarParsing.VarParsing.varType.string,
0057 "seed number")
0058
0059 options.register ('myfile',
0060 filesDefaultMC_DoubleMuon_string,
0061 VarParsing.VarParsing.multiplicity.singleton,
0062 VarParsing.VarParsing.varType.string,
0063 "file name")
0064
0065 options.register ('FileList',
0066 '',
0067 VarParsing.VarParsing.multiplicity.singleton,
0068 VarParsing.VarParsing.varType.string,
0069 "FileList in DAS format")
0070
0071 options.register ('outputName',
0072 'default',
0073 VarParsing.VarParsing.multiplicity.singleton,
0074 VarParsing.VarParsing.varType.string,
0075 "output file")
0076
0077 options.parseArguments()
0078
0079 if(options.FileList):
0080 print("FileList: ", options.FileList)
0081 else:
0082 print("inputFile: ", options.myfile)
0083 print("outputFile: ", "DiMuonVertexValidation_{fname}_{fseed}.root".format(fname = options.outputName,fseed=options.myseed))
0084 print("era: ", options.era)
0085 print("conditionGT: ", options.GlobalTag)
0086 print("conditionOverwrite: ", options.records)
0087 print("external conditions:", options.external)
0088 print("max events: ", options.maxEvents)
0089
0090 if options.era=='2016':
0091 print("===> running era 2016")
0092 process = cms.Process('Analysis',eras.Run2_2016)
0093 elif options.era=='2017':
0094 print("===> running era 2017")
0095 process = cms.Process('Analysis',eras.Run2_2017)
0096 elif options.era=='2018':
0097 print("===> running era 2018")
0098 process = cms.Process('Analysis',eras.Run2_2018)
0099 elif options.era=='2022':
0100 print("===> running era 2022")
0101 process = cms.Process('Analysis',eras.Run3)
0102 elif options.era=='2023':
0103 print("===> running era 2023")
0104 process = cms.Process('Analysis',eras.Run3_2023)
0105
0106
0107
0108
0109 process.options.numberOfThreads = 8
0110
0111
0112 process.load('Configuration.StandardSequences.Services_cff')
0113 process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
0114 process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff')
0115 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
0116
0117
0118
0119 connection_map = [
0120 ('Tracker*', 'frontier://PromptProd/CMS_CONDITIONS'),
0121 ('SiPixel*', 'frontier://PromptProd/CMS_CONDITIONS'),
0122 ('SiStrip*', 'frontier://PromptProd/CMS_CONDITIONS'),
0123 ('Beam*', 'frontier://PromptProd/CMS_CONDITIONS'),
0124 ]
0125
0126 if options.external:
0127 connection_map.extend(
0128 (i.split(':')[0], 'sqlite_file:%s' % i.split(':')[1]) for i in options.external
0129 )
0130
0131 connection_map.sort(key=lambda x: -1*len(x[0]))
0132
0133
0134
0135 records = []
0136 if options.records:
0137 for record in options.records:
0138 rcd, tag = tuple(record.split(':'))
0139 print("control point:",rcd,tag)
0140 if len(rcd)==0:
0141 print("no overriding will occur")
0142 continue
0143 records.append(
0144 cms.PSet(
0145 record = cms.string(rcd),
0146 tag = cms.string(tag),
0147 connect = cms.string(best_match(rcd))
0148 )
0149 )
0150
0151
0152
0153 from Configuration.AlCa.GlobalTag import GlobalTag
0154 process.GlobalTag = GlobalTag(process.GlobalTag, options.GlobalTag, '')
0155 process.GlobalTag.toGet = cms.VPSet(*records)
0156
0157 '''
0158 process.GlobalTag.toGet = cms.VPSet(
0159 cms.PSet(record = cms.string("TrackerAlignmentRcd"),
0160 tag = cms.string("TrackerAlignment_Upgrade2017_design_v4"),
0161 #tag = cms.string("TrackerAlignment_2017_ultralegacymc_v1"),
0162 connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0163 ),
0164 cms.PSet(record = cms.string("TrackerAlignmentErrorExtendedRcd"),
0165 tag = cms.string("TrackerAlignmentErrorsExtended_Upgrade2017_design_v0"),
0166 #tag = cms.string("TrackerAlignmentExtendedErrors_2017_ultralegacymc_v1"),
0167 connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0168 )
0169 )
0170 '''
0171
0172 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.maxEvents) )
0173
0174
0175
0176
0177
0178
0179
0180 process.load('FWCore.MessageService.MessageLogger_cfi')
0181 process.MessageLogger.cerr.enable = False
0182 process.MessageLogger.TrackRefitter=dict()
0183 process.MessageLogger.PrimaryVertexProducer=dict()
0184 process.MessageLogger.DiMuonVertexValidation=dict()
0185 process.MessageLogger.DiLeptonHelpCounts=dict()
0186 process.MessageLogger.PlotsVsKinematics=dict()
0187 process.MessageLogger.cout = cms.untracked.PSet(
0188 enable = cms.untracked.bool(True),
0189 threshold = cms.untracked.string("INFO"),
0190 default = cms.untracked.PSet(limit = cms.untracked.int32(0)),
0191 FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0192 reportEvery = cms.untracked.int32(100)
0193 ),
0194 DiMuonVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0195 DiLeptonHelpCounts = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0196 enableStatistics = cms.untracked.bool(True)
0197 )
0198
0199
0200
0201
0202 if(options.FileList):
0203 print('Loading file list from ASCII file')
0204 filelist = FileUtils.loadListFromFile (options.FileList)
0205 readFiles = cms.untracked.vstring( *filelist)
0206 else:
0207 readFiles = cms.untracked.vstring([options.myfile])
0208
0209 process.source = cms.Source("PoolSource",
0210 fileNames = readFiles,
0211
0212 )
0213
0214
0215
0216
0217 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0218 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
0219 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
0220 process.load('TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff')
0221
0222
0223
0224
0225 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0226
0227
0228
0229
0230 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0231 import RecoTracker.TrackProducer.TrackRefitters_cff
0232 process.TrackRefitter = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone()
0233 process.TrackRefitter.src = "generalTracks"
0234
0235 process.TrackRefitter.TrajectoryInEvent = True
0236 process.TrackRefitter.NavigationSchool = ''
0237 process.TrackRefitter.TTRHBuilder = "WithAngleAndTemplate"
0238
0239
0240
0241
0242 process.seqTrackselRefit = cms.Sequence(process.offlineBeamSpot*
0243
0244
0245 process.TrackRefitter)
0246
0247
0248
0249
0250 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices
0251 process.offlinePrimaryVerticesFromRefittedTrks = offlinePrimaryVertices.clone()
0252 process.offlinePrimaryVerticesFromRefittedTrks.TrackLabel = cms.InputTag("TrackRefitter")
0253
0254
0255
0256
0257 process.TFileService = cms.Service("TFileService",fileName=cms.string("DiMuonVertexValidation_"+options.outputName+"_"+options.myseed+".root"))
0258
0259
0260 process.analysis = cms.EDAnalyzer("DiMuonVertexValidation",
0261 useReco = cms.bool(True),
0262
0263
0264 muons = cms.InputTag('muons'),
0265
0266 tracks = cms.InputTag('TrackRefitter'),
0267 vertices = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'))
0268
0269
0270
0271
0272 process.p = cms.Path(process.seqTrackselRefit +
0273 process.offlinePrimaryVerticesFromRefittedTrks +
0274 process.analysis
0275 )