ATLAS Offline Software
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 }
hotSpotInTAG.suffix
string suffix
Definition: hotSpotInTAG.py:186
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
NSubjettinessRatiosTool::m_doDichroic
bool m_doDichroic
Vector of input values before cleaning.
Definition: NSubjettinessRatiosTool.h:45
NSubjettinessRatiosTool::modifyJet
int modifyJet(xAOD::Jet &jet) const
Modify a single jet. This is obsolete and set to be removed.
Definition: NSubjettinessRatiosTool.cxx:48
NSubjettinessRatiosTool::m_rawAlphaVals
std::vector< float > m_rawAlphaVals
Configurable as properties.
Definition: NSubjettinessRatiosTool.h:41
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
NSubjettinessRatiosTool::m_moments
std::map< float, moments_t > m_moments
Map of moment accessors and decorators using alpha as the key.
Definition: NSubjettinessRatiosTool.h:48
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
NSubjettinessRatiosTool::moments_t
Definition: NSubjettinessRatiosTool.h:60
JetSubStructureMomentToolsBase::initialize
StatusCode initialize()
Dummy implementation of the initialisation function.
Definition: JetSubStructureMomentToolsBase.cxx:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
NSubjettinessRatiosTool::NSubjettinessRatiosTool
NSubjettinessRatiosTool(const std::string &name)
Constructor.
Definition: NSubjettinessRatiosTool.cxx:7
JetSubStructureMomentToolsBase::m_prefix
std::string m_prefix
Definition: JetSubStructureMomentToolsBase.h:30
NSubjettinessRatiosTool.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
NSubjettinessRatiosTool::initialize
StatusCode initialize()
Dummy implementation of the initialisation function.
Definition: NSubjettinessRatiosTool.cxx:14
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
jet::CompScaleVar::Tau32
@ Tau32
Definition: UncertaintyEnum.h:102
JetSubStructureMomentToolsBase
Definition: JetSubStructureMomentToolsBase.h:18
jet::CompScaleVar::Tau21
@ Tau21
Definition: UncertaintyEnum.h:101