ATLAS Offline Software
Loading...
Searching...
No Matches
NSubjettinessRatiosTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
6
9{
10 declareProperty("AlphaList", m_rawAlphaVals = {});
11 declareProperty("DoDichroic", m_doDichroic = false);
12}
13
15
18
20 m_moments.emplace( 1.0, moments_t(1.0, m_prefix) );
21
23 for( float alpha : m_rawAlphaVals ) {
24
26 float alphaFix = round( alpha * 10.0 ) / 10.0;
27 if( std::abs(alpha-alphaFix) > 1.0e-5 ) ATH_MSG_DEBUG( "alpha = " << alpha << " has been rounded to " << alphaFix );
28
30 if( alphaFix < 0.0 ) {
31 ATH_MSG_WARNING( "alpha must be positive. Skipping alpha = " << alpha );
32 continue;
33 }
34
36 m_moments.emplace( alphaFix, moments_t(alphaFix, m_prefix) );
37
38 }
39
40 for( auto const& moment : m_moments ) {
41 ATH_MSG_DEBUG( "Including alpha = " << moment.first );
42 }
43
44 return StatusCode::SUCCESS;
45
46}
47
49
50 for( auto const& moment : m_moments ) {
51
52 std::string suffix = moment.second.suffix;
53
54 if( !moment.second.acc_Tau1->isAvailable(jet) ||
55 !moment.second.acc_Tau2->isAvailable(jet) ||
56 !moment.second.acc_Tau3->isAvailable(jet) ||
57 !moment.second.acc_Tau4->isAvailable(jet) ||
58 !moment.second.acc_Tau1_wta->isAvailable(jet) ||
59 !moment.second.acc_Tau2_wta->isAvailable(jet) ||
60 !moment.second.acc_Tau3_wta->isAvailable(jet) ||
61 !moment.second.acc_Tau4_wta->isAvailable(jet)) {
62
63 ATH_MSG_ERROR( "Not all " << m_prefix << " Tau decorations with " << suffix << " are available. Exiting." );
64 return 1;
65
66 }
67
68 if( m_doDichroic ) {
69
70 if( !moment.second.acc_Tau2_ungroomed->isAvailable(jet) ||
71 !moment.second.acc_Tau3_ungroomed->isAvailable(jet) ||
72 !moment.second.acc_Tau4_ungroomed->isAvailable(jet) ||
73 !moment.second.acc_Tau2_wta_ungroomed->isAvailable(jet) ||
74 !moment.second.acc_Tau3_wta_ungroomed->isAvailable(jet) ||
75 !moment.second.acc_Tau4_wta_ungroomed->isAvailable(jet)) {
76
77 ATH_MSG_ERROR( "Not all ungroomed " << m_prefix << " Tau decorations with " << suffix << " are available. Exiting." );
78 return 1;
79
80 }
81
82 }
83
85 float Tau1 = (*moment.second.acc_Tau1)(jet);
86 float Tau2 = (*moment.second.acc_Tau2)(jet);
87 float Tau3 = (*moment.second.acc_Tau3)(jet);
88 float Tau4 = (*moment.second.acc_Tau4)(jet);
89
90 float Tau2_ungroomed = -999.0;
91 float Tau3_ungroomed = -999.0;
92 float Tau4_ungroomed = -999.0;
93
94 if( m_doDichroic ) {
95 Tau2_ungroomed = (*moment.second.acc_Tau2_ungroomed)(jet);
96 Tau3_ungroomed = (*moment.second.acc_Tau3_ungroomed)(jet);
97 Tau4_ungroomed = (*moment.second.acc_Tau4_ungroomed)(jet);
98 }
99
100 float Tau21 = -999.0;
101 float Tau32 = -999.0;
102 float Tau42 = -999.0;
103
104 float Tau21_dichroic = -999.0;
105 float Tau32_dichroic = -999.0;
106 float Tau42_dichroic = -999.0;
107
109 if( Tau1 > 1e-8 ) {
110
111 Tau21 = Tau2 / Tau1;
112
113 if( Tau2_ungroomed > 1e-8 ) {
114 Tau21_dichroic = Tau2_ungroomed/Tau1;
115 }
116
117 }
118
120 if( Tau2 > 1e-8 ) {
121
122 Tau32 = Tau3 / Tau2;
123 Tau42 = Tau4 / Tau2;
124
125 if(Tau3_ungroomed > 1e-8) {
126 Tau32_dichroic = Tau3_ungroomed / Tau2;
127 }
128
129 if(Tau4_ungroomed > 1e-8) {
130 Tau42_dichroic = Tau4_ungroomed / Tau2;
131 }
132
133 }
134
136 float Tau1_wta = (*moment.second.acc_Tau1_wta)(jet);
137 float Tau2_wta = (*moment.second.acc_Tau2_wta)(jet);
138 float Tau3_wta = (*moment.second.acc_Tau3_wta)(jet);
139 float Tau4_wta = (*moment.second.acc_Tau4_wta)(jet);
140
141 float Tau2_wta_ungroomed = -999.0;
142 float Tau3_wta_ungroomed = -999.0;
143 float Tau4_wta_ungroomed = -999.0;
144
145 if( m_doDichroic ) {
146 Tau2_wta_ungroomed = (*moment.second.acc_Tau2_wta_ungroomed)(jet);
147 Tau3_wta_ungroomed = (*moment.second.acc_Tau3_wta_ungroomed)(jet);
148 Tau4_wta_ungroomed = (*moment.second.acc_Tau4_wta_ungroomed)(jet);
149 }
150
151 float Tau21_wta = -999.0;
152 float Tau32_wta = -999.0;
153 float Tau42_wta = -999.0;
154
155 float Tau21_wta_dichroic = -999.0;
156 float Tau32_wta_dichroic = -999.0;
157 float Tau42_wta_dichroic = -999.0;
158
160 if( Tau1_wta > 1e-8 ) {
161
162 Tau21_wta = Tau2_wta / Tau1_wta;
163
164 if( Tau2_wta_ungroomed > 1e-8 ) {
165 Tau21_wta_dichroic = Tau2_wta_ungroomed / Tau1_wta;
166 }
167
168 }
169
171 if( Tau2_wta > 1e-8 ) {
172
173 Tau32_wta = Tau3_wta / Tau2_wta;
174 Tau42_wta = Tau4_wta / Tau2_wta;
175
176 if( Tau3_wta_ungroomed > 1e-8 ) {
177 Tau32_wta_dichroic = Tau3_wta_ungroomed / Tau2_wta;
178 }
179
180 if(Tau4_wta_ungroomed > 1e-8) {
181 Tau42_wta_dichroic = Tau4_wta_ungroomed / Tau2_wta;
182 }
183
184 }
185
186 (*moment.second.dec_Tau21)(jet) = Tau21;
187 (*moment.second.dec_Tau32)(jet) = Tau32;
188 (*moment.second.dec_Tau42)(jet) = Tau42;
189
190 (*moment.second.dec_Tau21_dichroic)(jet) = Tau21_dichroic;
191 (*moment.second.dec_Tau32_dichroic)(jet) = Tau32_dichroic;
192 (*moment.second.dec_Tau42_dichroic)(jet) = Tau42_dichroic;
193
194 (*moment.second.dec_Tau21_wta)(jet) = Tau21_wta;
195 (*moment.second.dec_Tau32_wta)(jet) = Tau32_wta;
196 (*moment.second.dec_Tau42_wta)(jet) = Tau42_wta;
197
198 (*moment.second.dec_Tau21_wta_dichroic)(jet) = Tau21_wta_dichroic;
199 (*moment.second.dec_Tau32_wta_dichroic)(jet) = Tau32_wta_dichroic;
200 (*moment.second.dec_Tau42_wta_dichroic)(jet) = Tau42_wta_dichroic;
201
202 }
203
204 return 0;
205
206}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
JetSubStructureMomentToolsBase(const std::string &name)
StatusCode initialize()
Dummy implementation of the initialisation function.
bool m_doDichroic
Vector of input values before cleaning.
StatusCode initialize()
Dummy implementation of the initialisation function.
std::map< float, moments_t > m_moments
Map of moment accessors and decorators using alpha as the key.
std::vector< float > m_rawAlphaVals
Configurable as properties.
int modifyJet(xAOD::Jet &jet) const
Modify a single jet. This is obsolete and set to be removed.
NSubjettinessRatiosTool(const std::string &name)
Constructor.
Jet_v1 Jet
Definition of the current "jet version".