WSF
WsfEM_XmtrRcvr.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 WSFEM_XMTRRCVR_HPP
13#define WSFEM_XMTRRCVR_HPP
14
15#include "wsf_export.h"
16
17#include <array>
18#include <vector>
19
20class UtInput;
21#include "UtScriptAccessible.hpp"
24#include "WsfAuxDataEnabled.hpp"
25class WsfEM_Antenna;
27class WsfEM_Manager;
29#include "WsfEM_Types.hpp"
30class WsfScenario;
31class WsfMode;
32class WsfPlatform;
33class WsfPlatformPart;
34class WsfSimulation;
35#include "WsfStringId.hpp"
36#include "WsfUniqueId.hpp"
37
41class WSF_EXPORT WsfEM_XmtrRcvr : public UtScriptAccessible, public WsfUniqueId, public WsfAuxDataEnabled
42{
43public:
45 using AntennaPatternList = std::vector<std::pair<WsfAntennaPattern*, double>>;
46
47 WsfEM_XmtrRcvr(WsfEM_Antenna* aAntennaPtr = nullptr);
48 WsfEM_XmtrRcvr(const WsfEM_XmtrRcvr& aSrc, WsfEM_Antenna* aAntennaPtr);
49 virtual ~WsfEM_XmtrRcvr();
50
51 WsfPlatform* GetPlatform() const;
52
54
55 virtual bool Initialize(WsfSimulation& aSimulation);
56
57 virtual bool ProcessInput(UtInput& aInput);
58
59 virtual void UpdatePosition(double aSimTime);
60
61 const char* GetScriptClassName() const override { return "WsfEM_XmtrRcvr"; }
62
66
67 void SetAttenuationModel(WsfEM_Attenuation* aAttenuationPtr);
68
71
74 void SetAttenuationModelType(WsfStringId aAttenuationType) { mAttenuationType = aAttenuationType; }
75
79
80 void SetPropagationModel(WsfEM_Propagation* aPropagationPtr);
81
84
87 void SetPropagationModelType(WsfStringId aPropagationType) { mPropagationType = aPropagationType; }
88
90
91
94
99 void SetAntenna(WsfEM_Antenna* aAntennaPtr) { mAntennaPtr = aAntennaPtr; }
100
101 WsfAntennaPattern* GetAntennaPattern(WsfEM_Types::Polarization aPolarization, double aFrequency) const;
102
103 bool SetAntennaPattern(WsfAntennaPattern* aAntennaPatternPtr, WsfEM_Types::Polarization aPolarization, double aFrequency);
104
105 bool AddAntennaPattern(WsfAntennaPattern* aAntennaPatternPtr, WsfEM_Types::Polarization aPolarization, double aFrequency);
106
107 const AntennaPatternList* GetAntennaPatternList(WsfEM_Types::Polarization aPolarization) const;
108
111 double GetBeamTilt() const { return mBeamTilt; }
112
114 void SetBeamTilt(double aBeamTilt) { mBeamTilt = aBeamTilt; }
115
116 virtual double GetAntennaGain(WsfEM_Types::Polarization aPolarization,
117 double aFrequency,
118 double aTargetAz,
119 double aTargetEl,
120 double aEBS_Az,
121 double aEBS_El);
122
123 WSF_DEPRECATED virtual double GetAzimuthBeamwidth() const final { return GetAzimuthBeamwidth(0.0, 0.0); }
124
125 virtual double GetAzimuthBeamwidth(double aEBS_Azimuth, double aEBS_Elevation) const;
126
127 WSF_DEPRECATED virtual double GetElevationBeamwidth() const final { return GetElevationBeamwidth(0.0, 0.0); }
128
129 virtual double GetElevationBeamwidth(double aEBS_Azimuth, double aEBS_Elevation) const;
130
131 virtual double GetPeakAntennaGain() const;
132
133 virtual double GetMinimumAntennaGain() const;
134
135 virtual void SetAntennaBeamCount(unsigned int aBeamCount);
136
138
140
141
143 bool DebugEnabled() const { return mDebugEnabled; }
144
147 void SetDebugEnabled(bool aDebugEnabled) { mDebugEnabled = aDebugEnabled; }
148
150
151 static void AssociateSystems(WsfEM_XmtrRcvr* aSystem1Ptr, WsfEM_XmtrRcvr* aSystem2Ptr);
152
154 bool IsHorizonMaskingEnabled() const;
155
157 bool IsTerrainMaskingEnabled() const;
158
160 std::string MaskingMode() const;
161
163 void SetMaskingMode(const std::string& aTerrainMaskingMode);
164
166 bool CheckMasking() const { return mCheckMasking; }
167
169 void SetCheckMasking(bool aCheckMasking) { mCheckMasking = aCheckMasking; }
170
173
182
184
187 WsfMode* GetMode() const { return mModePtr; }
188
192 void SetMode(WsfMode* aModePtr) { mModePtr = aModePtr; }
193
195 size_t GetIndex() const { return mIndex; }
196
198 void SetIndex(size_t aIndex) { mIndex = aIndex; }
200
201 WsfSimulation* GetSimulation() const;
202
203 WsfEM_Manager* GetEM_Manager() const;
204
209
212 double GetFrequency() const { return mFrequency; }
213
214 double GetWavelength() const;
215
218 double GetBandwidth() const { return mBandwidth; }
219
223
227 double GetInternalLoss() const { return mInternalLoss; }
228
231
235 void SetEarthRadiusMultiplier(double aMultiplier) { mEarthRadiusMultiplier = aMultiplier; }
236
237 virtual void SetFrequency(double aFrequency);
238
239 virtual void SetBandwidth(double aBandwidth);
240
244 void SetInternalLoss(double aInternalLoss) { mInternalLoss = aInternalLoss; }
245
246 virtual void SetPolarization(WsfEM_Types::Polarization aPolarization);
247
253
254
255 void SetAttenuationInputEnabled(bool aEnabled) { mAttenuationInputEnabled = aEnabled; }
257 void SetPropagationInputEnabled(bool aEnabled) { mPropagationInputEnabled = aEnabled; }
259
260protected:
263
266
269
272
276
279
283 std::array<AntennaPatternList, WsfEM_Types::cPOL_COUNT> mPatternTables{};
284
289
292 double mBeamTilt;
293
299
302 size_t mIndex;
303
306 std::array<bool, WsfEM_Types::cPOL_COUNT> mUsedExplicitPolarization{{false}};
307
309
310 unsigned int mTerrainMaskingMode;
313
314private:
315 void ClearAntennaPatterns();
316
320 bool mAttenuationInputEnabled;
321 bool mPropagationInputEnabled;
322};
323
324#endif
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfAntennaPattern.hpp:35
Definition WsfArticulatedPart.hpp:36
bool ProcessInput(UtInput &aInput)
Definition WsfAuxDataEnabled.cpp:95
WsfAuxDataEnabled()=default
Definition WsfEM_Antenna.hpp:49
Definition WsfEM_Attenuation.hpp:28
Definition WsfEM_Manager.hpp:44
An abstract base class for computing pattern propagation factors.
Definition WsfEM_Propagation.hpp:26
Definition WsfEM_XmtrRcvr.hpp:42
bool CheckMasking() const
determine if horizon and terrain masking is to be checked
Definition WsfEM_XmtrRcvr.hpp:166
double mEarthRadiusMultiplier
Definition WsfEM_XmtrRcvr.hpp:294
void SetPropagationInputEnabled(bool aEnabled)
Enable or disable 'propagation_model' input.
Definition WsfEM_XmtrRcvr.hpp:257
WsfPlatform * GetPlatform() const
Definition WsfEM_XmtrRcvr.cpp:130
WsfMode * GetMode() const
Definition WsfEM_XmtrRcvr.hpp:187
size_t GetIndex() const
Get the index of the xmtr/rcvr in the complex assembly.
Definition WsfEM_XmtrRcvr.hpp:195
WsfEM_Attenuation * mAttenuationPtr
Pointer to the atmospheric attenuation model.
Definition WsfEM_XmtrRcvr.hpp:268
double mFrequency
Definition WsfEM_XmtrRcvr.hpp:295
void SetIndex(size_t aIndex)
Set the index of the xmtr/rcvr in the complex assembly.
Definition WsfEM_XmtrRcvr.hpp:198
void SetAttenuationInputEnabled(bool aEnabled)
Enable or disable 'attenuation_model' input.
Definition WsfEM_XmtrRcvr.hpp:255
WsfEM_Antenna * mAntennaPtr
Pointer to the 'geometry' object for this transmitter/receiver.
Definition WsfEM_XmtrRcvr.hpp:278
void SetAttenuationModelType(WsfStringId aAttenuationType)
Definition WsfEM_XmtrRcvr.hpp:74
WsfEM_Propagation * GetPropagationModel() const
Definition WsfEM_XmtrRcvr.hpp:78
WsfMode * mModePtr
Definition WsfEM_XmtrRcvr.hpp:275
WsfEM_XmtrRcvr(WsfEM_Antenna *aAntennaPtr=nullptr)
Definition WsfEM_XmtrRcvr.cpp:40
WsfEM_Types::Polarization mPolarization
Definition WsfEM_XmtrRcvr.hpp:298
std::vector< std::pair< WsfAntennaPattern *, double > > AntennaPatternList
Vector of pairs of antenna pattern pointer and associated lower frequency bounds.
Definition WsfEM_XmtrRcvr.hpp:45
bool mDebugEnabled
Definition WsfEM_XmtrRcvr.hpp:308
double GetEarthRadiusMultiplier() const
Definition WsfEM_XmtrRcvr.hpp:208
void DisableMaskingCheck()
disables the checking of horizon and terrain masking (retained for compatibility)
Definition WsfEM_XmtrRcvr.hpp:172
std::array< bool, WsfEM_Types::cPOL_COUNT > mUsedExplicitPolarization
Definition WsfEM_XmtrRcvr.hpp:306
double GetFrequency() const
Definition WsfEM_XmtrRcvr.hpp:212
virtual WSF_DEPRECATED double GetElevationBeamwidth() const final
Definition WsfEM_XmtrRcvr.hpp:127
WsfArticulatedPart * GetArticulatedPart() const
Definition WsfEM_XmtrRcvr.cpp:138
WsfStringId GetPropagationModelType() const
Return the type of the propagation model (if one is defined).
Definition WsfEM_XmtrRcvr.hpp:83
void SetAntenna(WsfEM_Antenna *aAntennaPtr)
Definition WsfEM_XmtrRcvr.hpp:99
WsfEM_Propagation * mPropagationPtr
Pointer to the propagation object.
Definition WsfEM_XmtrRcvr.hpp:271
const char * GetScriptClassName() const override
Definition WsfEM_XmtrRcvr.hpp:61
WsfEM_Attenuation * GetAttenuationModel() const
Definition WsfEM_XmtrRcvr.hpp:65
void SetCheckMasking(bool aCheckMasking)
enable/disable checking of horizon and terrain masking
Definition WsfEM_XmtrRcvr.hpp:169
void SetBeamTilt(double aBeamTilt)
Set the angle of the boresight of the antenna gain pattern above/below (+/-) the antenna boresight.
Definition WsfEM_XmtrRcvr.hpp:114
void SetMode(WsfMode *aModePtr)
Definition WsfEM_XmtrRcvr.hpp:192
void SetDebugEnabled(bool aDebugEnabled)
Definition WsfEM_XmtrRcvr.hpp:147
double GetBandwidth() const
Definition WsfEM_XmtrRcvr.hpp:218
WsfEM_Types::Polarization GetPolarization() const
Get the polarization of the EM system.
Definition WsfEM_XmtrRcvr.hpp:230
virtual void UpdatePosition(double aSimTime)
Definition WsfEM_XmtrRcvr.cpp:455
unsigned int mTerrainMaskingMode
Settings used for masking checks.
Definition WsfEM_XmtrRcvr.hpp:310
WsfStringId mAttenuationType
The type of the atmospheric attenuation model to be used.
Definition WsfEM_XmtrRcvr.hpp:262
WsfStringId mPropagationType
The type of the propagation model to be used.
Definition WsfEM_XmtrRcvr.hpp:265
bool IsBandwidthExplicit() const
Definition WsfEM_XmtrRcvr.hpp:222
void SetInternalLoss(double aInternalLoss)
Definition WsfEM_XmtrRcvr.hpp:244
bool mExplicitBandwidth
true if explicit 'bandwidth' specified
Definition WsfEM_XmtrRcvr.hpp:312
WsfEM_XmtrRcvr * mAssociatePtr
Definition WsfEM_XmtrRcvr.hpp:288
bool mCheckMasking
true if horizon and terrain masking enabled.
Definition WsfEM_XmtrRcvr.hpp:311
virtual bool Initialize(WsfSimulation &aSimulation)
Definition WsfEM_XmtrRcvr.cpp:144
double GetBeamTilt() const
Definition WsfEM_XmtrRcvr.hpp:111
size_t mIndex
Definition WsfEM_XmtrRcvr.hpp:302
void SetEarthRadiusMultiplier(double aMultiplier)
Definition WsfEM_XmtrRcvr.hpp:235
double mBandwidth
Definition WsfEM_XmtrRcvr.hpp:296
double mInternalLoss
Definition WsfEM_XmtrRcvr.hpp:297
virtual WSF_DEPRECATED double GetAzimuthBeamwidth() const final
Definition WsfEM_XmtrRcvr.hpp:123
double mBeamTilt
Definition WsfEM_XmtrRcvr.hpp:292
bool DebugEnabled() const
Determine if debugging is enabled.
Definition WsfEM_XmtrRcvr.hpp:143
std::array< AntennaPatternList, WsfEM_Types::cPOL_COUNT > mPatternTables
Definition WsfEM_XmtrRcvr.hpp:283
void SetPropagationModelType(WsfStringId aPropagationType)
Definition WsfEM_XmtrRcvr.hpp:87
WsfEM_Antenna * GetAntenna() const
Get the pointer associated geometry object.
Definition WsfEM_XmtrRcvr.hpp:93
double GetInternalLoss() const
Definition WsfEM_XmtrRcvr.hpp:227
WsfStringId GetAttenuationModelType() const
Return the type of the attenuation model (if one is defined).
Definition WsfEM_XmtrRcvr.hpp:70
Definition WsfMode.hpp:32
Definition WsfPlatformPart.hpp:61
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
The main controller for a simulation.
Definition WsfSimulation.hpp:109
WsfUniqueId()
Construtor initializes the unique identifier to 0.
Definition WsfUniqueId.hpp:38
Polarization
Polarization of the electromagnetic wave.
Definition WsfEM_Types.hpp:21
Copyrights Multiple, All Rights Reserved