12 return (
i.cachedElement()->bdtPi0Score() > j.
cachedElement()->bdtPi0Score() );
28 ATH_CHECK( m_Tool_InformationStore->getInfo_Double(
"TauConstituents_Types_DeltaRCore", m_CoreCone) );
29 ATH_CHECK( m_Tool_InformationStore->getInfo_VecDouble(
"TauConstituents_BinEdges_Eta", m_EtaBinEdges) );
30 ATH_CHECK( m_Tool_InformationStore->getInfo_VecDouble(
"TauConstituents_Selection_Neutral_EtaBinned_EtCut", m_EtaBinnedEtCuts) );
31 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Sum", m_varTypeName_Sum) );
32 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Ratio", m_varTypeName_Ratio) );
33 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Isolation", m_varTypeName_Isolation) );
34 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Num", m_varTypeName_Num) );
35 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Mean", m_varTypeName_Mean) );
36 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_StdDev", m_varTypeName_StdDev) );
37 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_HLV", m_varTypeName_HLV) );
38 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Angle", m_varTypeName_Angle) );
39 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_DeltaR", m_varTypeName_DeltaR) );
40 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_JetMoment", m_varTypeName_JetMoment) );
41 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Combined", m_varTypeName_Combined) );
42 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Basic", m_varTypeName_Basic) );
43 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_PID", m_varTypeName_PID) );
44 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Shots", m_varTypeName_Shots) );
46 return StatusCode::SUCCESS;
55 bool isBadSeed = (noAnyConstituents || noSelConstituents || noValidInputTau);
62 ATH_MSG_DEBUG(
"This seed is not useable for detail arranging (other than validity flag)");
65 return StatusCode::SUCCESS;
68 ATH_CHECK(arrangePFOLinks(inSeed, tauJet, pi0Container, neutralPFOContainer));
81 addPanTauDetailToTauJet(inSeed,
"Basic_NNeutralConsts",
83 addPanTauDetailToTauJet(inSeed,
"Charged_JetMoment_EtDRxTotalEt",
85 addPanTauDetailToTauJet(inSeed,
"Charged_StdDev_Et_WrtEtAllConsts",
87 addPanTauDetailToTauJet(inSeed,
"Neutral_HLV_SumM",
89 addPanTauDetailToTauJet(inSeed,
"Neutral_PID_BDTValues_BDTSort_1",
91 addPanTauDetailToTauJet(inSeed,
"Neutral_PID_BDTValues_BDTSort_2",
93 addPanTauDetailToTauJet(inSeed,
"Neutral_Ratio_1stBDTEtOverEtAllConsts",
95 addPanTauDetailToTauJet(inSeed,
"Neutral_Ratio_EtOverEtAllConsts",
97 addPanTauDetailToTauJet(inSeed,
"Neutral_Shots_NPhotonsInSeed",
99 addPanTauDetailToTauJet(inSeed,
"Combined_DeltaR1stNeutralTo1stCharged",
101 addPanTauDetailToTauJet(inSeed,
"Charged_HLV_SumM",
104 return StatusCode::SUCCESS;
109 const std::string& featName,
115 std::string fullFeatName =
"CellBased_" + featName;
117 double theValue = features->
value(fullFeatName,
isValid);
122 bool isBadSeed = (noAnyConstituents || noSelConstituents || noValidInputTau);
125 ATH_MSG_DEBUG(
"WARNING --- Problems getting value for feature " << fullFeatName <<
" from map! This should not happen for this seed!");
126 ATH_MSG_DEBUG(
"WARNING --- Did the ModeDiscriminator set features used in BDTs that were not found to their default values?");
127 ATH_MSG_DEBUG(
"NOTE --- This can also happen for seeds with (for example) 0 neutrals when trying to get Neutral_SumM - check seed");
133 int valueToAddInt = -1;
134 float valueToAddFloat = -1.1;
138 valueToAddInt =
static_cast<int>(theValue);
142 valueToAddFloat =
static_cast<float>(theValue);
146 ATH_MSG_WARNING(
"Unknown PanTauDetailType! Please use enum PanTauDetailsType from PanTauAlgs/Tool_DetailsArranger.h.");
158 std::vector< ElementLink< xAOD::PFOContainer > > neutralPFOLinks = tauJet->
protoNeutralPFOLinks();
167 std::vector< ElementLink< xAOD::PFOContainer > > preLinkPi0PFOLinks = tauJet->
pi0PFOLinks();
170 std::sort (pi0PFOLinks.begin(), pi0PFOLinks.end(),
sortBDTscore);
171 std::sort (preSelected_neutralPFOLinks.begin(), preSelected_neutralPFOLinks.end(),
sortBDTscore);
172 std::sort (neutralPFOLinks.begin(), neutralPFOLinks.end(),
sortBDTscore);
175 SetNeutralConstituentVectorMasses(neutralPFOLinks, neutralPFOContainer, 0.);
189 SetHLVTau(inSeed, tauJet, m_varTypeName_Basic);
191 return StatusCode::SUCCESS;
195 if(decayModeProto == decayModeFinal) {
200 preLinkPi0PFOLinks.push_back( pi0PFOLinks.at(0) );
203 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
208 preLinkPi0PFOLinks=pi0PFOLinks;
211 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
219 if(!preSelected_neutralPFOLinks.empty()) preLinkPi0PFOLinks.push_back( preSelected_neutralPFOLinks.at(0) );
220 else ATH_MSG_WARNING(
"No neutral PFO Links although there should be!!");
223 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
232 if( pi0PFOLinks.size() == 1 && HasMultPi0sInOneCluster(pi0PFOLinks.at(0).cachedElement(), decayModeProto) ){
235 SetNeutralConstituentVectorMasses(pi0PFOLinks, neutralPFOContainer, 2*MASS_PI0);
238 preLinkPi0PFOLinks=pi0PFOLinks;
244 preLinkPi0PFOLinks=pi0PFOLinks;
245 if(!preSelected_neutralPFOLinks.empty()) preLinkPi0PFOLinks.push_back( preSelected_neutralPFOLinks.at(0) );
246 else ATH_MSG_WARNING(
"No neutral PFO Links although there should be!!");
249 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
255 preLinkPi0PFOLinks.push_back( pi0PFOLinks.at(0) );
256 preLinkPi0PFOLinks.push_back( pi0PFOLinks.at(1) );
259 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, 0.);
264 if(!preSelected_neutralPFOLinks.empty()) preLinkPi0PFOLinks.push_back( preSelected_neutralPFOLinks.at(0) );
265 else ATH_MSG_WARNING(
"No neutral PFO Links although there should be!!");
268 SetNeutralConstituentVectorMasses(preLinkPi0PFOLinks, neutralPFOContainer, MASS_PI0);
278 SetHLVTau(inSeed, tauJet, m_varTypeName_Basic);
280 std::vector< ElementLink< xAOD::PFOContainer > > finalChrgPFOLinks = tauJet->
chargedPFOLinks();
281 std::vector< ElementLink< xAOD::PFOContainer > > finalPi0PFOLinks = tauJet->
pi0PFOLinks();
282 std::vector< ElementLink< xAOD::PFOContainer > > finalNeutralPFOLinks = tauJet->
neutralPFOLinks();
285 std::vector< TLorentzVector > vec_pi04vec;
286 std::vector< std::vector< ElementLink<xAOD::PFOContainer> > > vec_pi0pfos;
289 for(
unsigned int itlv=0; itlv!=vec_pi04vec.size(); ++itlv) {
292 p->setPxPyPzE(vec_pi04vec.at(itlv).Px(), vec_pi04vec.at(itlv).Py(), vec_pi04vec.at(itlv).Pz(), vec_pi04vec.at(itlv).E());
293 std::vector< ElementLink< xAOD::PFOContainer > > pfo_link_vector;
294 for(
uint ipfo = 0; ipfo != vec_pi0pfos.at(itlv).
size(); ++ipfo) {
295 pfo_link_vector.push_back(vec_pi0pfos.at(itlv).at(ipfo));
299 accPi0PFOLinks(*
p) = pfo_link_vector;
307 return StatusCode::SUCCESS;
314 std::vector< ElementLink< xAOD::PFOContainer > > finalChrgPFOLinks = tauJet->
chargedPFOLinks();
315 std::vector< ElementLink< xAOD::PFOContainer > > finalPi0PFOLinks = tauJet->
pi0PFOLinks();
317 unsigned int NCharged = finalChrgPFOLinks.size();
318 unsigned int NPi0Neut = finalPi0PFOLinks.size();
320 TLorentzVector tlv_PanTau_Final;
321 for(
unsigned int iPFO=0; iPFO<NCharged; iPFO++) {
322 const xAOD::PFO* pfo = finalChrgPFOLinks.at(iPFO).cachedElement();
323 tlv_PanTau_Final += pfo->
p4();
325 for(
unsigned int iPFO=0; iPFO<NPi0Neut; iPFO++) {
326 const xAOD::PFO* pfo = finalPi0PFOLinks.at(iPFO).cachedElement();
327 tlv_PanTau_Final += pfo->
p4();
333 featureMap->
addFeature(
"CellBased_" + varTypeName_Basic +
"_FinalMomentumCore_pt", tlv_PanTau_Final.Pt() );
334 featureMap->
addFeature(
"CellBased_" + varTypeName_Basic +
"_FinalMomentumCore_eta", tlv_PanTau_Final.Eta() );
335 featureMap->
addFeature(
"CellBased_" + varTypeName_Basic +
"_FinalMomentumCore_phi", tlv_PanTau_Final.Phi() );
336 featureMap->
addFeature(
"CellBased_" + varTypeName_Basic +
"_FinalMomentumCore_m", tlv_PanTau_Final.M() );
344 int nPi0sPerCluster = 1;
355 return (nPi0sPerCluster > 1);
362 PanTau::SetP4EEtaPhiM(
momentum, neutral_pfo->
e(), neutral_pfo->
eta(), neutral_pfo->
phi(),
mass);
369 for (
const auto& link : neutralPFOLinks) {
370 size_t index = link.index();
372 SetNeutralConstituentMass(curNeutralPFO,
mass);
385 std::vector< ElementLink< xAOD::PFOContainer > > new_links;
387 unsigned int nConstsOfType=0;
392 ATH_MSG_WARNING(
"CollectConstituentsAsPFOLinks: Function was called with type = " <<
type <<
" , however it was only designed for types t_Pi0Neut and t_Neutral! Returning...");
396 for(
unsigned int iConst=0; iConst<tauConstituents.size(); iConst++) {
397 bool isOfType = tauConstituents[iConst]->isOfType(
type);
398 if(!isOfType)
continue;
406 for(
unsigned int iPFO=0; iPFO<cellbased_neutralPFOLinks.size(); iPFO++) {
407 const xAOD::PFO* pfo = cellbased_neutralPFOLinks.at(iPFO).cachedElement();
409 if( tauConstituents[iConst]->getPFO() != pfo )
continue;
411 new_links.push_back( cellbased_neutralPFOLinks.at(iPFO) );
415 if( nConstsOfType != new_links.size() ){
416 ATH_MSG_WARNING(
"CollectConstituentsAsPFOLinks: Couldn't find PFOLinks " << new_links.size() <<
" for all tau constituents (" << tauConstituents.size() <<
")!");
434 size_t iNumPi0PFO = tauJet->
nPi0PFOs();
442 float fMassPi0Squared = MASS_PI0*MASS_PI0;
447 vPi0s.push_back(xPfo1->
p4() + xPfo2->
p4());
450 double dNewMomentum = std::sqrt(vPi0s[0].
E() * vPi0s[0].
E() - fMassPi0Squared);
451 vPi0s[0].SetPxPyPzE(vPi0s[0].Vect().Unit().Px() * dNewMomentum,
452 vPi0s[0].Vect().Unit().Py() * dNewMomentum,
453 vPi0s[0].Vect().Unit().Pz() * dNewMomentum,
456 std::vector< ElementLink<xAOD::PFOContainer> > pfovec;
459 vec_pi0pfos.push_back( pfovec );
466 vPi0s.push_back(xPfo->
p4());
469 double dNewMomentum = std::sqrt( (vPi0s[0].
E()/2.)*(vPi0s[0].
E()/2.) - MASS_PI0*MASS_PI0 );
470 vPi0s[0].SetVectM(vPi0s[0].Vect().Unit() * dNewMomentum, MASS_PI0 );
473 vPi0s.push_back(vPi0s[0]);
475 std::vector< ElementLink<xAOD::PFOContainer> > pfovec;
477 vec_pi0pfos.push_back( pfovec );
478 vec_pi0pfos.push_back( pfovec );
482 for (
size_t iPFO = 0; iPFO < iNumPi0PFO; iPFO++){
483 vPi0s.push_back(tauJet->
pi0PFO(iPFO)->
p4());
484 std::vector< ElementLink<xAOD::PFOContainer> > pfovec;
486 vec_pi0pfos.push_back( pfovec );