LArSoft  v06_85_00
Liquid Argon Software toolkit - http://larsoft.org/
lar_content::TwoDSlidingFitConsolidationAlgorithm Class Referenceabstract

TwoDSlidingFitConsolidationAlgorithm class. More...

#include "TwoDSlidingFitConsolidationAlgorithm.h"

Inheritance diagram for lar_content::TwoDSlidingFitConsolidationAlgorithm:
lar_content::TrackConsolidationAlgorithm

Public Member Functions

 TwoDSlidingFitConsolidationAlgorithm ()
 Default constructor. More...
 

Protected Types

typedef std::unordered_map< const pandora::Cluster *, pandora::CaloHitList > ClusterToHitMap
 

Protected Member Functions

pandora::StatusCode Run ()
 
pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
virtual void GetReclusteredHits (const TwoDSlidingFitResultList &slidingFitResultList, const pandora::ClusterVector &showerClusters, ClusterToHitMap &caloHitsToAdd, ClusterToHitMap &caloHitsToRemove) const =0
 Get the list of hits to be added or removed from clusters. More...
 

Private Member Functions

void SortInputClusters (const pandora::ClusterList *const pClusterList, pandora::ClusterVector &trackClusters, pandora::ClusterVector &showerClusters) const
 Sort input cluster list into track-like clusters and shower-like clusters. More...
 
void BuildSlidingLinearFits (const pandora::ClusterVector &trackClusters, TwoDSlidingFitResultList &slidingFitResultList) const
 Apply sliding linear fits to track clusters. More...
 
pandora::StatusCode RemoveHitsFromClusters (const ClusterToHitMap &clustersToRebuild, pandora::ClusterSet &unavailableClusters) const
 Remove hits from clusters. More...
 
pandora::StatusCode AddHitsToClusters (const ClusterToHitMap &clustersToRebuild, pandora::ClusterSet &unavailableClusters) const
 Add hits to clusters. More...
 
pandora::StatusCode RebuildClusters (const ClusterToHitMap &clustersAtStart, const pandora::ClusterSet &unavailableClusters) const
 Re-build clusters. More...
 

Private Attributes

std::string m_reclusteringAlgorithmName
 Name of daughter algorithm to use for cluster re-building. More...
 
float m_minTrackLength
 Minimum length of track clusters to consolidate. More...
 
float m_maxClusterLength
 Maximum length of shower clusters to use in re-building. More...
 
unsigned int m_halfWindowLayers
 Size of layer window for sliding fit results. More...
 

Detailed Description

Member Typedef Documentation

typedef std::unordered_map<const pandora::Cluster*, pandora::CaloHitList> lar_content::TwoDSlidingFitConsolidationAlgorithm::ClusterToHitMap
protected

Definition at line 35 of file TwoDSlidingFitConsolidationAlgorithm.h.

Constructor & Destructor Documentation

lar_content::TwoDSlidingFitConsolidationAlgorithm::TwoDSlidingFitConsolidationAlgorithm ( )

Default constructor.

Definition at line 21 of file TwoDSlidingFitConsolidationAlgorithm.cc.

21  :
22  m_minTrackLength(7.5f),
25 {
26 }
unsigned int m_halfWindowLayers
Size of layer window for sliding fit results.
float m_maxClusterLength
Maximum length of shower clusters to use in re-building.
float m_minTrackLength
Minimum length of track clusters to consolidate.
TFile f
Definition: plotHisto.C:6

Member Function Documentation

StatusCode lar_content::TwoDSlidingFitConsolidationAlgorithm::AddHitsToClusters ( const ClusterToHitMap clustersToRebuild,
pandora::ClusterSet &  unavailableClusters 
) const
private

Add hits to clusters.

Parameters
clustersToRebuildthe list of hits to be added to clusters
unavailableClustersthe list of modified clusters

Definition at line 145 of file TwoDSlidingFitConsolidationAlgorithm.cc.

References lar_content::LArClusterHelper::SortByNHits().

Referenced by Run().

146 {
147  ClusterList clusterList;
148  for (const auto &mapEntry : clustersToExpand) clusterList.push_back(mapEntry.first);
149  clusterList.sort(LArClusterHelper::SortByNHits);
150 
151  for (const Cluster *const pCluster : clusterList)
152  {
153  const CaloHitList &caloHitList(clustersToExpand.at(pCluster));
154 
155  if (caloHitList.empty())
156  continue;
157 
158  if (unavailableClusters.count(pCluster))
159  continue;
160 
161  unavailableClusters.insert(pCluster);
162 
163  for (const CaloHit *const pCaloHit : caloHitList)
164  {
165  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::AddToCluster(*this, pCluster, pCaloHit));
166  }
167  }
168 
169  return STATUS_CODE_SUCCESS;
170 }
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.
void lar_content::TwoDSlidingFitConsolidationAlgorithm::BuildSlidingLinearFits ( const pandora::ClusterVector &  trackClusters,
TwoDSlidingFitResultList slidingFitResultList 
) const
private

Apply sliding linear fits to track clusters.

Parameters
trackClustersthe input vector of track-like clusters
slidingFitResultListthe output list of sliding linear fits

Definition at line 80 of file TwoDSlidingFitConsolidationAlgorithm.cc.

References lar_content::LArGeometryHelper::GetWireZPitch(), and m_halfWindowLayers.

Referenced by Run().

81 {
82  const float slidingFitPitch(LArGeometryHelper::GetWireZPitch(this->GetPandora()));
83 
84  for (ClusterVector::const_iterator iter = trackClusters.begin(), iterEnd = trackClusters.end(); iter != iterEnd; ++iter)
85  {
86  try
87  {
88  const TwoDSlidingFitResult slidingFitResult(*iter, m_halfWindowLayers, slidingFitPitch);
89  slidingFitResultList.push_back(slidingFitResult);
90  }
91  catch (StatusCodeException &statusCodeException)
92  {
93  if (STATUS_CODE_FAILURE == statusCodeException.GetStatusCode())
94  throw statusCodeException;
95  }
96  }
97 }
unsigned int m_halfWindowLayers
Size of layer window for sliding fit results.
static float GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
intermediate_table::const_iterator const_iterator
virtual void lar_content::TwoDSlidingFitConsolidationAlgorithm::GetReclusteredHits ( const TwoDSlidingFitResultList slidingFitResultList,
const pandora::ClusterVector &  showerClusters,
ClusterToHitMap caloHitsToAdd,
ClusterToHitMap caloHitsToRemove 
) const
protectedpure virtual

Get the list of hits to be added or removed from clusters.

Parameters
slidingFitResultListthe list of sliding linear fits to track clusters
showerClustersthe vector of shower clusters
caloHitsToAddthe output map of hits to be added to clusters
caloHitsToRemovethe output map of hits to be removed from clusters

Implemented in lar_content::TrackConsolidationAlgorithm.

Referenced by Run().

StatusCode lar_content::TwoDSlidingFitConsolidationAlgorithm::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
protected

Definition at line 214 of file TwoDSlidingFitConsolidationAlgorithm.cc.

References m_halfWindowLayers, m_maxClusterLength, m_minTrackLength, and m_reclusteringAlgorithmName.

Referenced by lar_content::TrackConsolidationAlgorithm::ReadSettings().

215 {
216  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ProcessAlgorithm(*this, xmlHandle,
217  "ClusterRebuilding", m_reclusteringAlgorithmName));
218 
219  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
220  "MinTrackLength", m_minTrackLength));
221 
222  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
223  "MaxClusterLength", m_maxClusterLength));
224 
225  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
226  "SlidingFitHalfWindow", m_halfWindowLayers));
227 
228  return STATUS_CODE_SUCCESS;
229 }
unsigned int m_halfWindowLayers
Size of layer window for sliding fit results.
float m_maxClusterLength
Maximum length of shower clusters to use in re-building.
float m_minTrackLength
Minimum length of track clusters to consolidate.
std::string m_reclusteringAlgorithmName
Name of daughter algorithm to use for cluster re-building.
StatusCode lar_content::TwoDSlidingFitConsolidationAlgorithm::RebuildClusters ( const ClusterToHitMap clustersAtStart,
const pandora::ClusterSet &  unavailableClusters 
) const
private

Re-build clusters.

Parameters
clustersAtStartthe initial mapping of clusters to hits
unavailableClustersthe list of unavailable clusters

Definition at line 174 of file TwoDSlidingFitConsolidationAlgorithm.cc.

References m_reclusteringAlgorithmName, and lar_content::LArClusterHelper::SortByNHits().

Referenced by Run().

175 {
176  if (clustersToRebuild.empty())
177  return STATUS_CODE_SUCCESS;
178 
179  ClusterVector sortedClusters;
180  for (const auto &mapEntry : clustersToRebuild)
181  {
182  if (!unavailableClusters.count(mapEntry.first))
183  sortedClusters.push_back(mapEntry.first);
184  }
185 
186  std::sort(sortedClusters.begin(), sortedClusters.end(), LArClusterHelper::SortByNHits);
187 
188  for (const Cluster *const pCluster : sortedClusters)
189  {
190  const CaloHitList &caloHitList(clustersToRebuild.at(pCluster));
191  const Cluster *const pClusterToDelete(pCluster);
192 
193  if (caloHitList.empty())
194  continue;
195 
196  std::string currentClusterListName;
197  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetCurrentListName<Cluster>(*this, currentClusterListName));
198  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Delete<Cluster>(*this, pClusterToDelete));
199 
200  const ClusterList *pClusterList = NULL;
201  std::string newClusterListName;
202  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::RunClusteringAlgorithm(*this, m_reclusteringAlgorithmName,
203  pClusterList, newClusterListName));
204 
205  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList<Cluster>(*this, newClusterListName, currentClusterListName));
206  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ReplaceCurrentList<Cluster>(*this, currentClusterListName));
207  }
208 
209  return STATUS_CODE_SUCCESS;
210 }
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.
std::vector< art::Ptr< recob::Cluster > > ClusterVector
std::string m_reclusteringAlgorithmName
Name of daughter algorithm to use for cluster re-building.
StatusCode lar_content::TwoDSlidingFitConsolidationAlgorithm::RemoveHitsFromClusters ( const ClusterToHitMap clustersToRebuild,
pandora::ClusterSet &  unavailableClusters 
) const
private

Remove hits from clusters.

Parameters
clustersToRebuildthe list of hits to be removed from clusters
unavailableClustersthe list of deleted clusters

Definition at line 101 of file TwoDSlidingFitConsolidationAlgorithm.cc.

References lar_content::LArClusterHelper::SortByNHits().

Referenced by Run().

102 {
103  ClusterList clusterList;
104  for (const auto &mapEntry : clustersToContract) clusterList.push_back(mapEntry.first);
105  clusterList.sort(LArClusterHelper::SortByNHits);
106 
107  for (const Cluster *const pCluster : clusterList)
108  {
109  const CaloHitList &caloHitListToRemove(clustersToContract.at(pCluster));
110 
111  if (caloHitListToRemove.empty())
112  continue;
113 
114  if (unavailableClusters.count(pCluster))
115  continue;
116 
117  CaloHitList caloHitList, caloHitListToKeep;
118  pCluster->GetOrderedCaloHitList().FillCaloHitList(caloHitList);
119 
120  for (const CaloHit *const pCaloHit : caloHitList)
121  {
122  if (caloHitListToRemove.end() == std::find(caloHitListToRemove.begin(), caloHitListToRemove.end(), pCaloHit))
123  caloHitListToKeep.push_back(pCaloHit);
124  }
125 
126  if (caloHitListToKeep.empty())
127  {
128  // ATTN clustersToContract and unavailable clusters now contain dangling pointers
129  unavailableClusters.insert(pCluster);
130  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Delete<Cluster>(*this, pCluster));
131  continue;
132  }
133 
134  for (const CaloHit *const pCaloHit : caloHitListToRemove)
135  {
136  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::RemoveFromCluster(*this, pCluster, pCaloHit));
137  }
138  }
139 
140  return STATUS_CODE_SUCCESS;
141 }
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.
StatusCode lar_content::TwoDSlidingFitConsolidationAlgorithm::Run ( )
protected

Definition at line 30 of file TwoDSlidingFitConsolidationAlgorithm.cc.

References AddHitsToClusters(), BuildSlidingLinearFits(), GetReclusteredHits(), RebuildClusters(), RemoveHitsFromClusters(), and SortInputClusters().

31 {
32  const ClusterList *pClusterList = NULL;
33  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetCurrentList(*this, pClusterList));
34 
35  // Select tracks and showers for re-clustering (Note: samples not mutually exclusive)
36  ClusterVector trackClusters, showerClusters;
37  this->SortInputClusters(pClusterList, trackClusters, showerClusters);
38 
39  // Build sliding linear fits from track clusters
40  TwoDSlidingFitResultList slidingFitResultList;
41  this->BuildSlidingLinearFits(trackClusters, slidingFitResultList);
42 
43  // Recluster the hits
44  ClusterToHitMap clustersToExpand, clustersToContract;
45  this->GetReclusteredHits(slidingFitResultList, showerClusters, clustersToExpand, clustersToContract);
46 
47  // Consolidate and re-build clusters
48  ClusterSet unavailableClusters;
49  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->RemoveHitsFromClusters(clustersToContract, unavailableClusters));
50  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->AddHitsToClusters(clustersToExpand, unavailableClusters));
51  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->RebuildClusters(clustersToContract, unavailableClusters));
52 
53  return STATUS_CODE_SUCCESS;
54 }
std::unordered_map< const pandora::Cluster *, pandora::CaloHitList > ClusterToHitMap
void BuildSlidingLinearFits(const pandora::ClusterVector &trackClusters, TwoDSlidingFitResultList &slidingFitResultList) const
Apply sliding linear fits to track clusters.
std::vector< TwoDSlidingFitResult > TwoDSlidingFitResultList
std::vector< art::Ptr< recob::Cluster > > ClusterVector
void SortInputClusters(const pandora::ClusterList *const pClusterList, pandora::ClusterVector &trackClusters, pandora::ClusterVector &showerClusters) const
Sort input cluster list into track-like clusters and shower-like clusters.
virtual void GetReclusteredHits(const TwoDSlidingFitResultList &slidingFitResultList, const pandora::ClusterVector &showerClusters, ClusterToHitMap &caloHitsToAdd, ClusterToHitMap &caloHitsToRemove) const =0
Get the list of hits to be added or removed from clusters.
pandora::StatusCode AddHitsToClusters(const ClusterToHitMap &clustersToRebuild, pandora::ClusterSet &unavailableClusters) const
Add hits to clusters.
pandora::StatusCode RemoveHitsFromClusters(const ClusterToHitMap &clustersToRebuild, pandora::ClusterSet &unavailableClusters) const
Remove hits from clusters.
pandora::StatusCode RebuildClusters(const ClusterToHitMap &clustersAtStart, const pandora::ClusterSet &unavailableClusters) const
Re-build clusters.
void lar_content::TwoDSlidingFitConsolidationAlgorithm::SortInputClusters ( const pandora::ClusterList *const  pClusterList,
pandora::ClusterVector &  trackClusters,
pandora::ClusterVector &  showerClusters 
) const
private

Sort input cluster list into track-like clusters and shower-like clusters.

Parameters
pClusterListthe input cluster list
trackClustersthe output vector of track-like clusters
showerClustersthe output vector of shower-like clusters

Definition at line 58 of file TwoDSlidingFitConsolidationAlgorithm.cc.

References lar_content::LArClusterHelper::GetLengthSquared(), m_maxClusterLength, m_minTrackLength, and lar_content::LArClusterHelper::SortByNHits().

Referenced by Run().

60 {
61  for (ClusterList::const_iterator iter = pClusterList->begin(), iterEnd = pClusterList->end(); iter != iterEnd; ++iter)
62  {
63  const Cluster *const pCluster = *iter;
64 
65  const float thisLengthSquared(LArClusterHelper::GetLengthSquared(pCluster));
66 
67  if (thisLengthSquared < m_maxClusterLength * m_maxClusterLength)
68  showerClusters.push_back(pCluster);
69 
70  if (thisLengthSquared > m_minTrackLength * m_minTrackLength)
71  trackClusters.push_back(pCluster);
72  }
73 
74  std::sort(trackClusters.begin(), trackClusters.end(), LArClusterHelper::SortByNHits);
75  std::sort(showerClusters.begin(), showerClusters.end(), LArClusterHelper::SortByNHits);
76 }
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.
float m_maxClusterLength
Maximum length of shower clusters to use in re-building.
float m_minTrackLength
Minimum length of track clusters to consolidate.
intermediate_table::const_iterator const_iterator
static float GetLengthSquared(const pandora::Cluster *const pCluster)
Get length squared of cluster.

Member Data Documentation

unsigned int lar_content::TwoDSlidingFitConsolidationAlgorithm::m_halfWindowLayers
private

Size of layer window for sliding fit results.

Definition at line 94 of file TwoDSlidingFitConsolidationAlgorithm.h.

Referenced by BuildSlidingLinearFits(), and ReadSettings().

float lar_content::TwoDSlidingFitConsolidationAlgorithm::m_maxClusterLength
private

Maximum length of shower clusters to use in re-building.

Definition at line 93 of file TwoDSlidingFitConsolidationAlgorithm.h.

Referenced by ReadSettings(), and SortInputClusters().

float lar_content::TwoDSlidingFitConsolidationAlgorithm::m_minTrackLength
private

Minimum length of track clusters to consolidate.

Definition at line 92 of file TwoDSlidingFitConsolidationAlgorithm.h.

Referenced by ReadSettings(), and SortInputClusters().

std::string lar_content::TwoDSlidingFitConsolidationAlgorithm::m_reclusteringAlgorithmName
private

Name of daughter algorithm to use for cluster re-building.

Definition at line 91 of file TwoDSlidingFitConsolidationAlgorithm.h.

Referenced by ReadSettings(), and RebuildClusters().


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