Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
MCParticleMonitoringAlgorithm.cc
Go to the documentation of this file.
1
10
15
17
20
21using namespace pandora;
22
23namespace lar_content
24{
25
26MCParticleMonitoringAlgorithm::MCParticleMonitoringAlgorithm() : m_useTrueNeutrinosOnly(false), m_minHitsForDisplay(1)
27{
28}
29
30//------------------------------------------------------------------------------------------------------------------------------------------
31
33{
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));
37
38 const CaloHitList *pCaloHitList = nullptr;
39 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*this, m_caloHitListName, pCaloHitList));
40
42 parameters.m_minHitSharingFraction = 0.f;
43
44 LArMCParticleHelper::MCContributionMap nuMCParticlesToGoodHitsMap;
45 LArMCParticleHelper::MCContributionMap beamMCParticlesToGoodHitsMap;
46 LArMCParticleHelper::MCContributionMap crMCParticlesToGoodHitsMap;
48 pMCParticleList, pCaloHitList, parameters, LArMCParticleHelper::IsBeamNeutrinoFinalState, nuMCParticlesToGoodHitsMap);
49
51 {
53 pMCParticleList, pCaloHitList, parameters, LArMCParticleHelper::IsBeamParticle, beamMCParticlesToGoodHitsMap);
55 pMCParticleList, pCaloHitList, parameters, LArMCParticleHelper::IsCosmicRay, crMCParticlesToGoodHitsMap);
56 }
57
58 if (!nuMCParticlesToGoodHitsMap.empty())
59 {
60 std::cout << std::endl << "BeamNeutrinos: " << std::endl;
61 this->PrintPrimaryMCParticles(nuMCParticlesToGoodHitsMap);
62 }
63
64 if (!beamMCParticlesToGoodHitsMap.empty())
65 {
66 std::cout << std::endl << "BeamParticles: " << std::endl;
67 this->PrintPrimaryMCParticles(beamMCParticlesToGoodHitsMap);
68 }
69
70 if (!crMCParticlesToGoodHitsMap.empty())
71 {
72 std::cout << std::endl << "CosmicRays: " << std::endl;
73 this->PrintPrimaryMCParticles(crMCParticlesToGoodHitsMap);
74 }
75
76 std::cout << "------------------------------------------------------------------------------------------------" << std::endl;
77
78 return STATUS_CODE_SUCCESS;
79}
80
81//------------------------------------------------------------------------------------------------------------------------------------------
82
84{
85 MCParticleVector mcPrimaryVector;
86 LArMonitoringHelper::GetOrderedMCParticleVector({mcContributionMap}, mcPrimaryVector);
87
88 unsigned int index(0);
89
90 for (const MCParticle *const pMCPrimary : mcPrimaryVector)
91 {
92 const CaloHitList &caloHitList(mcContributionMap.at(pMCPrimary));
93
94 if (caloHitList.size() >= m_minHitsForDisplay)
95 {
96 std::cout << std::endl
97 << "--Primary " << index << ", MCPDG " << pMCPrimary->GetParticleId() << ", Energy " << pMCPrimary->GetEnergy()
98 << ", Dist. " << (pMCPrimary->GetEndpoint() - pMCPrimary->GetVertex()).GetMagnitude() << ", nMCHits "
99 << caloHitList.size() << " (" << LArMonitoringHelper::CountHitsByType(TPC_VIEW_U, caloHitList) << ", "
100 << LArMonitoringHelper::CountHitsByType(TPC_VIEW_V, caloHitList) << ", "
101 << LArMonitoringHelper::CountHitsByType(TPC_VIEW_W, caloHitList) << ")" << std::endl;
102
103 LArMCParticleHelper::MCRelationMap mcToPrimaryMCMap;
104 LArMCParticleHelper::CaloHitToMCMap caloHitToPrimaryMCMap;
106 LArMCParticleHelper::GetMCParticleToCaloHitMatches(&caloHitList, mcToPrimaryMCMap, caloHitToPrimaryMCMap, mcToTrueHitListMap);
107 this->PrintMCParticle(pMCPrimary, mcToTrueHitListMap, 1);
108 }
109
110 ++index;
111 }
112}
113
114//------------------------------------------------------------------------------------------------------------------------------------------
115
117 const MCParticle *const pMCParticle, const LArMCParticleHelper::MCContributionMap &mcToTrueHitListMap, const int depth) const
118{
119 const CaloHitList &caloHitList(mcToTrueHitListMap.count(pMCParticle) ? mcToTrueHitListMap.at(pMCParticle) : CaloHitList());
120
121 if (caloHitList.size() >= m_minHitsForDisplay)
122 {
123 if (depth > 1)
124 {
125 for (int iDepth = 1; iDepth < depth - 1; ++iDepth)
126 std::cout << " ";
127 std::cout << "\\_ ";
128 }
129
130 std::cout << "MCPDG " << pMCParticle->GetParticleId() << ", Energy " << pMCParticle->GetEnergy() << ", Dist. "
131 << (pMCParticle->GetEndpoint() - pMCParticle->GetVertex()).GetMagnitude() << ", nMCHits " << caloHitList.size() << " ("
132 << LArMonitoringHelper::CountHitsByType(TPC_VIEW_U, caloHitList) << ", "
133 << LArMonitoringHelper::CountHitsByType(TPC_VIEW_V, caloHitList) << ", "
134 << LArMonitoringHelper::CountHitsByType(TPC_VIEW_W, caloHitList) << ")" << std::endl;
135 }
136
137 for (const MCParticle *const pDaughterParticle : pMCParticle->GetDaughterList())
138 this->PrintMCParticle(pDaughterParticle, mcToTrueHitListMap, depth + 1);
139}
140
141//------------------------------------------------------------------------------------------------------------------------------------------
142
144{
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));
147
149 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "UseTrueNeutrinosOnly", m_useTrueNeutrinosOnly));
150
152 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinHitsForDisplay", m_minHitsForDisplay));
153
154 return STATUS_CODE_SUCCESS;
155}
156
157} // namespace lar_content
Grouping of header files for many classes of use in particle flow algorithms.
Header file for the cluster helper class.
Header file for the geometry helper class.
Header file for the lar mc particle class.
Header file for the lar monitoring helper helper class.
Header file for the pfo helper class.
Header file for the lar pfo class.
Header file for the mc particle monitoring algorithm.
#define PANDORA_RETURN_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command)
Definition StatusCodes.h:31
#define PANDORA_RETURN_RESULT_IF(StatusCode1, Operator, Command)
Definition StatusCodes.h:19
static pandora::StatusCode GetList(const pandora::Algorithm &algorithm, const std::string &listName, const T *&pT)
Get a named list.
float m_minHitSharingFraction
the minimum Hit sharing fraction
static bool IsCosmicRay(const pandora::MCParticle *const pMCParticle)
Return true if passed a primary cosmic ray MCParticle.
static bool IsBeamParticle(const pandora::MCParticle *const pMCParticle)
Returns true if passed a primary beam MCParticle.
static void SelectReconstructableMCParticles(const pandora::MCParticleList *pMCParticleList, const pandora::CaloHitList *pCaloHitList, const PrimaryParameters &parameters, std::function< bool(const pandora::MCParticle *const)> fCriteria, MCContributionMap &selectedMCParticlesToHitsMap)
Select target, reconstructable mc particles that match given criteria.
std::unordered_map< const pandora::MCParticle *, pandora::CaloHitList > MCContributionMap
std::unordered_map< const pandora::CaloHit *, const pandora::MCParticle * > CaloHitToMCMap
static void GetMCParticleToCaloHitMatches(const pandora::CaloHitList *const pCaloHitList, const MCRelationMap &mcToTargetMCMap, CaloHitToMCMap &hitToMCMap, MCContributionMap &mcToTrueHitListMap)
Match calo hits to their parent particles.
std::unordered_map< const pandora::MCParticle *, const pandora::MCParticle * > MCRelationMap
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.
static void GetOrderedMCParticleVector(const LArMCParticleHelper::MCContributionMapVector &selectedMCParticleToGoodHitsMaps, pandora::MCParticleVector &orderedMCParticleVector)
Order input MCParticles by their number of hits.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
void PrintMCParticle(const pandora::MCParticle *const pMCParticle, const LArMCParticleHelper::MCContributionMap &mcToTrueHitListMap, const int depth) const
Print information for a given mc particle to screen.
void PrintPrimaryMCParticles(const LArMCParticleHelper::MCContributionMap &mcContributionMap) const
Extract details of each mc primary in a given mc contribution map.
std::string m_caloHitListName
Name of input calo hit list.
bool m_useTrueNeutrinosOnly
Whether to consider only mc particles that were neutrino induced.
unsigned int m_minHitsForDisplay
Min hits associated with mc particle to warrant display to terminal.
std::string m_mcParticleListName
Name of input MC particle list.
MCParticle class.
Definition MCParticle.h:26
float GetEnergy() const
Get energy of mc particle, units GeV.
Definition MCParticle.h:243
const MCParticleList & GetDaughterList() const
Get list of daughters of mc particle.
Definition MCParticle.h:306
const CartesianVector & GetEndpoint() const
Get the endpoint of the mc particle, units mm.
Definition MCParticle.h:264
const CartesianVector & GetVertex() const
Get the production vertex of the mc particle, units mm.
Definition MCParticle.h:257
int GetParticleId() const
Get the PDG code of the mc particle.
Definition MCParticle.h:285
static StatusCode ReadValue(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, T &t)
Read a value from an xml element.
Definition XmlHelper.h:136
MANAGED_CONTAINER< const MCParticle * > MCParticleList
MANAGED_CONTAINER< const CaloHit * > CaloHitList
std::vector< const MCParticle * > MCParticleVector
StatusCode
The StatusCode enum.