3 #include <scanner/Scanner.h>
4 #include <scanner/ScanningDevice.h>
33 std::vector<ScanningDevice> &&
scanDevs,
35 std::list<int>
const &pulseFreqs,
57 std::list<int>
const &pulseFreqs,
59 bool const calcEchowdith=
false,
86 std::shared_ptr<Scanner>
clone()
override;
108 std::shared_ptr<ScannerSettings> settings,
size_t const idx
114 unsigned int legIndex,
double const currentGpsTime
129 double const distance,
size_t const idx
135 double const distance,
size_t const idx
145 {
return scanDevs[idx].calcAtmosphericAttenuation();}
156 vector<double>
const &_tMinMax,
157 int const circleStep,
158 double const circleStep_rad,
160 double const divergenceAngle,
162 std::map<double, double> &reflections,
163 vector<RaySceneIntersection> &intersects
165 vector<double>
const &tMinMax,
167 std::map<double, double> &reflections,
168 vector<RaySceneIntersection> &intersects,
175 double const minHitDist_m,
176 double const maxHitDist_m,
177 double &minHitTime_ns,
178 double &maxHitTime_ns,
180 double &distanceThreshold,
181 int &peakIntensityIndex,
182 int &numFullwaveBins,
189 double const incidenceAngle,
190 double const targetRange,
191 double const targetReflectivity,
192 double const targetSpecularity,
193 double const targetSpecularExponent,
194 double const targetArea,
202 double const targetRange,
224 void setDeviceId(std::string
const deviceId,
size_t const idx)
override
234 {
return scanDevs[idx].pulseLength_ns;}
239 double const pulseLength_ns,
size_t const idx
241 {
scanDevs[idx].pulseLength_ns = pulseLength_ns;}
246 {
return scanDevs[idx].beamDivergence_rad;}
251 double const beamDivergence,
size_t const idx
253 {
scanDevs[idx].beamDivergence_rad = beamDivergence;}
258 {
return scanDevs[idx].averagePower_w;}
263 double const averagePower,
size_t const idx
265 {
scanDevs[idx].averagePower_w = averagePower;}
275 {
scanDevs[idx].beamQuality = beamQuality;}
285 {
scanDevs[idx].efficiency = efficiency;}
290 {
return scanDevs[idx].receiverDiameter_m;}
295 double const receiverDiameter,
size_t const idx
297 {
scanDevs[idx].receiverDiameter_m = receiverDiameter;}
302 {
return scanDevs[idx].visibility_km;}
307 {
scanDevs[idx].visibility_km = visibility;}
312 {
return scanDevs[idx].wavelength_m;}
317 {
scanDevs[idx].wavelength_m = wavelength;}
322 {
return scanDevs[idx].atmosphericExtinction;}
327 double const atmosphericExtinction,
330 {
scanDevs[idx].atmosphericExtinction = atmosphericExtinction;}
335 {
return scanDevs[idx].beamWaistRadius;}
340 double const beamWaistRadius,
size_t const idx
342 {
scanDevs[idx].beamWaistRadius = beamWaistRadius;}
349 {
return scanDevs[idx].headRelativeEmitterPosition;}
354 glm::dvec3
const &pos,
size_t const idx
356 {
scanDevs[idx].headRelativeEmitterPosition = pos;}
363 {
return scanDevs[idx].headRelativeEmitterPosition;}
368 {
return scanDevs[idx].headRelativeEmitterAttitude;}
373 Rotation const &attitude,
size_t const idx
375 {
scanDevs[idx].headRelativeEmitterAttitude = attitude;}
382 {
return scanDevs[idx].headRelativeEmitterAttitude;}
386 double getBt2(
size_t const idx)
const override
391 void setBt2(
double const bt2,
size_t const idx)
override
396 double getDr2(
size_t const idx)
const override
401 void setDr2(
double const dr2,
size_t const idx)
override
407 {
return scanDevs[idx].state_currentPulseNumber;}
422 {
return scanDevs[idx].lastPulseWasHit();}
439 std::shared_ptr<ScannerHead> scannerHead,
442 {
scanDevs[idx].scannerHead = scannerHead;}
449 {
return scanDevs[idx].beamDeflector;}
454 std::shared_ptr<AbstractBeamDeflector> beamDeflector,
457 {
scanDevs[idx].beamDeflector = beamDeflector;}
461 std::shared_ptr<AbstractDetector>
getDetector(
size_t const idx)
override
467 std::shared_ptr<AbstractDetector> detector,
size_t const idx
469 {
scanDevs[idx].detector = detector;}
474 {
return scanDevs[idx].FWF_settings;}
481 {
scanDevs[idx].FWF_settings = fwfSettings;}
486 {
return scanDevs[idx].supportedPulseFreqs_Hz;}
491 std::list<int> &pulseFreqs_Hz,
size_t const idx
493 scanDevs[idx].supportedPulseFreqs_Hz = pulseFreqs_Hz;
503 void setMaxNOR(
int const maxNOR,
size_t const idx)
override
514 {
scanDevs[idx].numTimeBins = numTimeBins;}
519 {
return scanDevs[idx].peakIntensityIndex;}
524 {
scanDevs[idx].peakIntensityIndex = pii;}
534 {
scanDevs[idx].time_wave = timewave;}
539 std::vector<double> &&timewave,
size_t const idx
541 {
scanDevs[idx].time_wave = timewave;}
Full Waveform settings.
Definition: FWFSettings.h:12
Class representing a multi scanner. It is, a scanner that can emit more than one pulse per time insta...
Definition: MultiScanner.h:14
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: MultiScanner.cpp:179
void setReceiverDiameter(double const receiverDiameter, size_t const idx) override
Definition: MultiScanner.h:294
std::list< int > & getSupportedPulseFreqs_Hz(size_t const idx) override
Definition: MultiScanner.h:485
std::shared_ptr< AbstractDetector > getDetector(size_t const idx) override
Definition: MultiScanner.h:461
void setHeadRelativeEmitterAttitude(Rotation const &attitude, size_t const idx) override
Definition: MultiScanner.h:372
double calcTargetArea(double const distance, size_t const idx) const override
Definition: MultiScanner.cpp:119
double calcAtmosphericAttenuation(size_t const idx) const override
Definition: MultiScanner.h:144
void setPulseLength_ns(double const pulseLength_ns, size_t const idx) override
Definition: MultiScanner.h:238
void setSupportedPulseFreqs_Hz(std::list< int > &pulseFreqs_Hz, size_t const idx)
Definition: MultiScanner.h:490
std::shared_ptr< AbstractBeamDeflector > getBeamDeflector(size_t const idx) override
Definition: MultiScanner.h:446
std::vector< double > & getTimeWave(size_t const idx) override
Definition: MultiScanner.h:528
std::shared_ptr< ScannerHead > getScannerHead(size_t const idx) override
Definition: MultiScanner.h:433
double getAveragePower(size_t const idx) const override
Definition: MultiScanner.h:257
double getPulseLength_ns(size_t const idx) const override
Definition: MultiScanner.h:233
MultiScanner(std::vector< ScanningDevice > &&scanDevs, 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)
Definition: MultiScanner.h:32
int getPeakIntensityIndex(size_t const idx) const override
Definition: MultiScanner.h:518
size_t getNumDevices() const override
Definition: MultiScanner.h:229
double getDr2(size_t const idx) const override
Definition: MultiScanner.h:396
void doSimStep(unsigned int legIndex, double const currentGpsTime) override
Definition: MultiScanner.cpp:62
void setPeakIntensityIndex(int const pii, size_t const idx) override
Definition: MultiScanner.h:523
void setBeamWaistRadius(double const beamWaistRadius, size_t const idx) override
Definition: MultiScanner.h:339
void setScannerHead(std::shared_ptr< ScannerHead > scannerHead, size_t const idx) override
Definition: MultiScanner.h:438
void setNumRays(int const numRays, size_t const idx)
Definition: MultiScanner.h:416
void setBeamDivergence(double const beamDivergence, size_t const idx) override
Definition: MultiScanner.h:250
void setBeamDeflector(std::shared_ptr< AbstractBeamDeflector > beamDeflector, size_t const idx) override
Definition: MultiScanner.h:453
std::shared_ptr< Scanner > clone() override
Definition: MultiScanner.cpp:15
void setDetector(std::shared_ptr< AbstractDetector > detector, size_t const idx) override
Definition: MultiScanner.h:466
void setDeviceId(std::string const deviceId, size_t const idx) override
Definition: MultiScanner.h:224
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: MultiScanner.cpp:130
FWFSettings & getFWFSettings(size_t const idx)
Definition: MultiScanner.h:473
void setDeviceIndex(size_t const newIdx, size_t const oldIdx) override
Definition: MultiScanner.h:214
double calcFootprintArea(double const distance, size_t const idx) const override
Definition: MultiScanner.cpp:113
glm::dvec3 & getHeadRelativeEmitterPositionByRef(size_t const idx=0) override
Definition: MultiScanner.h:360
double getBeamDivergence(size_t const idx) const override
Definition: MultiScanner.h:245
bool checkMaxNOR(int const nor, size_t const idx) override
Definition: MultiScanner.h:149
glm::dvec3 getHeadRelativeEmitterPosition(size_t const idx) const override
Definition: MultiScanner.h:346
std::string getDeviceId(size_t const idx) const override
Definition: MultiScanner.h:219
void setEfficiency(double const efficiency, size_t const idx) override
Definition: MultiScanner.h:284
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: MultiScanner.cpp:156
void setMaxNOR(int const maxNOR, size_t const idx) override
Definition: MultiScanner.h:503
void calcRaysNumber(size_t const idx) override
Definition: MultiScanner.h:119
void setBeamQuality(double const beamQuality, size_t const idx) override
Definition: MultiScanner.h:274
bool lastPulseWasHit(size_t const idx) const override
Definition: MultiScanner.h:421
void setAveragePower(double const averagePower, size_t const idx) override
Definition: MultiScanner.h:262
double getVisibility(size_t const idx) const override
Definition: MultiScanner.h:301
Rotation & getHeadRelativeEmitterAttitudeByRef(size_t const idx=0) override
Definition: MultiScanner.h:379
void setWavelength(double const wavelength, size_t const idx) override
Definition: MultiScanner.h:316
void setFWFSettings(FWFSettings const &fwfSettings, size_t const idx) override
Definition: MultiScanner.h:478
void setBt2(double const bt2, size_t const idx) override
Definition: MultiScanner.h:391
double getWavelength(size_t const idx) const override
Definition: MultiScanner.h:311
double getBeamQuality(size_t const idx) const override
Definition: MultiScanner.h:269
void setHeadRelativeEmitterPosition(glm::dvec3 const &pos, size_t const idx) override
Definition: MultiScanner.h:353
void applySettings(std::shared_ptr< ScannerSettings > settings, size_t const idx) override
Definition: MultiScanner.cpp:43
void setLastPulseWasHit(bool const lastPulseWasHit, size_t const idx) override
Definition: MultiScanner.h:426
int getMaxNOR(size_t const idx) const override
Definition: MultiScanner.h:498
int getCurrentPulseNumber(size_t const idx) const override
Definition: MultiScanner.h:406
double getEfficiency(size_t const idx) const override
Definition: MultiScanner.h:279
double getReceiverDiameter(size_t const idx) const override
Definition: MultiScanner.h:289
void onLegComplete() override
Extend Scanner::onLegComplete behavior by handling onLegComplete events for the case of a multiple de...
Definition: MultiScanner.cpp:31
void setAtmosphericExtinction(double const atmosphericExtinction, size_t const idx) override
Definition: MultiScanner.h:326
MultiScanner(std::string const id, std::list< int > const &pulseFreqs, bool const writeWaveform=false, bool const calcEchowdith=false, bool const fullWaveNoise=false, bool const platformNoiseDisabled=false)
MultiScanner default constructor.
Definition: MultiScanner.h:55
void _clone(Scanner &sc) const override
Definition: MultiScanner.cpp:21
int getNumRays(size_t const idx) const override
Definition: MultiScanner.h:411
void setDr2(double const dr2, size_t const idx) override
Definition: MultiScanner.h:401
void setTimeWave(std::vector< double > &&timewave, size_t const idx) override
Definition: MultiScanner.h:538
double getBt2(size_t const idx) const override
Definition: MultiScanner.h:386
void setNumTimeBins(int const numTimeBins, size_t const idx)
Definition: MultiScanner.h:513
void setVisibility(double const visibility, size_t const idx) override
Definition: MultiScanner.h:306
Rotation getHeadRelativeEmitterAttitude(size_t const idx) const override
Definition: MultiScanner.h:367
double getBeamWaistRadius(size_t const idx) const override
Definition: MultiScanner.h:334
int getNumTimeBins(size_t const idx) const
Definition: MultiScanner.h:508
double getAtmosphericExtinction(size_t const idx) const override
Definition: MultiScanner.h:321
std::vector< ScanningDevice > scanDevs
The scanning devices composing the MultiScanner.
Definition: MultiScanner.h:21
void setTimeWave(std::vector< double > &timewave, size_t const idx)
Definition: MultiScanner.h:533
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
std::string id
The scanner's identifier.
Definition: Scanner.h:35
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