LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
ClusterCharacterisationBaseAlgorithm.cc
Go to the documentation of this file.
1 
9 #include "Pandora/AlgorithmHeaders.h"
10 
13 
15 
16 using namespace pandora;
17 
18 namespace lar_content
19 {
20 
21 ClusterCharacterisationBaseAlgorithm::ClusterCharacterisationBaseAlgorithm() :
22  m_zeroMode(false),
23  m_overwriteExistingId(false),
24  m_useUnavailableClusters(false)
25 {
26 }
27 
28 //------------------------------------------------------------------------------------------------------------------------------------------
29 
31 {
32 }
33 
34 //------------------------------------------------------------------------------------------------------------------------------------------
35 
37 {
38  for (const std::string &clusterListName : m_inputClusterListNames)
39  {
40  const ClusterList *pClusterList = NULL;
41  PANDORA_RETURN_RESULT_IF_AND_IF(
42  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_INITIALIZED, !=, PandoraContentApi::GetList(*this, clusterListName, pClusterList));
43 
44  if (!pClusterList || pClusterList->empty())
45  {
46  if (PandoraContentApi::GetSettings(*this)->ShouldDisplayAlgorithmInfo())
47  std::cout << "ClusterCharacterisationBaseAlgorithm: unable to find cluster list " << clusterListName << std::endl;
48 
49  continue;
50  }
51 
52  if (m_zeroMode)
53  {
54  for (const Cluster *const pCluster : *pClusterList)
55  {
56  PandoraContentApi::Cluster::Metadata metadata;
57  metadata.m_particleId = UNKNOWN_PARTICLE_TYPE;
58  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Cluster::AlterMetadata(*this, pCluster, metadata));
59  }
60 
61  return STATUS_CODE_SUCCESS;
62  }
63 
64  for (const Cluster *const pCluster : *pClusterList)
65  {
66  if (!m_overwriteExistingId && (UNKNOWN_PARTICLE_TYPE != pCluster->GetParticleId()))
67  continue;
68 
69  if (!m_useUnavailableClusters && !PandoraContentApi::IsAvailable(*this, pCluster))
70  continue;
71 
72  PandoraContentApi::Cluster::Metadata metadata;
73 
74  if (this->IsClearTrack(pCluster))
75  {
76  metadata.m_particleId = MU_MINUS;
77  }
78  else
79  {
80  metadata.m_particleId = E_MINUS;
81  }
82 
83  if (pCluster->GetParticleId() != metadata.m_particleId.Get())
84  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Cluster::AlterMetadata(*this, pCluster, metadata));
85  }
86  }
87 
88  return STATUS_CODE_SUCCESS;
89 }
90 
91 //------------------------------------------------------------------------------------------------------------------------------------------
92 
93 StatusCode ClusterCharacterisationBaseAlgorithm::ReadSettings(const TiXmlHandle xmlHandle)
94 {
95  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadVectorOfValues(xmlHandle, "InputClusterListNames", m_inputClusterListNames));
96 
97  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "ZeroMode", m_zeroMode));
98 
99  PANDORA_RETURN_RESULT_IF_AND_IF(
100  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "OverwriteExistingId", m_overwriteExistingId));
101 
102  PANDORA_RETURN_RESULT_IF_AND_IF(
103  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "UseUnavailableClusters", m_useUnavailableClusters));
104 
105  return STATUS_CODE_SUCCESS;
106 }
107 
108 } // namespace lar_content
Header file for the cluster characterisation base algorithm class.
bool m_overwriteExistingId
Whether to consider any clusters that already have an assigned particle id.
Header file for the geometry helper class.
bool m_useUnavailableClusters
Whether to consider clusters that are already constituents of a pfo.
Header file for the cluster helper class.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
pandora::StringVector m_inputClusterListNames
The names of the input cluster lists.
bool m_zeroMode
Whether to zero all existing cluster particle id, overrides all other parameters. ...
virtual bool IsClearTrack(const pandora::Cluster *const pCluster) const =0
Whether cluster is identified as a clear track.