14 __doc__ =
"""This filter provides a a short algorithm to select events that contain one ISR jet and large Met."""
16 __author__ =
"Shimpei Yamamoto <shimpei.yamamoto@cern.ch>"
19 import AthenaPython.PyAthena
as PyAthena
20 from AthenaPython.PyAthena
import StatusCode
27 def __init__ ( self, name = "SingleJetMetFilter", **kw ):
29 super(SingleJetMetFilter, self).
__init__(**kw)
48 self.msg.
info(
'************************************' )
49 self.msg.
info(
'==> initialize %s...', self.name() )
54 self.msg.
info(
'Will apply the following cuts:' )
62 self.msg.
info(
'************************************' )
72 self.msg.
error(
"Problem retrieving StoreGateSvc pointer !!")
73 return StatusCode.Failure
75 return StatusCode.Success
83 self.msg.
debug(
'%s event passed because passAll is true', self.name() )
84 self.setFilterPassed(
True)
85 return StatusCode.Success
94 self.setFilterPassed(
False)
95 return StatusCode.Success
99 for i
in range( jetCollection.size() ) :
100 jet = jetCollection[i]
102 selectedJetIdx.append(i)
105 if len(selectedJetIdx) >= 1 :
107 for i
in range( jetCollection.size() ) :
108 if i == selectedJetIdx[0] :
111 jet = jetCollection[i]
131 self.setFilterPassed(
False)
132 return StatusCode.Success
141 if passedJet
and passedMet :
143 self.setFilterPassed(
True)
145 self.setFilterPassed(
False)
151 self.setFilterPassed(
True)
153 self.setFilterPassed(
False)
155 return StatusCode.Success
176 effErrPassJet = 100.0*math.sqrt(effPassJet*(1.-effPassMet)/
float(self.
nProcessed))
177 effErrPassMet = 100.0*math.sqrt(effPassMet*(1.-effPassMet)/
float(self.
nProcessed))
178 effErrPassAll = 100.0*math.sqrt(effPassAll*(1.-effPassAll)/
float(self.
nProcessed))
184 except ZeroDivisionError :
185 self.msg.warning(
'Division by zero error when calculating the uncertainties on the pass efficiencies...' )
187 self.msg.
info(
'==> finalize %s...', self.name() )
188 self.msg.
info(
'***************************************************************' )
189 self.msg.
info(
'Cut-flow table of %s skimming algorithm:', self.name() )
190 self.msg.
info(
'-------------' )
191 self.msg.
info(
' Number of processed events: %r', self.
nProcessed )
192 self.msg.
info(
' Number of events with jet requirement: %r, eff. = (%3.3f +/- %3.3f)%%', self.
nEventPassJet, effPassJet, effErrPassJet )
193 self.msg.
info(
' Number of events with met requirement: %r, eff. = (%3.3f +/- %3.3f)%%', self.
nEventPassMet, effPassMet, effErrPassMet )
194 self.msg.
info(
' Number of events with all requirements: %r, eff. = (%3.3f +/- %3.3f)%%', self.
nEventPassed, effPassAll, effErrPassAll )
195 self.msg.
info(
'***************************************************************' )
198 return StatusCode.Success