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