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
0010
0011 def best_match(rcd):
0012
0013 '''
0014 find out where to best match the input conditions
0015 '''
0016 print(rcd)
0017 for pattern, string in connection_map:
0018 print(pattern, fnmatch(rcd, pattern))
0019 if fnmatch(rcd, pattern):
0020 return string
0021
0022 options = VarParsing.VarParsing ()
0023 options.register('maxEvents',
0024 -1,
0025 VarParsing.VarParsing.multiplicity.singleton,
0026 VarParsing.VarParsing.varType.int,
0027 "number of events to process (\"-1\" for all)")
0028 options.register ('era',
0029 '2017',
0030 VarParsing.VarParsing.multiplicity.singleton,
0031 VarParsing.VarParsing.varType.string,
0032 "CMS running era")
0033
0034 options.register ('GlobalTag',
0035 '113X_mc2017_realistic_v4',
0036 VarParsing.VarParsing.multiplicity.singleton,
0037 VarParsing.VarParsing.varType.string,
0038 "seed number")
0039
0040 options.register ('records',
0041 [],
0042 VarParsing.VarParsing.multiplicity.list,
0043 VarParsing.VarParsing.varType.string,
0044 "record:tag names to be used/changed from GT")
0045
0046 options.register ('external',
0047 [],
0048 VarParsing.VarParsing.multiplicity.list,
0049 VarParsing.VarParsing.varType.string,
0050 "record:fle.db picks the following record from this external file")
0051
0052 options.register ('myseed',
0053 '1',
0054 VarParsing.VarParsing.multiplicity.singleton,
0055 VarParsing.VarParsing.varType.string,
0056 "seed number")
0057
0058 options.register ('myfile',
0059 'root://cms-xrd-global.cern.ch//store/relval/CMSSW_10_6_1/RelValZEE_13/GEN-SIM-RECO/PU25ns_106X_mc2017_realistic_v6_HS-v1/10000/B3F7544E-F34D-9D42-B897-21820FDE0331.root',
0060 VarParsing.VarParsing.multiplicity.singleton,
0061 VarParsing.VarParsing.varType.string,
0062 "file name")
0063
0064 options.register ('FileList',
0065 '',
0066 VarParsing.VarParsing.multiplicity.singleton,
0067 VarParsing.VarParsing.varType.string,
0068 "FileList in DAS format")
0069
0070 options.register ('outputName',
0071 'default',
0072 VarParsing.VarParsing.multiplicity.singleton,
0073 VarParsing.VarParsing.varType.string,
0074 "output file")
0075
0076 options.parseArguments()
0077
0078 if(options.FileList):
0079 print("FileList: ", options.FileList)
0080 else:
0081 print("inputFile: ", options.myfile)
0082 print("outputFile: ", "DiElectronVertexValidation_{fname}_{fseed}.root".format(fname = options.outputName,fseed=options.myseed))
0083 print("era: ", options.era)
0084 print("conditionGT: ", options.GlobalTag)
0085 print("conditionOverwrite: ", options.records)
0086 print("external conditions:", options.external)
0087 print("max events: ", options.maxEvents)
0088
0089 if options.era=='2016':
0090 print("===> running era 2016")
0091 process = cms.Process('Analysis',eras.Run2_2016)
0092 elif options.era=='2017':
0093 print("===> running era 2017")
0094 process = cms.Process('Analysis',eras.Run2_2017)
0095 elif options.era=='2018':
0096 print("===> running era 2018")
0097 process = cms.Process('Analysis',eras.Run2_2018)
0098
0099
0100 process.load('Configuration.StandardSequences.Services_cff')
0101 process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
0102 process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff')
0103 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
0104
0105
0106
0107 connection_map = [
0108 ('Tracker*', 'frontier://PromptProd/CMS_CONDITIONS'),
0109 ('SiPixel*', 'frontier://PromptProd/CMS_CONDITIONS'),
0110 ('SiStrip*', 'frontier://PromptProd/CMS_CONDITIONS'),
0111 ('Beam*', 'frontier://PromptProd/CMS_CONDITIONS'),
0112 ]
0113
0114 if options.external:
0115 connection_map.extend(
0116 (i.split(':')[0], 'sqlite_file:%s' % i.split(':')[1]) for i in options.external
0117 )
0118
0119 connection_map.sort(key=lambda x: -1*len(x[0]))
0120
0121
0122
0123 records = []
0124 if options.records:
0125 for record in options.records:
0126 rcd, tag = tuple(record.split(':'))
0127 print("control point:",rcd,tag)
0128 if len(rcd)==0:
0129 print("no overriding will occur")
0130 continue
0131 records.append(
0132 cms.PSet(
0133 record = cms.string(rcd),
0134 tag = cms.string(tag),
0135 connect = cms.string(best_match(rcd))
0136 )
0137 )
0138
0139
0140
0141 from Configuration.AlCa.GlobalTag import GlobalTag
0142 process.GlobalTag = GlobalTag(process.GlobalTag, options.GlobalTag, '')
0143 process.GlobalTag.toGet = cms.VPSet(*records)
0144
0145 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.maxEvents) )
0146
0147
0148
0149
0150
0151
0152
0153 process.load('FWCore.MessageService.MessageLogger_cfi')
0154 process.MessageLogger.cerr.enable = False
0155 process.MessageLogger.TrackRefitter=dict()
0156 process.MessageLogger.GsfTrackRefitter=dict()
0157 process.MessageLogger.PrimaryVertexProducer=dict()
0158 process.MessageLogger.DiElectronVertexValidation=dict()
0159 process.MessageLogger.DiLeptonHelpCounts=dict()
0160 process.MessageLogger.PlotsVsKinematics=dict()
0161 process.MessageLogger.cout = cms.untracked.PSet(
0162 enable = cms.untracked.bool(True),
0163 threshold = cms.untracked.string("INFO"),
0164 default = cms.untracked.PSet(limit = cms.untracked.int32(0)),
0165 FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0166 reportEvery = cms.untracked.int32(1000)
0167 ),
0168 DiElectronVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0169 DiLeptonHelpCounts = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0170 enableStatistics = cms.untracked.bool(True)
0171 )
0172
0173
0174
0175
0176 if(options.FileList):
0177 print('Loading file list from ASCII file')
0178 filelist = FileUtils.loadListFromFile (options.FileList)
0179 readFiles = cms.untracked.vstring( *filelist)
0180 else:
0181 readFiles = cms.untracked.vstring([options.myfile])
0182
0183 process.source = cms.Source("PoolSource",
0184 fileNames = readFiles)
0185
0186
0187
0188
0189 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0190 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
0191 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
0192 process.load('TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff')
0193
0194
0195
0196
0197 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0198
0199
0200
0201
0202 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0203 import RecoTracker.TrackProducer.TrackRefitters_cff
0204 process.TrackRefitter = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone()
0205 process.TrackRefitter.src = "generalTracks"
0206 process.TrackRefitter.TrajectoryInEvent = True
0207 process.TrackRefitter.NavigationSchool = ''
0208 process.TrackRefitter.TTRHBuilder = "WithAngleAndTemplate"
0209
0210
0211
0212
0213 process.load("TrackingTools.GsfTracking.GsfElectronFit_cff")
0214
0215
0216
0217
0218 process.load("TrackingTools.GsfTracking.fwdGsfElectronPropagator_cff")
0219 process.load("RecoTracker.TrackProducer.GsfTrackRefitter_cff")
0220 process.GsfTrackRefitter = RecoTracker.TrackProducer.GsfTrackRefitter_cff.GsfTrackRefitter.clone()
0221 process.GsfTrackRefitter.src = cms.InputTag('electronGsfTracks')
0222 process.GsfTrackRefitter.TrajectoryInEvent = True
0223 process.GsfTrackRefitter.AlgorithmName = cms.string('gsf')
0224
0225
0226
0227
0228
0229
0230 process.seqTrackselRefit = cms.Sequence(process.offlineBeamSpot*
0231
0232
0233 process.TrackRefitter*
0234 process.GsfTrackRefitter)
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("DiElectronVertexValidation_"+options.outputName+"_"+options.myseed+".root"))
0247
0248
0249 process.analysis = cms.EDAnalyzer("DiElectronVertexValidation",
0250 gsfTracks = cms.InputTag('GsfTrackRefitter'),
0251 vertices = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'))
0252
0253
0254
0255
0256 process.p = cms.Path(process.seqTrackselRefit +
0257 process.offlinePrimaryVerticesFromRefittedTrks +
0258 process.analysis)