3 #include <scanner/Scanner.h>
4 #include <scanner/ScanningDevice.h>
30 double const beamDiv_rad,
31 glm::dvec3
const beamOrigin,
33 std::list<int>
const &pulseFreqs,
34 double const pulseLength_ns,
36 double const averagePower,
37 double const beamQuality,
38 double const efficiency,
39 double const receiverDiameter,
40 double const atmosphericVisibility,
59 std::shared_ptr<Scanner>
clone()
override;
80 std::shared_ptr<ScannerSettings> settings,
size_t const idx
86 unsigned int legIndex,
double const currentGpsTime
101 double const distance,
size_t const idx
107 double const distance,
size_t const idx
128 vector<double>
const &_tMinMax,
129 int const circleStep,
130 double const circleStep_rad,
132 double const divergenceAngle,
134 std::map<double, double> &reflections,
135 vector<RaySceneIntersection> &intersects
137 vector<double>
const &tMinMax,
139 std::map<double, double> &reflections,
140 vector<RaySceneIntersection> &intersects,
147 double const minHitDist_m,
148 double const maxHitDist_m,
149 double &minHitTime_ns,
150 double &maxHitTime_ns,
152 double &distanceThreshold,
153 int &peakIntensityIndex,
154 int &numFullwaveBins,
161 double const incidenceAngle,
162 double const targetRange,
163 double const targetReflectivity,
164 double const targetSpecularity,
165 double const targetSpecularExponent,
166 double const targetArea,
174 double const targetRange,
196 void setDeviceId(std::string
const deviceId,
size_t const idx)
override
220 double const pulseLength_ns,
size_t const idx
232 double const beamDivergence,
size_t const idx
244 double const averagePower,
size_t const idx
276 double const receiverDiameter,
size_t const idx
308 double const atmosphericExtinction,
321 double const beamWaistRadius,
size_t const idx
335 glm::dvec3
const &pos,
size_t const idx
354 Rotation const &attitude,
size_t const idx
367 double getBt2(
size_t const idx)
const override
372 void setBt2(
double const bt2,
size_t const idx)
override
377 double getDr2(
size_t const idx)
const override
382 void setDr2(
double const dr2,
size_t const idx)
override
394 std::shared_ptr<ScannerHead> scannerHead,
409 std::shared_ptr<AbstractBeamDeflector> beamDeflector,
416 std::shared_ptr<AbstractDetector>
getDetector(
size_t const idx)
override
422 std::shared_ptr<AbstractDetector> detector,
size_t const idx
446 std::list<int> &pulseFreqs_Hz,
size_t const idx
457 void setMaxNOR(
int const maxNOR,
size_t const idx)
override
492 std::vector<double> &&timewave,
size_t const idx
Full Waveform settings.
Definition: FWFSettings.h:12
Definition: Rotation.h:80
Class representing a scanner asset.
Definition: Scanner.h:28
bool lastPulseWasHit() const
Non index version of the Scanner::lastPulseWasHit method.
Definition: Scanner.h:656
Rotation calcAbsoluteBeamAttitude()
Non index version of the Scanner::calcAbsoluteBeamAttitude function.
Definition: Scanner.h:404
bool fullWaveNoise
Flag specifying if compute full wave noise (true) or not (false)
Definition: Scanner.h:47
bool platformNoiseDisabled
Flag specifying if disable platform noise (true) or not (false)
Definition: Scanner.h:51
void prepareDiscretization()
Non index version of the Scanner::prepareDiscretization method.
Definition: Scanner.h:325
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
bool calcEchowidth
Flag specifying if calculate echo width (true) or not (false)
Definition: Scanner.h:43
Class representing a scanning device. Any scanner needs to be composed of at least one scanning devic...
Definition: ScanningDevice.h:32
int numRays
Number of rays computed by the calcRaysNumber function.
Definition: ScanningDevice.h:123
double beamDivergence_rad
Beam divergence (radians)
Definition: ScanningDevice.h:62
double pulseLength_ns
Pulse length (nanoseconds)
Definition: ScanningDevice.h:66
std::shared_ptr< AbstractDetector > detector
Detector composing the scanner.
Definition: ScanningDevice.h:113
double cached_Dr2
understood as the square of receiver diameter
Definition: ScanningDevice.h:180
FWFSettings FWF_settings
Full wave form settings for the scanner.
Definition: ScanningDevice.h:118
std::shared_ptr< AbstractBeamDeflector > beamDeflector
Beam deflector composing the scanner.
Definition: ScanningDevice.h:108
size_t devIdx
The index of the scanning device in the MultiScanner context.
Definition: ScanningDevice.h:45
double wavelength_m
Wave length (meters)
Definition: ScanningDevice.h:90
double beamWaistRadius
Beam waist radius.
Definition: ScanningDevice.h:98
int numTimeBins
Number of bins defining the discretization size.
Definition: ScanningDevice.h:142
int maxNOR
Maximum number of returns per pulse. When 0, it means there is not maximum at all.
Definition: ScanningDevice.h:133
Rotation headRelativeEmitterAttitude
Head relative emitter attitude.
Definition: ScanningDevice.h:57
std::vector< double > time_wave
Time discretization vector.
Definition: ScanningDevice.h:153
double beamQuality
Beam quality.
Definition: ScanningDevice.h:74
double averagePower_w
Average power (watts)
Definition: ScanningDevice.h:70
double atmosphericExtinction
Atmospheric extinction.
Definition: ScanningDevice.h:94
int state_currentPulseNumber
Current pulse number.
Definition: ScanningDevice.h:160
std::list< int > supportedPulseFreqs_Hz
Pulse frequencies (hertz) supoported by the scanner.
Definition: ScanningDevice.h:127
void setLastPulseWasHit(bool const value)
Specify if last pulse was hit (true) or not (false)
Definition: ScanningDevice.cpp:338
bool lastPulseWasHit() const
Check if last pulse was hit (true) or not (false) for the scanning device.
Definition: ScanningDevice.h:390
std::string id
Device identifier.
Definition: ScanningDevice.h:49
void calcRaysNumber()
Compute the number of rays depending on beam sample quality.
Definition: ScanningDevice.cpp:104
double efficiency
Device efficiency.
Definition: ScanningDevice.h:78
double receiverDiameter_m
Receiver diameter (meters)
Definition: ScanningDevice.h:82
double calcAtmosphericAttenuation() const
Compute the atmospheric attenuation to be used as the atmospheric extinction.
Definition: ScanningDevice.cpp:87
std::shared_ptr< ScannerHead > scannerHead
Scanner head composing the scanning device.
Definition: ScanningDevice.h:103
double visibility_km
Visibility (kilometers)
Definition: ScanningDevice.h:86
int peakIntensityIndex
Index of bin containing the intensity peak. It is computed through calcTimePropagation function.
Definition: ScanningDevice.h:149
glm::dvec3 headRelativeEmitterPosition
Head relative emitter position.
Definition: ScanningDevice.h:53
double cached_Bt2
understood as the square of beam divergence
Definition: ScanningDevice.h:190
Class representing a single scanner. It is, a scanner that can only emit one pulse per time instant.
Definition: SingleScanner.h:12
double getBeamQuality(size_t const idx) const override
Definition: SingleScanner.h:250
void setDeviceIndex(size_t const newIdx, size_t const oldIdx) override
Definition: SingleScanner.h:186
void setFWFSettings(FWFSettings const &fwfSettings, size_t const idx) override
Definition: SingleScanner.h:433
int getNumTimeBins(size_t const idx) const
Definition: SingleScanner.h:462
double calcTargetArea(double const distance, size_t const idx) const override
Definition: SingleScanner.cpp:157
void setLastPulseWasHit(bool const lastPulseWasHit, size_t const idx) override
Definition: SingleScanner.h:508
void calcRaysNumber(size_t const idx) override
Definition: SingleScanner.h:91
void setAtmosphericExtinction(double const atmosphericExtinction, size_t const idx) override
Definition: SingleScanner.h:307
void setVisibility(double const visibility, size_t const idx) override
Definition: SingleScanner.h:287
void setNumTimeBins(int const numTimeBins, size_t const idx)
Definition: SingleScanner.h:466
void setPulseLength_ns(double const pulseLength_ns, size_t const idx) override
Definition: SingleScanner.h:219
double getPulseLength_ns(size_t const idx) const override
Definition: SingleScanner.h:214
void setHeadRelativeEmitterPosition(glm::dvec3 const &pos, size_t const idx) override
Definition: SingleScanner.h:334
double calcFootprintArea(double const distance, size_t const idx) const override
Definition: SingleScanner.cpp:151
Rotation & getHeadRelativeEmitterAttitudeByRef(size_t const idx=0) override
Definition: SingleScanner.h:360
double getWavelength(size_t const idx) const override
Definition: SingleScanner.h:292
double getDr2(size_t const idx) const override
Definition: SingleScanner.h:377
double getBeamDivergence(size_t const idx) const override
Definition: SingleScanner.h:226
Rotation getHeadRelativeEmitterAttitude(size_t const idx) const override
Definition: SingleScanner.h:348
void setEfficiency(double const efficiency, size_t const idx) override
Definition: SingleScanner.h:265
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) override
Definition: SingleScanner.cpp:168
void _clone(Scanner &sc) const override
Definition: SingleScanner.cpp:70
void setBeamQuality(double const beamQuality, size_t const idx) override
Definition: SingleScanner.h:255
glm::dvec3 & getHeadRelativeEmitterPositionByRef(size_t const idx=0) override
Definition: SingleScanner.h:341
FWFSettings & getFWFSettings(size_t const idx)
Definition: SingleScanner.h:428
void applySettings(std::shared_ptr< ScannerSettings > settings, size_t const idx) override
Definition: SingleScanner.cpp:90
int getCurrentPulseNumber(size_t const idx) const override
Definition: SingleScanner.h:498
void setAveragePower(double const averagePower, size_t const idx) override
Definition: SingleScanner.h:243
double getEfficiency(size_t const idx) const override
Definition: SingleScanner.h:260
SingleScanner(double const beamDiv_rad, glm::dvec3 const beamOrigin, Rotation const beamOrientation, std::list< int > const &pulseFreqs, double const pulseLength_ns, std::string const id, double const averagePower, double const beamQuality, double const efficiency, double const receiverDiameter, double const atmosphericVisibility, int const wavelength, bool const writeWaveform=false, bool const calcEchowidth=false, bool const fullWaveNoise=false, bool const platformNoiseDisabled=false)
SingleScanner constructor from given values.
Definition: SingleScanner.cpp:11
void setWavelength(double const wavelength, size_t const idx) override
Definition: SingleScanner.h:297
bool lastPulseWasHit(size_t const idx) const override
Definition: SingleScanner.h:503
void setDetector(std::shared_ptr< AbstractDetector > detector, size_t const idx) override
Definition: SingleScanner.h:421
glm::dvec3 getHeadRelativeEmitterPosition(size_t const idx) const override
Definition: SingleScanner.h:327
std::shared_ptr< Scanner > clone() override
Definition: SingleScanner.cpp:64
void setScannerHead(std::shared_ptr< ScannerHead > scannerHead, size_t const idx) override
Definition: SingleScanner.h:393
double getAveragePower(size_t const idx) const override
Definition: SingleScanner.h:238
void setBeamDivergence(double const beamDivergence, size_t const idx) override
Definition: SingleScanner.h:231
void setTimeWave(std::vector< double > &&timewave, size_t const idx) override
Definition: SingleScanner.h:491
int getPeakIntensityIndex(size_t const idx) const override
Definition: SingleScanner.h:471
void setDeviceId(std::string const deviceId, size_t const idx) override
Definition: SingleScanner.h:196
void setBt2(double const bt2, size_t const idx) override
Definition: SingleScanner.h:372
double getReceiverDiameter(size_t const idx) const override
Definition: SingleScanner.h:270
ScanningDevice scanDev
The only scanning device composing the SingleScanner.
Definition: SingleScanner.h:19
double getAtmosphericExtinction(size_t const idx) const override
Definition: SingleScanner.h:302
void setSupportedPulseFreqs_Hz(std::list< int > &pulseFreqs_Hz, size_t const idx)
Definition: SingleScanner.h:445
void doSimStep(unsigned int legIndex, double const currentGpsTime) override
Definition: SingleScanner.cpp:106
double getVisibility(size_t const idx) const override
Definition: SingleScanner.h:282
std::string getDeviceId(size_t const idx) const override
Definition: SingleScanner.h:191
size_t getNumDevices() const override
Definition: SingleScanner.h:201
void setBeamDeflector(std::shared_ptr< AbstractBeamDeflector > beamDeflector, size_t const idx) override
Definition: SingleScanner.h:408
int getNumRays(size_t const idx) const override
Definition: SingleScanner.h:205
void setBeamWaistRadius(double const beamWaistRadius, size_t const idx) override
Definition: SingleScanner.h:320
void setMaxNOR(int const maxNOR, size_t const idx) override
Definition: SingleScanner.h:457
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) override
Definition: SingleScanner.cpp:194
void onLegComplete() override
Extend Scanner::onLegComplete behavior by handling onLegComplete events for the case of a single dete...
Definition: SingleScanner.cpp:81
std::shared_ptr< ScannerHead > getScannerHead(size_t const idx) override
Definition: SingleScanner.h:388
std::shared_ptr< AbstractDetector > getDetector(size_t const idx) override
Definition: SingleScanner.h:416
void setPeakIntensityIndex(int const pii, size_t const idx) override
Definition: SingleScanner.h:476
void setTimeWave(std::vector< double > &timewave, size_t const idx)
Definition: SingleScanner.h:486
void setDr2(double const dr2, size_t const idx) override
Definition: SingleScanner.h:382
double calcAtmosphericAttenuation(size_t const idx) const override
Definition: SingleScanner.h:116
void setNumRays(int const numRays, size_t const idx)
Definition: SingleScanner.h:209
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 override
Definition: SingleScanner.cpp:217
std::shared_ptr< AbstractBeamDeflector > getBeamDeflector(size_t const idx) override
Definition: SingleScanner.h:401
void setHeadRelativeEmitterAttitude(Rotation const &attitude, size_t const idx) override
Definition: SingleScanner.h:353
std::list< int > & getSupportedPulseFreqs_Hz(size_t const idx) override
Definition: SingleScanner.h:440
bool checkMaxNOR(int const nor, size_t const idx) override
Definition: SingleScanner.h:121
double getBt2(size_t const idx) const override
Definition: SingleScanner.h:367
int getMaxNOR(size_t const idx) const override
Definition: SingleScanner.h:453
double getBeamWaistRadius(size_t const idx) const override
Definition: SingleScanner.h:315
std::vector< double > & getTimeWave(size_t const idx) override
Definition: SingleScanner.h:481
void setReceiverDiameter(double const receiverDiameter, size_t const idx) override
Definition: SingleScanner.h:275