ATLAS Offline Software
Loading...
Searching...
No Matches
DiTauExtraVariablesAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8
11
12#include <Math/Vector4D.h>
13#include <Math/VectorUtil.h>
14
15#include <array>
16
17namespace CP {
18
20
21 ANA_CHECK(m_ditausKey.initialize());
22
29 if (key->contHandleKey().key() == key->key()) {
30 *key = m_ditausKey.key() + "." + key->key();
31 }
32 ANA_CHECK(key->initialize());
33 }
34
35 return StatusCode::SUCCESS;
36 }
37
38 StatusCode DiTauExtraVariablesAlg::execute(const EventContext &ctx) const {
39
41
43
45
52
59
60 // need to check if this decoration exist first because it's only available from ATLASDPD-2318 onward
61 static const SG::ConstAccessor<float> acc_OmniScore("omni_score");
62
63 for (const xAOD::DiTauJet *ditau : *ditaus) {
64
65 nSubjets(*ditau) = ditau->nSubjets();
66
67 if ( acc_OmniScore.isAvailable(*ditau) ) {
68 omniScoreHandle(*ditau) = acc_OmniScore(*ditau);
69 }
70
71 // always require at least 2 subjets to have a good ditau
72 if(ditau->nSubjets() < 2) {
73 leadSubjetPtHandle(*ditau) = -999.;
74 leadSubjetEtaHandle(*ditau) = -999.;
75 leadSubjetPhiHandle(*ditau) = -999.;
76 leadSubjetEHandle(*ditau) = -999.;
77 leadSubjetNTracksHandle(*ditau) = -999;
78 leadSubjetChargeHandle(*ditau) = -999;
79 subleadSubjetPtHandle(*ditau) = -999.;
80 subleadSubjetEtaHandle(*ditau) = -999.;
81 subleadSubjetPhiHandle(*ditau) = -999.;
82 subleadSubjetEHandle(*ditau) = -999.;
83 subleadSubjetNTracksHandle(*ditau) = -999;
84 subleadSubjetChargeHandle(*ditau) = -999;
85 continue;
86 }
87
88 leadSubjetPtHandle(*ditau) = ditau->subjetPt(0);
89 leadSubjetEtaHandle(*ditau) = ditau->subjetEta(0);
90 leadSubjetPhiHandle(*ditau) = ditau->subjetPhi(0);
91 leadSubjetEHandle(*ditau) = ditau->subjetE(0);
92
93 subleadSubjetPtHandle(*ditau) = ditau->subjetPt(1);
94 subleadSubjetEtaHandle(*ditau) = ditau->subjetEta(1);
95 subleadSubjetPhiHandle(*ditau) = ditau->subjetPhi(1);
96 subleadSubjetEHandle(*ditau) = ditau->subjetE(1);
97
98 // leading and subleading subjet ntracks
99 int lead_ntracks = 0;
100 int lead_charge = 0;
101 int subl_ntracks = 0;
102 int subl_charge = 0;
103
104 const std::array<ROOT::Math::PtEtaPhiEVector, 2> subjets {
105 ROOT::Math::PtEtaPhiEVector(ditau->subjetPt(0), ditau->subjetEta(0), ditau->subjetPhi(0), ditau->subjetE(0)),
106 ROOT::Math::PtEtaPhiEVector(ditau->subjetPt(1), ditau->subjetEta(1), ditau->subjetPhi(1), ditau->subjetE(1))};
107
108 for (const auto& xTrack : ditau->trackLinks()) {
109 if (!xTrack.isValid())
110 continue;
111
112 for (int i = 0; i < 2; ++i) { // loop over two leading subjets
113 double dR = ROOT::Math::VectorUtil::DeltaR(subjets[i], (*xTrack)->p4());
114
115 if (dR < 0.1) {
116 if (i == 0) {
117 lead_ntracks++;
118 lead_charge += (*xTrack)->charge();
119 } else if (i == 1) {
120 subl_ntracks++;
121 subl_charge += (*xTrack)->charge();
122 }
123 break; // prevents double counting of tracks
124 }
125 } // loop over subjets
126 }
127 leadSubjetNTracksHandle(*ditau) = lead_ntracks;
128 leadSubjetChargeHandle(*ditau) = lead_charge;
129 subleadSubjetNTracksHandle(*ditau) = subl_ntracks;
130 subleadSubjetChargeHandle(*ditau) = subl_charge;
131 }
132 return StatusCode::SUCCESS;
133 }
134
135} // namespace
Handle class for reading from StoreGate.
Handle class for adding a decoration to an object.
#define ANA_CHECK(EXP)
check whether the given expression was successful
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetPhiKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_nSubjetsKey
virtual StatusCode execute(const EventContext &ctx) const override
virtual StatusCode initialize() override
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetEtaKey
SG::ReadHandleKey< xAOD::DiTauJetContainer > m_ditausKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetEKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_omniScoreKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetPtKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetPhiKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetChargeKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetNTracksKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetPtKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetChargeKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetNTracksKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetEKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetEtaKey
Helper class to provide constant type-safe access to aux data.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
Handle class for adding a decoration to an object.
Select isolated Photons, Electrons and Muons.
DiTauJet_v1 DiTauJet
Definition of the current version.
Definition DiTauJet.h:17