16 #include "CLHEP/Units/SystemOfUnits.h"
21 const IInterface*
p) :
23 m_trigDecisionTool(
"Trig::TrigDecisionTool/TrigDecisionTool"),
29 declareProperty(
"JetContainerKey",
m_jetSGKey=
"AntiKt4EMTopoJets");
34 declareProperty(
"NumberOfAllJets",
m_nAllJets=4);
45 declareProperty(
"Triggers",
m_triggers=std::vector<std::string>());
51 declareProperty(
"DoDebug",
m_debug=
false);
54 declareProperty(
"PhotonContainerKey",
m_phSGKey=
"Photons");
55 declareProperty(
"ReqPhoton",
m_reqPh=
false);
71 if(m_trigDecisionTool.retrieve(DisableTool{!m_reqTrigger}).isFailure()) {
72 ATH_MSG_FATAL(
"Failed to retrieve tool: " << m_trigDecisionTool);
73 return StatusCode::FAILURE;
77 return StatusCode::SUCCESS;
83 ATH_MSG_INFO(
"Processed " << m_ntot <<
" events, " << m_npass <<
" events passed filter ");
84 return StatusCode::SUCCESS;
91 bool acceptEvent(
true);
95 bool isTriggerFired(m_triggers.empty());
96 for(
unsigned int i(0);
i<m_triggers.size();
i++) {
97 if(m_trigDecisionTool->isPassed(m_triggers.at(
i))) {
98 isTriggerFired =
true;
104 std::vector<TLorentzVector> goodAllJets;
105 std::vector<TLorentzVector> goodCentralJets;
111 for(; jet_itr != jet_end; ++jet_itr) {
112 TLorentzVector jetP4 = getCalibedJets( (*jet_itr) );
113 if(this->checkAllJetQuality(jetP4)) { goodAllJets.push_back(jetP4); }
114 if(this->checkCentralJetQuality(jetP4)) { goodCentralJets.push_back(jetP4); }
119 for(
unsigned int jet_i = 0; jet_i<goodAllJets.size(); jet_i++) {
120 const TLorentzVector& iP4 = goodAllJets.at(jet_i);
122 for(
unsigned int jet_k=jet_i+1; jet_k<goodAllJets.size(); jet_k++) {
123 const TLorentzVector& kP4 = goodAllJets.at(jet_k);
125 const TLorentzVector jjP4 = iP4 + kP4;
126 const double jjM = jjP4.M();
128 if (maxM<jjM) {maxM=jjM;}
137 for (
const auto* ph : *phots){
138 if(abs(ph->eta())<m_centralPhEtaCut)
139 if(ph->pt()>maxPhPt) maxPhPt = ph->pt();
145 const bool passNAllJet = (goodAllJets.size()>=m_nAllJets);
146 const bool passNCentralJet = (goodCentralJets.size()>=m_nCentralJets);
147 const bool passMjjCut = (maxM>m_vbfMjjCut);
148 const bool passPhPtCut = (maxPhPt>m_phPtCut);
150 if (m_reqNAllJets) {
if (not passNAllJet) {acceptEvent=
false;} }
151 if (m_reqNCentralJets) {
if (not passNCentralJet) {acceptEvent=
false;} }
153 if (m_reqTrigger) {
if (not isTriggerFired) {acceptEvent=
false;} }
155 if(m_reqVbfMjj and not m_reqPh) {
if (not passMjjCut) {acceptEvent=
false;} }
156 if(m_reqPh and not m_reqVbfMjj) {
if (not passPhPtCut) {acceptEvent=
false;} }
157 if(m_reqPh and m_reqVbfMjj) {
if (not (passMjjCut or passPhPtCut) ) {acceptEvent=
false;} }
159 if (acceptEvent) {m_npass++;}
162 printf(
"dbg> L%3d : event accepted [%s] "
163 "(NJets=%2d [%6s], NCentralJets=%2d [%6s] Mjj=%10.1f [%6s], Trigger [%6s]) \n",
165 acceptEvent?
"Y" :
"N",
166 (
int)goodAllJets.size(), passNAllJet ?
"PASSED" :
"FAILED",
167 (
int)goodCentralJets.size(), passNCentralJet ?
"PASSED" :
"FAILED",
168 maxM, passMjjCut ?
"PASSED" :
"FAILED",
169 isTriggerFired ?
"PASSED" :
"FAILED"
178 if(
jet.Pt()<m_allJetPtCut)
return false;
179 if(fabs(
jet.Eta())>m_allJetEtaCut)
return false;
186 if(
jet.Pt()<m_centralJetPtCut)
return false;
187 if(fabs(
jet.Eta())>m_centralJetEtaCut)
return false;
203 const float&
pt =ptAcc(*
jet);
204 const float&
eta=etaAcc(*
jet);
205 const float&
phi=phiAcc(*
jet);
206 const float&
m =mAcc(*
jet);