ATLAS Offline Software
Loading...
Searching...
No Matches
EnergyCorrelatorGeneralizedTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
10
13{
14 declareProperty("Beta", m_Beta = 1.0);
15 declareProperty("BetaList", m_rawBetaVals = {});
16 declareProperty("DoM3", m_doM3 = false);
17 declareProperty("DoN3", m_doN3 = false);
18 declareProperty("DoLSeries", m_doLSeries = false);
19 declareProperty("DoDichroic", m_doDichroic = false);
20}
21
23 if(m_jetContainerName.empty()){
24 ATH_MSG_ERROR("EnergyCorrelatorGeneralizedTool needs to have its input jet container name configured!");
25 return StatusCode::FAILURE;
26 }
27
30
32 m_moments.emplace( 1.0, moments_t(1.0, m_prefix) );
33
35 if( std::abs(m_Beta-1.0) > 1.0e-5 ) {
36
38 ATH_MSG_WARNING( "The Beta property is deprecated, please use the BetaList property to provide a list of values" );
39
42
43 }
44
46 for( float beta : m_rawBetaVals ) {
47
49 float betaFix = round( beta * 10.0 ) / 10.0;
50 if( std::abs(beta-betaFix) > 1.0e-5 ) ATH_MSG_DEBUG( "beta = " << beta << " has been rounded to " << betaFix );
51
53 if( betaFix < 0.0 ) {
54 ATH_MSG_WARNING( "beta must be positive. Skipping beta = " << beta );
55 continue;
56 }
57
59 m_moments.emplace( betaFix, moments_t(betaFix, m_prefix) );
60
61 }
62
64 for( auto const& moment : m_moments ) {
65 ATH_MSG_DEBUG( "Including beta = " << moment.first );
66 }
67
76
77 ATH_CHECK(m_ECFG_2_1_2_Key.initialize());
78 ATH_CHECK(m_ECFG_3_1_1_Key.initialize());
79 ATH_CHECK(m_ECFG_3_2_1_Key.initialize());
80 ATH_CHECK(m_ECFG_3_2_2_Key.initialize());
81 ATH_CHECK(m_ECFG_3_3_1_Key.initialize());
82 ATH_CHECK(m_ECFG_4_2_2_Key.initialize());
83 ATH_CHECK(m_ECFG_4_4_1_Key.initialize());
84
87 ATH_CHECK(m_ECFG_3_3_2_Key.initialize());
88
89 return StatusCode::SUCCESS;
90
91}
92
94
103
104 for(const xAOD::Jet* injet : jets){
105
106 fastjet::PseudoJet jet;
107 fastjet::PseudoJet jet_ungroomed;
108
110 bool calculate = SetupDecoration(jet,*injet);
111
113 bool calculate_ungroomed = false;
114
115 if( m_doDichroic ) {
116
118 static const SG::ConstAccessor<ElementLink<xAOD::JetContainer> > ParentAcc ("Parent");
119 ElementLink<xAOD::JetContainer> parentLink = ParentAcc (*injet);
120
122 if( !parentLink.isValid() ) {
123 ATH_MSG_ERROR( "Parent element link is not valid. Aborting" );
124 return StatusCode::FAILURE;
125 }
126
127 const xAOD::Jet* parentJet = *(parentLink);
128 calculate_ungroomed = SetupDecoration(jet_ungroomed,*parentJet);
129
130 }
131
133 for( auto const& moment : m_moments ) {
134
135 float beta = moment.first;
136
139
141 float ECFG_2_1_value = -999.0;
142 float ECFG_3_2_value = -999.0;
143
145 float ECFG_2_1_ungroomed_value = -999.0;
146 float ECFG_3_1_ungroomed_value = -999.0;
147 float ECFG_3_2_ungroomed_value = -999.0;
148
150 float ECFG_3_1_value = -999.0;
151 float ECFG_4_1_value = -999.0;
152 float ECFG_4_2_value = -999.0;
153
154 if( calculate ) {
155
157 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_2_1(1, 2, beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
158 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_1(1, 3, beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
159 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_2(2, 3, beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
160
161 ECFG_2_1_value = ECFG_2_1.result(jet);
162 ECFG_3_1_value = ECFG_3_1.result(jet);
163 ECFG_3_2_value = ECFG_3_2.result(jet);
164
166 if( calculate_ungroomed ) {
167 ECFG_2_1_ungroomed_value = ECFG_2_1.result(jet_ungroomed);
168 ECFG_3_1_ungroomed_value = ECFG_3_1.result(jet_ungroomed);
169 ECFG_3_2_ungroomed_value = ECFG_3_2.result(jet_ungroomed);
170 }
171
173 if( m_doM3 ) {
174 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_4_1(1, 4, beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
175 ECFG_4_1_value = ECFG_4_1.result(jet);
176 }
177
179 if( m_doN3 ) {
180 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_4_2(2, 4, beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
181 ECFG_4_2_value = ECFG_4_2.result(jet);
182 }
183
184 }
185
186 (*moment.second.dec_ECFG_2_1)(*injet) = ECFG_2_1_value;
187 (*moment.second.dec_ECFG_3_1)(*injet) = ECFG_3_1_value;
188 (*moment.second.dec_ECFG_3_2)(*injet) = ECFG_3_2_value;
189 (*moment.second.dec_ECFG_4_1)(*injet) = ECFG_4_1_value;
190 (*moment.second.dec_ECFG_4_2)(*injet) = ECFG_4_2_value;
191
192 (*moment.second.dec_ECFG_2_1_ungroomed)(*injet) = ECFG_2_1_ungroomed_value;
193 (*moment.second.dec_ECFG_3_1_ungroomed)(*injet) = ECFG_3_1_ungroomed_value;
194 (*moment.second.dec_ECFG_3_2_ungroomed)(*injet) = ECFG_3_2_ungroomed_value;
195
196 }
197
199 float ECFG_2_1_2_value = -999;
200 float ECFG_3_1_1_value = -999;
201 float ECFG_3_2_1_value = -999;
202 float ECFG_3_2_2_value = -999;
203 float ECFG_3_3_1_value = -999;
204 float ECFG_4_2_2_value = -999;
205 float ECFG_4_4_1_value = -999;
206
208 float ECFG_3_3_2_value = -999;
209
211
212 if( calculate && m_doLSeries ) {
213
223
225 if( m_moments.count(2.0) ) {
226 ECFG_2_1_2_value = (*m_moments.at(2.0).dec_ECFG_2_1)(*injet);
227 }
228 else {
229 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_2_1_2(1, 2, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
230 ECFG_2_1_2_value = ECFG_2_1_2.result(jet);
231 }
232
234 if( m_doN3 ) {
235 ECFG_3_1_1_value = (*m_moments.at(1.0).dec_ECFG_3_1)(*injet);
236 }
237 else {
238 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_1_1(1, 3, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
239 ECFG_3_1_1_value = ECFG_3_1_1.result(jet);
240 }
241
243 ECFG_3_2_1_value = (*m_moments.at(1.0).dec_ECFG_3_2)(*injet);
244
246 if( m_moments.count(2.0) ) {
247 ECFG_3_2_2_value = (*m_moments.at(2.0).dec_ECFG_3_2)(*injet);
248 }
249 else {
250 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_2_2(2, 3, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
251 ECFG_3_2_2_value = ECFG_3_2_2.result(jet);
252 }
253
255 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_3_1(3, 3, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
256 ECFG_3_3_1_value = ECFG_3_3_1.result(jet);
257
259 if( m_doN3 && m_moments.count(2.0) ) {
260 ECFG_4_2_2_value = (*m_moments.at(2.0).dec_ECFG_4_2)(*injet);
261 }
262 else {
263 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_4_2_2(2, 4, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
264 ECFG_4_2_2_value = ECFG_4_2_2.result(jet);
265 }
266
268 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_4_4_1(4, 4, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
269 ECFG_4_4_1_value = ECFG_4_4_1.result(jet);
270
273 JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_3_2(3, 3, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
274 ECFG_3_3_2_value = ECFG_3_3_2.result(jet);
275
276 }
277
278 wdh_ECFG_2_1_2(*injet) = ECFG_2_1_2_value;
279 wdh_ECFG_3_1_1(*injet) = ECFG_3_1_1_value;
280 wdh_ECFG_3_2_1(*injet) = ECFG_3_2_1_value;
281 wdh_ECFG_3_2_2(*injet) = ECFG_3_2_2_value;
282 wdh_ECFG_3_3_1(*injet) = ECFG_3_3_1_value;
283 wdh_ECFG_4_2_2(*injet) = ECFG_4_2_2_value;
284 wdh_ECFG_4_4_1(*injet) = ECFG_4_4_1_value;
285
287 wdh_ECFG_3_3_2(*injet) = ECFG_3_3_2_value;
288
289 }
290
291 return StatusCode::SUCCESS;
292}
#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)
Handle class for adding a decoration to an object.
Helper class to provide constant type-safe access to aux data.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_4_4_1_Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_3_3_2_Key
Added for MDT studies, might remove later.
float m_Beta
Configurable as properties.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_2_1_2_Key
Decorators for L-series ECFs.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_3_2_2_Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_4_2_2_Key
std::map< float, moments_t > m_moments
Map of moment decorators using beta as the key.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_3_3_1_Key
Gaudi::Property< std::string > m_jetContainerName
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_3_1_1_Key
StatusCode modify(xAOD::JetContainer &jets) const override
Loop over calls to modifyJet.
bool m_doDichroic
Vector of input values before cleaning.
EnergyCorrelatorGeneralizedTool(const std::string &name)
Constructor.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_3_2_1_Key
JetSubStructureMomentToolsBase(const std::string &name)
bool SetupDecoration(fastjet::PseudoJet &pseudojet, const xAOD::Jet &jet, bool requireJetStructure=false) const
StatusCode initialize()
Dummy implementation of the initialisation function.
virtual double result(const fastjet::PseudoJet &jet) const
Helper class to provide constant type-safe access to aux data.
Handle class for adding a decoration to an object.
Jet_v1 Jet
Definition of the current "jet version".
JetContainer_v1 JetContainer
Definition of the current "jet container version".