Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-11-25 02:29:49

0001 from PhysicsTools.HeppyCore.framework.analyzer import Analyzer
0002 from PhysicsTools.Heppy.analyzers.AutoHandle import AutoHandle
0003 from PhysicsTools.HeppyCore.statistics.counter import Counter
0004 from PhysicsTools.HeppyCore.utils.TriggerList import TriggerList
0005 from PhysicsTools.HeppyCore.utils.TriggerMatching import selTriggerObjects
0006 from PhysicsTools.Heppy.physicsobjects.PhysicsObjects import TriggerObject
0007 
0008 
0009 
0010 class TriggerAnalyzer( Analyzer ):
0011     '''Access to trigger information, and trigger selection'''
0012 
0013     def declareHandles(self):
0014         super(TriggerAnalyzer, self).declareHandles()
0015 
0016         self.handles['cmgTriggerObjectSel'] =  AutoHandle(
0017             'cmgTriggerObjectSel',
0018             'std::vector<cmg::TriggerObject>'
0019             )
0020  
0021         self.handles['cmgTriggerObjectListSel'] =  AutoHandle(
0022             'cmgTriggerObjectListSel',
0023             'std::vector<cmg::TriggerObject>'
0024             )
0025  
0026     def beginLoop(self, setup):
0027         super(TriggerAnalyzer,self).beginLoop(setup)
0028         self.triggerList = TriggerList( self.cfg_comp.triggers )
0029         if hasattr(self.cfg_comp,'vetoTriggers'):
0030             self.vetoTriggerList = TriggerList( self.cfg_comp.vetoTriggers )
0031         else:
0032             self.vetoTriggerList = None
0033             
0034         self.counters.addCounter('Trigger')
0035         self.counters.counter('Trigger').register('All events')
0036         self.counters.counter('Trigger').register('HLT')
0037         
0038 
0039     def process(self, iEvent, event):
0040         self.readCollections( iEvent )
0041         
0042         event.triggerObject = self.handles['cmgTriggerObjectSel'].product()[0]
0043         run = iEvent.eventAuxiliary().id().run()
0044         lumi = iEvent.eventAuxiliary().id().luminosityBlock()
0045         eventId = iEvent.eventAuxiliary().id().event()
0046 
0047         event.run = run
0048         event.lumi = lumi
0049         event.eventId = eventId
0050 
0051 ##        if self.cfg_ana.verbose:
0052 ##            self.printTriggerObject( event.triggerObject )
0053         
0054         self.counters.counter('Trigger').inc('All events')
0055         # import pdb; pdb.set_trace()
0056         usePrescaled = False
0057         if hasattr( self.cfg_ana, 'usePrescaled'):
0058             usePrescaled = self.cfg_ana.usePrescaled
0059 
0060         # import pdb; pdb.set_trace()
0061         passed, hltPath = self.triggerList.triggerPassed(event.triggerObject,
0062                                                          run, lumi, self.cfg_comp.isData,
0063                                                          usePrescaled = usePrescaled)
0064 
0065 
0066 
0067         #Check the veto!
0068         veto=False
0069         if self.vetoTriggerList is not None:
0070             veto,hltVetoPath = self.vetoTriggerList.triggerPassed(event.triggerObject,
0071                                                          run,lumi,self.cfg_comp.isData,
0072                                                          usePrescaled = usePrescaled)
0073 
0074         # Check if events needs to be skipped if no trigger is found (useful for generator level studies)
0075         keepFailingEvents = False
0076         if hasattr( self.cfg_ana, 'keepFailingEvents'):
0077             keepFailingEvents = self.cfg_ana.keepFailingEvents
0078         if not passed or (passed and veto):
0079             event.passedTriggerAnalyzer = False
0080             if not keepFailingEvents:
0081                 return False
0082         else:
0083             event.passedTriggerAnalyzer = True
0084 
0085         event.hltPath = hltPath 
0086 
0087         if hltPath is not None:
0088             trigObjs = map( TriggerObject,
0089                             self.handles['cmgTriggerObjectListSel'].product())
0090             # selecting the trigger objects used in this path
0091             event.triggerObjects = selTriggerObjects( trigObjs, hltPath )
0092             
0093         self.counters.counter('Trigger').inc('HLT')
0094         event.TriggerFired = 1
0095         return True
0096 
0097     def write(self, setup):
0098         print('writing TriggerAnalyzer')
0099         super(TriggerAnalyzer, self).write(setup)
0100         self.triggerList.write( self.dirName )
0101 
0102     def __str__(self):
0103         tmp = super(TriggerAnalyzer,self).__str__()
0104         triglist = str( self.triggerList )
0105         return '\n'.join( [tmp, triglist ] )
0106 
0107 
0108 ##     def printTriggerObject(self, object):
0109 ##         '''FIXME : we need a trigger object class in physicsobjects.'''
0110 ##         print 'trig obj', object.pdgId(), object.pt(), object.charge(), object.eta(), object.phi()
0111 ##         for name in object.getSelectionNames():
0112 ##             hasSel = object.getSelection( name )
0113 ##             if self.cfg_ana.verbose==1 and hasSel:
0114 ##                 print name, hasSel
0115 ##             elif self.cfg_ana.verbose==2:
0116 ##                 print name, hasSel