LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
lar_content::CheatingClusterCreationAlgorithm Class Reference

CheatingClusterCreationAlgorithm class. More...

#include "CheatingClusterCreationAlgorithm.h"

Inheritance diagram for lar_content::CheatingClusterCreationAlgorithm:

Public Member Functions

 CheatingClusterCreationAlgorithm ()
 Default constructor. More...
 

Private Types

typedef std::unordered_map< const pandora::MCParticle *, pandora::CaloHitList > MCParticleToHitListMap
 

Private Member Functions

pandora::StatusCode Run ()
 
pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
void GetMCParticleToHitListMap (MCParticleToHitListMap &mcParticleToHitListMap) const
 Create map between each (primary) MC particle and associated calo hits. More...
 
void SimpleMCParticleCollection (const pandora::CaloHit *const pCaloHit, const LArMCParticleHelper::MCRelationMap &mcPrimaryMap, MCParticleToHitListMap &mcParticleToHitListMap) const
 Simple mc particle collection, using main mc particle associated with each calo hit. More...
 
bool SelectMCParticlesForClustering (const pandora::MCParticle *const pMCParticle) const
 Check whether mc particle is of a type specified for inclusion in cheated clustering. More...
 
void CreateClusters (const MCParticleToHitListMap &mcParticleToHitListMap) const
 Create clusters based on information in the mc particle to hit list map. More...
 

Private Attributes

bool m_collapseToPrimaryMCParticles
 Whether to collapse mc particle hierarchies to primary particles. More...
 
std::string m_mcParticleListName
 The mc particle list name, required if want to collapse mc particle hierarchy. More...
 
pandora::IntVector m_particleIdList
 list of particle ids of MCPFOs to be selected More...
 

Detailed Description

Member Typedef Documentation

typedef std::unordered_map<const pandora::MCParticle *, pandora::CaloHitList> lar_content::CheatingClusterCreationAlgorithm::MCParticleToHitListMap
private

Definition at line 35 of file CheatingClusterCreationAlgorithm.h.

Constructor & Destructor Documentation

lar_content::CheatingClusterCreationAlgorithm::CheatingClusterCreationAlgorithm ( )

Default constructor.

Definition at line 18 of file CheatingClusterCreationAlgorithm.cc.

18  :
20 {
21 }
bool m_collapseToPrimaryMCParticles
Whether to collapse mc particle hierarchies to primary particles.

Member Function Documentation

void lar_content::CheatingClusterCreationAlgorithm::CreateClusters ( const MCParticleToHitListMap mcParticleToHitListMap) const
private

Create clusters based on information in the mc particle to hit list map.

Parameters
mcParticleToHitListMapthe mc particle to hit list map

Definition at line 107 of file CheatingClusterCreationAlgorithm.cc.

References lar_content::LArMCParticleHelper::SortByMomentum().

Referenced by Run().

108 {
109  MCParticleVector mcParticleVector;
110  for (const auto &mapEntry : mcParticleToHitListMap)
111  mcParticleVector.push_back(mapEntry.first);
112  std::sort(mcParticleVector.begin(), mcParticleVector.end(), LArMCParticleHelper::SortByMomentum);
113 
114  for (const MCParticle *const pMCParticle : mcParticleVector)
115  {
116  const CaloHitList &caloHitList(mcParticleToHitListMap.at(pMCParticle));
117 
118  if (caloHitList.empty())
119  continue;
120 
121  const Cluster *pCluster(nullptr);
122  PandoraContentApi::Cluster::Parameters parameters;
123  parameters.m_caloHitList = caloHitList;
124  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Cluster::Create(*this, parameters, pCluster));
125 
126  PandoraContentApi::Cluster::Metadata metadata;
127 
128  switch (pMCParticle->GetParticleId())
129  {
130  case PHOTON:
131  case E_PLUS:
132  case E_MINUS:
133  case MU_PLUS:
134  case MU_MINUS:
135  metadata.m_particleId = pMCParticle->GetParticleId();
136  break;
137  default:
138  break;
139  }
140 
141  if (metadata.m_particleId.IsInitialized())
142  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Cluster::AlterMetadata(*this, pCluster, metadata));
143  }
144 }
static bool SortByMomentum(const pandora::MCParticle *const pLhs, const pandora::MCParticle *const pRhs)
Sort mc particles by their momentum.
std::vector< art::Ptr< simb::MCParticle > > MCParticleVector
void lar_content::CheatingClusterCreationAlgorithm::GetMCParticleToHitListMap ( MCParticleToHitListMap mcParticleToHitListMap) const
private

Create map between each (primary) MC particle and associated calo hits.

Parameters
mcParticleToHitListMapto receive the mc particle to hit list map

Definition at line 36 of file CheatingClusterCreationAlgorithm.cc.

References lar_content::LArMCParticleHelper::GetMCPrimaryMap(), m_collapseToPrimaryMCParticles, m_mcParticleListName, and SimpleMCParticleCollection().

Referenced by Run().

37 {
39 
41  {
42  const MCParticleList *pMCParticleList(nullptr);
43  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*this, m_mcParticleListName, pMCParticleList));
44 
45  LArMCParticleHelper::GetMCPrimaryMap(pMCParticleList, mcPrimaryMap);
46  }
47 
48  const CaloHitList *pCaloHitList(nullptr);
49  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetCurrentList(*this, pCaloHitList));
50 
51  for (const CaloHit *const pCaloHit : *pCaloHitList)
52  {
53  try
54  {
55  if (!PandoraContentApi::IsAvailable(*this, pCaloHit))
56  continue;
57 
58  this->SimpleMCParticleCollection(pCaloHit, mcPrimaryMap, mcParticleToHitListMap);
59  }
60  catch (const StatusCodeException &)
61  {
62  }
63  }
64 }
std::string m_mcParticleListName
The mc particle list name, required if want to collapse mc particle hierarchy.
void SimpleMCParticleCollection(const pandora::CaloHit *const pCaloHit, const LArMCParticleHelper::MCRelationMap &mcPrimaryMap, MCParticleToHitListMap &mcParticleToHitListMap) const
Simple mc particle collection, using main mc particle associated with each calo hit.
static void GetMCPrimaryMap(const pandora::MCParticleList *const pMCParticleList, MCRelationMap &mcPrimaryMap)
Get mapping from individual mc particles (in a provided list) and their primary parent mc particles...
bool m_collapseToPrimaryMCParticles
Whether to collapse mc particle hierarchies to primary particles.
std::unordered_map< const pandora::MCParticle *, const pandora::MCParticle * > MCRelationMap
StatusCode lar_content::CheatingClusterCreationAlgorithm::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
private

Definition at line 148 of file CheatingClusterCreationAlgorithm.cc.

References m_collapseToPrimaryMCParticles, m_mcParticleListName, and m_particleIdList.

149 {
150  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
151  XmlHelper::ReadValue(xmlHandle, "CollapseToPrimaryMCParticles", m_collapseToPrimaryMCParticles));
152 
154  {
155  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, "MCParticleListName", m_mcParticleListName));
156  }
157 
158  PANDORA_RETURN_RESULT_IF_AND_IF(
159  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadVectorOfValues(xmlHandle, "ParticleIdList", m_particleIdList));
160 
161  return STATUS_CODE_SUCCESS;
162 }
pandora::IntVector m_particleIdList
list of particle ids of MCPFOs to be selected
std::string m_mcParticleListName
The mc particle list name, required if want to collapse mc particle hierarchy.
bool m_collapseToPrimaryMCParticles
Whether to collapse mc particle hierarchies to primary particles.
StatusCode lar_content::CheatingClusterCreationAlgorithm::Run ( )
private

Definition at line 25 of file CheatingClusterCreationAlgorithm.cc.

References CreateClusters(), and GetMCParticleToHitListMap().

26 {
27  MCParticleToHitListMap mcParticleToHitListMap;
28  this->GetMCParticleToHitListMap(mcParticleToHitListMap);
29  this->CreateClusters(mcParticleToHitListMap);
30 
31  return STATUS_CODE_SUCCESS;
32 }
void GetMCParticleToHitListMap(MCParticleToHitListMap &mcParticleToHitListMap) const
Create map between each (primary) MC particle and associated calo hits.
std::unordered_map< const pandora::MCParticle *, pandora::CaloHitList > MCParticleToHitListMap
void CreateClusters(const MCParticleToHitListMap &mcParticleToHitListMap) const
Create clusters based on information in the mc particle to hit list map.
bool lar_content::CheatingClusterCreationAlgorithm::SelectMCParticlesForClustering ( const pandora::MCParticle *const  pMCParticle) const
private

Check whether mc particle is of a type specified for inclusion in cheated clustering.

Parameters
pMCParticlethe mc particle to hit list map
Returns
boolean

Definition at line 91 of file CheatingClusterCreationAlgorithm.cc.

References m_particleIdList.

Referenced by SimpleMCParticleCollection().

92 {
93  if (m_particleIdList.empty())
94  return true;
95 
96  for (const int particleId : m_particleIdList)
97  {
98  if (pMCParticle->GetParticleId() == particleId)
99  return true;
100  }
101 
102  return false;
103 }
pandora::IntVector m_particleIdList
list of particle ids of MCPFOs to be selected
void lar_content::CheatingClusterCreationAlgorithm::SimpleMCParticleCollection ( const pandora::CaloHit *const  pCaloHit,
const LArMCParticleHelper::MCRelationMap mcPrimaryMap,
MCParticleToHitListMap mcParticleToHitListMap 
) const
private

Simple mc particle collection, using main mc particle associated with each calo hit.

Parameters
pCaloHitaddress of the calo hit
mcPrimaryMapthe mapping between mc particles and their parents
mcParticleToHitListMapthe mc particle to hit list map

Definition at line 68 of file CheatingClusterCreationAlgorithm.cc.

References m_collapseToPrimaryMCParticles, and SelectMCParticlesForClustering().

Referenced by GetMCParticleToHitListMap().

70 {
71  const MCParticle *pMCParticle(MCParticleHelper::GetMainMCParticle(pCaloHit));
72 
73  if (!this->SelectMCParticlesForClustering(pMCParticle))
74  return;
75 
77  {
78  LArMCParticleHelper::MCRelationMap::const_iterator primaryIter = mcPrimaryMap.find(pMCParticle);
79 
80  if (mcPrimaryMap.end() == primaryIter)
81  throw StatusCodeException(STATUS_CODE_NOT_FOUND);
82 
83  pMCParticle = primaryIter->second;
84  }
85 
86  mcParticleToHitListMap[pMCParticle].push_back(pCaloHit);
87 }
intermediate_table::const_iterator const_iterator
bool SelectMCParticlesForClustering(const pandora::MCParticle *const pMCParticle) const
Check whether mc particle is of a type specified for inclusion in cheated clustering.
bool m_collapseToPrimaryMCParticles
Whether to collapse mc particle hierarchies to primary particles.

Member Data Documentation

bool lar_content::CheatingClusterCreationAlgorithm::m_collapseToPrimaryMCParticles
private

Whether to collapse mc particle hierarchies to primary particles.

Definition at line 70 of file CheatingClusterCreationAlgorithm.h.

Referenced by GetMCParticleToHitListMap(), ReadSettings(), and SimpleMCParticleCollection().

std::string lar_content::CheatingClusterCreationAlgorithm::m_mcParticleListName
private

The mc particle list name, required if want to collapse mc particle hierarchy.

Definition at line 71 of file CheatingClusterCreationAlgorithm.h.

Referenced by GetMCParticleToHitListMap(), and ReadSettings().

pandora::IntVector lar_content::CheatingClusterCreationAlgorithm::m_particleIdList
private

list of particle ids of MCPFOs to be selected

Definition at line 73 of file CheatingClusterCreationAlgorithm.h.

Referenced by ReadSettings(), and SelectMCParticlesForClustering().


The documentation for this class was generated from the following files: