ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtSampleConsensus.h
Go to the documentation of this file.
1 /*******************************************************************
2 // Basic Sample consensus class
3 // Based on https://github.com/jczamorac/Tracking_RANSAC (https://doi.org/10.1016/j.nima.2020.164899)
4 // Author: A.K. Anthony
5 ********************************************************************/
6 
7 #ifndef ATSAMPLECONSENSUS_H
8 #define ATSAMPLECONSENSUS_H
9 
10 #include "AtEstimatorMethods.h" // for Estimators
11 #include "AtPattern.h"
12 #include "AtPatternTypes.h"
13 #include "AtSampleMethods.h" // for SampleMethod
14 #include "AtTrack.h" // for AtTrack
15 
16 #include <Rtypes.h> // for Int_t, Float_t
17 
18 #include <memory> // for unique_ptr
19 #include <utility> // for pair
20 #include <vector> // for vector
21 
22 class AtHit;
23 class AtEvent;
24 class AtPatternEvent;
25 class AtBaseEvent;
26 namespace RandomSample {
27 class AtSample;
28 }
38 namespace SampleConsensus {
39 
46 class AtSampleConsensus final {
47 private:
52  using PatternPtr = std::unique_ptr<AtPattern>;
53  using AtSamplePtr = std::unique_ptr<RandomSample::AtSample>;
54 
55  PatternType fPatternType; //< Type of pattern to find
56  Estimators fEstimator; //< Estimator to evaluate pattern
57  AtSamplePtr fRandSampler; //< Sampling Method (defaults to uniform)
58 
59  float fIterations{500}; //< Number of interations of sample consensus
60  float fMinPatternPoints{30}; //< Required number of points to form a pattern
61  float fDistanceThreshold{15}; //< Distance a point must be from pattern to be an inlier [mm]
62  bool fFitPattern{true};
69  double fChargeThres{-1};
70 
71 public:
73  AtSampleConsensus(Estimators estimator, PatternType patternType, SampleMethod sampleMethod);
74 
78  AtPatternEvent Solve(const std::vector<AtHit> &hitArray, AtBaseEvent *event = nullptr);
79  AtPatternEvent Solve(const std::vector<const AtHit *> &hitArray, AtBaseEvent *event = nullptr);
80 
81  void SetRandomSample(AtSamplePtr mode) { fRandSampler = std::move(mode); };
82  void SetPatternType(PatternType type) { fPatternType = type; }
83  void SetEstimator(Estimators estimator) { fEstimator = estimator; }
84 
85  void SetNumIterations(Int_t niterations) { fIterations = niterations; };
86  void SetMinHitsPattern(Int_t nhits) { fMinPatternPoints = nhits; };
87  void SetDistanceThreshold(Float_t threshold) { fDistanceThreshold = threshold; };
88  void SetChargeThreshold(double value) { fChargeThres = value; };
89  void SetFitPattern(bool val) { fFitPattern = val; }
90 
91 private:
92  PatternPtr GeneratePatternFromHits(const std::vector<const AtHit *> &hitArray);
93  std::vector<const AtHit *> movePointsInPattern(AtPattern *pattern, std::vector<const AtHit *> &indexes);
94  // void SaveTrack(AtPattern *pattern, std::vector<AtHit> &indexes, AtPatternEvent *event);
95  AtTrack CreateTrack(AtPattern *pattern, std::vector<const AtHit *> &indexes);
96 };
97 } // namespace SampleConsensus
98 #endif
SampleConsensus::AtSampleConsensus::SetDistanceThreshold
void SetDistanceThreshold(Float_t threshold)
Definition: AtSampleConsensus.h:87
SampleConsensus::AtSampleConsensus::SetRandomSample
void SetRandomSample(AtSamplePtr mode)
Definition: AtSampleConsensus.h:81
AtPatternEvent
Definition: AtPatternEvent.h:19
SampleConsensus::AtSampleConsensus::Solve
AtPatternEvent Solve(AtEvent *event)
See Solve(const std::vector<const AtHit *> &hitArray)
Definition: AtSampleConsensus.cxx:60
RandomSample::SampleMethod
SampleMethod
. Methods of random sampling.
Definition: AtSampleMethods.h:22
SampleConsensus::AtSampleConsensus
Perform a sample consensus on a cloud of AtHits.
Definition: AtSampleConsensus.h:46
SampleConsensus::Estimators
Estimators
Estimators for AtSampleConsensus.
Definition: AtEstimatorMethods.h:17
RandomSample
Definition: AtSampleConsensus.h:26
SampleConsensus::AtSampleConsensus::SetNumIterations
void SetNumIterations(Int_t niterations)
Definition: AtSampleConsensus.h:85
AtPattern.h
SampleConsensus::AtSampleConsensus::SetFitPattern
void SetFitPattern(bool val)
Definition: AtSampleConsensus.h:89
AtEvent
Definition: AtEvent.h:22
AtPatterns::AtPattern
Describes a shape in 3D space.
Definition: AtPattern.h:40
SampleConsensus::AtSampleConsensus::SetPatternType
void SetPatternType(PatternType type)
Definition: AtSampleConsensus.h:82
AtEstimatorMethods.h
AtTrack
Definition: AtTrack.h:25
AtBaseEvent
Base class for all event types in ATTPCROOT.
Definition: AtBaseEvent.h:20
SampleConsensus::AtSampleConsensus::AtSampleConsensus
AtSampleConsensus()
Definition: AtSampleConsensus.cxx:22
AtTrack.h
AtSampleMethods.h
SampleConsensus::AtSampleConsensus::SetChargeThreshold
void SetChargeThreshold(double value)
Definition: AtSampleConsensus.h:88
SampleConsensus::AtSampleConsensus::SetEstimator
void SetEstimator(Estimators estimator)
Definition: AtSampleConsensus.h:83
RandomSample::AtSample
Interface for randomly sampling AtHits.
Definition: AtSample.h:35
AtPatterns::PatternType
PatternType
Supported patterns.
Definition: AtPatternTypes.h:14
AtPatternTypes.h
SampleConsensus::AtSampleConsensus::SetMinHitsPattern
void SetMinHitsPattern(Int_t nhits)
Definition: AtSampleConsensus.h:86
SampleConsensus
Definition: AtEstimatorMethods.h:9
AtHit
Point in space with charge.
Definition: AtHit.h:27