File indexing completed on 2024-04-06 12:23:26
0001 from __future__ import print_function
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 SkimAnalyzerCount( Analyzer ):
0012
0013
0014
0015
0016 def __init__(self, cfg_ana, cfg_comp, looperName):
0017 super(SkimAnalyzerCount, self).__init__(cfg_ana, cfg_comp, looperName)
0018 self.useLumiBlocks = self.cfg_ana.useLumiBlocks if (hasattr(self.cfg_ana,'useLumiBlocks')) else False
0019 self.verbose = getattr(self.cfg_ana, 'verbose', False)
0020
0021 def declareHandles(self):
0022 super(SkimAnalyzerCount, self).declareHandles()
0023 self.counterHandle = Handle("edm::MergeableCounter")
0024 self.mchandles['GenInfo'] = AutoHandle( ('generator','',''), 'GenEventInfoProduct' )
0025
0026 def beginLoop(self, setup):
0027 super(SkimAnalyzerCount,self).beginLoop(setup)
0028
0029 self.counters.addCounter('SkimReport')
0030 self.count = self.counters.counter('SkimReport')
0031 self.count.register('All Events')
0032 if self.cfg_comp.isMC:
0033 self.count.register('Sum Weights')
0034
0035 if not self.useLumiBlocks:
0036
0037 return True
0038
0039 print('Counting the total events before the skim by accessing luminosity blocks')
0040 lumis = Lumis(self.cfg_comp.files)
0041 totalEvents=0
0042
0043 for lumi in lumis:
0044 if lumi.getByLabel('prePathCounter',self.counterHandle):
0045 totalEvents+=self.counterHandle.product().value
0046 else:
0047 self.useLumiBlocks = False
0048 break
0049
0050
0051 if self.useLumiBlocks:
0052 self.count.inc('All Events',totalEvents)
0053 if self.cfg_comp.isMC:
0054 self.count.inc('Sum Weights',totalEvents)
0055 print('Done -> proceeding with the analysis')
0056 else:
0057 print('Failed -> will have to actually count events (this can happen if the input dataset is not a CMG one)')
0058
0059
0060
0061 def process(self, event):
0062 if self.verbose:
0063 print("\nProcessing run:lumi:event %d:%d:%d" % (
0064 event.input.eventAuxiliary().id().run(),
0065 event.input.eventAuxiliary().id().luminosityBlock(),
0066 event.input.eventAuxiliary().id().event()))
0067 if not self.useLumiBlocks:
0068 self.readCollections( event.input )
0069 self.count.inc('All Events')
0070 if self.cfg_comp.isMC:
0071 self.count.inc('Sum Weights', self.mchandles['GenInfo'].product().weight())
0072 return True