CMS 3D CMS Logo

SkimAnalyzerCount.py
Go to the documentation of this file.
1 import itertools
2 
3 from PhysicsTools.Heppy.analyzers.core.Analyzer import Analyzer
4 from PhysicsTools.Heppy.analyzers.core.AutoHandle import AutoHandle
5 from PhysicsTools.HeppyCore.framework.event import Event
6 from PhysicsTools.HeppyCore.statistics.counter import Counter, Counters
7 
8 from DataFormats.FWLite import Events, Handle,Lumis
9 
10 class SkimAnalyzerCount( Analyzer ):
11  #---------------------------------------------
12  # TO FINDS THE INITIAL EVENTS BEFORE THE SKIM
13  #---------------------------------------------
14 
15  def __init__(self, cfg_ana, cfg_comp, looperName):
16  super(SkimAnalyzerCount, self).__init__(cfg_ana, cfg_comp, looperName)
17  self.useLumiBlocks = self.cfg_ana.useLumiBlocks if (hasattr(self.cfg_ana,'useLumiBlocks')) else False
18  self.verbose = getattr(self.cfg_ana, 'verbose', False)
19 
20  def declareHandles(self):
21  super(SkimAnalyzerCount, self).declareHandles()
22  self.counterHandle = Handle("edm::MergeableCounter")
23  self.mchandles['GenInfo'] = AutoHandle( ('generator','',''), 'GenEventInfoProduct' )
24 
25  def beginLoop(self, setup):
26  super(SkimAnalyzerCount,self).beginLoop(setup)
27 
28  self.counters.addCounter('SkimReport')
29  self.count = self.counters.counter('SkimReport')
30  self.count.register('All Events')
31  if self.cfg_comp.isMC:
32  self.count.register('Sum Weights')
33 
34  if not self.useLumiBlocks:
35  #print 'Will actually count events instead of accessing lumi blocks'
36  return True
37 
38  print 'Counting the total events before the skim by accessing luminosity blocks'
39  lumis = Lumis(self.cfg_comp.files)
40  totalEvents=0
41 
42  for lumi in lumis:
43  if lumi.getByLabel('prePathCounter',self.counterHandle):
44  totalEvents+=self.counterHandle.product().value
45  else:
46  self.useLumiBlocks = False
47  break
48 
49 
50  if self.useLumiBlocks:
51  self.count.inc('All Events',totalEvents)
52  if self.cfg_comp.isMC:
53  self.count.inc('Sum Weights',totalEvents)
54  print 'Done -> proceeding with the analysis'
55  else:
56  print 'Failed -> will have to actually count events (this can happen if the input dataset is not a CMG one)'
57 
58 
59 
60  def process(self, event):
61  if self.verbose:
62  print "\nProcessing run:lumi:event %d:%d:%d" % (
63  event.input.eventAuxiliary().id().run(),
64  event.input.eventAuxiliary().id().luminosityBlock(),
65  event.input.eventAuxiliary().id().event())
66  if not self.useLumiBlocks:
67  self.readCollections( event.input )
68  self.count.inc('All Events')
69  if self.cfg_comp.isMC:
70  self.count.inc('Sum Weights', self.mchandles['GenInfo'].product().weight())
71  return True
def __init__(self, cfg_ana, cfg_comp, looperName)
Definition: weight.py:1
Definition: event.py:1