57 {
59
60
61 SG::ReadHandle<xAOD::JetContainer> hiJets(
m_hiJet_key, ctx);
62 if (!hiJets.isValid()) {
64 return StatusCode::FAILURE;
65 }
66 SG::ReadHandle<xAOD::JetContainer> caloJets(
m_caloJet_key, ctx);
67 if (!caloJets.isValid()) {
70 return StatusCode::FAILURE;
71 }
72
73
74
75
76
77 SG::WriteDecorHandle<xAOD::JetContainer, float> jvtMatchedHandle(
m_jvtMatchedKey,ctx);
79 SG::WriteDecorHandle<xAOD::JetContainer, bool> jvtTightPassedHandle(
m_jvtTightPassedKey,ctx);
80
81
82 for (const auto *hjet : *hiJets) {
83 float mindR = 999.;
84 float matchedEta = 999.;
85 float matchedJvt = -1;
86
87 bool passJvtMedium = false;
88 bool passJvtTight = false;
89
90 for (const auto *tjet : *caloJets) {
92
93
94 float dR =
95 deltaR(tjet->eta(), hjet->eta(), hjet->phi(), tjet->phi());
96
97 if (dR <
m_deltaR.value() && dR < mindR) {
98 mindR = dR;
99 matchedJvt = newjvt;
100 matchedEta = tjet->eta();
101 }
102 }
103
105 (jvtMatchedHandle)(*hjet) = matchedJvt;
106
107
108
109 if (std::abs(matchedEta) < 2.4) {
110 passJvtMedium = matchedJvt > 0.59;
111 passJvtTight = matchedJvt > 0.91;
112 } else if (std::abs(matchedEta) < 2.5) {
113 passJvtMedium = matchedJvt > 0.11;
114 passJvtTight = true;
115 } else {
116 passJvtMedium = true;
117 passJvtTight = true;
118 }
119 (jvtMediumPassedHandle)(*hjet) = passJvtMedium;
120 (jvtTightPassedHandle)(*hjet) = passJvtTight;
121
122 } else {
123 (jvtMatchedHandle)(*hjet) = -1;
124 (jvtMediumPassedHandle)(*hjet) = false;
125 (jvtTightPassedHandle)(*hjet) = false;
126 }
127 }
128
129 return StatusCode::SUCCESS;
130 }
#define ATH_MSG_ERROR(x,...)
double deltaR(double eta1, double eta2, double phi1, double phi2)