LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
ThreeDKinkBaseTool.h
Go to the documentation of this file.
1 
8 #ifndef THREE_D_KINK_BASE_TOOL_H
9 #define THREE_D_KINK_BASE_TOOL_H 1
10 
12 
14 
15 namespace lar_content
16 {
17 
22 {
23 public:
29  ThreeDKinkBaseTool(const unsigned int nCommonClusters);
30 
34  virtual ~ThreeDKinkBaseTool();
35 
36  bool Run(ThreeViewTransverseTracksAlgorithm *const pAlgorithm, TensorType &overlapTensor);
37 
38 protected:
43  {
44  public:
47  pandora::ClusterList m_affectedClusters;
48  };
49 
50  typedef std::vector<Modification> ModificationList;
51 
58  virtual bool PassesElementCuts(TensorType::ElementList::const_iterator eIter, const pandora::ClusterSet &usedClusters) const;
59 
67  virtual void GetIteratorListModifications(ThreeViewTransverseTracksAlgorithm *const pAlgorithm, const IteratorList &iteratorList,
68  ModificationList &modificationList) const = 0;
69 
81  float GetXSamplingPoint(const pandora::CartesianVector &splitPosition1, const bool isForwardInX, const TwoDSlidingFitResult &fitResult1,
82  const TwoDSlidingFitResult &fitResult2, const TwoDSlidingFitResult &fitResult3) const;
83 
90  static bool IsALowestInX(const LArPointingCluster &pointingClusterA, const LArPointingCluster &pointingClusterB);
91 
92  pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle);
93 
94  unsigned int m_nCommonClusters;
101 
102 private:
110  void GetModifications(ThreeViewTransverseTracksAlgorithm *const pAlgorithm, const TensorType &overlapTensor, ModificationList &modificationList) const;
111 
121  const pandora::ClusterSet &usedClusters, IteratorList &iteratorList) const;
122 
131  bool ApplyChanges(ThreeViewTransverseTracksAlgorithm *const pAlgorithm, const ModificationList &modificationList) const;
132 };
133 
134 } // namespace lar_content
135 
136 #endif // #ifndef THREE_D_KINK_BASE_TOOL_H
pandora::ClusterList m_affectedClusters
The list of affected clusters.
std::vector< Modification > ModificationList
bool ApplyChanges(ThreeViewTransverseTracksAlgorithm *const pAlgorithm, const ModificationList &modificationList) const
Apply the changes cached in a modification list and update the tensor accordingly.
float GetXSamplingPoint(const pandora::CartesianVector &splitPosition1, const bool isForwardInX, const TwoDSlidingFitResult &fitResult1, const TwoDSlidingFitResult &fitResult2, const TwoDSlidingFitResult &fitResult3) const
Get a sampling point in x that is common to sliding linear fit objects in three views.
Header file for the lar pointing cluster class.
std::vector< TensorType::ElementList::const_iterator > IteratorList
unsigned int m_nCommonClusters
The number of common clusters.
virtual void GetIteratorListModifications(ThreeViewTransverseTracksAlgorithm *const pAlgorithm, const IteratorList &iteratorList, ModificationList &modificationList) const =0
Get modification objects for a specific elements of the tensor, identifying required splits and merge...
LArPointingCluster class.
ClusterMergeMap m_clusterMergeMap
The cluster merge map.
virtual ~ThreeDKinkBaseTool()
Destructor.
int m_nLayersForKinkSearch
The number of sliding fit layers to step in the kink search.
std::unordered_map< const pandora::Cluster *, pandora::CartesianPointVector > SplitPositionMap
Header file for the three view transverse tracks algorithm class.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
void GetModifications(ThreeViewTransverseTracksAlgorithm *const pAlgorithm, const TensorType &overlapTensor, ModificationList &modificationList) const
Get modification objects, identifying required splits and merges for clusters.
void SelectTensorElements(TensorType::ElementList::const_iterator eIter, const TensorType::ElementList &elementList, const pandora::ClusterSet &usedClusters, IteratorList &iteratorList) const
Select elements representing possible components of interest due to overshoots or undershoots in clus...
virtual bool PassesElementCuts(TensorType::ElementList::const_iterator eIter, const pandora::ClusterSet &usedClusters) const
Whether a provided (iterator to a) tensor element passes the selection cuts for overshoot identificat...
bool Run(ThreeViewTransverseTracksAlgorithm *const pAlgorithm, TensorType &overlapTensor)
Run the algorithm tool.
static bool IsALowestInX(const LArPointingCluster &pointingClusterA, const LArPointingCluster &pointingClusterB)
Whether pointing cluster labelled A extends to lowest x positions (as opposed to that labelled B) ...
float m_additionalXStepForKinkSearch
An additional (safety) step to tack-on when choosing x sampling points.
ThreeDKinkBaseTool(const unsigned int nCommonClusters)
Constructor.
ThreeDKinkBaseTool class.
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for use as a key tensor element.
std::unordered_map< const pandora::Cluster *, pandora::ClusterList > ClusterMergeMap
bool m_majorityRulesMode
Whether to run in majority rules mode (always split overshoots, always merge undershoots) ...
float m_minLongitudinalImpactParameter
The min longitudinal impact parameter for connecting accompanying clusters.
float m_minMatchedFraction
The min matched sampling point fraction for use as a key tensor element.
SplitPositionMap m_splitPositionMap
The split position map.