13 __doc__ =
"""This filter provides an algorithm to select events that contain multiple high-pT jets and large Met."""
15 __author__ =
"Shimpei Yamamoto <shimpei.yamamoto@cern.ch>"
18 import AthenaPython.PyAthena
as PyAthena
19 from AthenaPython.PyAthena
import StatusCode
26 def __init__ ( self, name = "MultiJetMetFilter", **kw ):
28 super(MultiJetMetFilter, self).
__init__(**kw)
44 self.msg.
info(
'************************************' )
45 self.msg.
info(
'==> initialize %s...', self.name() )
50 self.msg.
info(
'Will apply the following cuts:' )
55 self.msg.
info(
'************************************' )
65 self.msg.
error(
"Problem retrieving StoreGateSvc pointer !!")
66 return StatusCode.Failure
68 return StatusCode.Success
76 self.msg.
debug(
'%s event passed because passAll is true', self.name() )
77 self.setFilterPassed(
True)
78 return StatusCode.Success
81 self.msg.warning(
'Invalid configuration' )
82 self.setFilterPassed(
False)
83 return StatusCode.Success
92 self.setFilterPassed(
False)
93 return StatusCode.Success
97 for i
in range( jetCollection.size() ) :
98 jet = jetCollection[i]
100 selectedJetIdx.append(i)
103 if len(selectedJetIdx) >= len(self.
cutsEtMin) :
105 jet = jetCollection[selectedJetIdx[i]]
121 self.setFilterPassed(
False)
122 return StatusCode.Success
131 if passedJet
and passedMet :
133 self.setFilterPassed(
True)
135 self.setFilterPassed(
False)
141 self.setFilterPassed(
True)
143 self.setFilterPassed(
False)
145 return StatusCode.Success
166 effErrPassJet = 100.0*math.sqrt(effPassJet*(1.-effPassMet)/
float(self.
nProcessed))
167 effErrPassMet = 100.0*math.sqrt(effPassMet*(1.-effPassMet)/
float(self.
nProcessed))
168 effErrPassAll = 100.0*math.sqrt(effPassAll*(1.-effPassAll)/
float(self.
nProcessed))
174 except ZeroDivisionError :
175 self.msg.warning(
'Division by zero error when calculating the uncertainties on the pass efficiencies...' )
177 self.msg.
info(
'==> finalize %s...', self.name() )
178 self.msg.
info(
'***************************************************************' )
179 self.msg.
info(
'Cut-flow table of %s skimming algorithm:', self.name() )
180 self.msg.
info(
'-------------' )
181 self.msg.
info(
' Number of processed events: %r', self.
nProcessed )
182 self.msg.
info(
' Number of events with jet requirement: %r, eff. = (%3.3f +/- %3.3f)%%', self.
nEventPassJet, effPassJet, effErrPassJet )
183 self.msg.
info(
' Number of events with met requirement: %r, eff. = (%3.3f +/- %3.3f)%%', self.
nEventPassMet, effPassMet, effErrPassMet )
184 self.msg.
info(
' Number of events with all requirements: %r, eff. = (%3.3f +/- %3.3f)%%', self.
nEventPassed, effPassAll, effErrPassAll )
185 self.msg.
info(
'***************************************************************' )
188 return StatusCode.Success