WSF
WsfALARM_AntennaPattern.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 WSFALARM_ANTENNAPATTERN_HPP
13#define WSFALARM_ANTENNAPATTERN_HPP
14
15#include <iosfwd>
16#include <map>
17#include <string>
18#include <vector>
19
20#include "WsfAntennaPattern.hpp"
21#include "WsfEM_Types.hpp"
22class WsfScenario;
23
44{
45public:
57
60 {
61 public:
63 {
65 : mPeakGain()
68 , mAzBeamwidth(0.0)
69 , mElBeamwidth(0.0)
70 , mAzAngles()
71 , mAzGains()
72 , mAzMin(0.0)
73 , mAzMax(0.0)
74 , mElAngles()
75 , mElGains()
76 , mElMin(0.0)
77 , mElMax(0.0)
78 {
79 }
80
81
82 double mPeakGain;
87
88 std::vector<double> mAzAngles;
89 std::vector<double> mAzGains;
90 double mAzMin;
91 double mAzMax;
92
93 std::vector<double> mElAngles;
94 std::vector<double> mElGains;
95 double mElMin;
96 double mElMax;
97 };
98 using PatternMap = std::map<WsfEM_Types::Polarization, PatternData>;
99
100 ALARM_Data();
101 ~ALARM_Data() override = default;
102 ;
103
104 bool ProcessInput(WsfAntennaPattern& aPattern, UtInput& aInput) override;
105 bool Initialize(WsfAntennaPattern& aAntennaPattern) override;
106
107 double GetGain(double aFrequency, double aTargetAz, double aTargetEl, double aEBS_Az, double aEBS_El) override;
108
109 virtual void ReadPattern(WsfScenario& aScenario, const std::string& aFileName);
110
111 bool InitializeBase();
112
113 std::string mFileName;
114
116
117 double mMinGain;
118
120 std::vector<WsfEM_Types::Polarization> mPolarizations;
121
123
125
127
128 std::string mTitle;
129 std::string mClassification;
131
134
135 protected:
136 std::vector<double>::size_type GetIndex(const std::vector<double>& aTable, double aValue) const;
137
138 double GetCircularApertureGain(double aAzLook, double aElLook);
139 double GetEllipticalApertureGain(double aAzLook, double aElLook);
140 double GetRectangularApertureGain(double aAzLook, double aElLook);
141
142 private:
143 void ConvertValue(const std::string& aString, double& aValue) const;
144 void ConvertValue(const std::string& aString, int& aValue) const;
145
146 void ParseLine(const std::string& aLine, std::vector<std::string>& aWords) const;
147 void Read2D_File(std::istream& aIn, WsfEM_Types::Polarization aPolarization);
148 void ReadLine(std::istream& aIn, std::string& aLine);
149 };
150
151 WsfALARM_AntennaPattern(ALARM_Data* aBaseDataPtr);
152
153 static WsfAntennaPattern* ObjectFactory(const std::string& aTypeName);
154
155 WsfAntennaPattern* Clone() const override;
156
157 double GetAzimuthBeamwidth(double aFrequency, double aEBS_Azimuth, double aEBS_Elevation) const override;
158 double GetElevationBeamwidth(double aFrequency, double aEBS_Azimuth, double aEBS_Elevation) const override;
159 double GetPeakGain(double aFrequency) const override;
160
161 using Table = std::vector<double>;
162 using TableIndex = std::vector<double>::size_type;
163
168
169 virtual const std::vector<double>& GetAzAngles() const
170 {
171 return AlarmData()->mPatternMap[AlarmData()->mSetPolarization].mAzAngles;
172 }
173 virtual const std::vector<double>& GetAzGains() const
174 {
175 return AlarmData()->mPatternMap[AlarmData()->mSetPolarization].mAzGains;
176 }
177 virtual const std::vector<double>& GetElAngles() const
178 {
179 return AlarmData()->mPatternMap[AlarmData()->mSetPolarization].mElAngles;
180 }
181 virtual const std::vector<double>& GetElGains() const
182 {
183 return AlarmData()->mPatternMap[AlarmData()->mSetPolarization].mElGains;
184 }
186 virtual double GetMinGain() const { return AlarmData()->mMinGain; }
187 virtual double GetGainCorrection() const { return AlarmData()->mGainCorrection; }
188 virtual double GetInputAzimuthBeamwidth() const
189 {
190 return AlarmData()->mPatternMap[AlarmData()->mSetPolarization].mInputAzBeamwidth;
191 }
192 virtual double GetInputElevationBeamwidth() const
193 {
194 return AlarmData()->mPatternMap[AlarmData()->mSetPolarization].mInputElBeamwidth;
195 }
196
198
199protected:
200 ALARM_Data* AlarmData() const { return dynamic_cast<ALARM_Data*>(mSharedDataPtr); }
201
204};
205
206#endif
Data that is shared amongst all instances of a given ALARM antenna pattern.
Definition WsfALARM_AntennaPattern.hpp:60
double mOneMinusE_2
Definition WsfALARM_AntennaPattern.hpp:124
std::vector< double >::size_type GetIndex(const std::vector< double > &aTable, double aValue) const
Definition WsfALARM_AntennaPattern.cpp:435
std::string mFileName
Definition WsfALARM_AntennaPattern.hpp:113
double GetGain(double aFrequency, double aTargetAz, double aTargetEl, double aEBS_Az, double aEBS_El) override
Definition WsfALARM_AntennaPattern.cpp:142
virtual void ReadPattern(WsfScenario &aScenario, const std::string &aFileName)
Definition WsfALARM_AntennaPattern.cpp:281
bool mInputIsDB
Definition WsfALARM_AntennaPattern.hpp:133
PatternMap mPatternMap
vector of ordered polarizations read in
Definition WsfALARM_AntennaPattern.hpp:122
double GetCircularApertureGain(double aAzLook, double aElLook)
Definition WsfALARM_AntennaPattern.cpp:465
ApertureShape mApertureShape
Definition WsfALARM_AntennaPattern.hpp:115
bool Initialize(WsfAntennaPattern &aAntennaPattern) override
Definition WsfALARM_AntennaPattern.cpp:131
double GetRectangularApertureGain(double aAzLook, double aElLook)
Definition WsfALARM_AntennaPattern.cpp:609
bool mInputIs2D
Definition WsfALARM_AntennaPattern.hpp:132
double mGainCorrection
For elliptical aperture, the value (1 -e^2).
Definition WsfALARM_AntennaPattern.hpp:126
ALARM_Data()
Definition WsfALARM_AntennaPattern.cpp:74
std::vector< WsfEM_Types::Polarization > mPolarizations
Set polarization for this pattern set by user.
Definition WsfALARM_AntennaPattern.hpp:120
std::string mClassification
Definition WsfALARM_AntennaPattern.hpp:129
double GetEllipticalApertureGain(double aAzLook, double aElLook)
Definition WsfALARM_AntennaPattern.cpp:489
std::string mTitle
Definition WsfALARM_AntennaPattern.hpp:128
std::map< WsfEM_Types::Polarization, PatternData > PatternMap
Definition WsfALARM_AntennaPattern.hpp:98
bool ProcessInput(WsfAntennaPattern &aPattern, UtInput &aInput) override
Definition WsfALARM_AntennaPattern.cpp:90
WsfEM_Types::Polarization mSetPolarization
Definition WsfALARM_AntennaPattern.hpp:119
double mWavelength
Definition WsfALARM_AntennaPattern.hpp:130
bool InitializeBase()
Perform common initialization for derived classes.
Definition WsfALARM_AntennaPattern.cpp:210
double mMinGain
Definition WsfALARM_AntennaPattern.hpp:117
static WsfAntennaPattern * ObjectFactory(const std::string &aTypeName)
Definition WsfALARM_AntennaPattern.cpp:37
virtual const std::vector< double > & GetElAngles() const
Definition WsfALARM_AntennaPattern.hpp:177
virtual ApertureShape GetApertureShape() const
Definition WsfALARM_AntennaPattern.hpp:185
virtual const std::vector< double > & GetElGains() const
Definition WsfALARM_AntennaPattern.hpp:181
ApertureShape
Definition WsfALARM_AntennaPattern.hpp:50
@ cAS_CIRCULAR
Definition WsfALARM_AntennaPattern.hpp:52
@ cAS_UNKNOWN
Definition WsfALARM_AntennaPattern.hpp:51
@ cAS_RECTANGULAR
Definition WsfALARM_AntennaPattern.hpp:54
@ cAS_ELLIPTICAL
Definition WsfALARM_AntennaPattern.hpp:53
@ cAS_SQUARE
Definition WsfALARM_AntennaPattern.hpp:55
WsfALARM_AntennaPattern(ALARM_Data *aBaseDataPtr)
Definition WsfALARM_AntennaPattern.cpp:27
WsfAntennaPattern * Clone() const override
Definition WsfALARM_AntennaPattern.cpp:48
virtual const std::vector< double > & GetAzGains() const
Definition WsfALARM_AntennaPattern.hpp:173
std::vector< double > Table
Definition WsfALARM_AntennaPattern.hpp:161
ALARM_Data * AlarmData() const
Definition WsfALARM_AntennaPattern.hpp:200
double GetPeakGain(double aFrequency) const override
Definition WsfALARM_AntennaPattern.cpp:66
virtual double GetInputElevationBeamwidth() const
Definition WsfALARM_AntennaPattern.hpp:192
std::vector< double >::size_type TableIndex
Definition WsfALARM_AntennaPattern.hpp:162
virtual double GetInputAzimuthBeamwidth() const
Definition WsfALARM_AntennaPattern.hpp:188
double GetAzimuthBeamwidth(double aFrequency, double aEBS_Azimuth, double aEBS_Elevation) const override
Definition WsfALARM_AntennaPattern.cpp:54
virtual double GetMinGain() const
Definition WsfALARM_AntennaPattern.hpp:186
WsfALARM_AntennaPattern(const WsfALARM_AntennaPattern &aSrc)=default
virtual const std::vector< double > & GetAzAngles() const
Definition WsfALARM_AntennaPattern.hpp:169
WsfALARM_AntennaPattern operator=(const WsfALARM_AntennaPattern &aRhs) const =delete
virtual double GetGainCorrection() const
Definition WsfALARM_AntennaPattern.hpp:187
double GetElevationBeamwidth(double aFrequency, double aEBS_Azimuth, double aEBS_Elevation) const override
Definition WsfALARM_AntennaPattern.cpp:60
Definition WsfAntennaPattern.hpp:47
BaseData * mSharedDataPtr
Definition WsfAntennaPattern.hpp:123
WsfAntennaPattern()
Definition WsfAntennaPattern.cpp:25
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Polarization
Polarization of the electromagnetic wave.
Definition WsfEM_Types.hpp:21
double mAzBeamwidth
Definition WsfALARM_AntennaPattern.hpp:85
double mInputAzBeamwidth
Definition WsfALARM_AntennaPattern.hpp:83
std::vector< double > mElAngles
Definition WsfALARM_AntennaPattern.hpp:93
std::vector< double > mAzGains
Definition WsfALARM_AntennaPattern.hpp:89
PatternData()
Definition WsfALARM_AntennaPattern.hpp:64
double mAzMin
The value of mAzAngles[0].
Definition WsfALARM_AntennaPattern.hpp:90
double mInputElBeamwidth
Definition WsfALARM_AntennaPattern.hpp:84
double mElBeamwidth
Definition WsfALARM_AntennaPattern.hpp:86
double mPeakGain
Definition WsfALARM_AntennaPattern.hpp:82
double mAzMax
The value of mAzAngles[last].
Definition WsfALARM_AntennaPattern.hpp:91
std::vector< double > mAzAngles
Definition WsfALARM_AntennaPattern.hpp:88
double mElMin
The value of mElAngles[0].
Definition WsfALARM_AntennaPattern.hpp:95
double mElMax
The value of mElAngles[last].
Definition WsfALARM_AntennaPattern.hpp:96
std::vector< double > mElGains
Definition WsfALARM_AntennaPattern.hpp:94
Copyrights Multiple, All Rights Reserved