ATLAS Offline Software
Loading...
Searching...
No Matches
DiTauExtraVariablesAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8
11
12namespace CP {
13
15
16 if (m_omniScoreKey.contHandleKey().key() == m_omniScoreKey.key()) {
17 m_omniScoreKey = m_ditausKey.key() + "." + m_omniScoreKey.key();
18 }
19
20 if (m_nSubjetsKey.contHandleKey().key() == m_nSubjetsKey.key()) {
21 m_nSubjetsKey = m_ditausKey.key() + "." + m_nSubjetsKey.key();
22 }
23
24 // leading subjet info
25 if (m_leadSubjetPtKey.contHandleKey().key() == m_leadSubjetPtKey.key()) {
27 }
28
29 if (m_leadSubjetEtaKey.contHandleKey().key() == m_leadSubjetEtaKey.key()) {
31 }
32
33 if (m_leadSubjetPhiKey.contHandleKey().key() == m_leadSubjetPhiKey.key()) {
35 }
36
37 if (m_leadSubjetEKey.contHandleKey().key() == m_leadSubjetEKey.key()) {
38 m_leadSubjetEKey = m_ditausKey.key() + "." + m_leadSubjetEKey.key();
39 }
40
41 if (m_leadSubjetNTracksKey.contHandleKey().key() == m_leadSubjetNTracksKey.key()) {
43 }
44
45 if (m_leadSubjetChargeKey.contHandleKey().key() == m_leadSubjetChargeKey.key()) {
47 }
48
49 // subleading subjet info
50 if (m_subleadSubjetPtKey.contHandleKey().key() == m_subleadSubjetPtKey.key()) {
52 }
53
54 if (m_subleadSubjetEtaKey.contHandleKey().key() == m_subleadSubjetEtaKey.key()) {
56 }
57
58 if (m_subleadSubjetPhiKey.contHandleKey().key() == m_subleadSubjetPhiKey.key()) {
60 }
61
62 if (m_subleadSubjetEKey.contHandleKey().key() == m_subleadSubjetEKey.key()) {
64 }
65
66 if (m_subleadSubjetNTracksKey.contHandleKey().key() == m_subleadSubjetNTracksKey.key()) {
68 }
69
70 if (m_subleadSubjetChargeKey.contHandleKey().key() == m_subleadSubjetChargeKey.key()) {
72 }
73
74 ANA_CHECK(m_ditausKey.initialize());
75 ANA_CHECK(m_nSubjetsKey.initialize());
76 ANA_CHECK(m_omniScoreKey.initialize());
77 ANA_CHECK(m_leadSubjetPtKey.initialize());
78 ANA_CHECK(m_leadSubjetEtaKey.initialize());
79 ANA_CHECK(m_leadSubjetPhiKey.initialize());
80 ANA_CHECK(m_leadSubjetEKey.initialize());
82 ANA_CHECK(m_leadSubjetChargeKey.initialize());
83 ANA_CHECK(m_subleadSubjetPtKey.initialize());
84 ANA_CHECK(m_subleadSubjetEtaKey.initialize());
85 ANA_CHECK(m_subleadSubjetPhiKey.initialize());
86 ANA_CHECK(m_subleadSubjetEKey.initialize());
89
90 return StatusCode::SUCCESS;
91 }
92
93 StatusCode DiTauExtraVariablesAlg::execute(const EventContext &ctx) const {
94
96
98
100
107
114
115 // need to check if this decoration exist first because it's only available from ATLASDPD-2318 onward
116 static const SG::ConstAccessor<float> acc_OmniScore("omni_score");
117
118 for (const xAOD::DiTauJet *ditau : *ditaus) {
119
120 // always require at least 2 subjets to have a good ditau
121 if(ditau->nSubjets() < 2) continue;
122
123 nSubjets(*ditau) = ditau->nSubjets();
124
125 if ( acc_OmniScore.isAvailable(*ditau) ) {
126 omniScoreHandle(*ditau) = acc_OmniScore(*ditau);
127 }
128
129 leadSubjetPtHandle(*ditau) = ditau->subjetPt(0);
130 leadSubjetEtaHandle(*ditau) = ditau->subjetEta(0);
131 leadSubjetPhiHandle(*ditau) = ditau->subjetPhi(0);
132 leadSubjetEHandle(*ditau) = ditau->subjetE(0);
133
134 subleadSubjetPtHandle(*ditau) = ditau->subjetPt(1);
135 subleadSubjetEtaHandle(*ditau) = ditau->subjetEta(1);
136 subleadSubjetPhiHandle(*ditau) = ditau->subjetPhi(1);
137 subleadSubjetEHandle(*ditau) = ditau->subjetE(1);
138
139 // leading and subleading subjet ntracks
140 int lead_ntracks = 0;
141 int lead_charge = 0;
142 int subl_ntracks = 0;
143 int subl_charge = 0;
144
145 for (const auto& xTrack : ditau->trackLinks()) {
146 if (!xTrack.isValid())
147 continue;
148
149 for (int i = 0; i < 2; ++i) { // loop over two leading subjets
150 TLorentzVector tlvSubjet = TLorentzVector();
151 tlvSubjet.SetPtEtaPhiE(ditau->subjetPt(i), ditau->subjetEta(i),ditau->subjetPhi(i), ditau->subjetE(i));
152 double dR = tlvSubjet.DeltaR((*xTrack)->p4());
153
154 if (dR < 0.1) {
155 if (i == 0) {
156 lead_ntracks++;
157 lead_charge += (*xTrack)->charge();
158 } else if (i == 1) {
159 subl_ntracks++;
160 subl_charge += (*xTrack)->charge();
161 }
162 break; // prevents double counting of tracks
163 }
164 } // loop over subjets
165 }
166 leadSubjetNTracksHandle(*ditau) = lead_ntracks;
167 leadSubjetChargeHandle(*ditau) = lead_charge;
168 subleadSubjetNTracksHandle(*ditau) = subl_ntracks;
169 subleadSubjetChargeHandle(*ditau) = subl_charge;
170 }
171 return StatusCode::SUCCESS;
172 }
173
174} // 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.
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