WSF
SOSM_Sensor.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI//REL TO USA ONLY
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef SOSM_SENSOR_HPP
13#define SOSM_SENSOR_HPP
14
15#include "sosm_export.h"
16
17#include <memory>
18#include <string>
19#include <vector>
20
21class SOSM_Atmosphere;
22#include "SOSM_CoreBase.hpp"
25#include "SOSM_Selector.hpp"
26class SOSM_Target;
27
29class SOSM_EXPORT SOSM_Sensor : public SOSM_CoreBase
30{
31public:
32 SOSM_Sensor(SOSM_Manager* aManagerPtr);
33 SOSM_Sensor(const SOSM_Sensor& aSrc);
34 ~SOSM_Sensor() override;
36
37 SOSM_Sensor* Clone() const;
38
39 bool Initialize() override;
40
41 void InputComplete() override;
42
43 bool ProcessInput(UtInput& aInput) override;
44
46 float& aBackgroundRadiance_xR,
47 float& aForegroundRadiance_xR,
48 float& aTransmittance_xR);
49
51 SOSM_Interaction& aInteraction,
52 float& aTargetIntensity_xR,
53 float& aProjectedArea);
54
55 float ComputeProbabilityOfDetection(float aTargetIrradiance, SOSM_Interaction& aInteraction) const;
56
57 float ComputeTargetIrradiance(SOSM_Target* aTargetPtr, SOSM_Interaction& aInteraction);
58
61 SOSM_Atmosphere* GetAtmosphere() const { return mAtmospherePtr; }
62
64 float GetAverageResponse() const { return mSharedDataPtr->mAverageResponse; }
65
68 float GetDetectionThresholdAboveHorizon() const { return mSharedDataPtr->mDetectionThresholdAboveHorizon; }
69
72 float GetDetectionThresholdBelowHorizon() const { return mSharedDataPtr->mDetectionThresholdBelowHorizon; }
73
75 std::vector<float> GetIntegrationFactor() const { return mSharedDataPtr->mIntegFactor; }
76
79 float GetNoiseEquivalentIrradiance() const { return mSharedDataPtr->mNoiseEquivalentIrradiance; }
80
81 void GetResponseCurve(std::vector<float>& aWavelength, std::vector<float>& aResponse) const;
82
84 void GetWavelengthLimits(float& aLowerWavelength, float& aUpperWavelength) const
85 {
86 aLowerWavelength = mSharedDataPtr->mLowerWavelength;
87 aUpperWavelength = mSharedDataPtr->mUpperWavelength;
88 }
89
90 static double ComputeProbabilityOfDetection(double aSignal, double aNoise, double aThreshold);
91
92 SOSM_Manager* GetManager() const { return mManagerPtr; }
93
94private:
95 class ResponsePoint
96 {
97 public:
98 bool operator<(const ResponsePoint& aRhs) const { return (mWavelength < aRhs.mWavelength); }
99 bool operator==(const ResponsePoint& aRhs) const { return (mWavelength == aRhs.mWavelength); }
100
102 float mWavelength;
104 float mResponse;
105 };
106
108 class SharedData : public SOSM_SpectralObject
109 {
110 public:
111 SharedData();
112
113 float ComputeAverageResponse(const TblIndVarU<float>& aWavelengthVar,
114 const TblDepVar1<float>& aResponseVar,
115 float aLowerWavelength,
116 float aUpperWavelength);
117 void InputComplete(SOSM_Sensor& aSensor);
118 bool ProcessInput(UtInput& aInput, SOSM_Sensor& aSensor);
119 float ReadWavenumber(UtInput& aInput);
120 void ShowResponse(SOSM_Sensor& aSensor, const std::vector<float>& aResponse);
121
123 std::vector<ResponsePoint> mResponseCurve;
124
126 float mLowerWavelength;
127
129 float mUpperWavelength;
130
132 float mNoiseEquivalentIrradiance;
133
135 float mDetectionThresholdAboveHorizon;
136
138 float mDetectionThresholdBelowHorizon;
139
141 std::shared_ptr<SOSM_ScalarTable2D> mInstallationAdjustmentTablePtr;
142
143 std::string mAtmosphereType;
144
146 bool mShowResponse;
147
155 std::vector<float> mIntegFactor;
156
164 std::vector<float> mTransFactor;
165
167 float mFirstIntervalFraction;
168
170 float mLastIntervalFraction;
171
176 float mSumIntervalSize;
177
179 float mAverageResponse;
180 };
181
182 SOSM_Manager* mManagerPtr;
183
185 std::shared_ptr<SharedData> mSharedDataPtr;
186
188 SOSM_Atmosphere* mAtmospherePtr;
189
191 SOSM_Selector mAtmosphereSelector;
192};
193
194#endif
bool operator==(int aId, const WsfStringInt &aRhs)
Equal relational operator for the case of an integer on the LHS and a StringId on the RHS.
Definition WsfStringId.hpp:69
An abstract base class for representing atmospherics.
Definition SOSM_Atmosphere.hpp:23
SOSM_CoreBase()
Definition SOSM_CoreBase.cpp:17
virtual bool ProcessInput(UtInput &aInput)
Definition SOSM_CoreBase.cpp:62
virtual bool Initialize()
Definition SOSM_CoreBase.cpp:40
virtual void InputComplete()
Definition SOSM_CoreBase.cpp:58
Definition SOSM_Interaction.hpp:46
A singleton class that manages SOSM data.
Definition SOSM_Manager.hpp:32
SOSM_Sensor * Clone() const
Definition SOSM_Sensor.cpp:65
void GetWavelengthLimits(float &aLowerWavelength, float &aUpperWavelength) const
Return the wavelength limits (in microns) of the sensor.
Definition SOSM_Sensor.hpp:84
SOSM_Sensor(SOSM_Manager *aManagerPtr)
Definition SOSM_Sensor.cpp:37
float GetDetectionThresholdBelowHorizon() const
Definition SOSM_Sensor.hpp:72
float GetAverageResponse() const
Return the average response.
Definition SOSM_Sensor.hpp:64
float GetDetectionThresholdAboveHorizon() const
Definition SOSM_Sensor.hpp:68
SOSM_Manager * GetManager() const
Definition SOSM_Sensor.hpp:92
float GetNoiseEquivalentIrradiance() const
Definition SOSM_Sensor.hpp:79
void ComputeIntegratedTargetData(SOSM_Target *aTargetPtr, SOSM_Interaction &aInteraction, float &aTargetIntensity_xR, float &aProjectedArea)
Definition SOSM_Sensor.cpp:202
std::vector< float > GetIntegrationFactor() const
Get the integration factor (delta wavelength * response) used for spectral integration.
Definition SOSM_Sensor.hpp:75
SOSM_Atmosphere * GetAtmosphere() const
Definition SOSM_Sensor.hpp:61
void ComputeIntegratedAtmosphericData(SOSM_Interaction &aInteraction, float &aBackgroundRadiance_xR, float &aForegroundRadiance_xR, float &aTransmittance_xR)
Definition SOSM_Sensor.cpp:139
float ComputeTargetIrradiance(SOSM_Target *aTargetPtr, SOSM_Interaction &aInteraction)
Definition SOSM_Sensor.cpp:297
float ComputeProbabilityOfDetection(float aTargetIrradiance, SOSM_Interaction &aInteraction) const
Definition SOSM_Sensor.cpp:248
SOSM_Sensor & operator=(const SOSM_Sensor &)=delete
Abstract base class that represents a target.
Definition SOSM_Target.hpp:31
Copyrights Multiple, All Rights Reserved