File indexing completed on 2024-11-25 02:29:49
0001 from builtins import range
0002 import itertools
0003
0004 from PhysicsTools.Heppy.analyzers.core.Analyzer import Analyzer
0005 from PhysicsTools.Heppy.analyzers.core.AutoHandle import AutoHandle
0006 from PhysicsTools.HeppyCore.framework.event import Event
0007 from PhysicsTools.HeppyCore.statistics.counter import Counter, Counters
0008
0009 from DataFormats.FWLite import Events, Handle,Lumis
0010
0011 class ProvenanceAnalyzer( Analyzer ):
0012
0013
0014
0015
0016 def __init__(self, cfg_ana, cfg_comp, looperName):
0017 super(ProvenanceAnalyzer, self).__init__(cfg_ana, cfg_comp, looperName)
0018 self.lastId = (0,0)
0019 self.provenance = []
0020
0021 def declareHandles(self):
0022 super(ProvenanceAnalyzer, self).declareHandles()
0023
0024 def cmsswVNums(self, release):
0025 vpieces = release.split("_")[1:]
0026 vnums = [ int(v) for v in vpieces[:3] ]
0027 if len(vpieces) > 3:
0028 if "patch" in vpieces[3]:
0029 vnums.append(int(vpieces[3].replace("patch","")))
0030 elif "pre" in vpieces[3]:
0031 vnums.append(-100+int(vpieces[3].replace("pre","")))
0032 else:
0033 vnums.append(0)
0034 return tuple(vnums)
0035 def miniAODVersion(self, vnums):
0036 if vnums[:2] == (7,4):
0037 if vnums >= (7,4,14,0): return (2015,2.1)
0038 if vnums >= (7,4,12,0): return (2015,2.0)
0039 if vnums >= (7,4, 8,1): return (2015,1.1)
0040 return (2015,1.0)
0041 elif vnums[:2] == (7,2):
0042 return (2014,2.1)
0043 elif vnums[:2] == (7,0):
0044 if vnums >= (7,0,9,1): return (2014,2.0)
0045 return (2014,1.0)
0046 else:
0047 return (-999,-999)
0048
0049 def process(self, event):
0050 eid = ( event.input.eventAuxiliary().id().run(),
0051 event.input.eventAuxiliary().id().luminosityBlock() )
0052 if eid != self.lastId:
0053
0054 history = event.input.object().processHistory()
0055 for i in reversed(list(range(history.size()))):
0056 conf = history.at(i)
0057 release = conf.releaseVersion().replace('"',"")
0058 vnums = self.cmsswVNums(release)
0059 if conf.processName() in ("PAT", "RECO","REC2"):
0060 print("processing step %d: process %s, release %r %s, miniAOD %s" % (i, conf.processName(), release, vnums, self.miniAODVersion(vnums)))
0061 self.provenance = [
0062 ('release', release),
0063 ('releaseVersion', vnums),
0064 ('miniAODVersion', self.miniAODVersion(vnums)),
0065 ]
0066 break
0067 self.lastId = eid
0068 for key,value in self.provenance:
0069 setattr(event, key, value)
0070 return True
0071
0072 import PhysicsTools.HeppyCore.framework.config as cfg
0073 setattr(ProvenanceAnalyzer,"defaultConfig", cfg.Analyzer(
0074 class_object = ProvenanceAnalyzer
0075 ))
0076