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

IsolatedClusterMopUpAlgorithm class. More...

#include "IsolatedClusterMopUpAlgorithm.h"

Inheritance diagram for lar_content::IsolatedClusterMopUpAlgorithm:
lar_content::ClusterMopUpBaseAlgorithm lar_content::MopUpBaseAlgorithm

Public Member Functions

 IsolatedClusterMopUpAlgorithm ()
 Default constructor. More...
 
template<typename T >
const std::string GetListName (const T *const pT) const
 Find the name of the list hosting a specific object. More...
 

Protected Types

typedef std::unordered_map< const pandora::Cluster *, float > AssociationDetails
 
typedef std::unordered_map< const pandora::Cluster *, AssociationDetailsClusterAssociationMap
 

Protected Member Functions

virtual pandora::StatusCode Run ()
 
virtual void GetPfoClusterLists (pandora::ClusterList &clusterListU, pandora::ClusterList &clusterListV, pandora::ClusterList &clusterListW) const
 Get the two dimensional clusters contained in the input pfo list, divided into three different views. More...
 
virtual void GetDaughterClusterLists (pandora::ClusterList &clusterListU, pandora::ClusterList &clusterListV, pandora::ClusterList &clusterListW) const
 Get the two dimensional clusters contained in the input remant/daughter cluster lists, divided into three different views. More...
 
virtual void GetClusterLists (const pandora::ClusterList &inputClusterList, const bool availabilityFlag, pandora::ClusterList &clusterListU, pandora::ClusterList &clusterListV, pandora::ClusterList &clusterListW) const
 Get the two dimensional clusters contained in an input cluster list, divided into three different views. More...
 
virtual void MakeClusterMerges (const ClusterAssociationMap &clusterAssociationMap) const
 Make the cluster merges specified in the cluster association map, using list name information in the cluster list name map. More...
 

Protected Attributes

pandora::StringVector m_pfoListNames
 The list of pfo list names. More...
 
bool m_excludePfosContainingTracks
 Whether to exclude any pfos containing clusters flagged as fixed tracks. More...
 
pandora::StringVector m_daughterListNames
 The list of potential daughter object list names. More...
 

Private Types

typedef std::unordered_map< const pandora::CaloHit *, const pandora::Cluster * > CaloHitToClusterMap
 
typedef KDTreeLinkerAlgo< const pandora::CaloHit *, 2 > HitKDTree2D
 
typedef KDTreeNodeInfoT< const pandora::CaloHit *, 2 > HitKDNode2D
 
typedef std::vector< HitKDNode2DHitKDNode2DList
 

Private Member Functions

void ClusterMopUp (const pandora::ClusterList &pfoClusters, const pandora::ClusterList &remnantClusters) const
 Cluster mop up for a single view. This function is responsible for instructing pandora to make cluster alterations. More...
 
void DissolveClustersToHits (const pandora::ClusterList &clusterList, pandora::CaloHitList &caloHitList) const
 Examine a list of clusters, identify and delete remnants; receive the list of newly available hits. More...
 
void GetCaloHitToClusterMap (const pandora::CaloHitList &caloHitList, const pandora::ClusterList &clusterList, CaloHitToClusterMap &caloHitToClusterMap) const
 Look for isolated hit additions, considering a list of candidate hits and a list of host clusters. More...
 
pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 

Private Attributes

unsigned int m_maxCaloHitsInCluster
 The maximum number of hits in a cluster to be dissolved. More...
 
float m_maxHitClusterDistance
 The maximum hit to cluster distance for isolated hit merging. More...
 
bool m_addHitsAsIsolated
 Whether to add hits to clusters as "isolated" (don't contribute to spatial properties) More...
 

Detailed Description

Member Typedef Documentation

typedef std::unordered_map<const pandora::Cluster *, float> lar_content::ClusterMopUpBaseAlgorithm::AssociationDetails
protectedinherited

Definition at line 71 of file ClusterMopUpBaseAlgorithm.h.

typedef std::unordered_map<const pandora::CaloHit *, const pandora::Cluster *> lar_content::IsolatedClusterMopUpAlgorithm::CaloHitToClusterMap
private

Definition at line 49 of file IsolatedClusterMopUpAlgorithm.h.

typedef std::unordered_map<const pandora::Cluster *, AssociationDetails> lar_content::ClusterMopUpBaseAlgorithm::ClusterAssociationMap
protectedinherited

Definition at line 72 of file ClusterMopUpBaseAlgorithm.h.

typedef KDTreeNodeInfoT<const pandora::CaloHit *, 2> lar_content::IsolatedClusterMopUpAlgorithm::HitKDNode2D
private

Definition at line 64 of file IsolatedClusterMopUpAlgorithm.h.

typedef KDTreeLinkerAlgo<const pandora::CaloHit *, 2> lar_content::IsolatedClusterMopUpAlgorithm::HitKDTree2D
private

Definition at line 63 of file IsolatedClusterMopUpAlgorithm.h.

Constructor & Destructor Documentation

lar_content::IsolatedClusterMopUpAlgorithm::IsolatedClusterMopUpAlgorithm ( )

Default constructor.

Definition at line 23 of file IsolatedClusterMopUpAlgorithm.cc.

References lar_content::ClusterMopUpBaseAlgorithm::m_excludePfosContainingTracks.

23  :
27 {
28  // ATTN Default value differs from base class
30 }
bool m_excludePfosContainingTracks
Whether to exclude any pfos containing clusters flagged as fixed tracks.
unsigned int m_maxCaloHitsInCluster
The maximum number of hits in a cluster to be dissolved.
TFile f
Definition: plotHisto.C:6
bool m_addHitsAsIsolated
Whether to add hits to clusters as "isolated" (don&#39;t contribute to spatial properties) ...
float m_maxHitClusterDistance
The maximum hit to cluster distance for isolated hit merging.

Member Function Documentation

void lar_content::IsolatedClusterMopUpAlgorithm::ClusterMopUp ( const pandora::ClusterList &  pfoClusters,
const pandora::ClusterList &  remnantClusters 
) const
privatevirtual

Cluster mop up for a single view. This function is responsible for instructing pandora to make cluster alterations.

Parameters
pfoClustersthe list of pfo clusters
remnantClustersthe list of remnant clusters

Implements lar_content::ClusterMopUpBaseAlgorithm.

Definition at line 34 of file IsolatedClusterMopUpAlgorithm.cc.

References DissolveClustersToHits(), GetCaloHitToClusterMap(), m_addHitsAsIsolated, and lar_content::LArClusterHelper::SortHitsByPosition().

35 {
36  CaloHitList caloHitList;
37  this->DissolveClustersToHits(remnantClusters, caloHitList);
38 
39  // ATTN remnantClusters now contains dangling pointers
40  CaloHitToClusterMap caloHitToClusterMap;
41  this->GetCaloHitToClusterMap(caloHitList, pfoClusters, caloHitToClusterMap);
42 
43  CaloHitList sortedCaloHitList;
44  for (const auto &mapEntry : caloHitToClusterMap)
45  sortedCaloHitList.push_back(mapEntry.first);
46  sortedCaloHitList.sort(LArClusterHelper::SortHitsByPosition);
47 
48  for (const CaloHit *pCaloHit : sortedCaloHitList)
49  {
51  {
52  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::AddIsolatedToCluster(*this, caloHitToClusterMap.at(pCaloHit), pCaloHit));
53  }
54  else
55  {
56  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::AddToCluster(*this, caloHitToClusterMap.at(pCaloHit), pCaloHit));
57  }
58  }
59 }
std::unordered_map< const pandora::CaloHit *, const pandora::Cluster * > CaloHitToClusterMap
void DissolveClustersToHits(const pandora::ClusterList &clusterList, pandora::CaloHitList &caloHitList) const
Examine a list of clusters, identify and delete remnants; receive the list of newly available hits...
bool m_addHitsAsIsolated
Whether to add hits to clusters as "isolated" (don&#39;t contribute to spatial properties) ...
static bool SortHitsByPosition(const pandora::CaloHit *const pLhs, const pandora::CaloHit *const pRhs)
Sort calo hits by their position (use Z, followed by X, followed by Y)
void GetCaloHitToClusterMap(const pandora::CaloHitList &caloHitList, const pandora::ClusterList &clusterList, CaloHitToClusterMap &caloHitToClusterMap) const
Look for isolated hit additions, considering a list of candidate hits and a list of host clusters...
void lar_content::IsolatedClusterMopUpAlgorithm::DissolveClustersToHits ( const pandora::ClusterList &  clusterList,
pandora::CaloHitList &  caloHitList 
) const
private

Examine a list of clusters, identify and delete remnants; receive the list of newly available hits.

Parameters
clusterListthe list of clusters to consider
caloHitListto receive the list of newly available hits

Definition at line 63 of file IsolatedClusterMopUpAlgorithm.cc.

References lar_content::MopUpBaseAlgorithm::GetListName(), and m_maxCaloHitsInCluster.

Referenced by ClusterMopUp().

64 {
65  for (const Cluster *const pRemnantCluster : clusterList)
66  {
67  if (pRemnantCluster->GetNCaloHits() < m_maxCaloHitsInCluster)
68  {
69  const std::string listNameR(this->GetListName(pRemnantCluster));
70  pRemnantCluster->GetOrderedCaloHitList().FillCaloHitList(caloHitList);
71  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Delete(*this, pRemnantCluster, listNameR));
72  }
73  }
74 }
unsigned int m_maxCaloHitsInCluster
The maximum number of hits in a cluster to be dissolved.
const std::string GetListName(const T *const pT) const
Find the name of the list hosting a specific object.
void lar_content::IsolatedClusterMopUpAlgorithm::GetCaloHitToClusterMap ( const pandora::CaloHitList &  caloHitList,
const pandora::ClusterList &  clusterList,
CaloHitToClusterMap caloHitToClusterMap 
) const
private

Look for isolated hit additions, considering a list of candidate hits and a list of host clusters.

Parameters
caloHitListthe list of hits to consider
clusterListthe list of clusters to consider
caloHitToClusterMapto receive the calo hit to cluster map

Definition at line 78 of file IsolatedClusterMopUpAlgorithm.cc.

References lar_content::KDTreeLinkerAlgo< DATA, DIM >::build(), lar_content::KDTreeNodeInfoT< DATA, DIM >::data, lar_content::fill_and_bound_2d_kd_tree(), lar_content::KDTreeLinkerAlgo< DATA, DIM >::findNearestNeighbour(), lar_content::LArGeometryHelper::GetWirePitchRatio(), and m_maxHitClusterDistance.

Referenced by ClusterMopUp().

80 {
81  CaloHitList allCaloHits;
82  CaloHitToClusterMap hitToParentClusterMap;
83 
84  for (const Cluster *const pCluster : clusterList)
85  {
86  CaloHitList daughterHits;
87  pCluster->GetOrderedCaloHitList().FillCaloHitList(daughterHits);
88  allCaloHits.insert(allCaloHits.end(), daughterHits.begin(), daughterHits.end());
89 
90  for (const CaloHit *const pCaloHit : daughterHits)
91  (void)hitToParentClusterMap.insert(CaloHitToClusterMap::value_type(pCaloHit, pCluster));
92  }
93 
94  HitKDTree2D kdTree;
95  HitKDNode2DList hitKDNode2DList;
96 
97  KDTreeBox hitsBoundingRegion2D(fill_and_bound_2d_kd_tree(allCaloHits, hitKDNode2DList));
98  kdTree.build(hitKDNode2DList, hitsBoundingRegion2D);
99 
100  HitType view{TPC_3D};
101  if (!caloHitList.empty())
102  view = caloHitList.front()->GetHitType();
103  const float ratio{LArGeometryHelper::GetWirePitchRatio(this->GetPandora(), view)};
104  const float maxHitClusterDistanceAdjusted{ratio * m_maxHitClusterDistance};
105 
106  for (const CaloHit *const pCaloHit : caloHitList)
107  {
108  if (!PandoraContentApi::IsAvailable(*this, pCaloHit))
109  throw StatusCodeException(STATUS_CODE_FAILURE);
110 
111  const HitKDNode2D *pResultHit(nullptr);
112  float resultDistance(std::numeric_limits<float>::max());
113  const HitKDNode2D targetHit(pCaloHit, pCaloHit->GetPositionVector().GetX(), pCaloHit->GetPositionVector().GetZ());
114  kdTree.findNearestNeighbour(targetHit, pResultHit, resultDistance);
115 
116  if (pResultHit && (resultDistance < maxHitClusterDistanceAdjusted))
117  (void)caloHitToClusterMap.insert(CaloHitToClusterMap::value_type(pCaloHit, hitToParentClusterMap.at(pResultHit->data)));
118  }
119 }
static float GetWirePitchRatio(const pandora::Pandora &pandora, const pandora::HitType view)
Return the ratio of the wire pitch of the specified view to the minimum wire pitch for the detector...
std::unordered_map< const pandora::CaloHit *, const pandora::Cluster * > CaloHitToClusterMap
KDTreeLinkerAlgo< const pandora::CaloHit *, 2 > HitKDTree2D
KDTreeNodeInfoT< const pandora::CaloHit *, 2 > HitKDNode2D
float m_maxHitClusterDistance
The maximum hit to cluster distance for isolated hit merging.
HitType
Definition: HitType.h:12
KDTreeBox fill_and_bound_2d_kd_tree(const MANAGED_CONTAINER< const T * > &points, std::vector< KDTreeNodeInfoT< const T *, 2 >> &nodes)
fill_and_bound_2d_kd_tree
KDTreeBoxT< 2 > KDTreeBox
void lar_content::ClusterMopUpBaseAlgorithm::GetClusterLists ( const pandora::ClusterList &  inputClusterList,
const bool  availabilityFlag,
pandora::ClusterList &  clusterListU,
pandora::ClusterList &  clusterListV,
pandora::ClusterList &  clusterListW 
) const
protectedvirtualinherited

Get the two dimensional clusters contained in an input cluster list, divided into three different views.

Parameters
inputClusterListthe input cluster list
availabilityFlagonly clusters with matching availability will be considered
clusterListUto receive the list of clusters in the u view
clusterListVto receive the list of clusters in the v view
clusterListWto receive the list of clusters in the w view

Definition at line 82 of file ClusterMopUpBaseAlgorithm.cc.

References lar_content::LArClusterHelper::GetClusterHitType(), and target.

Referenced by lar_content::ClusterMopUpBaseAlgorithm::GetDaughterClusterLists(), and lar_content::ClusterMopUpBaseAlgorithm::GetPfoClusterLists().

84 {
85  for (ClusterList::const_iterator cIter = inputClusterList.begin(), cIterEnd = inputClusterList.end(); cIter != cIterEnd; ++cIter)
86  {
87  const Cluster *const pCluster(*cIter);
88 
89  if (availabilityFlag != pCluster->IsAvailable())
90  continue;
91 
92  const HitType hitType(LArClusterHelper::GetClusterHitType(pCluster));
93 
94  if ((TPC_VIEW_U != hitType) && (TPC_VIEW_V != hitType) && (TPC_VIEW_W != hitType))
95  continue;
96 
97  ClusterList &target((TPC_VIEW_U == hitType) ? clusterListU : (TPC_VIEW_V == hitType) ? clusterListV : clusterListW);
98  target.push_back(pCluster);
99  }
100 }
intermediate_table::const_iterator const_iterator
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
HitType
Definition: HitType.h:12
cout<< "-> Edep in the target
Definition: analysis.C:53
void lar_content::ClusterMopUpBaseAlgorithm::GetDaughterClusterLists ( pandora::ClusterList &  clusterListU,
pandora::ClusterList &  clusterListV,
pandora::ClusterList &  clusterListW 
) const
protectedvirtualinherited

Get the two dimensional clusters contained in the input remant/daughter cluster lists, divided into three different views.

Parameters
clusterListUto receive the list of clusters in the u view
clusterListVto receive the list of clusters in the v view
clusterListWto receive the list of clusters in the w view

Definition at line 67 of file ClusterMopUpBaseAlgorithm.cc.

References lar_content::ClusterMopUpBaseAlgorithm::GetClusterLists(), and lar_content::MopUpBaseAlgorithm::m_daughterListNames.

Referenced by lar_content::ClusterMopUpBaseAlgorithm::Run().

68 {
69  for (const std::string &daughterListName : m_daughterListNames)
70  {
71  const ClusterList *pClusterList(nullptr);
72 
73  if (STATUS_CODE_SUCCESS != PandoraContentApi::GetList(*this, daughterListName, pClusterList))
74  continue;
75 
76  this->GetClusterLists(*pClusterList, true, clusterListU, clusterListV, clusterListW);
77  }
78 }
virtual void GetClusterLists(const pandora::ClusterList &inputClusterList, const bool availabilityFlag, pandora::ClusterList &clusterListU, pandora::ClusterList &clusterListV, pandora::ClusterList &clusterListW) const
Get the two dimensional clusters contained in an input cluster list, divided into three different vie...
pandora::StringVector m_daughterListNames
The list of potential daughter object list names.
template<typename T >
template const std::string lar_content::MopUpBaseAlgorithm::GetListName ( const T *const  pT) const
inherited

Find the name of the list hosting a specific object.

Parameters
pTthe address of the object
Returns
the name of the list

Definition at line 19 of file MopUpBaseAlgorithm.cc.

Referenced by DissolveClustersToHits(), lar_content::ClusterMopUpBaseAlgorithm::MakeClusterMerges(), and lar_content::SlidingConeClusterMopUpAlgorithm::MakeClusterMerges().

20 {
21  std::string currentListName;
22  const MANAGED_CONTAINER<const T *> *pCurrentList(nullptr);
23  (void)PandoraContentApi::GetCurrentList(*this, pCurrentList, currentListName);
24 
25  if (pCurrentList && (pCurrentList->end() != std::find(pCurrentList->begin(), pCurrentList->end(), pT)))
26  return currentListName;
27 
28  for (const std::string &listName : m_daughterListNames)
29  {
30  const MANAGED_CONTAINER<const T *> *pList(nullptr);
31  (void)PandoraContentApi::GetList(*this, listName, pList);
32 
33  if (pList && (pList->end() != std::find(pList->begin(), pList->end(), pT)))
34  return listName;
35  }
36 
37  throw StatusCodeException(STATUS_CODE_NOT_FOUND);
38 }
pandora::StringVector m_daughterListNames
The list of potential daughter object list names.
void lar_content::ClusterMopUpBaseAlgorithm::GetPfoClusterLists ( pandora::ClusterList &  clusterListU,
pandora::ClusterList &  clusterListV,
pandora::ClusterList &  clusterListW 
) const
protectedvirtualinherited

Get the two dimensional clusters contained in the input pfo list, divided into three different views.

Parameters
clusterListUto receive the list of clusters in the u view
clusterListVto receive the list of clusters in the v view
clusterListWto receive the list of clusters in the w view

Definition at line 45 of file ClusterMopUpBaseAlgorithm.cc.

References lar_content::ClusterMopUpBaseAlgorithm::GetClusterLists(), lar_content::LArPfoHelper::IsTrack(), lar_content::ClusterMopUpBaseAlgorithm::m_excludePfosContainingTracks, and lar_content::ClusterMopUpBaseAlgorithm::m_pfoListNames.

Referenced by lar_content::ClusterMopUpBaseAlgorithm::Run().

46 {
47  for (StringVector::const_iterator sIter = m_pfoListNames.begin(), sIterEnd = m_pfoListNames.end(); sIter != sIterEnd; ++sIter)
48  {
49  const PfoList *pPfoList = NULL;
50  if (STATUS_CODE_SUCCESS != PandoraContentApi::GetList(*this, *sIter, pPfoList))
51  continue;
52 
53  for (PfoList::const_iterator pIter = pPfoList->begin(), pIterEnd = pPfoList->end(); pIter != pIterEnd; ++pIter)
54  {
55  const ParticleFlowObject *const pPfo = *pIter;
56 
58  continue;
59 
60  this->GetClusterLists(pPfo->GetClusterList(), false, clusterListU, clusterListV, clusterListW);
61  }
62  }
63 }
virtual void GetClusterLists(const pandora::ClusterList &inputClusterList, const bool availabilityFlag, pandora::ClusterList &clusterListU, pandora::ClusterList &clusterListV, pandora::ClusterList &clusterListW) const
Get the two dimensional clusters contained in an input cluster list, divided into three different vie...
bool m_excludePfosContainingTracks
Whether to exclude any pfos containing clusters flagged as fixed tracks.
intermediate_table::const_iterator const_iterator
static bool IsTrack(const pandora::ParticleFlowObject *const pPfo)
Return track flag based on Pfo Particle ID.
pandora::StringVector m_pfoListNames
The list of pfo list names.
void lar_content::ClusterMopUpBaseAlgorithm::MakeClusterMerges ( const ClusterAssociationMap clusterAssociationMap) const
protectedvirtualinherited

Make the cluster merges specified in the cluster association map, using list name information in the cluster list name map.

Parameters
clusterAssociationMapthe cluster association map

Definition at line 104 of file ClusterMopUpBaseAlgorithm.cc.

References lar_content::MopUpBaseAlgorithm::GetListName(), and lar_content::LArClusterHelper::SortByNHits().

Referenced by lar_content::ConeClusterMopUpAlgorithm::ClusterMopUp(), lar_content::NearbyClusterMopUpAlgorithm::ClusterMopUp(), and lar_content::BoundedClusterMopUpAlgorithm::ClusterMopUp().

105 {
106  ClusterVector sortedRemnantClusters;
107  for (const auto &remnantMapEntry : clusterAssociationMap)
108  sortedRemnantClusters.push_back(remnantMapEntry.first);
109  std::sort(sortedRemnantClusters.begin(), sortedRemnantClusters.end(), LArClusterHelper::SortByNHits);
110 
111  for (const Cluster *const pRemnantCluster : sortedRemnantClusters)
112  {
113  const AssociationDetails &associationDetails(clusterAssociationMap.at(pRemnantCluster));
114  const Cluster *pBestPfoCluster(nullptr);
115  float bestFigureOfMerit(-std::numeric_limits<float>::max());
116 
117  ClusterVector sortedPfoClusters;
118  for (const auto &pfoMapEntry : associationDetails)
119  sortedPfoClusters.push_back(pfoMapEntry.first);
120  std::sort(sortedPfoClusters.begin(), sortedPfoClusters.end(), LArClusterHelper::SortByNHits);
121 
122  for (const Cluster *const pPfoCluster : sortedPfoClusters)
123  {
124  const float figureOfMerit(associationDetails.at(pPfoCluster));
125 
126  if (figureOfMerit > bestFigureOfMerit)
127  {
128  pBestPfoCluster = pPfoCluster;
129  bestFigureOfMerit = figureOfMerit;
130  }
131  }
132 
133  if (!pBestPfoCluster)
134  continue;
135 
136  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=,
137  PandoraContentApi::MergeAndDeleteClusters(
138  *this, pBestPfoCluster, pRemnantCluster, this->GetListName(pBestPfoCluster), this->GetListName(pRemnantCluster)));
139  }
140 }
static bool SortByNHits(const pandora::Cluster *const pLhs, const pandora::Cluster *const pRhs)
Sort clusters by number of hits, then layer span, then inner layer, then position, then pulse-height.
const std::string GetListName(const T *const pT) const
Find the name of the list hosting a specific object.
std::unordered_map< const pandora::Cluster *, float > AssociationDetails
std::vector< art::Ptr< recob::Cluster > > ClusterVector
StatusCode lar_content::IsolatedClusterMopUpAlgorithm::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
privatevirtual

Reimplemented from lar_content::ClusterMopUpBaseAlgorithm.

Definition at line 123 of file IsolatedClusterMopUpAlgorithm.cc.

References m_addHitsAsIsolated, m_maxCaloHitsInCluster, m_maxHitClusterDistance, and lar_content::ClusterMopUpBaseAlgorithm::ReadSettings().

124 {
125  PANDORA_RETURN_RESULT_IF_AND_IF(
126  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxCaloHitsInCluster", m_maxCaloHitsInCluster));
127 
128  PANDORA_RETURN_RESULT_IF_AND_IF(
129  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxHitClusterDistance", m_maxHitClusterDistance));
130 
131  PANDORA_RETURN_RESULT_IF_AND_IF(
132  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "AddHitsAsIsolated", m_addHitsAsIsolated));
133 
134  return ClusterMopUpBaseAlgorithm::ReadSettings(xmlHandle);
135 }
unsigned int m_maxCaloHitsInCluster
The maximum number of hits in a cluster to be dissolved.
virtual pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
bool m_addHitsAsIsolated
Whether to add hits to clusters as "isolated" (don&#39;t contribute to spatial properties) ...
float m_maxHitClusterDistance
The maximum hit to cluster distance for isolated hit merging.
StatusCode lar_content::ClusterMopUpBaseAlgorithm::Run ( )
protectedvirtualinherited

Definition at line 28 of file ClusterMopUpBaseAlgorithm.cc.

References lar_content::ClusterMopUpBaseAlgorithm::ClusterMopUp(), lar_content::ClusterMopUpBaseAlgorithm::GetDaughterClusterLists(), and lar_content::ClusterMopUpBaseAlgorithm::GetPfoClusterLists().

29 {
30  ClusterList pfoClusterListU, pfoClusterListV, pfoClusterListW;
31  this->GetPfoClusterLists(pfoClusterListU, pfoClusterListV, pfoClusterListW);
32 
33  ClusterList daughterClusterListU, daughterClusterListV, daughterClusterListW;
34  this->GetDaughterClusterLists(daughterClusterListU, daughterClusterListV, daughterClusterListW);
35 
36  this->ClusterMopUp(pfoClusterListU, daughterClusterListU);
37  this->ClusterMopUp(pfoClusterListV, daughterClusterListV);
38  this->ClusterMopUp(pfoClusterListW, daughterClusterListW);
39 
40  return STATUS_CODE_SUCCESS;
41 }
virtual void GetPfoClusterLists(pandora::ClusterList &clusterListU, pandora::ClusterList &clusterListV, pandora::ClusterList &clusterListW) const
Get the two dimensional clusters contained in the input pfo list, divided into three different views...
virtual void ClusterMopUp(const pandora::ClusterList &pfoClusters, const pandora::ClusterList &remnantClusters) const =0
Cluster mop up for a single view. This function is responsible for instructing pandora to make cluste...
virtual void GetDaughterClusterLists(pandora::ClusterList &clusterListU, pandora::ClusterList &clusterListV, pandora::ClusterList &clusterListW) const
Get the two dimensional clusters contained in the input remant/daughter cluster lists, divided into three different views.

Member Data Documentation

bool lar_content::IsolatedClusterMopUpAlgorithm::m_addHitsAsIsolated
private

Whether to add hits to clusters as "isolated" (don't contribute to spatial properties)

Definition at line 69 of file IsolatedClusterMopUpAlgorithm.h.

Referenced by ClusterMopUp(), and ReadSettings().

pandora::StringVector lar_content::MopUpBaseAlgorithm::m_daughterListNames
protectedinherited
bool lar_content::ClusterMopUpBaseAlgorithm::m_excludePfosContainingTracks
protectedinherited

Whether to exclude any pfos containing clusters flagged as fixed tracks.

Definition at line 84 of file ClusterMopUpBaseAlgorithm.h.

Referenced by lar_content::ClusterMopUpBaseAlgorithm::GetPfoClusterLists(), IsolatedClusterMopUpAlgorithm(), and lar_content::ClusterMopUpBaseAlgorithm::ReadSettings().

unsigned int lar_content::IsolatedClusterMopUpAlgorithm::m_maxCaloHitsInCluster
private

The maximum number of hits in a cluster to be dissolved.

Definition at line 67 of file IsolatedClusterMopUpAlgorithm.h.

Referenced by DissolveClustersToHits(), and ReadSettings().

float lar_content::IsolatedClusterMopUpAlgorithm::m_maxHitClusterDistance
private

The maximum hit to cluster distance for isolated hit merging.

Definition at line 68 of file IsolatedClusterMopUpAlgorithm.h.

Referenced by GetCaloHitToClusterMap(), and ReadSettings().

pandora::StringVector lar_content::ClusterMopUpBaseAlgorithm::m_pfoListNames
protectedinherited

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