ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
Algorithms
TauAnalysisAlgorithms
Root
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
7
#include <
TauAnalysisAlgorithms/DiTauExtraVariablesAlg.h
>
8
9
#include <
AsgDataHandles/ReadHandle.h
>
10
#include <
AsgDataHandles/WriteDecorHandle.h
>
11
12
namespace
CP
{
13
14
StatusCode
DiTauExtraVariablesAlg::initialize
() {
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()) {
26
m_leadSubjetPtKey
=
m_ditausKey
.key() +
"."
+
m_leadSubjetPtKey
.key();
27
}
28
29
if
(
m_leadSubjetEtaKey
.contHandleKey().key() ==
m_leadSubjetEtaKey
.key()) {
30
m_leadSubjetEtaKey
=
m_ditausKey
.key() +
"."
+
m_leadSubjetEtaKey
.key();
31
}
32
33
if
(
m_leadSubjetPhiKey
.contHandleKey().key() ==
m_leadSubjetPhiKey
.key()) {
34
m_leadSubjetPhiKey
=
m_ditausKey
.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()) {
42
m_leadSubjetNTracksKey
=
m_ditausKey
.key() +
"."
+
m_leadSubjetNTracksKey
.key();
43
}
44
45
if
(
m_leadSubjetChargeKey
.contHandleKey().key() ==
m_leadSubjetChargeKey
.key()) {
46
m_leadSubjetChargeKey
=
m_ditausKey
.key() +
"."
+
m_leadSubjetChargeKey
.key();
47
}
48
49
// subleading subjet info
50
if
(
m_subleadSubjetPtKey
.contHandleKey().key() ==
m_subleadSubjetPtKey
.key()) {
51
m_subleadSubjetPtKey
=
m_ditausKey
.key() +
"."
+
m_subleadSubjetPtKey
.key();
52
}
53
54
if
(
m_subleadSubjetEtaKey
.contHandleKey().key() ==
m_subleadSubjetEtaKey
.key()) {
55
m_subleadSubjetEtaKey
=
m_ditausKey
.key() +
"."
+
m_subleadSubjetEtaKey
.key();
56
}
57
58
if
(
m_subleadSubjetPhiKey
.contHandleKey().key() ==
m_subleadSubjetPhiKey
.key()) {
59
m_subleadSubjetPhiKey
=
m_ditausKey
.key() +
"."
+
m_subleadSubjetPhiKey
.key();
60
}
61
62
if
(
m_subleadSubjetEKey
.contHandleKey().key() ==
m_subleadSubjetEKey
.key()) {
63
m_subleadSubjetEKey
=
m_ditausKey
.key() +
"."
+
m_subleadSubjetEKey
.key();
64
}
65
66
if
(
m_subleadSubjetNTracksKey
.contHandleKey().key() ==
m_subleadSubjetNTracksKey
.key()) {
67
m_subleadSubjetNTracksKey
=
m_ditausKey
.key() +
"."
+
m_subleadSubjetNTracksKey
.key();
68
}
69
70
if
(
m_subleadSubjetChargeKey
.contHandleKey().key() ==
m_subleadSubjetChargeKey
.key()) {
71
m_subleadSubjetChargeKey
=
m_ditausKey
.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());
81
ANA_CHECK
(
m_leadSubjetNTracksKey
.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());
87
ANA_CHECK
(
m_subleadSubjetNTracksKey
.initialize());
88
ANA_CHECK
(
m_subleadSubjetChargeKey
.initialize());
89
90
return
StatusCode::SUCCESS;
91
}
92
93
StatusCode
DiTauExtraVariablesAlg::execute
(
const
EventContext &ctx)
const
{
94
95
SG::ReadHandle<xAOD::DiTauJetContainer>
ditaus(
m_ditausKey
, ctx);
96
97
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
nSubjets(
m_nSubjetsKey
, ctx);
98
99
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
omniScoreHandle(
m_omniScoreKey
, ctx);
100
101
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
leadSubjetPtHandle(
m_leadSubjetPtKey
, ctx);
102
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
leadSubjetEtaHandle(
m_leadSubjetEtaKey
, ctx);
103
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
leadSubjetPhiHandle(
m_leadSubjetPhiKey
, ctx);
104
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
leadSubjetEHandle(
m_leadSubjetEKey
, ctx);
105
SG::WriteDecorHandle<xAOD::DiTauJetContainer, int>
leadSubjetNTracksHandle(
m_leadSubjetNTracksKey
, ctx);
106
SG::WriteDecorHandle<xAOD::DiTauJetContainer, int>
leadSubjetChargeHandle(
m_leadSubjetChargeKey
, ctx);
107
108
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
subleadSubjetPtHandle(
m_subleadSubjetPtKey
, ctx);
109
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
subleadSubjetEtaHandle(
m_subleadSubjetEtaKey
, ctx);
110
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
subleadSubjetPhiHandle(
m_subleadSubjetPhiKey
, ctx);
111
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
subleadSubjetEHandle(
m_subleadSubjetEKey
, ctx);
112
SG::WriteDecorHandle<xAOD::DiTauJetContainer, int>
subleadSubjetNTracksHandle(
m_subleadSubjetNTracksKey
, ctx);
113
SG::WriteDecorHandle<xAOD::DiTauJetContainer, int>
subleadSubjetChargeHandle(
m_subleadSubjetChargeKey
, ctx);
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
ReadHandle.h
Handle class for reading from StoreGate.
WriteDecorHandle.h
Handle class for adding a decoration to an object.
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition
Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:324
DiTauExtraVariablesAlg.h
CP::DiTauExtraVariablesAlg::m_subleadSubjetPhiKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetPhiKey
Definition
DiTauExtraVariablesAlg.h:40
CP::DiTauExtraVariablesAlg::m_nSubjetsKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_nSubjetsKey
Definition
DiTauExtraVariablesAlg.h:27
CP::DiTauExtraVariablesAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition
DiTauExtraVariablesAlg.cxx:93
CP::DiTauExtraVariablesAlg::initialize
virtual StatusCode initialize() override
Definition
DiTauExtraVariablesAlg.cxx:14
CP::DiTauExtraVariablesAlg::m_subleadSubjetEtaKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetEtaKey
Definition
DiTauExtraVariablesAlg.h:39
CP::DiTauExtraVariablesAlg::m_ditausKey
SG::ReadHandleKey< xAOD::DiTauJetContainer > m_ditausKey
Definition
DiTauExtraVariablesAlg.h:25
CP::DiTauExtraVariablesAlg::m_leadSubjetEKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetEKey
Definition
DiTauExtraVariablesAlg.h:34
CP::DiTauExtraVariablesAlg::m_omniScoreKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_omniScoreKey
Definition
DiTauExtraVariablesAlg.h:29
CP::DiTauExtraVariablesAlg::m_subleadSubjetPtKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetPtKey
Definition
DiTauExtraVariablesAlg.h:38
CP::DiTauExtraVariablesAlg::m_leadSubjetPhiKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetPhiKey
Definition
DiTauExtraVariablesAlg.h:33
CP::DiTauExtraVariablesAlg::m_subleadSubjetChargeKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetChargeKey
Definition
DiTauExtraVariablesAlg.h:43
CP::DiTauExtraVariablesAlg::m_subleadSubjetNTracksKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetNTracksKey
Definition
DiTauExtraVariablesAlg.h:42
CP::DiTauExtraVariablesAlg::m_leadSubjetPtKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetPtKey
Definition
DiTauExtraVariablesAlg.h:31
CP::DiTauExtraVariablesAlg::m_leadSubjetChargeKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetChargeKey
Definition
DiTauExtraVariablesAlg.h:36
CP::DiTauExtraVariablesAlg::m_leadSubjetNTracksKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetNTracksKey
Definition
DiTauExtraVariablesAlg.h:35
CP::DiTauExtraVariablesAlg::m_subleadSubjetEKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetEKey
Definition
DiTauExtraVariablesAlg.h:41
CP::DiTauExtraVariablesAlg::m_leadSubjetEtaKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetEtaKey
Definition
DiTauExtraVariablesAlg.h:32
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition
ConstAccessor.h:55
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition
StoreGate/StoreGate/WriteDecorHandle.h:100
CP
Select isolated Photons, Electrons and Muons.
Definition
Control/xAODRootAccess/xAODRootAccess/TEvent.h:27
xAOD::DiTauJet
DiTauJet_v1 DiTauJet
Definition of the current version.
Definition
DiTauJet.h:17
Generated on
for ATLAS Offline Software by
1.17.0