ATLAS Offline Software
PanTauProcessor.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 
11 #include "xAODTau/TauJet.h"
14 
15 #include <string>
16 
17 
20 {
21 }
22 
23 
25 
26 
28 
29  ATH_MSG_INFO(name() << " initialize()");
30 
31  // retrieve StoreGate Service and the tools
32  ATH_CHECK( HelperFunctions::bindToolHandle( m_Tool_InformationStore, m_Tool_InformationStoreName ) );
33  ATH_CHECK( HelperFunctions::bindToolHandle( m_Tool_TauConstituentGetter, m_Tool_TauConstituentGetterName ) );
34  ATH_CHECK( HelperFunctions::bindToolHandle( m_Tool_TauConstituentSelector, m_Tool_TauConstituentSelectorName ) );
35  ATH_CHECK( HelperFunctions::bindToolHandle( m_Tool_FeatureExtractor, m_Tool_FeatureExtractorName ) );
36  ATH_CHECK( HelperFunctions::bindToolHandle( m_Tool_DecayModeDeterminator, m_Tool_DecayModeDeterminatorName ) );
37  ATH_CHECK( HelperFunctions::bindToolHandle( m_Tool_DetailsArranger, m_Tool_DetailsArrangerName ) );
38 
39  // retrieve StoreGate Service and the tools
40  ATH_CHECK( m_Tool_InformationStore.retrieve() );
41  ATH_CHECK( m_Tool_TauConstituentGetter.retrieve() );
42  ATH_CHECK( m_Tool_TauConstituentSelector.retrieve() );
43  ATH_CHECK( m_Tool_FeatureExtractor.retrieve() );
44  ATH_CHECK( m_Tool_DecayModeDeterminator.retrieve() );
45  ATH_CHECK( m_Tool_DetailsArranger.retrieve() );
46 
47  ATH_CHECK( m_Tool_InformationStore->getInfo_VecDouble("ModeDiscriminator_BinEdges_Pt", m_Config_PtBins) );
48  m_Config_MinPt = m_Config_PtBins.front();
49  m_Config_MaxPt = m_Config_PtBins.back();
50 
51  return StatusCode::SUCCESS;
52 }
53 
54 
56  return StatusCode::SUCCESS;
57 }
58 
59 
61 
62  //get the current TauJet
63  xAOD::TauJet* curTauJet = &pTau;
64 
65  //check for null pointer
66  if(curTauJet == nullptr) {
67  ATH_MSG_WARNING("Pointer to xAOD::TauJet is 0!");
68  return StatusCode::FAILURE;
69  }
70 
71  fillDefaultValuesToTau(curTauJet);
72 
73  //keep track of the technical quality of the pantau seed to be created
74  std::vector<int> pantauSeed_TechnicalQuality = std::vector<int>((unsigned int)PanTau::PanTauSeed::t_nTechnicalQualities, 0);
75 
76  //Only process taus with 1 <= ntracks <= 5:
77  int numTrack = curTauJet->nTracks();
78  if(numTrack == 0 || numTrack > 5) {
79  ATH_MSG_DEBUG("Flagging tau for algorithm CellBased as invalid, because numTrack is " << numTrack);
80  pantauSeed_TechnicalQuality.at(static_cast<int>(PanTau::PanTauSeed::t_NoValidInputTau)) = 1;
81  }
82 
83  // if there is substructure info available, get constituents, perform selection and recombination
84  //these vectors will be owned by the PanTauSeed object.
85  std::vector<TauConstituent*> list_TauConstituents = std::vector<TauConstituent*>(0);
86  std::vector<TauConstituent*> list_SelectedTauConstituents = std::vector<TauConstituent*>(0);
87 
88  if(pantauSeed_TechnicalQuality.at(static_cast<int>(PanTau::PanTauSeed::t_NoValidInputTau)) == 0) {
89  // Get the constituents for the current tau
90  ATH_CHECK( m_Tool_TauConstituentGetter->GetTauConstituents(curTauJet, list_TauConstituents) );
91  if(list_TauConstituents.empty()) {
92  pantauSeed_TechnicalQuality.at(static_cast<int>(PanTau::PanTauSeed::t_NoConstituentsAtAll)) = 1;
93  ATH_MSG_DEBUG("Seed has no associated constituents!");
94  }
95 
96  // Call the TauConstituentSelector tool to throw out bad constituents
97  ATH_CHECK(m_Tool_TauConstituentSelector->SelectTauConstituents(list_TauConstituents, list_SelectedTauConstituents) );
98  if(list_SelectedTauConstituents.empty()) {
99  pantauSeed_TechnicalQuality.at(static_cast<int>(PanTau::PanTauSeed::t_NoSelectedConstituents)) = 1;
100  ATH_MSG_DEBUG("Seed has no associated constituents that pass selection!");
101  }
102 
103  //check if there are core objects in the selected constituents
104  bool hasCoreConstituents = false;
105  for(unsigned int iConst=0; iConst<list_SelectedTauConstituents.size(); iConst++) {
106  PanTau::TauConstituent* curConst = list_SelectedTauConstituents.at(iConst);
107  if(curConst->isOfType(PanTau::TauConstituent::t_Charged)) {hasCoreConstituents = true; break;};
108  if(curConst->isOfType(PanTau::TauConstituent::t_Neutral)) {hasCoreConstituents = true; break;};
109  if(curConst->isOfType(PanTau::TauConstituent::t_Pi0Neut)) {hasCoreConstituents = true; break;};
110  }
111 
112  if(!hasCoreConstituents) {
113  pantauSeed_TechnicalQuality.at(static_cast<int>(PanTau::PanTauSeed::t_NoSelectedConstituents)) = 1; //use this flag at the moment as a quick hack
114  }
115  }
116 
117  //to be consistent, taus without substructure algs run on them also have no constituents
118  if(pantauSeed_TechnicalQuality.at(static_cast<int>(PanTau::PanTauSeed::t_NoValidInputTau)) == 1) {
119  pantauSeed_TechnicalQuality.at(static_cast<int>(PanTau::PanTauSeed::t_NoConstituentsAtAll)) = 1;
120  pantauSeed_TechnicalQuality.at(static_cast<int>(PanTau::PanTauSeed::t_NoSelectedConstituents)) = 1;
121  }
122 
123  //check for the pT flag
124  double tauJet_pT = curTauJet->ptIntermediateAxis();
125  if(tauJet_pT < m_Config_MinPt || tauJet_pT > m_Config_MaxPt) {
126  pantauSeed_TechnicalQuality.at(static_cast<int>(PanTau::PanTauSeed::t_BadPtValue)) = 1;
127  }
128 
129  // Now build the PanTauSeed with the new Constituents
130  PanTau::PanTauSeed* curPanTauSeed = new PanTau::PanTauSeed(curTauJet,
131  list_SelectedTauConstituents,
132  list_TauConstituents,
133  pantauSeed_TechnicalQuality);
134 
135  curPanTauSeed->makePrivateStore();
136 
137  // Get the features for this PanTauSeed
138  ATH_CHECK(m_Tool_FeatureExtractor->execute(curPanTauSeed) );
139 
140  // Seed finalizing:
141  // 1. Pass the seed to the decay mode determination tool
142  // 2. Pass the seed to the DetailsArranger tool to calculate the four momentum and add the details to tauJet
143 
144  // 1. call decay mode determinator for this seed
145  ATH_CHECK( m_Tool_DecayModeDeterminator->execute(curPanTauSeed) );
146 
147  // 2. calculate the four momentum and link the details to the tauJet
148  ATH_CHECK( m_Tool_DetailsArranger->execute(curPanTauSeed, pi0Container, neutralPFOContainer) );
149 
150  delete curPanTauSeed;
151  return StatusCode::SUCCESS;
152 }
153 
154 
156  //default four momentum set to previous calibration state: TauEnergyScale
157  TLorentzVector defaultP4 = tauJet->p4(xAOD::TauJetParameters::TauEnergyScale);
158  tauJet->setP4(xAOD::TauJetParameters::PanTauCellBased, defaultP4.Pt(), defaultP4.Eta(), defaultP4.Phi(), defaultP4.M());
159 
160  //charged
161  std::vector< ElementLink< xAOD::PFOContainer > > chrgPFOLinks = tauJet->protoChargedPFOLinks();
162  tauJet->setChargedPFOLinks(chrgPFOLinks);
163 
164  //pi0
165  std::vector< ElementLink< xAOD::PFOContainer > > pi0PFOLinks = tauJet->protoPi0PFOLinks();
166  tauJet->setPi0PFOLinks(pi0PFOLinks);
167 
168  //neutrals
169  std::vector< ElementLink< xAOD::PFOContainer > > neutralPFOLinks = tauJet->protoNeutralPFOLinks();
170  tauJet->setNeutralPFOLinks(neutralPFOLinks);
171 }
PanTauSeed.h
PanTau::TauConstituent::t_Neutral
@ t_Neutral
Definition: TauConstituent.h:45
PanTau::PanTauProcessor::finalize
virtual StatusCode finalize()
Finalizer.
Definition: PanTauProcessor.cxx:55
PanTauProcessor.h
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
PanTau::PanTauProcessor::~PanTauProcessor
~PanTauProcessor()
PanTau::TauConstituent::t_Charged
@ t_Charged
Definition: TauConstituent.h:44
PanTau::PanTauProcessor::PanTauProcessor
PanTauProcessor(const std::string &name)
Definition: PanTauProcessor.cxx:18
PanTau::PanTauSeed::t_NoValidInputTau
@ t_NoValidInputTau
Definition: PanTauSeed.h:34
HelperFunctions.h
xAOD::TauJet_v3::nTracks
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Definition: TauJet_v3.cxx:488
TauRecToolBase
The base class for all tau tools.
Definition: TauRecToolBase.h:21
xAOD::TauJet_v3::setNeutralPFOLinks
void setNeutralPFOLinks(const PFOLinks_t &neutralPFOs)
TauConstituent.h
xAOD::TauJet_v3::setP4
void setP4(double pt, double eta, double phi, double m)
Set methods for IParticle values.
Definition: TauJet_v3.cxx:171
PanTau::PanTauProcessor::executePanTau
virtual StatusCode executePanTau(xAOD::TauJet &pTau, xAOD::ParticleContainer &pi0Container, xAOD::PFOContainer &neutralPFOContainer) const
Definition: PanTauProcessor.cxx:60
xAOD::TauJet_v3::protoNeutralPFOLinks
const PFOLinks_t & protoNeutralPFOLinks() const
PanTau::PanTauSeed::t_nTechnicalQualities
@ t_nTechnicalQualities
Definition: PanTauSeed.h:39
ParticleContainer.h
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
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
PanTau::PanTauProcessor::initialize
virtual StatusCode initialize()
Tool initializer.
Definition: PanTauProcessor.cxx:27
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::TauJetParameters::PanTauCellBased
@ PanTauCellBased
Definition: TauDefs.h:344
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
xAOD::TauJetParameters::TauEnergyScale
@ TauEnergyScale
Definition: TauDefs.h:339
xAOD::TauJet_v3::protoPi0PFOLinks
const PFOLinks_t & protoPi0PFOLinks() const
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
PanTau::PanTauSeed::t_BadPtValue
@ t_BadPtValue
Definition: PanTauSeed.h:37
PanTau::HelperFunctions::bindToolHandle
static StatusCode bindToolHandle(ToolHandle< T > &, std::string)
Definition: Reconstruction/PanTau/PanTauAlgs/PanTauAlgs/HelperFunctions.h:56
Particle.h
PanTau::PanTauSeed::t_NoConstituentsAtAll
@ t_NoConstituentsAtAll
Definition: PanTauSeed.h:35
PanTau::TauConstituent::isOfType
bool isOfType(TauConstituent::Type aType) const
Definition: TauConstituent.cxx:213
SG::AuxElement::makePrivateStore
void makePrivateStore()
Create a new (empty) private store for this object.
Definition: AuxElement.cxx:192
xAOD::TauJet_v3::setChargedPFOLinks
void setChargedPFOLinks(const PFOLinks_t &chargedPFOs)
PanTau::TauConstituent::t_Pi0Neut
@ t_Pi0Neut
Definition: TauConstituent.h:46
PanTau::PanTauProcessor::fillDefaultValuesToTau
static void fillDefaultValuesToTau(xAOD::TauJet *tauJet)
Definition: PanTauProcessor.cxx:155
xAOD::TauJet_v3::setPi0PFOLinks
void setPi0PFOLinks(const PFOLinks_t &pi0PFOs)
Tool_InformationStore.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::TauJet_v3::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: TauJet_v3.cxx:96
TauJet.h
PanTau::PanTauSeed::t_NoSelectedConstituents
@ t_NoSelectedConstituents
Definition: PanTauSeed.h:36
xAOD::TauJet_v3::protoChargedPFOLinks
const PFOLinks_t & protoChargedPFOLinks() const
cellbased pfos
PanTau::TauConstituent
Definition: TauConstituent.h:25
xAOD::TauJet_v3::ptIntermediateAxis
double ptIntermediateAxis() const
PanTau::PanTauSeed
Definition: PanTauSeed.h:24