LArSoft  v06_85_00
Liquid Argon Software toolkit - http://larsoft.org/
lar_content::ThreeDTracksBaseAlgorithm< T > Class Template Referenceabstract

ThreeDTransverseTracksAlgorithm class. More...

#include "ThreeDTracksBaseAlgorithm.h"

Inheritance diagram for lar_content::ThreeDTracksBaseAlgorithm< T >:
lar_content::ThreeDBaseAlgorithm< T >

Public Types

typedef OverlapTensor< T > TensorType
 

Public Member Functions

 ThreeDTracksBaseAlgorithm ()
 Default constructor. More...
 
virtual ~ThreeDTracksBaseAlgorithm ()
 Destructor. More...
 
const TwoDSlidingFitResultGetCachedSlidingFitResult (const pandora::Cluster *const pCluster) const
 Get a sliding fit result from the algorithm cache. More...
 
unsigned int GetSlidingFitWindow () const
 Get the layer window for the sliding linear fits. More...
 
virtual bool MakeClusterSplits (const SplitPositionMap &splitPositionMap)
 Make cluster splits. More...
 
virtual bool MakeClusterSplit (const pandora::CartesianVector &splitPosition, const pandora::Cluster *&pCurrentCluster, const pandora::Cluster *&pLowXCluster, const pandora::Cluster *&pHighXCluster) const
 Make a cluster split. More...
 
virtual void UpdateForNewCluster (const pandora::Cluster *const pNewCluster)
 Update to reflect addition of a new cluster to the problem space. More...
 
virtual void UpdateUponDeletion (const pandora::Cluster *const pDeletedCluster)
 Update to reflect cluster deletion. More...
 
virtual void SelectInputClusters (const pandora::ClusterList *const pInputClusterList, pandora::ClusterList &selectedClusterList) const
 Select a subset of input clusters for processing in this algorithm. More...
 
virtual void SetPfoParameters (const ProtoParticle &protoParticle, PandoraContentApi::ParticleFlowObject::Parameters &pfoParameters) const
 Calculate Pfo properties from proto particle. More...
 
virtual bool CreateThreeDParticles (const ProtoParticleVector &protoParticleVector)
 Create particles using findings from recent algorithm processing. More...
 
virtual bool MakeClusterMerges (const ClusterMergeMap &clusterMergeMap)
 Merge clusters together. More...
 
virtual void RemoveUnavailableTensorElements ()
 Update tensor to remove all elements that have been added to pfos and so are unavailable. More...
 
const pandora::ClusterList & GetInputClusterListU () const
 Get the input u cluster list. More...
 
const pandora::ClusterList & GetInputClusterListV () const
 Get the input v cluster list. More...
 
const pandora::ClusterList & GetInputClusterListW () const
 Get the input w cluster list. More...
 
const pandora::ClusterList & GetSelectedClusterListU () const
 Get the selected u cluster list. More...
 
const pandora::ClusterList & GetSelectedClusterListV () const
 Get the selected v cluster list. More...
 
const pandora::ClusterList & GetSelectedClusterListW () const
 Get the selected w cluster list. More...
 
const std::string & GetClusterListNameU () const
 Get the name of the u cluster list. More...
 
const std::string & GetClusterListNameV () const
 Get the name of the v cluster list. More...
 
const std::string & GetClusterListNameW () const
 Get the name of the w cluster list. More...
 

Static Public Member Functions

static bool SortSplitPositions (const pandora::CartesianVector &lhs, const pandora::CartesianVector &rhs)
 Sort split position cartesian vectors by increasing x coordinate. More...
 

Protected Member Functions

virtual void PreparationStep ()
 Perform any preparatory steps required, e.g. caching expensive fit results for clusters. More...
 
virtual void PreparationStep (pandora::ClusterList &clusterList)
 Preparation step for a specific cluster list. More...
 
virtual void TidyUp ()
 Tidy member variables in derived class. More...
 
void AddToSlidingFitCache (const pandora::Cluster *const pCluster)
 Add a new sliding fit result, for the specified cluster, to the algorithm cache. More...
 
void RemoveFromSlidingFitCache (const pandora::Cluster *const pCluster)
 Remova an existing sliding fit result, for the specified cluster, from the algorithm cache. More...
 
virtual pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
virtual void SelectAllInputClusters ()
 Select a subset of input clusters for processing in this algorithm. More...
 
virtual void PerformMainLoop ()
 Main loop over cluster combinations in order to populate the tensor. Responsible for calling CalculateOverlapResult. More...
 
virtual void CalculateOverlapResult (const pandora::Cluster *const pClusterU, const pandora::Cluster *const pClusterV, const pandora::Cluster *const pClusterW)=0
 Calculate cluster overlap result and store in tensor. More...
 
virtual void ExamineTensor ()=0
 Examine contents of tensor, collect together best-matching 2D particles and modify clusters as required. More...
 

Protected Attributes

unsigned int m_slidingFitWindow
 The layer window for the sliding linear fits. More...
 
TwoDSlidingFitResultMap m_slidingFitResultMap
 The sliding fit result map. More...
 
unsigned int m_minClusterCaloHits
 The min number of hits in base cluster selection method. More...
 
float m_minClusterLengthSquared
 The min length (squared) in base cluster selection method. More...
 
const pandora::ClusterList * m_pInputClusterListU
 Address of the input cluster list U. More...
 
const pandora::ClusterList * m_pInputClusterListV
 Address of the input cluster list V. More...
 
const pandora::ClusterList * m_pInputClusterListW
 Address of the input cluster list W. More...
 
pandora::ClusterList m_clusterListU
 The selected modified cluster list U. More...
 
pandora::ClusterList m_clusterListV
 The selected modified cluster list V. More...
 
pandora::ClusterList m_clusterListW
 The selected modified cluster list W. More...
 
TensorType m_overlapTensor
 The overlap tensor. More...
 

Detailed Description

template<typename T>
class lar_content::ThreeDTracksBaseAlgorithm< T >

ThreeDTransverseTracksAlgorithm class.

Definition at line 28 of file ThreeDTracksBaseAlgorithm.h.

Member Typedef Documentation

template<typename T>
typedef OverlapTensor<T> lar_content::ThreeDBaseAlgorithm< T >::TensorType
inherited

Definition at line 45 of file ThreeDBaseAlgorithm.h.

Constructor & Destructor Documentation

Default constructor.

Definition at line 25 of file ThreeDTracksBaseAlgorithm.cc.

25  :
29 {
30 }
TFile f
Definition: plotHisto.C:6
unsigned int m_minClusterCaloHits
The min number of hits in base cluster selection method.
unsigned int m_slidingFitWindow
The layer window for the sliding linear fits.
float m_minClusterLengthSquared
The min length (squared) in base cluster selection method.
template<typename T >
lar_content::ThreeDTracksBaseAlgorithm< T >::~ThreeDTracksBaseAlgorithm ( )
virtual

Destructor.

Definition at line 35 of file ThreeDTracksBaseAlgorithm.cc.

36 {
37 }

Member Function Documentation

template<typename T>
void lar_content::ThreeDTracksBaseAlgorithm< T >::AddToSlidingFitCache ( const pandora::Cluster *const  pCluster)
protected

Add a new sliding fit result, for the specified cluster, to the algorithm cache.

Parameters
pClusteraddress of the relevant cluster

Definition at line 280 of file ThreeDTracksBaseAlgorithm.cc.

References lar_content::LArGeometryHelper::GetWireZPitch(), lar_content::ThreeDTracksBaseAlgorithm< T >::m_slidingFitResultMap, and lar_content::ThreeDTracksBaseAlgorithm< T >::m_slidingFitWindow.

Referenced by lar_content::ThreeDTracksBaseAlgorithm< T >::PreparationStep(), and lar_content::ThreeDTracksBaseAlgorithm< T >::UpdateForNewCluster().

281 {
282  const float slidingFitPitch(LArGeometryHelper::GetWireZPitch(this->GetPandora()));
283  const TwoDSlidingFitResult slidingFitResult(pCluster, m_slidingFitWindow, slidingFitPitch);
284 
285  if (!m_slidingFitResultMap.insert(TwoDSlidingFitResultMap::value_type(pCluster, slidingFitResult)).second)
286  throw StatusCodeException(STATUS_CODE_FAILURE);
287 }
static float GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
TwoDSlidingFitResultMap m_slidingFitResultMap
The sliding fit result map.
unsigned int m_slidingFitWindow
The layer window for the sliding linear fits.
template<typename T>
virtual void lar_content::ThreeDBaseAlgorithm< T >::CalculateOverlapResult ( const pandora::Cluster *const  pClusterU,
const pandora::Cluster *const  pClusterV,
const pandora::Cluster *const  pClusterW 
)
protectedpure virtualinherited

Calculate cluster overlap result and store in tensor.

Parameters
pClusterUaddress of U view cluster
pClusterVaddress of V view cluster
pClusterWaddress of W view cluster

Implemented in lar_content::ThreeDShowersAlgorithm, lar_content::ThreeDTrackFragmentsAlgorithm, lar_content::ThreeDTransverseTracksAlgorithm, lar_content::ThreeDRemnantsAlgorithm, and lar_content::ThreeDLongitudinalTracksAlgorithm.

Referenced by lar_content::ThreeDBaseAlgorithm< T >::PerformMainLoop(), and lar_content::ThreeDBaseAlgorithm< T >::UpdateForNewCluster().

template<typename T >
bool lar_content::ThreeDBaseAlgorithm< T >::CreateThreeDParticles ( const ProtoParticleVector protoParticleVector)
virtualinherited

Create particles using findings from recent algorithm processing.

Parameters
protoParticleVectorthe proto particle vector
whetherparticles were created

Definition at line 42 of file ThreeDBaseAlgorithm.cc.

References lar_content::ThreeDBaseAlgorithm< T >::m_outputPfoListName, and lar_content::ThreeDBaseAlgorithm< T >::SetPfoParameters().

Referenced by lar_content::ClearRemnantsTool::CreateThreeDParticles(), lar_content::ClearTracksTool::CreateThreeDParticles(), lar_content::ClearLongitudinalTracksTool::CreateThreeDParticles(), lar_content::ClearTrackFragmentsTool::FindTrackFragments(), lar_content::SimpleShowersTool::Run(), lar_content::MissingTrackTool::Run(), lar_content::ConnectedRemnantsTool::Run(), lar_content::MopUpRemnantsTool::Run(), lar_content::MatchedEndPointsTool::Run(), lar_content::TracksCrossingGapsTool::Run(), lar_content::MissingTrackSegmentTool::Run(), lar_content::LongTracksTool::Run(), and lar_content::ClearShowersTool::Run().

43 {
44  bool particlesMade(false);
45  const PfoList *pPfoList = NULL; std::string pfoListName;
46  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::CreateTemporaryListAndSetCurrent(*this, pPfoList, pfoListName));
47 
48  for (typename ProtoParticleVector::const_iterator iter = protoParticleVector.begin(), iterEnd = protoParticleVector.end(); iter != iterEnd; ++iter)
49  {
50  PandoraContentApi::ParticleFlowObject::Parameters pfoParameters;
51  this->SetPfoParameters(*iter, pfoParameters);
52 
53  const ParticleFlowObject *pPfo(NULL);
54  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::Create(*this, pfoParameters, pPfo));
55  particlesMade = true;
56  }
57 
58  if (!pPfoList->empty())
59  {
60  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList<Pfo>(*this, m_outputPfoListName));
61  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ReplaceCurrentList<Pfo>(*this, m_outputPfoListName));
62  }
63 
64  return particlesMade;
65 }
intermediate_table::const_iterator const_iterator
virtual void SetPfoParameters(const ProtoParticle &protoParticle, PandoraContentApi::ParticleFlowObject::Parameters &pfoParameters) const =0
Calculate Pfo properties from proto particle.
std::string m_outputPfoListName
The output pfo list name.
template<typename T>
virtual void lar_content::ThreeDBaseAlgorithm< T >::ExamineTensor ( )
protectedpure virtualinherited
template<typename T>
const TwoDSlidingFitResult & lar_content::ThreeDTracksBaseAlgorithm< T >::GetCachedSlidingFitResult ( const pandora::Cluster *const  pCluster) const
template<typename T >
const std::string & lar_content::ThreeDBaseAlgorithm< T >::GetClusterListNameU ( ) const
inlineinherited
template<typename T >
const std::string & lar_content::ThreeDBaseAlgorithm< T >::GetClusterListNameV ( ) const
inlineinherited
template<typename T >
const std::string & lar_content::ThreeDBaseAlgorithm< T >::GetClusterListNameW ( ) const
inlineinherited
template<typename T >
const pandora::ClusterList & lar_content::ThreeDBaseAlgorithm< T >::GetInputClusterListU ( ) const
inlineinherited

Get the input u cluster list.

Definition at line 214 of file ThreeDBaseAlgorithm.h.

Referenced by lar_content::MissingTrackSegmentTool::GetCandidateClusters(), lar_content::TransverseTensorVisualizationTool::Run(), and lar_content::ShowerTensorVisualizationTool::Run().

215 {
216  if (NULL == m_pInputClusterListU)
217  throw pandora::StatusCodeException(pandora::STATUS_CODE_NOT_INITIALIZED);
218 
219  return (*m_pInputClusterListU);
220 }
const pandora::ClusterList * m_pInputClusterListU
Address of the input cluster list U.
template<typename T >
const pandora::ClusterList & lar_content::ThreeDBaseAlgorithm< T >::GetInputClusterListV ( ) const
inlineinherited

Get the input v cluster list.

Definition at line 225 of file ThreeDBaseAlgorithm.h.

Referenced by lar_content::MissingTrackSegmentTool::GetCandidateClusters(), lar_content::TransverseTensorVisualizationTool::Run(), and lar_content::ShowerTensorVisualizationTool::Run().

226 {
227  if (NULL == m_pInputClusterListV)
228  throw pandora::StatusCodeException(pandora::STATUS_CODE_NOT_INITIALIZED);
229 
230  return (*m_pInputClusterListV);
231 }
const pandora::ClusterList * m_pInputClusterListV
Address of the input cluster list V.
template<typename T >
const pandora::ClusterList & lar_content::ThreeDBaseAlgorithm< T >::GetInputClusterListW ( ) const
inlineinherited

Get the input w cluster list.

Definition at line 236 of file ThreeDBaseAlgorithm.h.

Referenced by lar_content::MissingTrackSegmentTool::GetCandidateClusters(), lar_content::TransverseTensorVisualizationTool::Run(), and lar_content::ShowerTensorVisualizationTool::Run().

237 {
238  if (NULL == m_pInputClusterListW)
239  throw pandora::StatusCodeException(pandora::STATUS_CODE_NOT_INITIALIZED);
240 
241  return (*m_pInputClusterListW);
242 }
const pandora::ClusterList * m_pInputClusterListW
Address of the input cluster list W.
template<typename T >
const pandora::ClusterList & lar_content::ThreeDBaseAlgorithm< T >::GetSelectedClusterListU ( ) const
inlineinherited

Get the selected u cluster list.

Definition at line 247 of file ThreeDBaseAlgorithm.h.

References lar_content::ProtoParticle::m_clusterListU.

248 {
249  return m_clusterListU;
250 }
pandora::ClusterList m_clusterListU
The selected modified cluster list U.
template<typename T >
const pandora::ClusterList & lar_content::ThreeDBaseAlgorithm< T >::GetSelectedClusterListV ( ) const
inlineinherited

Get the selected v cluster list.

Definition at line 255 of file ThreeDBaseAlgorithm.h.

References lar_content::ProtoParticle::m_clusterListV.

256 {
257  return m_clusterListV;
258 }
pandora::ClusterList m_clusterListV
The selected modified cluster list V.
template<typename T >
const pandora::ClusterList & lar_content::ThreeDBaseAlgorithm< T >::GetSelectedClusterListW ( ) const
inlineinherited

Get the selected w cluster list.

Definition at line 263 of file ThreeDBaseAlgorithm.h.

References lar_content::ProtoParticle::m_clusterListW.

264 {
265  return m_clusterListW;
266 }
pandora::ClusterList m_clusterListW
The selected modified cluster list W.
template<typename T >
unsigned int lar_content::ThreeDTracksBaseAlgorithm< T >::GetSlidingFitWindow ( ) const
inline

Get the layer window for the sliding linear fits.

Returns
the layer window for the sliding linear fits

Definition at line 128 of file ThreeDTracksBaseAlgorithm.h.

References lar_content::ThreeDTracksBaseAlgorithm< T >::m_slidingFitWindow.

Referenced by lar_content::MissingTrackSegmentTool::GetSlidingFitResultMap().

129 {
130  return m_slidingFitWindow;
131 }
unsigned int m_slidingFitWindow
The layer window for the sliding linear fits.
template<typename T >
bool lar_content::ThreeDBaseAlgorithm< T >::MakeClusterMerges ( const ClusterMergeMap clusterMergeMap)
virtualinherited

Merge clusters together.

Parameters
clusterMergeMapthe cluster merge map
Returns
whether changes to the tensor have been made

Definition at line 70 of file ThreeDBaseAlgorithm.cc.

References lar_content::LArClusterHelper::GetClusterHitType(), lar_content::ThreeDBaseAlgorithm< T >::GetClusterListNameU(), lar_content::ThreeDBaseAlgorithm< T >::GetClusterListNameV(), lar_content::ThreeDBaseAlgorithm< T >::GetClusterListNameW(), lar_content::LArClusterHelper::SortByNHits(), lar_content::ThreeDBaseAlgorithm< T >::UpdateForNewCluster(), and lar_content::ThreeDBaseAlgorithm< T >::UpdateUponDeletion().

Referenced by lar_content::SplitShowersTool::ApplyChanges(), lar_content::ThreeDKinkBaseTool::ApplyChanges(), lar_content::ConnectedRemnantsTool::Run(), and lar_content::MissingTrackSegmentTool::Run().

71 {
72  ClusterSet deletedClusters;
73 
74  ClusterList parentClusters;
75  for (const auto &mapEntry : clusterMergeMap) parentClusters.push_back(mapEntry.first);
76  parentClusters.sort(LArClusterHelper::SortByNHits);
77 
78  for (const Cluster *const pParentCluster : parentClusters)
79  {
80  const HitType hitType(LArClusterHelper::GetClusterHitType(pParentCluster));
81  const std::string clusterListName((TPC_VIEW_U == hitType) ? this->GetClusterListNameU() : (TPC_VIEW_V == hitType) ? this->GetClusterListNameV() : this->GetClusterListNameW());
82 
83  if (!((TPC_VIEW_U == hitType) || (TPC_VIEW_V == hitType) || (TPC_VIEW_W == hitType)))
84  throw StatusCodeException(STATUS_CODE_FAILURE);
85 
86  ClusterList daughterClusters(clusterMergeMap.at(pParentCluster));
87  daughterClusters.sort(LArClusterHelper::SortByNHits);
88 
89  for (const Cluster *const pDaughterCluster : daughterClusters)
90  {
91  if (deletedClusters.count(pParentCluster) || deletedClusters.count(pDaughterCluster))
92  throw StatusCodeException(STATUS_CODE_FAILURE);
93 
94  this->UpdateUponDeletion(pDaughterCluster);
95  this->UpdateUponDeletion(pParentCluster);
96  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::MergeAndDeleteClusters(*this, pParentCluster, pDaughterCluster, clusterListName, clusterListName));
97 
98  this->UpdateForNewCluster(pParentCluster);
99  deletedClusters.insert(pDaughterCluster);
100  }
101  }
102 
103  return !(deletedClusters.empty());
104 }
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 & GetClusterListNameU() const
Get the name of the u cluster list.
const std::string & GetClusterListNameV() const
Get the name of the v cluster list.
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
const std::string & GetClusterListNameW() const
Get the name of the w cluster list.
virtual void UpdateUponDeletion(const pandora::Cluster *const pDeletedCluster)
Update to reflect cluster deletion.
virtual void UpdateForNewCluster(const pandora::Cluster *const pNewCluster)
Update to reflect addition of a new cluster to the problem space.
template<typename T>
bool lar_content::ThreeDTracksBaseAlgorithm< T >::MakeClusterSplit ( const pandora::CartesianVector &  splitPosition,
const pandora::Cluster *&  pCurrentCluster,
const pandora::Cluster *&  pLowXCluster,
const pandora::Cluster *&  pHighXCluster 
) const
virtual

Make a cluster split.

Parameters
splitPositionthe split position
pCurrentClusterthe cluster to split
pLowXClusterto receive the low x cluster
pHighXClusterto receive the high x cluster
Returns
whether a cluster split occurred

Definition at line 101 of file ThreeDTracksBaseAlgorithm.cc.

References f, lar_content::LArPointingCluster::GetInnerVertex(), lar_content::LArPointingCluster::GetOuterVertex(), and lar_content::LArPointingCluster::Vertex::GetPosition().

Referenced by lar_content::ThreeDTracksBaseAlgorithm< T >::MakeClusterSplits().

103 {
104  CartesianVector lowXEnd(0.f, 0.f, 0.f), highXEnd(0.f, 0.f, 0.f);
105 
106  try
107  {
108  LArPointingCluster pointingCluster(pCurrentCluster);
109  const bool innerIsLowX(pointingCluster.GetInnerVertex().GetPosition().GetX() < pointingCluster.GetOuterVertex().GetPosition().GetX());
110  lowXEnd = (innerIsLowX ? pointingCluster.GetInnerVertex().GetPosition() : pointingCluster.GetOuterVertex().GetPosition());
111  highXEnd = (innerIsLowX ? pointingCluster.GetOuterVertex().GetPosition() : pointingCluster.GetInnerVertex().GetPosition());
112  }
113  catch (const StatusCodeException &) {return false;}
114 
115  const CartesianVector lowXUnitVector((lowXEnd - splitPosition).GetUnitVector());
116  const CartesianVector highXUnitVector((highXEnd - splitPosition).GetUnitVector());
117 
118  CaloHitList caloHitList;
119  pCurrentCluster->GetOrderedCaloHitList().FillCaloHitList(caloHitList);
120 
121  std::string originalListName, fragmentListName;
122  const ClusterList clusterList(1, pCurrentCluster);
123  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::InitializeFragmentation(*this, clusterList, originalListName, fragmentListName));
124 
125  pLowXCluster = NULL;
126  pHighXCluster = NULL;
127 
128  for (CaloHitList::const_iterator hIter = caloHitList.begin(), hIterEnd = caloHitList.end(); hIter != hIterEnd; ++hIter)
129  {
130  const CaloHit *const pCaloHit = *hIter;
131  const CartesianVector unitVector((pCaloHit->GetPositionVector() - splitPosition).GetUnitVector());
132 
133  const float dotProductLowX(unitVector.GetDotProduct(lowXUnitVector));
134  const float dotProductHighX(unitVector.GetDotProduct(highXUnitVector));
135  const Cluster *&pClusterToModify((dotProductLowX > dotProductHighX) ? pLowXCluster : pHighXCluster);
136 
137  if (NULL == pClusterToModify)
138  {
139  PandoraContentApi::Cluster::Parameters parameters;
140  parameters.m_caloHitList.push_back(pCaloHit);
141  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Cluster::Create(*this, parameters, pClusterToModify));
142  }
143  else
144  {
145  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::AddToCluster(*this, pClusterToModify, pCaloHit));
146  }
147  }
148 
149  if ((NULL == pLowXCluster) || (NULL == pHighXCluster))
150  {
151  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::EndFragmentation(*this, originalListName, fragmentListName));
152  return false;
153  }
154 
155  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::EndFragmentation(*this, fragmentListName, originalListName));
156  return true;
157 }
TFile f
Definition: plotHisto.C:6
intermediate_table::const_iterator const_iterator
template<typename T >
bool lar_content::ThreeDTracksBaseAlgorithm< T >::MakeClusterSplits ( const SplitPositionMap splitPositionMap)
virtual

Make cluster splits.

Parameters
splitPositionMapthe split position map
Returns
whether changes to the tensor have been made

Definition at line 55 of file ThreeDTracksBaseAlgorithm.cc.

References lar_content::LArClusterHelper::GetClusterHitType(), lar_content::ThreeDBaseAlgorithm< T >::GetClusterListNameU(), lar_content::ThreeDBaseAlgorithm< T >::GetClusterListNameV(), lar_content::ThreeDBaseAlgorithm< T >::GetClusterListNameW(), lar_content::ThreeDTracksBaseAlgorithm< T >::MakeClusterSplit(), lar_content::LArClusterHelper::SortByNHits(), lar_content::ThreeDTracksBaseAlgorithm< T >::SortSplitPositions(), lar_content::ThreeDTracksBaseAlgorithm< T >::UpdateForNewCluster(), and lar_content::ThreeDTracksBaseAlgorithm< T >::UpdateUponDeletion().

Referenced by lar_content::ThreeDKinkBaseTool::ApplyChanges(), and lar_content::TrackSplittingTool::Run().

56 {
57  bool changesMade(false);
58 
59  ClusterList splitClusters;
60  for (const auto &mapEntry : splitPositionMap) splitClusters.push_back(mapEntry.first);
61  splitClusters.sort(LArClusterHelper::SortByNHits);
62 
63  for (const Cluster *pCurrentCluster : splitClusters)
64  {
65  CartesianPointVector splitPositions(splitPositionMap.at(pCurrentCluster));
66  std::sort(splitPositions.begin(), splitPositions.end(), ThreeDTracksBaseAlgorithm::SortSplitPositions);
67 
68  const HitType hitType(LArClusterHelper::GetClusterHitType(pCurrentCluster));
69  const std::string clusterListName((TPC_VIEW_U == hitType) ? this->GetClusterListNameU() : (TPC_VIEW_V == hitType) ? this->GetClusterListNameV() : this->GetClusterListNameW());
70 
71  if (!((TPC_VIEW_U == hitType) || (TPC_VIEW_V == hitType) || (TPC_VIEW_W == hitType)))
72  throw StatusCodeException(STATUS_CODE_FAILURE);
73 
74  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ReplaceCurrentList<Cluster>(*this, clusterListName));
75 
76  for (CartesianPointVector::const_iterator sIter = splitPositions.begin(), sIterEnd = splitPositions.end(); sIter != sIterEnd; ++sIter)
77  {
78  const Cluster *pLowXCluster(NULL), *pHighXCluster(NULL);
79  this->UpdateUponDeletion(pCurrentCluster);
80 
81  if (this->MakeClusterSplit(*sIter, pCurrentCluster, pLowXCluster, pHighXCluster))
82  {
83  changesMade = true;
84  this->UpdateForNewCluster(pLowXCluster);
85  this->UpdateForNewCluster(pHighXCluster);
86  pCurrentCluster = pHighXCluster;
87  }
88  else
89  {
90  this->UpdateForNewCluster(pCurrentCluster);
91  }
92  }
93  }
94 
95  return changesMade;
96 }
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.
virtual void UpdateUponDeletion(const pandora::Cluster *const pDeletedCluster)
Update to reflect cluster deletion.
const std::string & GetClusterListNameU() const
Get the name of the u cluster list.
const std::string & GetClusterListNameV() const
Get the name of the v cluster list.
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
static bool SortSplitPositions(const pandora::CartesianVector &lhs, const pandora::CartesianVector &rhs)
Sort split position cartesian vectors by increasing x coordinate.
const std::string & GetClusterListNameW() const
Get the name of the w cluster list.
intermediate_table::const_iterator const_iterator
virtual bool MakeClusterSplit(const pandora::CartesianVector &splitPosition, const pandora::Cluster *&pCurrentCluster, const pandora::Cluster *&pLowXCluster, const pandora::Cluster *&pHighXCluster) const
Make a cluster split.
virtual void UpdateForNewCluster(const pandora::Cluster *const pNewCluster)
Update to reflect addition of a new cluster to the problem space.
template<typename T >
void lar_content::ThreeDBaseAlgorithm< T >::PerformMainLoop ( )
protectedvirtualinherited

Main loop over cluster combinations in order to populate the tensor. Responsible for calling CalculateOverlapResult.

Reimplemented in lar_content::ThreeDTrackFragmentsAlgorithm.

Definition at line 280 of file ThreeDBaseAlgorithm.cc.

References lar_content::ThreeDBaseAlgorithm< T >::CalculateOverlapResult(), lar_content::ThreeDBaseAlgorithm< T >::m_clusterListU, lar_content::ThreeDBaseAlgorithm< T >::m_clusterListV, lar_content::ThreeDBaseAlgorithm< T >::m_clusterListW, and lar_content::LArClusterHelper::SortByNHits().

Referenced by lar_content::ThreeDBaseAlgorithm< T >::Run().

281 {
282  ClusterVector clusterVectorU(m_clusterListU.begin(), m_clusterListU.end());
283  ClusterVector clusterVectorV(m_clusterListV.begin(), m_clusterListV.end());
284  ClusterVector clusterVectorW(m_clusterListW.begin(), m_clusterListW.end());
285  std::sort(clusterVectorU.begin(), clusterVectorU.end(), LArClusterHelper::SortByNHits);
286  std::sort(clusterVectorV.begin(), clusterVectorV.end(), LArClusterHelper::SortByNHits);
287  std::sort(clusterVectorW.begin(), clusterVectorW.end(), LArClusterHelper::SortByNHits);
288 
289  for (const Cluster *const pClusterU : clusterVectorU)
290  {
291  for (const Cluster *const pClusterV : clusterVectorV)
292  {
293  for (const Cluster *const pClusterW : clusterVectorW)
294  this->CalculateOverlapResult(pClusterU, pClusterV, pClusterW);
295  }
296  }
297 }
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.
virtual void CalculateOverlapResult(const pandora::Cluster *const pClusterU, const pandora::Cluster *const pClusterV, const pandora::Cluster *const pClusterW)=0
Calculate cluster overlap result and store in tensor.
pandora::ClusterList m_clusterListW
The selected modified cluster list W.
pandora::ClusterList m_clusterListV
The selected modified cluster list V.
std::vector< art::Ptr< recob::Cluster > > ClusterVector
pandora::ClusterList m_clusterListU
The selected modified cluster list U.
template<typename T >
void lar_content::ThreeDTracksBaseAlgorithm< T >::PreparationStep ( )
protectedvirtual

Perform any preparatory steps required, e.g. caching expensive fit results for clusters.

Reimplemented from lar_content::ThreeDBaseAlgorithm< T >.

Definition at line 237 of file ThreeDTracksBaseAlgorithm.cc.

References lar_content::ThreeDTracksBaseAlgorithm< T >::AddToSlidingFitCache(), lar_content::ThreeDBaseAlgorithm< T >::m_clusterListU, lar_content::ThreeDBaseAlgorithm< T >::m_clusterListV, and lar_content::ThreeDBaseAlgorithm< T >::m_clusterListW.

238 {
239  this->PreparationStep(this->m_clusterListU);
240  this->PreparationStep(this->m_clusterListV);
241  this->PreparationStep(this->m_clusterListW);
242 }
pandora::ClusterList m_clusterListW
The selected modified cluster list W.
pandora::ClusterList m_clusterListV
The selected modified cluster list V.
virtual void PreparationStep()
Perform any preparatory steps required, e.g. caching expensive fit results for clusters.
pandora::ClusterList m_clusterListU
The selected modified cluster list U.
template<typename T>
virtual void lar_content::ThreeDTracksBaseAlgorithm< T >::PreparationStep ( pandora::ClusterList &  clusterList)
protectedvirtual

Preparation step for a specific cluster list.

Parameters
clusterListthe cluster list
template<typename T>
StatusCode lar_content::ThreeDTracksBaseAlgorithm< T >::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
protectedvirtual

Reimplemented from lar_content::ThreeDBaseAlgorithm< T >.

Reimplemented in lar_content::ThreeDTrackFragmentsAlgorithm, lar_content::ThreeDTransverseTracksAlgorithm, and lar_content::ThreeDLongitudinalTracksAlgorithm.

Definition at line 303 of file ThreeDTracksBaseAlgorithm.cc.

References lar_content::ThreeDTracksBaseAlgorithm< T >::m_minClusterCaloHits, lar_content::ThreeDTracksBaseAlgorithm< T >::m_minClusterLengthSquared, lar_content::ThreeDTracksBaseAlgorithm< T >::m_slidingFitWindow, and lar_content::ThreeDBaseAlgorithm< T >::ReadSettings().

Referenced by lar_content::ThreeDLongitudinalTracksAlgorithm::ReadSettings(), lar_content::ThreeDTransverseTracksAlgorithm::ReadSettings(), and lar_content::ThreeDTrackFragmentsAlgorithm::ReadSettings().

304 {
305  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
306  "SlidingFitWindow", m_slidingFitWindow));
307 
308  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
309  "MinClusterCaloHits", m_minClusterCaloHits));
310 
311  float minClusterLength = std::sqrt(m_minClusterLengthSquared);
312  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
313  "MinClusterLength", minClusterLength));
314  m_minClusterLengthSquared = minClusterLength * minClusterLength;
315 
316  return ThreeDBaseAlgorithm<T>::ReadSettings(xmlHandle);
317 }
virtual pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
unsigned int m_minClusterCaloHits
The min number of hits in base cluster selection method.
unsigned int m_slidingFitWindow
The layer window for the sliding linear fits.
float m_minClusterLengthSquared
The min length (squared) in base cluster selection method.
template<typename T>
void lar_content::ThreeDTracksBaseAlgorithm< T >::RemoveFromSlidingFitCache ( const pandora::Cluster *const  pCluster)
protected

Remova an existing sliding fit result, for the specified cluster, from the algorithm cache.

Parameters
pClusteraddress of the relevant cluster

Definition at line 292 of file ThreeDTracksBaseAlgorithm.cc.

References lar_content::ThreeDTracksBaseAlgorithm< T >::m_slidingFitResultMap.

Referenced by lar_content::ThreeDTracksBaseAlgorithm< T >::UpdateUponDeletion().

293 {
295 
296  if (m_slidingFitResultMap.end() != iter)
297  m_slidingFitResultMap.erase(iter);
298 }
intermediate_table::iterator iterator
TwoDSlidingFitResultMap m_slidingFitResultMap
The sliding fit result map.
template<typename T >
void lar_content::ThreeDBaseAlgorithm< T >::RemoveUnavailableTensorElements ( )
virtualinherited

Update tensor to remove all elements that have been added to pfos and so are unavailable.

Definition at line 175 of file ThreeDBaseAlgorithm.cc.

References lar_content::OverlapTensor< T >::GetClusterNavigationMapUV(), lar_content::OverlapTensor< T >::GetClusterNavigationMapVW(), lar_content::OverlapTensor< T >::GetClusterNavigationMapWU(), lar_content::ThreeDBaseAlgorithm< T >::m_overlapTensor, lar_content::LArClusterHelper::SortByNHits(), and lar_content::ThreeDBaseAlgorithm< T >::UpdateUponDeletion().

176 {
180  ClusterList usedClusters;
181 
182  for (typename TensorType::ClusterNavigationMap::const_iterator iter = navigationMapUV.begin(), iterEnd = navigationMapUV.end(); iter != iterEnd; ++iter)
183  {
184  if (!(iter->first->IsAvailable()))
185  usedClusters.push_back(iter->first);
186  }
187 
188  for (typename TensorType::ClusterNavigationMap::const_iterator iter = navigationMapVW.begin(), iterEnd = navigationMapVW.end(); iter != iterEnd; ++iter)
189  {
190  if (!(iter->first->IsAvailable()))
191  usedClusters.push_back(iter->first);
192  }
193 
194  for (typename TensorType::ClusterNavigationMap::const_iterator iter = navigationMapWU.begin(), iterEnd = navigationMapWU.end(); iter != iterEnd; ++iter)
195  {
196  if (!(iter->first->IsAvailable()))
197  usedClusters.push_back(iter->first);
198  }
199 
200  usedClusters.sort(LArClusterHelper::SortByNHits);
201 
202  for (ClusterList::const_iterator iter = usedClusters.begin(), iterEnd = usedClusters.end(); iter != iterEnd; ++iter)
203  this->UpdateUponDeletion(*iter);
204 }
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 ClusterNavigationMap & GetClusterNavigationMapVW() const
Get the cluster navigation map V->W.
const ClusterNavigationMap & GetClusterNavigationMapUV() const
Get the cluster navigation map U->V.
intermediate_table::const_iterator const_iterator
TensorType m_overlapTensor
The overlap tensor.
virtual void UpdateUponDeletion(const pandora::Cluster *const pDeletedCluster)
Update to reflect cluster deletion.
std::unordered_map< const pandora::Cluster *, pandora::ClusterList > ClusterNavigationMap
const ClusterNavigationMap & GetClusterNavigationMapWU() const
Get the cluster navigation map W->U.
template<typename T >
void lar_content::ThreeDBaseAlgorithm< T >::SelectAllInputClusters ( )
protectedvirtualinherited

Select a subset of input clusters for processing in this algorithm.

Definition at line 209 of file ThreeDBaseAlgorithm.cc.

References lar_content::ThreeDBaseAlgorithm< T >::m_clusterListU, lar_content::ThreeDBaseAlgorithm< T >::m_clusterListV, lar_content::ThreeDBaseAlgorithm< T >::m_clusterListW, lar_content::ThreeDBaseAlgorithm< T >::m_pInputClusterListU, lar_content::ThreeDBaseAlgorithm< T >::m_pInputClusterListV, lar_content::ThreeDBaseAlgorithm< T >::m_pInputClusterListW, and lar_content::ThreeDBaseAlgorithm< T >::SelectInputClusters().

Referenced by lar_content::ThreeDBaseAlgorithm< T >::Run().

210 {
214 }
virtual void SelectInputClusters(const pandora::ClusterList *const pInputClusterList, pandora::ClusterList &selectedClusterList) const =0
Select a subset of input clusters for processing in this algorithm.
pandora::ClusterList m_clusterListW
The selected modified cluster list W.
const pandora::ClusterList * m_pInputClusterListV
Address of the input cluster list V.
const pandora::ClusterList * m_pInputClusterListU
Address of the input cluster list U.
const pandora::ClusterList * m_pInputClusterListW
Address of the input cluster list W.
pandora::ClusterList m_clusterListV
The selected modified cluster list V.
pandora::ClusterList m_clusterListU
The selected modified cluster list U.
template<typename T>
void lar_content::ThreeDTracksBaseAlgorithm< T >::SelectInputClusters ( const pandora::ClusterList *const  pInputClusterList,
pandora::ClusterList &  selectedClusterList 
) const
virtual

Select a subset of input clusters for processing in this algorithm.

Parameters
pInputClusterListaddress of an input cluster list
selectedClusterListto receive the selected cluster list

Implements lar_content::ThreeDBaseAlgorithm< T >.

Definition at line 199 of file ThreeDTracksBaseAlgorithm.cc.

References lar_content::LArClusterHelper::GetLengthSquared(), lar_content::ThreeDTracksBaseAlgorithm< T >::m_minClusterCaloHits, and lar_content::ThreeDTracksBaseAlgorithm< T >::m_minClusterLengthSquared.

Referenced by lar_content::ClearTrackFragmentsTool::UpdateTensor().

200 {
201  for (ClusterList::const_iterator iter = pInputClusterList->begin(), iterEnd = pInputClusterList->end(); iter != iterEnd; ++iter)
202  {
203  const Cluster *const pCluster = *iter;
204 
205  if (!pCluster->IsAvailable())
206  continue;
207 
208  if (pCluster->GetNCaloHits() < m_minClusterCaloHits)
209  continue;
210 
212  continue;
213 
214  selectedClusterList.push_back(pCluster);
215  }
216 }
intermediate_table::const_iterator const_iterator
unsigned int m_minClusterCaloHits
The min number of hits in base cluster selection method.
static float GetLengthSquared(const pandora::Cluster *const pCluster)
Get length squared of cluster.
float m_minClusterLengthSquared
The min length (squared) in base cluster selection method.
template<typename T >
void lar_content::ThreeDTracksBaseAlgorithm< T >::SetPfoParameters ( const ProtoParticle protoParticle,
PandoraContentApi::ParticleFlowObject::Parameters &  pfoParameters 
) const
virtual

Calculate Pfo properties from proto particle.

Parameters
protoParticlethe input proto particle
pfoParametersthe output pfo parameters

Implements lar_content::ThreeDBaseAlgorithm< T >.

Definition at line 221 of file ThreeDTracksBaseAlgorithm.cc.

References f, lar_content::ProtoParticle::m_clusterListU, lar_content::ProtoParticle::m_clusterListV, and lar_content::ProtoParticle::m_clusterListW.

222 {
223  // TODO Correct these placeholder parameters
224  pfoParameters.m_particleId = MU_MINUS; // Track
225  pfoParameters.m_charge = PdgTable::GetParticleCharge(pfoParameters.m_particleId.Get());
226  pfoParameters.m_mass = PdgTable::GetParticleMass(pfoParameters.m_particleId.Get());
227  pfoParameters.m_energy = 0.f;
228  pfoParameters.m_momentum = CartesianVector(0.f, 0.f, 0.f);
229  pfoParameters.m_clusterList.insert(pfoParameters.m_clusterList.end(), protoParticle.m_clusterListU.begin(), protoParticle.m_clusterListU.end());
230  pfoParameters.m_clusterList.insert(pfoParameters.m_clusterList.end(), protoParticle.m_clusterListV.begin(), protoParticle.m_clusterListV.end());
231  pfoParameters.m_clusterList.insert(pfoParameters.m_clusterList.end(), protoParticle.m_clusterListW.begin(), protoParticle.m_clusterListW.end());
232 }
TFile f
Definition: plotHisto.C:6
template<typename T >
bool lar_content::ThreeDTracksBaseAlgorithm< T >::SortSplitPositions ( const pandora::CartesianVector &  lhs,
const pandora::CartesianVector &  rhs 
)
static

Sort split position cartesian vectors by increasing x coordinate.

Parameters
lhsthe first cartesian vector
rhsthe second cartesian vector

Definition at line 162 of file ThreeDTracksBaseAlgorithm.cc.

Referenced by lar_content::ThreeDTracksBaseAlgorithm< T >::MakeClusterSplits().

163 {
164  return (lhs.GetX() < rhs.GetX());
165 }
template<typename T >
void lar_content::ThreeDTracksBaseAlgorithm< T >::TidyUp ( )
protectedvirtual

Tidy member variables in derived class.

Reimplemented from lar_content::ThreeDBaseAlgorithm< T >.

Definition at line 271 of file ThreeDTracksBaseAlgorithm.cc.

References lar_content::ThreeDTracksBaseAlgorithm< T >::m_slidingFitResultMap, and lar_content::ThreeDBaseAlgorithm< T >::TidyUp().

272 {
273  m_slidingFitResultMap.clear();
275 }
TwoDSlidingFitResultMap m_slidingFitResultMap
The sliding fit result map.
virtual void TidyUp()
Tidy member variables in derived class.
template<typename T>
void lar_content::ThreeDTracksBaseAlgorithm< T >::UpdateForNewCluster ( const pandora::Cluster *const  pNewCluster)
virtual

Update to reflect addition of a new cluster to the problem space.

Parameters
pNewClusteraddress of the new cluster

Reimplemented from lar_content::ThreeDBaseAlgorithm< T >.

Reimplemented in lar_content::ThreeDTrackFragmentsAlgorithm.

Definition at line 170 of file ThreeDTracksBaseAlgorithm.cc.

References lar_content::ThreeDTracksBaseAlgorithm< T >::AddToSlidingFitCache(), and lar_content::ThreeDBaseAlgorithm< T >::UpdateForNewCluster().

Referenced by lar_content::ThreeDTracksBaseAlgorithm< T >::MakeClusterSplits().

171 {
172  try
173  {
174  this->AddToSlidingFitCache(pNewCluster);
175  }
176  catch (StatusCodeException &statusCodeException)
177  {
178  if (STATUS_CODE_FAILURE == statusCodeException.GetStatusCode())
179  throw statusCodeException;
180 
181  return;
182  }
183 
185 }
void AddToSlidingFitCache(const pandora::Cluster *const pCluster)
Add a new sliding fit result, for the specified cluster, to the algorithm cache.
virtual void UpdateForNewCluster(const pandora::Cluster *const pNewCluster)
Update to reflect addition of a new cluster to the problem space.
template<typename T>
void lar_content::ThreeDTracksBaseAlgorithm< T >::UpdateUponDeletion ( const pandora::Cluster *const  pDeletedCluster)
virtual

Update to reflect cluster deletion.

Parameters
pDeletedClusteraddress of the deleted cluster

Reimplemented from lar_content::ThreeDBaseAlgorithm< T >.

Definition at line 190 of file ThreeDTracksBaseAlgorithm.cc.

References lar_content::ThreeDTracksBaseAlgorithm< T >::RemoveFromSlidingFitCache(), and lar_content::ThreeDBaseAlgorithm< T >::UpdateUponDeletion().

Referenced by lar_content::ThreeDTracksBaseAlgorithm< T >::MakeClusterSplits(), and lar_content::ClearTrackFragmentsTool::UpdateTensor().

191 {
192  this->RemoveFromSlidingFitCache(pDeletedCluster);
194 }
virtual void UpdateUponDeletion(const pandora::Cluster *const pDeletedCluster)
Update to reflect cluster deletion.
void RemoveFromSlidingFitCache(const pandora::Cluster *const pCluster)
Remova an existing sliding fit result, for the specified cluster, from the algorithm cache...

Member Data Documentation

template<typename T>
unsigned int lar_content::ThreeDTracksBaseAlgorithm< T >::m_minClusterCaloHits
protected

The min number of hits in base cluster selection method.

Definition at line 121 of file ThreeDTracksBaseAlgorithm.h.

Referenced by lar_content::ThreeDTracksBaseAlgorithm< T >::ReadSettings(), and lar_content::ThreeDTracksBaseAlgorithm< T >::SelectInputClusters().

template<typename T>
float lar_content::ThreeDTracksBaseAlgorithm< T >::m_minClusterLengthSquared
protected

The min length (squared) in base cluster selection method.

Definition at line 122 of file ThreeDTracksBaseAlgorithm.h.

Referenced by lar_content::ThreeDTracksBaseAlgorithm< T >::ReadSettings(), and lar_content::ThreeDTracksBaseAlgorithm< T >::SelectInputClusters().

template<typename T>
const pandora::ClusterList* lar_content::ThreeDBaseAlgorithm< T >::m_pInputClusterListU
protectedinherited
template<typename T>
const pandora::ClusterList* lar_content::ThreeDBaseAlgorithm< T >::m_pInputClusterListV
protectedinherited
template<typename T>
const pandora::ClusterList* lar_content::ThreeDBaseAlgorithm< T >::m_pInputClusterListW
protectedinherited

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