ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
Algorithms
TruthPartonLevelAnalysisAlgorithms
Root
CalcHiggsPartonHistory.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
8
#include "
PartonHistory/CalcPartonHistory.h
"
9
#include "
VectorHelpers/DecoratorHelpers.h
"
10
#include "
VectorHelpers/LorentzHelper.h
"
11
#include "
xAODTruth/TruthParticleContainer.h
"
12
13
namespace
CP
{
14
using
ROOT::Math::PtEtaPhiMVector;
15
16
void
CalcPartonHistory::setHiggs
(
const
std::string& fsr) {
17
PtEtaPhiMVector
H
;
18
PtEtaPhiMVector Wm, Wm_decay1, Wm_decay2;
19
PtEtaPhiMVector Wp, Wp_decay1, Wp_decay2;
20
int
Wm_decay1_pdgId, Wm_decay2_pdgId;
21
int
Wp_decay1_pdgId, Wp_decay2_pdgId;
22
23
// W+: pass full m_particleMap keys to getW; bare names to m_dec.*
24
bool
has_Wp =
25
getW
(
m_prefix
+
"_"
+
"MC_lbar_"
+ fsr,
m_prefix
+
"_"
+
"MC_nu_"
+ fsr,
26
Wp_decay1, Wp_decay1_pdgId, Wp_decay2, Wp_decay2_pdgId);
27
if
(has_Wp) {
28
Wp = Wp_decay1 + Wp_decay2;
29
m_dec
.decorateParticle(
"MC_Hdecay1_"
+ fsr, Wp, 24);
30
m_dec
.decorateParticle(
"MC_Hdecay1_decay1_"
+ fsr, Wp_decay1,
31
Wp_decay1_pdgId);
32
m_dec
.decorateParticle(
"MC_Hdecay1_decay2_"
+ fsr, Wp_decay2,
33
Wp_decay2_pdgId);
34
}
35
// W-
36
bool
has_Wm =
37
getW
(
m_prefix
+
"_"
+
"MC_l_"
+ fsr,
m_prefix
+
"_"
+
"MC_nubar_"
+ fsr,
38
Wm_decay1, Wm_decay1_pdgId, Wm_decay2, Wm_decay2_pdgId);
39
if
(has_Wm) {
40
Wm = Wm_decay1 + Wm_decay2;
41
m_dec
.decorateParticle(
"MC_Hdecay2_"
+ fsr, Wm, -24);
42
m_dec
.decorateParticle(
"MC_Hdecay2_decay1_"
+ fsr, Wm_decay1,
43
Wm_decay1_pdgId);
44
m_dec
.decorateParticle(
"MC_Hdecay2_decay2_"
+ fsr, Wm_decay2,
45
Wm_decay2_pdgId);
46
}
47
if
(has_Wm && has_Wp) {
48
H
= Wp + Wm;
49
m_dec
.decorateParticle(
"MC_H_"
+ fsr,
H
, 25);
50
}
51
}
52
53
void
CalcPartonHistory::FillHiggsPartonHistory
(
const
std::string& mode) {
54
PtEtaPhiMVector v;
55
int
pdgId = 0;
56
57
// Defaults for all branches regardless of mode.
58
m_dec
.decorateDefault(
"MC_H_beforeFSR"
);
59
m_dec
.decorateDefault(
"MC_Hdecay1_beforeFSR"
);
60
m_dec
.decorateDefault(
"MC_Hdecay2_beforeFSR"
);
61
m_dec
.decorateDefault(
"MC_Hdecay1_decay1_beforeFSR"
);
62
m_dec
.decorateDefault(
"MC_Hdecay1_decay2_beforeFSR"
);
63
m_dec
.decorateDefault(
"MC_Hdecay2_decay1_beforeFSR"
);
64
m_dec
.decorateDefault(
"MC_Hdecay2_decay2_beforeFSR"
);
65
m_dec
.decorateDefault(
"MC_H_afterFSR"
);
66
m_dec
.decorateDefault(
"MC_Hdecay1_afterFSR"
);
67
m_dec
.decorateDefault(
"MC_Hdecay2_afterFSR"
);
68
m_dec
.decorateDefault(
"MC_Hdecay1_decay1_afterFSR"
);
69
m_dec
.decorateDefault(
"MC_Hdecay1_decay2_afterFSR"
);
70
m_dec
.decorateDefault(
"MC_Hdecay2_decay1_afterFSR"
);
71
m_dec
.decorateDefault(
"MC_Hdecay2_decay2_afterFSR"
);
72
73
if
(mode ==
"resonant"
) {
74
// RetrieveParticleInfo uses full m_particleMap keys (with m_prefix).
75
// m_dec.decorateParticle uses bare names.
76
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_H_beforeFSR"
, v, pdgId))
77
m_dec
.decorateParticle(
"MC_H_beforeFSR"
, v, pdgId);
78
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay1_beforeFSR"
, v, pdgId))
79
m_dec
.decorateParticle(
"MC_Hdecay1_beforeFSR"
, v, pdgId);
80
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay2_beforeFSR"
, v, pdgId))
81
m_dec
.decorateParticle(
"MC_Hdecay2_beforeFSR"
, v, pdgId);
82
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay1Decay1_beforeFSR"
, v,
83
pdgId))
84
m_dec
.decorateParticle(
"MC_Hdecay1_decay1_beforeFSR"
, v, pdgId);
85
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay1Decay2_beforeFSR"
, v,
86
pdgId))
87
m_dec
.decorateParticle(
"MC_Hdecay1_decay2_beforeFSR"
, v, pdgId);
88
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay2Decay1_beforeFSR"
, v,
89
pdgId))
90
m_dec
.decorateParticle(
"MC_Hdecay2_decay1_beforeFSR"
, v, pdgId);
91
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay2Decay2_beforeFSR"
, v,
92
pdgId))
93
m_dec
.decorateParticle(
"MC_Hdecay2_decay2_beforeFSR"
, v, pdgId);
94
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_H_afterFSR"
, v, pdgId))
95
m_dec
.decorateParticle(
"MC_H_afterFSR"
, v, pdgId);
96
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay1_afterFSR"
, v, pdgId))
97
m_dec
.decorateParticle(
"MC_Hdecay1_afterFSR"
, v, pdgId);
98
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay2_afterFSR"
, v, pdgId))
99
m_dec
.decorateParticle(
"MC_Hdecay2_afterFSR"
, v, pdgId);
100
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay1Decay1_afterFSR"
, v,
101
pdgId))
102
m_dec
.decorateParticle(
"MC_Hdecay1_decay1_afterFSR"
, v, pdgId);
103
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay1Decay2_afterFSR"
, v,
104
pdgId))
105
m_dec
.decorateParticle(
"MC_Hdecay1_decay2_afterFSR"
, v, pdgId);
106
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay2Decay1_afterFSR"
, v,
107
pdgId))
108
m_dec
.decorateParticle(
"MC_Hdecay2_decay1_afterFSR"
, v, pdgId);
109
if
(
RetrieveParticleInfo
(
m_prefix
+
"_"
+
"MC_HDecay2Decay2_afterFSR"
, v,
110
pdgId))
111
m_dec
.decorateParticle(
"MC_Hdecay2_decay2_afterFSR"
, v, pdgId);
112
}
else
if
(mode ==
"single_top"
) {
113
// FillGenericPartonHistory retrieval strings are bare suffixes.
114
FillGenericPartonHistory
(
115
{
"MC_H_beforeFSR"
,
"MC_b_H_beforeFSR"
,
"MC_bbar_H_beforeFSR"
},
116
"MC_H_beforeFSR"
, 0);
117
FillGenericPartonHistory
({
"MC_HDecay1_beforeFSR"
,
"MC_b_HDecay1_beforeFSR"
,
118
"MC_bbar_HDecay1_beforeFSR"
},
119
"MC_Hdecay1_beforeFSR"
, 0);
120
FillGenericPartonHistory
({
"MC_HDecay2_beforeFSR"
,
"MC_b_HDecay2_beforeFSR"
,
121
"MC_bbar_HDecay2_beforeFSR"
},
122
"MC_Hdecay2_beforeFSR"
, 0);
123
FillGenericPartonHistory
(
124
{
"MC_HDecay1Decay1_beforeFSR"
,
"MC_b_HDecay1Decay1_beforeFSR"
,
125
"MC_bbar_HDecay1Decay1_beforeFSR"
},
126
"MC_Hdecay1_decay1_beforeFSR"
, 0);
127
FillGenericPartonHistory
(
128
{
"MC_HDecay1Decay2_beforeFSR"
,
"MC_b_HDecay1Decay2_beforeFSR"
,
129
"MC_bbar_HDecay1Decay2_beforeFSR"
},
130
"MC_Hdecay1_decay2_beforeFSR"
, 0);
131
FillGenericPartonHistory
(
132
{
"MC_HDecay2Decay1_beforeFSR"
,
"MC_b_HDecay2Decay1_beforeFSR"
,
133
"MC_bbar_HDecay2Decay1_beforeFSR"
},
134
"MC_Hdecay2_decay1_beforeFSR"
, 0);
135
FillGenericPartonHistory
(
136
{
"MC_HDecay2Decay2_beforeFSR"
,
"MC_b_HDecay2Decay2_beforeFSR"
,
137
"MC_bbar_HDecay2Decay2_beforeFSR"
},
138
"MC_Hdecay2_decay2_beforeFSR"
, 0);
139
FillGenericPartonHistory
(
140
{
"MC_H_afterFSR"
,
"MC_b_H_afterFSR"
,
"MC_bbar_H_afterFSR"
},
141
"MC_H_afterFSR"
, 0);
142
FillGenericPartonHistory
({
"MC_HDecay1_afterFSR"
,
"MC_b_HDecay1_afterFSR"
,
143
"MC_bbar_HDecay1_afterFSR"
},
144
"MC_Hdecay1_afterFSR"
, 0);
145
FillGenericPartonHistory
({
"MC_HDecay2_afterFSR"
,
"MC_b_HDecay2_afterFSR"
,
146
"MC_bbar_HDecay2_afterFSR"
},
147
"MC_Hdecay2_afterFSR"
, 0);
148
FillGenericPartonHistory
(
149
{
"MC_HDecay1Decay1_afterFSR"
,
"MC_b_HDecay1Decay1_afterFSR"
,
150
"MC_bbar_HDecay1Decay1_afterFSR"
},
151
"MC_Hdecay1_decay1_afterFSR"
, 0);
152
FillGenericPartonHistory
(
153
{
"MC_HDecay1Decay2_afterFSR"
,
"MC_b_HDecay1Decay2_afterFSR"
,
154
"MC_bbar_HDecay1Decay2_afterFSR"
},
155
"MC_Hdecay1_decay2_afterFSR"
, 0);
156
FillGenericPartonHistory
(
157
{
"MC_HDecay2Decay1_afterFSR"
,
"MC_b_HDecay2Decay1_afterFSR"
,
158
"MC_bbar_HDecay2Decay1_afterFSR"
},
159
"MC_Hdecay2_decay1_afterFSR"
, 0);
160
FillGenericPartonHistory
(
161
{
"MC_HDecay2Decay2_afterFSR"
,
"MC_b_HDecay2Decay2_afterFSR"
,
162
"MC_bbar_HDecay2Decay2_afterFSR"
},
163
"MC_Hdecay2_decay2_afterFSR"
, 0);
164
}
else
if
(mode ==
"non_resonant_WW"
) {
165
setHiggs
(
"beforeFSR"
);
166
setHiggs
(
"afterFSR"
);
167
}
168
}
169
}
// namespace CP
CalcPartonHistory.h
DecoratorHelpers.h
TruthParticleContainer.h
LorentzHelper.h
H
#define H(x, y, z)
Definition
MD5.cxx:114
CP::CalcPartonHistory::RetrieveParticleInfo
bool RetrieveParticleInfo(const std::string &prefix, std::vector< const xAOD::TruthParticle * > &particles)
Definition
CalcPartonHistory.cxx:124
CP::CalcPartonHistory::FillHiggsPartonHistory
void FillHiggsPartonHistory(const std::string &mode)
Definition
CalcHiggsPartonHistory.cxx:53
CP::CalcPartonHistory::getW
bool getW(const std::string &str_lep, const std::string &str_nu, PtEtaPhiMVector &p1, int &pdgId1, PtEtaPhiMVector &p2, int &pdgId2)
Definition
CalcWPartonHistory.cxx:15
CP::CalcPartonHistory::m_prefix
std::string m_prefix
prefix applied to all decorator and m_particleMap names
Definition
CalcPartonHistory.h:161
CP::CalcPartonHistory::m_dec
PartonDecorator m_dec
Definition
CalcPartonHistory.h:157
CP::CalcPartonHistory::FillGenericPartonHistory
void FillGenericPartonHistory(const std::string &retrievalstring, const std::string &decorationstring, const int idx)
Definition
CalcGenericPartonHistory.cxx:14
CP::CalcPartonHistory::setHiggs
void setHiggs(const std::string &fsr)
Definition
CalcHiggsPartonHistory.cxx:16
CP
Select isolated Photons, Electrons and Muons.
Definition
Control/xAODRootAccess/xAODRootAccess/TEvent.h:27
Generated on
for ATLAS Offline Software by
1.17.0