18 #include "fastjet/ClusterSequence.hh"
19 #include <fastjet/contrib/Nsubjettiness.hh>
20 #include <fastjet/contrib/EnergyCorrelator.hh>
27 AsgTool(
"ParticleLevelRCJetObjectLoader"), m_config(
cfg) {
73 ATH_MSG_INFO(
" Initializing particle level Re-clustered jets ");
85 std::replace(original_rho.begin(), original_rho.end(),
'_',
'.');
86 float rho = std::stof(original_rho);
116 "Failed inputjetcontainer initialize reclustering tool");
119 "Failed outputjetcontainer initialize reclustering tool");
121 m_radius),
"Failed re-clustering radius initialize reclustering tool");
123 m_ptcut * 1
e-3),
"Failed ptmin [GeV] initialize reclustering tool");
126 m_trim),
"Failed pT fraction initialize reclustering tool");
128 m_minradius),
"Failed VarRC min radius initialize reclustering tool");
130 m_massscale),
"Failed VarRC mass scale initialize reclustering tool");
143 m_nSub1_beta1 = std::make_shared<fastjet::contrib::Nsubjettiness>(1,
144 fastjet::contrib::OnePass_WTA_KT_Axes(),
145 fastjet::contrib::UnnormalizedMeasure(1.0));
146 m_nSub2_beta1 = std::make_shared<fastjet::contrib::Nsubjettiness>(2,
147 fastjet::contrib::OnePass_WTA_KT_Axes(),
148 fastjet::contrib::UnnormalizedMeasure(1.0));
149 m_nSub3_beta1 = std::make_shared<fastjet::contrib::Nsubjettiness>(3,
150 fastjet::contrib::OnePass_WTA_KT_Axes(),
151 fastjet::contrib::UnnormalizedMeasure(1.0));
154 m_split12 = std::make_shared<JetSubStructureUtils::KtSplittingScale>(1);
155 m_split23 = std::make_shared<JetSubStructureUtils::KtSplittingScale>(2);
157 m_qw = std::make_shared<JetSubStructureUtils::Qw>();
159 m_ECF1 = std::make_shared<fastjet::contrib::EnergyCorrelator>(1, 1.0, fastjet::contrib::EnergyCorrelator::pt_R);
160 m_ECF2 = std::make_shared<fastjet::contrib::EnergyCorrelator>(2, 1.0, fastjet::contrib::EnergyCorrelator::pt_R);
161 m_ECF3 = std::make_shared<fastjet::contrib::EnergyCorrelator>(3, 1.0, fastjet::contrib::EnergyCorrelator::pt_R);
165 m_gECF332 = std::make_shared<JetSubStructureUtils::EnergyCorrelatorGeneralized>(3, 3, 2,
166 JetSubStructureUtils::EnergyCorrelator::pt_R);
167 m_gECF461 = std::make_shared<JetSubStructureUtils::EnergyCorrelatorGeneralized>(6, 4, 1,
168 JetSubStructureUtils::EnergyCorrelator::pt_R);
169 m_gECF322 = std::make_shared<JetSubStructureUtils::EnergyCorrelatorGeneralized>(2, 3, 2,
170 JetSubStructureUtils::EnergyCorrelator::pt_R);
171 m_gECF331 = std::make_shared<JetSubStructureUtils::EnergyCorrelatorGeneralized>(3, 3, 1,
172 JetSubStructureUtils::EnergyCorrelator::pt_R);
173 m_gECF422 = std::make_shared<JetSubStructureUtils::EnergyCorrelatorGeneralized>(2, 4, 2,
174 JetSubStructureUtils::EnergyCorrelator::pt_R);
175 m_gECF441 = std::make_shared<JetSubStructureUtils::EnergyCorrelatorGeneralized>(4, 4, 1,
176 JetSubStructureUtils::EnergyCorrelator::pt_R);
177 m_gECF212 = std::make_shared<JetSubStructureUtils::EnergyCorrelatorGeneralized>(1, 2, 2,
178 JetSubStructureUtils::EnergyCorrelator::pt_R);
179 m_gECF321 = std::make_shared<JetSubStructureUtils::EnergyCorrelatorGeneralized>(2, 3, 1,
180 JetSubStructureUtils::EnergyCorrelator::pt_R);
181 m_gECF311 = std::make_shared<JetSubStructureUtils::EnergyCorrelatorGeneralized>(1, 3, 1,
182 JetSubStructureUtils::EnergyCorrelator::pt_R);
186 return StatusCode::SUCCESS;
198 auto rcJetInputs = std::make_unique< ConstDataVector< xAOD::JetContainer > >(
SG::VIEW_ELEMENTS);
201 rcJetInputs->push_back(
jet);
204 "Failed to put jets in TStore for re-clustering");
220 for (
auto rcjet : *myJets) {
221 rcjet->auxdecor<
bool>(
"PassedSelection") =
passSelection(*rcjet);
227 for (
auto rcjet : *myJets) {
228 if (!passedSelection(*rcjet))
continue;
231 std::vector<fastjet::PseudoJet>
clusters;
234 for (
auto subjet : rcjet->getConstituents()) {
240 TLorentzVector temp_p4;
241 temp_p4.SetPtEtaPhiM(clus_itr->pt(), clus_itr->eta(), clus_itr->phi(), clus_itr->m());
247 false).find(
"AntiKt4EMPFlowJets") != std::string::npos) {
255 if (
tp->charge() == 0)
continue;
258 if ((clus_itr->pt() <
m_config->ghostTrackspT()) || ( std::abs(clus_itr->eta()) > 2.5 ) )
continue;
261 clusters.push_back(fastjet::PseudoJet(temp_p4.Px(), temp_p4.Py(), temp_p4.Pz(), temp_p4.E()));
267 std::vector<fastjet::PseudoJet> my_pjets = fastjet::sorted_by_pt(clust_seq_rebuild.inclusive_jets(0.0));
269 fastjet::PseudoJet correctedJet;
270 correctedJet = my_pjets[0];
272 if (my_pjets.size() > 1) correctedJet += my_pjets[1];
276 double tau32 = -1, tau21 = -1;
282 if (std::abs(tau1) > 1
e-8) tau21 = tau2 / tau1;
284 if (std::abs(tau2) > 1
e-8) tau32 = tau3 / tau2;
289 double split12 =
m_split12->result(correctedJet);
290 double split23 =
m_split23->result(correctedJet);
291 double qw =
m_qw->result(correctedJet);
295 double vECF1 =
m_ECF1->result(correctedJet);
296 double vECF2 =
m_ECF2->result(correctedJet);
297 double vECF3 =
m_ECF3->result(correctedJet);
298 if (std::abs(vECF2) > 1
e-8) D2 = vECF3 * vECF1* vECF1* vECF1 / (vECF2 * vECF2 * vECF2);
302 rcjet->auxdecor<
float>(
"Tau32_clstr") = tau32;
303 rcjet->auxdecor<
float>(
"Tau21_clstr") = tau21;
306 rcjet->auxdecor<
float>(
"Tau3_clstr") = tau3;
307 rcjet->auxdecor<
float>(
"Tau2_clstr") = tau2;
308 rcjet->auxdecor<
float>(
"Tau1_clstr") = tau1;
310 rcjet->auxdecor<
float>(
"d12_clstr") = split12;
311 rcjet->auxdecor<
float>(
"d23_clstr") = split23;
312 rcjet->auxdecor<
float>(
"Qw_clstr") =
qw;
315 rcjet->auxdecor<
float>(
"nconstituent_clstr") =
clusters.size();
317 rcjet->auxdecor<
float>(
"ECF1_clstr") = vECF1;
318 rcjet->auxdecor<
float>(
"ECF2_clstr") = vECF2;
319 rcjet->auxdecor<
float>(
"ECF3_clstr") = vECF3;
320 rcjet->auxdecor<
float>(
"D2_clstr") = D2;
328 double gECF332 =
m_gECF332->result(correctedJet);
329 double gECF461 =
m_gECF461->result(correctedJet);
330 double gECF322 =
m_gECF322->result(correctedJet);
331 double gECF331 =
m_gECF331->result(correctedJet);
332 double gECF422 =
m_gECF422->result(correctedJet);
333 double gECF441 =
m_gECF441->result(correctedJet);
334 double gECF212 =
m_gECF212->result(correctedJet);
335 double gECF321 =
m_gECF321->result(correctedJet);
336 double gECF311 =
m_gECF311->result(correctedJet);
338 double L1 = -999.0,
L2 = -999.0,
L3 = -999.0, L4 = -999.0, L5 = -999.0;
339 if (std::abs(gECF212) > 1
e-12) {
340 L1 = gECF321 / gECF212;
341 L2 = gECF331 / sqrt(gECF212*gECF212*gECF212);
343 if (std::abs(gECF331) > 1
e-12) {
344 L3 = gECF311 /
pow(gECF331,1./3.);
345 L4 = gECF322 /
pow(gECF331,4./3.);
347 if (std::abs(gECF441) > 1
e-12) {
348 L5 = gECF422/gECF441;
351 rcjet->auxdecor<
float>(
"gECF332_clstr") = gECF332;
352 rcjet->auxdecor<
float>(
"gECF461_clstr") = gECF461;
353 rcjet->auxdecor<
float>(
"gECF322_clstr") = gECF322;
354 rcjet->auxdecor<
float>(
"gECF331_clstr") = gECF331;
355 rcjet->auxdecor<
float>(
"gECF422_clstr") = gECF422;
356 rcjet->auxdecor<
float>(
"gECF441_clstr") = gECF441;
357 rcjet->auxdecor<
float>(
"gECF212_clstr") = gECF212;
358 rcjet->auxdecor<
float>(
"gECF321_clstr") = gECF321;
359 rcjet->auxdecor<
float>(
"gECF311_clstr") = gECF311;
360 rcjet->auxdecor<
float>(
"L1_clstr") =
L1;
361 rcjet->auxdecor<
float>(
"L2_clstr") =
L2;
362 rcjet->auxdecor<
float>(
"L3_clstr") =
L3;
363 rcjet->auxdecor<
float>(
"L4_clstr") = L4;
364 rcjet->auxdecor<
float>(
"L5_clstr") = L5;
369 rcjet->auxdecor<
float>(
"RRCJet_pt") = correctedJet.pt();
370 rcjet->auxdecor<
float>(
"RRCJet_eta") = correctedJet.eta();
371 rcjet->auxdecor<
float>(
"RRCJet_phi") = correctedJet.phi();
372 rcjet->auxdecor<
float>(
"RRCJet_e") = correctedJet.e();
382 return StatusCode::SUCCESS;
386 return StatusCode::SUCCESS;