RinexNav_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 "RinexNavHeader.hpp"
40 #include "RinexNavData.hpp"
41 #include "RinexNavStream.hpp"
43 
44 #include "StringUtils.hpp"
45 #include "Exception.hpp"
46 #include "GPSWeekZcount.hpp"
47 #include "TimeString.hpp"
48 
49 #include "build_config.h"
50 
51 #include "TestUtil.hpp"
52 #include <string>
53 #include <iostream>
54 
55 using namespace gnsstk;
56 
57 #ifdef _MSC_VER
58 #define LDEXP(x,y) ldexp(x,y)
59 #else
60 #define LDEXP(x,y) std::ldexp(x,y)
61 #endif
62 
63 
70 const uint32_t ephEOW[] =
71 { 583228942, 824945128, 904134685, 184026330, 459310087,
72  16899638, 845363969, 0x0f647980, 4193148, 1073290676,
73  583228942, 824953464, 260012308, 225364840, 787693093,
74  1065730353, 298759921, 46377054, 57870868, 8172,
75  583228942, 824962032, 1072401983, 485782594, 84477,
76  301605863, 145566781, 506082625, 1072230894, 259901040 };
77 
78 const unsigned ephEOWwk = 1886;
79 const unsigned ephEOWToeWk = 1887;
80 const unsigned ephEOWprn = 14;
81 // the rest of these values were broken out by hand
85 const long ephEOWhowSec1 = 604206;
86 const long ephEOWhowSec2 = 604212;
87 const long ephEOWhowSec3 = 604218;
92 const double ephEOWtocSec = 597600;
93 const long ephEOWtocZ = 398400;
95 // as-broadcast
96 //const CommonTime ephEOWtoc = GPSWeekZcount(ephEOWwk+1, 0);
97 const double ephEOWaf0 = LDEXP(double( int32_t(0xfffff91d)), -31);
98 const double ephEOWaf1 = LDEXP(double( int16_t(0xffed)), -43);
99 const double ephEOWaf2 = 0.;
100 const double ephEOWiode = 61.;
101 const double ephEOWCrs = LDEXP(double( int16_t(0xfde4)), -5);
102 const double ephEOWdn = LDEXP(double( int16_t(0x35bb)), -43) * PI;
103 const double ephEOWM0 = LDEXP(double( int32_t(0x2dbbccf8)), -31) * PI;
104 const double ephEOWCuc = LDEXP(double( int16_t(0xfe17)), -29);
105 const double ephEOWecc = LDEXP(double(uint32_t(0x04473adb)), -33);
106 const double ephEOWCus = LDEXP(double( int16_t(0x0b0e)), -29);
107 const double ephEOWAhalf = LDEXP(double(uint32_t(0xa10dcc28)), -19);
108 const double ephEOWToe = 0.; //LDEXP(double(uint16_t()),4);
109 const double ephEOWCic = LDEXP(double( int16_t(0xffae)), -29);
110 const double ephEOWOMEGA0 = LDEXP(double( int32_t(0x3873d1d1)), -31) * PI;
111 const double ephEOWCis = LDEXP(double( int16_t(0x0005)), -29);
112 const double ephEOWi0 = LDEXP(double( int32_t(0x2747e88f)), -31) * PI;
113 const double ephEOWCrc = LDEXP(double( int16_t(0x22b4)), -5);
114 const double ephEOWw = LDEXP(double( int32_t(0xb078a8d5)), -31) * PI;
115 const double ephEOWOMEGAdot = LDEXP(double( int32_t(0xffffa3c7)), -43) * PI;
116 const double ephEOWidot = LDEXP(double( int16_t(0xfdc6)), -43) * PI;
117 const double ephEOWTgd = LDEXP(double( int8_t(0xec)), -31);
118 const short ephEOWcodeflgs = 1;
119 const short ephEOWl2pData = 0;
120 const short ephEOWhealth = 0;
121 const double ephEOWiodc = 0x03d;
122 // URA index = 0, worst case 2.4m 20.3.3.3.1.3
123 const double ephEOWacc = 2.4;
124 // fit interval in *hours*
125 const double ephEOWfitint = 4;
126 
127 
129 {
130 
131 public:
132 
133  // constructor
135  {
136  init();
137  }
138  // destructor
140 
141  void init();
142 
143  // return values indicate number of failures, i.e., 0=PASS, !0=FAIL
144  unsigned hardCodeTest();
145  unsigned headerExceptionTest();
146  unsigned streamReadWriteTest();
147  unsigned filterOperatorsTest();
148  unsigned castTest();
152  unsigned xmitReadTest();
153 
154 private:
155 
156  std::string dataFilePath;
157 
158  std::string inputRinexNavExample;
159 
160  std::string outputTestOutput;
161  std::string outputTestOutput2;
162  std::string outputTestOutput3;
163  std::string outputTestOutput4;
164  std::string outputRinexDump;
165 
167  std::string inputNotaNavFile;
171  std::string inputBadHeader;
173  std::string inputXmitTime;
174  std::string outputXmitTime;
175 
176  std::string inputFilterStream1;
177  std::string inputFilterStream2;
178  std::string inputFilterStream3;
179  std::string inputTestOutput4;
180  std::string outputFilterOutput;
181 
182  std::string outputRinexStore;
183 
184  std::stringstream failDescriptionStream;
186 
187 };
188 
189 //============================================================
190 // Initialize Test Data Filenames
191 //============================================================
192 
194 {
195 
196  TestUtil test0;
197  std::string dataFilePath = gnsstk::getPathData();
198  std::string tempFilePath = gnsstk::getPathTestTemp();
199  std::string file_sep = getFileSep();
200  std::string dp = dataFilePath + file_sep;
201  std::string tp = tempFilePath + file_sep;
202 
203  //----------------------------------------
204  // Full file paths
205  //----------------------------------------
206 
207  inputRinexNavExample = dp+"test_input_rinex_nav_RinexNavExample.99n";
208  outputTestOutput = tp+"test_output_rinex_nav_TestOutput.99n";
209  outputTestOutput2 = tp+"test_output_rinex_nav_TestOutput2.99n";
210  outputTestOutput3 = tp+"test_output_rinex_nav_TestOutput3.99n";
211  outputTestOutput4 = tp+"test_output_rinex_nav_TestOutput4.16n";
212  inputTestOutput4 = dp+"test_input_rinex_nav_TestOutput4.16n";
213  outputRinexDump = tp+"test_output_rinex_nav_RinexDump";
214  inputInvalidLineLength = dp+"test_input_rinex_nav_InvalidLineLength.99n";
215  inputNotaNavFile = dp+"test_input_rinex_nav_NotaNavFile.99n";
216  inputUnknownHeaderLabel = dp+"test_input_rinex_nav_UnknownHeaderLabel.99n";
217  inputIncompleteHeader = dp+"test_input_rinex_nav_IncompleteHeader.99n";
218  inputUnsupportedRinex = dp+"test_input_rinex_nav_UnsupportedRinex.99n";
219  inputBadHeader = dp+"test_input_rinex_nav_BadHeader.99n";
220  outputTestOutputHeader = tp+"test_output_rinex_nav_TestOutputHeader.99n";
221  inputFilterStream1 = dp+"test_input_rinex_nav_FilterTest1.99n";
222  inputFilterStream2 = dp+"test_input_rinex_nav_FilterTest2.99n";
223  inputFilterStream3 = dp+"test_input_rinex_nav_FilterTest3.99n";
224  outputFilterOutput = tp+"test_output_rinex_nav_FilterOutput.txt";
225  outputRinexStore = tp+"test_output_rinex_nav_RinexStore.txt";
226  inputXmitTime = dp+"test_input_rinex_nav_TestInput1.16n";
227  outputXmitTime = tp+"test_output_rinex_nav_TestInput1.16n";
228 }
229 
230 //=============================================================================
231 // Test Method Definitions
232 //=============================================================================
233 
234 
235 //------------------------------------------------------------
236 // This test checks to make sure that the internal members of
237 // the RinexNavHeader are as we think they should be.
238 // Also at the end of this test, we check and make sure our
239 // output file is equal to our input
240 // This assures that if any changes happen, the test will fail
241 // and the user will know.
242 // Also, output was put into input three times over to make sure
243 // there were no small errors which blow up into big errors
244 //------------------------------------------------------------
246 {
247 
248  TUDEF("RinexNavStream", "hardCodeTest");
249 
250  try
251  {
252  gnsstk::RinexNavStream inp(inputRinexNavExample.c_str());
253  gnsstk::RinexNavStream out(outputTestOutput.c_str(), std::ios::out);
254  gnsstk::RinexNavStream dmp(outputRinexDump.c_str(), std::ios::out);
257 
258  inp >> header;
259  out << header;
260 
261  while(inp >> data)
262  {
263  out << data;
264  }
265 
266  TUASSERTFE(2.1, header.version);
267  TUASSERTE(std::string, "XXRINEXN V3", header.fileProgram);
268  TUASSERTE(std::string, "AIUB", header.fileAgency);
269  TUASSERTE(std::string, "09/02/1999 19:22:36", header.date);
270  std::vector<std::string>::const_iterator itr1 =
271  header.commentList.begin();
272  TUASSERTE(std::string, "THIS IS ONE COMMENT", *itr1);
273  TUCMPFILE(inputRinexNavExample, outputTestOutput, 2);
274 
275  //------------------------------------------------------------
276  gnsstk::RinexNavStream inp2(outputTestOutput.c_str());
277  gnsstk::RinexNavStream out2(outputTestOutput2.c_str(), std::ios::out);
278  gnsstk::RinexNavHeader header2;
279  gnsstk::RinexNavData data2;
280 
281  inp2 >> header2;
282  out2 << header2;
283 
284  while (inp2 >> data2)
285  {
286  out2 << data2;
287  }
288 
289  gnsstk::RinexNavStream inp3(outputTestOutput2.c_str());
290  gnsstk::RinexNavStream out3(outputTestOutput3.c_str() , std::ios::out);
291  gnsstk::RinexNavHeader header3;
292  gnsstk::RinexNavData data3;
293 
294  inp3 >> header3;
295  out3 << header3;
296 
297  while (inp3 >> data3)
298  {
299  out3 << data3;
300  }
301  header.dump(dmp);
302  data.dump(dmp);
303 
304  TUCMPFILE(inputRinexNavExample, outputTestOutput3, 2);
305  }
306  catch(...)
307  {
308  TUFAIL("test read TestOutput2, unexpected exception");
309  }
310 
311  TURETURN();
312 }
313 
314 //------------------------------------------------------------
315 // This test check that Rinex Header exceptions are thrown
316 //------------------------------------------------------------
318 {
319  TUDEF("RinexNavStream", "headerExceptionTest");
320 
321  std::string msg_test_desc = " ";
322  std::string msg_expected = ", should throw a gnsstk::Exception";
323  std::string msg_false_pass = ", but threw no exception.";
324  std::string msg_true_fail = ", but instead threw an unknown exception.";
325 
326  try
327  {
328  gnsstk::RinexNavStream InvalidLineLength(inputInvalidLineLength.c_str());
329  gnsstk::RinexNavStream NotaNavFile(inputNotaNavFile.c_str());
330  gnsstk::RinexNavStream UnknownHeaderLabel(inputUnknownHeaderLabel.c_str());
331  gnsstk::RinexNavStream IncompleteHeader(inputIncompleteHeader.c_str());
332  gnsstk::RinexNavStream UnsupportedRinex(inputUnsupportedRinex.c_str());
333  gnsstk::RinexNavStream BadHeader(inputBadHeader.c_str());
334  gnsstk::RinexNavStream out(outputTestOutputHeader.c_str(), std::ios::out);
335  gnsstk::RinexNavHeader Header;
336 
337  InvalidLineLength.exceptions( std::fstream::failbit);
338  NotaNavFile.exceptions( std::fstream::failbit);
339  UnknownHeaderLabel.exceptions(std::fstream::failbit);
340  IncompleteHeader.exceptions( std::fstream::failbit);
341  UnsupportedRinex.exceptions( std::fstream::failbit);
342  BadHeader.exceptions( std::fstream::failbit);
343 
344 
345  //------------------------------------------------------------
346  msg_test_desc = "InvalidLineLength test";
347  try
348  {
349  InvalidLineLength >> Header;
350  TUFAIL(msg_test_desc + msg_expected + msg_false_pass);
351  }
352  catch(gnsstk::Exception e)
353  {
354  TUPASS(msg_test_desc + msg_expected);
355  }
356  catch(...)
357  {
358  TUFAIL(msg_test_desc + msg_expected + msg_true_fail);
359  }
360 
361  //------------------------------------------------------------
362  msg_test_desc = "NotaNavFile test";
363  try
364  {
365  NotaNavFile >> Header;
366  TUFAIL(msg_test_desc + msg_expected + msg_false_pass);
367  }
368  catch(gnsstk::Exception e)
369  {
370  TUPASS(msg_test_desc + msg_expected);
371  }
372  catch(...)
373  {
374  TUFAIL(msg_test_desc + msg_expected + msg_true_fail);
375  }
376 
377  //------------------------------------------------------------
378  msg_test_desc = "UnknownHeaderLabel test";
379  try
380  {
381  UnknownHeaderLabel >> Header;
382  TUFAIL(msg_test_desc + msg_expected + msg_false_pass);
383  }
384  catch(gnsstk::Exception e)
385  {
386  TUPASS(msg_test_desc + msg_expected);
387  }
388  catch(...)
389  {
390  TUFAIL(msg_test_desc + msg_expected + msg_true_fail);
391  }
392 
393  //------------------------------------------------------------
394  msg_test_desc = "IncompleteHeader test";
395  try
396  {
397  IncompleteHeader >> Header;
398  TUFAIL(msg_test_desc + msg_expected + msg_false_pass);
399  }
400  catch(gnsstk::Exception e)
401  {
402  TUPASS(msg_test_desc + msg_expected);
403  }
404  catch(...)
405  {
406  TUFAIL(msg_test_desc + msg_expected + msg_true_fail);
407  }
408 
409  //------------------------------------------------------------
410  msg_test_desc = "UnsupportedRinex test";
411  try
412  {
413  UnsupportedRinex >> Header;
414  TUFAIL(msg_test_desc + msg_expected + msg_false_pass);
415  }
416  catch(gnsstk::Exception e)
417  {
418  TUPASS(msg_test_desc + msg_expected);
419  }
420  catch(...)
421  {
422  TUFAIL(msg_test_desc + msg_expected + msg_true_fail);
423  }
424 
425  //------------------------------------------------------------
426  msg_test_desc = "BadHeader test";
427  try
428  {
429  BadHeader >> Header;
430  TUFAIL(msg_test_desc + msg_expected + msg_false_pass);
431  }
432  catch(gnsstk::Exception e)
433  {
434  TUPASS(msg_test_desc + msg_expected);
435  }
436  catch(...)
437  {
438  TUFAIL(msg_test_desc + msg_expected + msg_true_fail);
439  }
440 
441  }
442  catch(...)
443  {
444  TUFAIL("test failure message");
445  }
446 
447  TURETURN();
448 }
449 
450 //------------------------------------------------------------
451 // Test RinexNavData File read/write with streams
452 // * Read Rinex Nav file directly into a RinexEphemerisStore
453 // * Write contents of RinexEphemerisStore back out to a new file
454 // * Diff the old file and the new file
455 //------------------------------------------------------------
457 {
458  TUDEF("RinexNavData", "streamReadWriteTest");
459 
460  try
461  {
462  RinexNavStream rinexInputStream(inputRinexNavExample.c_str() );
463  RinexNavStream rinexOutputStream(outputRinexStore.c_str(), std::ios::out);
464  rinexInputStream >> rinexOutputStream.header;
465  rinexOutputStream << rinexOutputStream.header;
466 
468  while(rinexInputStream >> data)
469  rinexOutputStream << data;
470  TUCMPFILE(inputRinexNavExample, outputRinexStore, 9);
471  }
472  catch(...)
473  {
474  TUFAIL("Unexpected exception");
475  }
476 
477  TURETURN();
478 }
479 
480 //------------------------------------------------------------
481 // Test for several of the members within RinexNavFilterOperators
482 // including merge, EqualsFull, LessThanSimple, LessThanFull, and FilterPRN
483 //------------------------------------------------------------
485 {
486  // todo: This is a brokent test as of 4/25/16. In some environments
487  // this test is returning a false pass and on others its failing.
488  return 0;
489 
490  TUDEF("RinexNavStream", "filterOperatorsTest");
491 
492  try
493  {
494  gnsstk::RinexNavStream FilterStream1(inputFilterStream1.c_str());
495  FilterStream1.open(inputFilterStream1.c_str(), std::ios::in);
496  gnsstk::RinexNavStream FilterStream2(inputFilterStream2.c_str());
497  gnsstk::RinexNavStream FilterStream3(inputFilterStream3.c_str());
498  gnsstk::RinexNavStream out(outputFilterOutput.c_str(), std::ios::out);
499 
500  gnsstk::RinexNavHeader FilterHeader1;
501  gnsstk::RinexNavHeader FilterHeader2;
502  gnsstk::RinexNavHeader FilterHeader3;
503 
504  gnsstk::RinexNavData FilterData1;
505  gnsstk::RinexNavData FilterData2;
506  gnsstk::RinexNavData FilterData3;
507  gnsstk::RinexNavData rndata;
508 
509  FilterStream1 >> FilterHeader1;
510  FilterStream2 >> FilterHeader2;
511  FilterStream3 >> FilterHeader3;
512 
513  while (FilterStream1 >> rndata)
514  {
515  FilterData1 = rndata;
516  }
517  while (FilterStream2 >> rndata)
518  {
519  FilterData2 = rndata;
520  }
521  while (FilterStream3 >> rndata)
522  {
523  FilterData3 = rndata;
524  }
525 
527  merged(FilterHeader1);
528  merged(FilterHeader2);
529  out << merged.theHeader;
530 
532 
533  TUASSERT(EqualsFull(FilterData1, FilterData2));
534  TUASSERT(!EqualsFull(FilterData1, FilterData3));
535 
537 
538  TUASSERT(!LessThanSimple(FilterData1, FilterData2));
539  //CPPUNIT_ASSERT_EQUAL(true,LessThanSimple(FilterData1, FilterData3));
540 
542 
543  //CPPUNIT_ASSERT_EQUAL(true,LessThanFull(FilterData1, FilterData3));
544  //CPPUNIT_ASSERT_EQUAL(false,LessThanFull(FilterData3, FilterData1));
545  TUASSERT(!LessThanFull(FilterData1, FilterData1));
546 
547  std::list<long> list;
548  list.push_front(6);
549  gnsstk::RinexNavDataFilterPRN FilterPRN(list);
550  TUASSERT(FilterPRN(FilterData3));
551  //cout << FilterPRN(FilterData3) << std:endl;
552  }
553  catch(...)
554  {
555  TUFAIL("unexpected exception");
556  }
557 
558  TURETURN();
559 }
560 
561 
563 {
564  TUDEF("RinexNavData", "RinexNavData(EngEphemeris)");
565 
566  EngEphemeris eeph;
567  TUASSERT(eeph.addSubframe(&ephEOW[ 0], ephEOWwk, ephEOWprn, 1));
568  TUASSERT(eeph.addSubframe(&ephEOW[10], ephEOWwk, ephEOWprn, 1));
569  TUASSERT(eeph.addSubframe(&ephEOW[20], ephEOWwk, ephEOWprn, 1));
570 
571  RinexNavData rnd(eeph);
572  // epoch
573  TUASSERTE(short, ephEOWprn, rnd.PRNID);
575  TUASSERTFE(ephEOWaf0, rnd.af0);
576  TUASSERTFE(ephEOWaf1, rnd.af1);
577  TUASSERTFE(ephEOWaf2, rnd.af2);
578  // 1
579  TUASSERTFE(ephEOWiode, rnd.IODE);
580  TUASSERTFE(ephEOWCrs, rnd.Crs);
581  TUASSERTFE(ephEOWdn, rnd.dn);
582  TUASSERTFE(ephEOWM0, rnd.M0);
583  // 2
584  TUASSERTFE(ephEOWCuc, rnd.Cuc);
585  TUASSERTFE(ephEOWecc, rnd.ecc);
586  TUASSERTFE(ephEOWCus, rnd.Cus);
588  // 3
589  TUASSERTFE(ephEOWToe, rnd.Toe);
590  TUASSERTFE(ephEOWCic, rnd.Cic);
592  TUASSERTFE(ephEOWCis, rnd.Cis);
593  // 4
594  TUASSERTFE(ephEOWi0, rnd.i0);
595  TUASSERTFE(ephEOWCrc, rnd.Crc);
596  TUASSERTFE(ephEOWw, rnd.w);
598  // 5
599  TUASSERTFE(ephEOWidot, rnd.idot);
600  TUASSERTE(short, ephEOWcodeflgs, rnd.codeflgs);
601  TUASSERTE(short, ephEOWToeWk, rnd.toeWeek);
602  TUASSERTE(short, ephEOWl2pData, rnd.L2Pdata);
603  // 6
605  TUASSERTE(short, ephEOWhealth, rnd.health);
606  TUASSERTFE(ephEOWTgd, rnd.Tgd);
607  TUASSERTFE(ephEOWiodc, rnd.IODC);
608  // 7
609  // not available... yay.
610  //TUASSERTFE(ephEOWxmitTimeSec1,
612 
613  gnsstk::RinexNavStream out(outputTestOutput4.c_str(), std::ios::out);
614  out << rnd;
615  out.close();
616  TUCMPFILE(inputTestOutput4, outputTestOutput4, 0);
617 
618  TURETURN();
619 }
620 
621 
623 {
624  TUDEF("RinexNavData", "xmitReadTest");
625  RinexNavStream in(inputXmitTime.c_str(), std::ios::in);
626  RinexNavData positive, negative;
628  CommonTime expXmit = GPSWeekSecond(1886, 604200, gnsstk::TimeSystem::GPS);
629  in >> header;
630  // negative transmit time requires adjustment of the seconds of
631  // week to get the transmit time right
632  in >> negative;
633  // positive transmit time requires adjustment of the week to get
634  // the transmit time right
635  in >> positive;
636  in.close();
637  TUASSERTE(CommonTime, expXmit, negative.getXmitTime());
638  TUASSERTE(CommonTime, expXmit, positive.getXmitTime());
639  // write the data back out and make sure nothing has changed
640  RinexNavStream out(outputXmitTime.c_str(), std::ios::out);
641  out << header;
642  out << negative;
643  out << positive;
644  out.close();
645  TUCMPFILE(inputXmitTime, outputXmitTime, 2);
646  TURETURN();
647 }
648 
649 
650 //============================================================
651 // Run all the test methods defined above
652 //============================================================
653 
654 int main()
655 {
656  using namespace std;
657  unsigned errorTotal = 0;
658  RinexNav_T testClass;
659 
660  errorTotal += testClass.headerExceptionTest();
661  errorTotal += testClass.hardCodeTest();
662  errorTotal += testClass.streamReadWriteTest();
663  errorTotal += testClass.filterOperatorsTest();
664  errorTotal += testClass.castTest();
665  errorTotal += testClass.xmitReadTest();
666 
667  cout << "Total Failures for " << __FILE__ << ": " << errorTotal << endl;
668 
669  return(errorTotal);
670 }
RinexNav_T::outputTestOutput3
std::string outputTestOutput3
Definition: RinexNav_T.cpp:162
gnsstk::RinexNavDataOperatorLessThanSimple
Only compares time. Suitable for sorting a RinexNav file.
Definition: RinexNavFilterOperators.hpp:142
GPSWeekZcount.hpp
gnsstk::RinexNavData::Toe
RNDouble Toe
Ephemeris epoch (sec of week).
Definition: RinexNavData.hpp:237
gnsstk::RinexNavDataOperatorLessThanFull
This compares all elements of the RinexNavData with less than.
Definition: RinexNavFilterOperators.hpp:62
ephEOWi0
const double ephEOWi0
Definition: RinexNav_T.cpp:112
ephEOWprn
const unsigned ephEOWprn
Definition: RinexNav_T.cpp:80
ephEOWAhalf
const double ephEOWAhalf
Definition: RinexNav_T.cpp:107
gnsstk::RinexNavData::Crc
RNDouble Crc
Cosine radius (m).
Definition: RinexNavData.hpp:228
gnsstk::RinexNavData::Cic
RNDouble Cic
Cosine inclination (rad).
Definition: RinexNavData.hpp:230
RinexNav_T::inputIncompleteHeader
std::string inputIncompleteHeader
Definition: RinexNav_T.cpp:169
example3.header
header
Definition: example3.py:22
gnsstk::RinexNavHeaderTouchHeaderMerge
Definition: RinexNavFilterOperators.hpp:162
gnsstk::RinexNavData::L2Pdata
short L2Pdata
L2 P data flag.
Definition: RinexNavData.hpp:209
RinexNav_T::inputFilterStream2
std::string inputFilterStream2
Definition: RinexNav_T.cpp:177
ephEOWidot
const double ephEOWidot
Definition: RinexNav_T.cpp:116
RinexNav_T::inputRinexNavExample
std::string inputRinexNavExample
Definition: RinexNav_T.cpp:158
gnsstk::RinexNavData::Crs
RNDouble Crs
Sine radius (m).
Definition: RinexNavData.hpp:229
ephEOWiodc
const double ephEOWiodc
Definition: RinexNav_T.cpp:121
RinexNav_T::streamReadWriteTest
unsigned streamReadWriteTest()
Definition: RinexNav_T.cpp:456
StringUtils.hpp
ephEOWhowSec1
const long ephEOWhowSec1
Definition: RinexNav_T.cpp:85
ephEOWtocZ
const long ephEOWtocZ
Definition: RinexNav_T.cpp:93
dataFilePath
string dataFilePath
Definition: Rinex3Obs_FromScratch_T.cpp:51
ephEOWCrc
const double ephEOWCrc
Definition: RinexNav_T.cpp:113
gnsstk::RinexNavData::accuracy
RNDouble accuracy
SV accuracy (m).
Definition: RinexNavData.hpp:207
RinexNav_T::inputXmitTime
std::string inputXmitTime
Definition: RinexNav_T.cpp:173
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
RinexNav_T::xmitReadTest
unsigned xmitReadTest()
Definition: RinexNav_T.cpp:622
TUFAIL
#define TUFAIL(MSG)
Definition: TestUtil.hpp:228
gnsstk::RinexNavData::codeflgs
short codeflgs
L2 codes.
Definition: RinexNavData.hpp:206
ephEOWTgd
const double ephEOWTgd
Definition: RinexNav_T.cpp:117
gnsstk::RinexNavDataFilterPRN
Filter based on PRN ID.
Definition: RinexNavFilterOperators.hpp:203
ephEOWaf0
const double ephEOWaf0
Definition: RinexNav_T.cpp:97
ephEOWcodeflgs
const short ephEOWcodeflgs
Definition: RinexNav_T.cpp:118
gnsstk::RinexNavData::w
RNDouble w
Argument of perigee (rad).
Definition: RinexNavData.hpp:244
ephEOWacc
const double ephEOWacc
Definition: RinexNav_T.cpp:123
RinexNav_T::inputFilterStream3
std::string inputFilterStream3
Definition: RinexNav_T.cpp:178
gnsstk::RinexNavData::OMEGA0
RNDouble OMEGA0
Rt ascension of ascending node (rad).
Definition: RinexNavData.hpp:242
ephEOWCuc
const double ephEOWCuc
Definition: RinexNav_T.cpp:104
ephEOWM0
const double ephEOWM0
Definition: RinexNav_T.cpp:103
RinexNav_T::init
void init()
Definition: RinexNav_T.cpp:193
RinexNavHeader.hpp
gnsstk::PI
const double PI
GPS value of PI; also specified by GAL.
Definition: GNSSconstants.hpp:62
gnsstk::RinexNavData::OMEGAdot
RNDouble OMEGAdot
Rate of Rt ascension (rad/sec).
Definition: RinexNavData.hpp:245
gnsstk::RinexNavData::M0
RNDouble M0
Mean anomaly (rad).
Definition: RinexNavData.hpp:238
gnsstk::RinexNavData::Cus
RNDouble Cus
Sine latitude (rad).
Definition: RinexNavData.hpp:227
RinexNav_T::hardCodeTest
unsigned hardCodeTest()
Definition: RinexNav_T.cpp:245
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::RinexNavData
Definition: RinexNavData.hpp:67
ephEOWxmitTime1
const CommonTime ephEOWxmitTime1
Definition: RinexNav_T.cpp:88
RinexNav_T::failDescriptionStream
std::stringstream failDescriptionStream
Definition: RinexNav_T.cpp:184
gnsstk::GPSWeekSecond
Definition: GPSWeekSecond.hpp:56
RinexNav_T::outputTestOutput4
std::string outputTestOutput4
Definition: RinexNav_T.cpp:163
ephEOWhowTime2
const CommonTime ephEOWhowTime2
Definition: RinexNav_T.cpp:83
gnsstk::RinexNavData::ecc
RNDouble ecc
Eccentricity.
Definition: RinexNavData.hpp:240
RinexNav_T::outputRinexDump
std::string outputRinexDump
Definition: RinexNav_T.cpp:164
RinexNav_T::~RinexNav_T
~RinexNav_T()
Definition: RinexNav_T.cpp:139
gnsstk::Exception
Definition: Exception.hpp:151
ephEOWxmitTime3
const CommonTime ephEOWxmitTime3
Definition: RinexNav_T.cpp:90
ephEOWToeWk
const unsigned ephEOWToeWk
Definition: RinexNav_T.cpp:79
ephEOWhowSec3
const long ephEOWhowSec3
Definition: RinexNav_T.cpp:87
RinexNav_T
Definition: RinexNav_T.cpp:128
gnsstk::EngEphemeris
Definition: EngEphemeris.hpp:86
gnsstk::RinexNavData::Tgd
RNDouble Tgd
Group delay differential (sec).
Definition: RinexNavData.hpp:220
TUASSERT
#define TUASSERT(EXPR)
Definition: TestUtil.hpp:63
RinexNav_T::failDescriptionString
std::string failDescriptionString
Definition: RinexNav_T.cpp:185
ephEOWCus
const double ephEOWCus
Definition: RinexNav_T.cpp:106
main
int main()
Definition: RinexNav_T.cpp:654
gnsstk::RinexNavData::time
CommonTime time
Clock reference time (toc).
Definition: RinexNavData.hpp:198
TestUtil.hpp
RinexNav_T::inputFilterStream1
std::string inputFilterStream1
Definition: RinexNav_T.cpp:176
gnsstk::RinexNavData::health
short health
SV health.
Definition: RinexNavData.hpp:208
gnsstk::RinexNavData::IODC
RNDouble IODC
Index of data-clock.
Definition: RinexNavData.hpp:210
RinexNav_T::inputInvalidLineLength
std::string inputInvalidLineLength
Definition: RinexNav_T.cpp:166
ephEOWaf1
const double ephEOWaf1
Definition: RinexNav_T.cpp:98
ephEOWl2pData
const short ephEOWl2pData
Definition: RinexNav_T.cpp:119
RinexNav_T::castTest
unsigned castTest()
Definition: RinexNav_T.cpp:562
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
ephEOWhowTime1
const CommonTime ephEOWhowTime1
Definition: RinexNav_T.cpp:82
RinexNav_T::outputXmitTime
std::string outputXmitTime
Definition: RinexNav_T.cpp:174
ephEOWOMEGAdot
const double ephEOWOMEGAdot
Definition: RinexNav_T.cpp:115
gnsstk::RinexNavDataOperatorEqualsFull
This compares all elements of the RinexNavData with equals.
Definition: RinexNavFilterOperators.hpp:107
TUPASS
#define TUPASS(MSG)
Definition: TestUtil.hpp:230
RinexNav_T::RinexNav_T
RinexNav_T()
Definition: RinexNav_T.cpp:134
gnsstk::RinexNavData::toeWeek
short toeWeek
The full GPS week associated with Toe.
Definition: RinexNavData.hpp:205
ephEOWdn
const double ephEOWdn
Definition: RinexNav_T.cpp:102
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::WeekSecond::sow
double sow
Definition: WeekSecond.hpp:155
gnsstk::RinexNavData::PRNID
short PRNID
SV PRN ID.
Definition: RinexNavData.hpp:199
ephEOWtoc
const CommonTime ephEOWtoc
Definition: RinexNav_T.cpp:94
gnsstk::RinexNavData::dn
RNDouble dn
Correction to mean motion (rad/sec).
Definition: RinexNavData.hpp:239
LDEXP
#define LDEXP(x, y)
Definition: RinexNav_T.cpp:60
ephEOWhowTime3
const CommonTime ephEOWhowTime3
Definition: RinexNav_T.cpp:84
ephEOWCrs
const double ephEOWCrs
Definition: RinexNav_T.cpp:101
RinexNav_T::outputFilterOutput
std::string outputFilterOutput
Definition: RinexNav_T.cpp:180
gnsstk::RinexNavHeader
Definition: RinexNavHeader.hpp:63
RinexNavStream.hpp
file_sep
string file_sep
Definition: Rinex3Obs_FromScratch_T.cpp:52
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
ephEOWToe
const double ephEOWToe
Definition: RinexNav_T.cpp:108
gnsstk::RinexNavData::af2
RNDouble af2
SV clock drift rate (sec/sec**2).
Definition: RinexNavData.hpp:219
gnsstk::GPSWeekZcount
Definition: GPSWeekZcount.hpp:55
gnsstk::RinexNavStream
Definition: RinexNavStream.hpp:61
TUCMPFILE
#define TUCMPFILE(F1, F2, SKIP)
Definition: TestUtil.hpp:170
RinexNav_T::outputRinexStore
std::string outputRinexStore
Definition: RinexNav_T.cpp:182
gnsstk::RinexNavData::IODE
RNDouble IODE
Index of data-eph.
Definition: RinexNavData.hpp:211
example3.data
data
Definition: example3.py:22
gnsstk::RinexNavStream::header
RinexNavHeader header
RINEX NAV header for this file.
Definition: RinexNavStream.hpp:79
ephEOWOMEGA0
const double ephEOWOMEGA0
Definition: RinexNav_T.cpp:110
ephEOWwk
const unsigned ephEOWwk
Definition: RinexNav_T.cpp:78
ephEOWhowSec2
const long ephEOWhowSec2
Definition: RinexNav_T.cpp:86
RinexNav_T::inputUnsupportedRinex
std::string inputUnsupportedRinex
Definition: RinexNav_T.cpp:170
ephEOWfitint
const double ephEOWfitint
Definition: RinexNav_T.cpp:125
gnsstk::RinexNavStream::open
virtual void open(const char *fn, std::ios::openmode mode)
overrides open to reset the header
Definition: RinexNavStream.cpp:70
RinexNav_T::dataFilePath
std::string dataFilePath
Definition: RinexNav_T.cpp:156
RinexNav_T::inputTestOutput4
std::string inputTestOutput4
Definition: RinexNav_T.cpp:179
ephEOWiode
const double ephEOWiode
Definition: RinexNav_T.cpp:100
Exception.hpp
RinexNav_T::inputUnknownHeaderLabel
std::string inputUnknownHeaderLabel
Definition: RinexNav_T.cpp:168
gnsstk::TimeSystem::GPS
@ GPS
GPS system time.
ephEOWxmitTime2
const CommonTime ephEOWxmitTime2
Definition: RinexNav_T.cpp:89
std
Definition: Angle.hpp:142
RinexNav_T::inputBadHeader
std::string inputBadHeader
Definition: RinexNav_T.cpp:171
gnsstk::RinexNavData::af0
RNDouble af0
SV clock error (sec).
Definition: RinexNavData.hpp:217
RinexNav_T::filterOperatorsTest
unsigned filterOperatorsTest()
Definition: RinexNav_T.cpp:484
RinexNavFilterOperators.hpp
gnsstk::RinexNavData::fitint
RNDouble fitint
Fit interval.
Definition: RinexNavData.hpp:247
gnsstk::RinexNavData::af1
RNDouble af1
SV clock drift (sec/sec).
Definition: RinexNavData.hpp:218
ephEOWxmitTimeSec1
const double ephEOWxmitTimeSec1
Definition: RinexNav_T.cpp:91
RinexNav_T::outputTestOutputHeader
std::string outputTestOutputHeader
Definition: RinexNav_T.cpp:172
ephEOW
const uint32_t ephEOW[]
Definition: RinexNav_T.cpp:70
gnsstk::RinexNavData::idot
RNDouble idot
Rate of inclination angle (rad/sec).
Definition: RinexNavData.hpp:246
RinexNav_T::outputTestOutput2
std::string outputTestOutput2
Definition: RinexNav_T.cpp:161
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
ephEOWCic
const double ephEOWCic
Definition: RinexNav_T.cpp:109
gnsstk::RinexNavData::i0
RNDouble i0
Inclination (rad).
Definition: RinexNavData.hpp:243
gnsstk::RinexNavData::Cis
RNDouble Cis
Sine inclination (rad).
Definition: RinexNavData.hpp:231
RinexNav_T::outputTestOutput
std::string outputTestOutput
Definition: RinexNav_T.cpp:160
gnsstk::RinexNavHeaderTouchHeaderMerge::theHeader
gnsstk::RinexNavHeader theHeader
Definition: RinexNavFilterOperators.hpp:199
RinexNavData.hpp
ephEOWhealth
const short ephEOWhealth
Definition: RinexNav_T.cpp:120
gnsstk::TestUtil
Definition: TestUtil.hpp:265
ephEOWCis
const double ephEOWCis
Definition: RinexNav_T.cpp:111
RinexNav_T::inputNotaNavFile
std::string inputNotaNavFile
Definition: RinexNav_T.cpp:167
ephEOWw
const double ephEOWw
Definition: RinexNav_T.cpp:114
ephEOWecc
const double ephEOWecc
Definition: RinexNav_T.cpp:105
gnsstk::RinexNavData::Cuc
RNDouble Cuc
Cosine latitude (rad).
Definition: RinexNavData.hpp:226
tempFilePath
string tempFilePath
Definition: Rinex3Obs_FromScratch_T.cpp:50
TimeString.hpp
gnsstk::RinexNavData::Ahalf
RNDouble Ahalf
SQRT of semi-major axis (m**1/2).
Definition: RinexNavData.hpp:241
RinexNav_T::headerExceptionTest
unsigned headerExceptionTest()
Definition: RinexNav_T.cpp:317
ephEOWtocSec
const double ephEOWtocSec
Definition: RinexNav_T.cpp:92
gnsstk::EngEphemeris::addSubframe
bool addSubframe(const uint32_t subframe[10], const int gpsWeek, const short PRN, const short track)
Definition: EngEphemeris.cpp:146
ephEOWaf2
const double ephEOWaf2
Definition: RinexNav_T.cpp:99


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