274#include "SampledSensor.h"
276#include <fhsim/simobject/SimObject.h>
282class EnvironmentProvider;
357 static double FrameLambdaOf(
double numberConcentration,
double sampleVolume,
358 double captureEfficiency,
double detectionProbability);
376 static int BinIndexOf(
double length,
double binMin,
double binMax,
int numBins);
379 void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const override;
394 void FinalSetup(
const double dT,
const double*
const adX, ISimObjectCreator*
const creator)
override;
406 int CaptureIfDue(
double t,
double numberConcentration,
const double position[3]);
415 bool CaptureFrame(
double t,
double numberConcentration,
const double position[3]);
440 const double*
OutCount(
const double dT,
const double*
const adX);
443 const double*
OutSizeMean(
const double dT,
const double*
const adX);
446 const double*
OutSizeStd(
const double dT,
const double*
const adX);
455 const double*
OutPosition(
const double dT,
const double*
const adX);
458 const double*
OutValid(
const double dT,
const double*
const adX);
465 double sumLength = 0.0;
466 double sumLengthSq = 0.0;
467 std::vector<double> binCounts;
468 double sumTime = 0.0;
469 double sumPosition[3] = {0.0, 0.0, 0.0};
473 struct AnalyticParticle
475 double meanLength = 0.0;
476 double secondMoment = 0.0;
477 std::vector<double> binProbabilities;
481 void UpdateAnalyticParticle();
490 void AccumulateAnalyticFrame(
double lambda);
496 void AccumulateDrawnFrame(
double lambda);
503 void AddParticle(
double length,
double weight);
509 double DrawAnimalLength();
512 double DrawFalsePositiveLength();
515 double TotalLogSigma()
const;
521 void AnalyticBinProbabilities(std::vector<double>& out)
const;
529 double NumberConcentrationAt(
double dT,
const double position[3])
const;
534 std::string m_speciesFieldName;
535 std::string m_parameterLibrary;
537 bool m_individualMassGiven =
false;
539 int m_speciesHandle = -1;
541 double m_sampleVolume = 0.0;
543 AnalyticParticle m_analytic;
547 int m_framesInWindow = 0;
548 long long m_framesCaptured = 0;
Definition SampledSensor.h:49
double NextSampleTime() const
The time of the next sample, s.
Definition SampledSensor.h:129
Definition SensorSilCam.h:286
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:427
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:424
const Settings & GetSettings() const
The settings the instrument was built with.
Definition SensorSilCam.h:421
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:418
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:430
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:310
double count
The raw aggregated count.
Definition SensorSilCam.h:313
double sampleTime
The mid time of the window, s.
Definition SensorSilCam.h:317
double numberConcentration
The number concentration, individuals per m^3.
Definition SensorSilCam.h:312
double sizeMean
The mean measured length, m.
Definition SensorSilCam.h:314
double valid
One once a window has closed.
Definition SensorSilCam.h:319
double concentration
The mass concentration, kg/m^3.
Definition SensorSilCam.h:311
std::vector< double > histogram
The normalised size distribution.
Definition SensorSilCam.h:316
double position[3]
The mean sensor position over the window, m.
Definition SensorSilCam.h:318
double sizeStd
The standard deviation of the measured lengths, m.
Definition SensorSilCam.h:315
Everything that makes one silhouette camera out of the shared sensor machinery.
Definition SensorSilCam.h:290
int numSizeBins
The number of histogram bins.
Definition SensorSilCam.h:302
int framesPerOutput
Frames aggregated into one measurement.
Definition SensorSilCam.h:292
double lengthM
The median animal length, m.
Definition SensorSilCam.h:299
double frameRate
The imaging rate, Hz.
Definition SensorSilCam.h:291
double sizeErrorStdRelative
Relative standard deviation of the sizing error.
Definition SensorSilCam.h:301
double sizeBinMin
The lower edge of the first bin, m.
Definition SensorSilCam.h:303
double lengthStdM
The standard deviation of the animal length, m.
Definition SensorSilCam.h:300
double assumedDetectionProbability
The detection probability the instrument divides by.
Definition SensorSilCam.h:296
double sizeBinMax
The upper edge of the last bin, m.
Definition SensorSilCam.h:304
unsigned int noiseSeed
The random seed; zero is deterministic and noise free.
Definition SensorSilCam.h:305
double captureEfficiency
Fraction of present animals carried through the volume.
Definition SensorSilCam.h:294
double detectionProbability
Probability an imaged animal is counted.
Definition SensorSilCam.h:295
double individualMassKg
The mass of one animal, kg.
Definition SensorSilCam.h:298
double sampleVolume[3]
The imaged volume side lengths, m.
Definition SensorSilCam.h:293
double falsePositiveRate
Expected spurious detections per frame.
Definition SensorSilCam.h:297