ATLAS Offline Software
Loading...
Searching...
No Matches
PanTau::Tool_DetailsArranger Class Reference

Tool for PID of Tau Seeds. More...

#include <Tool_DetailsArranger.h>

Inheritance diagram for PanTau::Tool_DetailsArranger:
Collaboration diagram for PanTau::Tool_DetailsArranger:

Public Types

enum  PanTauDetailsType { t_Int , t_Float , t_NTypes }

Public Member Functions

 Tool_DetailsArranger (const std::string &name)
virtual ~Tool_DetailsArranger ()
virtual StatusCode initialize ()
 Dummy implementation of the initialisation function.
virtual StatusCode execute (PanTau::PanTauSeed *inSeed, xAOD::ParticleContainer &pi0Container, xAOD::PFOContainer &neutralPFOContainer) const
bool isInitialized ()
virtual void print () const
 Print the state of the tool.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
Additional helper functions, not directly mimicking Athena
template<class T>
const T * getProperty (const std::string &name) const
 Get one of the tool's properties.
const std::string & msg_level_name () const __attribute__((deprecated))
 A deprecated function for getting the message level's name.
const std::string & getName (const void *ptr) const
 Get the name of an object that is / should be in the event store.
SG::sgkey_t getKey (const void *ptr) const
 Get the (hashed) key of an object that is in the event store.

Protected Member Functions

void addPanTauDetailToTauJet (PanTauSeed *inSeed, const std::string &featName, xAOD::TauJetParameters::PanTauDetails detailEnum, PanTauDetailsType detailType) const
StatusCode arrangePFOLinks (PanTau::PanTauSeed *inSeed, xAOD::TauJet *tauJet, xAOD::ParticleContainer &pi0Container, xAOD::PFOContainer &neutralPFOContainer) const
bool HasMultPi0sInOneCluster (const xAOD::PFO *pfo, int decayModeProto) const
std::vector< ElementLink< xAOD::PFOContainer > > CollectConstituentsAsPFOLinks (PanTau::PanTauSeed *inSeed, const std::vector< ElementLink< xAOD::PFOContainer > > &cellbased_neutralPFOLinks, PanTau::TauConstituent::Type type) const
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Static Protected Member Functions

static void SetHLVTau (PanTau::PanTauSeed *inSeed, xAOD::TauJet *tauJet, const std::string &varTypeName_Basic)
static void SetNeutralConstituentMass (xAOD::PFO *neutral_pfo, double mass)
static void SetNeutralConstituentVectorMasses (const std::vector< ElementLink< xAOD::PFOContainer > > &neutralPFOLinks, xAOD::PFOContainer &neutralPFOContainer, double mass)
static void createPi0Vectors (xAOD::TauJet *tauJet, std::vector< TLorentzVector > &vPi0s, std::vector< std::vector< ElementLink< xAOD::PFOContainer > > > &vec_pi0pfos)

Protected Attributes

ToolHandle< PanTau::ITool_InformationStorem_Tool_InformationStore {this, "Tool_InformationStore", "PanTau::Tool_InformationStore/Tool_InformationStore", "Tool handle to the information store tool"}
Gaudi::Property< std::string > m_Tool_InformationStoreName {this, "Tool_InformationStoreName", "", "Tool handle to the information store tool"}
std::string m_varTypeName_Basic
bool m_init =false

Static Protected Attributes

static const constexpr float MASS_PI0 = ParticleConstants::piZeroMassInMeV

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Tool for PID of Tau Seeds.

Author
Sebastian Fleischmann
Christian Limbach limba.nosp@m.ch@p.nosp@m.hysik.nosp@m..uni.nosp@m.-bonn.nosp@m..de

Definition at line 39 of file Tool_DetailsArranger.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ PanTauDetailsType

Constructor & Destructor Documentation

◆ Tool_DetailsArranger()

PanTau::Tool_DetailsArranger::Tool_DetailsArranger ( const std::string & name)

Definition at line 16 of file Tool_DetailsArranger.cxx.

16 :
17 asg::AsgTool(name)
18{}

◆ ~Tool_DetailsArranger()

PanTau::Tool_DetailsArranger::~Tool_DetailsArranger ( )
virtualdefault

Member Function Documentation

◆ addPanTauDetailToTauJet()

void PanTau::Tool_DetailsArranger::addPanTauDetailToTauJet ( PanTauSeed * inSeed,
const std::string & featName,
xAOD::TauJetParameters::PanTauDetails detailEnum,
PanTauDetailsType detailType ) const
protected

Definition at line 91 of file Tool_DetailsArranger.cxx.

94 {
95
96 bool isValid;
97 const PanTau::TauFeature* features = inSeed->getFeatures();
98 std::string fullFeatName = "CellBased_" + featName;
99
100 double theValue = features->value(fullFeatName, isValid);
101 if (!isValid) {
102 bool noAnyConstituents = inSeed->isOfTechnicalQuality(PanTau::PanTauSeed::t_NoConstituentsAtAll);
103 bool noSelConstituents = inSeed->isOfTechnicalQuality(PanTau::PanTauSeed::t_NoSelectedConstituents);
104 bool noValidInputTau = inSeed->isOfTechnicalQuality(PanTau::PanTauSeed::t_NoValidInputTau);
105 bool isBadSeed = (noAnyConstituents || noSelConstituents || noValidInputTau);
106
107 if (!isBadSeed) {
108 ATH_MSG_DEBUG("WARNING --- Problems getting value for feature " << fullFeatName << " from map! This should not happen for this seed!");
109 ATH_MSG_DEBUG("WARNING --- Did the ModeDiscriminator set features used in BDTs that were not found to their default values?");
110 ATH_MSG_DEBUG("NOTE --- This can also happen for seeds with (for example) 0 neutrals when trying to get Neutral_SumM - check seed");
111 }
112 theValue = -1111.;
113 }
114
115 xAOD::TauJet* tauJet = inSeed->getTauJet();
116 int valueToAddInt = -1;
117 float valueToAddFloat = -1.1;
118
119 switch(detailType) {
121 valueToAddInt = static_cast<int>(theValue);
122 tauJet->setPanTauDetail(detailEnum, valueToAddInt);
123 break;
125 valueToAddFloat = static_cast<float>(theValue);
126 tauJet->setPanTauDetail(detailEnum, valueToAddFloat);
127 break;
128 default:
129 ATH_MSG_WARNING("Unknown PanTauDetailType! Please use enum PanTauDetailsType from PanTauAlgs/Tool_DetailsArranger.h.");
130 ATH_MSG_WARNING("!NOT! adding detail named " << featName);
131 break;
132 }
133
134 }
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition AtlasPID.h:878
double value(const std::string &name, bool &isValid) const
returns the value of the feature given by its name
void setPanTauDetail(TauJetParameters::PanTauDetails panTauDetail, int value)
TauJet_v3 TauJet
Definition of the current "tau version".

◆ arrangePFOLinks()

StatusCode PanTau::Tool_DetailsArranger::arrangePFOLinks ( PanTau::PanTauSeed * inSeed,
xAOD::TauJet * tauJet,
xAOD::ParticleContainer & pi0Container,
xAOD::PFOContainer & neutralPFOContainer ) const
protected

Definition at line 137 of file Tool_DetailsArranger.cxx.

137 {
138
139 //get the PFO links
140 std::vector< ElementLink< xAOD::PFOContainer > > chrgPFOLinks = tauJet->protoChargedPFOLinks();
141 std::vector< ElementLink< xAOD::PFOContainer > > neutralPFOLinks = tauJet->protoNeutralPFOLinks();
142 std::vector< ElementLink< xAOD::PFOContainer > > pi0PFOLinks = CollectConstituentsAsPFOLinks( inSeed, tauJet->protoNeutralPFOLinks(), PanTau::TauConstituent::t_Pi0Neut );
143 std::vector< ElementLink< xAOD::PFOContainer > > preSelected_neutralPFOLinks = CollectConstituentsAsPFOLinks( inSeed, tauJet->protoNeutralPFOLinks(), PanTau::TauConstituent::t_Neutral );
144
145 //clear the default links, just to be safe
146 tauJet->clearChargedPFOLinks();
147 tauJet->clearNeutralPFOLinks();
148 tauJet->clearPi0PFOLinks();
149
150 std::vector< ElementLink< xAOD::PFOContainer > > preLinkPi0PFOLinks = tauJet->pi0PFOLinks();
151
152 // sort PFO links according to pi0 BDT score:
153 std::sort (pi0PFOLinks.begin(), pi0PFOLinks.end(), sortBDTscore);
154 std::sort (preSelected_neutralPFOLinks.begin(), preSelected_neutralPFOLinks.end(), sortBDTscore);
155 std::sort (neutralPFOLinks.begin(), neutralPFOLinks.end(), sortBDTscore);
156
157 // set the masses of all neutrals *and pi0 neutrals* to 0:
158 SetNeutralConstituentVectorMasses(neutralPFOLinks, neutralPFOContainer, 0.);
159
160 // arrange charged & neutral PFOs: they are not changed -> copy from cellbased
161 tauJet->setChargedPFOLinks(chrgPFOLinks);
162 tauJet->setNeutralPFOLinks(neutralPFOLinks);
163
164 tauJet->setDetail(xAOD::TauJetParameters::nCharged, static_cast<int>(chrgPFOLinks.size()));
165
166 //arrange pi0 pfos: depends on decay mode classification
167 int decayModeProto = inSeed->getDecayModeBySubAlg();
168 int decayModeFinal = inSeed->getDecayModeByPanTau();
169
170 if(decayModeFinal == xAOD::TauJetParameters::Mode_Other) {
171 tauJet->setPi0PFOLinks(pi0PFOLinks);
172 SetHLVTau(inSeed, tauJet, m_varTypeName_Basic);
173
174 return StatusCode::SUCCESS;
175 }
176
177 //if pantau sets the same decay mode as the substructure algorithm, just copy the links
178 if(decayModeProto == decayModeFinal) {
179
180 if( decayModeFinal == xAOD::TauJetParameters::Mode_3pXn && pi0PFOLinks.size() > 1 ){
181
182 // assign all neutrals but only one pi0 neutral to Pantau:
183 preLinkPi0PFOLinks.push_back( pi0PFOLinks.at(0) );
184
185 // set all masses correctly:
186 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
187
188 } else {
189
190 // assign the same constituents to Pantau:
191 preLinkPi0PFOLinks=pi0PFOLinks;
192
193 // set all masses correctly:
194 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
195 }
196
197 } else {
198
199 if( decayModeFinal == xAOD::TauJetParameters::Mode_1p1n && decayModeProto == xAOD::TauJetParameters::Mode_1p0n ){
200
201 // add the highest BDT-score neutral from the sub-alg:
202 if(!preSelected_neutralPFOLinks.empty()) preLinkPi0PFOLinks.push_back( preSelected_neutralPFOLinks.at(0) );
203 else ATH_MSG_WARNING("No neutral PFO Links although there should be!!");
204
205 // set the mass:
206 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
207
208 } else if( decayModeFinal == xAOD::TauJetParameters::Mode_1p0n && decayModeProto == xAOD::TauJetParameters::Mode_1p1n ){
209
210 // do nothing (leave the pi0 neutrals list empty)
211
212 } else if( decayModeFinal == xAOD::TauJetParameters::Mode_1pXn && decayModeProto == xAOD::TauJetParameters::Mode_1p1n ){
213
214
215 if( pi0PFOLinks.size() == 1 && HasMultPi0sInOneCluster(pi0PFOLinks.at(0).cachedElement(), decayModeProto) ){
216
217 // assign twice the pi0 mass to the one pi0 PFO:
218 SetNeutralConstituentVectorMasses(pi0PFOLinks, neutralPFOContainer, 2*MASS_PI0);
219
220 // assign the same constituents to Pantau:
221 preLinkPi0PFOLinks=pi0PFOLinks;
222
223 } else {
224
225 // copy all (really only one) pi0s from the sub-alg and add
226 // the highest BDT-score neutral:
227 preLinkPi0PFOLinks=pi0PFOLinks;
228 if(!preSelected_neutralPFOLinks.empty()) preLinkPi0PFOLinks.push_back( preSelected_neutralPFOLinks.at(0) );
229 else ATH_MSG_WARNING("No neutral PFO Links although there should be!!");
230
231 // set the mass:
232 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
233 }
234
235 } else if( decayModeFinal == xAOD::TauJetParameters::Mode_1p1n && decayModeProto == xAOD::TauJetParameters::Mode_1pXn ){
236
237 // copy all (two) pi0s from the sub-alg:
238 preLinkPi0PFOLinks.push_back( pi0PFOLinks.at(0) );
239 preLinkPi0PFOLinks.push_back( pi0PFOLinks.at(1) );
240
241 // set both pi0neutrals to mass 0 (photon mass):
242 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, 0.);
243
244 } else if( decayModeFinal == xAOD::TauJetParameters::Mode_3pXn && decayModeProto == xAOD::TauJetParameters::Mode_3p0n ){
245
246 // add the highest BDT-score neutral from the sub-alg:
247 if(!preSelected_neutralPFOLinks.empty()) preLinkPi0PFOLinks.push_back( preSelected_neutralPFOLinks.at(0) );
248 else ATH_MSG_WARNING("No neutral PFO Links although there should be!!");
249
250 // set the mass:
251 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
252
253 } else if( decayModeFinal == xAOD::TauJetParameters::Mode_3p0n && decayModeProto == xAOD::TauJetParameters::Mode_3pXn ){
254
255 // do nothing (leave the pi0 neutrals list empty)
256 }
257 }
258
259 tauJet->setPi0PFOLinks(preLinkPi0PFOLinks);
260
261 SetHLVTau(inSeed, tauJet, m_varTypeName_Basic);
262
263 std::vector< ElementLink< xAOD::PFOContainer > > finalChrgPFOLinks = tauJet->chargedPFOLinks();
264 std::vector< ElementLink< xAOD::PFOContainer > > finalPi0PFOLinks = tauJet->pi0PFOLinks();
265 std::vector< ElementLink< xAOD::PFOContainer > > finalNeutralPFOLinks = tauJet->neutralPFOLinks();
266
267 // vector of 4-vectors of actual pi0s and a vector with pointers to PFOs:
268 std::vector< TLorentzVector > vec_pi04vec;
269 std::vector< std::vector< ElementLink<xAOD::PFOContainer> > > vec_pi0pfos;
270 createPi0Vectors(tauJet, vec_pi04vec, vec_pi0pfos);
271
272 for(unsigned int itlv=0; itlv!=vec_pi04vec.size(); ++itlv) {
274 pi0Container.push_back(p);
275 p->setPxPyPzE(vec_pi04vec.at(itlv).Px(), vec_pi04vec.at(itlv).Py(), vec_pi04vec.at(itlv).Pz(), vec_pi04vec.at(itlv).E());
276 std::vector< ElementLink< xAOD::PFOContainer > > pfo_link_vector;
277 for( uint ipfo = 0; ipfo != vec_pi0pfos.at(itlv).size(); ++ipfo) {
278 pfo_link_vector.push_back(vec_pi0pfos.at(itlv).at(ipfo));
279 }
280
281 static const SG::Accessor<std::vector< ElementLink< xAOD::PFOContainer > > > accPi0PFOLinks("pi0PFOLinks");
282 accPi0PFOLinks(*p) = pfo_link_vector;
283
284 ElementLink< xAOD::IParticleContainer > linkToPi0;
285 linkToPi0.toContainedElement(pi0Container, dynamic_cast<xAOD::IParticle*> (p));
286
287 tauJet->addPi0Link(linkToPi0);
288 }
289
290 return StatusCode::SUCCESS;
291}
unsigned int uint
bool sortBDTscore(const ElementLink< xAOD::PFOContainer > &i, const ElementLink< xAOD::PFOContainer > &j)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
int getDecayModeByPanTau() const
Definition PanTauSeed.h:225
int getDecayModeBySubAlg() const
Definition PanTauSeed.h:224
static void SetHLVTau(PanTau::PanTauSeed *inSeed, xAOD::TauJet *tauJet, const std::string &varTypeName_Basic)
static void createPi0Vectors(xAOD::TauJet *tauJet, std::vector< TLorentzVector > &vPi0s, std::vector< std::vector< ElementLink< xAOD::PFOContainer > > > &vec_pi0pfos)
bool HasMultPi0sInOneCluster(const xAOD::PFO *pfo, int decayModeProto) const
static const constexpr float MASS_PI0
std::vector< ElementLink< xAOD::PFOContainer > > CollectConstituentsAsPFOLinks(PanTau::PanTauSeed *inSeed, const std::vector< ElementLink< xAOD::PFOContainer > > &cellbased_neutralPFOLinks, PanTau::TauConstituent::Type type) const
static void SetNeutralConstituentVectorMasses(const std::vector< ElementLink< xAOD::PFOContainer > > &neutralPFOLinks, xAOD::PFOContainer &neutralPFOContainer, double mass)
void setPi0PFOLinks(const PFOLinks_t &pi0PFOs)
void clearPi0PFOLinks()
Remove all pi0 PFOs from the tau.
const PFOLinks_t & pi0PFOLinks() const
const PFOLinks_t & protoChargedPFOLinks() const
cellbased pfos
void clearChargedPFOLinks()
Remove all charged PFOs from the tau.
void addPi0Link(const ElementLink< IParticleContainer > &tr)
add a pi0 link to the tau
void setDetail(TauJetParameters::Detail detail, int value)
void clearNeutralPFOLinks()
Remove all neutral PFOs from the tau.
void setNeutralPFOLinks(const PFOLinks_t &neutralPFOs)
const PFOLinks_t & neutralPFOLinks() const
const PFOLinks_t & chargedPFOLinks() const
default pfos
void setChargedPFOLinks(const PFOLinks_t &chargedPFOs)
const PFOLinks_t & protoNeutralPFOLinks() const
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
Particle_v1 Particle
Define the latest version of the particle class.

◆ CollectConstituentsAsPFOLinks()

std::vector< ElementLink< xAOD::PFOContainer > > PanTau::Tool_DetailsArranger::CollectConstituentsAsPFOLinks ( PanTau::PanTauSeed * inSeed,
const std::vector< ElementLink< xAOD::PFOContainer > > & cellbased_neutralPFOLinks,
PanTau::TauConstituent::Type type ) const
protected

Definition at line 361 of file Tool_DetailsArranger.cxx.

363 {
364 // collect element links from tau constituents in the Pantau
365 // seed of type "type". cellbased_neutralPFOLinks is only used
366 // to obtain the ElementLinks.
367
368 std::vector< ElementLink< xAOD::PFOContainer > > new_links;
369
370 unsigned int nConstsOfType=0;
371 bool foundIt=false;
372 std::vector<PanTau::TauConstituent*> tauConstituents=inSeed->getConstituentsOfType(type,foundIt);
373
374 if( (type != PanTau::TauConstituent::t_Neutral && type != PanTau::TauConstituent::t_Pi0Neut) || !foundIt){
375 ATH_MSG_WARNING("CollectConstituentsAsPFOLinks: Function was called with type = " << type << " , however it was only designed for types t_Pi0Neut and t_Neutral! Returning...");
376 return new_links;
377 }
378
379 for(unsigned int iConst=0; iConst<tauConstituents.size(); iConst++) {
380 bool isOfType = tauConstituents[iConst]->isOfType(type);
381 if(!isOfType) continue;
382
383 // if the requested type is t_Neutral then exclude any t_Pi0Neut
384 // from the list (note: tau constituents that are t_Pi0Neut are
385 // also t_Neutral at the same time):
386 if(type==PanTau::TauConstituent::t_Neutral && tauConstituents[iConst]->isOfType(PanTau::TauConstituent::t_Pi0Neut) ) continue;
387 ++nConstsOfType;
388
389 for(unsigned int iPFO=0; iPFO<cellbased_neutralPFOLinks.size(); iPFO++) {
390 const xAOD::PFO* pfo = cellbased_neutralPFOLinks.at(iPFO).cachedElement();
391
392 if( tauConstituents[iConst]->getPFO() != pfo ) continue;
393
394 new_links.push_back( cellbased_neutralPFOLinks.at(iPFO) );
395 }
396 }
397
398 if( nConstsOfType != new_links.size() ){
399 ATH_MSG_WARNING("CollectConstituentsAsPFOLinks: Couldn't find PFOLinks " << new_links.size() << " for all tau constituents (" << tauConstituents.size() << ")!");
400 }
401
402 return new_links;
403}
std::vector< PanTau::TauConstituent * > getConstituentsOfType(int tauConstituent_Type, bool &foundit)
PFO_v1 PFO
Definition of the current "pfo version".
Definition PFO.h:17

◆ createPi0Vectors()

void PanTau::Tool_DetailsArranger::createPi0Vectors ( xAOD::TauJet * tauJet,
std::vector< TLorentzVector > & vPi0s,
std::vector< std::vector< ElementLink< xAOD::PFOContainer > > > & vec_pi0pfos )
staticprotected

Definition at line 407 of file Tool_DetailsArranger.cxx.

408{
409 // reset the pi0s
410 vPi0s.clear();
411 vec_pi0pfos.clear();
412
413 // Since the PFO links as they come out of reconstruction, only correspond to
414 // calorimeter clusters, whereas we want the consts_pi0 vectors to correspond
415 // to real pi0s, we need to be careful to collect the PFOs correctly to pi0s
416 // for the cases where number of pi0s does not match to the decay mode:
417 size_t iNumPi0PFO = tauJet->nPi0PFOs();
418
419 int iDecayMode = -1;
421
422 if (iDecayMode == xAOD::TauJetParameters::Mode_1p1n && iNumPi0PFO > 1) {
423
424 // float fMassPi0 = ParticleConstants::piZeroMassInMeV;
425 float fMassPi0Squared = MASS_PI0*MASS_PI0;
426
427 // combine both photons (with 0 mass that is already set) to one pi0 vector:
428 const xAOD::PFO* xPfo1 = tauJet->pi0PFO(0);
429 const xAOD::PFO* xPfo2 = tauJet->pi0PFO(1);
430 vPi0s.push_back(xPfo1->p4() + xPfo2->p4());
431
432 // re-set the mass to one pi0:
433 double dNewMomentum = std::sqrt(vPi0s[0].E() * vPi0s[0].E() - fMassPi0Squared);
434 vPi0s[0].SetPxPyPzE(vPi0s[0].Vect().Unit().Px() * dNewMomentum,
435 vPi0s[0].Vect().Unit().Py() * dNewMomentum,
436 vPi0s[0].Vect().Unit().Pz() * dNewMomentum,
437 vPi0s[0].E());
438
439 std::vector< ElementLink<xAOD::PFOContainer> > pfovec;
440 pfovec.push_back(tauJet->pi0PFOLinks()[0]);
441 pfovec.push_back(tauJet->pi0PFOLinks()[1]);
442 vec_pi0pfos.push_back( pfovec );
443
444 } else if (iDecayMode == xAOD::TauJetParameters::DecayMode::Mode_1pXn && iNumPi0PFO == 1){
445
446 // make a single pi0 from a PFO that contains two pi0s:
447 const xAOD::PFO* xPfo = tauJet->pi0PFO(0);
448 // add the 2-pi0 vector preliminarily to the pi0vector:
449 vPi0s.push_back(xPfo->p4());
450
451 // re-set the mass back to one pi0:
452 double dNewMomentum = std::sqrt( (vPi0s[0].E()/2.)*(vPi0s[0].E()/2.) - MASS_PI0*MASS_PI0 );
453 vPi0s[0].SetVectM(vPi0s[0].Vect().Unit() * dNewMomentum, MASS_PI0 );
454
455 // create another pi0 from the same vector:
456 vPi0s.push_back(vPi0s[0]);
457
458 std::vector< ElementLink<xAOD::PFOContainer> > pfovec;
459 pfovec.push_back(tauJet->pi0PFOLinks()[0]);
460 vec_pi0pfos.push_back( pfovec );
461 vec_pi0pfos.push_back( pfovec );//fix rare crash?
462
463 } else {
464 // if it's not any of the special cases above then just collect the PFOs:
465 for (size_t iPFO = 0; iPFO < iNumPi0PFO; iPFO++){
466 vPi0s.push_back(tauJet->pi0PFO(iPFO)->p4());
467 std::vector< ElementLink<xAOD::PFOContainer> > pfovec;
468 pfovec.push_back(tauJet->pi0PFOLinks()[iPFO]);
469 vec_pi0pfos.push_back( pfovec );
470 }
471 }
472
473}
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition PFO_v1.cxx:95
const PFO * pi0PFO(size_t i) const
Get the pointer to a given pi0 PFO associated with this tau.
size_t nPi0PFOs() const
Get the number of pi0 PFO particles associated with this tau.
bool panTauDetail(TauJetParameters::PanTauDetails panTauDetail, int &value) const
Get and set values of pantau details variables via enum.

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode PanTau::Tool_DetailsArranger::execute ( PanTau::PanTauSeed * inSeed,
xAOD::ParticleContainer & pi0Container,
xAOD::PFOContainer & neutralPFOContainer ) const
virtual

Implements PanTau::ITool_DetailsArranger.

Definition at line 33 of file Tool_DetailsArranger.cxx.

33 {
34
37 bool noValidInputTau = inSeed->isOfTechnicalQuality(PanTau::PanTauSeed::t_NoValidInputTau);
38 bool isBadSeed = (noAnyConstituents || noSelConstituents || noValidInputTau);
39
40 //set the PFO link vector and pantau 4-vector to default values for every tau first (xAOD technicality)
41 //if the tau is valid, overwrite with non-default values
42 xAOD::TauJet* tauJet = inSeed->getTauJet();
43
44 if (isBadSeed) {
45 ATH_MSG_DEBUG("This seed is not useable for detail arranging (other than validity flag)");
48 return StatusCode::SUCCESS;
49 }
50
51 ATH_CHECK(arrangePFOLinks(inSeed, tauJet, pi0Container, neutralPFOContainer));
52
53 //Basic variables
59
60 //Final 4-vector
61 tauJet->setP4(xAOD::TauJetParameters::PanTauCellBased, inSeed->getFinalMomentum().Pt(), inSeed->getFinalMomentum().Eta(), inSeed->getFinalMomentum().Phi(), inSeed->getFinalMomentum().M());
62
63 //BDT variables
64 addPanTauDetailToTauJet(inSeed, "Basic_NNeutralConsts",
66 addPanTauDetailToTauJet(inSeed, "Charged_JetMoment_EtDRxTotalEt",
68 addPanTauDetailToTauJet(inSeed, "Charged_StdDev_Et_WrtEtAllConsts",
70 addPanTauDetailToTauJet(inSeed, "Neutral_HLV_SumM",
72 addPanTauDetailToTauJet(inSeed, "Neutral_PID_BDTValues_BDTSort_1",
74 addPanTauDetailToTauJet(inSeed, "Neutral_PID_BDTValues_BDTSort_2",
76 addPanTauDetailToTauJet(inSeed, "Neutral_Ratio_1stBDTEtOverEtAllConsts",
78 addPanTauDetailToTauJet(inSeed, "Neutral_Ratio_EtOverEtAllConsts",
80 addPanTauDetailToTauJet(inSeed, "Neutral_Shots_NPhotonsInSeed",
82 addPanTauDetailToTauJet(inSeed, "Combined_DeltaR1stNeutralTo1stCharged",
84 addPanTauDetailToTauJet(inSeed, "Charged_HLV_SumM",
86
87 return StatusCode::SUCCESS;
88}
#define ATH_CHECK
Evaluate an expression and check for errors.
bool isOfTechnicalQuality(int pantauSeed_TechnicalQuality) const
const xAOD::TauJet * getTauJet() const
Definition PanTauSeed.h:215
TLorentzVector getFinalMomentum() const
Definition PanTauSeed.h:223
StatusCode arrangePFOLinks(PanTau::PanTauSeed *inSeed, xAOD::TauJet *tauJet, xAOD::ParticleContainer &pi0Container, xAOD::PFOContainer &neutralPFOContainer) const
void addPanTauDetailToTauJet(PanTauSeed *inSeed, const std::string &featName, xAOD::TauJetParameters::PanTauDetails detailEnum, PanTauDetailsType detailType) const
void setP4(double pt, double eta, double phi, double m)
Set methods for IParticle values.
@ PanTau_BDTVar_Neutral_PID_BDTValues_BDTSort_2
Definition TauDefs.h:371
@ PanTau_BDTVar_Charged_JetMoment_EtDRxTotalEt
Definition TauDefs.h:367
@ PanTau_BDTVar_Neutral_Ratio_1stBDTEtOverEtAllConsts
Definition TauDefs.h:372
@ PanTau_BDTVar_Neutral_PID_BDTValues_BDTSort_1
Definition TauDefs.h:370
@ PanTau_BDTVar_Combined_DeltaR1stNeutralTo1stCharged
Definition TauDefs.h:375
@ PanTau_BDTVar_Neutral_Ratio_EtOverEtAllConsts
Definition TauDefs.h:373
@ PanTau_BDTVar_Charged_StdDev_Et_WrtEtAllConsts
Definition TauDefs.h:368
@ PanTau_BDTVar_Neutral_Shots_NPhotonsInSeed
Definition TauDefs.h:374

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ getKey()

SG::sgkey_t asg::AsgTool::getKey ( const void * ptr) const
inherited

Get the (hashed) key of an object that is in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::TEvent both provide ways for getting the SG::sgkey_t key for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getName
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The hashed key of the object in the store. If not found, an invalid (zero) key.

Definition at line 119 of file AsgTool.cxx.

119 {
120
121#ifdef XAOD_STANDALONE
122 // In case we use @c xAOD::TEvent, we have a direct function call
123 // for this.
124 return evtStore()->event()->getKey( ptr );
125#else
126 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
127 return ( proxy == nullptr ? 0 : proxy->sgkey() );
128#endif // XAOD_STANDALONE
129 }
ServiceHandle< StoreGateSvc > & evtStore()

◆ getName()

const std::string & asg::AsgTool::getName ( const void * ptr) const
inherited

Get the name of an object that is / should be in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::TEvent both provide ways for getting the std::string name for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getKey
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The string name of the object in the store. If not found, an empty string.

Definition at line 106 of file AsgTool.cxx.

106 {
107
108#ifdef XAOD_STANDALONE
109 // In case we use @c xAOD::TEvent, we have a direct function call
110 // for this.
111 return evtStore()->event()->getName( ptr );
112#else
113 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
114 static const std::string dummy = "";
115 return ( proxy == nullptr ? dummy : proxy->name() );
116#endif // XAOD_STANDALONE
117 }

◆ getProperty()

template<class T>
const T * asg::AsgTool::getProperty ( const std::string & name) const
inherited

Get one of the tool's properties.

◆ HasMultPi0sInOneCluster()

bool PanTau::Tool_DetailsArranger::HasMultPi0sInOneCluster ( const xAOD::PFO * pfo,
int decayModeProto ) const
protected

Definition at line 323 of file Tool_DetailsArranger.cxx.

323 {
324
325 // this is only relevant for reco 1p1n modes, hence restrict the output to these modes
326
327 int nPi0sPerCluster = 1;
328
329 // cell-based sets this to 1pXn however below this function is
330 // called with the decayModeProto as evaluated by Pantau!
331 if (decayModeProto != xAOD::TauJetParameters::Mode_1p1n ) return (nPi0sPerCluster > 1);
332
333 if( !pfo->attribute(xAOD::PFODetails::nPi0Proto, nPi0sPerCluster) ) {
334 ATH_MSG_WARNING("Could not retrieve nPi0Proto. Will set it to 1.");
335 nPi0sPerCluster = 1;
336 }
337
338 return (nPi0sPerCluster > 1);
339}
bool attribute(PFODetails::PFOAttributes AttributeType, T &anAttribute) const
get a PFO Variable via enum

◆ initialize()

StatusCode PanTau::Tool_DetailsArranger::initialize ( void )
virtual

Dummy implementation of the initialisation function.

It's here to allow the dual-use tools to skip defining an initialisation function. Since many are doing so...

Reimplemented from asg::AsgTool.

Definition at line 22 of file Tool_DetailsArranger.cxx.

22 {
23
24 m_init=true;
25
27 ATH_CHECK( m_Tool_InformationStore->getInfo_String("FeatureExtractor_VarTypeName_varTypeName_Basic", m_varTypeName_Basic) );
28
29 return StatusCode::SUCCESS;
30}
static StatusCode bindToolHandle(ToolHandle< T > &, std::string)
Gaudi::Property< std::string > m_Tool_InformationStoreName
ToolHandle< PanTau::ITool_InformationStore > m_Tool_InformationStore

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isInitialized()

bool PanTau::Tool_DetailsArranger::isInitialized ( )
inlinevirtual

Implements PanTau::ITool_DetailsArranger.

Definition at line 91 of file Tool_DetailsArranger.h.

91{return m_init;}

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msg_level_name()

const std::string & asg::AsgTool::msg_level_name ( ) const
inherited

A deprecated function for getting the message level's name.

Instead of using this, weirdly named function, user code should get the string name of the current minimum message level (in case they really need it...), with:

MSG::name( msg().level() )

This function's name doesn't follow the ATLAS coding rules, and as such will be removed in the not too distant future.

Returns
The string name of the current minimum message level that's printed

Definition at line 101 of file AsgTool.cxx.

101 {
102
103 return MSG::name( msg().level() );
104 }
MsgStream & msg() const
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
Definition MsgLevel.cxx:19

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ print()

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ SetHLVTau()

void PanTau::Tool_DetailsArranger::SetHLVTau ( PanTau::PanTauSeed * inSeed,
xAOD::TauJet * tauJet,
const std::string & varTypeName_Basic )
staticprotected

Definition at line 295 of file Tool_DetailsArranger.cxx.

295 {
296
297 std::vector< ElementLink< xAOD::PFOContainer > > finalChrgPFOLinks = tauJet->chargedPFOLinks();
298 std::vector< ElementLink< xAOD::PFOContainer > > finalPi0PFOLinks = tauJet->pi0PFOLinks();
299
300 unsigned int NCharged = finalChrgPFOLinks.size();
301 unsigned int NPi0Neut = finalPi0PFOLinks.size();
302
303 TLorentzVector tlv_PanTau_Final;
304 for(unsigned int iPFO=0; iPFO<NCharged; iPFO++) {
305 const xAOD::PFO* pfo = finalChrgPFOLinks.at(iPFO).cachedElement();
306 tlv_PanTau_Final += pfo->p4();
307 }
308 for(unsigned int iPFO=0; iPFO<NPi0Neut; iPFO++) {
309 const xAOD::PFO* pfo = finalPi0PFOLinks.at(iPFO).cachedElement();
310 tlv_PanTau_Final += pfo->p4();
311 }
312
313 inSeed->setFinalMomentum(tlv_PanTau_Final);
314
315 PanTau::TauFeature* featureMap = inSeed->getFeatures();
316 featureMap->addFeature("CellBased_" + varTypeName_Basic + "_FinalMomentumCore_pt", tlv_PanTau_Final.Pt() );
317 featureMap->addFeature("CellBased_" + varTypeName_Basic + "_FinalMomentumCore_eta", tlv_PanTau_Final.Eta() );
318 featureMap->addFeature("CellBased_" + varTypeName_Basic + "_FinalMomentumCore_phi", tlv_PanTau_Final.Phi() );
319 featureMap->addFeature("CellBased_" + varTypeName_Basic + "_FinalMomentumCore_m", tlv_PanTau_Final.M() );
320}
void setFinalMomentum(TLorentzVector finalMom)
Definition PanTauSeed.h:229
const PanTau::TauFeature * getFeatures() const
Definition PanTauSeed.h:217
bool addFeature(const std::string &name, const double value)
adds a new feature

◆ SetNeutralConstituentMass()

void PanTau::Tool_DetailsArranger::SetNeutralConstituentMass ( xAOD::PFO * neutral_pfo,
double mass )
staticprotected

Definition at line 342 of file Tool_DetailsArranger.cxx.

342 {
343
344 TLorentzVector momentum;
345 PanTau::SetP4EEtaPhiM( momentum, neutral_pfo->e(), neutral_pfo->eta(), neutral_pfo->phi(), mass);
346 neutral_pfo->setP4(momentum.Pt(), neutral_pfo->eta(), neutral_pfo->phi(), mass);
347}
void setP4(const FourMom_t &vec)
set the 4-vec
Definition PFO_v1.cxx:107
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition PFO_v1.cxx:60
virtual double e() const
The total energy of the particle.
Definition PFO_v1.cxx:81
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition PFO_v1.cxx:67
static void SetP4EEtaPhiM(TLorentzVector &hlv, double e, double eta, double phi, double m)
Definition PanTauSeed.h:233

◆ SetNeutralConstituentVectorMasses()

void PanTau::Tool_DetailsArranger::SetNeutralConstituentVectorMasses ( const std::vector< ElementLink< xAOD::PFOContainer > > & neutralPFOLinks,
xAOD::PFOContainer & neutralPFOContainer,
double mass )
staticprotected

Definition at line 350 of file Tool_DetailsArranger.cxx.

350 {
351
352 for (const auto& link : neutralPFOLinks) {
353 size_t index = link.index();
354 xAOD::PFO* curNeutralPFO = neutralPFOContainer.at(index);
355 SetNeutralConstituentMass(curNeutralPFO, mass);
356 }
357
358 }
const T * at(size_type n) const
Access an element, as an rvalue.
static void SetNeutralConstituentMass(xAOD::PFO *neutral_pfo, double mass)
str index
Definition DeMoScan.py:362

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_init

bool PanTau::Tool_DetailsArranger::m_init =false
protected

Definition at line 89 of file Tool_DetailsArranger.h.

◆ m_Tool_InformationStore

ToolHandle<PanTau::ITool_InformationStore> PanTau::Tool_DetailsArranger::m_Tool_InformationStore {this, "Tool_InformationStore", "PanTau::Tool_InformationStore/Tool_InformationStore", "Tool handle to the information store tool"}
protected

Definition at line 60 of file Tool_DetailsArranger.h.

60{this, "Tool_InformationStore", "PanTau::Tool_InformationStore/Tool_InformationStore", "Tool handle to the information store tool"};

◆ m_Tool_InformationStoreName

Gaudi::Property<std::string> PanTau::Tool_DetailsArranger::m_Tool_InformationStoreName {this, "Tool_InformationStoreName", "", "Tool handle to the information store tool"}
protected

Definition at line 62 of file Tool_DetailsArranger.h.

62{this, "Tool_InformationStoreName", "", "Tool handle to the information store tool"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_varTypeName_Basic

std::string PanTau::Tool_DetailsArranger::m_varTypeName_Basic
protected

Definition at line 87 of file Tool_DetailsArranger.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ MASS_PI0

const constexpr float PanTau::Tool_DetailsArranger::MASS_PI0 = ParticleConstants::piZeroMassInMeV
staticconstexprprotected

Definition at line 85 of file Tool_DetailsArranger.h.


The documentation for this class was generated from the following files: