Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
lar_content::LongTracksTool Class Reference

LongTracksTool class. More...

#include <LongTracksTool.h>

Inheritance diagram for lar_content::LongTracksTool:
lar_content::TransverseTensorTool

Public Member Functions

 LongTracksTool ()
 Default constructor. More...
 
bool Run (ThreeViewTransverseTracksAlgorithm *const pAlgorithm, TensorType &overlapTensor)
 Run the algorithm tool. More...
 

Static Public Member Functions

static bool HasLongDirectConnections (IteratorList::const_iterator iIter, const IteratorList &iteratorList)
 Whether a long element shares clusters with any other long elements. More...
 
static bool IsLongerThanDirectConnections (IteratorList::const_iterator iIter, const TensorType::ElementList &elementList, const unsigned int minMatchedSamplingPointRatio, const pandora::ClusterSet &usedClusters)
 Whether a long element is significantly longer that other elements with which it shares a cluster. More...
 

Private Member Functions

pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
void FindLongTracks (const TensorType &overlapTensor, ProtoParticleVector &protoParticleVector) const
 Find long tracks, hidden by simple ambiguities in the tensor. More...
 
void SelectLongElements (const TensorType::ElementList &elementList, const pandora::ClusterSet &usedClusters, IteratorList &iteratorList) const
 Select a list of long track-like elements from a set of connected tensor elements. More...
 

Private Attributes

float m_minMatchedFraction
 The min matched sampling point fraction for particle creation. More...
 
unsigned int m_minMatchedSamplingPoints
 The min number of matched sampling points for particle creation. More...
 
float m_minXOverlapFraction
 The min x overlap fraction (in each view) for particle creation. More...
 
unsigned int m_minMatchedSamplingPointRatio
 The min ratio between 1st and 2nd highest msps for simple ambiguity resolution. More...
 

Additional Inherited Members

- Public Types inherited from lar_content::TransverseTensorTool
typedef ThreeViewTransverseTracksAlgorithm::MatchingType::TensorType TensorType
 
typedef std::vector< TensorType::ElementList::const_iteratorIteratorList
 

Detailed Description

LongTracksTool class.

Definition at line 19 of file LongTracksTool.h.

Constructor & Destructor Documentation

lar_content::LongTracksTool::LongTracksTool ( )

Default constructor.

Definition at line 18 of file LongTracksTool.cc.

18  :
23 {
24 }
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for particle creation.
unsigned int m_minMatchedSamplingPointRatio
The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.
float m_minXOverlapFraction
The min x overlap fraction (in each view) for particle creation.
float m_minMatchedFraction
The min matched sampling point fraction for particle creation.

Member Function Documentation

void lar_content::LongTracksTool::FindLongTracks ( const TensorType overlapTensor,
ProtoParticleVector protoParticleVector 
) const
private

Find long tracks, hidden by simple ambiguities in the tensor.

Parameters
overlapTensorthe overlap tensor
protoParticleVectorto receive the list of proto particles

Definition at line 85 of file LongTracksTool.cc.

86 {
87  ClusterSet usedClusters;
88  ClusterVector sortedKeyClusters;
89  overlapTensor.GetSortedKeyClusters(sortedKeyClusters);
90 
91  for (const Cluster *const pKeyCluster : sortedKeyClusters)
92  {
93  if (!pKeyCluster->IsAvailable())
94  continue;
95 
96  unsigned int nU(0), nV(0), nW(0);
97  TensorType::ElementList elementList;
98  overlapTensor.GetConnectedElements(pKeyCluster, true, elementList, nU, nV, nW);
99 
100  IteratorList iteratorList;
101  this->SelectLongElements(elementList, usedClusters, iteratorList);
102 
103  // Check that elements are not directly connected and are significantly longer than any other directly connected elements
104  for (IteratorList::const_iterator iIter = iteratorList.begin(), iIterEnd = iteratorList.end(); iIter != iIterEnd; ++iIter)
105  {
106  if (LongTracksTool::HasLongDirectConnections(iIter, iteratorList))
107  continue;
108 
110  continue;
111 
112  ProtoParticle protoParticle;
113  protoParticle.m_clusterList.push_back((*iIter)->GetClusterU());
114  protoParticle.m_clusterList.push_back((*iIter)->GetClusterV());
115  protoParticle.m_clusterList.push_back((*iIter)->GetClusterW());
116  protoParticleVector.push_back(protoParticle);
117 
118  usedClusters.insert((*iIter)->GetClusterU());
119  usedClusters.insert((*iIter)->GetClusterV());
120  usedClusters.insert((*iIter)->GetClusterW());
121  }
122  }
123 }
std::vector< TensorType::ElementList::const_iterator > IteratorList
static bool IsLongerThanDirectConnections(IteratorList::const_iterator iIter, const TensorType::ElementList &elementList, const unsigned int minMatchedSamplingPointRatio, const pandora::ClusterSet &usedClusters)
Whether a long element is significantly longer that other elements with which it shares a cluster...
unsigned int m_minMatchedSamplingPointRatio
The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.
intermediate_table::const_iterator const_iterator
void SelectLongElements(const TensorType::ElementList &elementList, const pandora::ClusterSet &usedClusters, IteratorList &iteratorList) const
Select a list of long track-like elements from a set of connected tensor elements.
std::vector< art::Ptr< recob::Cluster > > ClusterVector
static bool HasLongDirectConnections(IteratorList::const_iterator iIter, const IteratorList &iteratorList)
Whether a long element shares clusters with any other long elements.
bool lar_content::LongTracksTool::HasLongDirectConnections ( IteratorList::const_iterator  iIter,
const IteratorList iteratorList 
)
static

Whether a long element shares clusters with any other long elements.

Parameters
iIterspecifies the long element under consideration
iteratorListlist of iterators to other long elements
Returns
boolean

Definition at line 28 of file LongTracksTool.cc.

29 {
30  for (IteratorList::const_iterator iIter2 = iteratorList.begin(), iIter2End = iteratorList.end(); iIter2 != iIter2End; ++iIter2)
31  {
32  if (iIter == iIter2)
33  continue;
34 
35  if (((*iIter)->GetClusterU() == (*iIter2)->GetClusterU()) || ((*iIter)->GetClusterV() == (*iIter2)->GetClusterV()) ||
36  ((*iIter)->GetClusterW() == (*iIter2)->GetClusterW()))
37  return true;
38  }
39 
40  return false;
41 }
intermediate_table::const_iterator const_iterator
bool lar_content::LongTracksTool::IsLongerThanDirectConnections ( IteratorList::const_iterator  iIter,
const TensorType::ElementList elementList,
const unsigned int  minMatchedSamplingPointRatio,
const pandora::ClusterSet &  usedClusters 
)
static

Whether a long element is significantly longer that other elements with which it shares a cluster.

Parameters
iIterspecifies the long element under consideration
elementListthe full list of connected tensor elements
minMatchedSamplingPointRatiothe min ratio between 1st and 2nd highest msps for simple ambiguity resolution
usedClustersthe list of clusters already marked as to be added to a pfo

Definition at line 45 of file LongTracksTool.cc.

47 {
48  const unsigned int nMatchedSamplingPoints((*iIter)->GetOverlapResult().GetNMatchedSamplingPoints());
49 
50  for (TensorType::ElementList::const_iterator eIter = elementList.begin(); eIter != elementList.end(); ++eIter)
51  {
52  if ((*iIter) == eIter)
53  continue;
54 
55  if (usedClusters.count(eIter->GetClusterU()) || usedClusters.count(eIter->GetClusterV()) || usedClusters.count(eIter->GetClusterW()))
56  continue;
57 
58  if (((*iIter)->GetClusterU() != eIter->GetClusterU()) && ((*iIter)->GetClusterV() != eIter->GetClusterV()) &&
59  ((*iIter)->GetClusterW() != eIter->GetClusterW()))
60  continue;
61 
62  if (nMatchedSamplingPoints < minMatchedSamplingPointRatio * eIter->GetOverlapResult().GetNMatchedSamplingPoints())
63  return false;
64  }
65 
66  return true;
67 }
intermediate_table::const_iterator const_iterator
StatusCode lar_content::LongTracksTool::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
private

Definition at line 153 of file LongTracksTool.cc.

154 {
155  PANDORA_RETURN_RESULT_IF_AND_IF(
156  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinMatchedFraction", m_minMatchedFraction));
157 
158  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
159  XmlHelper::ReadValue(xmlHandle, "MinMatchedSamplingPoints", m_minMatchedSamplingPoints));
160 
161  PANDORA_RETURN_RESULT_IF_AND_IF(
162  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinXOverlapFraction", m_minXOverlapFraction));
163 
164  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
165  XmlHelper::ReadValue(xmlHandle, "MinMatchedSamplingPointRatio", m_minMatchedSamplingPointRatio));
166 
167  return STATUS_CODE_SUCCESS;
168 }
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for particle creation.
unsigned int m_minMatchedSamplingPointRatio
The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.
float m_minXOverlapFraction
The min x overlap fraction (in each view) for particle creation.
float m_minMatchedFraction
The min matched sampling point fraction for particle creation.
bool lar_content::LongTracksTool::Run ( ThreeViewTransverseTracksAlgorithm *const  pAlgorithm,
TensorType overlapTensor 
)
virtual

Run the algorithm tool.

Parameters
pAlgorithmaddress of the calling algorithm
overlapTensorthe overlap tensor
Returns
whether changes have been made by the tool

Implements lar_content::TransverseTensorTool.

Definition at line 71 of file LongTracksTool.cc.

72 {
73  if (PandoraContentApi::GetSettings(*pAlgorithm)->ShouldDisplayAlgorithmInfo())
74  std::cout << "----> Running Algorithm Tool: " << this->GetInstanceName() << ", " << this->GetType() << std::endl;
75 
76  ProtoParticleVector protoParticleVector;
77  this->FindLongTracks(overlapTensor, protoParticleVector);
78 
79  const bool particlesMade(pAlgorithm->CreateThreeDParticles(protoParticleVector));
80  return particlesMade;
81 }
std::vector< ProtoParticle > ProtoParticleVector
void FindLongTracks(const TensorType &overlapTensor, ProtoParticleVector &protoParticleVector) const
Find long tracks, hidden by simple ambiguities in the tensor.
QTextStream & endl(QTextStream &s)
void lar_content::LongTracksTool::SelectLongElements ( const TensorType::ElementList elementList,
const pandora::ClusterSet &  usedClusters,
IteratorList iteratorList 
) const
private

Select a list of long track-like elements from a set of connected tensor elements.

Parameters
elementListthe full list of connected tensor elements
usedClustersthe list of clusters already marked as to be added to a pfo
iteratorListto receive a list of iterators to long track-like elements

Definition at line 127 of file LongTracksTool.cc.

128 {
129  for (TensorType::ElementList::const_iterator eIter = elementList.begin(); eIter != elementList.end(); ++eIter)
130  {
131  if (usedClusters.count(eIter->GetClusterU()) || usedClusters.count(eIter->GetClusterV()) || usedClusters.count(eIter->GetClusterW()))
132  continue;
133 
134  if (eIter->GetOverlapResult().GetMatchedFraction() < m_minMatchedFraction)
135  continue;
136 
137  if (eIter->GetOverlapResult().GetNMatchedSamplingPoints() < m_minMatchedSamplingPoints)
138  continue;
139 
140  const XOverlap &xOverlap(eIter->GetOverlapResult().GetXOverlap());
141 
142  if ((xOverlap.GetXSpanU() > std::numeric_limits<float>::epsilon()) && (xOverlap.GetXOverlapSpan() / xOverlap.GetXSpanU() > m_minXOverlapFraction) &&
143  (xOverlap.GetXSpanV() > std::numeric_limits<float>::epsilon()) && (xOverlap.GetXOverlapSpan() / xOverlap.GetXSpanV() > m_minXOverlapFraction) &&
144  (xOverlap.GetXSpanW() > std::numeric_limits<float>::epsilon()) && (xOverlap.GetXOverlapSpan() / xOverlap.GetXSpanW() > m_minXOverlapFraction))
145  {
146  iteratorList.push_back(eIter);
147  }
148  }
149 }
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for particle creation.
intermediate_table::const_iterator const_iterator
float m_minXOverlapFraction
The min x overlap fraction (in each view) for particle creation.
float m_minMatchedFraction
The min matched sampling point fraction for particle creation.

Member Data Documentation

float lar_content::LongTracksTool::m_minMatchedFraction
private

The min matched sampling point fraction for particle creation.

Definition at line 70 of file LongTracksTool.h.

unsigned int lar_content::LongTracksTool::m_minMatchedSamplingPointRatio
private

The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.

Definition at line 73 of file LongTracksTool.h.

unsigned int lar_content::LongTracksTool::m_minMatchedSamplingPoints
private

The min number of matched sampling points for particle creation.

Definition at line 71 of file LongTracksTool.h.

float lar_content::LongTracksTool::m_minXOverlapFraction
private

The min x overlap fraction (in each view) for particle creation.

Definition at line 72 of file LongTracksTool.h.


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