ATLAS Offline Software
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 
9 
12 {
13  declareProperty("Beta", m_Beta = 1.0);
14  declareProperty("BetaList", m_rawBetaVals = {});
15  declareProperty("DoM3", m_doM3 = false);
16  declareProperty("DoN3", m_doN3 = false);
17  declareProperty("DoLSeries", m_doLSeries = false);
18  declareProperty("DoDichroic", m_doDichroic = false);
19 }
20 
22 
25 
27  m_moments.emplace( 1.0, moments_t(1.0, m_prefix) );
28 
30  if( std::abs(m_Beta-1.0) > 1.0e-5 ) {
31 
33  ATH_MSG_WARNING( "The Beta property is deprecated, please use the BetaList property to provide a list of values" );
34 
37 
38  }
39 
41  for( float beta : m_rawBetaVals ) {
42 
44  float betaFix = round( beta * 10.0 ) / 10.0;
45  if( std::abs(beta-betaFix) > 1.0e-5 ) ATH_MSG_DEBUG( "beta = " << beta << " has been rounded to " << betaFix );
46 
48  if( betaFix < 0.0 ) {
49  ATH_MSG_WARNING( "beta must be positive. Skipping beta = " << beta );
50  continue;
51  }
52 
54  m_moments.emplace( betaFix, moments_t(betaFix, m_prefix) );
55 
56  }
57 
59  for( auto const& moment : m_moments ) {
60  ATH_MSG_DEBUG( "Including beta = " << moment.first );
61  }
62 
64  m_dec_ECFG_2_1_2 = std::make_unique< SG::AuxElement::Decorator<float> >(m_prefix+"ECFG_2_1_2");
65  m_dec_ECFG_3_1_1 = std::make_unique< SG::AuxElement::Decorator<float> >(m_prefix+"ECFG_3_1_1");
66  m_dec_ECFG_3_2_1 = std::make_unique< SG::AuxElement::Decorator<float> >(m_prefix+"ECFG_3_2_1");
67  m_dec_ECFG_3_2_2 = std::make_unique< SG::AuxElement::Decorator<float> >(m_prefix+"ECFG_3_2_2");
68  m_dec_ECFG_3_3_1 = std::make_unique< SG::AuxElement::Decorator<float> >(m_prefix+"ECFG_3_3_1");
69  m_dec_ECFG_4_2_2 = std::make_unique< SG::AuxElement::Decorator<float> >(m_prefix+"ECFG_4_2_2");
70  m_dec_ECFG_4_4_1 = std::make_unique< SG::AuxElement::Decorator<float> >(m_prefix+"ECFG_4_4_1");
71 
73  m_dec_ECFG_3_3_2 = std::make_unique< SG::AuxElement::Decorator<float> >(m_prefix+"ECFG_3_3_2");
74 
75  return StatusCode::SUCCESS;
76 
77 }
78 
80 
81  fastjet::PseudoJet jet;
82  fastjet::PseudoJet jet_ungroomed;
83 
85  bool calculate = SetupDecoration(jet,injet);
86 
88  bool calculate_ungroomed = false;
89 
90  if( m_doDichroic ) {
91 
93  static const SG::ConstAccessor<ElementLink<xAOD::JetContainer> > ParentAcc ("Parent");
94  ElementLink<xAOD::JetContainer> parentLink = ParentAcc (injet);
95 
97  if( !parentLink.isValid() ) {
98  ATH_MSG_ERROR( "Parent element link is not valid. Aborting" );
99  return 1;
100  }
101 
102  const xAOD::Jet* parentJet = *(parentLink);
103  calculate_ungroomed = SetupDecoration(jet_ungroomed,*parentJet);
104 
105  }
106 
108  for( auto const& moment : m_moments ) {
109 
110  float beta = moment.first;
111 
114 
116  float ECFG_2_1_value = -999.0;
117  float ECFG_3_2_value = -999.0;
118 
120  float ECFG_2_1_ungroomed_value = -999.0;
121  float ECFG_3_1_ungroomed_value = -999.0;
122  float ECFG_3_2_ungroomed_value = -999.0;
123 
125  float ECFG_3_1_value = -999.0;
126  float ECFG_4_1_value = -999.0;
127  float ECFG_4_2_value = -999.0;
128 
129  if( calculate ) {
130 
132  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_2_1(1, 2, beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
133  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_1(1, 3, beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
134  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_2(2, 3, beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
135 
136  ECFG_2_1_value = ECFG_2_1.result(jet);
137  ECFG_3_1_value = ECFG_3_1.result(jet);
138  ECFG_3_2_value = ECFG_3_2.result(jet);
139 
141  if( calculate_ungroomed ) {
142  ECFG_2_1_ungroomed_value = ECFG_2_1.result(jet_ungroomed);
143  ECFG_3_1_ungroomed_value = ECFG_3_1.result(jet_ungroomed);
144  ECFG_3_2_ungroomed_value = ECFG_3_2.result(jet_ungroomed);
145  }
146 
148  if( m_doM3 ) {
149  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_4_1(1, 4, beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
150  ECFG_4_1_value = ECFG_4_1.result(jet);
151  }
152 
154  if( m_doN3 ) {
155  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_4_2(2, 4, beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
156  ECFG_4_2_value = ECFG_4_2.result(jet);
157  }
158 
159  }
160 
161  (*moment.second.dec_ECFG_2_1)(injet) = ECFG_2_1_value;
162  (*moment.second.dec_ECFG_3_1)(injet) = ECFG_3_1_value;
163  (*moment.second.dec_ECFG_3_2)(injet) = ECFG_3_2_value;
164  (*moment.second.dec_ECFG_4_1)(injet) = ECFG_4_1_value;
165  (*moment.second.dec_ECFG_4_2)(injet) = ECFG_4_2_value;
166 
167  (*moment.second.dec_ECFG_2_1_ungroomed)(injet) = ECFG_2_1_ungroomed_value;
168  (*moment.second.dec_ECFG_3_1_ungroomed)(injet) = ECFG_3_1_ungroomed_value;
169  (*moment.second.dec_ECFG_3_2_ungroomed)(injet) = ECFG_3_2_ungroomed_value;
170 
171  }
172 
174  float ECFG_2_1_2_value = -999;
175  float ECFG_3_1_1_value = -999;
176  float ECFG_3_2_1_value = -999;
177  float ECFG_3_2_2_value = -999;
178  float ECFG_3_3_1_value = -999;
179  float ECFG_4_2_2_value = -999;
180  float ECFG_4_4_1_value = -999;
181 
183  float ECFG_3_3_2_value = -999;
184 
186 
187  if( calculate && m_doLSeries ) {
188 
199  if( m_moments.count(2.0) ) {
201  ECFG_2_1_2_value = (*m_moments.at(2.0).dec_ECFG_2_1)(injet);
202  }
203  else {
204  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_2_1_2(1, 2, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
205  ECFG_2_1_2_value = ECFG_2_1_2.result(jet);
206  }
207 
209  if( m_doN3 ) {
210  ECFG_3_1_1_value = (*m_moments.at(1.0).dec_ECFG_3_1)(injet);
211  }
212  else {
213  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_1_1(1, 3, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
214  ECFG_3_1_1_value = ECFG_3_1_1.result(jet);
215  }
216 
218  ECFG_3_2_1_value = (*m_moments.at(1.0).dec_ECFG_3_2)(injet);
219 
221  if( m_moments.count(2.0) ) {
222  ECFG_3_2_2_value = (*m_moments.at(2.0).dec_ECFG_3_2)(injet);
223  }
224  else {
225  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_2_2(2, 3, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
226  ECFG_3_2_2_value = ECFG_3_2_2.result(jet);
227  }
228 
230  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_3_1(3, 3, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
231  ECFG_3_3_1_value = ECFG_3_3_1.result(jet);
232 
234  if( m_doN3 && m_moments.count(2.0) ) {
235  ECFG_4_2_2_value = (*m_moments.at(2.0).dec_ECFG_4_2)(injet);
236  }
237  else {
238  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_4_2_2(2, 4, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
239  ECFG_4_2_2_value = ECFG_4_2_2.result(jet);
240  }
241 
243  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_4_4_1(4, 4, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
244  ECFG_4_4_1_value = ECFG_4_4_1.result(jet);
245 
248  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_3_2(3, 3, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
249  ECFG_3_3_2_value = ECFG_3_3_2.result(jet);
250 
251  }
252 
253  (*m_dec_ECFG_2_1_2)(injet) = ECFG_2_1_2_value;
254  (*m_dec_ECFG_3_1_1)(injet) = ECFG_3_1_1_value;
255  (*m_dec_ECFG_3_2_1)(injet) = ECFG_3_2_1_value;
256  (*m_dec_ECFG_3_2_2)(injet) = ECFG_3_2_2_value;
257  (*m_dec_ECFG_3_3_1)(injet) = ECFG_3_3_1_value;
258  (*m_dec_ECFG_4_2_2)(injet) = ECFG_4_2_2_value;
259  (*m_dec_ECFG_4_4_1)(injet) = ECFG_4_4_1_value;
260 
262  (*m_dec_ECFG_3_3_2)(injet) = ECFG_3_3_2_value;
263 
264  return 0;
265 
266 }
EnergyCorrelatorGeneralizedTool::m_doN3
bool m_doN3
Definition: EnergyCorrelatorGeneralizedTool.h:46
EnergyCorrelatorGeneralizedTool::m_doLSeries
bool m_doLSeries
Definition: EnergyCorrelatorGeneralizedTool.h:47
EnergyCorrelatorGeneralizedTool::moments_t
Definition: EnergyCorrelatorGeneralizedTool.h:76
EnergyCorrelatorGeneralizedTool::m_dec_ECFG_3_1_1
std::unique_ptr< SG::AuxElement::Decorator< float > > m_dec_ECFG_3_1_1
Definition: EnergyCorrelatorGeneralizedTool.h:56
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
MuonGM::round
float round(const float toRound, const unsigned int decimals)
Definition: Mdt.cxx:27
EnergyCorrelatorGeneralizedTool::m_doDichroic
bool m_doDichroic
Vector of input values before cleaning.
Definition: EnergyCorrelatorGeneralizedTool.h:49
EnergyCorrelatorGeneralizedTool.h
EnergyCorrelatorGeneralizedTool::EnergyCorrelatorGeneralizedTool
EnergyCorrelatorGeneralizedTool(const std::string &name)
Constructor.
Definition: EnergyCorrelatorGeneralizedTool.cxx:10
EnergyCorrelatorGeneralizedTool::m_doM3
bool m_doM3
Definition: EnergyCorrelatorGeneralizedTool.h:45
EnergyCorrelatorGeneralizedTool::m_rawBetaVals
std::vector< float > m_rawBetaVals
Definition: EnergyCorrelatorGeneralizedTool.h:48
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
EnergyCorrelatorGeneralizedTool::m_dec_ECFG_4_2_2
std::unique_ptr< SG::AuxElement::Decorator< float > > m_dec_ECFG_4_2_2
Definition: EnergyCorrelatorGeneralizedTool.h:60
EnergyCorrelatorGeneralizedTool::m_dec_ECFG_3_2_2
std::unique_ptr< SG::AuxElement::Decorator< float > > m_dec_ECFG_3_2_2
Definition: EnergyCorrelatorGeneralizedTool.h:58
EnergyCorrelatorGeneralizedTool::m_dec_ECFG_3_3_1
std::unique_ptr< SG::AuxElement::Decorator< float > > m_dec_ECFG_3_3_1
Definition: EnergyCorrelatorGeneralizedTool.h:59
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
EnergyCorrelatorGeneralizedTool::m_dec_ECFG_3_2_1
std::unique_ptr< SG::AuxElement::Decorator< float > > m_dec_ECFG_3_2_1
Definition: EnergyCorrelatorGeneralizedTool.h:57
JetSubStructureUtils::EnergyCorrelatorGeneralized::result
virtual double result(const fastjet::PseudoJet &jet) const
Definition: EnergyCorrelatorGeneralized.h:20
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
JetSubStructureMomentToolsBase::initialize
StatusCode initialize()
Dummy implementation of the initialisation function.
Definition: JetSubStructureMomentToolsBase.cxx:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
EnergyCorrelatorGeneralizedTool::m_dec_ECFG_3_3_2
std::unique_ptr< SG::AuxElement::Decorator< float > > m_dec_ECFG_3_3_2
Added for MDT studies, might remove later.
Definition: EnergyCorrelatorGeneralizedTool.h:64
JetSubStructureUtils::EnergyCorrelatorGeneralized
Definition: EnergyCorrelatorGeneralized.h:14
EnergyCorrelatorGeneralizedTool::m_moments
std::map< float, moments_t > m_moments
Map of moment decorators using beta as the key.
Definition: EnergyCorrelatorGeneralizedTool.h:52
EMFourMomBuilder::calculate
void calculate(xAOD::Electron &electron)
Definition: EMFourMomBuilder.cxx:68
JetSubStructureMomentToolsBase::m_prefix
std::string m_prefix
Definition: JetSubStructureMomentToolsBase.h:30
JetSubStructureMomentToolsBase::SetupDecoration
bool SetupDecoration(fastjet::PseudoJet &pseudojet, const xAOD::Jet &jet, bool requireJetStructure=false) const
Definition: JetSubStructureMomentToolsBase.cxx:30
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
EnergyCorrelatorGeneralizedTool::modifyJet
int modifyJet(xAOD::Jet &injet) const override
Modify a single jet. This is obsolete and set to be removed.
Definition: EnergyCorrelatorGeneralizedTool.cxx:79
EnergyCorrelatorGeneralizedTool::m_Beta
float m_Beta
Configurable as properties.
Definition: EnergyCorrelatorGeneralizedTool.h:41
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
EnergyCorrelatorGeneralized.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
EnergyCorrelatorGeneralizedTool::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: EnergyCorrelatorGeneralizedTool.cxx:21
JetSubStructureMomentToolsBase
Definition: JetSubStructureMomentToolsBase.h:18
EnergyCorrelatorGeneralizedTool::m_dec_ECFG_2_1_2
std::unique_ptr< SG::AuxElement::Decorator< float > > m_dec_ECFG_2_1_2
Decorators for L-series ECFs.
Definition: EnergyCorrelatorGeneralizedTool.h:55
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
MuonParameters::beta
@ beta
Definition: MuonParamDefs.h:144
EnergyCorrelatorGeneralizedTool::m_dec_ECFG_4_4_1
std::unique_ptr< SG::AuxElement::Decorator< float > > m_dec_ECFG_4_4_1
Definition: EnergyCorrelatorGeneralizedTool.h:61
EnergyCorrelator.h