All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
lar_content::ClearShowersTool Class Reference

ClearShowersTool class. More...

#include <ClearShowersTool.h>

Inheritance diagram for lar_content::ClearShowersTool:
lar_content::ShowerTensorTool

Public Member Functions

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

Static Public Member Functions

static bool HasLargeDirectConnections (IteratorList::const_iterator iIter, const IteratorList &iteratorList)
 Whether a large shower-like element shares clusters with any other long elements. More...
 
static bool IsLargerThanDirectConnections (IteratorList::const_iterator iIter, const TensorType::ElementList &elementList, const unsigned int minMatchedSamplingPointRatio, const float minXOverlapSpanRatio, const pandora::ClusterSet &usedClusters)
 Whether a large shower-like element is significantly larger that other elements with which it shares a cluster. More...
 

Private Member Functions

pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
void FindClearShowers (const TensorType &overlapTensor, ProtoParticleVector &protoParticleVector) const
 Find clear shower matches, hidden by simple ambiguities in the tensor. More...
 
void SelectLargeShowerElements (const TensorType::ElementList &elementList, const pandora::ClusterSet &usedClusters, IteratorList &iteratorList) const
 Select a list of large shower-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...
 
float m_minXOverlapSpanRatio
 The min ratio between 1st and 2nd highest x-overlap spans for simple ambiguity resolution. More...
 
bool m_visualize
 Visualize cluster split locations. More...
 

Additional Inherited Members

- Public Types inherited from lar_content::ShowerTensorTool
typedef
ThreeViewShowersAlgorithm::MatchingType::TensorType 
TensorType
 
typedef std::vector
< TensorType::ElementList::const_iterator
IteratorList
 

Detailed Description

ClearShowersTool class.

Definition at line 19 of file ClearShowersTool.h.

Constructor & Destructor Documentation

lar_content::ClearShowersTool::ClearShowersTool ( )

Default constructor.

Definition at line 18 of file ClearShowersTool.cc.

18  :
24  m_visualize(false)
25 {
26 }
float m_minMatchedFraction
The min matched sampling point fraction for particle creation.
float m_minXOverlapSpanRatio
The min ratio between 1st and 2nd highest x-overlap spans for simple ambiguity resolution.
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for particle creation.
float m_minXOverlapFraction
The min x overlap fraction (in each view) for particle creation.
bool m_visualize
Visualize cluster split locations.
unsigned int m_minMatchedSamplingPointRatio
The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.

Member Function Documentation

void lar_content::ClearShowersTool::FindClearShowers ( const TensorType overlapTensor,
ProtoParticleVector protoParticleVector 
) const
private

Find clear shower matches, hidden by simple ambiguities in the tensor.

Parameters
overlapTensorthe overlap tensor
protoParticleVectorto receive the list of proto particles

Definition at line 91 of file ClearShowersTool.cc.

92 {
93  ClusterSet usedClusters;
94  ClusterVector sortedKeyClusters;
95  overlapTensor.GetSortedKeyClusters(sortedKeyClusters);
96 
97  for (const Cluster *const pKeyCluster : sortedKeyClusters)
98  {
99  if (!pKeyCluster->IsAvailable())
100  continue;
101 
102  unsigned int nU(0), nV(0), nW(0);
103  TensorType::ElementList elementList;
104  overlapTensor.GetConnectedElements(pKeyCluster, true, elementList, nU, nV, nW);
105 
106  IteratorList iteratorList;
107  this->SelectLargeShowerElements(elementList, usedClusters, iteratorList);
108 
109  // Check that elements are not directly connected and are significantly longer than any other directly connected elements
110  for (IteratorList::const_iterator iIter = iteratorList.begin(), iIterEnd = iteratorList.end(); iIter != iIterEnd; ++iIter)
111  {
112  if (ClearShowersTool::HasLargeDirectConnections(iIter, iteratorList))
113  continue;
114 
116  continue;
117 
118  if (m_visualize)
119  {
120  ClusterList clusterList{(*iIter)->GetClusterU(), (*iIter)->GetClusterV(), (*iIter)->GetClusterW()};
121  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &clusterList, "Selected", BLUE));
122  PANDORA_MONITORING_API(ViewEvent(this->GetPandora()));
123  }
124 
125  ProtoParticle protoParticle;
126  protoParticle.m_clusterList.push_back((*iIter)->GetClusterU());
127  protoParticle.m_clusterList.push_back((*iIter)->GetClusterV());
128  protoParticle.m_clusterList.push_back((*iIter)->GetClusterW());
129  protoParticleVector.push_back(protoParticle);
130 
131  usedClusters.insert((*iIter)->GetClusterU());
132  usedClusters.insert((*iIter)->GetClusterV());
133  usedClusters.insert((*iIter)->GetClusterW());
134  }
135  }
136 }
static bool IsLargerThanDirectConnections(IteratorList::const_iterator iIter, const TensorType::ElementList &elementList, const unsigned int minMatchedSamplingPointRatio, const float minXOverlapSpanRatio, const pandora::ClusterSet &usedClusters)
Whether a large shower-like element is significantly larger that other elements with which it shares ...
void SelectLargeShowerElements(const TensorType::ElementList &elementList, const pandora::ClusterSet &usedClusters, IteratorList &iteratorList) const
Select a list of large shower-like elements from a set of connected tensor elements.
float m_minXOverlapSpanRatio
The min ratio between 1st and 2nd highest x-overlap spans for simple ambiguity resolution.
std::vector< TensorType::ElementList::const_iterator > IteratorList
static bool HasLargeDirectConnections(IteratorList::const_iterator iIter, const IteratorList &iteratorList)
Whether a large shower-like element shares clusters with any other long elements. ...
std::vector< art::Ptr< recob::Cluster > > ClusterVector
bool m_visualize
Visualize cluster split locations.
unsigned int m_minMatchedSamplingPointRatio
The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.
bool lar_content::ClearShowersTool::HasLargeDirectConnections ( IteratorList::const_iterator  iIter,
const IteratorList iteratorList 
)
static

Whether a large shower-like element shares clusters with any other long elements.

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

Definition at line 30 of file ClearShowersTool.cc.

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

Whether a large shower-like element is significantly larger that other elements with which it shares a cluster.

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

Definition at line 47 of file ClearShowersTool.cc.

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

Definition at line 180 of file ClearShowersTool.cc.

181 {
182  PANDORA_RETURN_RESULT_IF_AND_IF(
183  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinMatchedFraction", m_minMatchedFraction));
184 
185  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
186  XmlHelper::ReadValue(xmlHandle, "MinMatchedSamplingPoints", m_minMatchedSamplingPoints));
187 
188  PANDORA_RETURN_RESULT_IF_AND_IF(
189  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinXOverlapFraction", m_minXOverlapFraction));
190 
191  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
192  XmlHelper::ReadValue(xmlHandle, "MinMatchedSamplingPointRatio", m_minMatchedSamplingPointRatio));
193 
194  PANDORA_RETURN_RESULT_IF_AND_IF(
195  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinXOverlapSpanRatio", m_minXOverlapSpanRatio));
196 
197  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "Visualize", m_visualize));
198 
199  return STATUS_CODE_SUCCESS;
200 }
float m_minMatchedFraction
The min matched sampling point fraction for particle creation.
float m_minXOverlapSpanRatio
The min ratio between 1st and 2nd highest x-overlap spans for simple ambiguity resolution.
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for particle creation.
float m_minXOverlapFraction
The min x overlap fraction (in each view) for particle creation.
bool m_visualize
Visualize cluster split locations.
unsigned int m_minMatchedSamplingPointRatio
The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.
bool lar_content::ClearShowersTool::Run ( ThreeViewShowersAlgorithm *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::ShowerTensorTool.

Definition at line 77 of file ClearShowersTool.cc.

78 {
79  if (PandoraContentApi::GetSettings(*pAlgorithm)->ShouldDisplayAlgorithmInfo())
80  std::cout << "----> Running Algorithm Tool: " << this->GetInstanceName() << ", " << this->GetType() << std::endl;
81 
82  ProtoParticleVector protoParticleVector;
83  this->FindClearShowers(overlapTensor, protoParticleVector);
84 
85  const bool particlesMade(pAlgorithm->CreateThreeDParticles(protoParticleVector));
86  return particlesMade;
87 }
std::vector< ProtoParticle > ProtoParticleVector
void FindClearShowers(const TensorType &overlapTensor, ProtoParticleVector &protoParticleVector) const
Find clear shower matches, hidden by simple ambiguities in the tensor.
BEGIN_PROLOG could also be cout
void lar_content::ClearShowersTool::SelectLargeShowerElements ( const TensorType::ElementList elementList,
const pandora::ClusterSet &  usedClusters,
IteratorList iteratorList 
) const
private

Select a list of large shower-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 large shower-like elements

Definition at line 140 of file ClearShowersTool.cc.

142 {
143  for (TensorType::ElementList::const_iterator eIter = elementList.begin(); eIter != elementList.end(); ++eIter)
144  {
145  if (m_visualize)
146  {
147  ClusterList clusterList{eIter->GetClusterU(), eIter->GetClusterV(), eIter->GetClusterW()};
148  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &clusterList, "Considered", RED));
149  PANDORA_MONITORING_API(ViewEvent(this->GetPandora()));
150  }
151 
152  if (usedClusters.count(eIter->GetClusterU()) || usedClusters.count(eIter->GetClusterV()) || usedClusters.count(eIter->GetClusterW()))
153  continue;
154 
155  if (eIter->GetOverlapResult().GetMatchedFraction() < m_minMatchedFraction)
156  continue;
157 
158  if (eIter->GetOverlapResult().GetNMatchedSamplingPoints() < m_minMatchedSamplingPoints)
159  continue;
160 
161  const XOverlap &xOverlap(eIter->GetOverlapResult().GetXOverlap());
162 
163  if ((xOverlap.GetXSpanU() > std::numeric_limits<float>::epsilon()) && (xOverlap.GetXOverlapSpan() / xOverlap.GetXSpanU() > m_minXOverlapFraction) &&
164  (xOverlap.GetXSpanV() > std::numeric_limits<float>::epsilon()) && (xOverlap.GetXOverlapSpan() / xOverlap.GetXSpanV() > m_minXOverlapFraction) &&
165  (xOverlap.GetXSpanW() > std::numeric_limits<float>::epsilon()) && (xOverlap.GetXOverlapSpan() / xOverlap.GetXSpanW() > m_minXOverlapFraction))
166  {
167  iteratorList.push_back(eIter);
168  if (m_visualize)
169  {
170  ClusterList clusterList{eIter->GetClusterU(), eIter->GetClusterV(), eIter->GetClusterW()};
171  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &clusterList, "Large", GREEN));
172  PANDORA_MONITORING_API(ViewEvent(this->GetPandora()));
173  }
174  }
175  }
176 }
float m_minMatchedFraction
The min matched sampling point fraction for particle creation.
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for particle creation.
float m_minXOverlapFraction
The min x overlap fraction (in each view) for particle creation.
bool m_visualize
Visualize cluster split locations.

Member Data Documentation

float lar_content::ClearShowersTool::m_minMatchedFraction
private

The min matched sampling point fraction for particle creation.

Definition at line 71 of file ClearShowersTool.h.

unsigned int lar_content::ClearShowersTool::m_minMatchedSamplingPointRatio
private

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

Definition at line 74 of file ClearShowersTool.h.

unsigned int lar_content::ClearShowersTool::m_minMatchedSamplingPoints
private

The min number of matched sampling points for particle creation.

Definition at line 72 of file ClearShowersTool.h.

float lar_content::ClearShowersTool::m_minXOverlapFraction
private

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

Definition at line 73 of file ClearShowersTool.h.

float lar_content::ClearShowersTool::m_minXOverlapSpanRatio
private

The min ratio between 1st and 2nd highest x-overlap spans for simple ambiguity resolution.

Definition at line 75 of file ClearShowersTool.h.

bool lar_content::ClearShowersTool::m_visualize
private

Visualize cluster split locations.

Definition at line 76 of file ClearShowersTool.h.


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