CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TriggerBitFilter.py
Go to the documentation of this file.
1 import ROOT
2 
3 from PhysicsTools.Heppy.analyzers.core.Analyzer import Analyzer
4 from PhysicsTools.Heppy.analyzers.core.AutoHandle import AutoHandle
5 
6 class TriggerBitFilter( Analyzer ):
7  def __init__(self, cfg_ana, cfg_comp, looperName ):
8  super(TriggerBitFilter,self).__init__(cfg_ana,cfg_comp,looperName)
9  self.processName = getattr(self.cfg_ana,"processName","HLT")
10  triggers = cfg_comp.triggers
11  self.autoAccept = True if len(triggers) == 0 else False
12  vetoTriggers = cfg_comp.vetoTriggers if hasattr(cfg_comp, 'vetoTriggers') else []
13  trigVec = ROOT.vector(ROOT.string)()
14  for t in triggers: trigVec.push_back(t)
15  self.mainFilter = ROOT.heppy.TriggerBitChecker(trigVec)
16  if len(vetoTriggers):
17  vetoVec = ROOT.vector(ROOT.string)()
18  for t in vetoTriggers: vetoVec.push_back(t)
19  self.vetoFilter = ROOT.heppy.TriggerBitChecker(vetoVec)
20  else:
21  self.vetoFilter = None
22 
23  def declareHandles(self):
24  super(TriggerBitFilter, self).declareHandles()
25  self.handles['TriggerResults'] = AutoHandle( ('TriggerResults','',self.processName), 'edm::TriggerResults' )
26 
27  def beginLoop(self, setup):
28  super(TriggerBitFilter,self).beginLoop(setup)
29 
30  def process(self, event):
31  if self.autoAccept: return True
32  self.readCollections( event.input )
33  if not self.mainFilter.check(event.input.object(), self.handles['TriggerResults'].product()):
34  return False
35  if self.vetoFilter != None and self.vetoFilter.check(event.input.object(), self.handles['TriggerResults'].product()):
36  return False
37  return True
38