WSF
WsfBayesClassification.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 WSFBAYESCLASSIFICATION_HPP
16#define WSFBAYESCLASSIFICATION_HPP
17
18#include "wsf_mil_export.h"
19
20#include <map>
21#include <string>
22
24#include "WsfStringId.hpp"
26#include "WsfTrackListFwd.hpp"
27
31struct WSF_MIL_EXPORT ColumnPair
32{
33 std::string mFirst;
34 std::string mSecond;
35};
36
37struct WSF_MIL_EXPORT AttributePair // std tuple
38{
39 double mFirst;
40 double mSecond;
41};
42
43struct WSF_MIL_EXPORT WsfBayesAttribute
44{
45 // The name should point to the return type of the accessor.
46 const char* mName;
47 double mValue;
48 // A;; was working without sigma, until we added the correlator
49 double mSigma;
50};
51
52//-----------------------------------------------------------------
53// WsfAttributeMeasure
54//-----------------------------------------------------------------
55class WSF_MIL_EXPORT WsfAttributeMeasure
56{
57public:
59 : mAverage(0.0)
60 , mVariance(0.0)
61 {
62 }
63 virtual ~WsfAttributeMeasure() = default;
64
67 virtual double GetEllipticalGate(double aValue, double aChiSqPointMult);
68
74 virtual double GetProbabilityDistribution(double aValue);
75
77 void SetRange(const AttributePair& aAttributeValuePair);
78 void SetSigma(const AttributePair& aAttributeValuePair);
79 virtual void AssertValid();
80
81protected:
82 friend class WsfBayesClassifier;
83 double mAverage;
84 double mVariance;
85};
86
87//-----------------------------------------------------------------
88// WsfCompoundAttributeMeasure
89//-----------------------------------------------------------------
93{
94public:
97 double GetEllipticalGate(double aValue, double aChiSqPointMult) override;
98
99 double GetProbabilityDistribution(double aValue) override;
100
101 // Creates and returns a new attribute for a new mode.
103
104protected:
105 friend class WsfBayesClassifier;
106 std::vector<WsfAttributeMeasure*> mMultiModes;
107};
108
109//-----------------------------------------------------------------
110// WsfAttributeAccessor
111//-----------------------------------------------------------------
112class WSF_MIL_EXPORT WsfAttributeAccessor
113{
114public:
116 virtual ~WsfAttributeAccessor() = default;
117 virtual const char* GetName() const = 0;
118 virtual bool HasAttribute(const WsfTrack* aTrack) = 0;
119 virtual bool GetAttribute(const WsfTrack* aTrack, WsfBayesAttribute& aAttribute) = 0;
120};
121
122//-----------------------------------------------------------------
123// WsfSignalAttributeAccessor
124//-----------------------------------------------------------------
125class WSF_MIL_EXPORT WsfSignalAttributeAccessor
126{
127public:
129 virtual ~WsfSignalAttributeAccessor() = default;
130 virtual const char* GetName() const = 0;
131 virtual bool HasAttribute(const WsfTrack::Signal& aSignal) = 0;
132 virtual bool GetAttribute(const WsfTrack::Signal& aSignal, WsfBayesAttribute& aAttribute) = 0;
133};
134
135//-----------------------------------------------------------------
136// WsfSignalAccessor
137//-----------------------------------------------------------------
139class WSF_MIL_EXPORT WsfSignalAccessor
140{
141public:
143 virtual ~WsfSignalAccessor() = default;
144 virtual void SetTrack(const WsfTrack& aTrack, std::vector<WsfBayesAttribute>& aAttributeValueList);
145
146protected:
147 std::vector<WsfSignalAttributeAccessor*> mSignalAccessorsMaster;
148};
149
150//-----------------------------------------------------------------
151// WsfTrackAccessorDeep
152//-----------------------------------------------------------------
153class WSF_MIL_EXPORT WsfTrackAccessorDeep : public TrackAccessor
154{
155public:
157 ~WsfTrackAccessorDeep() override;
158 virtual void SetTrack(const WsfTrack& aTrack);
159 size_t GetAttributeCount() { return mAttributeValueList.size(); }
160 size_t GetAttributeCount() const { return mAttributeValueList.size(); }
161
163 void GetAttribute(size_t i, WsfBayesAttribute& aAttribute) const { aAttribute = mAttributeValueList[i]; }
164
165protected:
167 std::vector<WsfAttributeAccessor*> mAttributeAccessorMaster;
168 std::vector<WsfBayesAttribute> mAttributeValueList;
169};
170
171//-----------------------------------------------------------------
172// WsfEntityPrototype
173//-----------------------------------------------------------------
175class WSF_MIL_EXPORT WsfEntityPrototype
176{
177public:
179 virtual ~WsfEntityPrototype() = default;
180 std::string GetTypeName() { return mTypeName; }
181 void AddAttributeProtoRange(const std::string& aAttName, const AttributePair& aAttributeValuePair);
182
183 void AddAttributeProtoSigma(const std::string& aAttName, const AttributePair& aAttributeValuePair);
184
185 virtual size_t GetCorrelationCount(const TrackAccessor& aTrackAccessor);
186 virtual double GetEllipticalGate95Percent(const TrackAccessor& aTrackAccessor);
187 virtual double GetEllipticalGate(const TrackAccessor& aTrackAccessor, double aChiSqPointMult = 1.0);
188
189 virtual double GetProbabilityDistribution(const TrackAccessor& aTrackAccessor);
190
191public:
192 std::string mTypeName;
194 std::map<std::string, WsfCompoundAttributeMeasure*> mName2Attribase;
195 bool mDebug;
196
197private:
198 WsfEntityPrototype(const WsfEntityPrototype& aSrc) = delete;
199 WsfEntityPrototype& operator=(const WsfEntityPrototype& aSrc) = delete;
200 WsfAttributeMeasure* CreateOrFindAttributeProto(const std::string& aAttName);
201};
202
203//-----------------------------------------------------------------
204// WsfBayesClassification
205//-----------------------------------------------------------------
213class WSF_MIL_EXPORT WsfBayesClassification
214{
215public:
218};
219
220//-----------------------------------------------------------------
221// WsfAccessorSpeed
222//-----------------------------------------------------------------
223class WSF_MIL_EXPORT WsfAccessorSpeed : public WsfAttributeAccessor
224{
225public:
226 WsfAccessorSpeed() = default;
227 ~WsfAccessorSpeed() override = default;
228
229 const char* GetName() const override { return "speed"; }
230 bool HasAttribute(const WsfTrack* aTrack) override { return aTrack->VelocityValid(); }
231 bool GetAttribute(const WsfTrack* aTrack, WsfBayesAttribute& aAttribute) override;
232};
233
234//-----------------------------------------------------------------
235// WsfAccessorAltitude
236//-----------------------------------------------------------------
237class WSF_MIL_EXPORT WsfAccessorAltitude : public WsfAttributeAccessor
238{
239public:
241 ~WsfAccessorAltitude() override = default;
242
243 const char* GetName() const override { return "alt"; }
244 bool HasAttribute(const WsfTrack* aTrack) override { return aTrack->LocationValid(); }
245 bool GetAttribute(const WsfTrack* aTrack, WsfBayesAttribute& aAttribute) override;
246};
247
248//-----------------------------------------------------------------
249// WsfAccessorIFF
250//-----------------------------------------------------------------
251class WSF_MIL_EXPORT WsfAccessorIFF : public WsfAttributeAccessor
252{
253public:
254 WsfAccessorIFF() = default;
255 ~WsfAccessorIFF() override = default;
256
257 const char* GetName() const override { return "iff"; }
258 bool HasAttribute(const WsfTrack* aTrack) override;
259 bool GetAttribute(const WsfTrack* aTrack, WsfBayesAttribute& aAttribute) override;
260};
261
262//-----------------------------------------------------------------
263// WsfAccessorPRI
264//-----------------------------------------------------------------
265class WSF_MIL_EXPORT WsfAccessorPRI : public WsfSignalAttributeAccessor
266{
267public:
268 WsfAccessorPRI() = default;
269 ~WsfAccessorPRI() override = default;
270
271 const char* GetName() const override { return "pri"; }
272 bool HasAttribute(const WsfTrack::Signal& aSignal) override { return (aSignal.mPulseRepetitionInterval != 0.0); }
273
274 bool GetAttribute(const WsfTrack::Signal& aSignal, WsfBayesAttribute& aAttribute) override;
275};
276
277//-----------------------------------------------------------------
278// WsfAccessorFreq
279//-----------------------------------------------------------------
280class WSF_MIL_EXPORT WsfAccessorFreq : public WsfSignalAttributeAccessor
281{
282public:
283 WsfAccessorFreq() = default;
284 ~WsfAccessorFreq() override = default;
285
286 const char* GetName() const override { return "freq"; }
287 bool HasAttribute(const WsfTrack::Signal& aSignal) override
288 {
289 return ((aSignal.mUpperFrequency != 0.0) || (aSignal.mLowerFrequency != 0.0));
290 }
291
292 bool GetAttribute(const WsfTrack::Signal& aSignal, WsfBayesAttribute& aAttribute) override;
293};
294
295//-----------------------------------------------------------------
296// WsfAccessorPW
297//-----------------------------------------------------------------
298class WSF_MIL_EXPORT WsfAccessorPW : public WsfSignalAttributeAccessor
299{
300public:
301 WsfAccessorPW() = default;
302 ~WsfAccessorPW() override = default;
303
304 const char* GetName() const override { return "pw"; }
305 bool HasAttribute(const WsfTrack::Signal& aSignal) override { return aSignal.mPulseWidth != 0.0; }
306
307 bool GetAttribute(const WsfTrack::Signal& aSignal, WsfBayesAttribute& aAttribute) override;
308};
309
310#endif
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
WsfTrackListT< WsfLocalTrack > WsfLocalTrackList
Definition WsfTrackList.hpp:89
A parse-once re-use object super-class, to get to the track attributes.
Definition WsfClassificationProcessor.hpp:29
TrackAccessor()=default
WsfAccessorAltitude()=default
bool HasAttribute(const WsfTrack *aTrack) override
Definition WsfBayesClassification.hpp:244
const char * GetName() const override
Definition WsfBayesClassification.hpp:243
~WsfAccessorAltitude() override=default
WsfAccessorFreq()=default
const char * GetName() const override
Definition WsfBayesClassification.hpp:286
~WsfAccessorFreq() override=default
bool HasAttribute(const WsfTrack::Signal &aSignal) override
Definition WsfBayesClassification.hpp:287
~WsfAccessorIFF() override=default
const char * GetName() const override
Definition WsfBayesClassification.hpp:257
WsfAccessorIFF()=default
bool HasAttribute(const WsfTrack::Signal &aSignal) override
Definition WsfBayesClassification.hpp:272
~WsfAccessorPRI() override=default
WsfAccessorPRI()=default
const char * GetName() const override
Definition WsfBayesClassification.hpp:271
WsfAccessorPW()=default
bool HasAttribute(const WsfTrack::Signal &aSignal) override
Definition WsfBayesClassification.hpp:305
const char * GetName() const override
Definition WsfBayesClassification.hpp:304
~WsfAccessorPW() override=default
~WsfAccessorSpeed() override=default
const char * GetName() const override
Definition WsfBayesClassification.hpp:229
bool HasAttribute(const WsfTrack *aTrack) override
Definition WsfBayesClassification.hpp:230
WsfAccessorSpeed()=default
WsfAttributeAccessor()=default
virtual const char * GetName() const =0
virtual ~WsfAttributeAccessor()=default
virtual bool HasAttribute(const WsfTrack *aTrack)=0
virtual bool GetAttribute(const WsfTrack *aTrack, WsfBayesAttribute &aAttribute)=0
Definition WsfBayesClassification.hpp:56
virtual ~WsfAttributeMeasure()=default
virtual double GetEllipticalGate(double aValue, double aChiSqPointMult)
Elliptical distance.
Definition WsfBayesClassification.cpp:98
friend class WsfBayesClassifier
Definition WsfBayesClassification.hpp:82
void SetRange(const AttributePair &aAttributeValuePair)
Data range from CSV, data inputs.
Definition WsfBayesClassification.cpp:142
virtual void AssertValid()
Definition WsfBayesClassification.cpp:170
virtual double GetProbabilityDistribution(double aValue)
Returns the standard BC statistical distance or probability density function (PDF) value,...
Definition WsfBayesClassification.cpp:129
WsfAttributeMeasure()
Definition WsfBayesClassification.hpp:58
void SetSigma(const AttributePair &aAttributeValuePair)
Definition WsfBayesClassification.cpp:160
double mAverage
Definition WsfBayesClassification.hpp:83
double mVariance
Definition WsfBayesClassification.hpp:84
Definition WsfBayesClassification.hpp:214
static WsfTrackClassifier * CreateClassifier()
There can be multiple classifiers.
Definition WsfBayesClassification.cpp:549
WsfCompoundAttributeMeasure()
Definition WsfBayesClassification.cpp:178
friend class WsfBayesClassifier
Definition WsfBayesClassification.hpp:105
double GetEllipticalGate(double aValue, double aChiSqPointMult) override
Elliptical distance.
Definition WsfBayesClassification.cpp:199
double GetProbabilityDistribution(double aValue) override
Returns the standard BC statistical distance or probability density function (PDF) value,...
Definition WsfBayesClassification.cpp:222
std::vector< WsfAttributeMeasure * > mMultiModes
Definition WsfBayesClassification.hpp:106
WsfAttributeMeasure * AddMode()
Definition WsfBayesClassification.cpp:240
std::string mTypeName
Definition WsfBayesClassification.hpp:192
WsfEntityPrototype()
Definition WsfBayesClassification.cpp:361
bool mDebug
Definition WsfBayesClassification.hpp:195
WsfStringId mTypeNameID
Definition WsfBayesClassification.hpp:193
virtual ~WsfEntityPrototype()=default
std::string GetTypeName()
Definition WsfBayesClassification.hpp:180
std::map< std::string, WsfCompoundAttributeMeasure * > mName2Attribase
Definition WsfBayesClassification.hpp:194
Like the Tracker and used by a Tracker, it parses out all valid signal attributes.
Definition WsfBayesClassification.hpp:140
virtual void SetTrack(const WsfTrack &aTrack, std::vector< WsfBayesAttribute > &aAttributeValueList)
Definition WsfBayesClassification.cpp:265
std::vector< WsfSignalAttributeAccessor * > mSignalAccessorsMaster
Definition WsfBayesClassification.hpp:147
WsfSignalAccessor()
Definition WsfBayesClassification.cpp:250
virtual ~WsfSignalAccessor()=default
virtual bool HasAttribute(const WsfTrack::Signal &aSignal)=0
virtual ~WsfSignalAttributeAccessor()=default
WsfSignalAttributeAccessor()=default
virtual bool GetAttribute(const WsfTrack::Signal &aSignal, WsfBayesAttribute &aAttribute)=0
virtual const char * GetName() const =0
std::vector< WsfAttributeAccessor * > mAttributeAccessorMaster
Definition WsfBayesClassification.hpp:167
size_t GetAttributeCount() const
Definition WsfBayesClassification.hpp:160
WsfTrackAccessorDeep()
Definition WsfBayesClassification.cpp:303
void GetAttribute(size_t i, WsfBayesAttribute &aAttribute) const
Polled by "each" entity proto.
Definition WsfBayesClassification.hpp:163
WsfSignalAccessor mSignalAccessor
Definition WsfBayesClassification.hpp:166
virtual void SetTrack(const WsfTrack &aTrack)
Definition WsfBayesClassification.cpp:332
std::vector< WsfBayesAttribute > mAttributeValueList
Definition WsfBayesClassification.hpp:168
size_t GetAttributeCount()
Definition WsfBayesClassification.hpp:159
Definition WsfTrackClassifier.hpp:26
double mPulseRepetitionInterval
Definition WsfTrack.hpp:61
double mLowerFrequency
Definition WsfTrack.hpp:59
double mPulseWidth
Definition WsfTrack.hpp:62
double mUpperFrequency
Definition WsfTrack.hpp:60
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
WsfTrack_Signal Signal
Definition WsfTrack.hpp:122
Definition WsfBayesClassification.hpp:38
double mFirst
Definition WsfBayesClassification.hpp:39
double mSecond
Definition WsfBayesClassification.hpp:40
These structures are used for parsing learning data, and the subsequent insertion into the prototype.
Definition WsfBayesClassification.hpp:32
std::string mFirst
Definition WsfBayesClassification.hpp:33
std::string mSecond
Definition WsfBayesClassification.hpp:34
Definition WsfBayesClassification.hpp:44
double mSigma
Definition WsfBayesClassification.hpp:49
double mValue
Definition WsfBayesClassification.hpp:47
const char * mName
Definition WsfBayesClassification.hpp:46
Copyrights Multiple, All Rights Reserved