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
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 '2022',
0030 VarParsing.VarParsing.multiplicity.singleton,
0031 VarParsing.VarParsing.varType.string,
0032 "CMS running era")
0033
0034 options.register ('GlobalTag',
0035 'auto:phase1_2022_realistic',
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 '/store/relval/CMSSW_12_4_0_pre4/RelValZEE_14/GEN-SIM-RECO/PU_124X_mcRun3_2021_realistic_v1-v1/2580000/4a1ae43b-f4b3-4ad9-b86e-a7d9f6fc5c40.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 elif options.era=='2022':
0099 print("===> running era 2022")
0100 process = cms.Process('Analysis',eras.Run3)
0101 elif options.era=='2023':
0102 print("===> running era 2023")
0103 process = cms.Process('Analysis',eras.Run3_2023)
0104 else:
0105 print("unrecognized era %s" % options.era)
0106 sys.exit(1)
0107
0108
0109 process.load('Configuration.StandardSequences.Services_cff')
0110 process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
0111 process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff')
0112 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
0113
0114
0115
0116 connection_map = [
0117 ('Tracker*', 'frontier://PromptProd/CMS_CONDITIONS'),
0118 ('SiPixel*', 'frontier://PromptProd/CMS_CONDITIONS'),
0119 ('SiStrip*', 'frontier://PromptProd/CMS_CONDITIONS'),
0120 ('Beam*', 'frontier://PromptProd/CMS_CONDITIONS'),
0121 ]
0122
0123 if options.external:
0124 connection_map.extend(
0125 (i.split(':')[0], 'sqlite_file:%s' % i.split(':')[1]) for i in options.external
0126 )
0127
0128 connection_map.sort(key=lambda x: -1*len(x[0]))
0129
0130
0131
0132 records = []
0133 if options.records:
0134 for record in options.records:
0135 rcd, tag = tuple(record.split(':'))
0136 print("control point:",rcd,tag)
0137 if len(rcd)==0:
0138 print("no overriding will occur")
0139 continue
0140 records.append(
0141 cms.PSet(
0142 record = cms.string(rcd),
0143 tag = cms.string(tag),
0144 connect = cms.string(best_match(rcd))
0145 )
0146 )
0147
0148
0149
0150 from Configuration.AlCa.GlobalTag import GlobalTag
0151 process.GlobalTag = GlobalTag(process.GlobalTag, options.GlobalTag, '')
0152 process.GlobalTag.toGet = cms.VPSet(*records)
0153
0154 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.maxEvents) )
0155
0156
0157
0158
0159
0160
0161
0162 process.load('FWCore.MessageService.MessageLogger_cfi')
0163 process.MessageLogger.cerr.enable = False
0164 process.MessageLogger.TrackRefitter=dict()
0165 process.MessageLogger.GsfTrackRefitter=dict()
0166 process.MessageLogger.PrimaryVertexProducer=dict()
0167 process.MessageLogger.DiElectronVertexValidation=dict()
0168 process.MessageLogger.DiLeptonHelpCounts=dict()
0169 process.MessageLogger.PlotsVsKinematics=dict()
0170 process.MessageLogger.cout = cms.untracked.PSet(
0171 enable = cms.untracked.bool(True),
0172 threshold = cms.untracked.string("INFO"),
0173 default = cms.untracked.PSet(limit = cms.untracked.int32(0)),
0174 FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0175 reportEvery = cms.untracked.int32(1000)
0176 ),
0177 DiElectronVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0178 DiLeptonHelpCounts = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0179 enableStatistics = cms.untracked.bool(True)
0180 )
0181
0182
0183
0184
0185 if(options.FileList):
0186 print('Loading file list from ASCII file')
0187 filelist = FileUtils.loadListFromFile (options.FileList)
0188 readFiles = cms.untracked.vstring( *filelist)
0189 else:
0190 readFiles = cms.untracked.vstring([options.myfile])
0191
0192 process.source = cms.Source("PoolSource",
0193 fileNames = readFiles)
0194
0195
0196
0197
0198 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0199 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
0200 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
0201 process.load('TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff')
0202
0203
0204
0205
0206 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0207
0208
0209
0210
0211 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0212 import RecoTracker.TrackProducer.TrackRefitters_cff
0213 process.TrackRefitter = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone()
0214 process.TrackRefitter.src = "generalTracks"
0215 process.TrackRefitter.TrajectoryInEvent = True
0216 process.TrackRefitter.NavigationSchool = ''
0217 process.TrackRefitter.TTRHBuilder = "WithAngleAndTemplate"
0218
0219
0220
0221
0222 process.load("TrackingTools.GsfTracking.GsfElectronFit_cff")
0223
0224
0225
0226
0227 process.load("TrackingTools.GsfTracking.fwdGsfElectronPropagator_cff")
0228 process.load("RecoTracker.TrackProducer.GsfTrackRefitter_cff")
0229 process.GsfTrackRefitter = RecoTracker.TrackProducer.GsfTrackRefitter_cff.GsfTrackRefitter.clone()
0230 process.GsfTrackRefitter.src = cms.InputTag('electronGsfTracks')
0231 process.GsfTrackRefitter.TrajectoryInEvent = True
0232 process.GsfTrackRefitter.AlgorithmName = cms.string('gsf')
0233
0234
0235
0236
0237
0238
0239 process.load("RecoLocalTracker.SiPixelRecHits.SiPixelTemplateStoreESProducer_cfi")
0240 process.seqTrackselRefit = cms.Sequence(process.offlineBeamSpot*
0241
0242
0243 process.TrackRefitter*
0244 process.GsfTrackRefitter,
0245 cms.Task(process.SiPixelTemplateStoreESProducer))
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("DiElectronVertexValidation_"+options.outputName+"_"+options.myseed+".root"))
0258
0259
0260 process.analysis = cms.EDAnalyzer("DiElectronVertexValidation",
0261 gsfTracks = cms.InputTag('GsfTrackRefitter'),
0262 vertices = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'))
0263
0264
0265
0266
0267 process.p = cms.Path(process.seqTrackselRefit +
0268 process.offlinePrimaryVerticesFromRefittedTrks +
0269 process.analysis)