CMS 3D CMS Logo

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