RinexNavDataFactory_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 <math.h>
40 #include "RinexNavDataFactory.hpp"
41 #include "TestUtil.hpp"
42 #include "GPSLNavEph.hpp"
43 #include "GPSLNavHealth.hpp"
44 #include "GPSLNavIono.hpp"
45 #include "GPSLNavISC.hpp"
46 #include "GalINavEph.hpp"
47 #include "GalINavIono.hpp"
48 #include "GalINavISC.hpp"
49 #include "GalFNavEph.hpp"
50 #include "GalINavHealth.hpp"
51 #include "GalFNavHealth.hpp"
52 #include "BDSD1NavEph.hpp"
53 #include "BDSD1NavHealth.hpp"
54 #include "BDSD1NavIono.hpp"
55 #include "BDSD1NavISC.hpp"
56 #include "BDSD2NavEph.hpp"
57 #include "BDSD2NavHealth.hpp"
58 #include "BDSD2NavISC.hpp"
59 #include "BDSWeekSecond.hpp"
60 #include "GLOFNavEph.hpp"
61 #include "GLOFNavHealth.hpp"
62 #include "GLOFNavISC.hpp"
63 #include "RinexTimeOffset.hpp"
64 #include "GALWeekSecond.hpp"
65 
66 namespace gnsstk
67 {
68  std::ostream& operator<<(std::ostream& s, gnsstk::GPSLNavL2Codes e)
69  {
70  s << static_cast<int>(e);
71  return s;
72  }
73  std::ostream& operator<<(std::ostream& s, gnsstk::NavMessageType e)
74  {
75  s << StringUtils::asString(e);
76  return s;
77  }
78  std::ostream& operator<<(std::ostream& s, SVHealth h)
79  {
80  s << StringUtils::asString(h);
81  return s;
82  }
83  std::ostream& operator<<(std::ostream& s, GalHealthStatus e)
84  {
85  s << StringUtils::asString(e);
86  return s;
87  }
88  std::ostream& operator<<(std::ostream& s, GalDataValid e)
89  {
90  s << StringUtils::asString(e);
91  return s;
92  }
93  std::ostream& operator<<(std::ostream& s, GLOFNavPCode e)
94  {
95  s << StringUtils::asString(e);
96  return s;
97  }
98  std::ostream& operator<<(std::ostream& s, GLOFNavSatType e)
99  {
100  s << StringUtils::asString(e);
101  return s;
102  }
103 }
104 
108 {
109 public:
112  { return data; }
113 };
114 
117 {
118 public:
120  unsigned constructorTest();
122  unsigned loadIntoMapTest();
124  unsigned loadIntoMapQZSSTest();
125  unsigned decodeSISATest();
126  unsigned encodeSISATest();
132  template <class NavClass>
133  void verifyDataType(gnsstk::TestUtil& testFramework,
134  gnsstk::NavMessageMap& nmm);
135 };
136 
137 
140 {
141  TUDEF("RinexNavDataFactory", "RinexNavDataFactory");
143  // check for expected signal support
172  TUASSERT(fact.supportedSignals.count(nsid1));
173  TUASSERT(fact.supportedSignals.count(nsid2));
174  TUASSERT(fact.supportedSignals.count(nsid3));
175  TUASSERT(fact.supportedSignals.count(nsid4));
176  TUASSERT(fact.supportedSignals.count(nsid5));
177  TUASSERT(fact.supportedSignals.count(nsid6));
178  TUASSERT(fact.supportedSignals.count(nsid7));
179  TURETURN();
180 }
181 
182 
185 {
186  TUDEF("RinexNavDataFactory", "loadIntoMap");
187 
188  // test loading RINEX 2 nav
190  std::string f2name = gnsstk::getPathData() + gnsstk::getFileSep() +
191  "arlm2000.15n";
192  // this should implicitly load into the data map
193  TUASSERT(f2.addDataSource(f2name));
194  TUASSERTE(size_t, 507, f2.size());
195  gnsstk::CommonTime expti2 = gnsstk::CivilTime(2015,7,19,0,0,0,
197  gnsstk::CommonTime exptf2 = gnsstk::CivilTime(2015,7,20,2,0,0,
201 
202  TUCSM("convertToOffset");
203  gnsstk::NavDataPtr navPtr;
204  double offsVal = 666;
205  gnsstk::CommonTime refTime = gnsstk::GPSWeekSecond(1854,233472);
207  gnsstk::TimeSystem::UTC, refTime, navPtr));
208  gnsstk::RinexTimeOffset *rto = dynamic_cast<gnsstk::RinexTimeOffset*>(
209  navPtr.get());
211  gnsstk::TimeSystem::UTC, refTime,
212  offsVal));
213  // 123456789012345678
214  // 931322575 (test 1 and test 2)
215  // 3553 (test 2 only)
216  TUASSERTFE(17.000000000931322575, offsVal);
217  // add one second to ref time to force the A1 term to come into play
218  refTime += 1.0;
220  gnsstk::TimeSystem::UTC, refTime,
221  offsVal));
222  TUASSERTFE(17.000000000931326128, offsVal);
223  TUCSM("loadIntoMap");
224 
226  std::string f3name = gnsstk::getPathData() + gnsstk::getFileSep() +
227  "test_input_rinex3_76193040.14n";
228  // this should implicitly load into the data map
229  TUASSERT(f3.addDataSource(f3name));
230  TUASSERTE(size_t, 44, f3.size());
231 
232  TestClass f4;
233  std::string f4name = gnsstk::getPathData() + gnsstk::getFileSep() +
234  "test_input_rinex3_76193040.14n";
235  TUCATCH(f4.setTypeFilter({gnsstk::NavMessageType::Ephemeris}));
236  // this should implicitly load into the data map
237  TUASSERT(f4.addDataSource(f4name));
238  TUASSERTE(size_t, 13, f4.size());
239  gnsstk::NavMessageMap &nmm4(f4.getData());
240  // only one message type
241  TUASSERTE(size_t, 1, nmm4.size());
242  // and it's ephemeris.
244  nmm4.begin()->first);
245  TUCSM("convertToOrbit/fillNavData");
246  verifyDataType<gnsstk::GPSLNavEph>(testFramework, nmm4);
247  TUCSM("loadIntoMap");
248 
249  TestClass f5;
250  std::string f5name = gnsstk::getPathData() + gnsstk::getFileSep() +
251  "test_input_rinex3_76193040.14n";
252  TUCATCH(f5.setTypeFilter({gnsstk::NavMessageType::Health}));
253  // this should implicitly load into the data map
254  TUASSERT(f5.addDataSource(f5name));
255  TUASSERTE(size_t, 13, f5.size());
256  gnsstk::NavMessageMap &nmm5(f5.getData());
257  // only one message type
258  TUASSERTE(size_t, 1, nmm5.size());
259  // and it's health.
261  nmm5.begin()->first);
262  TUCSM("convertToHealth/fillNavData");
263  verifyDataType<gnsstk::GPSLNavHealth>(testFramework, nmm5);
264  TUCSM("loadIntoMap");
265 
266  TestClass f6;
267  std::string f6name = gnsstk::getPathData() + gnsstk::getFileSep() +
268  "test_input_rinex3_76193040.14n";
269  TUCATCH(f6.setTypeFilter({gnsstk::NavMessageType::Almanac}));
270  // this should implicitly load into the data map
271  TUASSERT(f6.addDataSource(f6name));
272  // except there isn't any data, because RINEX NAV doesn't contain almanacs
273  TUASSERTE(size_t, 0, f6.size());
274 
275  // test loading something that isn't rinex
276  TestClass f7;
277  std::string f7name = gnsstk::getPathData() + gnsstk::getFileSep() +
278  "test_input_SP3a.sp3";
279  TUASSERT(!f7.addDataSource(f7name));
280  TUASSERTE(size_t, 0, f7.size());
281 
282  // test RINEX 3 Galileo
283  TestClass f8;
284  std::string f8name = gnsstk::getPathData() + gnsstk::getFileSep() +
285  "test_input_rinex3_nav_gal.20n";
286  // this should implicitly load into the data map
288  TUASSERT(f8.addDataSource(f8name));
290  // x 4 time offset
291  // x 1 GPS ephemeris
292  // x 1 GPS health
293  // x 1 GPS ISC
294  // x 39 Galileo ephemerides
295  // x 39 Galileo ISC
296  // x 90 Galileo health
297  // x 1 Galileo kludge health for iono corrections
298  // x 1 Galileo iono correction
299  TUASSERTE(size_t, 177, f8.size());
300  // count INAV, FNAV, and LNAV data
301  unsigned ephICount = 0, ephFCount = 0, ephLCount = 0, heaICount = 0,
302  heaLCount = 0, ionoCount = 0, iscLCount = 0, iscICount = 0,
303  otherCount = 0, heaFCount = 0, iscFCount = 0, timeRCount = 0,
304  heaGalFCount = 0;
306  for (auto& nmti : f8.getData())
307  {
308  for (auto& sati : nmti.second)
309  {
310  for (auto& ti : sati.second)
311  {
312  // Count each data type and spot check the first one of each.
313  gnsstk::GalINavEph *ephI;
314  gnsstk::GalFNavEph *ephF;
315  gnsstk::GalFNavHealth *heaGalF;
316  gnsstk::GalINavHealth *heaI;
317  gnsstk::GalINavIono *iono;
318  gnsstk::GalINavISC *iscI;
319  gnsstk::GPSLNavHealth *heaL;
320  gnsstk::GPSLNavEph *ephL;
321  gnsstk::GPSLNavISC *iscL;
322  if ((ephI = dynamic_cast<gnsstk::GalINavEph*>(ti.second.get()))
323  != nullptr)
324  {
325  if (ephICount == 0)
326  {
327  static const gnsstk::CommonTime expToc =
328  gnsstk::CivilTime(2020,5,29,0,10,0,gnsstk::TimeSystem::GAL);
329  // yes, these are supposed to be GPS, see
330  // RinexNavDataFactory::fixTimeGalileo.
331  static const gnsstk::CommonTime expToe =
332  gnsstk::GPSWeekSecond(2107,432600);
333  static const gnsstk::CommonTime expXmit1 =
334  gnsstk::GPSWeekSecond(2107,433714);
335  static const gnsstk::CommonTime expXmit2 = expXmit1+2.0;
336  static const gnsstk::CommonTime expXmit3 = expXmit2+2.0;
337  static const gnsstk::CommonTime expXmit4 = expXmit3+2.0;
338  static const gnsstk::CommonTime expXmit5 = expXmit4+2.0;
339  static const gnsstk::CommonTime expEnd = expToe + (3600.0*4.0);
340  static const gnsstk::NavMessageID expNMID(
347  // NavData
348  TUASSERTE(gnsstk::CommonTime, expXmit1, ephI->timeStamp);
349  TUASSERTE(gnsstk::NavMessageID, expNMID, ephI->signal);
350  // OrbitData doesn't actually have data.
351  // OrbitDataKepler
352  TUASSERTE(gnsstk::CommonTime, expXmit1, ephI->xmitTime);
353  TUASSERTE(gnsstk::CommonTime, expToe, ephI->Toe);
354  TUASSERTE(gnsstk::CommonTime, expToc, ephI->Toc);
356  ephI->health);
357  TUASSERTFE( 1.287087798119e-06, ephI->Cuc);
358  TUASSERTFE( 8.314847946167e-06, ephI->Cus);
359  TUASSERTFE( 1.744062500000e+02, ephI->Crc);
360  TUASSERTFE( 2.890625000000e+01, ephI->Crs);
361  TUASSERTFE( 3.911554813385e-08, ephI->Cic);
362  TUASSERTFE(-1.229345798492e-07, ephI->Cis);
363  TUASSERTFE(-4.933573954815e-01, ephI->M0);
364  TUASSERTFE( 2.787616115400e-09, ephI->dn);
365  TUASSERTFE(0, ephI->dndot);
366  TUASSERTFE( 6.772601045668e-05, ephI->ecc);
367  TUASSERTFE( 5.440601449966e+03*5.440601449966e+03, ephI->A);
368  TUASSERTFE( 5.440601449966e+03, ephI->Ahalf);
369  TUASSERTFE(0, ephI->Adot);
370  TUASSERTFE( 7.066878003606e-01, ephI->OMEGA0);
371  TUASSERTFE( 9.830061444145e-01, ephI->i0);
372  TUASSERTFE( 2.279243758668e+00, ephI->w);
373  TUASSERTFE(-5.394510417298e-09, ephI->OMEGAdot);
374  TUASSERTFE(-5.064496670900e-10, ephI->idot);
375  TUASSERTFE(-8.662177133374e-04, ephI->af0);
376  TUASSERTFE(-7.943867785798e-12, ephI->af1);
377  TUASSERTFE( 0.000000000000e+00, ephI->af2);
378  TUASSERTE(gnsstk::CommonTime, expXmit1, ephI->beginFit);
379  TUASSERTE(gnsstk::CommonTime, expEnd, ephI->endFit);
380  // GalINavEph
381  TUASSERTFE(-1.862645149231e-09, ephI->bgdE5aE1);
382  TUASSERTFE(-2.095475792885e-09, ephI->bgdE5bE1);
383  TUASSERTE(unsigned, 107, ephI->sisaIndex);
384  TUASSERTE(unsigned, 1, ephI->svid);
385  TUASSERTE(gnsstk::CommonTime, expXmit2, ephI->xmit2);
386  TUASSERTE(gnsstk::CommonTime, expXmit3, ephI->xmit3);
387  TUASSERTE(gnsstk::CommonTime, expXmit4, ephI->xmit4);
388  TUASSERTE(gnsstk::CommonTime, expXmit5, ephI->xmit5);
389  TUASSERTE(uint16_t, 81, ephI->iodnav1);
390  TUASSERTE(uint16_t, 81, ephI->iodnav2);
391  TUASSERTE(uint16_t, 81, ephI->iodnav3);
392  TUASSERTE(uint16_t, 81, ephI->iodnav4);
398  ephI->dvsE5b);
400  ephI->dvsE1B);
401  }
402  ephICount++;
403  }
404  else if ((ephF = dynamic_cast<gnsstk::GalFNavEph*>(ti.second.get()))
405  != nullptr)
406  {
407  if (ephFCount == 0)
408  {
409  static const gnsstk::CommonTime expToc =
410  gnsstk::CivilTime(2020,5,29,0,10,0,gnsstk::TimeSystem::GAL);
411  // yes, these are supposed to be GPS, see
412  // RinexNavDataFactory::fixTimeGalileo.
413  static const gnsstk::CommonTime expToe =
414  gnsstk::GPSWeekSecond(2107,432600);
415  static const gnsstk::CommonTime expXmit1 =
416  gnsstk::GPSWeekSecond(2107,433264);
417  static const gnsstk::CommonTime expXmit2 = expXmit1+10.0;
418  static const gnsstk::CommonTime expXmit3 = expXmit2+10.0;
419  static const gnsstk::CommonTime expXmit4 = expXmit3+10.0;
420  static const gnsstk::CommonTime expEnd = expToe + (3600.0*4.0);
421  static const gnsstk::NavMessageID expNMID(
422  gnsstk::NavSatelliteID(10, 10,
428  // NavData
429  TUASSERTE(gnsstk::CommonTime, expXmit1, ephF->timeStamp);
430  TUASSERTE(gnsstk::NavMessageID, expNMID, ephF->signal);
431  // OrbitData doesn't actually have data.
432  // OrbitDataKepler
433  TUASSERTE(gnsstk::CommonTime, expXmit1, ephF->xmitTime);
434  TUASSERTE(gnsstk::CommonTime, expToe, ephF->Toe);
435  TUASSERTE(gnsstk::CommonTime, expToc, ephF->Toc);
437  ephF->health);
438  TUASSERTFE(-4.507601261139e-07, ephF->Cuc);
439  TUASSERTFE( 2.101063728333e-06, ephF->Cus);
440  TUASSERTFE( 3.041875000000e+02, ephF->Crc);
441  TUASSERTFE(-5.968750000000e+00, ephF->Crs);
442  TUASSERTFE( 6.519258022308e-08, ephF->Cic);
443  TUASSERTFE( 5.774199962616e-08, ephF->Cis);
444  TUASSERTFE(-2.375150555491e+00, ephF->M0);
445  TUASSERTFE( 2.890120385115e-09, ephF->dn);
446  TUASSERTFE(0, ephF->dndot);
447  TUASSERTFE( 4.586749710143e-04, ephF->ecc);
448  TUASSERTFE( 5.440611391068e+03*5.440611391068e+03, ephF->A);
449  TUASSERTFE( 5.440611391068e+03, ephF->Ahalf);
450  TUASSERTFE(0, ephF->Adot);
451  TUASSERTFE( 2.789971923884e+00, ephF->OMEGA0);
452  TUASSERTFE( 9.883643686117e-01, ephF->i0);
453  TUASSERTFE( 5.035283685377e-01, ephF->w);
454  TUASSERTFE(-5.772026142343e-09, ephF->OMEGAdot);
455  TUASSERTFE( 2.103659054415e-10, ephF->idot);
456  TUASSERTFE( 3.116308012977e-03, ephF->af0);
457  TUASSERTFE( 2.346354222027e-10, ephF->af1);
458  TUASSERTFE( 3.469446951954e-18, ephF->af2);
459  TUASSERTE(gnsstk::CommonTime, expXmit1, ephF->beginFit);
460  TUASSERTE(gnsstk::CommonTime, expEnd, ephF->endFit);
461  // GalFNavEph
462  TUASSERTFE(-1.559965312481e-08, ephF->bgdE5aE1);
463  TUASSERTE(unsigned, 107, ephF->sisaIndex);
464  TUASSERTE(unsigned, 10, ephF->svid);
465  TUASSERTE(gnsstk::CommonTime, expXmit2, ephF->xmit2);
466  TUASSERTE(gnsstk::CommonTime, expXmit3, ephF->xmit3);
467  TUASSERTE(gnsstk::CommonTime, expXmit4, ephF->xmit4);
468  TUASSERTE(uint16_t, 81, ephF->iodnav1);
469  TUASSERTE(uint16_t, 81, ephF->iodnav2);
470  TUASSERTE(uint16_t, 81, ephF->iodnav3);
471  TUASSERTE(uint16_t, 81, ephF->iodnav4);
475  ephF->dvsE5a);
476  }
477  ephFCount++;
478  }
479  else if ((ephL = dynamic_cast<gnsstk::GPSLNavEph*>(ti.second.get()))
480  != nullptr)
481  {
482  if (ephLCount == 0)
483  {
484  static const gnsstk::CommonTime expToc =
486  static const gnsstk::CommonTime expToe =
487  gnsstk::GPSWeekSecond(2107,4.392000000000e+05);
488  static const gnsstk::CommonTime expXmit1 =
489  gnsstk::GPSWeekSecond(2107,4.320000000000e+05);
490  static const gnsstk::CommonTime expTS =
491  gnsstk::GPSWeekSecond(2107,4.320180000000e+05);
492  static const gnsstk::CommonTime expEnd = expToe + (3600.0*2.0);
493  static const gnsstk::NavMessageID expNMID(
500  // NavData
501  TUASSERTE(gnsstk::CommonTime, expTS, ephL->timeStamp);
502  TUASSERTE(gnsstk::NavMessageID, expNMID, ephL->signal);
503  // OrbitData doesn't actually have data.
504  // OrbitDataKepler
505  TUASSERTE(gnsstk::CommonTime, expXmit1, ephL->xmitTime);
506  TUASSERTE(gnsstk::CommonTime, expToe, ephL->Toe);
507  TUASSERTE(gnsstk::CommonTime, expToc, ephL->Toc);
509  ephL->health);
510  TUASSERTFE(-1.315027475357e-06, ephL->Cuc);
511  TUASSERTFE( 3.149732947350e-06, ephL->Cus);
512  TUASSERTFE( 3.250937500000e+02, ephL->Crc);
513  TUASSERTFE(-2.712500000000e+01, ephL->Crs);
514  TUASSERTFE( 2.365559339523e-07, ephL->Cic);
515  TUASSERTFE( 1.490116119385e-08, ephL->Cis);
516  TUASSERTFE(-1.365560667506e+00, ephL->M0);
517  TUASSERTFE( 4.307322274405e-09, ephL->dn);
518  TUASSERTFE(0, ephL->dndot);
519  TUASSERTFE( 9.911696310155e-03, ephL->ecc);
520  TUASSERTFE( 5.153623668671e+03*5.153623668671e+03, ephL->A);
521  TUASSERTFE( 5.153623668671e+03, ephL->Ahalf);
522  TUASSERTFE(0, ephL->Adot);
523  TUASSERTFE( 3.072919475362e+00, ephL->OMEGA0);
524  TUASSERTFE( 9.804866571591e-01, ephL->i0);
525  TUASSERTFE( 7.817788821256e-01, ephL->w);
526  TUASSERTFE(-8.079265105250e-09, ephL->OMEGAdot);
527  TUASSERTFE( 1.810789712374e-10, ephL->idot);
528  TUASSERTFE(-3.862413577735e-04, ephL->af0);
529  TUASSERTFE(-3.637978807092e-12, ephL->af1);
530  TUASSERTFE( 0.000000000000e+00, ephL->af2);
531  TUASSERTE(gnsstk::CommonTime, expXmit1, ephL->beginFit);
532  TUASSERTE(gnsstk::CommonTime, expEnd, ephL->endFit);
533  // GPSLNavData
534  TUASSERTE(uint32_t, 0, ephL->pre);
535  TUASSERTE(uint32_t, 0, ephL->tlm);
536  TUASSERTE(bool, false, ephL->isf);
537  TUASSERTE(bool, false, ephL->alert);
538  TUASSERTE(bool, true, ephL->asFlag);
539  // GPSLNavEph
540  TUASSERTE(uint32_t, 0, ephL->pre2);
541  TUASSERTE(uint32_t, 0, ephL->tlm2);
542  TUASSERTE(bool, false, ephL->isf2);
543  TUASSERTE(bool, false, ephL->alert2);
544  TUASSERTE(bool, true, ephL->asFlag2);
545  TUASSERTE(uint32_t, 0, ephL->pre3);
546  TUASSERTE(uint32_t, 0, ephL->tlm3);
547  TUASSERTE(bool, false, ephL->isf3);
548  TUASSERTE(bool, false, ephL->alert3);
549  TUASSERTE(bool, true, ephL->asFlag3);
550  TUASSERTE(uint16_t, 48, ephL->iodc);
551  TUASSERTE(uint16_t, 48, ephL->iode);
552  TUASSERTE(unsigned, 0, ephL->fitIntFlag);
553  TUASSERTE(unsigned, 0, ephL->healthBits);
554  TUASSERTE(unsigned, 0, ephL->uraIndex); // 2m
555  TUASSERTFE( 5.122274160385e-09, ephL->tgd);
558  TUASSERTE(bool, false, ephL->L2Pdata);
559  }
560  ephLCount++;
561  }
562  else if ((heaI=dynamic_cast<gnsstk::GalINavHealth*>(ti.second.get()))
563  != nullptr)
564  {
565  if (heaICount == 1)
566  {
567  static const gnsstk::CommonTime expXmit1 =
568  gnsstk::GPSWeekSecond(2107,433714);
569  static const gnsstk::NavMessageID expNMID(
576  // NavData
577  TUASSERTE(gnsstk::CommonTime, expXmit1, heaI->timeStamp);
578  TUASSERTE(gnsstk::NavMessageID, expNMID, heaI->signal);
579  // NavHealthData has nothing.
580  // GalINavHealth
584  heaI->dataValidityStatus);
585  TUASSERTE(unsigned, 107, heaI->sisaIndex);
586  }
587  heaICount++;
588  }
589  else if ((heaGalF = dynamic_cast<gnsstk::GalFNavHealth*>(
590  ti.second.get())) != nullptr)
591  {
592  if (heaGalFCount == 1)
593  {
594  static const gnsstk::CommonTime expXmit1 =
595  gnsstk::GPSWeekSecond(2107,433864);
596  static const gnsstk::NavMessageID expNMID(
603  // NavData
604  TUASSERTE(gnsstk::CommonTime, expXmit1, heaGalF->timeStamp);
605  TUASSERTE(gnsstk::NavMessageID, expNMID, heaGalF->signal);
606  // NavHealthData has nothing.
607  // GalFNavHealth
610  heaGalF->sigHealthStatus);
612  heaGalF->dataValidityStatus);
613  TUASSERTE(unsigned, 255, heaGalF->sisaIndex);
614  }
615  heaGalFCount++;
616  }
617  else if ((heaL=dynamic_cast<gnsstk::GPSLNavHealth*>(ti.second.get()))
618  != nullptr)
619  {
620  if (heaLCount == 0)
621  {
622  static const gnsstk::CommonTime expTS =
623  gnsstk::GPSWeekSecond(2107,4.320180000000e+05);
624  static const gnsstk::NavMessageID expNMID(
631  // NavData
632  TUASSERTE(gnsstk::CommonTime, expTS, heaL->timeStamp);
633  TUASSERTE(gnsstk::NavMessageID, expNMID, heaL->signal);
634  // NavHealthData has nothing.
635  // GPSLNavHealth
636  TUASSERTE(unsigned, 0, heaL->svHealth);
637  }
638  heaLCount++;
639  }
640  else if ((iono=dynamic_cast<gnsstk::GalINavIono*>(ti.second.get()))
641  != nullptr)
642  {
643  if (ionoCount == 0)
644  {
645  static const gnsstk::CommonTime expTS =
646  gnsstk::GPSWeekSecond(2107,439200);
647  static const gnsstk::NavMessageID expNMID(
654  // NavData
655  TUASSERTE(gnsstk::CommonTime, expTS, iono->timeStamp);
656  TUASSERTE(gnsstk::NavMessageID, expNMID, iono->signal);
657  // GalINavIono
658  TUASSERTFE(0.4575e+02, iono->ai[0]);
659  TUASSERTFE(0.1641e+00, iono->ai[1]);
660  TUASSERTFE(0.6714e-03, iono->ai[2]);
661  TUASSERTE(bool, false, iono->idf[0]);
662  TUASSERTE(bool, false, iono->idf[1]);
663  TUASSERTE(bool, false, iono->idf[2]);
664  TUASSERTE(bool, false, iono->idf[3]);
665  TUASSERTE(bool, false, iono->idf[4]);
666  }
667  ionoCount++;
668  }
669  else if ((iscL = dynamic_cast<gnsstk::GPSLNavISC*>(ti.second.get()))
670  != nullptr)
671  {
672  static const gnsstk::CommonTime expTS =
673  gnsstk::GPSWeekSecond(2107,4.320180000000e+05);
674  static const gnsstk::NavMessageID expNMID(
681  // NavData
682  TUASSERTE(gnsstk::CommonTime, expTS, iscL->timeStamp);
683  TUASSERTE(gnsstk::NavMessageID, expNMID, iscL->signal);
684  // InterSigCorr fields
685  TUASSERTFE(5.122274160385e-09, iscL->isc);
686  // GPSLNavISC fields
687  TUASSERTE(uint32_t, 0, iscL->pre);
688  TUASSERTE(uint32_t, 0, iscL->tlm);
689  TUASSERTE(bool, false, iscL->isf);
690  TUASSERTE(bool, false, iscL->alert);
691  TUASSERTE(bool, true, iscL->asFlag);
692  iscLCount++;
693  }
694  else if ((iscI = dynamic_cast<gnsstk::GalINavISC*>(ti.second.get()))
695  != nullptr)
696  {
697  if (iscICount == 0)
698  {
699  static const gnsstk::CommonTime expTS =
700  gnsstk::GPSWeekSecond(2107,433714);
701  static const gnsstk::NavMessageID expNMID(
708  // NavData
709  TUASSERTE(gnsstk::CommonTime, expTS, iscI->timeStamp);
710  TUASSERTE(gnsstk::NavMessageID, expNMID, iscI->signal);
711  // InterSigCorr fields
712  TUASSERTE(bool, true, std::isnan(iscI->isc));
713  // GalINavISC fields
714  TUASSERTFE(-1.862645149231e-09, iscI->bgdE1E5a);
715  TUASSERTFE(-2.095475792885e-09, iscI->bgdE1E5b);
716  }
717  iscICount++;
718  }
719  else if ((timeR = dynamic_cast<gnsstk::RinexTimeOffset*>(
720  ti.second.get())) != nullptr)
721  {
722  if (timeRCount == 0)
723  {
724  static const gnsstk::CommonTime expTS =
725  gnsstk::GPSWeekSecond(2108, 61440);
726  // Have to make this non-const to set it to the
727  // right truth value.
728  gnsstk::NavMessageID expNMID(
732  // NavData
733  TUASSERTE(gnsstk::CommonTime, expTS, timeR->timeStamp);
734  TUASSERTE(gnsstk::NavMessageID, expNMID, timeR->signal);
735  // TimeOffsetData has no data of its own
736  // TimeSystemCorrection
737  // Note that the TIME SYSTEM CORR data doesn't
738  // come out in the same order it's in the file.
739  // Probably not good for round-trips.
742  timeR->type);
744  timeR->frTS);
746  timeR->toTS);
747  TUASSERTFE(-.931322574615e-09, timeR->A0);
748  TUASSERTFE(-.355271367880e-14, timeR->A1);
749  TUASSERTE(gnsstk::CommonTime, expTS, timeR->refTime);
750  TUASSERTE(std::string, "", timeR->geoProvider);
751  TUASSERTE(int, 0, timeR->geoUTCid);
752  // RinexTimeOffset
753  TUASSERTFE(18, timeR->deltatLS);
754  }
755  timeRCount++;
756  }
757  else
758  {
759  otherCount++;
760  }
761  }
762  }
763  }
764  TUASSERTE(unsigned, 36, ephICount);
765  TUASSERTE(unsigned, 3, ephFCount);
766  TUASSERTE(unsigned, 1, ephLCount);
767  TUASSERTE(unsigned, 52, heaICount);
768  TUASSERTE(unsigned, 39, heaGalFCount);
769  TUASSERTE(unsigned, 39, iscICount);
770  TUASSERTE(unsigned, 1, heaLCount);
771  TUASSERTE(unsigned, 1, ionoCount);
772  TUASSERTE(unsigned, 1, iscLCount);
773  TUASSERTE(unsigned, 4, timeRCount);
774  TUASSERTE(unsigned, 0, otherCount);
775 
776 
777  // test RINEX 3 BeiDou
778  TestClass f9;
779  std::string f9name = gnsstk::getPathData() + gnsstk::getFileSep() +
780  "test_input_rinex3_nav_BeiDou.14n";
781  // this should implicitly load into the data map
782  TUASSERT(f9.addDataSource(f9name));
783  // 1 ephemeris
784  // 1 health
785  // 1 time offset
786  // 1 ISC
787  TUASSERTE(size_t, 4, f9.size());
788  unsigned eph2Count = 0, hea2Count = 0, isc2Count = 0;
789  timeRCount = 0;
790  otherCount = 0;
791  for (auto& nmti : f9.getData())
792  {
793  for (auto& sati : nmti.second)
794  {
795  for (auto& ti : sati.second)
796  {
797  // Count each data type and spot check the first one of each.
798  gnsstk::BDSD2NavEph *eph2;
800  gnsstk::BDSD2NavISC *isc2;
801  if ((eph2 = dynamic_cast<gnsstk::BDSD2NavEph*>(ti.second.get()))
802  != nullptr)
803  {
804  if (eph2Count == 0)
805  {
806  static const gnsstk::CommonTime expToc =
808  static const gnsstk::CommonTime expToe =
809  gnsstk::BDSWeekSecond(435,5.184000000000e+05);
810  static const gnsstk::CommonTime expXmit1 =
811  gnsstk::BDSWeekSecond(435,5.184000000000e+05);
812  static const gnsstk::CommonTime expTS =
813  gnsstk::BDSWeekSecond(435,5.184000000000e+05);
814  static const gnsstk::CommonTime expBeg = expToe-(3600.0*2.0);
815  static const gnsstk::CommonTime expEnd = expToe+(3600.0*2.0);
816  static const gnsstk::NavMessageID expNMID(
823  // NavData
824  TUASSERTE(gnsstk::CommonTime, expTS, eph2->timeStamp);
825  TUASSERTE(gnsstk::NavMessageID, expNMID, eph2->signal);
826  // OrbitData doesn't actually have data.
827  // OrbitDataKepler
828  TUASSERTE(gnsstk::CommonTime, expXmit1, eph2->xmitTime);
829  TUASSERTE(gnsstk::CommonTime, expToe, eph2->Toe);
830  TUASSERTE(gnsstk::CommonTime, expToc, eph2->Toc);
832  eph2->health);
833  TUASSERTFE( 1.447647809982e-05, eph2->Cuc);
834  TUASSERTFE( 8.092261850834e-06, eph2->Cus);
835  TUASSERTFE(-2.506406250000e+02, eph2->Crc);
836  TUASSERTFE( 4.365468750000e+02, eph2->Crs);
837  TUASSERTFE(-2.654269337654e-08, eph2->Cic);
838  TUASSERTFE(-3.864988684654e-08, eph2->Cis);
839  TUASSERTFE(-3.118148933476e+00, eph2->M0);
840  TUASSERTFE( 1.318269196918e-09, eph2->dn);
841  TUASSERTFE(0, eph2->dndot);
842  TUASSERTFE( 2.822051756084e-04, eph2->ecc);
843  TUASSERTFE( 6.493480609894e+03*6.493480609894e+03, eph2->A);
844  TUASSERTFE( 6.493480609894e+03, eph2->Ahalf);
845  TUASSERTFE(0, eph2->Adot);
846  TUASSERTFE( 3.076630958509e+00, eph2->OMEGA0);
847  TUASSERTFE( 1.103024081152e-01, eph2->i0);
848  TUASSERTFE( 2.587808789012e+00, eph2->w);
849  TUASSERTFE(-3.039412318009e-10, eph2->OMEGAdot);
850  TUASSERTFE( 2.389385241772e-10, eph2->idot);
851  TUASSERTFE( 2.969256602228e-04, eph2->af0);
852  TUASSERTFE( 2.196998138970e-11, eph2->af1);
853  TUASSERTFE( 0.000000000000e+00, eph2->af2);
854  TUASSERTE(gnsstk::CommonTime, expBeg, eph2->beginFit);
855  TUASSERTE(gnsstk::CommonTime, expEnd, eph2->endFit);
856  }
857  eph2Count++;
858  }
859  else if ((hea2 = dynamic_cast<gnsstk::BDSD2NavHealth*>(
860  ti.second.get())) != nullptr)
861  {
862  if (hea2Count == 0)
863  {
864  static const gnsstk::CommonTime expTS =
865  gnsstk::BDSWeekSecond(435,5.184000000000e+05);
866  static const gnsstk::NavMessageID expNMID(
873  // NavData
874  TUASSERTE(gnsstk::CommonTime, expTS, hea2->timeStamp);
875  TUASSERTE(gnsstk::NavMessageID, expNMID, hea2->signal);
876  // NavHealthData has nothing.
877  // BDSD2NavHealth
878  TUASSERTE(bool, false, hea2->isAlmHealth);
879  TUASSERTE(bool, false, hea2->satH1);
880  TUASSERTE(unsigned, 255, hea2->svHealth);
881  }
882  hea2Count++;
883  }
884  else if ((isc2 = dynamic_cast<gnsstk::BDSD2NavISC*>(
885  ti.second.get())) != nullptr)
886  {
887  if (isc2Count == 0)
888  {
889  static const gnsstk::CommonTime expTS =
890  gnsstk::BDSWeekSecond(435,5.184000000000e+05);
891  static const gnsstk::NavMessageID expNMID(
898  // NavData
899  TUASSERTE(gnsstk::CommonTime, expTS, isc2->timeStamp);
900  TUASSERTE(gnsstk::NavMessageID, expNMID, isc2->signal);
901  // InterSigCorr fields
902  TUASSERTE(bool, true, std::isnan(isc2->isc));
903  // GalINavISC fields
904  TUASSERTFE( 1.420000000000e-08, isc2->tgd1);
905  TUASSERTFE(-1.040000000000e-08, isc2->tgd2);
906  }
907  isc2Count++;
908  }
909  else if ((timeR = dynamic_cast<gnsstk::RinexTimeOffset*>(
910  ti.second.get())) != nullptr)
911  {
912  if (timeRCount == 0)
913  {
914  static const gnsstk::CommonTime expTS =
915  gnsstk::BDSWeekSecond(435, 14);
916  // Have to make this non-const to set it to the
917  // right truth value.
918  static gnsstk::NavMessageID expNMID(
922  // NavData
923  TUASSERTE(gnsstk::CommonTime, expTS, timeR->timeStamp);
924  TUASSERTE(gnsstk::NavMessageID, expNMID, timeR->signal);
925  // TimeOffsetData has no data of its own
926  // TimeSystemCorrection
927  // Note that the TIME SYSTEM CORR data doesn't
928  // come out in the same order it's in the file.
929  // Probably not good for round-trips.
932  timeR->type);
934  timeR->frTS);
936  timeR->toTS);
937  TUASSERTFE(-9.3132257462e-10, timeR->A0);
938  TUASSERTFE(9.769962617e-15, timeR->A1);
939  TUASSERTE(gnsstk::CommonTime, expTS, timeR->refTime);
940  TUASSERTE(std::string, "", timeR->geoProvider);
941  TUASSERTE(int, 0, timeR->geoUTCid);
942  // RinexTimeOffset
943  TUASSERTFE(0, timeR->deltatLS);
944  }
945  timeRCount++;
946  }
947  else
948  {
949  otherCount++;
950  }
951  }
952  }
953  }
954  TUASSERTE(unsigned, 1, eph2Count);
955  TUASSERTE(unsigned, 1, hea2Count);
956  TUASSERTE(unsigned, 1, isc2Count);
957  TUASSERTE(unsigned, 1, timeRCount);
958  TUASSERTE(unsigned, 0, otherCount);
959 
960  // Test RINEX 2 mixed (GLONASS in particular)
961  TestClass f10;
962  std::string f10name = gnsstk::getPathData() + gnsstk::getFileSep() +
963  "mixed.06n";
964  // this should implicitly load into the data map
965  TUASSERT(f10.addDataSource(f10name));
966  // 4 ephemerides
967  // 5 health
968  // 1 iono
969  // 2 ISC
970  // 2 time offset (2 duplicates)
971  ephFCount = ephLCount = heaFCount = heaLCount = iscFCount = iscLCount = 0;
972  unsigned ionoLCount = 0;
973  timeRCount = 0;
974  otherCount = 0;
975  for (auto& nmti : f10.getData())
976  {
977  for (auto& sati : nmti.second)
978  {
979  for (auto& ti : sati.second)
980  {
981  gnsstk::GPSLNavEph *ephL;
982  gnsstk::GPSLNavHealth *heaL;
983  gnsstk::GPSLNavISC *iscL;
984  gnsstk::GPSLNavIono *ionoL;
985  gnsstk::GLOFNavEph *ephF;
986  gnsstk::GLOFNavHealth *heaF;
987  gnsstk::GLOFNavISC *iscF;
988  if ((ephF = dynamic_cast<gnsstk::GLOFNavEph*>(ti.second.get()))
989  != nullptr)
990  {
991  if (ephFCount == 0)
992  {
993  static const gnsstk::CommonTime expToe =
994  gnsstk::CivilTime(2006, 10, 1, 0, 15, 0,
996  static const gnsstk::CommonTime expTS =
997  gnsstk::CivilTime(2006, 10, 1, 0, 1, 30,
999  static const gnsstk::NavMessageID expNMID(
1003  gnsstk::XmitAnt::Standard, 7, false,
1006  // NavData
1007  TUASSERTE(gnsstk::CommonTime, expTS, ephF->timeStamp);
1008  TUASSERTE(gnsstk::NavMessageID, expNMID, ephF->signal);
1009  // GLOFNavData
1010  TUASSERTE(gnsstk::CommonTime, expTS+2.0, ephF->xmit2);
1013  ephF->satType);
1014  TUASSERTE(unsigned, 1, ephF->slot);
1015  TUASSERTE(bool, false, ephF->lhealth);
1017  ephF->health);
1018  TUASSERTE(gnsstk::CommonTime, expTS, ephF->beginFit);
1019  TUASSERTE(gnsstk::CommonTime, expToe+930.0, ephF->endFit);
1020  // GLOFNavEph
1021  TUASSERTE(gnsstk::CommonTime, expTS, ephF->ref);
1022  TUASSERTE(gnsstk::CommonTime, expTS+4.0, ephF->xmit3);
1023  TUASSERTE(gnsstk::CommonTime, expTS+6.0, ephF->xmit4);
1024  // 1 um tolerance.
1025  TUASSERTFEPS( 0.157594921875E+05, ephF->pos[0], 1e-9);
1026  TUASSERTFEPS(-0.813711474609E+04, ephF->pos[1], 1e-9);
1027  TUASSERTFEPS( 0.183413398438E+05, ephF->pos[2], 1e-9);
1028  TUASSERTFEPS(-0.145566368103E+01, ephF->vel[0], 1e-9);
1029  TUASSERTFEPS( 0.205006790161E+01, ephF->vel[1], 1e-9);
1030  TUASSERTFEPS( 0.215388488770E+01, ephF->vel[2], 1e-9);
1031  TUASSERTFEPS( 0.000000000000E+00, ephF->acc[0], 1e-9);
1032  TUASSERTFEPS( 0.931322574615E-09, ephF->acc[1], 1e-9);
1033  TUASSERTFEPS(-0.186264514923E-08, ephF->acc[2], 1e-9);
1034  TUASSERTFE(0.137668102980E-04, ephF->clkBias);
1035  TUASSERTFE(-0.454747350886E-11, ephF->freqBias);
1036  TUASSERTE(unsigned, 0, ephF->healthBits);
1037  TUASSERTE(unsigned, -1, ephF->tb);
1038  TUASSERTE(unsigned, -1, ephF->P1);
1039  TUASSERTE(unsigned, -1, ephF->P2);
1040  TUASSERTE(unsigned, -1, ephF->P3);
1041  TUASSERTE(unsigned, -1, ephF->P4);
1042  TUASSERTE(unsigned, 0, ephF->interval);
1045  ephF->opStatus);
1046  TUASSERTE(int, 1, isnan(ephF->tauDelta));
1047  TUASSERTE(unsigned, 1, ephF->aod);
1048  TUASSERTE(unsigned, -1, ephF->accIndex);
1049  TUASSERTE(unsigned, -1, ephF->dayCount);
1050  TUASSERTE(gnsstk::CommonTime, expToe, ephF->Toe);
1051  TUASSERTFE(60, ephF->step);
1052  }
1053  ephFCount++;
1054  }
1055  else if ((ephL = dynamic_cast<gnsstk::GPSLNavEph*>(ti.second.get()))
1056  != nullptr)
1057  {
1058  ephLCount++;
1059  }
1060  else if ((heaF=dynamic_cast<gnsstk::GLOFNavHealth*>(ti.second.get()))
1061  != nullptr)
1062  {
1063  if (heaFCount == 0)
1064  {
1065  static const gnsstk::CommonTime expTS =
1066  gnsstk::CivilTime(2006, 10, 1, 0, 1, 30,
1068  static const gnsstk::NavMessageID expNMID(
1072  gnsstk::XmitAnt::Standard, 7, false,
1075  // NavData
1076  TUASSERTE(gnsstk::CommonTime, expTS, heaF->timeStamp);
1077  TUASSERTE(gnsstk::NavMessageID, expNMID, heaF->signal);
1078  // GLOFNavHealth
1079  TUASSERTE(bool, true, heaF->healthBits.is_valid());
1080  TUASSERTE(bool, false, heaF->ln.is_valid());
1081  TUASSERTE(bool, false, heaF->Cn.is_valid());
1082  TUASSERTE(unsigned,0,static_cast<unsigned>(heaF->healthBits));
1083  }
1084  heaFCount++;
1085  }
1086  else if ((heaL=dynamic_cast<gnsstk::GPSLNavHealth*>(ti.second.get()))
1087  != nullptr)
1088  {
1089  heaLCount++;
1090  }
1091  else if ((iscF = dynamic_cast<gnsstk::GLOFNavISC*>(ti.second.get()))
1092  != nullptr)
1093  {
1094  iscFCount++;
1095  }
1096  else if ((iscL = dynamic_cast<gnsstk::GPSLNavISC*>(ti.second.get()))
1097  != nullptr)
1098  {
1099  iscLCount++;
1100  }
1101  else if ((ionoL = dynamic_cast<gnsstk::GPSLNavIono*>(
1102  ti.second.get())) != nullptr)
1103  {
1104  ionoLCount++;
1105  }
1106  else if ((timeR = dynamic_cast<gnsstk::RinexTimeOffset*>(
1107  ti.second.get())) != nullptr)
1108  {
1109  if (timeRCount == 0)
1110  {
1111  static const gnsstk::CommonTime expTS =
1112  gnsstk::GPSWeekSecond(1395, 147456);
1113  // Have to make this non-const to set it to the
1114  // right truth value.
1115  static gnsstk::NavMessageID expNMID(
1119  // NavData
1120  TUASSERTE(gnsstk::CommonTime, expTS, timeR->timeStamp);
1121  TUASSERTE(gnsstk::NavMessageID, expNMID, timeR->signal);
1122  // TimeOffsetData has no data of its own
1123  // TimeSystemCorrection
1124  // Note that the TIME SYSTEM CORR data doesn't
1125  // come out in the same order it's in the file.
1126  // Probably not good for round-trips.
1129  timeR->type);
1131  timeR->frTS);
1133  timeR->toTS);
1134  TUASSERTFE(0.2793967723E-08, timeR->A0);
1135  TUASSERTFE(0, timeR->A1);
1136  TUASSERTE(gnsstk::CommonTime, expTS, timeR->refTime);
1137  TUASSERTE(std::string, "", timeR->geoProvider);
1138  TUASSERTE(int, 0, timeR->geoUTCid);
1139  // RinexTimeOffset
1140  TUASSERTFE(14, timeR->deltatLS);
1141  }
1142  timeRCount++;
1143  }
1144  else
1145  {
1146  otherCount++;
1147  ti.second->dump(std::cerr,gnsstk::DumpDetail::Full);
1148  }
1149  }
1150  }
1151  }
1152  TUASSERTE(unsigned, 2, ephLCount);
1153  TUASSERTE(unsigned, 2, ephFCount);
1154  TUASSERTE(unsigned, 3, heaLCount);
1155  TUASSERTE(unsigned, 2, heaFCount);
1156  TUASSERTE(unsigned, 0, iscFCount);
1157  TUASSERTE(unsigned, 2, iscLCount);
1158  TUASSERTE(unsigned, 2, timeRCount);
1159  TUASSERTE(unsigned, 1, ionoLCount);
1160  TUASSERTE(unsigned, 0, otherCount);
1161  TUASSERTE(size_t, 14, f10.size());
1162  TURETURN();
1163 }
1164 
1165 
1166 unsigned RinexNavDataFactory_T ::
1168 {
1169  TUDEF("RinexNavDataFactory", "decodeSISA");
1170  TUASSERTE(unsigned, 255,
1172  // test all SISA indices for which there's a SISA value in meters
1173  for (unsigned index = 0; index < 50; index++)
1174  {
1175  double accuracy = index / 100.0;
1176  TUASSERTE(unsigned, index,
1178  }
1179  for (unsigned index = 50; index < 75; index++)
1180  {
1181  double accuracy = 0.5 + ((index-50) * 0.02);
1182  TUASSERTE(unsigned, index,
1184  }
1185  for (unsigned index = 75; index < 100; index++)
1186  {
1187  double accuracy = 1.0 + ((index-75) * 0.04);
1188  TUASSERTE(unsigned, index,
1190  }
1191  for (unsigned index = 100; index < 126; index++)
1192  {
1193  double accuracy = 2.0 + ((index-100) * 0.16);
1194  // std::cerr /*<< std::setprecision(20)*/ << "index=" << index << " accuracy=" << accuracy << std::endl;
1195  TUASSERTE(unsigned, index,
1197  }
1198  TURETURN();
1199 }
1200 
1201 
1202 unsigned RinexNavDataFactory_T ::
1204 {
1205  TUDEF("RinexNavDataFactory", "encodeSISA");
1206  for (unsigned idx = 0; idx <= 125; idx++)
1207  {
1208  double accuracy;
1209  unsigned sisa;
1212  TUASSERTE(unsigned, idx, sisa);
1213  }
1214  // 126-254 are spare
1216  TURETURN();
1217 }
1218 
1219 
1220 unsigned RinexNavDataFactory_T ::
1222 {
1223  TUDEF("RinexNavDataFactory", "loadIntoMap(QZSS)");
1224  TestClass uut;
1225  std::string fname = gnsstk::getPathData() + gnsstk::getFileSep() +
1226  "qzsssampl_U_20141330729_01D_RN.rnx";
1227  gnsstk::NavMessageID nmidExp(
1232  gnsstk::CommonTime expTS = gnsstk::CivilTime(2014,5,13,7,15,0,
1234  gnsstk::CommonTime expXT = gnsstk::CivilTime(2014,5,13,7,15,0,
1236  gnsstk::CommonTime expti2 = gnsstk::CivilTime(2014,5,13,7,15,0,
1238  gnsstk::CommonTime exptf2 = gnsstk::CivilTime(2014,5,13,10,30,0,
1240  gnsstk::CommonTime toeExp = gnsstk::GPSWeekSecond(1792,202512,
1242  gnsstk::CommonTime beginExp = gnsstk::GPSWeekSecond(1792, 198900,
1244  gnsstk::CommonTime endExp = gnsstk::GPSWeekSecond(1792, 210600,
1246  TUASSERT(uut.addDataSource(fname));
1247  TUASSERTE(size_t, 3, uut.size());
1248  gnsstk::NavMessageMap &nmm(uut.getData());
1249  // uut.dump(std::cerr, gnsstk::DumpDetail::Full);
1250  TUASSERTE(gnsstk::CommonTime, expti2, uut.getInitialTime());
1251  TUASSERTE(gnsstk::CommonTime, exptf2, uut.getFinalTime());
1252  gnsstk::GPSLNavEph *eph;
1253  gnsstk::GPSLNavHealth *hea;
1254  gnsstk::GPSLNavISC *isc;
1255  unsigned heaCount = 0, ephCount = 0, iscCount = 0, otherCount = 0;
1256  for (const auto& nmti : nmm)
1257  {
1258  for (const auto& sati : nmti.second)
1259  {
1260  for (const auto& ti : sati.second)
1261  {
1262  if ((eph = dynamic_cast<gnsstk::GPSLNavEph*>(ti.second.get()))
1263  != nullptr)
1264  {
1265  ephCount++;
1267  // NavData fields
1268  TUASSERTE(gnsstk::CommonTime, expTS, eph->timeStamp);
1269  TUASSERTE(gnsstk::NavMessageID, nmidExp, eph->signal);
1270  // OrbitData has no fields
1271  // OrbitDataKepler fields
1272  TUASSERTE(gnsstk::CommonTime, expXT, eph->xmitTime);
1273  TUASSERTE(gnsstk::CommonTime, toeExp, eph->Toe);
1274  // same value as toe
1275  TUASSERTE(gnsstk::CommonTime, toeExp, eph->Toc);
1277  eph->health);
1278  TUASSERTFE(-1.654587686062e-05, eph->Cuc);
1279  TUASSERTFE( 1.197867095470e-05, eph->Cus);
1280  TUASSERTFE(-1.558437500000e+02, eph->Crc);
1281  TUASSERTFE(-4.927812500000e+02, eph->Crs);
1282  TUASSERTFE(-2.041459083557e-06, eph->Cis);
1283  TUASSERTFE(-8.381903171539e-07, eph->Cic);
1284  TUASSERTFE( 7.641996743610e-01, eph->M0);
1285  TUASSERTFE( 2.222949737636e-09, eph->dn);
1286  TUASSERTFE(0, eph->dndot);
1287  TUASSERTFE( 7.542252133135e-02, eph->ecc);
1288  TUASSERTFE( 6.492895933151e+03, eph->Ahalf);
1289  TUASSERTFE( 6.492895933151e+03 * 6.492895933151e+03, eph->A);
1290  TUASSERTFE(0, eph->Adot);
1291  TUASSERTFE(-9.211997910060e-01, eph->OMEGA0);
1292  TUASSERTFE( 7.082252892260e-01, eph->i0);
1293  TUASSERTFE(-1.575843337115e+00, eph->w);
1294  TUASSERTFE(-2.349740733276e-09, eph->OMEGAdot);
1295  TUASSERTFE(-6.793140104410e-10, eph->idot);
1296  TUASSERTFE( 3.323303535581e-04, eph->af0);
1297  TUASSERTFE(-1.818989403546e-11, eph->af1);
1298  TUASSERTFE(0, eph->af2);
1299  TUASSERTE(gnsstk::CommonTime, beginExp, eph->beginFit);
1300  TUASSERTE(gnsstk::CommonTime, endExp, eph->endFit);
1301  // GPSLNavData fields
1302  TUASSERTE(uint32_t, 0, eph->pre);
1303  TUASSERTE(uint32_t, 0, eph->tlm);
1304  TUASSERTE(bool, false, eph->isf);
1305  TUASSERTE(bool, false, eph->alert);
1306  TUASSERTE(bool, false, eph->asFlag);
1307  // GPSLNavEph fields
1308  TUASSERTE(uint32_t, 0, eph->pre2);
1309  TUASSERTE(uint32_t, 0, eph->tlm2);
1310  TUASSERTE(bool, false, eph->isf2);
1311  TUASSERTE(uint32_t, 0, eph->pre3);
1312  TUASSERTE(uint32_t, 0, eph->tlm3);
1313  TUASSERTE(bool, false, eph->isf3);
1314  TUASSERTE(uint16_t, 69, eph->iodc);
1315  TUASSERTE(uint16_t, 69, eph->iode);
1316  TUASSERTE(unsigned, 0, eph->fitIntFlag);
1317  TUASSERTE(unsigned, 1, eph->healthBits);
1318  TUASSERTE(unsigned, 0, eph->uraIndex);
1319  TUASSERTFE(-4.656612873077e-09, eph->tgd);
1320  TUASSERTE(bool, false, eph->alert2);
1321  TUASSERTE(bool, false, eph->alert3);
1322  TUASSERTE(bool, false, eph->asFlag2);
1323  TUASSERTE(bool, false, eph->asFlag3);
1326  TUASSERTE(bool, true, eph->L2Pdata);
1327  }
1328  else if ((hea=dynamic_cast<gnsstk::GPSLNavHealth*>(ti.second.get()))
1329  != nullptr)
1330  {
1331  heaCount++;
1332  }
1333  else if ((isc = dynamic_cast<gnsstk::GPSLNavISC*>(ti.second.get()))
1334  != nullptr)
1335  {
1336  iscCount++;
1338  // NavData fields
1339  TUASSERTE(gnsstk::CommonTime, expTS, isc->timeStamp);
1340  TUASSERTE(gnsstk::NavMessageID, nmidExp, isc->signal);
1341  // InterSigCorr fields
1342  TUASSERTFE(-4.656612873077e-09, isc->isc);
1343  // GPSLNavISC fields
1344  TUASSERTE(uint32_t, 0, isc->pre);
1345  TUASSERTE(uint32_t, 0, isc->tlm);
1346  TUASSERTE(bool, false, isc->isf);
1347  TUASSERTE(bool, false, isc->alert);
1348  TUASSERTE(bool, false, isc->asFlag);
1349  }
1350  else
1351  {
1352  otherCount++;
1353  }
1354  }
1355  }
1356  }
1357  TUASSERTE(unsigned, 1, ephCount);
1358  TUASSERTE(unsigned, 1, heaCount);
1359  TUASSERTE(unsigned, 1, iscCount);
1360  TUASSERTE(unsigned, 0, otherCount);
1361  TURETURN();
1362 }
1363 
1364 
1365 template <class NavClass>
1368  gnsstk::NavMessageMap& nmm)
1369 {
1370  for (auto& nmti : nmm)
1371  {
1372  for (auto& sati : nmti.second)
1373  {
1374  for (auto& ti : sati.second)
1375  {
1376  TUASSERT(dynamic_cast<NavClass*>(ti.second.get()) != nullptr);
1377  }
1378  }
1379  }
1380 }
1381 
1382 
1383 int main()
1384 {
1385  RinexNavDataFactory_T testClass;
1386  unsigned errorTotal = 0;
1387 
1388  errorTotal += testClass.constructorTest();
1389  errorTotal += testClass.loadIntoMapTest();
1390  errorTotal += testClass.loadIntoMapQZSSTest();
1391  errorTotal += testClass.decodeSISATest();
1392  errorTotal += testClass.encodeSISATest();
1393 
1394  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
1395  << std::endl;
1396 
1397  return errorTotal;
1398 }
TestClass::addDataSource
bool addDataSource(const std::string &source) override
Definition: NavDataFactory_T.cpp:76
gnsstk::NavDataPtr
std::shared_ptr< NavData > NavDataPtr
Factories instantiate these in response to find() requests.
Definition: NavData.hpp:62
gnsstk::GPSLNavL2Codes::Pcode
@ Pcode
P/Y-code is broadcast on L2.
gnsstk::NavMessageType::ISC
@ ISC
Inter-signal corrections.
gnsstk::GPSLNavEph::codesL2
GPSLNavL2Codes codesL2
Code on L2 in-phase component.
Definition: GPSLNavEph.hpp:108
gnsstk::GPSLNavEph::alert2
bool alert2
Alert flag from SF2 HOW.
Definition: GPSLNavEph.hpp:104
TUCSM
#define TUCSM(METHOD)
Definition: TestUtil.hpp:59
gnsstk::OrbitDataKepler::idot
double idot
Rate of inclination angle (rad/sec)
Definition: OrbitDataKepler.hpp:193
gnsstk::GalFNavEph::iodnav2
uint16_t iodnav2
IODnav for page type 2.
Definition: GalFNavEph.hpp:92
gnsstk::GalINavHealth::sisaIndex
uint8_t sisaIndex
Signal in space accuracy index (OS-SIS-ICD tbl 76)
Definition: GalINavHealth.hpp:97
gnsstk::NavMessageID
Class used to identify/categorize navigation message data.
Definition: NavMessageID.hpp:52
gnsstk::GPSLNavEph::isf2
bool isf2
Integrity status flag from subframe 2.
Definition: GPSLNavEph.hpp:96
gnsstk::GalDataValid::Valid
@ Valid
Navigation data valid.
gnsstk::GalDataValid
GalDataValid
Identify Galileo Data Validity Status (DVS) states.
Definition: GalDataValid.hpp:51
gnsstk::GPSLNavHealth::svHealth
uint8_t svHealth
6-bit or 8-bit health.
Definition: GPSLNavHealth.hpp:80
gnsstk::GLOFNavEph::xmit3
CommonTime xmit3
Transmit time for string 3.
Definition: GLOFNavEph.hpp:113
gnsstk::GLOFNavSatType::Unknown
@ Unknown
Unknown/Uninitialized value.
gnsstk::CarrierBand::G1
@ G1
GLONASS G1.
TUCATCH
#define TUCATCH(STATEMENT)
Definition: TestUtil.hpp:193
BDSD2NavEph.hpp
gnsstk::OrbitDataKepler::Cis
double Cis
Sine inclination (rad)
Definition: OrbitDataKepler.hpp:180
gnsstk::OrbitDataKepler::A
double A
Semi-major axis (m)
Definition: OrbitDataKepler.hpp:186
gnsstk::GLOFNavEph
Definition: GLOFNavEph.hpp:51
gnsstk::GalFNavEph::bgdE5aE1
double bgdE5aE1
Group delay in seconds between E5a and E1.
Definition: GalFNavEph.hpp:85
gnsstk::OrbitDataKepler::af2
double af2
SV clock drift rate (sec/sec**2)
Definition: OrbitDataKepler.hpp:197
gnsstk::GalFNavHealth::sigHealthStatus
GalHealthStatus sigHealthStatus
Signal health status (SHS)
Definition: GalFNavHealth.hpp:81
gnsstk::GLOFNavData::health
SVHealth health
SV health status.
Definition: GLOFNavData.hpp:71
gnsstk::NavType::BeiDou_D1
@ BeiDou_D1
gnsstk::TrackingCode::E1B
@ E1B
Galileo E1-B signal, supporting OS/HAS/SoL.
gnsstk::GalFNavEph::dvsE5a
GalDataValid dvsE5a
Data validity status for E5a.
Definition: GalFNavEph.hpp:96
gnsstk::GalFNavHealth
Definition: GalFNavHealth.hpp:53
gnsstk::NavMessageMap
std::map< NavMessageType, NavSatMap > NavMessageMap
Map nav message type to the rest of the storage.
Definition: NavData.hpp:71
gnsstk::NavType::GalINAV
@ GalINAV
gnsstk::GalINavEph::bgdE5aE1
double bgdE5aE1
Group delay in seconds between E5a and E1.
Definition: GalINavEph.hpp:85
gnsstk::OrbitDataKepler::ecc
double ecc
Eccentricity.
Definition: OrbitDataKepler.hpp:185
gnsstk::TimeSystemCorrection::type
CorrType type
Definition: TimeSystemCorr.hpp:164
gnsstk::RinexNavDataFactory::encodeSISA
static double encodeSISA(uint8_t sisa)
Definition: RinexNavDataFactory.cpp:1318
gnsstk::TimeSystemCorrection::A1
double A1
Definition: TimeSystemCorr.hpp:166
gnsstk::CarrierBand::E5b
@ E5b
Galileo E5b.
gnsstk::GLOFNavData::slot
unsigned slot
Slot number (n).
Definition: GLOFNavData.hpp:69
gnsstk::GPSLNavData::asFlag
bool asFlag
Anti-spoof flag from HOW.
Definition: GPSLNavData.hpp:84
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
gnsstk::NavMessageID::messageType
NavMessageType messageType
Definition: NavMessageID.hpp:97
gnsstk::NavSatelliteID
Definition: NavSatelliteID.hpp:57
BDSD1NavIono.hpp
gnsstk::GPSLNavEph::fitIntFlag
uint8_t fitIntFlag
Fit interval flag from subframe 2.
Definition: GPSLNavEph.hpp:100
gnsstk::TimeSystemCorrection::refTime
CommonTime refTime
reference time for polynominal
Definition: TimeSystemCorr.hpp:167
gnsstk::RinexNavDataFactory::decodeSISA
static uint8_t decodeSISA(double accuracy)
Definition: RinexNavDataFactory.cpp:1293
RinexNavDataFactory_T::loadIntoMapQZSSTest
unsigned loadIntoMapQZSSTest()
Exercise loadIntoMap with QZSS data.
Definition: RinexNavDataFactory_T.cpp:1221
gnsstk::GLOFNavEph::Toe
CommonTime Toe
Definition: GLOFNavEph.hpp:132
gnsstk::BDSD2NavHealth::satH1
bool satH1
Ephemeris health (autonomous satellite health flag).
Definition: BDSD2NavHealth.hpp:101
gnsstk::OrbitDataKepler::OMEGAdot
double OMEGAdot
Rate of Rt ascension (rad/sec)
Definition: OrbitDataKepler.hpp:192
gnsstk::GalINavHealth::sigHealthStatus
GalHealthStatus sigHealthStatus
Signal health status (SHS)
Definition: GalINavHealth.hpp:93
gnsstk::GPSLNavData::isf
bool isf
Integrity status flag.
Definition: GPSLNavData.hpp:82
gnsstk::GLOFNavEph::dayCount
unsigned dayCount
Days since Jan 1 of most recent leap year (N_T).
Definition: GLOFNavEph.hpp:131
gnsstk::TimeSystemCorrection::A0
double A0
Definition: TimeSystemCorr.hpp:166
gnsstk::GLOFNavEph::pos
Triple pos
Satellite position at tb in km.
Definition: GLOFNavEph.hpp:115
gnsstk::NavMessageType::Health
@ Health
SV health status information message.
GalFNavHealth.hpp
gnsstk::NavFit::endFit
CommonTime endFit
Time at end of fit interval.
Definition: NavFit.hpp:55
gnsstk::GalFNavEph::sisaIndex
uint8_t sisaIndex
Signal in space accuracy index (OS-SIS-ICD tbl 76)
Definition: GalFNavEph.hpp:86
GalINavHealth.hpp
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
RinexNavDataFactory_T::loadIntoMapTest
unsigned loadIntoMapTest()
Exercise loadIntoMap by loading data with different options in place.
Definition: RinexNavDataFactory_T.cpp:184
GPSLNavIono.hpp
gnsstk::OrbitDataKepler::Cuc
double Cuc
Cosine latitude (rad)
Definition: OrbitDataKepler.hpp:175
gnsstk::GPSLNavEph::L2Pdata
bool L2Pdata
Definition: GPSLNavEph.hpp:114
GPSLNavHealth.hpp
gnsstk::GPSLNavEph::tlm2
uint32_t tlm2
The TLM message from word 1 of subframe 2.
Definition: GPSLNavEph.hpp:94
gnsstk::GLOFNavHealth::Cn
ValidType< bool > Cn
The C_n health bit in strings 6,8,10,12,14.
Definition: GLOFNavHealth.hpp:82
gnsstk::GPSLNavData::tlm
uint32_t tlm
The TLM message from word 1 of the subframe.
Definition: GPSLNavData.hpp:81
gnsstk::NavType::GloCivilF
@ GloCivilF
gnsstk::BDSD2NavHealth::isAlmHealth
bool isAlmHealth
If true, svHealth is representative, otherwise satH1 is.
Definition: BDSD2NavHealth.hpp:99
gnsstk::OrbitDataKepler::w
double w
Argument of perigee (rad)
Definition: OrbitDataKepler.hpp:191
GalFNavEph.hpp
gnsstk::GalFNavEph::iodnav4
uint16_t iodnav4
IODnav for page type 4.
Definition: GalFNavEph.hpp:94
gnsstk::GPSLNavEph::asFlag2
bool asFlag2
Anti-spoof flag from SF2 HOW.
Definition: GPSLNavEph.hpp:106
main
int main()
Definition: RinexNavDataFactory_T.cpp:1383
gnsstk::GalFNavEph::xmit2
CommonTime xmit2
Transmit time for page type 2.
Definition: GalFNavEph.hpp:88
gnsstk::OrbitDataKepler::Toe
CommonTime Toe
Orbit epoch.
Definition: OrbitDataKepler.hpp:171
gnsstk::OrbitDataKepler::Crs
double Crs
Sine radius (m)
Definition: OrbitDataKepler.hpp:178
gnsstk::GPSLNavEph::tlm3
uint32_t tlm3
The TLM message from word 1 of subframe 3.
Definition: GPSLNavEph.hpp:95
gnsstk::GalINavEph::dvsE5b
GalDataValid dvsE5b
Data validity status for E5b.
Definition: GalINavEph.hpp:99
gnsstk::SVHealth
SVHealth
Identify different types of SV health states.
Definition: SVHealth.hpp:52
gnsstk::GLOFNavISC
Definition: GLOFNavISC.hpp:53
gnsstk::GLOFNavEph::opStatus
GLOFNavPCode opStatus
Operational status flag.
Definition: GLOFNavEph.hpp:127
gnsstk::NavData::signal
NavMessageID signal
Source signal identification for this navigation message data.
Definition: NavData.hpp:175
gnsstk::XmitAnt::Standard
@ Standard
Transmitting antenna is the primary for that signal.
gnsstk::GPSLNavEph::uraIndex
uint8_t uraIndex
4-bit URA index from subframe 1, word 3.
Definition: GPSLNavEph.hpp:102
gnsstk::GalFNavEph::svid
uint8_t svid
Definition: GalFNavEph.hpp:87
gnsstk::GLOFNavEph::xmit4
CommonTime xmit4
Transmit time for string 4.
Definition: GLOFNavEph.hpp:114
gnsstk::GLOFNavHealth
Definition: GLOFNavHealth.hpp:52
gnsstk::NeQuickIonoNavData::idf
bool idf[5]
Ionospheric disturbance flag for regions 1-5 (0-4).
Definition: NeQuickIonoNavData.hpp:132
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::NavType::GPSLNAV
@ GPSLNAV
gnsstk::InterSigCorr::isc
double isc
Definition: InterSigCorr.hpp:171
gnsstk::GalFNavHealth::sisaIndex
uint8_t sisaIndex
Signal in space accuracy index (OS-SIS-ICD tbl 76)
Definition: GalFNavHealth.hpp:85
gnsstk::GalINavHealth::dataValidityStatus
GalDataValid dataValidityStatus
Data Validity Status (DVS)
Definition: GalINavHealth.hpp:95
gnsstk::TimeSystemCorrection::CorrType
CorrType
Supported time system correction types, cf. RINEX version 3 spec.
Definition: TimeSystemCorr.hpp:64
gnsstk::GPSWeekSecond
Definition: GPSWeekSecond.hpp:56
gnsstk::GalINavEph::iodnav3
uint16_t iodnav3
IODnav for word type 3.
Definition: GalINavEph.hpp:95
gnsstk::GalFNavEph::xmit3
CommonTime xmit3
Transmit time for page type 3.
Definition: GalFNavEph.hpp:89
gnsstk::TrackingCode::Standard
@ Standard
Legacy Glonass civil signal.
gnsstk::OrbitDataKepler::xmitTime
CommonTime xmitTime
Time of transmission of the start of the data.
Definition: OrbitDataKepler.hpp:170
gnsstk::NavData::timeStamp
CommonTime timeStamp
Definition: NavData.hpp:173
gnsstk::GLOFNavEph::vel
Triple vel
Satellite velocity at tb in km/s.
Definition: GLOFNavEph.hpp:116
gnsstk::OrbitDataKepler::Adot
double Adot
Rate of semi-major axis (m/sec)
Definition: OrbitDataKepler.hpp:188
gnsstk::NeQuickIonoNavData::ai
double ai[3]
Definition: NeQuickIonoNavData.hpp:125
gnsstk::BDSD2NavISC::tgd1
double tgd1
Group delay differential on B1I.
Definition: BDSD2NavISC.hpp:99
gnsstk::OrbitDataKepler::M0
double M0
Mean anomaly (rad)
Definition: OrbitDataKepler.hpp:182
gnsstk::GalINavEph
Class containing data elements unique to GPS LNav ephemerides.
Definition: GalINavEph.hpp:52
gnsstk::TrackingCode::E5aI
@ E5aI
Galileo E5a I code.
gnsstk::GPSLNavL2Codes
GPSLNavL2Codes
Codes on L2 channel, per IS-GPS-200 20.3.3.3.1.2.
Definition: GPSLNavL2Codes.hpp:51
gnsstk::SatelliteSystem::GPS
@ GPS
RinexNavDataFactory_T::encodeSISATest
unsigned encodeSISATest()
Definition: RinexNavDataFactory_T.cpp:1203
gnsstk::TrackingCode::CA
@ CA
Legacy GPS civil code.
gnsstk::GPSLNavEph::isf3
bool isf3
Integrity status flag from subframe 3.
Definition: GPSLNavEph.hpp:97
gnsstk::GLOFNavPCode::Unknown
@ Unknown
Unknown/Uninitialized value.
GalINavISC.hpp
gnsstk::GalFNavEph::hsE5a
GalHealthStatus hsE5a
Health status for E5a.
Definition: GalFNavEph.hpp:95
gnsstk::GalINavEph::iodnav4
uint16_t iodnav4
IODnav for word type 4.
Definition: GalINavEph.hpp:96
gnsstk::GLOFNavEph::tauDelta
double tauDelta
Inter-frequency bias.
Definition: GLOFNavEph.hpp:128
gnsstk::NavSignalID::system
SatelliteSystem system
GNSS for this signal.
Definition: NavSignalID.hpp:94
gnsstk::NavDataFactoryWithStoreFile::addDataSource
bool addDataSource(const std::string &source) override
Definition: NavDataFactoryWithStoreFile.hpp:64
TUASSERT
#define TUASSERT(EXPR)
Definition: TestUtil.hpp:63
gnsstk::GPSLNavData::alert
bool alert
Alert flag from HOW.
Definition: GPSLNavData.hpp:83
gnsstk::TimeSystemCorrection::geoUTCid
int geoUTCid
Definition: TimeSystemCorr.hpp:169
gnsstk::GalINavIono
Class containing data elements unique to Galileo I/NAV iono data.
Definition: GalINavIono.hpp:50
TestUtil.hpp
gnsstk::SVHealth::Healthy
@ Healthy
Satellite is in a healthy and useable state.
gnsstk::GalFNavEph::xmit4
CommonTime xmit4
Transmit time for page type 4.
Definition: GalFNavEph.hpp:90
gnsstk::OrbitDataKepler::dndot
double dndot
Rate of correction to mean motion (rad/sec/sec)
Definition: OrbitDataKepler.hpp:184
RinexTimeOffset.hpp
gnsstk::CarrierBand::B1
@ B1
BeiDou B1.
gnsstk::NavDataFactoryWithStore::size
virtual size_t size() const
Return the number of nav messages in data.
Definition: NavDataFactoryWithStore.cpp:1005
gnsstk::OrbitDataKepler::Cus
double Cus
Sine latitude (rad)
Definition: OrbitDataKepler.hpp:176
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
gnsstk::TimeSystem::QZS
@ QZS
QZSS system Time.
gnsstk::GPSLNavEph::healthBits
uint8_t healthBits
6 SV health bits from subframe 1, word 3.
Definition: GPSLNavEph.hpp:101
gnsstk::GPSLNavISC::tlm
uint32_t tlm
The TLM message from word 1 of the subframe.
Definition: GPSLNavISC.hpp:69
gnsstk::GPSLNavEph::pre3
uint32_t pre3
The TLM preamble from word 1 of subframe 3.
Definition: GPSLNavEph.hpp:93
RinexNavDataFactory_T::decodeSISATest
unsigned decodeSISATest()
Definition: RinexNavDataFactory_T.cpp:1167
gnsstk::GLOFNavEph::P4
unsigned P4
Flag 1=ephemeris present/uploaded. 0=nope.
Definition: GLOFNavEph.hpp:125
gnsstk::TimeSystem::GAL
@ GAL
Galileo system time.
TestClass::getData
gnsstk::NavMessageMap & getData()
Grant access to protected data.
Definition: RinexNavDataFactory_T.cpp:111
gnsstk::GLOFNavEph::aod
unsigned aod
Age of data in days (E_n).
Definition: GLOFNavEph.hpp:129
GalINavIono.hpp
gnsstk::NavMessageType::Iono
@ Iono
Ionospheric correction data.
gnsstk::RinexTimeOffset::deltatLS
double deltatLS
Current or past leap second count (UTC only)
Definition: RinexTimeOffset.hpp:113
gnsstk::GalINavEph::hsE5b
GalHealthStatus hsE5b
Health status for E5b.
Definition: GalINavEph.hpp:97
gnsstk::OrbitDataKepler::Ahalf
double Ahalf
Square Root of semi-major axis (m**.5)
Definition: OrbitDataKepler.hpp:187
gnsstk::GLOFNavEph::P1
unsigned P1
Flag for interval between adjacent t_b.
Definition: GLOFNavEph.hpp:122
gnsstk::BDSD2NavHealth
Definition: BDSD2NavHealth.hpp:51
gnsstk::GLOFNavHealth::healthBits
ValidType< uint8_t > healthBits
The 3-bit B_n value.
Definition: GLOFNavHealth.hpp:80
gnsstk::operator<<
std::ostream & operator<<(std::ostream &s, const ObsEpoch &oe) noexcept
Definition: ObsEpochMap.cpp:54
gnsstk::GalINavISC::bgdE1E5a
double bgdE1E5a
Broadcast group delay for the E1,E5a pair.
Definition: GalINavISC.hpp:99
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::ValidType::is_valid
bool is_valid() const
Definition: ValidType.hpp:96
gnsstk::GalINavEph::iodnav2
uint16_t iodnav2
IODnav for word type 2.
Definition: GalINavEph.hpp:94
gnsstk::OrbitDataKepler::Toc
CommonTime Toc
Clock epoch.
Definition: OrbitDataKepler.hpp:172
gnsstk::GalINavISC::bgdE1E5b
double bgdE1E5b
Broadcast group delay for the E1,E5b pair.
Definition: GalINavISC.hpp:100
gnsstk::TimeSystemCorrection::toTS
TimeSystem toTS
Definition: TimeSystemCorr.hpp:165
RinexNavDataFactory_T::constructorTest
unsigned constructorTest()
Make sure the constructor does what it's supposed to.
Definition: RinexNavDataFactory_T.cpp:139
gnsstk::GPSLNavEph::iode
uint16_t iode
Issue Of Data-Ephemeris.
Definition: GPSLNavEph.hpp:99
gnsstk::GalHealthStatus::OK
@ OK
Signal OK.
gnsstk::TrackingCode::B1I
@ B1I
BeiDou B1 I code.
gnsstk::TimeSystemCorrection::GPUT
@ GPUT
GPS to UTC using A0, A1.
Definition: TimeSystemCorr.hpp:67
gnsstk::TimeSystem
TimeSystem
Definition of various time systems.
Definition: TimeSystem.hpp:51
TUASSERTFEPS
#define TUASSERTFEPS(EXP, GOT, EPS)
Definition: TestUtil.hpp:126
gnsstk::BDSD2NavEph
Definition: BDSD2NavEph.hpp:57
RinexNavDataFactory_T
Automated tests for gnsstk::RinexNavDataFactory.
Definition: RinexNavDataFactory_T.cpp:116
gnsstk::GalINavEph::xmit5
CommonTime xmit5
Transmit time for word type 5.
Definition: GalINavEph.hpp:92
gnsstk::NavFit::beginFit
CommonTime beginFit
Time at beginning of fit interval.
Definition: NavFit.hpp:54
gnsstk::CarrierBand::L1
@ L1
GPS L1, Galileo E1, SBAS L1, QZSS L1, BeiDou L1.
gnsstk::GLOFNavData::lhealth
bool lhealth
Health flag? Different from B_n and C_n?
Definition: GLOFNavData.hpp:70
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
gnsstk::RinexTimeOffset
Definition: RinexTimeOffset.hpp:52
gnsstk::BDSD2NavHealth::svHealth
uint16_t svHealth
9-bit health from subframes 4.
Definition: BDSD2NavHealth.hpp:103
gnsstk::GLOFNavEph::accIndex
unsigned accIndex
User accuracy index (F_T).
Definition: GLOFNavEph.hpp:130
gnsstk::DumpDetail::Full
@ Full
Include all detailed information.
gnsstk::GalINavEph::hsE1B
GalHealthStatus hsE1B
Health status for E1B.
Definition: GalINavEph.hpp:98
gnsstk::GLOFNavEph::P2
unsigned P2
Flag of oddness (=1) or evenness (=0) of t_b.
Definition: GLOFNavEph.hpp:123
gnsstk::GLOFNavData::xmit2
CommonTime xmit2
Transmit time for string 2 (eph) or odd string.
Definition: GLOFNavData.hpp:67
gnsstk::RinexTimeOffset::getOffset
bool getOffset(TimeSystem fromSys, TimeSystem toSys, const CommonTime &when, double &offset) const override
Definition: RinexTimeOffset.cpp:131
gnsstk::GalINavHealth
Definition: GalINavHealth.hpp:53
gnsstk::TimeSystem::UTC
@ UTC
Coordinated Universal Time (e.g., from NTP)
gnsstk::GPSLNavISC::pre
uint32_t pre
The TLM preamble from word 1 of the subframe.
Definition: GPSLNavISC.hpp:68
gnsstk::OrbitDataKepler::i0
double i0
Inclination (rad)
Definition: OrbitDataKepler.hpp:190
example3.data
data
Definition: example3.py:22
BDSD1NavHealth.hpp
gnsstk::GalINavEph::iodnav1
uint16_t iodnav1
IODnav for word type 1.
Definition: GalINavEph.hpp:93
gnsstk::GPSLNavData::pre
uint32_t pre
The TLM preamble from word 1 of the subframe.
Definition: GPSLNavData.hpp:80
BDSD2NavHealth.hpp
gnsstk::OrbitDataKepler::Cic
double Cic
Cosine inclination (rad)
Definition: OrbitDataKepler.hpp:179
gnsstk::CivilTime
Definition: CivilTime.hpp:55
gnsstk::GPSLNavIono
Class containing data elements unique to GPS LNav ionospheric data.
Definition: GPSLNavIono.hpp:50
gnsstk::GalFNavEph::iodnav1
uint16_t iodnav1
IODnav for page type 1.
Definition: GalFNavEph.hpp:91
gnsstk::NavMessageType::TimeOffset
@ TimeOffset
Message containing information about time system offsets.
gnsstk::GPSLNavISC::asFlag
bool asFlag
Anti-spoof flag from HOW.
Definition: GPSLNavISC.hpp:72
gnsstk::GLOFNavEph::ref
CommonTime ref
Reference time (t_k) for this ephemeris.
Definition: GLOFNavEph.hpp:112
gnsstk::OrbitDataKepler::Crc
double Crc
Cosine radius (m)
Definition: OrbitDataKepler.hpp:177
gnsstk::NavSignalID
Class used to identify navigation data signal types.
Definition: NavSignalID.hpp:54
gnsstk::GLOFNavEph::clkBias
double clkBias
Satellite clock bias in sec (tau_n).
Definition: GLOFNavEph.hpp:118
GLOFNavHealth.hpp
gnsstk::GPSLNavISC::alert
bool alert
Alert flag from HOW.
Definition: GPSLNavISC.hpp:71
gnsstk::GalINavEph::bgdE5bE1
double bgdE5bE1
Group delay in seconds between E5b and E1.
Definition: GalINavEph.hpp:86
DEBUGTRACE_DISABLE
#define DEBUGTRACE_DISABLE()
Definition: DebugTrace.hpp:113
gnsstk::GPSLNavEph::asFlag3
bool asFlag3
Anti-spoof flag from SF3 HOW.
Definition: GPSLNavEph.hpp:107
gnsstk::TimeSystem::GPS
@ GPS
GPS system time.
GalINavEph.hpp
DEBUGTRACE_ENABLE
#define DEBUGTRACE_ENABLE()
Definition: DebugTrace.hpp:107
gnsstk::OrbitDataKepler::af0
double af0
SV clock error (sec)
Definition: OrbitDataKepler.hpp:195
gnsstk::NavMessageType
NavMessageType
Identify different types of navigation message data.
Definition: NavMessageType.hpp:59
gnsstk::GLOFNavEph::interval
unsigned interval
P1 interval (minutes, see PNBGLOFNavDataFactory).
Definition: GLOFNavEph.hpp:126
gnsstk::TrackingCode::E5bI
@ E5bI
Galileo E5b I code.
gnsstk::NavMessageType::Ephemeris
@ Ephemeris
Precision orbits for the transmitting SV.
gnsstk::GLOFNavEph::step
double step
Integration step for Runge-Kutta algorithm (1 second by default)
Definition: GLOFNavEph.hpp:134
GLOFNavEph.hpp
gnsstk::GLOFNavEph::P3
unsigned P3
Flag 1=5 almanac sats in frame, 0=4 almanac sats.
Definition: GLOFNavEph.hpp:124
gnsstk::RinexNavDataFactory
Definition: RinexNavDataFactory.hpp:57
TestClass
Make GroupPathCorrector instantiatable for testing.
Definition: GroupPathCorrector_T.cpp:56
gnsstk::GalINavEph::sisaIndex
uint8_t sisaIndex
Signal in space accuracy index (OS-SIS-ICD tbl 76)
Definition: GalINavEph.hpp:87
BDSWeekSecond.hpp
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
gnsstk::GalFNavHealth::dataValidityStatus
GalDataValid dataValidityStatus
Data Validity Status (DVS)
Definition: GalFNavHealth.hpp:83
gnsstk::NavDataFactoryWithStore::getFinalTime
CommonTime getFinalTime() const override
Definition: NavDataFactoryWithStore.hpp:173
gnsstk::GLOFNavEph::acc
Triple acc
Satellite acceleration at tb in km/s**2.
Definition: GLOFNavEph.hpp:117
gnsstk::GPSLNavEph::iodc
uint16_t iodc
Issue Of Data-Clock for the ephemeris.
Definition: GPSLNavEph.hpp:98
gnsstk::GLOFNavData::satType
GLOFNavSatType satType
Satellite type (M_n: GLONASS or GLONASS-M).
Definition: GLOFNavData.hpp:68
gnsstk::NavType::BeiDou_D2
@ BeiDou_D2
gnsstk::GalHealthStatus
GalHealthStatus
Identify different types of SV health states.
Definition: GalHealthStatus.hpp:51
BDSD2NavISC.hpp
gnsstk::GLOFNavEph::tb
unsigned tb
Epoch index with Moscow day.
Definition: GLOFNavEph.hpp:121
gnsstk::SatelliteSystem::Glonass
@ Glonass
gnsstk::NavDataFactory::supportedSignals
NavSignalSet supportedSignals
Definition: NavDataFactory.hpp:379
gnsstk::GalINavEph::xmit4
CommonTime xmit4
Transmit time for word type 4.
Definition: GalINavEph.hpp:91
gnsstk::GPSLNavL2Codes::CAcode
@ CAcode
C/A-code is broadcast on L2.
gnsstk::GalINavEph::xmit2
CommonTime xmit2
Transmit time for word type 2.
Definition: GalINavEph.hpp:89
GPSLNavISC.hpp
gnsstk::GalINavEph::svid
uint8_t svid
SVID field from page type 1 (or PRN if not avail)
Definition: GalINavEph.hpp:88
RinexNavDataFactory_T::verifyDataType
void verifyDataType(gnsstk::TestUtil &testFramework, gnsstk::NavMessageMap &nmm)
Definition: RinexNavDataFactory_T.cpp:1367
gnsstk::SatelliteSystem::BeiDou
@ BeiDou
aka Compass
gnsstk::GPSLNavEph
Class containing data elements unique to GPS LNav ephemerides.
Definition: GPSLNavEph.hpp:51
gnsstk::GLOFNavEph::healthBits
uint8_t healthBits
The 3-bit B_n value (look at bit 2 not 0 or 1).
Definition: GLOFNavEph.hpp:120
gnsstk::BDSWeekSecond
Definition: BDSWeekSecond.hpp:56
gnsstk::GLOFNavEph::freqBias
double freqBias
Satellite relative frequency bias (gamma_n).
Definition: GLOFNavEph.hpp:119
gnsstk::GalFNavEph
Class containing data elements unique to Galileo F/NAV ephemerides.
Definition: GalFNavEph.hpp:52
GPSLNavEph.hpp
gnsstk::OrbitDataKepler::health
SVHealth health
SV health status.
Definition: OrbitDataKepler.hpp:173
gnsstk::GalINavEph::xmit3
CommonTime xmit3
Transmit time for word type 3.
Definition: GalINavEph.hpp:90
gnsstk::GalINavEph::dvsE1B
GalDataValid dvsE1B
Data validity status for E1B.
Definition: GalINavEph.hpp:100
gnsstk::SVHealth::Unhealthy
@ Unhealthy
Satellite is unhealthy and should not be used.
gnsstk::OrbitDataKepler::OMEGA0
double OMEGA0
Longitude of ascending node at weekly epoch (rad)
Definition: OrbitDataKepler.hpp:189
gnsstk::GalINavISC
Definition: GalINavISC.hpp:51
GLOFNavISC.hpp
gnsstk::NavDataFactoryWithStore::getInitialTime
CommonTime getInitialTime() const override
Definition: NavDataFactoryWithStore.hpp:166
gnsstk::TimeSystemCorrection::frTS
TimeSystem frTS
Definition: TimeSystemCorr.hpp:165
gnsstk::SatelliteSystem::QZSS
@ QZSS
gnsstk::TimeSystemCorrection::BDUT
@ BDUT
BDT to UTC using A0, A1.
Definition: TimeSystemCorr.hpp:76
gnsstk::TestUtil
Definition: TestUtil.hpp:265
gnsstk::TimeSystem::BDT
@ BDT
BeiDou system Time.
gnsstk::BDSD2NavISC::tgd2
double tgd2
Group delay differential on B2I.
Definition: BDSD2NavISC.hpp:100
gnsstk::TimeSystemCorrection::geoProvider
std::string geoProvider
string 'EGNOS' 'WAAS' or 'MSAS'
Definition: TimeSystemCorr.hpp:168
gnsstk::GPSLNavISC::isf
bool isf
Integrity status flag.
Definition: GPSLNavISC.hpp:70
gnsstk::GPSLNavEph::pre2
uint32_t pre2
The TLM preamble from word 1 of subframe 2.
Definition: GPSLNavEph.hpp:92
GALWeekSecond.hpp
BDSD1NavEph.hpp
gnsstk::GLOFNavSatType
GLOFNavSatType
Values for GLONASS FDMA nav message, Word M.
Definition: GLOFNavSatType.hpp:51
gnsstk::OrbitDataKepler::af1
double af1
SV clock drift (sec/sec)
Definition: OrbitDataKepler.hpp:196
gnsstk::GPSLNavISC
Definition: GPSLNavISC.hpp:53
gnsstk::BDSD2NavISC
Definition: BDSD2NavISC.hpp:51
gnsstk::GPSLNavEph::tgd
double tgd
Ionospheric group delay in seconds.
Definition: GPSLNavEph.hpp:103
gnsstk::SatelliteSystem::Galileo
@ Galileo
gnsstk::GalFNavEph::iodnav3
uint16_t iodnav3
IODnav for page type 3.
Definition: GalFNavEph.hpp:93
gnsstk::OrbitDataKepler::dn
double dn
Correction to mean motion (rad/sec)
Definition: OrbitDataKepler.hpp:183
gnsstk::NavType::GalFNAV
@ GalFNAV
BDSD1NavISC.hpp
gnsstk::CarrierBand::L5
@ L5
GPS L5, Galileo E5a, SBAS L5, QZSS L5, BeiDou B2a, NavIC L5.
gnsstk::GPSLNavEph::alert3
bool alert3
Alert flag from SF3 HOW.
Definition: GPSLNavEph.hpp:105
RinexNavDataFactory.hpp
gnsstk::GLOFNavHealth::ln
ValidType< bool > ln
The l_n health bit in strings 3,5,7,9,11,13,15.
Definition: GLOFNavHealth.hpp:81
gnsstk::GLOFNavPCode
GLOFNavPCode
Definition: GLOFNavPCode.hpp:56
gnsstk::NavDataFactoryWithStore::getOffset
bool getOffset(TimeSystem fromSys, TimeSystem toSys, const CommonTime &when, NavDataPtr &offset, SVHealth xmitHealth=SVHealth::Any, NavValidityType valid=NavValidityType::ValidOnly) override
Definition: NavDataFactoryWithStore.cpp:439
gnsstk::GPSLNavHealth
Definition: GPSLNavHealth.hpp:51


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