Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-11-27 03:17:56

0001 #!/usr/bin/env python
0002 
0003 # A simple FWLite-based python analyzer
0004 # Based on https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookFWLitePython
0005 # Some snippets of codes are stolen from PhysicsTools/Heppy
0006 
0007 from ROOT import gROOT, gSystem, AutoLibraryLoader
0008 from DataFormats.FWLite import Events, Handle
0009 
0010 
0011 class FWLiteAnalyzer(object):
0012 
0013   def __init__(self, inputFiles=None, handles=None, firstEvent=None, maxEvents=None):
0014     gROOT.SetBatch()        # don't pop up canvases
0015 
0016     if inputFiles:
0017       if isinstance(inputFiles, str):
0018         self.inputFiles = [inputFiles]
0019       else:
0020         self.inputFiles = inputFiles
0021     else:
0022       self.inputFiles = []
0023 
0024     self.events = Events(self.inputFiles)
0025 
0026     self.handles = {}
0027     self.handle_labels = {}
0028     if handles:
0029       for k, v in handles.items():
0030         self.handles[k] = Handle(v[0])
0031         self.handle_labels[k] = v[1]
0032 
0033     self.setup = {}
0034 
0035     if firstEvent:
0036       self.firstEvent = firstEvent
0037     else:
0038       self.firstEvent = 0
0039 
0040     if maxEvents:
0041       self.maxEvents = maxEvents
0042     else:
0043       self.maxEvents = 0x7FFFFFFFFFFFFFFF  # TChain::kBigNumber
0044     return
0045 
0046   def analyze(self):
0047     self.beginLoop()
0048     for evt in self.processLoop():
0049       pass
0050     self.endLoop()
0051     return
0052 
0053   def beginLoop(self):
0054     return
0055 
0056   def endLoop(self):
0057     return
0058 
0059   def processLoop(self):
0060     for ievt, evt in enumerate(self.events):
0061       #if (ievt % 1000) == 0:
0062       #  print "Processing event: %i" % ievt
0063       self.process(evt)
0064       yield evt
0065     return
0066 
0067   def process(self, event):
0068     self.getHandles(event)
0069     return
0070 
0071   def getHandles(self, event):
0072     for k, v in self.handles.items():
0073       label = self.handle_labels[k]
0074       event.getByLabel(label, v)
0075     return
0076 
0077 
0078 # ______________________________________________________________________________
0079 if __name__ == "__main__":
0080 
0081   print("Loading FW Lite")
0082   gSystem.Load("libFWCoreFWLite")
0083   gROOT.ProcessLine("FWLiteEnabler::enable();")
0084 
0085   #gSystem.Load("libDataFormatsFWLite.so")
0086   #gSystem.Load("libDataFormatsPatCandidates.so")
0087   #gSystem.Load("libDataFormatsL1TMuon.so")
0088 
0089   analyzer = FWLiteAnalyzer(inputFiles='pippo.root')
0090   analyzer.analyze()