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 
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 
84 
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 
224  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 }
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
EnergyCorrelatorGeneralizedTool::m_doN3
bool m_doN3
Definition: EnergyCorrelatorGeneralizedTool.h:50
EnergyCorrelatorGeneralizedTool::m_doLSeries
bool m_doLSeries
Definition: EnergyCorrelatorGeneralizedTool.h:51
EnergyCorrelatorGeneralizedTool::moments_t
Definition: EnergyCorrelatorGeneralizedTool.h:88
EnergyCorrelatorGeneralizedTool::m_jetContainerName
Gaudi::Property< std::string > m_jetContainerName
Definition: EnergyCorrelatorGeneralizedTool.h:42
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:53
EnergyCorrelatorGeneralizedTool.h
EnergyCorrelatorGeneralizedTool::EnergyCorrelatorGeneralizedTool
EnergyCorrelatorGeneralizedTool(const std::string &name)
Constructor.
Definition: EnergyCorrelatorGeneralizedTool.cxx:11
defineDB.jets
jets
Definition: JetTagCalibration/share/defineDB.py:24
EnergyCorrelatorGeneralizedTool::m_doM3
bool m_doM3
Definition: EnergyCorrelatorGeneralizedTool.h:49
EnergyCorrelatorGeneralizedTool::m_rawBetaVals
std::vector< float > m_rawBetaVals
Definition: EnergyCorrelatorGeneralizedTool.h:52
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:55
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
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
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:100
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_ECFG_3_2_2_Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_3_2_2_Key
Definition: EnergyCorrelatorGeneralizedTool.h:65
EnergyCorrelatorGeneralizedTool::m_ECFG_3_3_2_Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_3_3_2_Key
Added for MDT studies, might remove later.
Definition: EnergyCorrelatorGeneralizedTool.h:75
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
JetSubStructureUtils::EnergyCorrelatorGeneralized
Definition: EnergyCorrelatorGeneralized.h:14
WriteDecorHandle.h
Handle class for adding a decoration to an object.
EnergyCorrelatorGeneralizedTool::m_moments
std::map< float, moments_t > m_moments
Map of moment decorators using beta as the key.
Definition: EnergyCorrelatorGeneralizedTool.h:56
EnergyCorrelatorGeneralizedTool::m_ECFG_3_2_1_Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_3_2_1_Key
Definition: EnergyCorrelatorGeneralizedTool.h:63
EnergyCorrelatorGeneralizedTool::m_ECFG_3_1_1_Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_3_1_1_Key
Definition: EnergyCorrelatorGeneralizedTool.h:61
EMFourMomBuilder::calculate
void calculate(xAOD::Electron &electron)
Definition: EMFourMomBuilder.cxx:69
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:240
EnergyCorrelatorGeneralizedTool::m_Beta
float m_Beta
Configurable as properties.
Definition: EnergyCorrelatorGeneralizedTool.h:45
EnergyCorrelatorGeneralizedTool::m_ECFG_3_3_1_Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_3_3_1_Key
Definition: EnergyCorrelatorGeneralizedTool.h:67
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
EnergyCorrelatorGeneralizedTool::m_ECFG_4_2_2_Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_4_2_2_Key
Definition: EnergyCorrelatorGeneralizedTool.h:69
EnergyCorrelatorGeneralized.h
SG::WriteDecorHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
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:22
EnergyCorrelatorGeneralizedTool::modify
StatusCode modify(xAOD::JetContainer &jets) const override
Loop over calls to modifyJet.
Definition: EnergyCorrelatorGeneralizedTool.cxx:93
JetSubStructureMomentToolsBase
Definition: JetSubStructureMomentToolsBase.h:18
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
MuonParameters::beta
@ beta
Definition: MuonParamDefs.h:144
EnergyCorrelator.h
EnergyCorrelatorGeneralizedTool::m_ECFG_2_1_2_Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_2_1_2_Key
Decorators for L-series ECFs.
Definition: EnergyCorrelatorGeneralizedTool.h:59
EnergyCorrelatorGeneralizedTool::m_ECFG_4_4_1_Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_ECFG_4_4_1_Key
Definition: EnergyCorrelatorGeneralizedTool.h:71