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
0052
0053
0054 self.counters.counter('Trigger').inc('All events')
0055
0056 usePrescaled = False
0057 if hasattr( self.cfg_ana, 'usePrescaled'):
0058 usePrescaled = self.cfg_ana.usePrescaled
0059
0060
0061 passed, hltPath = self.triggerList.triggerPassed(event.triggerObject,
0062 run, lumi, self.cfg_comp.isData,
0063 usePrescaled = usePrescaled)
0064
0065
0066
0067
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
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
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
0109
0110
0111
0112
0113
0114
0115
0116