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

CrossGapsExtensionAlgorithm class. More...

#include <CrossGapsExtensionAlgorithm.h>

Inheritance diagram for lar_content::CrossGapsExtensionAlgorithm:
lar_content::ClusterExtensionAlgorithm lar_content::ClusterMergingAlgorithm

Public Member Functions

 CrossGapsExtensionAlgorithm ()
 Default constructor. More...
 

Private Member Functions

void GetListOfCleanClusters (const pandora::ClusterList *const pClusterList, pandora::ClusterVector &clusterVector) const
 Populate cluster vector with subset of cluster list, containing clusters judged to be clean. More...
 
void FillClusterAssociationMatrix (const pandora::ClusterVector &clusterVector, ClusterAssociationMatrix &clusterAssociationMatrix) const
 Fill the cluster association matrix. More...
 
void FillClusterMergeMap (const ClusterAssociationMatrix &clusterAssociationMatrix, ClusterMergeMap &clusterMergeMap) const
 Fill the cluster merge map. More...
 
void BuildPointingClusterList (const pandora::ClusterVector &clusterVector, LArPointingClusterList &innerPointingClusterList, LArPointingClusterList &outerPointingClusterList) const
 Build lists of pointing clusters that are adjacent to a detector gap. More...
 
void BuildPointingClusterList (const bool useInner, const LArPointingClusterList &inputPointingClusterList, LArPointingClusterList &outputPointingClusterList) const
 Build a list of pointing clusters that are adjacent to a detector gap. More...
 
bool IsAssociated (const LArPointingCluster::Vertex &pointingVertex1, const LArPointingCluster::Vertex &pointingVertex2) const
 Use pointing information to determine whether two clusters are associated. More...
 
bool IsAcrossGap (const float minZ, const float maxZ, const pandora::HitType hitType) const
 Determine whether a start and end position sit either side of a gap. More...
 
pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 

Private Attributes

float m_minClusterLength
 
float m_minGapFraction
 
float m_maxGapTolerance
 
float m_maxTransverseDisplacement
 
float m_maxRelativeAngle
 

Additional Inherited Members

- Protected Types inherited from lar_content::ClusterExtensionAlgorithm
typedef std::unordered_map< const pandora::Cluster *, ClusterAssociationClusterAssociationMap
 
typedef std::unordered_map< const pandora::Cluster *, ClusterAssociationMapClusterAssociationMatrix
 
- Protected Types inherited from lar_content::ClusterMergingAlgorithm
typedef std::unordered_map< const pandora::Cluster *, pandora::ClusterList > ClusterMergeMap
 
- Protected Member Functions inherited from lar_content::ClusterExtensionAlgorithm
void PopulateClusterMergeMap (const pandora::ClusterVector &clusterVector, ClusterMergeMap &clusterMergeMatrix) const
 Form associations between pointing clusters. More...
 
- Protected Member Functions inherited from lar_content::ClusterMergingAlgorithm
virtual pandora::StatusCode Run ()
 
void MergeClusters (pandora::ClusterVector &clusterVector, ClusterMergeMap &clusterMergeMap) const
 Merge associated clusters. More...
 
void CollectAssociatedClusters (const pandora::Cluster *const pSeedCluster, const ClusterMergeMap &clusterMergeMap, pandora::ClusterList &associatedClusterList) const
 Collect up all clusters associations related to a given seed cluster. More...
 
void CollectAssociatedClusters (const pandora::Cluster *const pSeedCluster, const pandora::Cluster *const pCurrentCluster, const ClusterMergeMap &clusterMergeMap, const pandora::ClusterSet &clusterVetoList, pandora::ClusterList &associatedClusterList) const
 Collect up all clusters associations related to a given seed cluster. More...
 
void GetSortedListOfCleanClusters (const pandora::ClusterVector &inputClusters, pandora::ClusterVector &outputClusters) const
 Sort the selected clusters, so that they have a well-defined ordering. More...
 
- Protected Attributes inherited from lar_content::ClusterMergingAlgorithm
std::string m_inputClusterListName
 The name of the input cluster list. If not specified, will access current list. More...
 

Detailed Description

CrossGapsExtensionAlgorithm class.

Definition at line 21 of file CrossGapsExtensionAlgorithm.h.

Constructor & Destructor Documentation

lar_content::CrossGapsExtensionAlgorithm::CrossGapsExtensionAlgorithm ( )

Member Function Documentation

void lar_content::CrossGapsExtensionAlgorithm::BuildPointingClusterList ( const pandora::ClusterVector &  clusterVector,
LArPointingClusterList innerPointingClusterList,
LArPointingClusterList outerPointingClusterList 
) const
private

Build lists of pointing clusters that are adjacent to a detector gap.

Parameters
clusterVectorthe input vector of clusters
innerPointingClusterListthe pointing clusters whose inner vertex is close to a detector gap
outerPointingClusterListthe pointing clusters whose outer vertex is close to a detector gap
void lar_content::CrossGapsExtensionAlgorithm::BuildPointingClusterList ( const bool  useInner,
const LArPointingClusterList inputPointingClusterList,
LArPointingClusterList outputPointingClusterList 
) const
private

Build a list of pointing clusters that are adjacent to a detector gap.

Parameters
useInnercheck the inner vertex
inputPointingClusterListthe input list of pointing clusters
outputPointingClusterListthe output list of pointing clusters

Definition at line 115 of file CrossGapsExtensionAlgorithm.cc.

117 {
118  for (const LArPointingCluster &pointingCluster : inputPointingClusterList)
119  {
120  const LArPointingCluster::Vertex &pointingVertex(useInner ? pointingCluster.GetInnerVertex() : pointingCluster.GetOuterVertex());
121  const HitType hitType(LArClusterHelper::GetClusterHitType(pointingCluster.GetCluster()));
122 
123  if (LArGeometryHelper::IsInGap(this->GetPandora(), pointingVertex.GetPosition(), hitType, m_maxGapTolerance))
124  outputPointingClusterList.push_back(pointingCluster);
125  }
126 }
enum cvn::HType HitType
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
static bool IsInGap(const pandora::Pandora &pandora, const pandora::CartesianVector &testPoint2D, const pandora::HitType hitType, const float gapTolerance=0.f)
Whether a 2D test point lies in a registered gap with the associated hit type.
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
void lar_content::CrossGapsExtensionAlgorithm::FillClusterAssociationMatrix ( const pandora::ClusterVector &  clusterVector,
ClusterAssociationMatrix clusterAssociationMatrix 
) const
privatevirtual

Fill the cluster association matrix.

Parameters
clusterVectorthe input vector of clusters
clusterAssociationMatrixthe matrix of associations

Implements lar_content::ClusterExtensionAlgorithm.

Definition at line 52 of file CrossGapsExtensionAlgorithm.cc.

53 {
54  // Build lists of pointing clusters in proximity to gaps
55  LArPointingClusterList innerPointingClusterList, outerPointingClusterList;
56  this->BuildPointingClusterList(clusterVector, innerPointingClusterList, outerPointingClusterList);
57 
58  // Form associations between pairs of pointing clusters
59  for (const LArPointingCluster &pointingClusterInner : innerPointingClusterList)
60  {
61  const LArPointingCluster::Vertex &pointingVertexInner(pointingClusterInner.GetInnerVertex());
62  const float zInner(pointingVertexInner.GetPosition().GetZ());
63 
64  for (const LArPointingCluster &pointingClusterOuter : outerPointingClusterList)
65  {
66  const LArPointingCluster::Vertex &pointingVertexOuter(pointingClusterOuter.GetOuterVertex());
67  const float zOuter(pointingVertexOuter.GetPosition().GetZ());
68 
69  if (!this->IsAcrossGap(zOuter, zInner, LArClusterHelper::GetClusterHitType(pointingClusterInner.GetCluster())))
70  continue;
71 
72  if (!this->IsAssociated(pointingVertexInner, pointingVertexOuter))
73  continue;
74 
75  const Cluster *const pClusterInner(pointingClusterInner.GetCluster());
76  const Cluster *const pClusterOuter(pointingClusterOuter.GetCluster());
77 
78  const float lengthSquaredInner(LArClusterHelper::GetLengthSquared(pClusterInner));
79  const float lengthSquaredOuter(LArClusterHelper::GetLengthSquared(pClusterOuter));
80 
81  (void)clusterAssociationMatrix[pClusterInner].insert(ClusterAssociationMap::value_type(pClusterOuter,
82  ClusterAssociation(ClusterAssociation::INNER, ClusterAssociation::OUTER, ClusterAssociation::STRONG, lengthSquaredOuter)));
83  (void)clusterAssociationMatrix[pClusterOuter].insert(ClusterAssociationMap::value_type(pClusterInner,
84  ClusterAssociation(ClusterAssociation::OUTER, ClusterAssociation::INNER, ClusterAssociation::STRONG, lengthSquaredInner)));
85  }
86  }
87 }
void BuildPointingClusterList(const pandora::ClusterVector &clusterVector, LArPointingClusterList &innerPointingClusterList, LArPointingClusterList &outerPointingClusterList) const
Build lists of pointing clusters that are adjacent to a detector gap.
std::vector< LArPointingCluster > LArPointingClusterList
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
bool IsAcrossGap(const float minZ, const float maxZ, const pandora::HitType hitType) const
Determine whether a start and end position sit either side of a gap.
bool IsAssociated(const LArPointingCluster::Vertex &pointingVertex1, const LArPointingCluster::Vertex &pointingVertex2) const
Use pointing information to determine whether two clusters are associated.
static float GetLengthSquared(const pandora::Cluster *const pCluster)
Get length squared of cluster.
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
void lar_content::CrossGapsExtensionAlgorithm::FillClusterMergeMap ( const ClusterAssociationMatrix clusterAssociationMatrix,
ClusterMergeMap clusterMergeMap 
) const
privatevirtual

Fill the cluster merge map.

Parameters
clusterAssociationMatrixthe matrix of cluster associations
clusterMergeMapthe map of cluster merges

Implements lar_content::ClusterExtensionAlgorithm.

Definition at line 159 of file CrossGapsExtensionAlgorithm.cc.

160 {
161  // Decide which associations will become merges
162  // To make the merge A <-> B, both A -> B and B -> A must be strong associations
163  // with the largest figures of merit of all the A -> X and B -> Y associations
164 
165  // First step: remove double-counting from the map of associations
166  // i.e. if the map has A <-> B, B <-> C, A <-> C, then remove A <-> C
167  ClusterAssociationMatrix clusterAssociationMatrix;
168 
169  ClusterVector sortedInputClusters;
170  for (const auto &mapEntry : inputAssociationMatrix)
171  sortedInputClusters.push_back(mapEntry.first);
172  std::sort(sortedInputClusters.begin(), sortedInputClusters.end(), LArClusterHelper::SortByNHits);
173 
174  for (const Cluster *const pCluster1 : sortedInputClusters)
175  {
176  const ClusterAssociationMap &associationMap1(inputAssociationMatrix.at(pCluster1));
177 
178  for (const Cluster *const pCluster2 : sortedInputClusters)
179  {
180  if (pCluster1 == pCluster2)
181  continue;
182 
183  const ClusterAssociationMap &associationMap2(inputAssociationMatrix.at(pCluster2));
184 
185  ClusterAssociationMap::const_iterator iter12 = associationMap1.find(pCluster2);
186  if (associationMap1.end() == iter12)
187  continue;
188 
189  ClusterAssociationMap::const_iterator iter21 = associationMap2.find(pCluster1);
190  if (associationMap2.end() == iter21)
191  continue;
192 
193  const ClusterAssociation &association12(iter12->second);
194  const ClusterAssociation &association21(iter21->second);
195 
196  bool isAssociated(true);
197 
198  ClusterVector sortedAssociationClusters;
199  for (const auto &mapEntry : associationMap1)
200  sortedAssociationClusters.push_back(mapEntry.first);
201  std::sort(sortedAssociationClusters.begin(), sortedAssociationClusters.end(), LArClusterHelper::SortByNHits);
202 
203  for (const Cluster *const pCluster3 : sortedAssociationClusters)
204  {
205  const ClusterAssociation &association13(associationMap1.at(pCluster3));
206 
207  ClusterAssociationMap::const_iterator iter23 = associationMap2.find(pCluster3);
208  if (associationMap2.end() == iter23)
209  continue;
210 
211  const ClusterAssociation &association23(iter23->second);
212 
213  if (association12.GetParent() == association13.GetParent() && association23.GetParent() == association21.GetParent() &&
214  association13.GetDaughter() != association23.GetDaughter())
215  {
216  isAssociated = false;
217  break;
218  }
219  }
220 
221  if (isAssociated)
222  {
223  (void)clusterAssociationMatrix[pCluster1].insert(ClusterAssociationMap::value_type(pCluster2, association12));
224  (void)clusterAssociationMatrix[pCluster2].insert(ClusterAssociationMap::value_type(pCluster1, association21));
225  }
226  }
227  }
228 
229  // Second step: find the best associations A -> X and B -> Y
230  ClusterAssociationMatrix intermediateAssociationMatrix;
231 
232  ClusterVector sortedClusters;
233  for (const auto &mapEntry : clusterAssociationMatrix)
234  sortedClusters.push_back(mapEntry.first);
235  std::sort(sortedClusters.begin(), sortedClusters.end(), LArClusterHelper::SortByNHits);
236 
237  for (const Cluster *const pParentCluster : sortedClusters)
238  {
239  const ClusterAssociationMap &clusterAssociationMap(clusterAssociationMatrix.at(pParentCluster));
240 
241  const Cluster *pBestClusterInner(nullptr);
242  ClusterAssociation bestAssociationInner(ClusterAssociation::UNDEFINED, ClusterAssociation::UNDEFINED, ClusterAssociation::NONE, 0.f);
243 
244  const Cluster *pBestClusterOuter(nullptr);
245  ClusterAssociation bestAssociationOuter(ClusterAssociation::UNDEFINED, ClusterAssociation::UNDEFINED, ClusterAssociation::NONE, 0.f);
246 
247  ClusterVector sortedAssociationClusters;
248  for (const auto &mapEntry : clusterAssociationMap)
249  sortedAssociationClusters.push_back(mapEntry.first);
250  std::sort(sortedAssociationClusters.begin(), sortedAssociationClusters.end(), LArClusterHelper::SortByNHits);
251 
252  for (const Cluster *const pDaughterCluster : sortedAssociationClusters)
253  {
254  const ClusterAssociation &clusterAssociation(clusterAssociationMap.at(pDaughterCluster));
255 
256  // Inner associations
257  if (clusterAssociation.GetParent() == ClusterAssociation::INNER)
258  {
259  if (clusterAssociation.GetFigureOfMerit() > bestAssociationInner.GetFigureOfMerit())
260  {
261  bestAssociationInner = clusterAssociation;
262  pBestClusterInner = pDaughterCluster;
263  }
264  }
265 
266  // Outer associations
267  if (clusterAssociation.GetParent() == ClusterAssociation::OUTER)
268  {
269  if (clusterAssociation.GetFigureOfMerit() > bestAssociationOuter.GetFigureOfMerit())
270  {
271  bestAssociationOuter = clusterAssociation;
272  pBestClusterOuter = pDaughterCluster;
273  }
274  }
275  }
276 
277  if (pBestClusterInner)
278  (void)intermediateAssociationMatrix[pParentCluster].insert(ClusterAssociationMap::value_type(pBestClusterInner, bestAssociationInner));
279 
280  if (pBestClusterOuter)
281  (void)intermediateAssociationMatrix[pParentCluster].insert(ClusterAssociationMap::value_type(pBestClusterOuter, bestAssociationOuter));
282  }
283 
284  // Third step: make the merge if A -> X and B -> Y is in fact A -> B and B -> A
285  ClusterVector intermediateSortedClusters;
286  for (const auto &mapEntry : intermediateAssociationMatrix)
287  intermediateSortedClusters.push_back(mapEntry.first);
288  std::sort(intermediateSortedClusters.begin(), intermediateSortedClusters.end(), LArClusterHelper::SortByNHits);
289 
290  for (const Cluster *const pParentCluster : intermediateSortedClusters)
291  {
292  const ClusterAssociationMap &parentAssociationMap(intermediateAssociationMatrix.at(pParentCluster));
293 
294  ClusterVector sortedAssociationClusters;
295  for (const auto &mapEntry : parentAssociationMap)
296  sortedAssociationClusters.push_back(mapEntry.first);
297  std::sort(sortedAssociationClusters.begin(), sortedAssociationClusters.end(), LArClusterHelper::SortByNHits);
298 
299  for (const Cluster *const pDaughterCluster : sortedAssociationClusters)
300  {
301  const ClusterAssociation &parentToDaughterAssociation(parentAssociationMap.at(pDaughterCluster));
302 
303  ClusterAssociationMatrix::const_iterator iter5 = intermediateAssociationMatrix.find(pDaughterCluster);
304 
305  if (intermediateAssociationMatrix.end() == iter5)
306  continue;
307 
308  const ClusterAssociationMap &daughterAssociationMap(iter5->second);
309 
310  ClusterAssociationMap::const_iterator iter6 = daughterAssociationMap.find(pParentCluster);
311 
312  if (daughterAssociationMap.end() == iter6)
313  continue;
314 
315  const ClusterAssociation &daughterToParentAssociation(iter6->second);
316 
317  if (parentToDaughterAssociation.GetParent() == daughterToParentAssociation.GetDaughter() &&
318  parentToDaughterAssociation.GetDaughter() == daughterToParentAssociation.GetParent())
319  {
320  ClusterList &parentList(clusterMergeMap[pParentCluster]);
321 
322  if (parentList.end() == std::find(parentList.begin(), parentList.end(), pDaughterCluster))
323  parentList.push_back(pDaughterCluster);
324  }
325  }
326  }
327 }
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.
intermediate_table::const_iterator const_iterator
std::unordered_map< const pandora::Cluster *, ClusterAssociation > ClusterAssociationMap
std::unordered_map< const pandora::Cluster *, ClusterAssociationMap > ClusterAssociationMatrix
std::vector< art::Ptr< recob::Cluster > > ClusterVector
void lar_content::CrossGapsExtensionAlgorithm::GetListOfCleanClusters ( const pandora::ClusterList *const  pClusterList,
pandora::ClusterVector &  clusterVector 
) const
privatevirtual

Populate cluster vector with subset of cluster list, containing clusters judged to be clean.

Parameters
pClusterListaddress of the cluster list
clusterVectorto receive the populated cluster vector

Implements lar_content::ClusterMergingAlgorithm.

Definition at line 33 of file CrossGapsExtensionAlgorithm.cc.

34 {
35  // ATTN May want to opt-out completely if no gap information available
36  // if (PandoraContentApi::GetGeometry(*this)->GetDetectorGapList().empty())
37  // return;
38 
39  for (const Cluster *const pCluster : *pClusterList)
40  {
42  continue;
43 
44  clusterVector.push_back(pCluster);
45  }
46 
47  std::sort(clusterVector.begin(), clusterVector.end(), LArClusterHelper::SortByNHits);
48 }
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.
static float GetLengthSquared(const pandora::Cluster *const pCluster)
Get length squared of cluster.
bool lar_content::CrossGapsExtensionAlgorithm::IsAcrossGap ( const float  minZ,
const float  maxZ,
const pandora::HitType  hitType 
) const
private

Determine whether a start and end position sit either side of a gap.

Parameters
minZthe start position
maxZthe end position
hitTypethe hitType

Definition at line 144 of file CrossGapsExtensionAlgorithm.cc.

145 {
146  if (maxZ - minZ < std::numeric_limits<float>::epsilon())
147  return false;
148 
149  const float gapDeltaZ(LArGeometryHelper::CalculateGapDeltaZ(this->GetPandora(), minZ, maxZ, hitType));
150 
151  if (gapDeltaZ / (maxZ - minZ) < m_minGapFraction)
152  return false;
153 
154  return true;
155 }
static float CalculateGapDeltaZ(const pandora::Pandora &pandora, const float minZ, const float maxZ, const pandora::HitType hitType)
Calculate the total distance within a given 2D region that is composed of detector gaps...
bool lar_content::CrossGapsExtensionAlgorithm::IsAssociated ( const LArPointingCluster::Vertex pointingVertex1,
const LArPointingCluster::Vertex pointingVertex2 
) const
private

Use pointing information to determine whether two clusters are associated.

Parameters
pointingVertex1the first pointing vertex
pointingVertex2the second pointing vertex

Definition at line 130 of file CrossGapsExtensionAlgorithm.cc.

131 {
132  const float maxLongitudinalDisplacement((pointingVertex2.GetPosition() - pointingVertex1.GetPosition()).GetMagnitude());
133 
134  const bool isAssociated1(LArPointingClusterHelper::IsEmission(pointingVertex1.GetPosition(), pointingVertex2, -1.f,
135  maxLongitudinalDisplacement + 1.f, m_maxTransverseDisplacement, m_maxRelativeAngle));
136  const bool isAssociated2(LArPointingClusterHelper::IsEmission(pointingVertex2.GetPosition(), pointingVertex1, -1.f,
137  maxLongitudinalDisplacement + 1.f, m_maxTransverseDisplacement, m_maxRelativeAngle));
138 
139  return (isAssociated1 && isAssociated2);
140 }
static bool IsEmission(const pandora::CartesianVector &parentVertex, const LArPointingCluster::Vertex &daughterVertex, const float minLongitudinalDistance, const float maxLongitudinalDistance, const float maxTransverseDistance, const float angularAllowance)
Whether pointing vertex is emitted from a given position.
StatusCode lar_content::CrossGapsExtensionAlgorithm::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
privatevirtual

Reimplemented from lar_content::ClusterMergingAlgorithm.

Definition at line 331 of file CrossGapsExtensionAlgorithm.cc.

332 {
333  PANDORA_RETURN_RESULT_IF_AND_IF(
334  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinClusterLength", m_minClusterLength));
335 
336  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinGapFraction", m_minGapFraction));
337 
338  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxGapTolerance", m_maxGapTolerance));
339 
340  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
341  XmlHelper::ReadValue(xmlHandle, "MaxTransverseDisplacement", m_maxTransverseDisplacement));
342 
343  float maxCosRelativeAngle(std::cos(m_maxRelativeAngle * M_PI / 180.0));
344  PANDORA_RETURN_RESULT_IF_AND_IF(
345  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxCosRelativeAngle", maxCosRelativeAngle));
346  m_maxRelativeAngle = (180.0 / M_PI) * std::acos(maxCosRelativeAngle);
347 
348  return ClusterExtensionAlgorithm::ReadSettings(xmlHandle);
349 }
#define M_PI
Definition: includeROOT.h:54
virtual pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)

Member Data Documentation

float lar_content::CrossGapsExtensionAlgorithm::m_maxGapTolerance
private

Definition at line 75 of file CrossGapsExtensionAlgorithm.h.

float lar_content::CrossGapsExtensionAlgorithm::m_maxRelativeAngle
private

Definition at line 77 of file CrossGapsExtensionAlgorithm.h.

float lar_content::CrossGapsExtensionAlgorithm::m_maxTransverseDisplacement
private

Definition at line 76 of file CrossGapsExtensionAlgorithm.h.

float lar_content::CrossGapsExtensionAlgorithm::m_minClusterLength
private

Definition at line 73 of file CrossGapsExtensionAlgorithm.h.

float lar_content::CrossGapsExtensionAlgorithm::m_minGapFraction
private

Definition at line 74 of file CrossGapsExtensionAlgorithm.h.


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