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