9 #include "Pandora/AlgorithmHeaders.h" 26 MCParticleMonitoringAlgorithm::MCParticleMonitoringAlgorithm() : m_useTrueNeutrinosOnly(false), m_minHitsForDisplay(1)
34 std::cout <<
"---MC-PARTICLE-MONITORING-----------------------------------------------------------------------" <<
std::endl;
35 const MCParticleList *pMCParticleList =
nullptr;
36 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*
this,
m_mcParticleListName, pMCParticleList));
38 const CaloHitList *pCaloHitList =
nullptr;
39 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*
this,
m_caloHitListName, pCaloHitList));
58 if (!nuMCParticlesToGoodHitsMap.empty())
60 std::cout << std::endl <<
"BeamNeutrinos: " <<
std::endl;
64 if (!beamMCParticlesToGoodHitsMap.empty())
66 std::cout << std::endl <<
"BeamParticles: " <<
std::endl;
70 if (!crMCParticlesToGoodHitsMap.empty())
72 std::cout << std::endl <<
"CosmicRays: " <<
std::endl;
76 std::cout <<
"------------------------------------------------------------------------------------------------" <<
std::endl;
78 return STATUS_CODE_SUCCESS;
88 unsigned int index(0);
90 for (
const MCParticle *
const pMCPrimary : mcPrimaryVector)
92 const CaloHitList &caloHitList(mcContributionMap.at(pMCPrimary));
97 <<
"--Primary " << index <<
", MCPDG " << pMCPrimary->GetParticleId() <<
", Energy " << pMCPrimary->GetEnergy()
98 <<
", Dist. " << (pMCPrimary->GetEndpoint() - pMCPrimary->GetVertex()).GetMagnitude() <<
", nMCHits " 119 const CaloHitList &caloHitList(mcToTrueHitListMap.count(pMCParticle) ? mcToTrueHitListMap.at(pMCParticle) : CaloHitList());
125 for (
int iDepth = 1; iDepth < depth - 1; ++iDepth)
130 std::cout <<
"MCPDG " << pMCParticle->GetParticleId() <<
", Energy " << pMCParticle->GetEnergy() <<
", Dist. " 131 << (pMCParticle->GetEndpoint() - pMCParticle->GetVertex()).GetMagnitude() <<
", nMCHits " << caloHitList.size() <<
" (" 137 for (
const MCParticle *
const pDaughterParticle : pMCParticle->GetDaughterList())
138 this->
PrintMCParticle(pDaughterParticle, mcToTrueHitListMap, depth + 1);
145 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle,
"CaloHitListName",
m_caloHitListName));
146 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle,
"MCParticleListName",
m_mcParticleListName));
148 PANDORA_RETURN_RESULT_IF_AND_IF(
149 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"UseTrueNeutrinosOnly",
m_useTrueNeutrinosOnly));
151 PANDORA_RETURN_RESULT_IF_AND_IF(
152 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"MinHitsForDisplay",
m_minHitsForDisplay));
154 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
std::vector< art::Ptr< simb::MCParticle > > MCParticleVector
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::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
QTextStream & endl(QTextStream &s)