9 #include "Pandora/AlgorithmHeaders.h" 26 MCParticleMonitoringAlgorithm::MCParticleMonitoringAlgorithm() :
27 m_useTrueNeutrinosOnly(false),
28 m_minHitsForDisplay(1)
36 std::cout <<
"---MC-PARTICLE-MONITORING-----------------------------------------------------------------------" << std::endl;
37 const MCParticleList *pMCParticleList =
nullptr;
38 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*
this,
m_mcParticleListName, pMCParticleList));
40 const CaloHitList *pCaloHitList =
nullptr;
41 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*
this,
m_caloHitListName, pCaloHitList));
60 if (!nuMCParticlesToGoodHitsMap.empty())
62 std::cout << std::endl <<
"BeamNeutrinos: " << std::endl;
66 if (!beamMCParticlesToGoodHitsMap.empty())
68 std::cout << std::endl <<
"BeamParticles: " << std::endl;
72 if (!crMCParticlesToGoodHitsMap.empty())
74 std::cout << std::endl <<
"CosmicRays: " << std::endl;
78 std::cout <<
"------------------------------------------------------------------------------------------------" << std::endl;
80 return STATUS_CODE_SUCCESS;
90 unsigned int index(0);
92 for (
const MCParticle *
const pMCPrimary : mcPrimaryVector)
94 const CaloHitList &caloHitList(mcContributionMap.at(pMCPrimary));
98 std::cout << std::endl
99 <<
"--Primary " << index <<
", MCPDG " << pMCPrimary->GetParticleId() <<
", Energy " << pMCPrimary->GetEnergy()
100 <<
", Dist. " << (pMCPrimary->GetEndpoint() - pMCPrimary->GetVertex()).GetMagnitude() <<
", nMCHits " 121 const CaloHitList &caloHitList(mcToTrueHitListMap.count(pMCParticle) ? mcToTrueHitListMap.at(pMCParticle) : CaloHitList());
127 for (
int iDepth = 1; iDepth < depth - 1; ++iDepth)
132 std::cout <<
"MCPDG " << pMCParticle->GetParticleId() <<
", Energy " << pMCParticle->GetEnergy() <<
", Dist. " 133 << (pMCParticle->GetEndpoint() - pMCParticle->GetVertex()).GetMagnitude() <<
", nMCHits " << caloHitList.size() <<
" (" 139 for (
const MCParticle *
const pDaughterParticle : pMCParticle->GetDaughterList())
140 this->
PrintMCParticle(pDaughterParticle, mcToTrueHitListMap, depth + 1);
147 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle,
"CaloHitListName",
m_caloHitListName));
148 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle,
"MCParticleListName",
m_mcParticleListName));
150 PANDORA_RETURN_RESULT_IF_AND_IF(
151 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"UseTrueNeutrinosOnly",
m_useTrueNeutrinosOnly));
153 PANDORA_RETURN_RESULT_IF_AND_IF(
154 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"MinHitsForDisplay",
m_minHitsForDisplay));
156 return STATUS_CODE_SUCCESS;
Header file for the pfo helper class.
std::unordered_map< const pandora::MCParticle *, pandora::CaloHitList > MCContributionMap
Header file for the mc particle monitoring algorithm.
Header file for the lar pfo class.
bool m_useTrueNeutrinosOnly
Whether to consider only mc particles that were neutrino induced.
std::unordered_map< const pandora::CaloHit *, const pandora::MCParticle * > CaloHitToMCMap
Header file for the lar monitoring helper helper class.
unsigned int m_minHitsForDisplay
Min hits associated with mc particle to warrant display to terminal.
pandora::StatusCode Run()
Header file for the geometry helper class.
static void GetOrderedMCParticleVector(const LArMCParticleHelper::MCContributionMapVector &selectedMCParticleToGoodHitsMaps, pandora::MCParticleVector &orderedMCParticleVector)
Order input MCParticles by their number of hits.
static bool IsCosmicRay(const pandora::MCParticle *const pMCParticle)
Return true if passed a primary cosmic ray MCParticle.
static void SelectReconstructableMCParticles(const pandora::MCParticleList *pMCParticleList, const pandora::CaloHitList *pCaloHitList, const PrimaryParameters ¶meters, std::function< bool(const pandora::MCParticle *const)> fCriteria, MCContributionMap &selectedMCParticlesToHitsMap)
Select target, reconstructable mc particles that match given criteria.
void PrintMCParticle(const pandora::MCParticle *const pMCParticle, const LArMCParticleHelper::MCContributionMap &mcToTrueHitListMap, const int depth) const
Print information for a given mc particle to screen.
Header file for the cluster helper class.
static void GetMCParticleToCaloHitMatches(const pandora::CaloHitList *const pCaloHitList, const MCRelationMap &mcToTargetMCMap, CaloHitToMCMap &hitToMCMap, MCContributionMap &mcToTrueHitListMap)
Match calo hits to their parent particles.
static bool IsBeamParticle(const pandora::MCParticle *const pMCParticle)
Returns true if passed a primary beam MCParticle.
std::vector< art::Ptr< simb::MCParticle > > MCParticleVector
std::string m_caloHitListName
Name of input calo hit list.
void PrintPrimaryMCParticles(const LArMCParticleHelper::MCContributionMap &mcContributionMap) const
Extract details of each mc primary in a given mc contribution map.
float m_minHitSharingFraction
the minimum Hit sharing fraction
Header file for the lar mc particle class.
std::string m_mcParticleListName
Name of input MC particle list.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
static bool IsBeamNeutrinoFinalState(const pandora::MCParticle *const pMCParticle)
Returns true if passed a primary neutrino final state MCParticle.
static unsigned int CountHitsByType(const pandora::HitType hitType, const pandora::CaloHitList &caloHitList)
Count the number of calo hits, in a provided list, of a specified type.
std::unordered_map< const pandora::MCParticle *, const pandora::MCParticle * > MCRelationMap