17 return (
i.cachedElement()->bdtPi0Score() > j.
cachedElement()->bdtPi0Score() );
36 ATH_CHECK( m_Tool_InformationStore->getInfo_Double(
"TauConstituents_Types_DeltaRCore", m_CoreCone) );
37 ATH_CHECK( m_Tool_InformationStore->getInfo_VecDouble(
"TauConstituents_BinEdges_Eta", m_EtaBinEdges) );
38 ATH_CHECK( m_Tool_InformationStore->getInfo_VecDouble(
"TauConstituents_Selection_Neutral_EtaBinned_EtCut", m_EtaBinnedEtCuts) );
39 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Sum", m_varTypeName_Sum) );
40 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Ratio", m_varTypeName_Ratio) );
41 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Isolation", m_varTypeName_Isolation) );
42 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Num", m_varTypeName_Num) );
43 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Mean", m_varTypeName_Mean) );
44 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_StdDev", m_varTypeName_StdDev) );
45 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_HLV", m_varTypeName_HLV) );
46 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Angle", m_varTypeName_Angle) );
47 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_DeltaR", m_varTypeName_DeltaR) );
48 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_JetMoment", m_varTypeName_JetMoment) );
49 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Combined", m_varTypeName_Combined) );
50 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Basic", m_varTypeName_Basic) );
51 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_PID", m_varTypeName_PID) );
52 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Shots", m_varTypeName_Shots) );
54 return StatusCode::SUCCESS;
63 bool isBadSeed = (noAnyConstituents || noSelConstituents || noValidInputTau);
70 ATH_MSG_DEBUG(
"This seed is not useable for detail arranging (other than validity flag)");
73 return StatusCode::SUCCESS;
76 ATH_CHECK(arrangePFOLinks(inSeed, tauJet, pi0Container, neutralPFOContainer));
89 addPanTauDetailToTauJet(inSeed,
"Basic_NNeutralConsts",
91 addPanTauDetailToTauJet(inSeed,
"Charged_JetMoment_EtDRxTotalEt",
93 addPanTauDetailToTauJet(inSeed,
"Charged_StdDev_Et_WrtEtAllConsts",
95 addPanTauDetailToTauJet(inSeed,
"Neutral_HLV_SumM",
97 addPanTauDetailToTauJet(inSeed,
"Neutral_PID_BDTValues_BDTSort_1",
99 addPanTauDetailToTauJet(inSeed,
"Neutral_PID_BDTValues_BDTSort_2",
101 addPanTauDetailToTauJet(inSeed,
"Neutral_Ratio_1stBDTEtOverEtAllConsts",
103 addPanTauDetailToTauJet(inSeed,
"Neutral_Ratio_EtOverEtAllConsts",
105 addPanTauDetailToTauJet(inSeed,
"Neutral_Shots_NPhotonsInSeed",
107 addPanTauDetailToTauJet(inSeed,
"Combined_DeltaR1stNeutralTo1stCharged",
109 addPanTauDetailToTauJet(inSeed,
"Charged_HLV_SumM",
112 return StatusCode::SUCCESS;
117 const std::string& featName,
123 std::string fullFeatName =
"CellBased_" + featName;
125 double theValue = features->
value(fullFeatName,
isValid);
130 bool isBadSeed = (noAnyConstituents || noSelConstituents || noValidInputTau);
133 ATH_MSG_DEBUG(
"WARNING --- Problems getting value for feature " << fullFeatName <<
" from map! This should not happen for this seed!");
134 ATH_MSG_DEBUG(
"WARNING --- Did the ModeDiscriminator set features used in BDTs that were not found to their default values?");
135 ATH_MSG_DEBUG(
"NOTE --- This can also happen for seeds with (for example) 0 neutrals when trying to get Neutral_SumM - check seed");
141 int valueToAddInt = -1;
142 float valueToAddFloat = -1.1;
146 valueToAddInt =
static_cast<int>(theValue);
150 valueToAddFloat =
static_cast<float>(theValue);
154 ATH_MSG_WARNING(
"Unknown PanTauDetailType! Please use enum PanTauDetailsType from PanTauAlgs/Tool_DetailsArranger.h.");
166 std::vector< ElementLink< xAOD::PFOContainer > > neutralPFOLinks = tauJet->
protoNeutralPFOLinks();
175 std::vector< ElementLink< xAOD::PFOContainer > > preLinkPi0PFOLinks = tauJet->
pi0PFOLinks();
178 std::sort (pi0PFOLinks.begin(), pi0PFOLinks.end(),
sortBDTscore);
179 std::sort (preSelected_neutralPFOLinks.begin(), preSelected_neutralPFOLinks.end(),
sortBDTscore);
180 std::sort (neutralPFOLinks.begin(), neutralPFOLinks.end(),
sortBDTscore);
183 SetNeutralConstituentVectorMasses(neutralPFOLinks, neutralPFOContainer, 0.);
197 SetHLVTau(inSeed, tauJet, m_varTypeName_Basic);
199 return StatusCode::SUCCESS;
203 if(decayModeProto == decayModeFinal) {
208 preLinkPi0PFOLinks.push_back( pi0PFOLinks.at(0) );
211 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
216 preLinkPi0PFOLinks=pi0PFOLinks;
219 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
227 if(!preSelected_neutralPFOLinks.empty()) preLinkPi0PFOLinks.push_back( preSelected_neutralPFOLinks.at(0) );
228 else ATH_MSG_WARNING(
"No neutral PFO Links although there should be!!");
231 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
240 if( pi0PFOLinks.size() == 1 && HasMultPi0sInOneCluster(pi0PFOLinks.at(0).cachedElement(), decayModeProto) ){
243 SetNeutralConstituentVectorMasses(pi0PFOLinks, neutralPFOContainer, 2*MASS_PI0);
246 preLinkPi0PFOLinks=pi0PFOLinks;
252 preLinkPi0PFOLinks=pi0PFOLinks;
253 if(!preSelected_neutralPFOLinks.empty()) preLinkPi0PFOLinks.push_back( preSelected_neutralPFOLinks.at(0) );
254 else ATH_MSG_WARNING(
"No neutral PFO Links although there should be!!");
257 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
263 preLinkPi0PFOLinks.push_back( pi0PFOLinks.at(0) );
264 preLinkPi0PFOLinks.push_back( pi0PFOLinks.at(1) );
267 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, 0.);
272 if(!preSelected_neutralPFOLinks.empty()) preLinkPi0PFOLinks.push_back( preSelected_neutralPFOLinks.at(0) );
273 else ATH_MSG_WARNING(
"No neutral PFO Links although there should be!!");
276 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
286 SetHLVTau(inSeed, tauJet, m_varTypeName_Basic);
288 std::vector< ElementLink< xAOD::PFOContainer > > finalChrgPFOLinks = tauJet->
chargedPFOLinks();
289 std::vector< ElementLink< xAOD::PFOContainer > > finalPi0PFOLinks = tauJet->
pi0PFOLinks();
290 std::vector< ElementLink< xAOD::PFOContainer > > finalNeutralPFOLinks = tauJet->
neutralPFOLinks();
293 std::vector< TLorentzVector > vec_pi04vec;
294 std::vector< std::vector< ElementLink<xAOD::PFOContainer> > > vec_pi0pfos;
297 for(
unsigned int itlv=0; itlv!=vec_pi04vec.size(); ++itlv) {
300 p->setPxPyPzE(vec_pi04vec.at(itlv).Px(), vec_pi04vec.at(itlv).Py(), vec_pi04vec.at(itlv).Pz(), vec_pi04vec.at(itlv).E());
301 std::vector< ElementLink< xAOD::PFOContainer > > pfo_link_vector;
302 for(
uint ipfo = 0; ipfo != vec_pi0pfos.at(itlv).
size(); ++ipfo) {
303 pfo_link_vector.push_back(vec_pi0pfos.at(itlv).at(ipfo));
307 accPi0PFOLinks(*
p) = pfo_link_vector;
315 return StatusCode::SUCCESS;
322 std::vector< ElementLink< xAOD::PFOContainer > > finalChrgPFOLinks = tauJet->
chargedPFOLinks();
323 std::vector< ElementLink< xAOD::PFOContainer > > finalPi0PFOLinks = tauJet->
pi0PFOLinks();
325 unsigned int NCharged = finalChrgPFOLinks.size();
326 unsigned int NPi0Neut = finalPi0PFOLinks.size();
328 TLorentzVector tlv_PanTau_Final;
329 for(
unsigned int iPFO=0; iPFO<NCharged; iPFO++) {
330 const xAOD::PFO* pfo = finalChrgPFOLinks.at(iPFO).cachedElement();
331 tlv_PanTau_Final += pfo->
p4();
333 for(
unsigned int iPFO=0; iPFO<NPi0Neut; iPFO++) {
334 const xAOD::PFO* pfo = finalPi0PFOLinks.at(iPFO).cachedElement();
335 tlv_PanTau_Final += pfo->
p4();
341 featureMap->
addFeature(
"CellBased_" + varTypeName_Basic +
"_FinalMomentumCore_pt", tlv_PanTau_Final.Pt() );
342 featureMap->
addFeature(
"CellBased_" + varTypeName_Basic +
"_FinalMomentumCore_eta", tlv_PanTau_Final.Eta() );
343 featureMap->
addFeature(
"CellBased_" + varTypeName_Basic +
"_FinalMomentumCore_phi", tlv_PanTau_Final.Phi() );
344 featureMap->
addFeature(
"CellBased_" + varTypeName_Basic +
"_FinalMomentumCore_m", tlv_PanTau_Final.M() );
352 int nPi0sPerCluster = 1;
363 return (nPi0sPerCluster > 1);
370 PanTau::SetP4EEtaPhiM(
momentum, neutral_pfo->
e(), neutral_pfo->
eta(), neutral_pfo->
phi(),
mass);
377 for (
const auto& link : neutralPFOLinks) {
378 size_t index = link.index();
380 SetNeutralConstituentMass(curNeutralPFO,
mass);
393 std::vector< ElementLink< xAOD::PFOContainer > > new_links;
395 unsigned int nConstsOfType=0;
400 ATH_MSG_WARNING(
"CollectConstituentsAsPFOLinks: Function was called with type = " <<
type <<
" , however it was only designed for types t_Pi0Neut and t_Neutral! Returning...");
404 for(
unsigned int iConst=0; iConst<tauConstituents.size(); iConst++) {
405 bool isOfType = tauConstituents[iConst]->isOfType(
type);
406 if(!isOfType)
continue;
414 for(
unsigned int iPFO=0; iPFO<cellbased_neutralPFOLinks.size(); iPFO++) {
415 const xAOD::PFO* pfo = cellbased_neutralPFOLinks.at(iPFO).cachedElement();
417 if( tauConstituents[iConst]->getPFO() != pfo )
continue;
419 new_links.push_back( cellbased_neutralPFOLinks.at(iPFO) );
423 if( nConstsOfType != new_links.size() ){
424 ATH_MSG_WARNING(
"CollectConstituentsAsPFOLinks: Couldn't find PFOLinks " << new_links.size() <<
" for all tau constituents (" << tauConstituents.size() <<
")!");
442 size_t iNumPi0PFO = tauJet->
nPi0PFOs();
450 float fMassPi0Squared = MASS_PI0*MASS_PI0;
455 vPi0s.push_back(xPfo1->
p4() + xPfo2->
p4());
458 double dNewMomentum = std::sqrt(vPi0s[0].
E() * vPi0s[0].
E() - fMassPi0Squared);
459 vPi0s[0].SetPxPyPzE(vPi0s[0].Vect().Unit().Px() * dNewMomentum,
460 vPi0s[0].Vect().Unit().Py() * dNewMomentum,
461 vPi0s[0].Vect().Unit().Pz() * dNewMomentum,
464 std::vector< ElementLink<xAOD::PFOContainer> > pfovec;
467 vec_pi0pfos.push_back( pfovec );
474 vPi0s.push_back(xPfo->
p4());
477 double dNewMomentum = std::sqrt( (vPi0s[0].
E()/2.)*(vPi0s[0].
E()/2.) - MASS_PI0*MASS_PI0 );
478 vPi0s[0].SetVectM(vPi0s[0].Vect().Unit() * dNewMomentum, MASS_PI0 );
481 vPi0s.push_back(vPi0s[0]);
483 std::vector< ElementLink<xAOD::PFOContainer> > pfovec;
485 vec_pi0pfos.push_back( pfovec );
486 vec_pi0pfos.push_back( pfovec );
490 for (
size_t iPFO = 0; iPFO < iNumPi0PFO; iPFO++){
491 vPi0s.push_back(tauJet->
pi0PFO(iPFO)->
p4());
492 std::vector< ElementLink<xAOD::PFOContainer> > pfovec;
494 vec_pi0pfos.push_back( pfovec );