Helios++
Helios software for LiDAR simulations
Scanner.h
1 #pragma once
2 
3 #include <memory>
4 
5 #include <Asset.h>
6 #include <ScannerHead.h>
7 #include <AbstractBeamDeflector.h>
8 class AbstractDetector;
9 #include <scanner/ScanningPulseProcess.h>
10 #include <scanner/detector/PulseTaskDropper.h>
11 #include <scanner/detector/PulseThreadPoolInterface.h>
12 #include <FWFSettings.h>
13 #include <Platform.h>
14 #include <maths/Directions.h>
15 #include <maths/Rotation.h>
16 #include <UniformNoiseSource.h>
17 #include <RandomnessGenerator.h>
18 #include <scanner/Trajectory.h>
19 #include <scanner/Measurement.h>
20 namespace helios { namespace filems { class FMSFacade; }}
22 
23 
24 
28 class Scanner : public Asset {
29 protected:
30  // *** ATTRIBUTES *** //
31  // ******************** //
35  std::string id = "SCANNER-ID";
39  bool writeWaveform = false;
43  bool calcEchowidth = false;
47  bool fullWaveNoise = false;
51  bool platformNoiseDisabled = false;
56  bool fixedIncidenceAngle = false;
57 
62 
63  // State variables:
69  bool state_isActive = true;
70 
71 
76  std::unique_ptr<ScanningPulseProcess> spp = nullptr;
77 
78 
79 public:
83  std::shared_ptr<FMSFacade> fms;
88  std::shared_ptr<Platform> platform;
96  std::shared_ptr<std::vector<std::string>> allOutputPaths = nullptr;
103  std::shared_ptr<std::vector<Measurement>> allMeasurements = nullptr;
110  std::shared_ptr<std::vector<Trajectory>> allTrajectories = nullptr;
118  std::shared_ptr<std::mutex> allMeasurementsMutex = nullptr;
124  std::shared_ptr<std::vector<Measurement>> cycleMeasurements = nullptr;
131  std::shared_ptr<std::vector<Trajectory>> cycleTrajectories = nullptr;
139  std::shared_ptr<std::mutex> cycleMeasurementsMutex = nullptr;
140 
141  // Trajectory output processing interval
157 
158  // Randomness generators for single thread mode only
162  std::shared_ptr<RandomnessGenerator<double>> randGen1 = nullptr;
166  std::shared_ptr<RandomnessGenerator<double>> randGen2 = nullptr;
170  std::shared_ptr<UniformNoiseSource<double>>
172 
173 public:
174  // *** CONSTRUCTION / DESTRUCTION *** //
175  // ************************************ //
185  Scanner(
186  std::string const id,
187  std::list<int> const &pulseFreqs,
188  bool const writeWaveform=false,
189  bool const calcEchowidth=false,
190  bool const fullWaveNoise=false,
191  bool const platformNoiseDisabled=false
192  );
197  Scanner(Scanner &scanner);
198  virtual ~Scanner() = default;
199 
200  // *** C L O N E *** //
201  // ********************* //
206  virtual std::shared_ptr<Scanner> clone() = 0;
207 protected:
214  virtual void _clone(Scanner &sc) const;
215 public:
216 
217  // *** M E T H O D S *** //
218  // *********************** //
235  int const parallelizationStrategy,
236  PulseTaskDropper &dropper,
237  std::shared_ptr<PulseThreadPoolInterface> pool
238  );
246  virtual void applySettings(
247  std::shared_ptr<ScannerSettings> settings, size_t const idx
248  ) = 0;
254  inline void applySettings(std::shared_ptr<ScannerSettings> settings)
255  {applySettings(settings, 0);}
264  virtual std::shared_ptr<ScannerSettings> retrieveCurrentSettings(
265  size_t const idx
266  );
272  std::shared_ptr<ScannerSettings> retrieveCurrentSettings()
273  {return retrieveCurrentSettings(0);}
281  virtual void applySettingsFWF(FWFSettings settings, size_t const idx);
287  inline void applySettingsFWF(FWFSettings settings)
288  {applySettingsFWF(settings, 0);}
294  virtual void doSimStep(
295  unsigned int legIndex,
296  double const currentGpsTime
297  ) = 0;
302  std::string toString();
307  virtual void calcRaysNumber(size_t const idx) = 0;
313  inline void calcRaysNumber() {calcRaysNumber(0);}
320  virtual void prepareDiscretization(size_t const idx) = 0;
337  virtual double calcFootprintArea(
338  double const distance, size_t const idx
339  ) const = 0;
345  inline double calcFootprintArea(double const distance) const
346  {return calcFootprintArea(distance, 0);}
358  double calcFootprintRadius(double const distance, size_t const idx);
364  double calcFootprintRadius(double const distance)
365  {return calcFootprintRadius(distance, 0);}
372  virtual double calcTargetArea(
373  double const distance, size_t const idx
374  ) const = 0;
380  inline double calcTargetArea(double const distance) const
381  {return calcTargetArea(distance, 0);}
385  virtual double calcAtmosphericAttenuation(size_t const idx) const = 0;
390  inline double calcAtmosphericAttenuation() const
391  {return calcAtmosphericAttenuation(0);}
398  virtual Rotation calcAbsoluteBeamAttitude(size_t const idx) = 0;
405  {return calcAbsoluteBeamAttitude(0);}
406 
417  virtual bool checkMaxNOR(int const nor, size_t const idx) = 0;
423  inline bool checkMaxNOR(int const nor) {return checkMaxNOR(nor, 0);}
439  virtual void computeSubrays(
440  std::function<void(
441  vector<double> const &_tMinMax,
442  int const circleStep,
443  double const circleStep_rad,
444  Rotation &r1,
445  double const divergenceAngle,
447  std::map<double, double> &reflections,
448  vector<RaySceneIntersection> &intersects
449  )> handleSubray,
450  vector<double> const &tMinMax,
452  std::map<double, double> &reflections,
453  vector<RaySceneIntersection> &intersects,
454  size_t const idx
455  ) = 0;
456 
474  double const minHitDist_m,
475  double const maxHitDist_m,
476  double &minHitTime_ns,
477  double &maxHitTime_ns,
478  double &nsPerBin,
479  double &distanceThreshold,
480  int &peakIntensityIndex,
481  int &numFullwaveBins,
482  size_t const idx
483  ) = 0;
484 
491  virtual double calcIntensity(
492  double const incidenceAngle,
493  double const targetRange,
494  double const targetReflectivity,
495  double const targetSpecularity,
496  double const targetSpecularExponent,
497  double const targetArea,
498  double const radius,
499  size_t const idx
500  ) const = 0;
507  virtual double calcIntensity(
508  double const targetRange,
509  double const radius,
510  double const sigma,
511  size_t const idx
512  ) const = 0;
513 
514 
515  // *** SIM STEP UTILS *** //
516  // ************************ //
523  void handleSimStepNoise(
524  glm::dvec3 & absoluteBeamOrigin,
525  Rotation & absoluteBeamAttitude
526  );
531  virtual void onLegComplete() {spp->onLegComplete();}
536  void inline onSimulationFinished() {spp->onSimulationFinished();}
544  void handleTrajectoryOutput(double const currentGpsTime);
550  void trackOutputPath(std::string const &path);
551 
552  // *** GETTERs and SETTERs *** //
553  // *************************** //
561  virtual int getCurrentPulseNumber(size_t const idx) const = 0;
566  inline int getCurrentPulseNumber() const {return getCurrentPulseNumber(0);}
574  virtual int getNumRays(size_t const idx) const = 0;
580  inline int getNumRays() const {return getNumRays(0);}
588  virtual void setNumRays(int const numRays, size_t const idx) = 0;
594  inline void setNumRays(int const numRays) {setNumRays(numRays, 0);}
595 
601  inline int getPulseFreq_Hz() const {return this->cfg_setting_pulseFreq_Hz;}
607  void setPulseFreq_Hz(int const pulseFreq_Hz);
608 
616  virtual double getPulseLength_ns(size_t const idx) const = 0;
622  inline double getPulseLength_ns() const {return getPulseLength_ns(0);}
630  virtual void setPulseLength_ns(
631  double const pulseLength_ns, size_t const idx
632  ) = 0;
638  inline void setPulseLength_ns(double const pulseLength_ns)
639  {setPulseLength_ns(pulseLength_ns, 0);}
640 
651  virtual bool lastPulseWasHit(size_t const idx) const = 0;
656  inline bool lastPulseWasHit() const {return lastPulseWasHit(0);}
662  virtual void setLastPulseWasHit(
663  bool const lastPulseWasHit, size_t const idx
664  ) = 0;
669  inline void setLastPulseWasHit(bool const lastPulseWasHit)
671 
679  virtual double getBeamDivergence(size_t const idx) const = 0;
685  inline double getBeamDivergence() const {return getBeamDivergence(0);}
693  virtual void setBeamDivergence(
694  double const beamDivergence, size_t const idx
695  ) = 0;
701  inline void setBeamDivergence(double const beamDivergence)
702  {setBeamDivergence(beamDivergence, 0);}
703 
711  virtual double getAveragePower(size_t const idx) const = 0;
716  inline double getAveragePower() const {return getAveragePower(0);}
724  virtual void setAveragePower(
725  double const averagePower, size_t const idx
726  ) = 0;
731  inline void setAveragePower(double const averagePower)
732  {setAveragePower(averagePower, 0);}
733 
741  virtual double getBeamQuality(size_t const idx) const = 0;
746  inline double getBeamQuality() const {return getBeamQuality(0);}
754  virtual void setBeamQuality(
755  double const beamQuality, size_t const idx
756  ) = 0;
761  inline void setBeamQuality(double const beamQuality)
762  {setBeamQuality(beamQuality, 0);}
763 
771  virtual double getEfficiency(size_t const idx) const = 0;
776  inline double getEfficiency() const {return getEfficiency(0);}
784  virtual void setEfficiency(double const efficiency, size_t const idx=0)=0;
789  inline void setEfficiency(double const efficiency)
790  {setEfficiency(efficiency, 0);}
791 
799  virtual double getReceiverDiameter(size_t const idx) const = 0;
804  inline double getReceiverDiameter() const {return getReceiverDiameter(0);}
812  virtual void setReceiverDiameter(
813  double const receiverDiameter, size_t const idx
814  ) = 0;
820  inline void setReceiverDiameter(double const receiverDiameter)
821  {setReceiverDiameter(receiverDiameter, 0);}
822 
830  virtual double getVisibility(size_t const idx) const = 0;
835  inline double getVisibility() const{return getVisibility(0);}
843  virtual void setVisibility(double const visibility, size_t const idx)=0;
848  inline void setVisibility(double const visibility)
849  {setVisibility(visibility, 0);}
850 
858  virtual double getWavelength(size_t const idx) const = 0;
863  inline double getWavelength() const {return getWavelength(0);}
871  virtual void setWavelength(double const wavelength, size_t const idx)=0;
876  inline void setWavelength(double const wavelength)
877  {setWavelength(wavelength, 0);}
878 
886  virtual double getAtmosphericExtinction(size_t const idx) const = 0;
892  inline double getAtmosphericExtinction() const
893  {return getAtmosphericExtinction(0);}
902  double const atmosphericExtinction,
903  size_t const idx
904  ) = 0;
910  inline void setAtmosphericExtinction(double const atmosphericExtinction)
911  {setAtmosphericExtinction(atmosphericExtinction, 0);}
912 
920  virtual double getBeamWaistRadius(size_t const idx) const = 0;
926  inline double getBeamWaistRadius() const {return getBeamWaistRadius(0);}
934  virtual void setBeamWaistRadius(
935  double const beamWaistRadius, size_t const idx
936  ) = 0;
942  inline void setBeamWaistRadius(double const beamWaistRadius)
943  {setBeamWaistRadius(beamWaistRadius, 0);}
951  virtual glm::dvec3 getHeadRelativeEmitterPosition(
952  size_t const idx=0
953  ) const = 0;
962  glm::dvec3 const &pos, size_t const idx=0
963  ) = 0;
973  size_t const idx=0
974  ) = 0;
982  virtual Rotation getHeadRelativeEmitterAttitude(size_t const idx=0)const=0;
990  Rotation const &attitude, size_t const idx=0
991  ) = 0;
1001  size_t const idx=0
1002  ) = 0;
1003 
1011  virtual double getBt2(size_t const idx) const = 0;
1016  inline double getBt2() const {return getBt2(0);}
1024  virtual void setBt2(double const bt2, size_t const idx) = 0;
1029  inline void setBt2(double const bt2) {setBt2(bt2, 0);}
1030 
1038  virtual double getDr2(size_t const idx) const = 0;
1043  inline double getDr2() const {return getDr2(0);}
1051  virtual void setDr2(double const dr2, size_t const idx) = 0;
1056  inline void setDr2(double const dr2) {setDr2(dr2, 0);}
1057 
1063  inline bool isActive() const {return this->state_isActive;}
1070  inline void setActive(bool const active) {this->state_isActive = active;}
1071 
1079  inline bool isWriteWaveform() const {return this->writeWaveform;}
1086  inline void setWriteWaveform(bool const writeWaveform)
1087  {this->writeWaveform = writeWaveform;}
1095  inline bool isCalcEchowidth() const {return this->calcEchowidth;}
1102  inline void setCalcEchowidth(bool const calcEchowidth)
1103  {this->calcEchowidth = calcEchowidth;}
1104 
1112  inline bool isFullWaveNoise() const {return this->fullWaveNoise;}
1119  inline void setFullWaveNoise(bool const fullWaveNoise)
1120  {this->fullWaveNoise = fullWaveNoise;}
1121 
1127  inline bool isPlatformNoiseDisabled() {return this->platformNoiseDisabled;}
1134  inline void setPlatformNoiseDisabled(bool const platformNoiseDisabled)
1135  {this->platformNoiseDisabled = platformNoiseDisabled;}
1136 
1142  inline bool isFixedIncidenceAngle() const
1143  {return this->fixedIncidenceAngle;}
1150  inline void setFixedIncidenceAngle(bool const fixedIncidenceAngle)
1151  {this->fixedIncidenceAngle = fixedIncidenceAngle;}
1152 
1157  inline std::string getScannerId() const {return id;}
1163  inline void setScannerId(std::string const &id) {this->id = id;}
1174  virtual void setDeviceIndex(size_t const newIdx, size_t const oldIdx) = 0;
1180  virtual std::string getDeviceId(size_t const idx) const = 0;
1185  inline std::string getDeviceId() const {return getDeviceId(0);}
1191  virtual void setDeviceId(std::string const deviceId, size_t const idx)=0;
1196  inline void setDeviceId(std::string const deviceId)
1197  {setDeviceId(deviceId, 0);}
1201  virtual size_t getNumDevices() const = 0;
1202 
1210  virtual std::shared_ptr<ScannerHead> getScannerHead(size_t const idx) = 0;
1216  inline std::shared_ptr<ScannerHead> getScannerHead()
1217  {return getScannerHead(0);}
1225  virtual void setScannerHead(
1226  std::shared_ptr<ScannerHead> scannerHead, size_t const idx
1227  ) = 0;
1232  inline void setScannerHead(std::shared_ptr<ScannerHead> scannerHead)
1233  {setScannerHead(scannerHead, 0);}
1241  virtual std::shared_ptr<AbstractBeamDeflector> getBeamDeflector(
1242  size_t const idx
1243  ) = 0;
1249  inline std::shared_ptr<AbstractBeamDeflector> getBeamDeflector()
1250  {return getBeamDeflector(0);}
1257  virtual void setBeamDeflector(
1258  std::shared_ptr<AbstractBeamDeflector> deflector, size_t const idx
1259  ) = 0;
1264  inline void setBeamDeflector(
1265  std::shared_ptr<AbstractBeamDeflector> deflector
1266  ){setBeamDeflector(deflector, 0);}
1274  virtual std::shared_ptr<AbstractDetector> getDetector(size_t const idx)=0;
1280  inline std::shared_ptr<AbstractDetector> getDetector()
1281  {return getDetector(0);}
1288  virtual void setDetector(
1289  std::shared_ptr<AbstractDetector> detector,
1290  size_t const idx
1291  ) = 0;
1296  inline void setDetector(std::shared_ptr<AbstractDetector> detector)
1297  {setDetector(detector, 0);}
1302  inline void setAllDetectors(std::shared_ptr<AbstractDetector> detector)
1303  {
1304  for(size_t i = 0 ; i < getNumDevices() ; ++i) setDetector(detector, i);
1305  }
1306 
1314  virtual FWFSettings & getFWFSettings(size_t const idx) = 0;
1326  virtual void setFWFSettings(
1327  FWFSettings const &fwfSettings, size_t const idx
1328  ) = 0;
1334  inline void setFWFSettings(FWFSettings const &fwfSettings)
1335  {setFWFSettings(fwfSettings, 0);}
1343  virtual std::list<int>& getSupportedPulseFreqs_Hz(size_t const idx) = 0;
1349  inline std::list<int>& getSupportedPulseFreqs_Hz()
1350  {return getSupportedPulseFreqs_Hz(0);}
1359  std::list<int> &pulseFreqs_Hz, size_t const idx
1360  ) = 0;
1366  inline void setSupportedPulseFreqs_Hz(std::list<int> &pulseFreqs_Hz)
1367  {setSupportedPulseFreqs_Hz(pulseFreqs_Hz, 0);}
1375  virtual int getMaxNOR(size_t const idx) const = 0;
1380  inline int getMaxNOR() const {return getMaxNOR(0);}
1388  virtual void setMaxNOR(int const maxNOR, size_t const idx) = 0;
1393  inline void setMaxNOR(int const maxNOR) {setMaxNOR(maxNOR, 0);}
1401  virtual int getNumTimeBins(size_t const idx) const = 0;
1407  inline int getNumTimeBins() const {return getNumTimeBins(0);}
1415  virtual void setNumTimeBins(int const numTimeBins, size_t const idx) = 0;
1421  inline void setNumTimeBins(int const numTimeBins)
1422  {setNumTimeBins(numTimeBins, 0);}
1430  virtual int getPeakIntensityIndex(size_t const idx) const = 0;
1436  inline int getPeakIntensityIndex() const {return getPeakIntensityIndex(0);}
1444  virtual void setPeakIntensityIndex(int const pii, size_t const idx) = 0;
1450  inline void setPeakIntensityIndex(int const pii)
1451  {setPeakIntensityIndex(pii, 0);}
1458  virtual std::vector<double>& getTimeWave(size_t const idx) = 0;
1464  inline std::vector<double>& getTimeWave() {return getTimeWave(0);}
1472  virtual void setTimeWave(
1473  std::vector<double> &timewave, size_t const idx
1474  ) = 0;
1480  inline void setTimeWave(std::vector<double> &timewave)
1481  {setTimeWave(timewave, 0);}
1487  virtual void setTimeWave(
1488  std::vector<double> &&timewave, size_t const idx
1489  ) = 0;
1495  inline void setTimeWave(std::vector<double> &&timewave)
1496  {setTimeWave(timewave, 0);}
1497 
1498 #ifdef DATA_ANALYTICS
1503  inline ScanningPulseProcess * getScanningPulseProcess(){
1504  return spp.get();
1505  }
1506 #endif
1507 
1508 };
Base abstract class for detectors.
Definition: AbstractDetector.h:20
Base class for all assets.
Definition: Asset.h:10
Full Waveform settings.
Definition: FWFSettings.h:12
Class implementing a task dropper to deal with pulse tasks.
Definition: PulseTaskDropper.h:27
Definition: Rotation.h:80
Class representing a scanner asset.
Definition: Scanner.h:28
void applySettingsFWF(FWFSettings settings)
Non index version of the Scanner::applySettingsFWF(FWFSettings, size_t const) method.
Definition: Scanner.h:287
int getPeakIntensityIndex() const
Non index version of the Scanner::getPeakIntensityIndex(size_t const) method.
Definition: Scanner.h:1436
void calcRaysNumber()
Non index version of the Scanner::calcRaysNumber(size_t const) method.
Definition: Scanner.h:313
virtual void setAtmosphericExtinction(double const atmosphericExtinction, size_t const idx)=0
Set atmospheric extinction.
virtual double getWavelength(size_t const idx) const =0
Obtain wave length.
virtual void setSupportedPulseFreqs_Hz(std::list< int > &pulseFreqs_Hz, size_t const idx)=0
Set the list of supported pulse frequencies (in Hertz) for the scanning device.
int getCurrentPulseNumber() const
Non index version of the Scanner::getCurrentPulseNumber method.
Definition: Scanner.h:566
virtual std::shared_ptr< AbstractBeamDeflector > getBeamDeflector(size_t const idx)=0
Obtain the beam deflector of the scanning device.
void setAtmosphericExtinction(double const atmosphericExtinction)
No index argument version of the Scanner::setAtmosphericExtinction method.
Definition: Scanner.h:910
double calcTargetArea(double const distance) const
Non index version of the Scanner::calcTargetArea(double const, size_t const) method.
Definition: Scanner.h:380
std::shared_ptr< std::vector< Trajectory > > cycleTrajectories
Vector of trajectory points recorded by the scanner.
Definition: Scanner.h:131
virtual void _clone(Scanner &sc) const
Assist the clone method by means of handling cloning of attributes from this scanner to the new one (...
Definition: Scanner.cpp:102
void setCalcEchowidth(bool const calcEchowidth)
Set scanner echo width configuration.
Definition: Scanner.h:1102
virtual double getVisibility(size_t const idx) const =0
Get device visibility.
void setAveragePower(double const averagePower)
No index argument version of the Scanner::setAveragePower method.
Definition: Scanner.h:731
bool lastPulseWasHit() const
Non index version of the Scanner::lastPulseWasHit method.
Definition: Scanner.h:656
double getDr2() const
No index argument version of the Scanner::getDr2 method.
Definition: Scanner.h:1043
virtual void setHeadRelativeEmitterPosition(glm::dvec3 const &pos, size_t const idx=0)=0
Set the head's relative emitter position.
void setWavelength(double const wavelength)
No index argument version of the Scanner::setWavelength method.
Definition: Scanner.h:876
void setPulseLength_ns(double const pulseLength_ns)
No index argument version of the Scanner::setPulseLength_ns method.
Definition: Scanner.h:638
void setMaxNOR(int const maxNOR)
Non index version of Scanner::setMaxNOR(int const, size_t const)
Definition: Scanner.h:1393
double calcFootprintArea(double const distance) const
Non index version of the Scanner::calcFootprintArea(double const, size_t const) method.
Definition: Scanner.h:345
virtual void setBt2(double const bt2, size_t const idx)=0
Set .
virtual double calcTargetArea(double const distance, size_t const idx) const =0
Calculate the target area. It is the footprint area divided by the number of rays.
virtual void computeSubrays(std::function< void(vector< double > const &_tMinMax, int const circleStep, double const circleStep_rad, Rotation &r1, double const divergenceAngle, NoiseSource< double > &intersectionHandlingNoiseSource, std::map< double, double > &reflections, vector< RaySceneIntersection > &intersects)> handleSubray, vector< double > const &tMinMax, NoiseSource< double > &intersectionHandlingNoiseSource, std::map< double, double > &reflections, vector< RaySceneIntersection > &intersects, size_t const idx)=0
Perform ray casting to find intersections.
void setPlatformNoiseDisabled(bool const platformNoiseDisabled)
Set platform noise disabled flag.
Definition: Scanner.h:1134
void buildScanningPulseProcess(int const parallelizationStrategy, PulseTaskDropper &dropper, std::shared_ptr< PulseThreadPoolInterface > pool)
Build the scanning pulse process to be used by the scanner during simulation.
Definition: Scanner.cpp:394
void setDetector(std::shared_ptr< AbstractDetector > detector)
Non index version of the Scanner::setDetector method.
Definition: Scanner.h:1296
Rotation calcAbsoluteBeamAttitude()
Non index version of the Scanner::calcAbsoluteBeamAttitude function.
Definition: Scanner.h:404
virtual double getAveragePower(size_t const idx) const =0
Obtain average power.
void setActive(bool const active)
Set scanner active status. True to make it active, false to make it inactive.
Definition: Scanner.h:1070
virtual double calcIntensity(double const incidenceAngle, double const targetRange, double const targetReflectivity, double const targetSpecularity, double const targetSpecularExponent, double const targetArea, double const radius, size_t const idx) const =0
Handle to which scanning device request the intensity computation.
double getWavelength() const
No index argument version of the Scanner::getWavelength method.
Definition: Scanner.h:863
virtual glm::dvec3 & getHeadRelativeEmitterPositionByRef(size_t const idx=0)=0
Obtain the head's relative emitter position by reference (can be written)
std::shared_ptr< RandomnessGenerator< double > > randGen1
First randomness generator for single thread mode.
Definition: Scanner.h:162
bool fullWaveNoise
Flag specifying if compute full wave noise (true) or not (false)
Definition: Scanner.h:47
virtual std::list< int > & getSupportedPulseFreqs_Hz(size_t const idx)=0
Obtain the list of supported pulse frequencies of the scanning device.
void setScannerHead(std::shared_ptr< ScannerHead > scannerHead)
Non index version of the Scanner::setScannerHead method.
Definition: Scanner.h:1232
virtual void setMaxNOR(int const maxNOR, size_t const idx)=0
Set the maximum number of returns per pulse for the scanning device (0 means no maximum at all).
virtual void setFWFSettings(FWFSettings const &fwfSettings, size_t const idx)=0
Set the Full WaveForm settings of the scanning device.
double getVisibility() const
No index argument version of the Scanner::getVisibility method.
Definition: Scanner.h:835
void setLastPulseWasHit(bool const lastPulseWasHit)
Non index version of the Scanner::setLastPulseWasHit method.
Definition: Scanner.h:669
int getMaxNOR() const
Non index version of Scanner::getMaxNOR(size_t const)
Definition: Scanner.h:1380
int cfg_setting_pulseFreq_Hz
Pulse frequency (hertz)
Definition: Scanner.h:61
void setDeviceId(std::string const deviceId)
No index argument version of the Scanner::setDeviceId method.
Definition: Scanner.h:1196
double getBt2() const
No index argument version of the Scanner::getBt2 method.
Definition: Scanner.h:1016
std::shared_ptr< ScannerHead > getScannerHead()
Non index version of the Scanner::getScannerHead(size_t const) method.
Definition: Scanner.h:1216
int getNumTimeBins() const
Non index version of the Scanner::getNumTimeBins(size_t const) method.
Definition: Scanner.h:1407
void setNumRays(int const numRays)
Non index version of the Scanner::setNumRays(int const, size_t const) method.
Definition: Scanner.h:594
bool fixedIncidenceAngle
Flag specifying if use fixed incidence angle (true) or not (false)
Definition: Scanner.h:56
virtual int getPeakIntensityIndex(size_t const idx) const =0
Obtain the index of the bin containing the intensity peak for the scanning device.
virtual void setNumTimeBins(int const numTimeBins, size_t const idx)=0
Set the number of bins defining the size of the time discretization for the scanning device.
void setScannerId(std::string const &id)
Set the identifier of the scanner.
Definition: Scanner.h:1163
bool isFullWaveNoise() const
Check if scanner is configured to add noise to full wave (true) or not (false)
Definition: Scanner.h:1112
std::string id
The scanner's identifier.
Definition: Scanner.h:35
virtual double getDr2(size_t const idx) const =0
Obtain .
bool checkMaxNOR(int const nor)
Non index version of Scanner::checkMaxNOR(int const, size_t const) method.
Definition: Scanner.h:423
virtual void setPeakIntensityIndex(int const pii, size_t const idx)=0
Set the index of the bin containing the intensity peak for the scanning device.
virtual void setDeviceIndex(size_t const newIdx, size_t const oldIdx)=0
Set the device index (newIdx) of the device at given index (oldIdx).
double getReceiverDiameter() const
No index argument version of the Scanner::getReceiverDiameter.
Definition: Scanner.h:804
double getBeamWaistRadius() const
No index argument version of the Scanner::getBeamWaistRadius method.
Definition: Scanner.h:926
virtual void setDetector(std::shared_ptr< AbstractDetector > detector, size_t const idx)=0
Set the abstract detector of the scanning device.
double getAtmosphericExtinction() const
No index argument version of the Scanner::getAtmosphericExtinction method.
Definition: Scanner.h:892
bool state_isActive
Flag specifying if scanner is active (true) or not (false)
Definition: Scanner.h:69
virtual void setBeamDeflector(std::shared_ptr< AbstractBeamDeflector > deflector, size_t const idx)=0
Set the beam deflector of the scanning device.
bool platformNoiseDisabled
Flag specifying if disable platform noise (true) or not (false)
Definition: Scanner.h:51
virtual void doSimStep(unsigned int legIndex, double const currentGpsTime)=0
Perform computations for current simulation step.
std::shared_ptr< RandomnessGenerator< double > > randGen2
Second randomness generator for single thread mode.
Definition: Scanner.h:166
bool isActive() const
Check if scanner is active (true) or not (false)
Definition: Scanner.h:1063
virtual FWFSettings & getFWFSettings(size_t const idx)=0
Obtain the Full WaveForm settings of the scanning device.
void applySettings(std::shared_ptr< ScannerSettings > settings)
Non index version of the Scanner::applySettings(std::shared_ptr<ScannerSettings>) method.
Definition: Scanner.h:254
virtual void setTimeWave(std::vector< double > &timewave, size_t const idx)=0
Set the time discretization vector of the scanning device.
void handleTrajectoryOutput(double const currentGpsTime)
Handle trajectory output whatever it is to output file, to all trajectories vector or to cycle trajec...
Definition: Scanner.cpp:324
virtual std::shared_ptr< AbstractDetector > getDetector(size_t const idx)=0
Obtain the abstract detector of the scanning device.
virtual void setPulseLength_ns(double const pulseLength_ns, size_t const idx)=0
Set the pulse length.
std::shared_ptr< std::vector< Measurement > > cycleMeasurements
Vector of measurements performed by the scanner at current cycle.
Definition: Scanner.h:124
virtual glm::dvec3 getHeadRelativeEmitterPosition(size_t const idx=0) const =0
Obtain the head's relative emitter position.
virtual void setNumRays(int const numRays, size_t const idx)=0
Set the number of rays of the scanning device.
virtual std::string getDeviceId(size_t const idx) const =0
Obtain scanner device identifier.
std::shared_ptr< AbstractDetector > getDetector()
Non index version of the Scanner::getDetector(size_t const) method.
Definition: Scanner.h:1280
void setSupportedPulseFreqs_Hz(std::list< int > &pulseFreqs_Hz)
Non index version of the Scanner::setSupportedPulseFreqs_Hz(std::list<int> &, size_t const)
Definition: Scanner.h:1366
void setBt2(double const bt2)
No index argument version of the Scanner::setBt2 method @Scanner::setBt2(double const,...
Definition: Scanner.h:1029
std::shared_ptr< AbstractBeamDeflector > getBeamDeflector()
Non index version of the Scanner::getBeamDeflector(size_t const) method.
Definition: Scanner.h:1249
std::shared_ptr< std::vector< std::string > > allOutputPaths
Historical vector of all output paths where scanner measurements were written.
Definition: Scanner.h:96
void onSimulationFinished()
Exposes ScanningPulseProcess::onSimulationFinished method of the scanning pulse process defining this...
Definition: Scanner.h:536
std::shared_ptr< std::vector< Trajectory > > allTrajectories
Historical vector of all trajectory points recorded by the scanner.
Definition: Scanner.h:110
virtual std::vector< double > & getTimeWave(size_t const idx)=0
Obtain the time discretization vector of the scanning device.
double calcFootprintRadius(double const distance, size_t const idx)
Compute the footprint radius .
Definition: Scanner.cpp:247
virtual double getBeamQuality(size_t const idx) const =0
Get beam quality.
virtual double getReceiverDiameter(size_t const idx) const =0
Get receiver diameter.
void setPulseFreq_Hz(int const pulseFreq_Hz)
Set the pulse frequency.
Definition: Scanner.cpp:253
virtual double calcIntensity(double const targetRange, double const radius, double const sigma, size_t const idx) const =0
Handle to which scanning device request the intensity computation.
virtual void setTimeWave(std::vector< double > &&timewave, size_t const idx)=0
Rvalue version of the Scanner::setTimeWave(std::vector<double> &, size_t const) method.
virtual Rotation & getHeadRelativeEmitterAttitudeByRef(size_t const idx=0)=0
Obtain the head's relative emitter attitude by reference (can be written)
virtual double getBt2(size_t const idx) const =0
Obtain .
Scanner(std::string const id, std::list< int > const &pulseFreqs, bool const writeWaveform=false, bool const calcEchowidth=false, bool const fullWaveNoise=false, bool const platformNoiseDisabled=false)
Scanner constructor.
Definition: Scanner.cpp:22
void setFixedIncidenceAngle(bool const fixedIncidenceAngle)
Set fixed incidence angle flag.
Definition: Scanner.h:1150
virtual void setDr2(double const dr2, size_t const idx)=0
Set .
void setTimeWave(std::vector< double > &&timewave)
Non index version of the Scanner::setTimeWave(std::vector<double> &&, size_t const) method.
Definition: Scanner.h:1495
virtual void applySettingsFWF(FWFSettings settings, size_t const idx)
Apply full wave form settings.
Definition: Scanner.cpp:226
FWFSettings & getFWFSettings()
Non index version of the Scanner::getFWFSettings(size_t const)
Definition: Scanner.h:1319
std::shared_ptr< ScannerSettings > retrieveCurrentSettings()
Non index version of the Scanner::retrieveCurrentSettings(size_t const) method.
Definition: Scanner.h:272
bool isPlatformNoiseDisabled()
Check if platform noise is disabled (true) or not (false)
Definition: Scanner.h:1127
double getBeamQuality() const
No index argument version of the Scanner::getBeamQuality method.
Definition: Scanner.h:746
std::shared_ptr< std::mutex > allMeasurementsMutex
Mutex to handle concurrent access to historical vector of all measurements and historical vector of a...
Definition: Scanner.h:118
void setEfficiency(double const efficiency)
No index argument version of the Scanner::setEfficiency method.
Definition: Scanner.h:789
void handleSimStepNoise(glm::dvec3 &absoluteBeamOrigin, Rotation &absoluteBeamAttitude)
Handle position and attitude noise.
Definition: Scanner.cpp:287
virtual void setBeamDivergence(double const beamDivergence, size_t const idx)=0
Set beam divergence.
virtual void setScannerHead(std::shared_ptr< ScannerHead > scannerHead, size_t const idx)=0
Set the scanner head of the scanning device.
virtual void setLastPulseWasHit(bool const lastPulseWasHit, size_t const idx)=0
Specify if last pulse was hit (true) or not (false)
virtual void setDeviceId(std::string const deviceId, size_t const idx)=0
Set the scanner device identifier.
void setBeamWaistRadius(double const beamWaistRadius)
No index argument version of the Scanner::setBeamWaistRadius method.
Definition: Scanner.h:942
virtual double getBeamWaistRadius(size_t const idx) const =0
Obtain beam waist radius.
void prepareDiscretization()
Non index version of the Scanner::prepareDiscretization method.
Definition: Scanner.h:325
void setFWFSettings(FWFSettings const &fwfSettings)
Non index version of the Scanner::setFWFSettings(FWFSettings &, size_t const) method.
Definition: Scanner.h:1334
virtual double getEfficiency(size_t const idx) const =0
Obtain device efficiency.
virtual void setBeamQuality(double const beamQuality, size_t const idx)=0
Set beam quality.
int getNumRays() const
Non index version of the Scanner::getNumRays(size_t const) method.
Definition: Scanner.h:580
void trackOutputPath(std::string const &path)
Track given output path in a thread safe way.
Definition: Scanner.cpp:369
std::string getScannerId() const
Obtain the identifier of the scanner.
Definition: Scanner.h:1157
virtual void setHeadRelativeEmitterAttitude(Rotation const &attitude, size_t const idx=0)=0
Obtain the head's relative emitter attitude.
void setVisibility(double const visibility)
No index argument version of the Scanner::setVisibility method.
Definition: Scanner.h:848
std::shared_ptr< std::vector< Measurement > > allMeasurements
Historical vector of all measurements performed by the scanner.
Definition: Scanner.h:103
void setDr2(double const dr2)
No index argument version of the Scanner::setDr2 method @Scanner::setDr2(double const,...
Definition: Scanner.h:1056
virtual Rotation calcAbsoluteBeamAttitude(size_t const idx)=0
Compute the absolute beam attitude considering the mount relative attitude and the deflector relative...
virtual void setBeamWaistRadius(double const beamWaistRadius, size_t const idx)=0
Set beam waist radius.
double calcAtmosphericAttenuation() const
Non index version of Scanner::calcAtmosphericAttenuation.
Definition: Scanner.h:390
virtual void setEfficiency(double const efficiency, size_t const idx=0)=0
Set device efficiency.
void setBeamDivergence(double const beamDivergence)
No index argument version of the Scanner::setBeamDivergence method.
Definition: Scanner.h:701
bool writeWaveform
Flag specifying if write waveform (true) or not (false)
Definition: Scanner.h:39
std::shared_ptr< UniformNoiseSource< double > > intersectionHandlingNoiseSource
Uniform noise source for single thread mode.
Definition: Scanner.h:171
virtual std::shared_ptr< Scanner > clone()=0
Make a clone of this scanner.
virtual size_t getNumDevices() const =0
Obtain the number of scanning devices composing the scanner.
double trajectoryTimeInterval_ns
Time interval between record of trajectory points. When it is exactly 0, then no trajectory points wi...
Definition: Scanner.h:151
virtual void applySettings(std::shared_ptr< ScannerSettings > settings, size_t const idx)=0
Apply scanner settings.
virtual bool lastPulseWasHit(size_t const idx) const =0
Check if last pulse was hit (true) or not (false) for the scanning device.
void setTimeWave(std::vector< double > &timewave)
Non index version of the Scanner::setTimeWave(std::vector<double> &, size_t const) method.
Definition: Scanner.h:1480
bool isCalcEchowidth() const
Check if scanner is configured to compute echo width (true) or not (false)
Definition: Scanner.h:1095
void setBeamQuality(double const beamQuality)
No index argument version of the Scanner::setBeamQuality method.
Definition: Scanner.h:761
std::vector< double > & getTimeWave()
Non index version of the Scanner::getTimeWave(size_t const) method.
Definition: Scanner.h:1464
std::shared_ptr< FMSFacade > fms
Main facade to file management system.
Definition: Scanner.h:83
virtual int getNumTimeBins(size_t const idx) const =0
Obtain the number of bins defining the size of the time discretization for the scanning device.
void setFullWaveNoise(bool const fullWaveNoise)
Set scanner full wave noise policy.
Definition: Scanner.h:1119
virtual double getBeamDivergence(size_t const idx) const =0
Obtain beam divergence.
virtual void setAveragePower(double const averagePower, size_t const idx)=0
Set average power.
virtual int getMaxNOR(size_t const idx) const =0
Obtain the maximum number of returns per pulse for the scanning device (0 means no maximum at all).
virtual void setWavelength(double const wavelength, size_t const idx)=0
Set wave length.
virtual double getAtmosphericExtinction(size_t const idx) const =0
Obtain atmospheric extinction.
double getBeamDivergence() const
No index argument version of the Scanner::getBeamDivergence method.
Definition: Scanner.h:685
std::shared_ptr< Platform > platform
Platform carrying the scanner.
Definition: Scanner.h:88
bool calcEchowidth
Flag specifying if calculate echo width (true) or not (false)
Definition: Scanner.h:43
virtual void prepareDiscretization(size_t const idx)=0
Prepare wave discretization.
double lastTrajectoryTime
GPS time (nanoseconds) corresponding to last recorded trajectory point.
Definition: Scanner.h:156
virtual void setReceiverDiameter(double const receiverDiameter, size_t const idx)=0
Set receiver diameter.
void setNumTimeBins(int const numTimeBins)
Non index version of the Scanner::setNumTimeBins(int const, size_t const) method.
Definition: Scanner.h:1421
void setPeakIntensityIndex(int const pii)
Non index version of the Scanner::setPeakIntensityIndex(int const, size_t const) method.
Definition: Scanner.h:1450
void initializeSequentialGenerators()
Initialize randomness generators and noise sources that are necessary for sequential pulse computatio...
Definition: Scanner.cpp:376
void setAllDetectors(std::shared_ptr< AbstractDetector > detector)
Set the detector of each scanning device to the given one.
Definition: Scanner.h:1302
void setBeamDeflector(std::shared_ptr< AbstractBeamDeflector > deflector)
Non index version of the Scanner::setBeamDeflector method.
Definition: Scanner.h:1264
bool isWriteWaveform() const
Check if scanner is configured to write wave form (true) or not (false)
Definition: Scanner.h:1079
virtual double getPulseLength_ns(size_t const idx) const =0
Get the pulse length.
std::unique_ptr< ScanningPulseProcess > spp
The scanning pulse process used by the scanner.
Definition: Scanner.h:76
void setReceiverDiameter(double const receiverDiameter)
No index argument version of the Scanner::setReceiverDiameter method.
Definition: Scanner.h:820
virtual std::shared_ptr< ScannerHead > getScannerHead(size_t const idx)=0
Obtain the scanner head of the scanning device.
virtual void onLegComplete()
Exposes ScanningPulseProcess:onLegComplete method of the scanning pulse process defining this scanner...
Definition: Scanner.h:531
double calcFootprintRadius(double const distance)
Non index version of the Scanner::calcFootprintRadius(double const, size_t const) method.
Definition: Scanner.h:364
bool isFixedIncidenceAngle() const
Check if incidence angle is fixed (true) or not (false)
Definition: Scanner.h:1142
void setWriteWaveform(bool const writeWaveform)
Set scanner write wave form configuration.
Definition: Scanner.h:1086
std::string toString()
Build a string representation of the scanner.
Definition: Scanner.cpp:232
std::list< int > & getSupportedPulseFreqs_Hz()
Non index version of the Scanner::getSupportedPulseFreqs_Hz(size_t const) method.
Definition: Scanner.h:1349
double getAveragePower() const
No index argument version of the Scanner::getAveragePower method.
Definition: Scanner.h:716
double getEfficiency() const
No index argument version of the Scanner::getEfficiency method.
Definition: Scanner.h:776
virtual double calcFootprintArea(double const distance, size_t const idx) const =0
Compute the footprint area .
std::string getDeviceId() const
No index argument version of the Scanner::getDeviceId method.
Definition: Scanner.h:1185
int getPulseFreq_Hz() const
Obtain the pulse frequency.
Definition: Scanner.h:601
virtual bool initializeFullWaveform(double const minHitDist_m, double const maxHitDist_m, double &minHitTime_ns, double &maxHitTime_ns, double &nsPerBin, double &distanceThreshold, int &peakIntensityIndex, int &numFullwaveBins, size_t const idx)=0
Initialize full waveform While the vector is not strictly initialized in this function,...
virtual int getNumRays(size_t const idx) const =0
Obtain the number of rays of the scanning device.
virtual Rotation getHeadRelativeEmitterAttitude(size_t const idx=0) const =0
Obtain the head's relative emitter attitude.
virtual bool checkMaxNOR(int const nor, size_t const idx)=0
Check if given number of return (nor) is inside expected boundaries. If scanner maxNOR is 0 or nor is...
virtual void calcRaysNumber(size_t const idx)=0
Compute the number of rays depending on beam sample quality for the scanning device.
double getPulseLength_ns() const
No index argument version of the Scanner::getPulseLength_ns method.
Definition: Scanner.h:622
virtual double calcAtmosphericAttenuation(size_t const idx) const =0
virtual int getCurrentPulseNumber(size_t const idx) const =0
Obtain the current pulse number of the scanning device.
std::shared_ptr< std::mutex > cycleMeasurementsMutex
Mutex to handle concurrent access to vector of measurements and vector of trajectory points by cycle.
Definition: Scanner.h:139
virtual void setVisibility(double const visibility, size_t const idx)=0
Set device visibility.
Class defining the scanning pulse process interface.
Definition: ScanningPulseProcess.h:18
The main facade for file management system.
Definition: FMSFacade.h:19