WSF
WsfSensorMode.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
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// Updated by Infoscitex, a DCS Company
13// ****************************************************************************
14
15#ifndef WSFSENSORMODE_HPP
16#define WSFSENSORMODE_HPP
17
18#include "wsf_export.h"
19
20#include <memory>
21
22#include "UtCloneablePtr.hpp"
23#include "WsfMode.hpp"
24#include "WsfSensor.hpp"
25class WsfSensorBeam;
26class WsfSensorErrorModelBase;
28class WsfSensorResult;
29#include "WsfStringId.hpp"
30class WsfTrack;
31
36{
37 friend class WsfSensorModeList;
38
39public:
41 WsfSensorMode(const WsfSensorMode& aSrc);
43 ~WsfSensorMode() override;
44
47
49 WsfSensor* GetSensor() const { return mSensorPtr; }
50
51 const WsfScenario& GetScenario() const;
52
53 WsfSimulation* GetSimulation() const;
54
56 WsfMode* Clone() const override = 0;
57
58 virtual bool Initialize(double aSimTime);
59
60 bool ProcessInput(UtInput& aInput) override;
61
67
68 virtual size_t GetBeamCount() const;
69 virtual WsfSensorBeam* GetBeamEntry(size_t aIndex);
71
78 virtual bool AttemptToDetect(double aSimTime,
79 WsfPlatform* aTargetPtr,
80 WsfSensor::Settings& aSettings,
81 WsfSensorResult& aResult) = 0;
82
83 virtual double GetAltFreqSelectDelay() const { return -1.0; }
84 virtual void ScheduleAltFreqChange(double aSimTime, int aAltFreqId = -1) {}
85 virtual bool IsAltFreqChangeScheduled() const { return false; }
86 virtual double GetLastAltFreqSelectTime() const { return 0.0; }
87
88 virtual bool IsFrequencyAgile() const { return false; }
89
94 void Deselect(double aSimTime) override = 0;
95
100 void Select(double aSimTime) override = 0;
101
102 virtual void ApplyMeasurementErrors(WsfSensorResult& aResult);
103
104 WSF_DEPRECATED virtual void ComputeMeasurementErrors(WsfSensorResult& aResult,
105 double& aAzError,
106 double& aElError,
107 double& aRangeError,
108 double& aRangeRateError) final;
109
110 virtual void InitializeTrack(double aSimTime, WsfTrack*& aTrackPtr);
111
112 virtual void UpdateSensorCueingLimits();
113
114 virtual void UpdateTrack(double aSimTime, WsfTrack* aTrackPtr, WsfPlatform* aTargetPtr, WsfSensorResult& aResult);
115
116 virtual void UpdateTrackReportingFlags(double aSimTime, WsfTrack* aTrackPtr);
117
118 virtual bool WithinDetectionRange(double aSimTime, WsfPlatform* aTargetPtr);
119
121 double GetMaximumRange() const { return mMaximumRange; }
122
125
127 bool DisablesSearch() const { return mDisablesSearch; }
128
131
132 double GetFrameTime() const { return mFrameTime; }
133 void SetFrameTime(double aFrameTime) { mFrameTime = aFrameTime; }
134 double GetRevisitTime() const { return mRevisitTime; }
135 double GetDwellTime() const { return mDwellTime; }
136
139 double GetRequiredPd() const { return mRequiredPd; }
140
144
148
151
154
157
160
163 unsigned int EstablishTrackMask() const { return mEstablishTrackMask; }
164
167 unsigned int MaintainTrackMask() const { return mMaintainTrackMask; }
168
169 double GetTrackQuality() const { return mTrackQuality; }
170
172
173 unsigned int GetReportingFlags() const { return mReportingFlags.mFlags; }
174
175 bool ReportsLocation() const { return mReportingFlags.mReportsLocation; }
176 bool ReportsVelocity() const { return mReportingFlags.mReportsVelocity; }
177 bool ReportsRange() const { return mReportingFlags.mReportsRange; }
178 bool ReportsBearing() const { return mReportingFlags.mReportsBearing; }
179 bool ReportsElevation() const { return mReportingFlags.mReportsElevation; }
180 bool ReportsRangeRate() const { return mReportingFlags.mReportsRangeRate; }
181 bool ReportsSide() const { return mReportingFlags.mReportsSide; }
182 bool ReportsType() const { return mReportingFlags.mReportsType; }
183 bool ReportsIFF_Status() const { return mReportingFlags.mReportsIFF_Status; }
184 bool ReportsSignalToNoise() const { return mReportingFlags.mReportsSignalToNoise; }
185 bool ReportsFrequency() const { return mReportingFlags.mReportsFrequency; }
186 bool ReportsPulseWidth() const { return mReportingFlags.mReportsPulseWidth; }
187 bool ReportsPulseRepititionInterval() const { return mReportingFlags.mReportsPulseRepititionInterval; }
189
191
194 void SetErrorModel(std::unique_ptr<wsf::SensorErrorModelBase> aErrorModelPtr)
195 {
196 mErrorModelPtr = std::move(aErrorModelPtr);
197 }
198
199
201
202 WSF_DEPRECATED virtual double GetAzErrorStdDev() final { return mAzErrorStdDev; }
203 WSF_DEPRECATED virtual double GetElErrorStdDev() final { return mElErrorStdDev; }
204 WSF_DEPRECATED virtual double GetRangeErrorStdDev() final { return mRangeErrorStdDev; }
205 WSF_DEPRECATED virtual double GetRangeRateErrorStdDev() final { return mRangeRateErrorStdDev; }
206 WSF_DEPRECATED virtual void SetAzErrorStdDev(double aAzErrorStdDev) final;
207 WSF_DEPRECATED virtual void SetElErrorStdDev(double aElErrorStdDev) final;
208 WSF_DEPRECATED virtual void SetRangeErrorStdDev(double aRangeErrorStdDev) final;
209 WSF_DEPRECATED virtual void SetRangeRateErrorStdDev(double aRangeRateErrorStdDev) final;
211
213
214
220
227
229 int GetMessageLength() const { return mMessageLength; }
230
232 int GetMessagePriority() const { return mMessagePriority; }
233
234 // This was formerly protected but needed to be made accessible to sensor components.
235 void UpdateTrackPosition(WsfTrack* aTrackPtr, WsfSensorResult& aResult, const double aTgtLocationWCS[3]);
236
238
239protected:
243 {
244 public:
245 AltFrequencyChangeEvent(double aSimTime, WsfSensorMode* aSensorModePtr, int aAltFrequencyId = -1);
246
247 EventDisposition Execute() override;
248
249 private:
250 size_t mPlatformIndex;
251 WsfSensorMode* mSensorModePtr;
252 int mAltFrequencyId;
253 // TODO-UNUSED unsigned int mUpdateEventEpoch;
254 };
255
256 bool InitializeReporting();
257
258 virtual void SelectAlternateFrequency(double aSimTime, int aAltFreqId = -1) {}
259
264
269
273
276 double mMinAzCue;
277 double mMaxAzCue;
278 double mMinElCue;
279 double mMaxElCue;
282
286
295
302
306
311
313
314
317
321
329
336 unsigned int mMaintainTrackMask;
337
339
342
344
345
357
358
360 ut::CloneablePtr<wsf::SensorErrorModelBase> mErrorModelPtr{nullptr};
361
366
371
376
380
382 //{@
383 static const unsigned int cNONE = 0;
384 static const unsigned int cLOCATION = 1;
385 static const unsigned int cVELOCITY = 2;
386 static const unsigned int cRANGE = 4;
387 static const unsigned int cBEARING = 8;
388 static const unsigned int cELEVATION = 16;
389 static const unsigned int cRANGE_RATE = 32;
390 static const unsigned int cSIDE = 64;
391 static const unsigned int cTYPE = 128;
392 static const unsigned int cIFF_STATUS = 256;
393 static const unsigned int cSIGNAL_TO_NOISE = 512;
394 static const unsigned int cFREQUENCY = 1024;
395 static const unsigned int cPULSEWIDTH = 2048;
396 static const unsigned int cPULSE_REPITITION_INTERVAL = 4096;
397 static const unsigned int cSTATE_COVARIANCE = 8192;
398 static const unsigned int cOTHER = 16384;
399 static const unsigned int cALL = 0xFFFFFFFF;
401
403 {
404 ReportingFlags(unsigned int aReportingFlags)
405 : mFlags(aReportingFlags)
406 {
407 }
409 : mFlags(cALL)
410 {
411 }
412
413 void Set(unsigned int aFlags) { mFlags = aFlags; }
414
415 unsigned int Get() const { return mFlags; }
416
417 union
418 {
419 struct
420 {
427 bool mReportsSide : 1;
428 bool mReportsType : 1;
434 // Catch-all for anything other than the above.
435 // Note: A derived class must set this flag if none of the other flags apply.
437 };
438 unsigned int mFlags;
439 };
440 };
441
442 void SetCapabilities(unsigned int aFlags) { mCapabilitiesFlags = aFlags; }
443 void SetReportingFlags(unsigned int aFlags) { mReportingFlags = aFlags; }
444
448};
449
450#endif
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
WsfSpatialDomain
A collection of enumerations and type definitions that are used across a number of components.
Definition WsfTypes.hpp:32
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
SlewMode
Definition WsfArticulatedPart.hpp:44
WsfEvent()=default
EventDisposition
Definition WsfEvent.hpp:37
virtual bool ProcessInput(UtInput &aInput)
Definition WsfMode.cpp:24
WsfMode()
Definition WsfMode.cpp:15
WsfNamed & operator=(const WsfNamed &)=default
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfSensorBeam.hpp:58
Definition WsfSensorModeList.hpp:26
AltFrequencyChangeEvent(double aSimTime, WsfSensorMode *aSensorModePtr, int aAltFrequencyId=-1)
Alternate frequency selection/change event that changes a sensor's frequency.
Definition WsfSensorMode.cpp:1118
EventDisposition Execute() override
Definition WsfSensorMode.cpp:1129
WsfSensor * mSensorPtr
Pointer to the sensor with which the mode is associated.
Definition WsfSensorMode.hpp:261
static const unsigned int cFREQUENCY
Definition WsfSensorMode.hpp:394
ReportingFlags mReportingFlags
Definition WsfSensorMode.hpp:445
double MaintainTrackProbability() const
Definition WsfSensorMode.hpp:147
WsfStringId mOnSuccessModeName
Definition WsfSensorMode.hpp:364
void Select(double aSimTime) override=0
double mMaxAzCue
Definition WsfSensorMode.hpp:277
void SetFrameTime(double aFrameTime)
Definition WsfSensorMode.hpp:133
virtual WSF_DEPRECATED double GetRangeRateErrorStdDev() final
Definition WsfSensorMode.hpp:205
virtual bool AttemptToDetect(double aSimTime, WsfPlatform *aTargetPtr, WsfSensor::Settings &aSettings, WsfSensorResult &aResult)=0
double mTrackQuality
Base line track quality (0..1].
Definition WsfSensorMode.hpp:341
bool DisablesSearch() const
Does using this mode prevent this or any other mode from searching?
Definition WsfSensorMode.hpp:127
bool ReportsType() const
Definition WsfSensorMode.hpp:182
virtual void SelectAlternateFrequency(double aSimTime, int aAltFreqId=-1)
Definition WsfSensorMode.hpp:258
double GetFrameTime() const
Definition WsfSensorMode.hpp:132
double mElErrorStdDev
Definition WsfSensorMode.hpp:350
int EstablishTrackWindow() const
The window size (N) for establishing a track.
Definition WsfSensorMode.hpp:153
static const unsigned int cNONE
The following are flags/masks meant to be combined and used in the SetCapabilities method.
Definition WsfSensorMode.hpp:383
double mMinAzCue
Definition WsfSensorMode.hpp:276
static const unsigned int cTYPE
Definition WsfSensorMode.hpp:391
double mFrameTime
Definition WsfSensorMode.hpp:303
size_t mOnSuccessModeIndex
Definition WsfSensorMode.hpp:365
size_t GetOnFailureModeIndex() const
Definition WsfSensorMode.hpp:225
virtual void UpdateTrackReportingFlags(double aSimTime, WsfTrack *aTrackPtr)
Definition WsfSensorMode.cpp:1039
bool ReportsElevation() const
Definition WsfSensorMode.hpp:179
int mMessageLength
The length of messages originating from this sensor mode.
Definition WsfSensorMode.hpp:373
virtual bool WithinDetectionRange(double aSimTime, WsfPlatform *aTargetPtr)
Definition WsfSensorMode.cpp:1067
static const unsigned int cLOCATION
Definition WsfSensorMode.hpp:384
bool mCanSearchWhileTrack
Definition WsfSensorMode.hpp:294
ut::CloneablePtr< wsf::SensorErrorModelBase > mErrorModelPtr
The model that calculates and applies errors to sensor detection results.
Definition WsfSensorMode.hpp:360
double mRequiredPd
Definition WsfSensorMode.hpp:310
double mRangeErrorStdDev
Definition WsfSensorMode.hpp:353
bool CanSearchWhileTrack() const
Can this mode continue to search while it is also performing tracking requests.
Definition WsfSensorMode.hpp:130
static const unsigned int cSIGNAL_TO_NOISE
Definition WsfSensorMode.hpp:393
double GetRevisitTime() const
Definition WsfSensorMode.hpp:134
bool ReportsSignalToNoise() const
Definition WsfSensorMode.hpp:184
virtual WSF_DEPRECATED double GetAzErrorStdDev() final
Definition WsfSensorMode.hpp:202
WsfSpatialDomain mReportsSpatialDomain
Definition WsfSensorMode.hpp:379
bool mDisablesSearch
Definition WsfSensorMode.hpp:301
double mElCueRate
Definition WsfSensorMode.hpp:275
WsfSensor::SlewMode mCueMode
Definition WsfSensorMode.hpp:280
int HitsToEstablishTrack() const
The number of hits (M) within the window (N) that are required to establish a track.
Definition WsfSensorMode.hpp:150
virtual double GetAltFreqSelectDelay() const
Definition WsfSensorMode.hpp:83
double GetDwellTime() const
Definition WsfSensorMode.hpp:135
unsigned int GetReportingFlags() const
Accessors for the reporting flags.
Definition WsfSensorMode.hpp:173
bool ReportsRange() const
Definition WsfSensorMode.hpp:177
virtual size_t GetBeamCount() const
Definition WsfSensorMode.cpp:566
void SetCapabilities(unsigned int aFlags)
Definition WsfSensorMode.hpp:442
int mHitsToEstablishTrack
The number of hits (M) within the window (N) that are required to establish a track.
Definition WsfSensorMode.hpp:323
static const unsigned int cBEARING
Definition WsfSensorMode.hpp:387
virtual void UpdateTrack(double aSimTime, WsfTrack *aTrackPtr, WsfPlatform *aTargetPtr, WsfSensorResult &aResult)
Definition WsfSensorMode.cpp:709
virtual WSF_DEPRECATED double GetElErrorStdDev() final
Definition WsfSensorMode.hpp:203
virtual bool Initialize(double aSimTime)
Definition WsfSensorMode.cpp:213
unsigned int EstablishTrackMask() const
Definition WsfSensorMode.hpp:163
virtual WSF_DEPRECATED double GetRangeErrorStdDev() final
Definition WsfSensorMode.hpp:204
int mMaximumRequestCount
Definition WsfSensorMode.hpp:285
static const unsigned int cSTATE_COVARIANCE
Definition WsfSensorMode.hpp:397
size_t mOnFailureModeIndex
Definition WsfSensorMode.hpp:370
WsfStringId mOnFailureModeName
Definition WsfSensorMode.hpp:369
static const unsigned int cPULSEWIDTH
Definition WsfSensorMode.hpp:395
virtual void InitializeTrack(double aSimTime, WsfTrack *&aTrackPtr)
Definition WsfSensorMode.cpp:656
static const unsigned int cVELOCITY
Definition WsfSensorMode.hpp:385
void SetErrorModel(std::unique_ptr< wsf::SensorErrorModelBase > aErrorModelPtr)
Definition WsfSensorMode.hpp:194
virtual bool IsFrequencyAgile() const
Definition WsfSensorMode.hpp:88
WsfPlatform * GetPlatform() const
Return the pointer to the platform to which the associated sensor is attached.
Definition WsfSensorMode.hpp:46
virtual double GetLastAltFreqSelectTime() const
Definition WsfSensorMode.hpp:86
static const unsigned int cALL
Catch-all for anything other than the above.
Definition WsfSensorMode.hpp:399
bool ReportsPulseWidth() const
Definition WsfSensorMode.hpp:186
bool ReportsRangeRate() const
Definition WsfSensorMode.hpp:180
int mMaintainTrackWindow
The window size (N) for maintaining a track.
Definition WsfSensorMode.hpp:333
int mMessagePriority
The priority of messages originating from this sensor mode.
Definition WsfSensorMode.hpp:375
double GetMaximumRange() const
Return the optimistic maximum range of the sensor mode.
Definition WsfSensorMode.hpp:121
double GetRequiredPd() const
Definition WsfSensorMode.hpp:139
static const unsigned int cRANGE
Definition WsfSensorMode.hpp:386
bool ReportsIFF_Status() const
Definition WsfSensorMode.hpp:183
double mEstablishTrackProbability
When the M/N establish track criteria is met, this is the probability that a track will be establishe...
Definition WsfSensorMode.hpp:316
unsigned int mMaintainTrackMask
Definition WsfSensorMode.hpp:336
bool ReportsLocation() const
Definition WsfSensorMode.hpp:175
bool ReportsBearing() const
Definition WsfSensorMode.hpp:178
double GetTrackQuality() const
Definition WsfSensorMode.hpp:169
friend class WsfSensorModeList
Definition WsfSensorMode.hpp:37
bool ReportsVelocity() const
Definition WsfSensorMode.hpp:176
double mMaximumRange
Definition WsfSensorMode.hpp:268
int mHitsToMaintainTrack
The number of hits (M) within the window (N) that are required to maintain a track.
Definition WsfSensorMode.hpp:331
int GetMaximumRequestCount() const
Return the maximum number of cued-search or tracking requests the mode can support.
Definition WsfSensorMode.hpp:124
WsfMode * Clone() const override=0
Create an exact duplicate of this mode.
bool InitializeReporting()
Definition WsfSensorMode.cpp:1143
virtual void UpdateSensorCueingLimits()
Definition WsfSensorMode.cpp:693
double mAzErrorStdDev
Definition WsfSensorMode.hpp:347
static const unsigned int cSIDE
Definition WsfSensorMode.hpp:390
unsigned int MaintainTrackMask() const
Definition WsfSensorMode.hpp:167
void Deselect(double aSimTime) override=0
bool ReportsPulseRepititionInterval() const
Definition WsfSensorMode.hpp:187
WsfSensorMode()
Definition WsfSensorMode.cpp:47
double mAzCueRate
Definition WsfSensorMode.hpp:274
virtual void ApplyMeasurementErrors(WsfSensorResult &aResult)
Definition WsfSensorMode.cpp:590
void SetReportingFlags(unsigned int aFlags)
Definition WsfSensorMode.hpp:443
int HitsToMaintainTrack() const
The number of hits (M) within the window (N) that are required to maintain a track.
Definition WsfSensorMode.hpp:156
ReportingFlags mCapabilitiesFlags
Definition WsfSensorMode.hpp:446
int GetMessagePriority() const
Return the priority of report messages that originate from this sensor mode.
Definition WsfSensorMode.hpp:232
virtual bool IsAltFreqChangeScheduled() const
Definition WsfSensorMode.hpp:85
WsfPlatform * mPlatformPtr
Pointer to the platform with which the sensor is associated.
Definition WsfSensorMode.hpp:263
static const unsigned int cIFF_STATUS
Definition WsfSensorMode.hpp:392
static const unsigned int cRANGE_RATE
Definition WsfSensorMode.hpp:389
double mRevisitTime
Definition WsfSensorMode.hpp:304
virtual WsfSensorBeam * GetBeamEntry(size_t aIndex)
Definition WsfSensorMode.cpp:579
const wsf::SensorErrorModelBase * GetErrorModel() const
Definition WsfSensorMode.hpp:192
double mMaintainTrackProbability
Definition WsfSensorMode.hpp:320
wsf::SensorErrorModelBase * GetErrorModel()
Definition WsfSensorMode.hpp:193
int MaintainTrackWindow() const
The window size (N) for maintaining a track.
Definition WsfSensorMode.hpp:159
double mDwellTime
Definition WsfSensorMode.hpp:305
WsfSensor::SlewMode GetCueMode() const
Definition WsfSensorMode.hpp:237
static const unsigned int cOTHER
Definition WsfSensorMode.hpp:398
double EstablishTrackProbability() const
Definition WsfSensorMode.hpp:143
virtual WSF_DEPRECATED void ComputeMeasurementErrors(WsfSensorResult &aResult, double &aAzError, double &aElError, double &aRangeError, double &aRangeRateError) final
Definition WsfSensorMode.cpp:608
int mEstablishTrackWindow
The window size (N) for establishing a track.
Definition WsfSensorMode.hpp:325
double mRangeRateErrorStdDev
Range rate error standard deviation.
Definition WsfSensorMode.hpp:355
virtual void ScheduleAltFreqChange(double aSimTime, int aAltFreqId=-1)
Definition WsfSensorMode.hpp:84
bool ReportsSide() const
Definition WsfSensorMode.hpp:181
bool ReportsFrequency() const
Definition WsfSensorMode.hpp:185
WsfSensor * GetSensor() const
Return the pointer to the sensor with which this mode is associated.
Definition WsfSensorMode.hpp:49
double mMaxElCue
Definition WsfSensorMode.hpp:279
static const unsigned int cPULSE_REPITITION_INTERVAL
Definition WsfSensorMode.hpp:396
int GetMessageLength() const
Return the logical length (int bits) of report messages that originate from this sensor mode.
Definition WsfSensorMode.hpp:229
unsigned int mEstablishTrackMask
Definition WsfSensorMode.hpp:328
double mMinElCue
Definition WsfSensorMode.hpp:278
size_t GetOnSuccessModeIndex() const
Definition WsfSensorMode.hpp:219
static const unsigned int cELEVATION
Definition WsfSensorMode.hpp:388
Definition WsfSensorResult.hpp:27
Definition WsfSensor.hpp:133
Definition WsfSensor.hpp:92
The main controller for a simulation.
Definition WsfSimulation.hpp:109
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
A base class for SensorErrorModels.
Definition WsfSensorErrorModel.hpp:35
Definition WsfSensorMode.hpp:403
void Set(unsigned int aFlags)
Definition WsfSensorMode.hpp:413
bool mReportsPulseWidth
Definition WsfSensorMode.hpp:432
bool mReportsBearing
Definition WsfSensorMode.hpp:424
bool mReportsLocation
Definition WsfSensorMode.hpp:421
bool mReportsType
Definition WsfSensorMode.hpp:428
unsigned int Get() const
Definition WsfSensorMode.hpp:415
bool mReportsElevation
Definition WsfSensorMode.hpp:425
unsigned int mFlags
Definition WsfSensorMode.hpp:438
bool mReportsRangeRate
Definition WsfSensorMode.hpp:426
bool mReportsSide
Definition WsfSensorMode.hpp:427
ReportingFlags()
Definition WsfSensorMode.hpp:408
ReportingFlags(unsigned int aReportingFlags)
Definition WsfSensorMode.hpp:404
bool mReportsPulseRepititionInterval
Definition WsfSensorMode.hpp:433
bool mReportsIFF_Status
Definition WsfSensorMode.hpp:429
bool mReportsOther
Definition WsfSensorMode.hpp:436
bool mReportsFrequency
Definition WsfSensorMode.hpp:431
bool mReportsSignalToNoise
Definition WsfSensorMode.hpp:430
bool mReportsVelocity
Definition WsfSensorMode.hpp:422
bool mReportsRange
Definition WsfSensorMode.hpp:423
Copyrights Multiple, All Rights Reserved