OrbitDataKepler_T.cpp
Go to the documentation of this file.
1 //==============================================================================
2 //
3 // This file is part of GNSSTk, the ARL:UT GNSS Toolkit.
4 //
5 // The GNSSTk is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published
7 // by the Free Software Foundation; either version 3.0 of the License, or
8 // any later version.
9 //
10 // The GNSSTk is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with GNSSTk; if not, write to the Free Software Foundation,
17 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 // This software was developed by Applied Research Laboratories at the
20 // University of Texas at Austin.
21 // Copyright 2004-2022, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 
26 //==============================================================================
27 //
28 // This software was developed by Applied Research Laboratories at the
29 // University of Texas at Austin, under contract to an agency or agencies
30 // within the U.S. Department of Defense. The U.S. Government retains all
31 // rights to use, duplicate, distribute, disclose, or release this software.
32 //
33 // Pursuant to DoD Directive 523024
34 //
35 // DISTRIBUTION STATEMENT A: This software has been approved for public
36 // release, distribution is unlimited.
37 //
38 //==============================================================================
39 #include "OrbitDataKepler.hpp"
40 #include "TestUtil.hpp"
41 #include "GPSWeekSecond.hpp"
42 #include "GPSEllipsoid.hpp"
43 #include "CivilTime.hpp"
44 #include <iomanip>
45 
46 namespace gnsstk
47 {
48  std::ostream& operator<<(std::ostream& s, SVHealth h)
49  {
50  s << StringUtils::asString(h);
51  return s;
52  }
53 }
54 
57 {
58 public:
59  bool validate() const override
60  { return true; }
63  gnsstk::NavDataPtr clone() const override
64  { return std::make_shared<TestClass>(*this); }
65  bool getXvt(const gnsstk::CommonTime& when, gnsstk::Xvt& xvt,
66  const gnsstk::ObsID& oid = gnsstk::ObsID()) override
67  { GNSSTK_THROW(gnsstk::Exception("Not implemented")); }
68  double svRelativity(const gnsstk::CommonTime& when) const override
69  { GNSSTK_THROW(gnsstk::Exception("Not implemented")); }
70  bool getXvt(const gnsstk::CommonTime& when,
71  const gnsstk::EllipsoidModel& ell, gnsstk::Xvt& xvt,
72  const gnsstk::ObsID& oid = gnsstk::ObsID())
73  { return OrbitDataKepler::getXvt(when,ell,xvt,oid); }
74 };
75 
76 
78 {
79 public:
81 
82  unsigned constructorTest();
83  unsigned getXvtTest();
84  unsigned svClockBiasTest();
85  unsigned svClockDriftTest();
86  unsigned isSameDataTest();
87 
89  void fillTestClass(TestClass& uut);
90 
93 };
94 
95 
98  : civ(2015,7,19,2,0,0.0,gnsstk::TimeSystem::GPS),
99  ct(civ)
100 {
101 }
102 
103 
104 unsigned OrbitDataKepler_T ::
106 {
107  TUDEF("OrbitDataKepler", "OrbitDataKepler");
108  TestClass uut;
110  uut.xmitTime);
112  uut.Toe);
114  uut.Toc);
116  uut.beginFit);
118  uut.endFit);
120  TUASSERTFE(0.0, uut.Cuc);
121  TUASSERTFE(0.0, uut.Cus);
122  TUASSERTFE(0.0, uut.Crc);
123  TUASSERTFE(0.0, uut.Crs);
124  TUASSERTFE(0.0, uut.Cic);
125  TUASSERTFE(0.0, uut.Cis);
126  TUASSERTFE(0.0, uut.M0);
127  TUASSERTFE(0.0, uut.dn);
128  TUASSERTFE(0.0, uut.dndot);
129  TUASSERTFE(0.0, uut.ecc);
130  TUASSERTFE(0.0, uut.A);
131  TUASSERTFE(0.0, uut.Ahalf);
132  TUASSERTFE(0.0, uut.Adot);
133  TUASSERTFE(0.0, uut.OMEGA0);
134  TUASSERTFE(0.0, uut.i0);
135  TUASSERTFE(0.0, uut.w);
136  TUASSERTFE(0.0, uut.OMEGAdot);
137  TUASSERTFE(0.0, uut.idot);
138  TUASSERTFE(0.0, uut.af0);
139  TUASSERTFE(0.0, uut.af1);
140  TUASSERTFE(0.0, uut.af2);
141  TURETURN();
142 }
143 
144 
145 unsigned OrbitDataKepler_T ::
147 {
148  TUDEF("OrbitDataKepler", "getXvt");
149  TestClass uut;
150  gnsstk::Xvt xvt;
152  fillTestClass(uut);
153  TUASSERT(uut.getXvt(ct+35, ell, xvt));
154  // TUASSERTE is not good for this check as we're testing a bunch
155  // of floating point numbers, so we use TUSSERTFE instead for
156  // each field.
157  // @note These were checked against results provided by wheresat
158  // while it was still using OrbElemStore.
159  TUASSERTFE( 9345531.5274733770639, xvt.x[0]);
160  TUASSERTFE(-12408177.088141856715, xvt.x[1]);
161  TUASSERTFE( 21486320.848036296666, xvt.x[2]);
162  TUASSERTFE(2081.276961058104007, xvt.v[0]);
163  TUASSERTFE(1792.4445008638492709, xvt.v[1]);
164  TUASSERTFE( 148.29209115082824155, xvt.v[2]);
165  TUASSERTFE(-0.00021641018042870913346, xvt.clkbias);
166  TUASSERTFE(4.3200998334200003381e-12, xvt.clkdrift);
167  TUASSERTFE(-8.8197758101551758427e-09, xvt.relcorr);
169  TURETURN();
170 }
171 
172 
173 unsigned OrbitDataKepler_T ::
175 {
176  TUDEF("OrbitDataKepler", "svClockBias");
177  TestClass uut;
178  fillTestClass(uut);
179  TUASSERTFE(-0.00021641018042870913346, uut.svClockBias(ct+35));
180  TURETURN();
181 }
182 
183 
184 unsigned OrbitDataKepler_T ::
186 {
187  TUDEF("OrbitDataKepler", "svClockDrift");
188  TestClass uut;
189  fillTestClass(uut);
190  TUASSERTFE(4.3200998334200003381e-12, uut.svClockDrift(ct+35));
191  TURETURN();
192 }
193 
194 
197 {
198  uut.xmitTime = gnsstk::GPSWeekSecond(1854, .720000000000e+04);
199  uut.Toe = gnsstk::GPSWeekSecond(1854, .143840000000e+05);
200  uut.Toc = gnsstk::CivilTime(2015,7,19,3,59,44.0,gnsstk::TimeSystem::GPS);
201  uut.health = gnsstk::SVHealth::Healthy;
202  uut.Cuc = .200793147087e-05;
203  uut.Cus = .823289155960e-05;
204  uut.Crc = .214593750000e+03;
205  uut.Crs = .369375000000e+02;
206  uut.Cic = -.175088644028e-06;
207  uut.Cis = .335276126862e-07;
208  uut.M0 = .218771233916e+01;
209  uut.dn = .511592738462e-08;
210  // dndot
211  uut.ecc = .422249664553e-02;
212  uut.Ahalf =.515360180473e+04;
213  uut.A = uut.Ahalf * uut.Ahalf;
214  // Adot
215  uut.OMEGA0 = -.189462874179e+01;
216  uut.i0 = .946122987969e+00;
217  uut.w = .374892043461e+00;
218  uut.OMEGAdot = -.823034282681e-08;
219  uut.idot = .492877673191e-09;
220  uut.af0 = -.216379296035e-03;
221  uut.af1 = .432009983342e-11;
222  uut.af2 = .000000000000e+00;
223  //uut.iode = .190000000000e+02;
224  // uut.codes = .100000000000e+01
225  //uut.week = .185400000000e+04
226  //uut.l2p = .000000000000e+00
227  //uut.accuracy = .240000000000e+01
228  //uut.tgd = -.107102096081e-07
229  //uut.iodc = .190000000000e+02
230  //uut.fitint = .400000000000e+01;
231 }
232 
233 
234 unsigned OrbitDataKepler_T ::
236 {
237  TUDEF("OrbitDataKepler", "isSameData");
238  std::shared_ptr<TestClass>
239  uut1 = std::make_shared<TestClass>(),
240  uut2 = std::make_shared<TestClass>(),
241  uut3 = std::make_shared<TestClass>();
242  // make sure all initialized data are comparable
243  TUASSERTE(bool, true, uut1->isSameData(uut2));
244  uut3->Cuc = 1;
245  TUASSERTE(bool, false, uut1->isSameData(uut3));
246  TURETURN();
247 }
248 
249 
250 int main()
251 {
252  OrbitDataKepler_T testClass;
253  unsigned errorTotal = 0;
254 
255  errorTotal += testClass.constructorTest();
256  errorTotal += testClass.getXvtTest();
257  errorTotal += testClass.svClockBiasTest();
258  errorTotal += testClass.svClockDriftTest();
259  errorTotal += testClass.isSameDataTest();
260 
261  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
262  << std::endl;
263 
264  return errorTotal;
265 }
266 
gnsstk::NavDataPtr
std::shared_ptr< NavData > NavDataPtr
Factories instantiate these in response to find() requests.
Definition: NavData.hpp:62
TestClass::getUserTime
gnsstk::CommonTime getUserTime() const override
Definition: OrbitDataKepler_T.cpp:61
OrbitDataKepler_T::svClockDriftTest
unsigned svClockDriftTest()
Definition: OrbitDataKepler_T.cpp:185
OrbitDataKepler_T::getXvtTest
unsigned getXvtTest()
Definition: OrbitDataKepler_T.cpp:146
gnsstk::Xvt::Healthy
@ Healthy
Satellite is healthy, PVT valid.
Definition: Xvt.hpp:96
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
OrbitDataKepler_T::ct
gnsstk::CommonTime ct
Definition: OrbitDataKepler_T.cpp:92
TestClass::getXvt
bool getXvt(const gnsstk::CommonTime &t, gnsstk::Xvt &xvt, const gnsstk::ObsID &oid=gnsstk::ObsID()) override
Definition: GLOFNavData_T.cpp:63
OrbitDataKepler.hpp
example5.oid
oid
Definition: example5.py:29
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
gnsstk::GPSEllipsoid
Definition: GPSEllipsoid.hpp:67
TestClass::clone
gnsstk::NavDataPtr clone() const override
Definition: OrbitDataKepler_T.cpp:63
OrbitDataKepler_T
Definition: OrbitDataKepler_T.cpp:77
gnsstk::CommonTime::BEGINNING_OF_TIME
static const GNSSTK_EXPORT CommonTime BEGINNING_OF_TIME
earliest representable CommonTime
Definition: CommonTime.hpp:102
gnsstk::Xvt::v
Triple v
satellite velocity in ECEF Cartesian, meters/second
Definition: Xvt.hpp:152
gnsstk::SVHealth
SVHealth
Identify different types of SV health states.
Definition: SVHealth.hpp:52
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::Xvt::relcorr
double relcorr
relativity correction (standard 2R.V/c^2 term), seconds
Definition: Xvt.hpp:155
gnsstk::GPSWeekSecond
Definition: GPSWeekSecond.hpp:56
OrbitDataKepler_T::OrbitDataKepler_T
OrbitDataKepler_T()
Definition: OrbitDataKepler_T.cpp:97
gnsstk::Exception
Definition: Exception.hpp:151
TestClass::validate
bool validate() const override
Definition: OrbitDataKepler_T.cpp:59
gnsstk::Xvt::x
Triple x
Sat position ECEF Cartesian (X,Y,Z) meters.
Definition: Xvt.hpp:151
TUASSERT
#define TUASSERT(EXPR)
Definition: TestUtil.hpp:63
gnsstk::SVHealth::Unknown
@ Unknown
Health is not known or is uninitialized.
TestUtil.hpp
gnsstk::SVHealth::Healthy
@ Healthy
Satellite is in a healthy and useable state.
TestClass::getXvt
bool getXvt(const gnsstk::CommonTime &when, const gnsstk::EllipsoidModel &ell, gnsstk::Xvt &xvt, const gnsstk::ObsID &oid=gnsstk::ObsID())
Definition: OrbitDataKepler_T.cpp:70
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
TestClass::svRelativity
double svRelativity(const gnsstk::CommonTime &when) const override
Definition: OrbitDataKepler_T.cpp:68
gnsstk::ObsID
Definition: ObsID.hpp:82
gnsstk::operator<<
std::ostream & operator<<(std::ostream &s, const ObsEpoch &oe) noexcept
Definition: ObsEpochMap.cpp:54
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::Xvt::clkdrift
double clkdrift
satellite clock drift in seconds/second
Definition: Xvt.hpp:154
gnsstk::TimeSystem
TimeSystem
Definition of various time systems.
Definition: TimeSystem.hpp:51
gnsstk::Xvt
Definition: Xvt.hpp:60
CivilTime.hpp
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
GPSEllipsoid.hpp
OrbitDataKepler_T::isSameDataTest
unsigned isSameDataTest()
Definition: OrbitDataKepler_T.cpp:235
gnsstk::Xvt::HealthStatus
HealthStatus
Definition: Xvt.hpp:87
gnsstk::Xvt::health
HealthStatus health
Health status of satellite at ref time.
Definition: Xvt.hpp:157
gnsstk::CivilTime
Definition: CivilTime.hpp:55
OrbitDataKepler_T::constructorTest
unsigned constructorTest()
Definition: OrbitDataKepler_T.cpp:105
GPSWeekSecond.hpp
gnsstk::TimeSystem::GPS
@ GPS
GPS system time.
gnsstk::OrbitDataKepler
Base class for orbit information that uses Keplerian parameters.
Definition: OrbitDataKepler.hpp:52
TestClass::getXvt
bool getXvt(const gnsstk::CommonTime &when, gnsstk::Xvt &xvt, const gnsstk::ObsID &oid=gnsstk::ObsID()) override
Definition: OrbitDataKepler_T.cpp:65
TestClass
Make GroupPathCorrector instantiatable for testing.
Definition: GroupPathCorrector_T.cpp:56
OrbitDataKepler_T::fillTestClass
void fillTestClass(TestClass &uut)
Set the fields in TestClass/OrbitDataKepler for testing.
Definition: OrbitDataKepler_T.cpp:196
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
GNSSTK_THROW
#define GNSSTK_THROW(exc)
Definition: Exception.hpp:366
gnsstk::Xvt::clkbias
double clkbias
Sat clock correction in seconds.
Definition: Xvt.hpp:153
gnsstk::EllipsoidModel
Definition: EllipsoidModel.hpp:56
OrbitDataKepler_T::civ
gnsstk::CivilTime civ
Definition: OrbitDataKepler_T.cpp:91
OrbitDataKepler_T::svClockBiasTest
unsigned svClockBiasTest()
Definition: OrbitDataKepler_T.cpp:174
main
int main()
Definition: OrbitDataKepler_T.cpp:250


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:40