TransformLibrary_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 // This software was developed by Applied Research Laboratories at the
28 // University of Texas at Austin, under contract to an agency or agencies
29 // within the U.S. Department of Defense. The U.S. Government retains all
30 // rights to use, duplicate, distribute, disclose, or release this software.
31 //
32 // Pursuant to DoD Directive 523024
33 //
34 // DISTRIBUTION STATEMENT A: This software has been approved for public
35 // release, distribution is unlimited.
36 //
37 //==============================================================================
38 
39 #include "TestUtil.hpp"
40 #include "TransformLibrary.hpp"
41 #include "HelmertTransformer.hpp"
42 #include "YDSTime.hpp"
43 #include "TimeString.hpp"
44 
45 namespace gnsstk
46 {
47  std::ostream& operator<<(std::ostream& s, const Transformer& t)
48  {
49  s << "Transformer " << StringUtils::asString(t.getFromFrame()) << " -> "
50  << StringUtils::asString(t.getToFrame()) << " : "
51  << printTime(t.getEpoch(), "%Y/%03j/%05s") << std::endl;
52  return s;
53  }
54 }
55 
56 
59 {
60 public:
62  {
63  fromFrame = gnsstk::RefFrame(fromRlz);
64  toFrame = gnsstk::RefFrame(toRlz);
65  }
67  const gnsstk::CommonTime& start)
68  {
69  fromFrame = gnsstk::RefFrame(fromRlz);
70  toFrame = gnsstk::RefFrame(toRlz);
71  epoch = start;
72  }
73  bool transform(const gnsstk::Position& fromPos, gnsstk::Position& toPos)
74  const noexcept override
75  { return false; }
76  bool transform(const gnsstk::Xvt& fromPos, gnsstk::Xvt& toPos)
77  const noexcept override
78  { return false; }
79  bool transform(const gnsstk::Vector<double>& fromPos,
80  const gnsstk::RefFrame& srcFrame,
82  const noexcept override
83  { return false; }
84  bool transform(const gnsstk::Triple& fromPos,
85  const gnsstk::RefFrame& srcFrame,
86  gnsstk::Triple& toPos)
87  const noexcept override
88  { return false; }
89  bool transform(double fx, double fy, double fz,
90  const gnsstk::RefFrame& srcFrame,
91  double& tx, double& ty, double& tz)
92  const noexcept override
93  { return false; }
94 };
95 
97 {
98 public:
100  unsigned constructorTest();
101  unsigned getTransformTest();
102  unsigned transformPositionTest();
103  unsigned transformVectorTest();
104  unsigned transformTripleTest();
105  unsigned transformXvtTest();
106  unsigned transformdoubleTest();
107 
111  std::shared_ptr<gnsstk::HelmertTransformer> xf1;
113  std::vector<double> p1, x1;
114 };
115 
116 
119  : refTime1(2020,123,456,gnsstk::TimeSystem::UTC),
120  initialRF(gnsstk::RefFrameSys::WGS84, refTime1),
121  finalRF(gnsstk::RefFrameSys::CGCS2000, refTime1),
122  p1({150, 150, 150}),
123  x1({310, 310, 310}), // 100% scale, 10m translation
124  xf1(std::make_shared<gnsstk::HelmertTransformer>(
125  initialRF, finalRF, 0, 0, 0, 10, 10, 10, 1, "hi there",
126  refTime1))
127 {
128 }
129 
130 
131 unsigned TransformLibrary_T ::
133 {
134  TUDEF("TransformLibrary", "TransformLibrary");
136  TUASSERTE(bool, false, uut.transformers.empty());
137  TURETURN();
138 }
139 
140 
141 unsigned TransformLibrary_T ::
143 {
144  TUDEF("TransformLibrary", "getTransform");
146  gnsstk::TransformerPtr optimus;
148  uut.transformers.clear();
149  TUCATCH(uut.addTransform(std::make_shared<FakeTransformer>(
152  TUCATCH(uut.addTransform(std::make_shared<FakeTransformer>(
155  TUCATCH(uut.addTransform(std::make_shared<FakeTransformer>(
158  gnsstk::YDSTime(2020,5,0,ts))));
159  TUCATCH(uut.addTransform(std::make_shared<FakeTransformer>(
162  gnsstk::YDSTime(2020,15,0,ts))));
163  TUCATCH(uut.addTransform(std::make_shared<FakeTransformer>(
166  gnsstk::YDSTime(2020,95,0,ts))));
167  // forward transformation search test
168  TUASSERTE(bool, true,
171  optimus));
174  optimus->getFromFrame());
177  optimus->getToFrame());
178  // transformation unavailable test
179  TUASSERTE(bool, false,
182  optimus));
183  // reverse transformation search test
184  TUASSERTE(bool, true,
187  optimus));
190  optimus->getFromFrame());
193  optimus->getToFrame());
194  // time history search test (too early)
195  TUASSERTE(bool, false,
198  optimus,
199  gnsstk::YDSTime(1,1,0,ts)));
200  // time history search test (spot on)
201  TUASSERTE(bool, true,
204  optimus,
205  gnsstk::YDSTime(2020,5,0,ts)));
208  optimus->getFromFrame());
211  optimus->getToFrame());
213  optimus->getEpoch());
214  // time history search test (in between)
215  TUASSERTE(bool, true,
218  optimus,
219  gnsstk::YDSTime(2020,7,0,ts)));
222  optimus->getFromFrame());
225  optimus->getToFrame());
227  optimus->getEpoch());
228  // time history search test (late)
229  TUASSERTE(bool, true,
232  optimus,
233  gnsstk::YDSTime(2029,1,0,ts)));
236  optimus->getFromFrame());
239  optimus->getToFrame());
241  optimus->getEpoch());
242  TURETURN();
243 }
244 
245 
246 unsigned TransformLibrary_T ::
248 {
249  TUDEF("TransformLibrary", "transform(Position)");
251  uut.transformers.clear();
252  TUCATCH(uut.addTransform(xf1));
254  initialRF);
256  finalRF);
257  gnsstk::Position out1;
259  TUASSERTE(bool, true, uut.transform(pos1, out1, refTime1));
260  TUASSERTFE(exp1.getX(), out1.getX());
261  TUASSERTFE(exp1.getY(), out1.getY());
262  TUASSERTFE(exp1.getZ(), out1.getZ());
263 
264  TURETURN();
265 }
266 
267 unsigned TransformLibrary_T ::
269 {
270  TUDEF("TransformLibrary", "transform(Vector)");
272  uut.transformers.clear();
273  TUCATCH(uut.addTransform(xf1));
274  gnsstk::Vector<double> pos1({p1[0], p1[1], p1[2]});
275  gnsstk::Vector<double> exp1({x1[0], x1[1], x1[2]});
277  TUASSERTE(bool, true, uut.transform(pos1,initialRF,out1,finalRF,refTime1));
278  TUASSERTFE(exp1[0], out1[0]);
279  TUASSERTFE(exp1[1], out1[1]);
280  TUASSERTFE(exp1[2], out1[2]);
281  TURETURN();
282 }
283 
284 
285 unsigned TransformLibrary_T ::
287 {
288  TUDEF("TransformLibrary", "transform(Triple)");
290  uut.transformers.clear();
291  TUCATCH(uut.addTransform(xf1));
292  gnsstk::Triple pos1({p1[0], p1[1], p1[2]});
293  gnsstk::Triple exp1({x1[0], x1[1], x1[2]});
294  gnsstk::Triple out1;
295  TUASSERTE(bool, true, uut.transform(pos1,initialRF,out1,finalRF,refTime1));
296  TUASSERTFE(exp1[0], out1[0]);
297  TUASSERTFE(exp1[1], out1[1]);
298  TUASSERTFE(exp1[2], out1[2]);
299  TURETURN();
300 }
301 
302 
303 unsigned TransformLibrary_T ::
305 {
306  TUDEF("TransformLibrary", "transform(Xvt)");
308  uut.transformers.clear();
309  TUCATCH(uut.addTransform(xf1));
310  gnsstk::Xvt pos1, exp1, out1;
311  pos1.x = gnsstk::Triple({p1[0], p1[1], p1[2]});
312  pos1.v = gnsstk::Triple({1, 2, 3});
313  pos1.clkbias = 4;
314  pos1.clkdrift = 5;
315  pos1.relcorr = 6;
316  pos1.frame = initialRF;
318  out1.frame = finalRF;
319  exp1.x = gnsstk::Triple({x1[0], x1[1], x1[2]});
320  exp1.v = gnsstk::Triple({1, 2, 3});
321  exp1.clkbias = 4;
322  exp1.clkdrift = 5;
323  exp1.relcorr = 6;
324  exp1.frame = finalRF;
326  TUASSERTE(bool, true, uut.transform(pos1, out1));
327  TUASSERTFE(exp1.x[0], out1.x[0]);
328  TUASSERTFE(exp1.x[1], out1.x[1]);
329  TUASSERTFE(exp1.x[2], out1.x[2]);
330  TUASSERTFE(exp1.v[0], out1.v[0]);
331  TUASSERTFE(exp1.v[1], out1.v[1]);
332  TUASSERTFE(exp1.v[2], out1.v[2]);
333  TUASSERTFE(exp1.clkbias, out1.clkbias);
334  TUASSERTFE(exp1.clkdrift, out1.clkdrift);
335  TUASSERTFE(exp1.relcorr, out1.relcorr);
336  TUASSERTE(gnsstk::RefFrame, exp1.frame, out1.frame);
338  TURETURN();
339 }
340 
341 
342 unsigned TransformLibrary_T ::
344 {
345  TUDEF("TransformLibrary", "transform(double)");
347  uut.transformers.clear();
348  TUCATCH(uut.addTransform(xf1));
349  double out1x, out1y, out1z;
350  TUASSERTE(bool, true, uut.transform(p1[0], p1[1], p1[2], initialRF,
351  out1x, out1y, out1z, finalRF, refTime1));
352  TUASSERTFE(x1[0], out1x);
353  TUASSERTFE(x1[1], out1y);
354  TUASSERTFE(x1[2], out1z);
355  TURETURN();
356 }
357 
358 
359 int main()
360 {
361  TransformLibrary_T testClass;
362  unsigned errorTotal = 0;
363 
364  errorTotal += testClass.constructorTest();
365  errorTotal += testClass.getTransformTest();
366  errorTotal += testClass.transformPositionTest();
367  errorTotal += testClass.transformVectorTest();
368  errorTotal += testClass.transformTripleTest();
369  errorTotal += testClass.transformXvtTest();
370  errorTotal += testClass.transformdoubleTest();
371 
372  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
373  << std::endl;
374 
375  return errorTotal;
376 }
377 
gnsstk::TransformLibrary::transform
bool transform(const Position &fromPos, Position &toPos, const CommonTime &when=gnsstk::CommonTime::END_OF_TIME) const noexcept
Definition: TransformLibrary.cpp:169
YDSTime.hpp
TransformLibrary_T::refTime1
gnsstk::YDSTime refTime1
Definition: TransformLibrary_T.cpp:108
gnsstk::TransformLibrary::addTransform
void addTransform(const TransformerPtr &ptr)
Definition: TransformLibrary.cpp:133
gnsstk::Position::Cartesian
@ Cartesian
cartesian (Earth-centered, Earth-fixed)
Definition: Position.hpp:147
gnsstk::Transformer::getFromFrame
const RefFrame & getFromFrame() const noexcept
Return the RefFrame this Transformer will convert from.
Definition: Transformer.hpp:143
TUCATCH
#define TUCATCH(STATEMENT)
Definition: TestUtil.hpp:193
TransformLibrary_T::initialRF
gnsstk::RefFrame initialRF
Definition: TransformLibrary_T.cpp:109
gnsstk::RefFrameRlz::ITRF2020
@ ITRF2020
ITRF, 2020 version.
FakeTransformer::FakeTransformer
FakeTransformer(gnsstk::RefFrameRlz fromRlz, gnsstk::RefFrameRlz toRlz, const gnsstk::CommonTime &start)
Definition: TransformLibrary_T.cpp:66
FakeTransformer::FakeTransformer
FakeTransformer(gnsstk::RefFrameRlz fromRlz, gnsstk::RefFrameRlz toRlz)
Definition: TransformLibrary_T.cpp:61
gnsstk::Position::setReferenceFrame
void setReferenceFrame(const RefFrame &frame) noexcept
Definition: Position.cpp:467
gnsstk::YDSTime
Definition: YDSTime.hpp:58
FakeTransformer::transform
bool transform(const gnsstk::Position &fromPos, gnsstk::Position &toPos) const noexcept override
Definition: TransformLibrary_T.cpp:73
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
TransformLibrary_T::transformdoubleTest
unsigned transformdoubleTest()
Definition: TransformLibrary_T.cpp:343
gnsstk::Position::getZ
double getZ() const noexcept
return ECEF Z coordinate (meters)
Definition: Position.hpp:489
gnsstk::Xvt::frame
RefFrame frame
reference frame of this data
Definition: Xvt.hpp:156
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
gnsstk::RefFrameRlz
RefFrameRlz
Reference frame realizations. For general systems, see RefFrameSys.
Definition: RefFrameRlz.hpp:51
gnsstk::Xvt::v
Triple v
satellite velocity in ECEF Cartesian, meters/second
Definition: Xvt.hpp:152
FakeTransformer::transform
bool transform(double fx, double fy, double fz, const gnsstk::RefFrame &srcFrame, double &tx, double &ty, double &tz) const noexcept override
Definition: TransformLibrary_T.cpp:89
gnsstk::RefFrame
Definition: RefFrame.hpp:53
gnsstk::Triple
Definition: Triple.hpp:68
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
TransformLibrary_T
Definition: TransformLibrary_T.cpp:96
gnsstk::Xvt::relcorr
double relcorr
relativity correction (standard 2R.V/c^2 term), seconds
Definition: Xvt.hpp:155
gnsstk::Transformer::epoch
CommonTime epoch
When this Transformer was first applicable.
Definition: Transformer.hpp:159
gnsstk::Xvt::x
Triple x
Sat position ECEF Cartesian (X,Y,Z) meters.
Definition: Xvt.hpp:151
FakeTransformer::transform
bool transform(const gnsstk::Xvt &fromPos, gnsstk::Xvt &toPos) const noexcept override
Definition: TransformLibrary_T.cpp:76
TestUtil.hpp
main
int main()
Definition: TransformLibrary_T.cpp:359
TransformLibrary_T::getTransformTest
unsigned getTransformTest()
Definition: TransformLibrary_T.cpp:142
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
gnsstk::TransformLibrary::transformers
TransformerMap transformers
More than meets the eye.
Definition: TransformLibrary.hpp:208
gnsstk::Transformer
Definition: Transformer.hpp:57
gnsstk::Position::getX
double getX() const noexcept
return ECEF X coordinate (meters)
Definition: Position.hpp:479
TransformLibrary_T::transformTripleTest
unsigned transformTripleTest()
Definition: TransformLibrary_T.cpp:286
gnsstk::Transformer::toFrame
RefFrame toFrame
The reference frame we can transform to.
Definition: Transformer.hpp:158
TransformLibrary_T::p1
std::vector< double > p1
initial positions and transformed positions
Definition: TransformLibrary_T.cpp:113
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
TransformLibrary_T::xf1
std::shared_ptr< gnsstk::HelmertTransformer > xf1
Definition: TransformLibrary_T.cpp:111
gnsstk::TimeSystem
TimeSystem
Definition of various time systems.
Definition: TimeSystem.hpp:51
gnsstk::Xvt
Definition: Xvt.hpp:60
FakeTransformer::transform
bool transform(const gnsstk::Vector< double > &fromPos, const gnsstk::RefFrame &srcFrame, gnsstk::Vector< double > &toPos) const noexcept override
Definition: TransformLibrary_T.cpp:79
gnsstk::RefFrameSys
RefFrameSys
Reference frame systems. For specific realizations, see RefFrameRlz.
Definition: RefFrameSys.hpp:51
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
gnsstk::Vector< double >
TransformLibrary_T::transformPositionTest
unsigned transformPositionTest()
Definition: TransformLibrary_T.cpp:247
gnsstk::TimeSystem::UTC
@ UTC
Coordinated Universal Time (e.g., from NTP)
gnsstk::Transformer::getToFrame
const RefFrame & getToFrame() const noexcept
Return the RefFrame this Transformer will convert to.
Definition: Transformer.hpp:146
TransformLibrary_T::transformXvtTest
unsigned transformXvtTest()
Definition: TransformLibrary_T.cpp:304
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::RefFrameRlz::PZ90Y2007
@ PZ90Y2007
PZ90 (GLONASS), 2007 version.
gnsstk::Position::getY
double getY() const noexcept
return ECEF Y coordinate (meters)
Definition: Position.hpp:484
gnsstk::RefFrameRlz::WGS84G1150
@ WGS84G1150
WGS84, GPS week 1150 version.
gnsstk::printTime
std::string printTime(const CommonTime &t, const std::string &fmt)
Definition: TimeString.cpp:64
FakeTransformer::transform
bool transform(const gnsstk::Triple &fromPos, const gnsstk::RefFrame &srcFrame, gnsstk::Triple &toPos) const noexcept override
Definition: TransformLibrary_T.cpp:84
gnsstk::RefFrameRlz::PZ90KGS
@ PZ90KGS
PZ90 the "original".
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
gnsstk::Position
Definition: Position.hpp:136
gnsstk::Xvt::Degraded
@ Degraded
Sat is in a degraded state, recommend do not use.
Definition: Xvt.hpp:95
gnsstk::Xvt::clkbias
double clkbias
Sat clock correction in seconds.
Definition: Xvt.hpp:153
FakeTransformer
Something to put into a TransformLibrary without any overhead.
Definition: TransformLibrary_T.cpp:58
gnsstk::TransformerPtr
std::shared_ptr< Transformer > TransformerPtr
Shared pointer to Transformer object.
Definition: Transformer.hpp:163
TransformLibrary_T::finalRF
gnsstk::RefFrame finalRF
Definition: TransformLibrary_T.cpp:110
gnsstk::TransformLibrary
Definition: TransformLibrary.hpp:74
gnsstk::Transformer::fromFrame
RefFrame fromFrame
The reference frame we can transform from.
Definition: Transformer.hpp:157
HelmertTransformer.hpp
TransformLibrary.hpp
TransformLibrary_T::constructorTest
unsigned constructorTest()
Definition: TransformLibrary_T.cpp:132
gnsstk::TransformLibrary::getTransform
bool getTransform(const RefFrame &fromFrame, const RefFrame &toFrame, TransformerPtr &ptr, const CommonTime &when=gnsstk::CommonTime::END_OF_TIME) const
Definition: TransformLibrary.cpp:145
TransformLibrary_T::x1
std::vector< double > x1
Definition: TransformLibrary_T.cpp:113
TransformLibrary_T::transformVectorTest
unsigned transformVectorTest()
Definition: TransformLibrary_T.cpp:268
gnsstk::RefFrameRlz::ITRF2000
@ ITRF2000
ITRF, 2000 version.
TimeString.hpp
gnsstk::Transformer::getEpoch
const CommonTime & getEpoch() const noexcept
Definition: Transformer.hpp:153
TransformLibrary_T::TransformLibrary_T
TransformLibrary_T()
Definition: TransformLibrary_T.cpp:118


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