16 #include "GaudiKernel/SystemOfUnits.h"
20 #include <TLorentzVector.h>
28 GenFilter(
name,pSvcLocator), m_total(0), m_passed_multiplicity(0), m_passed_all(0)
44 msg(MSG:: INFO) <<
"VBFHbbEtaSortingFilter INITIALISING " <<
endmsg;
47 return StatusCode::SUCCESS;
55 return StatusCode::SUCCESS;
60 if (
m_debug) printf(
"dbg> event start %10ld / %10ld / %10ld @ %d \n",
69 setFilterPassed(
false);
70 return StatusCode::SUCCESS;
75 std::multimap<double, const xAOD::Jet*, std::greater<double> > jets_ptordering;
81 jets_ptordering.insert(std::pair<double, const xAOD::Jet*> (
jet->pt(),
jet));
84 if (
m_debug) printf(
"dbg> %d @ %d \n", (
int)jets_ptordering.size(), __LINE__);
86 if (jets_ptordering.size() < 4) {
87 setFilterPassed(
false);
88 return StatusCode::SUCCESS;
95 std::multimap<double, const xAOD::Jet*> four_jets_etaordering;
96 std::multimap<double, const xAOD::Jet*>::const_iterator ite_c;
97 std::multimap<double, const xAOD::Jet*>::const_iterator ite_e;
98 ite_c = jets_ptordering.begin();
99 ite_e = jets_ptordering.end();
101 for (
int iJet=0; ite_c!=ite_e and iJet<4; ++ite_c, ++iJet) {
102 four_jets_etaordering.insert(std::pair<double, const xAOD::Jet*> ( (ite_c->second)->eta(), (ite_c->second)));
103 if (
m_debug) printf(
"dbg> ijet=%2d %10.1f @ %d \n", iJet, (ite_c->second)->pt(), __LINE__);
105 if (four_jets_etaordering.size() < 4){
106 setFilterPassed(
false);
107 return StatusCode::SUCCESS;
109 ite_c = four_jets_etaordering.begin();
115 int forward_jet_truth_label_1 = 0;
117 int central_jet_truth_label_1 = 0;
119 int central_jet_truth_label_2 = 0;
121 int forward_jet_truth_label_2 = 0;
124 if (
m_debug) printf(
"dbg> eta1=%5.1f (%3d) eta2=%5.1f (%3d)"
125 "eta3=%5.1f (%3d) eta4=%5.1f (%3d) @ %d \n",
126 forward_jet_1->
eta(), forward_jet_truth_label_1,
127 central_jet_1->
eta(), central_jet_truth_label_1,
128 central_jet_2->
eta(), central_jet_truth_label_2,
129 forward_jet_2->
eta(), forward_jet_truth_label_2,
132 if ( not (TMath::Abs(central_jet_truth_label_1)==5 and TMath::Abs(central_jet_truth_label_2)==5) ) {
133 setFilterPassed(
false);
134 return StatusCode::SUCCESS;
137 if (
m_debug) printf(
"dbg> pass all selection @ %d \n", __LINE__);
139 setFilterPassed(
true);
140 return StatusCode::SUCCESS;