Back to home page

Project CMSSW displayed by LXR

 
 

    


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     # TO FINDS THE INITIAL EVENTS BEFORE THE SKIM
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             #import pdb; pdb.set_trace()
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