Helios++
Helios software for LiDAR simulations
AbstractDetector.h
1 #pragma once
2 
3 #include <string>
4 #include <unordered_map>
5 
6 #include <Scanner.h>
7 #include <ScannerSettings.h>
8 #include <Measurement.h>
9 #include <util/PointcloudYielder.h>
10 #include <util/FullWaveformYielder.h>
11 #include <adt/exprtree/UnivarExprTreeNode.h>
12 
13 namespace helios { namespace filems { class FMSFacade; }}
15 
16 
21 public:
22  // *** ATTRIBUTES *** //
23  // ******************** //
27  std::shared_ptr<Scanner> scanner = nullptr;
28 
29 protected:
33  std::shared_ptr<FMSFacade> fms = nullptr;
34 
35 public:
40  std::shared_ptr<PointcloudYielder> pcloudYielder = nullptr;
45  std::shared_ptr<FullWaveformYielder> fwfYielder = nullptr;
46 
59 
60  std::shared_ptr<UnivarExprTreeNode<double>> errorDistanceExpr=nullptr;
61 
62  // *** CONSTRUCTION / DESTRUCTION *** //
63  // ************************************ //
71  std::shared_ptr<Scanner> scanner,
72  double accuracy_m,
73  double rangeMin_m,
74  double rangeMax_m=std::numeric_limits<double>::max(),
75  std::shared_ptr<UnivarExprTreeNode<double>> errorDistanceExpr=nullptr
76  ){
77  this->cfg_device_accuracy_m = accuracy_m;
78  this->cfg_device_rangeMin_m = rangeMin_m;
79  this->cfg_device_rangeMax_m = rangeMax_m;
80  this->scanner = std::move(scanner);
81  this->errorDistanceExpr = errorDistanceExpr;
82  }
83  virtual ~AbstractDetector() {}
84  virtual std::shared_ptr<AbstractDetector> clone() = 0;
85  virtual void _clone(std::shared_ptr<AbstractDetector> ad);
86 
87  // *** M E T H O D S *** //
88  // *********************** //
92  virtual void shutdown();
97  virtual void applySettings(std::shared_ptr<ScannerSettings> & settings) {};
103  virtual void onLegComplete();
104 
110  inline bool isDistanceInRange(double const distance){
111  return cfg_device_rangeMin_m <= distance &&
112  cfg_device_rangeMax_m >= distance;
113  }
120  inline bool isDistanceNotInRange(double const distance){
121  return cfg_device_rangeMin_m > distance ||
122  cfg_device_rangeMax_m < distance;
123  }
124 
125  // *** GETTERs and SETTERs *** //
126  // ***************************** //
131  inline std::shared_ptr<FMSFacade> getFMS() const {return fms;}
138  void setFMS(std::shared_ptr<FMSFacade> fms);
139 };
Base abstract class for detectors.
Definition: AbstractDetector.h:20
AbstractDetector(std::shared_ptr< Scanner > scanner, double accuracy_m, double rangeMin_m, double rangeMax_m=std::numeric_limits< double >::max(), std::shared_ptr< UnivarExprTreeNode< double >> errorDistanceExpr=nullptr)
Base constructor for abstract detector.
Definition: AbstractDetector.h:70
virtual void onLegComplete()
Handle detector behavior when leg has been completed.
Definition: AbstractDetector.cpp:25
std::shared_ptr< FMSFacade > fms
Main facade to file management system.
Definition: AbstractDetector.h:33
double cfg_device_rangeMin_m
Minimum range for detector in meters.
Definition: AbstractDetector.h:54
std::shared_ptr< Scanner > scanner
Scanner which the detector belongs to.
Definition: AbstractDetector.h:27
virtual void shutdown()
Shutdown the detector when simulation has finished.
Definition: AbstractDetector.cpp:20
bool isDistanceNotInRange(double const distance)
Check whether the given distance is inside detected range or not.
Definition: AbstractDetector.h:120
virtual void applySettings(std::shared_ptr< ScannerSettings > &settings)
Apply scanner settings to the detector.
Definition: AbstractDetector.h:97
bool isDistanceInRange(double const distance)
Check whether the given distance is inside detected range or not.
Definition: AbstractDetector.h:110
std::shared_ptr< PointcloudYielder > pcloudYielder
The point cloud yielder which handles point cloud building from measurements.
Definition: AbstractDetector.h:40
std::shared_ptr< FullWaveformYielder > fwfYielder
The full waveform yielder which handles full waveform building from full waveform data.
Definition: AbstractDetector.h:45
void setFMS(std::shared_ptr< FMSFacade > fms)
Set the main facade to file management system that will be used by the detector.
Definition: AbstractDetector.cpp:32
std::shared_ptr< FMSFacade > getFMS() const
Obtain the main facade to file management system.
Definition: AbstractDetector.h:131
double cfg_device_rangeMax_m
Maximum range for detector in meters.
Definition: AbstractDetector.h:58
double cfg_device_accuracy_m
Detector accuracy in meters.
Definition: AbstractDetector.h:50
Class implementing a Univariate Expression Tree Node.
Definition: UnivarExprTreeNode.h:27
The main facade for file management system.
Definition: FMSFacade.h:19