WSF
WsfCompositeSensor.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#ifndef WSFCOMPOSITESENSOR_HPP
13#define WSFCOMPOSITESENSOR_HPP
14
15#include "wsf_export.h"
16
17#include <mutex>
18#include <vector>
19
20#include "UtCallbackHolder.hpp"
21
22class WsfFilter;
23#include "WsfLocalTrack.hpp"
24#include "WsfSensor.hpp"
25#include "WsfSensorMode.hpp"
26class WsfTrackManager;
27
30{
31public:
38
42 ~WsfCompositeSensor() override;
43
44 WsfSensor* Clone() const override;
45
46 // Initialize before other sensors
48
49 bool Initialize(double aSimTime) override;
50 bool Initialize2(double aSimTime) override;
51 bool ProcessInput(UtInput& aInput) override;
52 bool ProcessMessage(double aSimTime, const WsfMessage& aMessage) override;
53 void TurnOff(double aSimTime) override;
54 void TurnOn(double aSimTime) override;
55 void Update(double aSimTime) override;
56
57 size_t GetEM_RcvrCount() const override;
58 WsfEM_Rcvr& GetEM_Rcvr(size_t aIndex) const override;
59 size_t GetEM_XmtrCount() const override;
60 WsfEM_Xmtr& GetEM_Xmtr(size_t aIndex) const override;
61
62 bool WithinFieldOfView(double aSimTime, WsfPlatform* aPlatformPtr) override;
63 bool WithinFieldOfView(double aSimTime, WsfTrack* aTrackPtr) override;
64
67 {
68 public:
70 CompositeMode(const CompositeMode& aSrc);
72 CompositeMode(const WsfSensorMode& aSrc);
73 CompositeMode& operator =(const WsfSensorMode& aSrc);
74 ~CompositeMode() override = default;
75
76 WsfMode* Clone() const override;
77 bool Initialize(double aSimTime) override;
78 bool ProcessInput(UtInput& aInput) override;
79
80 bool AttemptToDetect(double aSimTime, WsfPlatform* aTargetPtr, Settings& aSettings, WsfSensorResult& aResult) override;
81
82 void Deselect(double aSimTime) override;
83 void Select(double aSimTime) override;
84
85 void ApplyMeasurementErrors(WsfSensorResult& aResult) override;
86
87 void InitializeTrack(double aSimTime, WsfTrack*& aTrackPtr) override;
88
89 void UpdateTrack(double aSimTime, WsfTrack* aTrackPtr, WsfPlatform* aTargetPtr, WsfSensorResult& aResult) override;
90
91 private:
92 WsfCompositeSensor* mMySensorPtr;
93
95 WsfSensorMode* mDetectModePtr;
96 };
97
98protected:
99 bool DropContributorTrack(double aSimTime, const WsfTrackId& aRawTrackId);
100
101 void UpdateCompositeTrack(double aSimTime, const WsfTrack& aRawTrack);
102
103 unsigned int GetSensorIndex(WsfSensor* aSensorPtr) const;
104
105 bool IsA_ConstituentSensor(WsfSensor* aSensorPtr);
106
107 void SensorTurnedOff(double aSimTime, WsfSensor* aSensorPtr);
108
109 void SensorDetectionChanged(double aSimTime, WsfSensor* aSensorPtr, size_t aTargetIndex, WsfSensorResult& aResult);
110
111 void UpdateXmtrRcvrLists();
112
114
116 std::vector<CompositeMode*> mCompositeModeList;
117
119 std::vector<WsfSensor*> mSensorPtrs;
120
122 std::vector<WsfStringId> mSensorNames;
123
125
126
130
133
136
138 mutable std::recursive_mutex mMutex;
139
141 UtCallbackHolder mCallbacks;
143
145
146
147 std::vector<WsfEM_Xmtr*> mXmtrList;
148
150 std::vector<WsfEM_Rcvr*> mRcvrList;
151
153};
154
155#endif
@ cWSF_INITIALIZE_ORDER_SENSOR
Definition WsfComponentRoles.hpp:178
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
CompositeMode & operator=(const CompositeMode &aSrc)
Definition WsfCompositeSensor.cpp:920
void InitializeTrack(double aSimTime, WsfTrack *&aTrackPtr) override
Definition WsfCompositeSensor.cpp:1178
void Select(double aSimTime) override
Definition WsfCompositeSensor.cpp:1148
void ApplyMeasurementErrors(WsfSensorResult &aResult) override
Definition WsfCompositeSensor.cpp:1168
bool Initialize(double aSimTime) override
Definition WsfCompositeSensor.cpp:962
~CompositeMode() override=default
bool ProcessInput(UtInput &aInput) override
Definition WsfCompositeSensor.cpp:971
CompositeMode()
Definition WsfCompositeSensor.cpp:900
void UpdateTrack(double aSimTime, WsfTrack *aTrackPtr, WsfPlatform *aTargetPtr, WsfSensorResult &aResult) override
Definition WsfCompositeSensor.cpp:1194
WsfMode * Clone() const override
Create an exact duplicate of this mode.
Definition WsfCompositeSensor.cpp:955
bool AttemptToDetect(double aSimTime, WsfPlatform *aTargetPtr, Settings &aSettings, WsfSensorResult &aResult) override
Definition WsfCompositeSensor.cpp:978
void Deselect(double aSimTime) override
Definition WsfCompositeSensor.cpp:1128
A specialization of WsfSensor that implements a sensor that is a collection of other sensors.
Definition WsfCompositeSensor.hpp:30
bool IsA_ConstituentSensor(WsfSensor *aSensorPtr)
Definition WsfCompositeSensor.cpp:742
unsigned int GetSensorIndex(WsfSensor *aSensorPtr) const
Definition WsfCompositeSensor.cpp:757
std::vector< WsfSensor * > mSensorPtrs
The list of constituent sensors (not valid until after Initialize is called).
Definition WsfCompositeSensor.hpp:119
OperatingMode
Definition WsfCompositeSensor.hpp:33
@ cOM_INDEPENDENT
Definition WsfCompositeSensor.hpp:35
@ cOM_UNDEFINED
Definition WsfCompositeSensor.hpp:34
@ cOM_SYNCHRONOUS
Definition WsfCompositeSensor.hpp:36
void UpdateXmtrRcvrLists()
Definition WsfCompositeSensor.cpp:876
std::recursive_mutex mMutex
Mutex for locking simulation observer callbacks when multi-threading.
Definition WsfCompositeSensor.hpp:138
void SensorDetectionChanged(double aSimTime, WsfSensor *aSensorPtr, size_t aTargetIndex, WsfSensorResult &aResult)
Definition WsfCompositeSensor.cpp:818
WsfCompositeSensor & operator=(const WsfCompositeSensor &aSrc)=delete
OperatingMode mOperatingMode
Definition WsfCompositeSensor.hpp:113
std::vector< CompositeMode * > mCompositeModeList
The sensor-specific list of modes (not valid until Initialize is called).
Definition WsfCompositeSensor.hpp:116
WsfTrackManager * mTrackManagerPtr
Pointer to the track manager that holds the track lists.
Definition WsfCompositeSensor.hpp:135
void UpdateCompositeTrack(double aSimTime, const WsfTrack &aRawTrack)
Definition WsfCompositeSensor.cpp:604
UtCallbackHolder mCallbacks
Registered simulation observer callbacks.
Definition WsfCompositeSensor.hpp:141
double mTrackQuality
Definition WsfCompositeSensor.hpp:129
bool DropContributorTrack(double aSimTime, const WsfTrackId &aRawTrackId)
Definition WsfCompositeSensor.cpp:560
WsfCompositeSensor(WsfScenario &aScenario)
Definition WsfCompositeSensor.cpp:40
WsfFilter * mFilterPtr
The pointer to the prototype filter (if defined).
Definition WsfCompositeSensor.hpp:132
std::vector< WsfEM_Xmtr * > mXmtrList
The list of transmitters.
Definition WsfCompositeSensor.hpp:147
void SensorTurnedOff(double aSimTime, WsfSensor *aSensorPtr)
Definition WsfCompositeSensor.cpp:774
std::vector< WsfStringId > mSensorNames
The list of constituent sensor names.
Definition WsfCompositeSensor.hpp:122
std::vector< WsfEM_Rcvr * > mRcvrList
The list of receivers.
Definition WsfCompositeSensor.hpp:150
int GetComponentInitializationOrder() const override
Definition WsfCompositeSensor.hpp:47
Definition WsfEM_Rcvr.hpp:68
Definition WsfEM_Xmtr.hpp:55
Implement a filter as an adapter.
Definition WsfFilter.hpp:24
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
WsfMode()
Definition WsfMode.cpp:15
virtual bool ProcessMessage(double aSimTime, const WsfMessage &aMessage)
Definition WsfPlatformPart.cpp:442
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
WsfSensorMode()
Definition WsfSensorMode.cpp:47
Definition WsfSensorResult.hpp:27
Definition WsfSensor.hpp:133
bool ProcessInput(UtInput &aInput) override
Definition WsfSensor.cpp:380
void Update(double aSimTime) override
Definition WsfSensor.cpp:497
virtual WsfEM_Rcvr & GetEM_Rcvr(size_t aIndex) const
Definition WsfSensor.cpp:660
WsfSensor(const WsfScenario &aScenario)
Definition WsfSensor.cpp:52
virtual size_t GetEM_RcvrCount() const
Definition WsfSensor.cpp:646
WsfSensor * Clone() const override=0
virtual WsfEM_Xmtr & GetEM_Xmtr(size_t aIndex) const
Definition WsfSensor.cpp:714
bool Initialize(double aSimTime) override
Definition WsfSensor.cpp:255
virtual size_t GetEM_XmtrCount() const
Definition WsfSensor.cpp:700
bool Initialize2(double aSimTime) override
Definition WsfSensor.cpp:321
virtual bool WithinFieldOfView(double aSimTime, WsfPlatform *aPlatformPtr)
Definition WsfSensor.cpp:751
void TurnOff(double aSimTime) override
Definition WsfSensor.cpp:523
void TurnOn(double aSimTime) override
Definition WsfSensor.cpp:563
Definition WsfTrackId.hpp:33
Definition WsfTrackManager.hpp:62
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Copyrights Multiple, All Rights Reserved