275#include "SampleClock.h"
276#include "SensorFrame.h"
277#include "SensorNoise.h"
279#include <fhsim/simobject/SimObject.h>
285class EnvironmentProvider;
360 static double FrameLambdaOf(
double numberConcentration,
double sampleVolume,
361 double captureEfficiency,
double detectionProbability);
379 static int BinIndexOf(
double length,
double binMin,
double binMax,
int numBins);
382 void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const override;
397 void FinalSetup(
const double dT,
const double*
const adX, ISimObjectCreator*
const creator)
override;
399#ifdef FH_VISUALIZATION
400 void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator)
override { }
401 void RenderUpdate(
const double dT,
const double*
const adX)
override { }
414 int CaptureIfDue(
double t,
double numberConcentration,
const double position[3]);
423 bool CaptureFrame(
double t,
double numberConcentration,
const double position[3]);
448 const double*
OutCount(
const double dT,
const double*
const adX);
451 const double*
OutSizeMean(
const double dT,
const double*
const adX);
454 const double*
OutSizeStd(
const double dT,
const double*
const adX);
463 const double*
OutPosition(
const double dT,
const double*
const adX);
466 const double*
OutValid(
const double dT,
const double*
const adX);
473 double sumLength = 0.0;
474 double sumLengthSq = 0.0;
475 std::vector<double> binCounts;
476 double sumTime = 0.0;
477 double sumPosition[3] = {0.0, 0.0, 0.0};
487 void AccumulateAnalyticFrame(
double lambda);
493 void AccumulateDrawnFrame(
double lambda);
500 void AddParticle(
double length,
double weight);
506 double DrawAnimalLength();
509 double DrawFalsePositiveLength();
512 double TotalLogSigma()
const;
518 void AnalyticBinProbabilities(std::vector<double>& out)
const;
524 void ResolveEnvironment(ISimObjectCreator*
const creator);
532 double NumberConcentrationAt(
double dT,
const double position[3])
const;
540 std::string m_speciesFieldName;
542 bool m_individualMassGiven =
false;
544 environment::EnvironmentProvider* m_environment =
nullptr;
545 int m_speciesHandle = -1;
547 bool m_hasPorts =
false;
549 double m_sampleVolume = 0.0;
553 int m_framesInWindow = 0;
554 long long m_framesCaptured = 0;
Definition SampleClock.h:40
double NextSampleTime() const
The time at which the next sample is due, s.
Definition SampleClock.h:76
Definition SensorFrame.h:36
Definition SensorNoise.h:39
Definition SensorSilCam.h:289
void FinalSetup(const double dT, const double *const adX, ISimObjectCreator *const creator) override
SensorSilCam(std::string simObjectName, ISimObjectCreator *creator)
const double * OutSizeMean(const double dT, const double *const adX)
The mean measured particle length, m.
const double * OutSizeHistogram(const double dT, const double *const adX)
The normalised size distribution.
void AcceptedStep(const double dT, const double *const adX) override
long long FramesCaptured() const
The total number of frames captured since the instrument was built.
Definition SensorSilCam.h:435
static double LengthLogSigmaOf(double medianLength, double stdLength)
static int BinIndexOf(double length, double binMin, double binMax, int numBins)
const double * OutValid(const double dT, const double *const adX)
One once the first window has closed.
bool CaptureFrame(double t, double numberConcentration, const double position[3])
const double * OutNumberConcentration(const double dT, const double *const adX)
The measured number concentration, individuals per m^3.
int FramesInWindow() const
The number of frames captured since the current window opened.
Definition SensorSilCam.h:432
const Settings & GetSettings() const
The settings the instrument was built with.
Definition SensorSilCam.h:429
const double * OutSizeStd(const double dT, const double *const adX)
The standard deviation of the measured particle lengths, m.
const double * OutCount(const double dT, const double *const adX)
The raw aggregated count over the window.
const double * OutSampleTime(const double dT, const double *const adX)
The mid time of the held window, s.
const Measurement & HeldMeasurement() const
The measurement currently held on the output ports.
Definition SensorSilCam.h:426
void OdeFcn(const double dT, const double *const adX, double *const adXDot) const override
An empty function: nothing about a frame counting instrument is a continuous state.
const double * OutConcentration(const double dT, const double *const adX)
The measured mass concentration, kg/m^3.
SensorSilCam(std::string simObjectName, const Settings &settings)
static double SampleVolumeOf(const double sideLengths[3])
static double FrameLambdaOf(double numberConcentration, double sampleVolume, double captureEfficiency, double detectionProbability)
const double * OutPosition(const double dT, const double *const adX)
The mean NED position of the sensor head over the held window, m.
int CaptureIfDue(double t, double numberConcentration, const double position[3])
double NextFrameTime() const
The time at which the next frame is due, s.
Definition SensorSilCam.h:438
Window
Spatial window (validity interval) edge profiles.
Definition ParametricBathymetry.h:87
One completed measurement window, held on the output ports until the next closes.
Definition SensorSilCam.h:313
double count
The raw aggregated count.
Definition SensorSilCam.h:316
double sampleTime
The mid time of the window, s.
Definition SensorSilCam.h:320
double numberConcentration
The number concentration, individuals per m^3.
Definition SensorSilCam.h:315
double sizeMean
The mean measured length, m.
Definition SensorSilCam.h:317
double valid
One once a window has closed.
Definition SensorSilCam.h:322
double concentration
The mass concentration, kg/m^3.
Definition SensorSilCam.h:314
std::vector< double > histogram
The normalised size distribution.
Definition SensorSilCam.h:319
double position[3]
The mean sensor position over the window, m.
Definition SensorSilCam.h:321
double sizeStd
The standard deviation of the measured lengths, m.
Definition SensorSilCam.h:318
Everything that makes one silhouette camera out of the shared sensor machinery.
Definition SensorSilCam.h:293
int numSizeBins
The number of histogram bins.
Definition SensorSilCam.h:305
int framesPerOutput
Frames aggregated into one measurement.
Definition SensorSilCam.h:295
double lengthM
The median animal length, m.
Definition SensorSilCam.h:302
double frameRate
The imaging rate, Hz.
Definition SensorSilCam.h:294
double sizeErrorStdRelative
Relative standard deviation of the sizing error.
Definition SensorSilCam.h:304
double sizeBinMin
The lower edge of the first bin, m.
Definition SensorSilCam.h:306
double lengthStdM
The standard deviation of the animal length, m.
Definition SensorSilCam.h:303
double assumedDetectionProbability
The detection probability the instrument divides by.
Definition SensorSilCam.h:299
double sizeBinMax
The upper edge of the last bin, m.
Definition SensorSilCam.h:307
unsigned int noiseSeed
The random seed; zero is deterministic and noise free.
Definition SensorSilCam.h:308
double captureEfficiency
Fraction of present animals carried through the volume.
Definition SensorSilCam.h:297
double detectionProbability
Probability an imaged animal is counted.
Definition SensorSilCam.h:298
double individualMassKg
The mass of one animal, kg.
Definition SensorSilCam.h:301
double sampleVolume[3]
The imaged volume side lengths, m.
Definition SensorSilCam.h:296
double falsePositiveRate
Expected spurious detections per frame.
Definition SensorSilCam.h:300