File indexing completed on 2023-03-17 10:40:36
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 '2017',
0031 VarParsing.VarParsing.multiplicity.singleton,
0032 VarParsing.VarParsing.varType.string,
0033 "CMS running era")
0034
0035 options.register ('GlobalTag',
0036 '113X_mc2017_realistic_v4',
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
0100
0101 process.load('Configuration.StandardSequences.Services_cff')
0102 process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
0103 process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff')
0104 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
0105
0106
0107
0108 connection_map = [
0109 ('Tracker*', 'frontier://PromptProd/CMS_CONDITIONS'),
0110 ('SiPixel*', 'frontier://PromptProd/CMS_CONDITIONS'),
0111 ('SiStrip*', 'frontier://PromptProd/CMS_CONDITIONS'),
0112 ('Beam*', 'frontier://PromptProd/CMS_CONDITIONS'),
0113 ]
0114
0115 if options.external:
0116 connection_map.extend(
0117 (i.split(':')[0], 'sqlite_file:%s' % i.split(':')[1]) for i in options.external
0118 )
0119
0120 connection_map.sort(key=lambda x: -1*len(x[0]))
0121
0122
0123
0124 records = []
0125 if options.records:
0126 for record in options.records:
0127 rcd, tag = tuple(record.split(':'))
0128 print("control point:",rcd,tag)
0129 if len(rcd)==0:
0130 print("no overriding will occur")
0131 continue
0132 records.append(
0133 cms.PSet(
0134 record = cms.string(rcd),
0135 tag = cms.string(tag),
0136 connect = cms.string(best_match(rcd))
0137 )
0138 )
0139
0140
0141
0142 from Configuration.AlCa.GlobalTag import GlobalTag
0143 process.GlobalTag = GlobalTag(process.GlobalTag, options.GlobalTag, '')
0144 process.GlobalTag.toGet = cms.VPSet(*records)
0145
0146 '''
0147 process.GlobalTag.toGet = cms.VPSet(
0148 cms.PSet(record = cms.string("TrackerAlignmentRcd"),
0149 tag = cms.string("TrackerAlignment_Upgrade2017_design_v4"),
0150 #tag = cms.string("TrackerAlignment_2017_ultralegacymc_v1"),
0151 connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0152 ),
0153 cms.PSet(record = cms.string("TrackerAlignmentErrorExtendedRcd"),
0154 tag = cms.string("TrackerAlignmentErrorsExtended_Upgrade2017_design_v0"),
0155 #tag = cms.string("TrackerAlignmentExtendedErrors_2017_ultralegacymc_v1"),
0156 connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0157 )
0158 )
0159 '''
0160
0161 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.maxEvents) )
0162
0163
0164
0165
0166
0167
0168
0169 process.load('FWCore.MessageService.MessageLogger_cfi')
0170 process.MessageLogger.cerr.enable = False
0171 process.MessageLogger.TrackRefitter=dict()
0172 process.MessageLogger.PrimaryVertexProducer=dict()
0173 process.MessageLogger.DiMuonVertexValidation=dict()
0174 process.MessageLogger.DiLeptonHelpCounts=dict()
0175 process.MessageLogger.PlotsVsKinematics=dict()
0176 process.MessageLogger.cout = cms.untracked.PSet(
0177 enable = cms.untracked.bool(True),
0178 threshold = cms.untracked.string("INFO"),
0179 default = cms.untracked.PSet(limit = cms.untracked.int32(0)),
0180 FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0181 reportEvery = cms.untracked.int32(100)
0182 ),
0183 DiMuonVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0184 DiLeptonHelpCounts = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0185 enableStatistics = cms.untracked.bool(True)
0186 )
0187
0188
0189
0190
0191 if(options.FileList):
0192 print('Loading file list from ASCII file')
0193 filelist = FileUtils.loadListFromFile (options.FileList)
0194 readFiles = cms.untracked.vstring( *filelist)
0195 else:
0196 readFiles = cms.untracked.vstring([options.myfile])
0197
0198 process.source = cms.Source("PoolSource",
0199 fileNames = readFiles,
0200
0201 )
0202
0203
0204
0205
0206 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0207 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
0208 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
0209 process.load('TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff')
0210
0211
0212
0213
0214 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0215
0216
0217
0218
0219 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0220 import RecoTracker.TrackProducer.TrackRefitters_cff
0221 process.TrackRefitter = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone()
0222 process.TrackRefitter.src = "generalTracks"
0223
0224 process.TrackRefitter.TrajectoryInEvent = True
0225 process.TrackRefitter.NavigationSchool = ''
0226 process.TrackRefitter.TTRHBuilder = "WithAngleAndTemplate"
0227
0228
0229
0230
0231 process.seqTrackselRefit = cms.Sequence(process.offlineBeamSpot*
0232
0233
0234 process.TrackRefitter)
0235
0236
0237
0238
0239 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices
0240 process.offlinePrimaryVerticesFromRefittedTrks = offlinePrimaryVertices.clone()
0241 process.offlinePrimaryVerticesFromRefittedTrks.TrackLabel = cms.InputTag("TrackRefitter")
0242
0243
0244
0245
0246 process.TFileService = cms.Service("TFileService",fileName=cms.string("DiMuonVertexValidation_"+options.outputName+"_"+options.myseed+".root"))
0247
0248
0249 process.analysis = cms.EDAnalyzer("DiMuonVertexValidation",
0250 useReco = cms.bool(True),
0251
0252
0253 muons = cms.InputTag('muons'),
0254
0255 tracks = cms.InputTag('TrackRefitter'),
0256 vertices = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'))
0257
0258
0259
0260
0261 process.p = cms.Path(process.seqTrackselRefit +
0262 process.offlinePrimaryVerticesFromRefittedTrks +
0263 process.analysis
0264 )