9 #include "Pandora/AlgorithmHeaders.h" 24 DlHitValidationAlgorithm::DlHitValidationAlgorithm() :
35 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"u_true_shower",
m_confusionU[0][0]));
36 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"u_false_shower",
m_confusionU[1][0]));
37 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"u_false_track",
m_confusionU[0][1]));
38 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"u_true_track",
m_confusionU[1][1]));
39 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"v_true_shower",
m_confusionV[0][0]));
40 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"v_false_shower",
m_confusionV[1][0]));
41 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"v_false_track",
m_confusionV[0][1]));
42 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"v_true_track",
m_confusionV[1][1]));
43 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"w_true_shower",
m_confusionW[0][0]));
44 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"w_false_shower",
m_confusionW[1][0]));
45 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"w_false_track",
m_confusionW[0][1]));
46 PANDORA_MONITORING_API(SetTreeVariable(this->GetPandora(),
"confusion_tree",
"w_true_track",
m_confusionW[1][1]));
47 PANDORA_MONITORING_API(FillTree(this->GetPandora(),
"confusion_tree"));
50 PANDORA_MONITORING_API(SaveTree(this->GetPandora(),
"confusion_tree",
"confusion.root",
"UPDATE"));
52 catch (
const StatusCodeException &)
54 std::cout <<
"DlHitValidationAlgorithm: Unable to write confusion_tree to file" << std::endl;
62 const int SHOWER_IDX{0}, TRACK_IDX{1};
65 const CaloHitList *pCaloHitList(
nullptr);
66 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*
this, listName, pCaloHitList));
67 const MCParticleList *pMCParticleList(
nullptr);
68 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetCurrentList(*
this, pMCParticleList));
70 const HitType view{pCaloHitList->front()->GetHitType()};
72 if (!(view == TPC_VIEW_U || view == TPC_VIEW_V || view == TPC_VIEW_W))
73 return STATUS_CODE_NOT_ALLOWED;
81 LArMCParticleHelper::SelectReconstructableMCParticles(
82 pMCParticleList, pCaloHitList, parameters, LArMCParticleHelper::IsBeamNeutrinoFinalState, targetMCParticleToHitsMap);
84 for (
const CaloHit *pCaloHit : *pCaloHitList)
88 const MCParticle *
const pMCParticle(MCParticleHelper::GetMainMCParticle(pCaloHit));
89 const int pdg{
std::abs(pMCParticle->GetParticleId())};
90 const int truth{(pdg == 11 || pdg == 22) ? SHOWER_IDX : TRACK_IDX};
93 const float pShower{pLArCaloHit->GetShowerProbability()};
94 const int cls{(pShower > pTrack) ? SHOWER_IDX : TRACK_IDX};
95 if (view == TPC_VIEW_U)
97 else if (view == TPC_VIEW_V)
102 catch (
const StatusCodeException &)
109 return STATUS_CODE_SUCCESS;
116 PANDORA_RETURN_RESULT_IF_AND_IF(
117 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadVectorOfValues(xmlHandle,
"CaloHitListNames",
m_caloHitListNames));
119 return STATUS_CODE_SUCCESS;
pandora::StatusCode Run()
std::unordered_map< const pandora::MCParticle *, pandora::CaloHitList > MCContributionMap
int m_confusionW[2][2]
Confusion matrix for the W view.
Header file for the lar calo hit class.
constexpr auto abs(T v)
Returns the absolute value of the argument.
pandora::StringVector m_caloHitListNames
Name of input calo hit list.
int m_confusionU[2][2]
Confusion matrix for the U view.
Header file for the lar monitoring helper helper class.
unsigned int m_minHitsForGoodView
the minimum number of Hits for a good view
float m_maxPhotonPropagation
the maximum photon propagation length
Header file for the deep learning track shower id validation algorithm.
Header file for the lar monte carlo particle helper helper class.
int m_confusionV[2][2]
Confusion matrix for the V view.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
virtual ~DlHitValidationAlgorithm()
float GetTrackProbability() const
Get the probability that the hit is track-like.