ATLAS Offline Software
TriggerFilter.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2 
3 
14 
15 __doc__ = """This is a short algorithm to select events that pass at least
16 one out of a certain set of triggers.
17 """
18 __version__ = "0.0.5"
19 __author__ = "Eric Feng <Eric.Feng@cern.ch>"
20 
21 
22 import AthenaPython.PyAthena as PyAthena
23 from AthenaPython.PyAthena import StatusCode
24 
25 class TriggerFilter( PyAthena.AthFilterAlgorithm ):
26  """
27  This class is a short algorithm to select events that pass at
28  least one out of a certain set of triggers. The possible
29  criteria are (with default values):
30  trigger = ''
31  passAll = False
32  """
33 
34 
35  def __init__ ( self, name = "TriggerFilter", **kw ):
36 
37  kw['name'] = name
38  super(TriggerFilter, self).__init__(**kw)
39 
40 
41  self.trigger = kw.get( 'trigger', '' )
42  self.passAll = kw.get( 'passAll', False )
43 
44 
45  self.tdt = None
46 
47 
48  def initialize(self):
49  self.msg.info( '************************************' )
50  self.msg.info( '==> initialize %s...', self.name )
51  self.msg.info( 'Will apply the following cuts:' )
52  self.msg.info( ' trigger = %r', self.trigger )
53  self.msg.info( ' passAll = %r', self.passAll )
54  self.msg.info( '************************************' )
55 
56 
57  import PyUtils.RootUtils as ru
58  ROOT = ru.import_root() # noqa: F841
59 
60 
61  self.tdt = PyAthena.py_tool('Trig::TrigDecisionTool/TrigDecisionTool', iface='Trig::TrigDecisionTool')
62  if not self.tdt:
63  self.msg.warning('Could not retrieve TrigDecisionTool pointer!')
64  return StatusCode.Success
65 
66  # Set description variable in cut flow branch (default is trigger name, but can override in JO)
67  self.setFilterDescription(self.trigger)
68 
69 
70  self.nProcessed = 0
72 
73  return StatusCode.Success
74 
75 
76  def execute(self):
77 
78  if not self.tdt:
79  self.msg.warning('Could not retrieve TrigDecisionTool pointer!')
80  self.setFilterPassed(False)
81  return StatusCode.Success
82 
83  isPassed = False
84 
85  self.nProcessed+=1
86  self.msg.debug( '==> execute %s on %r. event...', self.name, self.nProcessed )
87 
88 
89 
90  if self.passAll :
91  self.msg.debug( '%s event passed because passAll is true', self.name )
92  self.setFilterPassed(True)
93  return StatusCode.Success
94 
95  #Check triggers
96  #if self.tdt.isPassed(PyAthena.TrigDec.EF):
97  if self.tdt.isPassed( self.trigger ):
98  self.nEventPassTrigger += 1
99  self.msg.debug("Trigger %s passed. Count: %d",
100  self.trigger, self.nEventPassTrigger)
101  isPassed = True
102  pass
103 
104 
105  self.setFilterPassed(isPassed)
106 
107  return StatusCode.Success
108 
109 
110  def finalize(self):
111 
112  import math
113 
114 
115  effiPassTrigger = 0.0
116  effiErrPassTrigger = 0.0
117 
118  try :
119  print ('self.processed = ', self.nProcessed)
120 
121  # Efficiencies
122  effiPassTrigger = 100.*self.nEventPassTrigger / float(self.nProcessed)
123  # Error on efficiencies
124  effiErrPassTrigger = 100.*math.sqrt( self.nEventPassTrigger ) / float(self.nProcessed)
125 
126  except ZeroDivisionError :
127  self.msg.warning( 'Division by zero error when calculating the uncertainties on the pass efficiencies...' )
128 
129  self.msg.info( '==> finalize %s...', self.name )
130  self.msg.info( '***************************************************************' )
131  self.msg.info( 'Cut-flow table of %s skimming algorithm:', self.name )
132  self.msg.info( '-------------' )
133  self.msg.info( ' Number of processed events: %r', self.nProcessed )
134  self.msg.info( ' Events passing trigger %s: %r and resulting efficiency = (%3.3f +/- %3.3f)%%',
135  self.trigger, self.nEventPassTrigger, effiPassTrigger, effiErrPassTrigger )
136  self.msg.info( '***************************************************************' )
137 
138  return StatusCode.Success
139 
grepfile.info
info
Definition: grepfile.py:38
python.TriggerFilter.TriggerFilter.__init__
def __init__(self, name="TriggerFilter", **kw)
Definition: TriggerFilter.py:35
python.TriggerFilter.TriggerFilter.initialize
def initialize(self)
Definition: TriggerFilter.py:48
python.TriggerFilter.TriggerFilter.finalize
def finalize(self)
Definition: TriggerFilter.py:110
python.TriggerFilter.TriggerFilter
Definition: TriggerFilter.py:25
python.TriggerFilter.TriggerFilter.nEventPassTrigger
nEventPassTrigger
Definition: TriggerFilter.py:71
python.TriggerFilter.TriggerFilter.execute
def execute(self)
Definition: TriggerFilter.py:76
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
python.TriggerFilter.TriggerFilter.tdt
tdt
TrigDecisionTool handle.
Definition: TriggerFilter.py:45
python.TriggerFilter.TriggerFilter.passAll
passAll
Definition: TriggerFilter.py:42
python.TriggerFilter.TriggerFilter.trigger
trigger
initialize base class
Definition: TriggerFilter.py:41
python.TriggerFilter.TriggerFilter.nProcessed
nProcessed
Initialize event pass counters.
Definition: TriggerFilter.py:70
readCCLHist.float
float
Definition: readCCLHist.py:83