ATLAS Offline Software
Loading...
Searching...
No Matches
HIJetAugmentationTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
7#include <format>
8
10{
12 const std::string& n,
13 const IInterface* p ) : base_class(t,n,p)
14 {
15 }
16
17 // Destructor
21
22 // Athena initialize and finalize
24 {
25 ATH_CHECK(m_eventInfoKey.initialize());
26 ATH_CHECK(m_hiJet_key.initialize());
27 ATH_CHECK(m_caloJet_key.initialize());
28 ATH_CHECK(m_jvtUpdateTool.retrieve());
29
30 m_jvtMatchedKey = m_hiJet_key.key() + "." + m_jvtMatchedKey.key();
31 ATH_CHECK(m_jvtMatchedKey.initialize());
33 ATH_CHECK(m_jvtMediumPassedKey.initialize());
35 ATH_CHECK(m_jvtTightPassedKey.initialize());
36
37 ATH_MSG_INFO("DeltaRJetMatching = "<< m_deltaR.value());
38
39
40 return StatusCode::SUCCESS;
41 }
42
44 {
45
46 ATH_CHECK(m_jvtUpdateTool->finalize());
47
48 return StatusCode::SUCCESS;
49 }
50
51 double deltaR(double eta1, double eta2, double phi1, double phi2) {
52 double deltaPhi = TVector2::Phi_mpi_pi(phi1 - phi2);
53 double deltaEta = eta1 - eta2;
54 return std::sqrt(deltaEta * deltaEta + deltaPhi * deltaPhi);
55 }
56
57 StatusCode HIJetAugmentationTool::addBranches(const EventContext &ctx) const {
59
60 // Load jet containers
62 if (!hiJets.isValid()) {
63 ATH_MSG_ERROR("Couldn't retrieve JetContainer with key " << m_hiJet_key);
64 return StatusCode::FAILURE;
65 }
67 if (!caloJets.isValid()) {
68 ATH_MSG_ERROR("Couldn't retrieve JetContainer with key "
69 << m_caloJet_key);
70 return StatusCode::FAILURE;
71 }
72
73 // calibrate topo jets
74 //
75
76
80
81 // first loop over calibrated HI jets
82 for (const auto *hjet : *hiJets) {
83 float mindR = 999.;
84 float matchedEta = 999.;
85 float matchedJvt = -1;
86 // temporary HI jvt selection
87 bool passJvtMedium = false;
88 bool passJvtTight = false;
89 // second loop over topo jets
90 for (const auto *tjet : *caloJets) {
91 float newjvt = m_jvtUpdateTool->updateJvt(*tjet);
92
93 // perform the matching
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
104 if (mindR < m_deltaR.value()) {
105 (jvtMatchedHandle)(*hjet) = matchedJvt;
106 // HI jet sub-group pre-recommendation for JVT: https://atlas-heavy-ions.docs.cern.ch/Jets/jetselection/
107 // applying JVT selection on EMTopo jet matched to HI jet
108 // using selections from: https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PileupJetRecommendations#JVT
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; // no tight JVT in this region
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 }
131}
132
133
Scalar deltaPhi(const MatrixBase< Derived > &vec) const
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_INFO(x,...)
Handle class for adding a decoration to an object.
PublicToolHandle< IJetUpdateJvt > m_jvtUpdateTool
JVT update tool.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jvtTightPassedKey
virtual StatusCode addBranches(const EventContext &ctx) const
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jvtMatchedKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jvtMediumPassedKey
SG::ReadHandleKey< xAOD::JetContainer > m_caloJet_key
HIJetAugmentationTool(const std::string &t, const std::string &n, const IInterface *p)
SG::ReadHandleKey< xAOD::JetContainer > m_hiJet_key
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Handle class for adding a decoration to an object.
THE reconstruction tool.
double deltaR(double eta1, double eta2, double phi1, double phi2)