13 __doc__ =
"""This is a short algorithm to select events that contain one
14 muon which fulfills a certain set of criteria.
17 __author__ =
"David Lopez Mateos <David.Lopez@cern.ch>"
20 import AthenaPython.PyAthena
as PyAthena
21 from AthenaPython.PyAthena
import StatusCode
25 This class is a short algorithm to select events that contain some
26 number of muon segments (probably zero).
31 def __init__ ( self, name = "MuonSegmentFilter", **kw ):
34 super(MuonSegmentFilter, self).
__init__(**kw)
50 self.msg.
info(
'************************************' )
51 self.msg.
info(
'===> initialize %s...', self.name() )
52 self.msg.
info(
'Will apply the following cuts:' )
62 self.
sgSvc = PyAthena.py_svc(
'StoreGateSvc')
64 self.msg.
error(
"could not retrieve a handle to the event store !")
65 return StatusCode.Failure
67 return StatusCode.Success
73 self.msg.
debug(
'==> execute %s on %r. event...', self.name(), self.
nProcessed )
77 self.msg.
debug(
'%s event passed because passAll is true', self.name() )
78 self.setFilterPassed(
True)
79 return StatusCode.Success
81 _retrieve = self.
sgSvc.retrieve
92 self.msg.
debug(
'%s event passed', self.name() )
93 self.setFilterPassed(
True)
95 self.msg.
debug(
'%s event failed', self.name() )
96 self.setFilterPassed(
False)
98 return StatusCode.Success
107 effiErrNumPassed = 0.0
112 effiErrNumPassed = 100.0 * math.sqrt( effiNumPassed*(1.0 - effiNumPassed) /
float(self.
nProcessed) )
113 effiNumPassed *= 100.0
115 except ZeroDivisionError :
116 self.msg.warning(
'Division by zero error when calculating the uncertainties on the pass efficiencies...' )
119 self.msg.
info(
'==> finalize %s...', self.name() )
120 self.msg.
info(
'***************************************************************' )
121 self.msg.
info(
'Cut-flow table of %s skimming algorithm:', self.name() )
122 self.msg.
info(
'-------------' )
123 self.msg.
info(
' Number of processed events: %r', self.
nProcessed )
124 self.msg.
info(
' Events after numberPassed %r and resulting efficiency = (%3.3f +/- %3.3f)%%', self.
nEventPassed, effiNumPassed, effiErrNumPassed )
125 self.msg.
info(
'***************************************************************' )
127 return StatusCode.Success