LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
lar_content::TrackSplittingTool Class Reference

TrackSplittingTool class. More...

#include "TrackSplittingTool.h"

Inheritance diagram for lar_content::TrackSplittingTool:
lar_content::TransverseTensorTool

Classes

class  Particle
 Particle class. More...
 

Public Types

typedef ThreeViewTransverseTracksAlgorithm::MatchingType::TensorType TensorType
 
typedef std::vector< TensorType::ElementList::const_iteratorIteratorList
 

Public Member Functions

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

Private Member Functions

pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
void FindTracks (ThreeViewTransverseTracksAlgorithm *const pAlgorithm, const TensorType &overlapTensor, SplitPositionMap &splitPositionMap) const
 Find remaining tracks, hidden by spurious track segments (and maybe other ambiguities) in the tensor. More...
 
void SelectElements (const TensorType::ElementList &elementList, const pandora::ClusterSet &usedClusters, IteratorList &iteratorList) const
 Select a list of the relevant elements from a set of connected tensor elements. More...
 
bool PassesChecks (ThreeViewTransverseTracksAlgorithm *const pAlgorithm, const TensorType::Element &element, const bool isMinX, pandora::ClusterSet &usedClusters, SplitPositionMap &splitPositionMap) const
 Whether a provided tensor element can be used to construct a pfo. More...
 
bool CheckSplitPosition (const pandora::CartesianVector &splitPosition, const float splitX, const TwoDSlidingFitResult &longFitResult) const
 Check a candidate split position for consistency with the associated track cluster sliding linear fit. 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 (between long clusters and short cluster vs. shared overlap) More...
 
unsigned int m_minMatchedSamplingPointRatio
 The min ratio between 1st and 2nd highest msps for simple ambiguity resolution. More...
 
float m_maxShortDeltaXFraction
 Max x distance between ends of two short clusters (measured as fraction of long cluster x length) More...
 
float m_maxAbsoluteShortDeltaX
 Max x distance between ends of two short clusters (measured as an absolute distance) More...
 
float m_minLongDeltaXFraction
 Min x distance between ends of short and long clusters (measured as fraction of long cluster x length) More...
 
float m_minAbsoluteLongDeltaX
 Min x distance between ends of short and long clusters (measured as an absolute distance) More...
 
float m_minSplitToVertexProjection
 Min projected distance between split position and either inner or outer vertex of long cluster. More...
 
float m_maxSplitVsFitPositionDistance
 Max allowed distance between split position and sliding linear fit position at the split x coordinate. More...
 

Detailed Description

TrackSplittingTool class.

Definition at line 19 of file TrackSplittingTool.h.

Member Typedef Documentation

Constructor & Destructor Documentation

lar_content::TrackSplittingTool::TrackSplittingTool ( )

Default constructor.

Definition at line 23 of file TrackSplittingTool.cc.

23  :
34 {
35 }
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for particle creation.
float m_minSplitToVertexProjection
Min projected distance between split position and either inner or outer vertex of long cluster...
float m_maxAbsoluteShortDeltaX
Max x distance between ends of two short clusters (measured as an absolute distance) ...
float m_minMatchedFraction
The min matched sampling point fraction for particle creation.
TFile f
Definition: plotHisto.C:6
float m_minAbsoluteLongDeltaX
Min x distance between ends of short and long clusters (measured as an absolute distance) ...
float m_maxShortDeltaXFraction
Max x distance between ends of two short clusters (measured as fraction of long cluster x length) ...
float m_minLongDeltaXFraction
Min x distance between ends of short and long clusters (measured as fraction of long cluster x length...
float m_minXOverlapFraction
The min x overlap fraction (between long clusters and short cluster vs. shared overlap) ...
unsigned int m_minMatchedSamplingPointRatio
The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.
float m_maxSplitVsFitPositionDistance
Max allowed distance between split position and sliding linear fit position at the split x coordinate...

Member Function Documentation

bool lar_content::TrackSplittingTool::CheckSplitPosition ( const pandora::CartesianVector &  splitPosition,
const float  splitX,
const TwoDSlidingFitResult longFitResult 
) const
private

Check a candidate split position for consistency with the associated track cluster sliding linear fit.

Parameters
splitPositionthe candidate split position
splitXthe split x coordinate
longFitResultthe sliding linear fit for the long cluster

Definition at line 211 of file TrackSplittingTool.cc.

References lar_content::TwoDSlidingFitResult::GetGlobalFitPositionListAtX(), and m_maxSplitVsFitPositionDistance.

Referenced by PassesChecks().

212 {
213  CartesianPointVector fitPositionList;
214  if (STATUS_CODE_SUCCESS != longFitResult.GetGlobalFitPositionListAtX(splitX, fitPositionList))
215  return false;
216 
217  for (CartesianPointVector::const_iterator iter = fitPositionList.begin(), iterEnd = fitPositionList.end(); iter != iterEnd; ++iter)
218  {
219  if ((splitPosition - *iter).GetMagnitude() < m_maxSplitVsFitPositionDistance)
220  return true;
221  }
222 
223  return false;
224 }
intermediate_table::const_iterator const_iterator
float m_maxSplitVsFitPositionDistance
Max allowed distance between split position and sliding linear fit position at the split x coordinate...
void lar_content::TrackSplittingTool::FindTracks ( ThreeViewTransverseTracksAlgorithm *const  pAlgorithm,
const TensorType overlapTensor,
SplitPositionMap splitPositionMap 
) const
private

Find remaining tracks, hidden by spurious track segments (and maybe other ambiguities) in the tensor.

Parameters
pAlgorithmaddress of the calling algorithm
overlapTensorthe overlap tensor
splitPositionMapto receive the split position map

Definition at line 53 of file TrackSplittingTool.cc.

References lar_content::OverlapTensor< T >::GetConnectedElements(), lar_content::OverlapTensor< T >::GetSortedKeyClusters(), lar_content::LongTracksTool::HasLongDirectConnections(), lar_content::LongTracksTool::IsLongerThanDirectConnections(), m_minMatchedSamplingPointRatio, PassesChecks(), and SelectElements().

Referenced by Run().

55 {
56  ClusterSet usedClusters;
57  ClusterVector sortedKeyClusters;
58  overlapTensor.GetSortedKeyClusters(sortedKeyClusters);
59 
60  for (const Cluster *const pKeyCluster : sortedKeyClusters)
61  {
62  if (!pKeyCluster->IsAvailable())
63  continue;
64 
65  unsigned int nU(0), nV(0), nW(0);
66  TensorType::ElementList elementList;
67  overlapTensor.GetConnectedElements(pKeyCluster, true, elementList, nU, nV, nW);
68 
69  IteratorList iteratorList;
70  this->SelectElements(elementList, usedClusters, iteratorList);
71 
72  for (IteratorList::const_iterator iIter = iteratorList.begin(), iIterEnd = iteratorList.end(); iIter != iIterEnd; ++iIter)
73  {
74  if (LongTracksTool::HasLongDirectConnections(iIter, iteratorList))
75  continue;
76 
78  continue;
79 
80  if (!this->PassesChecks(pAlgorithm, *(*iIter), true, usedClusters, splitPositionMap) &&
81  !this->PassesChecks(pAlgorithm, *(*iIter), false, usedClusters, splitPositionMap))
82  {
83  continue;
84  }
85 
86  usedClusters.insert((*iIter)->GetClusterU());
87  usedClusters.insert((*iIter)->GetClusterV());
88  usedClusters.insert((*iIter)->GetClusterW());
89  }
90  }
91 }
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...
intermediate_table::const_iterator const_iterator
void SelectElements(const TensorType::ElementList &elementList, const pandora::ClusterSet &usedClusters, IteratorList &iteratorList) const
Select a list of the relevant elements from a set of connected tensor elements.
bool PassesChecks(ThreeViewTransverseTracksAlgorithm *const pAlgorithm, const TensorType::Element &element, const bool isMinX, pandora::ClusterSet &usedClusters, SplitPositionMap &splitPositionMap) const
Whether a provided tensor element can be used to construct a pfo.
unsigned int m_minMatchedSamplingPointRatio
The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.
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::TrackSplittingTool::PassesChecks ( ThreeViewTransverseTracksAlgorithm *const  pAlgorithm,
const TensorType::Element &  element,
const bool  isMinX,
pandora::ClusterSet &  usedClusters,
SplitPositionMap splitPositionMap 
) const
private

Whether a provided tensor element can be used to construct a pfo.

Parameters
pAlgorithmaddress of the calling algorithm
elementthe tensor element
isMinXwhether to look for track splits at min or max x coordinate
usedClustersthe list of used clusters
splitPositionMapto receive the split position map

Definition at line 133 of file TrackSplittingTool.cc.

References CheckSplitPosition(), f, lar_content::NViewTrackMatchingAlgorithm< T >::GetCachedSlidingFitResult(), lar_content::LArClusterHelper::GetClusterHitType(), lar_content::LArPointingCluster::GetInnerVertex(), lar_content::LArPointingCluster::Vertex::GetPosition(), lar_content::TrackSplittingTool::Particle::m_longMaxX, lar_content::TrackSplittingTool::Particle::m_longMinX, m_maxAbsoluteShortDeltaX, m_maxShortDeltaXFraction, m_minAbsoluteLongDeltaX, m_minLongDeltaXFraction, m_minSplitToVertexProjection, lar_content::TrackSplittingTool::Particle::m_pCluster1, lar_content::TrackSplittingTool::Particle::m_pCluster2, lar_content::TrackSplittingTool::Particle::m_pLongCluster, lar_content::TrackSplittingTool::Particle::m_short1MaxX, lar_content::TrackSplittingTool::Particle::m_short1MinX, lar_content::TrackSplittingTool::Particle::m_short2MaxX, lar_content::TrackSplittingTool::Particle::m_short2MinX, and lar_content::LArGeometryHelper::MergeTwoPositions().

Referenced by FindTracks().

135 {
136  try
137  {
138  const Particle particle(element);
139 
140  if (usedClusters.count(particle.m_pLongCluster) || usedClusters.count(particle.m_pCluster1) || usedClusters.count(particle.m_pCluster2))
141  return false;
142 
143  const float longXSpan(particle.m_longMaxX - particle.m_longMinX);
144 
145  if (longXSpan < std::numeric_limits<float>::epsilon())
146  return false;
147 
148  const float splitX(isMinX ? (0.5f * (particle.m_short1MinX + particle.m_short2MinX)) : (0.5f * (particle.m_short1MaxX + particle.m_short2MaxX)));
149  const float shortDeltaX(
150  isMinX ? std::fabs(particle.m_short1MinX - particle.m_short2MinX) : std::fabs(particle.m_short1MaxX - particle.m_short2MaxX));
151  const float longDeltaX(isMinX ? (splitX - particle.m_longMinX) : (particle.m_longMaxX - splitX));
152 
153  if (((shortDeltaX / longXSpan) > m_maxShortDeltaXFraction) || (shortDeltaX > m_maxAbsoluteShortDeltaX) ||
154  ((longDeltaX / longXSpan) < m_minLongDeltaXFraction) || (longDeltaX < m_minAbsoluteLongDeltaX))
155  {
156  return false;
157  }
158 
159  const LArPointingCluster pointingCluster1(pAlgorithm->GetCachedSlidingFitResult(particle.m_pCluster1));
160  const LArPointingCluster pointingCluster2(pAlgorithm->GetCachedSlidingFitResult(particle.m_pCluster2));
161  const LArPointingCluster longPointingCluster(pAlgorithm->GetCachedSlidingFitResult(particle.m_pLongCluster));
162 
163  const CartesianVector &minPos1{
164  pointingCluster1.GetInnerVertex().GetPosition().GetX() < pointingCluster1.GetOuterVertex().GetPosition().GetX()
165  ? pointingCluster1.GetInnerVertex().GetPosition()
166  : pointingCluster1.GetOuterVertex().GetPosition()};
167  const CartesianVector &minPos2{
168  pointingCluster2.GetInnerVertex().GetPosition().GetX() < pointingCluster2.GetOuterVertex().GetPosition().GetX()
169  ? pointingCluster2.GetInnerVertex().GetPosition()
170  : pointingCluster2.GetOuterVertex().GetPosition()};
171  const CartesianVector &maxPos1{
172  pointingCluster1.GetInnerVertex().GetPosition().GetX() > pointingCluster1.GetOuterVertex().GetPosition().GetX()
173  ? pointingCluster1.GetInnerVertex().GetPosition()
174  : pointingCluster1.GetOuterVertex().GetPosition()};
175  const CartesianVector &maxPos2{
176  pointingCluster2.GetInnerVertex().GetPosition().GetX() > pointingCluster2.GetOuterVertex().GetPosition().GetX()
177  ? pointingCluster2.GetInnerVertex().GetPosition()
178  : pointingCluster2.GetOuterVertex().GetPosition()};
179  const CartesianVector position1(isMinX ? minPos1 : maxPos1);
180  const CartesianVector position2(isMinX ? minPos2 : maxPos2);
181 
182  CartesianVector splitPosition(0.f, 0.f, 0.f);
183  float chiSquared(std::numeric_limits<float>::max());
184  LArGeometryHelper::MergeTwoPositions(this->GetPandora(), LArClusterHelper::GetClusterHitType(particle.m_pCluster1),
185  LArClusterHelper::GetClusterHitType(particle.m_pCluster2), position1, position2, splitPosition, chiSquared);
186 
187  if (!this->CheckSplitPosition(splitPosition, splitX, pAlgorithm->GetCachedSlidingFitResult(particle.m_pLongCluster)))
188  return false;
189 
190  const CartesianVector splitToInnerVertex(splitPosition - longPointingCluster.GetInnerVertex().GetPosition());
191  const CartesianVector outerVertexToSplit(longPointingCluster.GetOuterVertex().GetPosition() - splitPosition);
192  const CartesianVector outerToInnerUnitVector(
193  (longPointingCluster.GetOuterVertex().GetPosition() - longPointingCluster.GetInnerVertex().GetPosition()).GetUnitVector());
194 
195  if ((splitToInnerVertex.GetDotProduct(outerToInnerUnitVector) > m_minSplitToVertexProjection) &&
196  (outerVertexToSplit.GetDotProduct(outerToInnerUnitVector) > m_minSplitToVertexProjection))
197  {
198  splitPositionMap[particle.m_pLongCluster].push_back(splitPosition);
199  return true;
200  }
201  }
202  catch (StatusCodeException &)
203  {
204  }
205 
206  return false;
207 }
bool CheckSplitPosition(const pandora::CartesianVector &splitPosition, const float splitX, const TwoDSlidingFitResult &longFitResult) const
Check a candidate split position for consistency with the associated track cluster sliding linear fit...
float m_minSplitToVertexProjection
Min projected distance between split position and either inner or outer vertex of long cluster...
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
float m_maxAbsoluteShortDeltaX
Max x distance between ends of two short clusters (measured as an absolute distance) ...
TFile f
Definition: plotHisto.C:6
float m_minAbsoluteLongDeltaX
Min x distance between ends of short and long clusters (measured as an absolute distance) ...
float m_maxShortDeltaXFraction
Max x distance between ends of two short clusters (measured as fraction of long cluster x length) ...
float m_minLongDeltaXFraction
Min x distance between ends of short and long clusters (measured as fraction of long cluster x length...
static float MergeTwoPositions(const pandora::Pandora &pandora, const pandora::HitType view1, const pandora::HitType view2, const float position1, const float position2)
Merge two views (U,V) to give a third view (Z).
StatusCode lar_content::TrackSplittingTool::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
private

Definition at line 261 of file TrackSplittingTool.cc.

References m_maxAbsoluteShortDeltaX, m_maxShortDeltaXFraction, m_maxSplitVsFitPositionDistance, m_minAbsoluteLongDeltaX, m_minLongDeltaXFraction, m_minMatchedFraction, m_minMatchedSamplingPointRatio, m_minMatchedSamplingPoints, m_minSplitToVertexProjection, and m_minXOverlapFraction.

262 {
263  PANDORA_RETURN_RESULT_IF_AND_IF(
264  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinMatchedFraction", m_minMatchedFraction));
265 
266  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
267  XmlHelper::ReadValue(xmlHandle, "MinMatchedSamplingPoints", m_minMatchedSamplingPoints));
268 
269  PANDORA_RETURN_RESULT_IF_AND_IF(
270  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinXOverlapFraction", m_minXOverlapFraction));
271 
272  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
273  XmlHelper::ReadValue(xmlHandle, "MinMatchedSamplingPointRatio", m_minMatchedSamplingPointRatio));
274 
275  PANDORA_RETURN_RESULT_IF_AND_IF(
276  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxShortDeltaXFraction", m_maxShortDeltaXFraction));
277 
278  PANDORA_RETURN_RESULT_IF_AND_IF(
279  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxAbsoluteShortDeltaX", m_maxAbsoluteShortDeltaX));
280 
281  PANDORA_RETURN_RESULT_IF_AND_IF(
282  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinLongDeltaXFraction", m_minLongDeltaXFraction));
283 
284  PANDORA_RETURN_RESULT_IF_AND_IF(
285  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinAbsoluteLongDeltaX", m_minAbsoluteLongDeltaX));
286 
287  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
288  XmlHelper::ReadValue(xmlHandle, "MinSplitToVertexProjection", m_minSplitToVertexProjection));
289 
290  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
291  XmlHelper::ReadValue(xmlHandle, "MaxSplitVsFitPositionDistance", m_maxSplitVsFitPositionDistance));
292 
293  return STATUS_CODE_SUCCESS;
294 }
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for particle creation.
float m_minSplitToVertexProjection
Min projected distance between split position and either inner or outer vertex of long cluster...
float m_maxAbsoluteShortDeltaX
Max x distance between ends of two short clusters (measured as an absolute distance) ...
float m_minMatchedFraction
The min matched sampling point fraction for particle creation.
float m_minAbsoluteLongDeltaX
Min x distance between ends of short and long clusters (measured as an absolute distance) ...
float m_maxShortDeltaXFraction
Max x distance between ends of two short clusters (measured as fraction of long cluster x length) ...
float m_minLongDeltaXFraction
Min x distance between ends of short and long clusters (measured as fraction of long cluster x length...
float m_minXOverlapFraction
The min x overlap fraction (between long clusters and short cluster vs. shared overlap) ...
unsigned int m_minMatchedSamplingPointRatio
The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.
float m_maxSplitVsFitPositionDistance
Max allowed distance between split position and sliding linear fit position at the split x coordinate...
bool lar_content::TrackSplittingTool::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 39 of file TrackSplittingTool.cc.

References FindTracks(), and lar_content::NViewTrackMatchingAlgorithm< T >::MakeClusterSplits().

40 {
41  if (PandoraContentApi::GetSettings(*pAlgorithm)->ShouldDisplayAlgorithmInfo())
42  std::cout << "----> Running Algorithm Tool: " << this->GetInstanceName() << ", " << this->GetType() << std::endl;
43 
44  SplitPositionMap splitPositionMap;
45  this->FindTracks(pAlgorithm, overlapTensor, splitPositionMap);
46 
47  const bool splitsMade(pAlgorithm->MakeClusterSplits(splitPositionMap));
48  return splitsMade;
49 }
void FindTracks(ThreeViewTransverseTracksAlgorithm *const pAlgorithm, const TensorType &overlapTensor, SplitPositionMap &splitPositionMap) const
Find remaining tracks, hidden by spurious track segments (and maybe other ambiguities) in the tensor...
std::unordered_map< const pandora::Cluster *, pandora::CartesianPointVector > SplitPositionMap
void lar_content::TrackSplittingTool::SelectElements ( const TensorType::ElementList elementList,
const pandora::ClusterSet &  usedClusters,
IteratorList iteratorList 
) const
private

Select a list of the relevant 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 95 of file TrackSplittingTool.cc.

References m_minMatchedFraction, m_minMatchedSamplingPoints, and m_minXOverlapFraction.

Referenced by FindTracks().

96 {
97  for (TensorType::ElementList::const_iterator eIter = elementList.begin(); eIter != elementList.end(); ++eIter)
98  {
99  if (usedClusters.count(eIter->GetClusterU()) || usedClusters.count(eIter->GetClusterV()) || usedClusters.count(eIter->GetClusterW()))
100  continue;
101 
102  if (eIter->GetOverlapResult().GetMatchedFraction() < m_minMatchedFraction)
103  continue;
104 
105  if (eIter->GetOverlapResult().GetNMatchedSamplingPoints() < m_minMatchedSamplingPoints)
106  continue;
107 
108  const XOverlap &xOverlap(eIter->GetOverlapResult().GetXOverlap());
109  const float longSpan(std::max(xOverlap.GetXSpanU(), std::max(xOverlap.GetXSpanV(), xOverlap.GetXSpanW())));
110  const float shortSpan1(std::min(xOverlap.GetXSpanU(), std::min(xOverlap.GetXSpanV(), xOverlap.GetXSpanW())));
111  const float shortSpan2(((xOverlap.GetXSpanU() > shortSpan1) && (xOverlap.GetXSpanU() < longSpan)) ? xOverlap.GetXSpanU()
112  : ((xOverlap.GetXSpanV() > shortSpan1) && (xOverlap.GetXSpanV() < longSpan)) ? xOverlap.GetXSpanV()
113  : xOverlap.GetXSpanW());
114 
115  if ((shortSpan1 < std::numeric_limits<float>::epsilon()) || (longSpan < std::numeric_limits<float>::epsilon()))
116  continue;
117 
118  if ((shortSpan1 / xOverlap.GetXOverlapSpan()) < m_minXOverlapFraction)
119  continue;
120 
121  if ((shortSpan1 / shortSpan2) < m_minXOverlapFraction)
122  continue;
123 
124  if ((shortSpan1 / longSpan) > m_minXOverlapFraction)
125  continue;
126 
127  iteratorList.push_back(eIter);
128  }
129 }
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for particle creation.
intermediate_table::const_iterator const_iterator
float m_minMatchedFraction
The min matched sampling point fraction for particle creation.
float m_minXOverlapFraction
The min x overlap fraction (between long clusters and short cluster vs. shared overlap) ...

Member Data Documentation

float lar_content::TrackSplittingTool::m_maxAbsoluteShortDeltaX
private

Max x distance between ends of two short clusters (measured as an absolute distance)

Definition at line 101 of file TrackSplittingTool.h.

Referenced by PassesChecks(), and ReadSettings().

float lar_content::TrackSplittingTool::m_maxShortDeltaXFraction
private

Max x distance between ends of two short clusters (measured as fraction of long cluster x length)

Definition at line 100 of file TrackSplittingTool.h.

Referenced by PassesChecks(), and ReadSettings().

float lar_content::TrackSplittingTool::m_maxSplitVsFitPositionDistance
private

Max allowed distance between split position and sliding linear fit position at the split x coordinate.

Definition at line 105 of file TrackSplittingTool.h.

Referenced by CheckSplitPosition(), and ReadSettings().

float lar_content::TrackSplittingTool::m_minAbsoluteLongDeltaX
private

Min x distance between ends of short and long clusters (measured as an absolute distance)

Definition at line 103 of file TrackSplittingTool.h.

Referenced by PassesChecks(), and ReadSettings().

float lar_content::TrackSplittingTool::m_minLongDeltaXFraction
private

Min x distance between ends of short and long clusters (measured as fraction of long cluster x length)

Definition at line 102 of file TrackSplittingTool.h.

Referenced by PassesChecks(), and ReadSettings().

float lar_content::TrackSplittingTool::m_minMatchedFraction
private

The min matched sampling point fraction for particle creation.

Definition at line 95 of file TrackSplittingTool.h.

Referenced by ReadSettings(), and SelectElements().

unsigned int lar_content::TrackSplittingTool::m_minMatchedSamplingPointRatio
private

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

Definition at line 98 of file TrackSplittingTool.h.

Referenced by FindTracks(), and ReadSettings().

unsigned int lar_content::TrackSplittingTool::m_minMatchedSamplingPoints
private

The min number of matched sampling points for particle creation.

Definition at line 96 of file TrackSplittingTool.h.

Referenced by ReadSettings(), and SelectElements().

float lar_content::TrackSplittingTool::m_minSplitToVertexProjection
private

Min projected distance between split position and either inner or outer vertex of long cluster.

Definition at line 104 of file TrackSplittingTool.h.

Referenced by PassesChecks(), and ReadSettings().

float lar_content::TrackSplittingTool::m_minXOverlapFraction
private

The min x overlap fraction (between long clusters and short cluster vs. shared overlap)

Definition at line 97 of file TrackSplittingTool.h.

Referenced by ReadSettings(), and SelectElements().


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