Rinex3Obs_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 "Rinex3ObsBase.hpp"
40 #include "Rinex3ObsData.hpp"
41 #include "Rinex3ObsStream.hpp"
42 #include "Rinex3ObsHeader.hpp"
44 
45 #include "build_config.h"
46 
47 #include "TestUtil.hpp"
48 #include <iostream>
49 #include <string>
50 
51 using namespace std;
52 using namespace gnsstk;
53 
54 namespace gnsstk
55 {
56  std::ostream& operator<<(std::ostream& s, XmitAnt e)
57  {
59  return s;
60  }
61 }
62 
63 //============================================================
64 // Class decalarations
65 //============================================================
66 
68 {
69 public:
70 
71  // constructor
73  {
74  init();
75  }
76 
77  void init( void );
78 
79  void toRinex3( void );
80 
81  // return values indicate number of failures, i.e., 0=PASS, !0=FAIL
82  int headerExceptionTest( void );
83  int hardCodeTest( void );
84  int filterOperatorsTest( void );
85  int dataExceptionsTest( void );
87  int roundTripTest( void );
88 
89  void toConversionTest( void );
90  int version2ToVersion3Test( void );
91  int version3ToVersion2Test( void );
92  int transmitAntennaTest();
93 
94  int embeddedHeadersTest();
95 
96 private:
97 
98  string dataFilePath;
99  string tempFilePath;
100  string file_sep;
101 
106  string dataNotObs;
114 
119 
124 
132 
137 
138  string testMesg;
139 
141 };
142 
143 //============================================================
144 // Initialize Test Data Filenames
145 //============================================================
146 
148 {
149 
150  cout << "Running tests for Rinex version 2.x" << endl;
151 
152  TestUtil test0;
153  dataFilePath = gnsstk::getPathData();
154  tempFilePath = gnsstk::getPathTestTemp();
155 
156  //----------------------------------------
157  // Full file paths
158  //----------------------------------------
159  file_sep = getFileSep();
160 
161  dataRinexObsFile = dataFilePath + file_sep +
162  "test_input_rinex2_obs_RinexObsFile.06o";
163  dataIncompleteHeader = dataFilePath + file_sep +
164  "test_input_rinex2_obs_IncompleteHeader.06o";
165  dataInvalidLineLength = dataFilePath + file_sep +
166  "test_input_rinex2_obs_InvalidLineLength.06o";
167  dataInvalidNumPRNWaveFact = dataFilePath + file_sep +
168  "test_input_rinex2_obs_InvalidNumPRNWaveFact.06o";
169  dataNotObs = dataFilePath + file_sep +
170  "test_input_rinex2_obs_NotObs.06o";
171  dataSystemGeosync = dataFilePath + file_sep +
172  "test_input_rinex2_obs_SystemGeosync.06o";
173  dataSystemGlonass = dataFilePath + file_sep +
174  "test_input_rinex2_obs_SystemGlonass.06o";
175  dataSystemMixed = dataFilePath + file_sep +
176  "test_input_rinex2_obs_SystemMixed.06o";
177  dataSystemTransit = dataFilePath + file_sep +
178  "test_input_rinex2_obs_SystemTransit.06o";
179  dataUnSupVersion = dataFilePath + file_sep +
180  "test_input_rinex2_obs_UnSupVersion.06o";
181  dataRinexContData = dataFilePath + file_sep +
182  "test_input_rinex2_obs_RinexContData.06o"; // not in v3 test
183  dataHeaderTest = dataFilePath + file_sep +
184  "mixed211.05o";
185 
186  dataBadEpochLine = dataFilePath + file_sep +
187  "test_input_rinex2_obs_BadEpochLine.06o";
188  dataBadEpochFlag = dataFilePath + file_sep +
189  "test_input_rinex2_obs_BadEpochFlag.06o";
190  dataBadLineSize = dataFilePath + file_sep +
191  "test_input_rinex2_obs_BadLineSize.06o";
192  dataInvalidTimeFormat = dataFilePath + file_sep +
193  "test_input_rinex2_obs_InvalidTimeFormat.06o";
194 
195  dataFilterTest1 = dataFilePath + file_sep +
196  "test_input_rinex2_obs_FilterTest1.06o";
197  dataFilterTest2 = dataFilePath + file_sep +
198  "test_input_rinex2_obs_FilterTest2.06o";
199  dataFilterTest3 = dataFilePath + file_sep +
200  "test_input_rinex2_obs_FilterTest3.06o";
201  dataFilterTest4 = dataFilePath + file_sep +
202  "test_input_rinex2_obs_FilterTest4.06o";
203 
204  dataTestOutput = tempFilePath + file_sep +
205  "test_output_rinex2_obs_TestOutput.06o";
206  dataTestOutput2 = tempFilePath + file_sep +
207  "test_output_rinex2_obs_TestOutput2.06o";
208  dataTestOutput3 = tempFilePath + file_sep +
209  "test_output_rinex2_obs_TestOutput3.06o";
210  dataTestOutput4 = tempFilePath + file_sep +
211  "test_output_rinex2_obs_TestOutput4.06o";
212  dataTestOutputObsDump = tempFilePath + file_sep +
213  "test_output_rinex2_obs_ObsDump.06o";
214  dataTestOutputDataException = tempFilePath + file_sep +
215  "test_output_rinex2_obs_DataExceptionOutput.06o";
216  dataTestFilterOutput = tempFilePath + file_sep +
217  "test_output_rinex2_obs_FilterOutput.txt";
218 
219 }
220 
221 //============================================================
222 // Change input and output file names for Rinex v.3 types
223 //============================================================
224 
226 {
227 
228  cout << "Running tests for Rinex version 3.x" << endl;
229 
230  //----------------------------------------
231  // Full file paths
232  //----------------------------------------
233 
234  dataRinexObsFile = dataFilePath + file_sep +
235  "test_input_rinex3_obs_RinexObsFile.15o";
236  dataIncompleteHeader = dataFilePath + file_sep +
237  "test_input_rinex3_obs_IncompleteHeader.15o";
238  dataInvalidLineLength = dataFilePath + file_sep +
239  "test_input_rinex3_obs_InvalidLineLength.15o";
240  dataInvalidNumPRNWaveFact = dataFilePath + file_sep +
241  "test_input_rinex3_obs_InvalidNumPRNWaveFact.15o";
242  dataNotObs = dataFilePath + file_sep +
243  "test_input_rinex3_obs_NotObs.15o";
244  dataSystemGeosync = dataFilePath + file_sep +
245  "test_input_rinex3_obs_SystemGeosync.15o";
246  dataSystemGlonass = dataFilePath + file_sep +
247  "test_input_rinex3_obs_SystemGlonass.15o";
248  dataSystemMixed = dataFilePath + file_sep +
249  "test_input_rinex3_obs_SystemMixed.15o";
250  dataSystemTransit = dataFilePath + file_sep +
251  "test_input_rinex3_obs_SystemTransit.15o";
252  dataUnSupVersion = dataFilePath + file_sep +
253  "test_input_rinex3_obs_UnSupVersion.15o";
254  dataRinexContData = dataFilePath + file_sep +
255  "test_input_rinex3_obs_RinexContData.15o";
256 
257  dataBadEpochLine = dataFilePath + file_sep +
258  "test_input_rinex3_obs_BadEpochLine.15o";
259  dataBadEpochFlag = dataFilePath + file_sep +
260  "test_input_rinex3_obs_BadEpochFlag.15o";
261  dataBadLineSize = dataFilePath + file_sep +
262  "test_input_rinex3_obs_BadLineSize.15o";
263  dataInvalidTimeFormat = dataFilePath + file_sep +
264  "test_input_rinex3_obs_InvalidTimeFormat.15o";
265 
266  dataFilterTest1 = dataFilePath + file_sep +
267  "test_input_rinex3_obs_FilterTest1.15o";
268  dataFilterTest2 = dataFilePath + file_sep +
269  "test_input_rinex3_obs_FilterTest2.15o";
270  dataFilterTest3 = dataFilePath + file_sep +
271  "test_input_rinex3_obs_FilterTest3.15o";
272  dataFilterTest4 = dataFilePath + file_sep +
273  "test_input_rinex3_obs_FilterTest4.15o";
274 
275  dataTestOutput = tempFilePath + file_sep +
276  "test_output_rinex3_obs_TestOutput.15o";
277  dataTestOutput2 = tempFilePath + file_sep +
278  "test_output_rinex3_obs_TestOutput2.15o";
279  dataTestOutput3 = tempFilePath + file_sep +
280  "test_output_rinex3_obs_TestOutput3.15o";
281  dataTestOutput4 = tempFilePath + file_sep +
282  "test_output_rinex3_obs_TestOutput4.15o";
283  dataTestOutputObsDump = tempFilePath + file_sep +
284  "test_output_rinex3_obs_ObsDump.15o";
285  dataTestOutputDataException = tempFilePath + file_sep +
286  "test_output_rinex3_obs_DataExceptionOutput.15o";
287  dataTestFilterOutput = tempFilePath + file_sep +
288  "test_output_rinex3_obs_FilterOutput.txt";
289 
290 }
291 
292 //=============================================================
293 // Change input and output file names for Rinex Conversion test
294 //=============================================================
295 
297 {
298  dataInputRinex3ObsFile = dataFilePath + file_sep +
299  "test_input_rinex3_obs_RinexObsFile.15o";
300  dataInputRinex2ObsFile = dataFilePath + file_sep +
301  "test_input_rinex2_obs_RinexObsFile.06o";
302 
303  dataOutputRinex3ObsFile = tempFilePath + file_sep +
304  "test_output_rinex3_obs_Rinex2to3Output.06o";
305  dataOutputRinex2ObsFile = tempFilePath + file_sep +
306  "test_output_rinex2_obs_Rinex3to2Output.15o";
307 }
308 
309 //============================================================
310 // Test Method Definitions
311 //============================================================
312 
313  /* What the hell are we doing here?
314  *
315  * 1) Doing permissive reads of error-ridden RINEX OBS headers,
316  * i.e. allowing the headers to be read into memory despite errors.
317  * This is done by leaving the default behavior of streams that no
318  * exceptions are thrown on error conditions.
319  *
320  * 2) Doing strict writes of same error-ridden headers and verifying
321  * that exceptions are being thrown as expected.
322  */
324 {
325  TUDEF( "Rinex3ObsStream", "headerExceptionTest" );
326 
327  string msg_test_desc = "Rinex3ObsStream, headerExceptionTest";
328  string msg_false_pass = ", threw the wrong number of exceptions.";
329  string msg_fail = ", threw an unexpected exception.";
330 
331  try
332  {
333 
334  gnsstk::Rinex3ObsStream rinex3ObsFile( dataRinexObsFile );
335  gnsstk::Rinex3ObsStream ih( dataIncompleteHeader );
336  gnsstk::Rinex3ObsStream il( dataInvalidLineLength );
337  gnsstk::Rinex3ObsStream inpwf( dataInvalidNumPRNWaveFact );
338  gnsstk::Rinex3ObsStream no( dataNotObs );
339  gnsstk::Rinex3ObsStream ss( dataSystemGeosync );
340  gnsstk::Rinex3ObsStream sr( dataSystemGlonass );
341  gnsstk::Rinex3ObsStream sm( dataSystemMixed );
342  gnsstk::Rinex3ObsStream st( dataSystemTransit );
343  gnsstk::Rinex3ObsStream unsupv( dataUnSupVersion );
344  gnsstk::Rinex3ObsStream contdata( dataRinexContData );
345 
346  gnsstk::Rinex3ObsStream out( dataTestOutput, ios::out );
347  gnsstk::Rinex3ObsStream out2( dataTestOutput3, ios::out );
348  gnsstk::Rinex3ObsStream dump( dataTestOutputObsDump, ios::out );
349 
350  gnsstk::Rinex3ObsHeader rinex3ObsHeader;
359  gnsstk::Rinex3ObsHeader unsupvh;
360  gnsstk::Rinex3ObsHeader contdatah;
361 
362  gnsstk::Rinex3ObsData rinex3ObsData;
363  gnsstk::Rinex3ObsData contdatad;
364 
365  // read in some good headers and some crap ones
366  rinex3ObsFile >> rinex3ObsHeader;
367  ih >> ihh;
368  il >> ilh;
369  inpwf >> inpwfh;
370  no >> noh;
371  ss >> ssh;
372  sr >> srh;
373  sm >> smh;
374  unsupv >> unsupvh;
375  contdata >> contdatah; // not in v3 test
376 
377  out.exceptions( fstream::failbit );
378  // write good and bad headers, checking for exceptions
379  try
380  {
381  out << rinex3ObsHeader;
382  TUPASS("exception");
383  }
384  catch (...)
385  {
386  TUFAIL("Exception while writing valid RINEX OBS header");
387  }
388  out.clear();
389  try
390  {
391  out << ihh;
392  TUFAIL("No Exception while writing invalid RINEX OBS header");
393  }
394  catch (...)
395  {
396  TUPASS("exception");
397  }
398  out.clear();
399  try
400  {
401  out << ilh;
402  TUFAIL("No Exception while writing invalid RINEX OBS header");
403  }
404  catch (...)
405  {
406  TUPASS("exception");
407  }
408  out.clear();
409  try
410  {
411  out << inpwfh;
412  TUFAIL("No Exception while writing invalid RINEX OBS header");
413  }
414  catch (...)
415  {
416  TUPASS("exception");
417  }
418  out.clear();
419  try
420  {
421  out << noh;
422  TUFAIL("No Exception while writing invalid RINEX OBS header");
423  }
424  catch (...)
425  {
426  TUPASS("exception");
427  }
428  out.clear();
429  try
430  {
431  out << ssh;
432  TUPASS("exception");
433  }
434  catch (...)
435  {
436  TUFAIL("Exception while writing valid RINEX OBS header");
437  }
438  out.clear();
439  try
440  {
441  out << srh;
442  TUPASS("exception");
443  }
444  catch (...)
445  {
446  TUFAIL("Exception while writing valid RINEX OBS header");
447  }
448  out.clear();
449  try
450  {
451  out << smh;
452  TUPASS("exception");
453  }
454  catch (...)
455  {
456  TUFAIL("Exception while writing valid RINEX OBS header");
457  }
458  out.clear();
459  try
460  {
461  out << unsupvh;
462  TUFAIL("No Exception while writing invalid RINEX OBS header");
463  }
464  catch (...)
465  {
466  TUPASS("exception");
467  }
468  out.clear();
469  try
470  {
471  out2 << contdatah; // not in v3 test
472  TUPASS("exception");
473  }
474  catch (...)
475  {
476  TUFAIL("Exception while writing valid RINEX OBS header");
477  }
478  out.clear();
479  rinex3ObsFile >> rinex3ObsData;
480  rinex3ObsData.dump( dump );
481 
482  while( rinex3ObsFile >> rinex3ObsData )
483  {
484  out << rinex3ObsData; // Outputting v.3 data instead of v.2
485  }
486 
487  while( contdata >> contdatad ) // not in v3 test
488  {
489  out2 << contdatad;
490  }
491  TUPASS(msg_test_desc);
492  }
493  catch(gnsstk::Exception e)
494  {
495  TUFAIL( msg_test_desc + msg_fail + e.what() );
496  }
497  catch(...)
498  {
499  TUFAIL( msg_test_desc + msg_fail );
500  }
501 
502  return( testFramework.countFails() );
503 }
504 
505 
506 //------------------------------------------------------------
507 // This test checks to make sure that the output
508 // from a read in rinex3ObsFile matches the input.
509 //------------------------------------------------------------
511 {
512 
513  bool files_equal = false;
514  double CompareVersion;
515  string CompareFileProgram;
516  string CompareFileAgency;
517  string CompareDate;
518 
519  // Previous comments indicated that these Rinex methods
520  // are not expected to match in the top two lines of the file
521  int num_lines_skip = 2;
522 
523  TestUtil test2( "Rinex3ObsStream", "hardCodeTest", __FILE__, __LINE__ );
524 
525  string msg_test_desc =
526  "Rinex3ObsStream, read write test, comparing input file and output file";
527  string msg_fail_equal = ", input and output do not match.";
528  string msg_fail_except = ", threw an unexpected exception.";
529 
530  try
531  {
532  gnsstk::Rinex3ObsStream rinex3ObsFile( dataRinexObsFile );
533  gnsstk::Rinex3ObsStream out( dataTestOutput2, ios::out );
534  gnsstk::Rinex3ObsStream dump( dataTestOutputObsDump, ios::out );
535  gnsstk::Rinex3ObsHeader rinex3ObsHeader;
536  gnsstk::Rinex3ObsData rinex3ObsData;
537 
538  rinex3ObsFile >> rinex3ObsHeader;
539  out << rinex3ObsHeader;
540 
541  while( rinex3ObsFile >> rinex3ObsData )
542  {
543  out << rinex3ObsData;
544  // cout<<out.header.version<<endl; stream has header info passed to it
545  }
546 
547  if (rinex3ObsHeader.version == 2.1)
548  {
549  CompareVersion = 2.10;
550  CompareFileProgram = (string)"row";
551  CompareFileAgency = (string)"Dataflow Processing";
552  CompareDate = (string)"04/11/2006 23:59:18";
553  }
554 
555  else if (rinex3ObsHeader.version == 3.02)
556  {
557  CompareVersion = 3.02;
558  CompareFileProgram = (string)"cnvtToRINEX 2.25.0";
559  CompareFileAgency = (string)"convertToRINEX OPR";
560  CompareDate = (string)"23-Jan-15 22:34 UTC";
561  }
562 
563  test2.assert( rinex3ObsHeader.version == CompareVersion,
564  "RinexObs Header version comparison", __LINE__ );
565  test2.assert( rinex3ObsHeader.fileProgram == CompareFileProgram,
566  "RinexObs Header file program comparison", __LINE__ );
567  test2.assert( rinex3ObsHeader.fileAgency == CompareFileAgency,
568  "RinexObs Header file agency comparison", __LINE__ );
569  test2.assert( rinex3ObsHeader.date == CompareDate,
570  "RinexObs Header date comparison", __LINE__ );
571 
572  rinex3ObsData.dump( dump );
573  rinex3ObsHeader.dump( dump );
574 
575  test2.assert_files_equal(__LINE__, dataRinexObsFile, dataTestOutput2,
576  msg_test_desc + msg_fail_equal,
577  num_lines_skip, false, true );
578  }
579  catch(...)
580  {
581  test2.assert( false, msg_test_desc + msg_fail_except, __LINE__ );
582  }
583 
584  return( test2.countFails() );
585 }
586 
587 //------------------------------------------------------------
588 // This test throws many GNSSTK exceptions within the
589 // Rinex3ObsData, including BadEpochLine and BadEpochFlag
590 //------------------------------------------------------------
592 {
593 
594  TestUtil test3( "Rinex3ObsStream", "dataExceptionsTest", __FILE__, __LINE__ );
595 
596  string msg_test_desc =
597  "Rinex3ObsStream, test various gnsstk exception throws, including BadEpochLine and BadEpochFlag";
598  string msg_fail_throw =
599  ", not all gnsstk exceptions were thrown as expected.";
600  string msg_fail_except = ", threw an unexpected exception.";
601 
602  try
603  {
604  gnsstk::Rinex3ObsStream BadEpochLine( dataBadEpochLine );
605  gnsstk::Rinex3ObsStream BadEpochFlag( dataBadEpochFlag );
606  gnsstk::Rinex3ObsStream BadLineSize( dataBadLineSize );
607  gnsstk::Rinex3ObsStream InvalidTimeFormat( dataInvalidTimeFormat );
608  gnsstk::Rinex3ObsStream out( dataTestOutputDataException, ios::out );
609  gnsstk::Rinex3ObsData BadEpochLined;
610  gnsstk::Rinex3ObsData BadEpochFlagd;
611  gnsstk::Rinex3ObsData BadLineSized;
612  gnsstk::Rinex3ObsData InvalidTimeFormatd;
613 
614  while( BadEpochLine >> BadEpochLined )
615  {
616  out << BadEpochLined;
617  }
618  while( BadEpochFlag >> BadEpochFlagd )
619  {
620  out << BadEpochFlagd;
621  }
622  while( BadLineSize >> BadLineSized )
623  {
624  out << BadLineSized;
625  }
626  while( InvalidTimeFormat >> InvalidTimeFormatd )
627  {
628  out << InvalidTimeFormatd;
629  }
630  test3.assert( true, msg_test_desc + msg_fail_throw, __LINE__ );
631  }
632  catch(...)
633  {
634  test3.assert( false, msg_test_desc + msg_fail_except, __LINE__ );
635  }
636 
637  return( test3.countFails() );
638 
639 }
640 
641 //------------------------------------------------------------
642 // This is the test for several of the members within Rinex3ObsFilterOperators
643 // including merge, LessThanSimple, EqualsSimple
644 //------------------------------------------------------------
646 {
647  TUDEF( "Rinex3Obs", "filterOperatorsTest");
648  try
649  {
650  fstream out( dataTestFilterOutput.c_str(), ios::out );
651 
652  gnsstk::Rinex3ObsStream s1(dataFilterTest1);
655  s1 >> h1;
656  while( s1 >> d1)
657  d1.dump(out);
658 
659  out << "Reading dataFilterTest2:" << endl;
660  gnsstk::Rinex3ObsStream s2(dataFilterTest2);
663  s2 >> h2;
664  while( s2 >> d2)
665  d2.dump(out);
666 
668  testFramework.changeSourceMethod("Rinex3ObsDataOperatorEqualsSimple");
669  testFramework.assert( EqualsSimple( d1, d1 ), "", __LINE__);
670 
672  testFramework.changeSourceMethod("Rinex3ObsDataOperatorLessThanSimple");
673  testFramework.assert( !LessThanSimple( d1, d1 ), "", __LINE__ );
674 
676  merged( h1 );
677  merged( h2 );
678  out << "Merged Header:" << endl;
679  merged.theHeader.dump(out);
681  testFramework.changeSourceMethod("Rinex3ObsDataOperatorLessThanFull");
682  testFramework.assert( !LessThanFull( d1, h1, d1, h1, 5 ) , "", __LINE__ );
683  testFramework.assert( !LessThanFull( d1, h1, d2, h2, 5 ) , "", __LINE__ );
684  }
685  catch (gnsstk::Exception& e)
686  {
687  cout << e << endl;
688  testFramework.assert( false , "caught exception", __LINE__ );
689  }
690  return testFramework.countFails();
691 }
692 
693 
694 //------------------------------------------------------------
695 // Tests if a input Rinex 3 file can be output as a version 2 file
696 //------------------------------------------------------------
697 
699 {
700  TUDEF("Rinex3Obs", "version3ToVersion2Test");
701 
702  gnsstk::Rinex3ObsStream inputStream(dataInputRinex3ObsFile.c_str());
703  gnsstk::Rinex3ObsStream outputStream(dataOutputRinex2ObsFile.c_str(), ios::out);
704  gnsstk::Rinex3ObsHeader ObsHeader;
705  gnsstk::Rinex3ObsData ObsData;
706 
707  inputStream >> ObsHeader;
708 
709  ObsHeader.prepareVer2Write();
710 
711  outputStream << ObsHeader;
712  while(inputStream >> ObsData)
713  {
714  outputStream << ObsData;
715  }
716 
717  testMesg = "No automatic comparison implemented. If " +
718  dataOutputRinex2ObsFile + " is not the proper conversion of " +
719  dataInputRinex3ObsFile + "test has failed. Currently prepareVer2Write() " +
720  "function is BROKEN!";
721 
722  testFramework.assert(false, testMesg, __LINE__);
723 
724  return testFramework.countFails();
725 }
726 
727 //------------------------------------------------------------
728 // Tests if a input Rinex 2 file can be output as a version 3 file
729 //------------------------------------------------------------
730 
732 {
733  TestUtil testFramework("Rinex3Obs", "version2ToVersion3Test", __FILE__, __LINE__ );
734 
735  gnsstk::Rinex3ObsStream inputStream(dataInputRinex2ObsFile.c_str());
736  gnsstk::Rinex3ObsStream outputStream(dataOutputRinex3ObsFile.c_str(),
737  ios::out);
738  gnsstk::Rinex3ObsHeader ObsHeader;
739  gnsstk::Rinex3ObsData ObsData;
740 
741  inputStream >> ObsHeader;
742 
743  ObsHeader.version =
744  3.02; //No prepareVersion3Write function, only way to change version number
745 
746  outputStream << ObsHeader;
747  while(inputStream >> ObsData)
748  {
749  outputStream << ObsData;
750  }
751 
752  testMesg = "No automatic comparison implemented. If " +
753  dataOutputRinex2ObsFile + " is not the proper conversion of " +
754  dataInputRinex3ObsFile + "test has failed. Currently only conversion " +
755  "from v.2.11 to v.3.02 is to change version number by hand. This "
756  + "doesn't produce a valid header, so this functionality is MISSING!";
757 
758  testFramework.assert(false, testMesg, __LINE__);
759 
760  return testFramework.countFails();
761 }
762 
764 {
765  TUDEF("Rinex3Obs", "roundTripTest");
766 
767  try
768  {
769  gnsstk::Rinex3ObsStream infile( dataRinexObsFile );
770  gnsstk::Rinex3ObsStream outfile( dataTestOutput4, ios::out );
773 
774  infile >> roh;
775  roh.preserveDate = true;
776  roh.preserveVerType = true;
777  outfile << roh;
778  while (infile >> rod)
779  {
780  outfile << rod;
781  }
782  infile.close();
783  outfile.close();
784  string failMsg = "input and output do not match: " +
785  dataRinexObsFile + " " + dataTestOutput4;
786  testFramework.assert_files_equal(
787  __LINE__, dataRinexObsFile, dataTestOutput4,
788  failMsg, 0, false, true );
789  }
790  catch (...)
791  {
792  TUFAIL("exception thrown during processing");
793  }
794 
795  return testFramework.countFails();
796 }
797 
798 
799 int Rinex3Obs_T ::
801 {
802  TUDEF("Rinex3ObsData", "operator<<");
803  try
804  {
805  cerr << "opening " << dataHeaderTest << endl;
806  gnsstk::Rinex3ObsStream ros(dataHeaderTest, std::ios::in);
809  TUASSERTE(bool, true, ros.good());
810  ros >> ros.header;
811  TUASSERTE(bool, true, ros.good());
812  // make sure we read all of the header info, nothing more, nothing less
830  ros.header.valid);
831  // Go through each record in the source file (there aren't
832  // many) and verify that the contents are reasonable,
833  // i.e. comments associated with header record epoch flags
834  // and correct times and so on.
835  /*
836  05 3 24 13 10 36.0000000 0 4G12G09G06E11 -.123456789
837  23629347.915 .300 8 -.353 23629364.158
838  20891534.648 -.120 9 -.358 20891541.292
839  20607600.189 -.430 9 .394 20607605.848
840  .324 8 .178 7
841  */
842  ros >> rod;
843  TUASSERTE(bool, true, ros.good());
844  TUASSERTE(short, 0, rod.epochFlag);
846  gnsstk::CivilTime(2005,3,24,13,10,36,ts).convertToCommonTime(),
847  rod.time);
848  TUASSERTE(short, 4, rod.numSVs);
849  TUASSERTE(size_t, 4, rod.obs.size());
850  TUASSERTE(Rinex3ObsHeader::Fields, empty, rod.auxHeader.valid);
851 
852 /*
853  05 3 24 13 10 50.0000000 4 4
854  1 2 2 G 9 G12 WAVELENGTH FACT L1/2
855  *** WAVELENGTH FACTOR CHANGED FOR 2 SATELLITES *** COMMENT
856  NOW 8 SATELLITES HAVE WL FACT 1 AND 2! COMMENT
857  COMMENT
858 */
859  ros >> rod;
860  TUASSERTE(bool, true, ros.good());
861  TUASSERTE(short, 4, rod.epochFlag);
863  gnsstk::CivilTime(2005,3,24,13,10,50,ts).convertToCommonTime(),
864  rod.time);
865  TUASSERTE(short, 4, rod.numSVs);
866  TUASSERTE(size_t, 0, rod.obs.size());
871  rod.auxHeader.valid);
872  TUASSERTE(size_t, 3, rod.auxHeader.commentList.size());
873 
874 /*
875  05 3 24 13 10 54.0000000 0 6G12G09G06R21R22E11 -.123456789
876  23619095.450 -53875.632 8 -41981.375 23619112.008
877  20886075.667 -28688.027 9 -22354.535 20886082.101
878  20611072.689 18247.789 9 14219.770 20611078.410
879  21345678.576 12345.567 5
880  22123456.789 23456.789 5
881  65432.123 5 48861.586 7
882 */
883  ros >> rod;
884  TUASSERTE(bool, true, ros.good());
885  TUASSERTE(short, 0, rod.epochFlag);
887  gnsstk::CivilTime(2005,3,24,13,10,54,ts).convertToCommonTime(),
888  rod.time);
889  TUASSERTE(short, 6, rod.numSVs);
890  TUASSERTE(size_t, 6, rod.obs.size());
891  TUASSERTE(Rinex3ObsHeader::Fields, empty, rod.auxHeader.valid);
892 
893 /*
894  05 3 24 13 11 0.0000000 2 1
895  *** FROM NOW ON KINEMATIC DATA! *** COMMENT
896 */
897  ros >> rod;
898  TUASSERTE(bool, true, ros.good());
899  TUASSERTE(short, 2, rod.epochFlag);
901  gnsstk::CivilTime(2005,3,24,13,11,0,ts).convertToCommonTime(),
902  rod.time);
903  TUASSERTE(short, 1, rod.numSVs);
904  TUASSERTE(size_t, 0, rod.obs.size());
908  rod.auxHeader.valid);
909  TUASSERTE(size_t, 1, rod.auxHeader.commentList.size());
910 
911 /*
912  05 3 24 13 11 48.0000000 0 4G16G12G09G06 -.123456789
913  21110991.756 16119.980 7 12560.510 21110998.441
914  23588424.398 -215050.557 6 -167571.734 23588439.570
915  20869878.790 -113803.187 8 -88677.926 20869884.938
916  20621643.727 73797.462 7 57505.177 20621649.276
917 */
918  ros >> rod;
919  TUASSERTE(bool, true, ros.good());
920  TUASSERTE(short, 0, rod.epochFlag);
922  gnsstk::CivilTime(2005,3,24,13,11,48,ts).convertToCommonTime(),
923  rod.time);
924  TUASSERTE(short, 4, rod.numSVs);
925  TUASSERTE(size_t, 4, rod.obs.size());
926  TUASSERTE(Rinex3ObsHeader::Fields, empty, rod.auxHeader.valid);
927 
928 /*
929  3 4
930 A 9080 MARKER NAME
931 9080.1.34 MARKER NUMBER
932  .9030 .0000 .0000 ANTENNA: DELTA H/E/N
933  --> THIS IS THE START OF A NEW SITE <-- COMMENT
934 */
935  ros >> rod;
936  TUASSERTE(bool, true, ros.good());
937  TUASSERTE(short, 3, rod.epochFlag);
939  gnsstk::CivilTime(2005,3,24,13,11,48,ts).convertToCommonTime(),
940  rod.time);
941  TUASSERTE(short, 4, rod.numSVs);
942  TUASSERTE(size_t, 0, rod.obs.size());
949  rod.auxHeader.valid);
950  TUASSERTE(size_t, 1, rod.auxHeader.commentList.size());
951 
952 /*
953  05 3 24 13 12 6.0000000 0 4G16G12G06G09 -.123456987
954  21112589.384 24515.877 6 19102.763 3 21112596.187
955  23578228.338 -268624.234 7 -209317.284 4 23578244.398
956  20625218.088 92581.207 7 72141.846 4 20625223.795
957  20864539.693 -141858.836 8 -110539.435 5 20864545.943
958 */
959  ros >> rod;
960  TUASSERTE(bool, true, ros.good());
961  TUASSERTE(short, 0, rod.epochFlag);
963  gnsstk::CivilTime(2005,3,24,13,12,6,ts).convertToCommonTime(),
964  rod.time);
965  TUASSERTE(short, 4, rod.numSVs);
966  TUASSERTE(size_t, 4, rod.obs.size());
967  TUASSERTE(Rinex3ObsHeader::Fields, empty, rod.auxHeader.valid);
968 
969 /*
970  05 3 24 13 13 1.2345678 5 0
971 */
972  ros >> rod;
973  TUASSERTE(bool, true, ros.good());
974  TUASSERTE(short, 5, rod.epochFlag);
976  gnsstk::CivilTime(2005,3,24,13,13,1.2345678,
977  ts).convertToCommonTime(),
978  rod.time);
979  TUASSERTE(short, 0, rod.numSVs);
980  TUASSERTE(size_t, 0, rod.obs.size());
981  TUASSERTE(Rinex3ObsHeader::Fields, empty, rod.auxHeader.valid);
982 
983 /*
984  4 1
985  (AN EVENT FLAG WITH SIGNIFICANT EPOCH) COMMENT
986 */
987  ros >> rod;
988  TUASSERTE(bool, true, ros.good());
989  TUASSERTE(short, 4, rod.epochFlag);
991  gnsstk::CivilTime(2005,3,24,13,13,1.2345678,
992  ts).convertToCommonTime(),
993  rod.time);
994  TUASSERTE(short, 1, rod.numSVs);
995  TUASSERTE(size_t, 0, rod.obs.size());
999  rod.auxHeader.valid);
1000  TUASSERTE(size_t, 1, rod.auxHeader.commentList.size());
1001 
1002 /*
1003  05 3 24 13 14 12.0000000 0 4G16G12G09G06 -.123456012
1004  21124965.133 89551.30216 69779.62654 21124972.2754
1005  23507272.372 -212616.150 7 -165674.789 5 23507288.421
1006  20828010.354 -333820.093 6 -260119.395 5 20828017.129
1007  20650944.902 227775.130 7 177487.651 4 20650950.363
1008 */
1009  ros >> rod;
1010  TUASSERTE(bool, true, ros.good());
1011  TUASSERTE(short, 0, rod.epochFlag);
1013  gnsstk::CivilTime(2005,3,24,13,14,12,ts).convertToCommonTime(),
1014  rod.time);
1015  TUASSERTE(short, 4, rod.numSVs);
1016  TUASSERTE(size_t, 4, rod.obs.size());
1017  TUASSERTE(Rinex3ObsHeader::Fields, empty, rod.auxHeader.valid);
1018 
1019 /*
1020  4 1
1021  *** ANTISPOOFING ON G 16 AND LOST LOCK COMMENT
1022 */
1023  ros >> rod;
1024  TUASSERTE(bool, true, ros.good());
1025  TUASSERTE(short, 4, rod.epochFlag);
1027  gnsstk::CivilTime(2005,3,24,13,14,12,ts).convertToCommonTime(),
1028  rod.time);
1029  TUASSERTE(short, 1, rod.numSVs);
1030  TUASSERTE(size_t, 0, rod.obs.size());
1034  rod.auxHeader.valid);
1035  TUASSERTE(size_t, 1, rod.auxHeader.commentList.size());
1036 
1037 /*
1038  05 3 24 13 14 12.0000000 6 2G16G09
1039  123456789.0 -9876543.5
1040  0.0 -0.5
1041 */
1042  ros >> rod;
1043  TUASSERTE(bool, true, ros.good());
1044  TUASSERTE(short, 6, rod.epochFlag);
1046  gnsstk::CivilTime(2005,3,24,13,14,12,ts).convertToCommonTime(),
1047  rod.time);
1048  TUASSERTE(short, 2, rod.numSVs);
1049  TUASSERTE(size_t, 2, rod.obs.size());
1050  TUASSERTE(Rinex3ObsHeader::Fields, empty, rod.auxHeader.valid);
1051 
1052 /*
1053  4 2
1054  ---> CYCLE SLIPS THAT HAVE BEEN APPLIED TO COMMENT
1055  THE OBSERVATIONS COMMENT
1056 */
1057  ros >> rod;
1058  TUASSERTE(bool, true, ros.good());
1059  TUASSERTE(short, 4, rod.epochFlag);
1061  gnsstk::CivilTime(2005,3,24,13,14,12,ts).convertToCommonTime(),
1062  rod.time);
1063  TUASSERTE(short, 2, rod.numSVs);
1064  TUASSERTE(size_t, 0, rod.obs.size());
1068  rod.auxHeader.valid);
1069  TUASSERTE(size_t, 2, rod.auxHeader.commentList.size());
1070 
1071 /*
1072  05 3 24 13 14 48.0000000 0 4G16G12G09G06 -.123456234
1073  21128884.159 110143.144 7 85825.18545 21128890.7764
1074  23487131.045 -318463.297 7 -248152.72824 23487146.149
1075  20817844.743 -387242.571 6 -301747.22925 20817851.322
1076  20658519.895 267583.67817 208507.26234 20658525.869
1077 */
1078  ros >> rod;
1079  TUASSERTE(bool, true, ros.good());
1080  TUASSERTE(short, 0, rod.epochFlag);
1082  gnsstk::CivilTime(2005,3,24,13,14,48,ts).convertToCommonTime(),
1083  rod.time);
1084  TUASSERTE(short, 4, rod.numSVs);
1085  TUASSERTE(size_t, 4, rod.obs.size());
1086  TUASSERTE(Rinex3ObsHeader::Fields, empty, rod.auxHeader.valid);
1087 
1088 /*
1089  4 3
1090  *** SATELLITE G 9 THIS EPOCH ON WLFACT 1 (L2) COMMENT
1091  *** G 6 LOST LOCK AND THIS EPOCH ON WLFACT 2 (L2) COMMENT
1092  (OPPOSITE TO PREVIOUS SETTINGS) COMMENT
1093 */
1094  ros >> rod;
1095  TUASSERTE(bool, true, ros.good());
1096  TUASSERTE(short, 4, rod.epochFlag);
1098  gnsstk::CivilTime(2005,3,24,13,14,48,ts).convertToCommonTime(),
1099  rod.time);
1100  TUASSERTE(short, 3, rod.numSVs);
1101  TUASSERTE(size_t, 0, rod.obs.size());
1105  rod.auxHeader.valid);
1106  TUASSERTE(size_t, 3, rod.auxHeader.commentList.size());
1107  }
1108  catch (...)
1109  {
1110  TUFAIL("unexpected exception");
1111  }
1112  TURETURN();
1113 }
1114 
1115 
1117 {
1118  TUDEF("Rinex3Obs", "operator>>");
1119  cout << "Running tests for transmit antenna enhancement" << endl;
1120  int rv = 0;
1121  // set everything to empty string that we're not using because
1122  // clunky tests is clunky.
1123  dataIncompleteHeader = dataInvalidLineLength = dataInvalidNumPRNWaveFact =
1124  dataNotObs = dataSystemGeosync = dataSystemGlonass = dataSystemMixed =
1125  dataSystemTransit = dataUnSupVersion = dataRinexContData =
1126  dataHeaderTest = dataBadEpochLine = dataBadEpochFlag = dataBadLineSize =
1127  dataInvalidTimeFormat = dataFilterTest1 = dataFilterTest2 =
1128  dataFilterTest3 = dataFilterTest4 = dataTestOutput = dataTestOutput2 =
1129  dataTestOutput3 = dataTestOutputObsDump = dataTestOutputDataException =
1130  dataTestFilterOutput = dataInputRinex3ObsFile = dataInputRinex2ObsFile =
1131  dataOutputRinex3ObsFile = dataOutputRinex2ObsFile = "";
1132 
1133  dataRinexObsFile = dataFilePath + file_sep +
1134  "test_input_rinex3_obs_RinexObsFile_xmitStd.15o";
1135  dataTestOutput4 = tempFilePath + file_sep +
1136  "test_output_rinex3_obs_TestOutput4_xmitStd.15o";
1137  rv += roundTripTest();
1140  gnsstk::Rinex3ObsStream strm(dataRinexObsFile);
1141  TUASSERTE(bool, true, static_cast<bool>(strm));
1142  // default to Standard
1144  strm >> header;
1145  TUASSERTE(bool, true, static_cast<bool>(strm));
1147  while (strm)
1148  {
1149  strm >> data;
1151  }
1152  strm.close();
1153 
1154  dataRinexObsFile = dataFilePath + file_sep +
1155  "test_input_rinex3_obs_RinexObsFile_xmitReg.15o";
1156  dataTestOutput4 = tempFilePath + file_sep +
1157  "test_output_rinex3_obs_TestOutput4_xmitReg.15o";
1158  rv += roundTripTest();
1159  gnsstk::Rinex3ObsStream strm2(dataRinexObsFile);
1160  TUASSERTE(bool, true, static_cast<bool>(strm2));
1161  strm2 >> header;
1162  TUASSERTE(bool, true, static_cast<bool>(strm2));
1164  while (strm2)
1165  {
1166  strm2 >> data;
1167  if (strm2)
1168  {
1170  }
1171  }
1172  strm2.close();
1173 
1174  return testFramework.countFails() + rv;
1175 }
1176 
1177 
1178 int main()
1179 {
1180  int errorTotal = 0;
1181  Rinex3Obs_T testClass;
1182 
1183  errorTotal += testClass.headerExceptionTest();
1184  errorTotal += testClass.hardCodeTest();
1185  errorTotal += testClass.dataExceptionsTest();
1186  errorTotal += testClass.filterOperatorsTest();
1187  errorTotal += testClass.roundTripTest();
1188  errorTotal += testClass.embeddedHeadersTest();
1189 
1190  //Change to test v.3
1191  testClass.toRinex3();
1192 
1193  errorTotal += testClass.headerExceptionTest();
1194  errorTotal += testClass.hardCodeTest();
1195  errorTotal += testClass.dataExceptionsTest();
1196  errorTotal += testClass.filterOperatorsTest();
1197 
1198  testClass.toConversionTest();
1199  errorTotal += testClass.roundTripTest();
1200 
1201  // Tests with transmit antenna stuff
1202  errorTotal += testClass.transmitAntennaTest();
1203 
1204  cout << "Total Failures for " << __FILE__ << ": " << errorTotal << endl;
1205 
1206  return( errorTotal );
1207 }
gnsstk::dump
void dump(vector< SatPass > &SatPassList, ostream &os, bool rev, bool dbug)
Definition: SatPassUtilities.cpp:59
gnsstk::Rinex3ObsHeader::validAntennaDeltaHEN
@ validAntennaDeltaHEN
ANTENNA: DELTA H/E/N.
Definition: Rinex3ObsHeader.hpp:260
gnsstk::TestUtil::countFails
int countFails(void)
Definition: TestUtil.hpp:771
example3.header
header
Definition: example3.py:22
Rinex3Obs_T::dataRinexObsFile
string dataRinexObsFile
Definition: Rinex3Obs_T.cpp:102
gnsstk::Rinex3ObsData::dump
virtual void dump(std::ostream &s) const
Definition: Rinex3ObsData.cpp:828
Rinex3Obs_T::dataSystemMixed
string dataSystemMixed
Definition: Rinex3Obs_T.cpp:109
gnsstk::Rinex3ObsHeader::validRunBy
@ validRunBy
PGM / RUN BY / DATE.
Definition: Rinex3ObsHeader.hpp:251
gnsstk::TestUtil::assert
void assert(bool testExpression, const std::string &testMsg, const int lineNumber)
Definition: TestUtil.hpp:607
Rinex3Obs_T::dataBadEpochFlag
string dataBadEpochFlag
Definition: Rinex3Obs_T.cpp:116
dataFilePath
string dataFilePath
Definition: Rinex3Obs_FromScratch_T.cpp:51
gnsstk::Rinex3ObsHeader::preserveDate
bool preserveDate
Definition: Rinex3ObsHeader.hpp:497
gnsstk::Rinex3ObsHeader::valid
Fields valid
bits set when header rec.s present & valid
Definition: Rinex3ObsHeader.hpp:544
gnsstk::Rinex3ObsHeader
Definition: Rinex3ObsHeader.hpp:155
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
Rinex3Obs_T::version2ToVersion3Test
int version2ToVersion3Test(void)
Definition: Rinex3Obs_T.cpp:731
Rinex3Obs_T::dataFilterTest2
string dataFilterTest2
Definition: Rinex3Obs_T.cpp:121
TUFAIL
#define TUFAIL(MSG)
Definition: TestUtil.hpp:228
gnsstk::Rinex3ObsHeader::validReceiver
@ validReceiver
REC # / TYPE / VERS.
Definition: Rinex3ObsHeader.hpp:257
gnsstk::Rinex3ObsHeader::validReceiverOffset
@ validReceiverOffset
RCV CLOCK OFFS APPL.
Definition: Rinex3ObsHeader.hpp:274
Rinex3Obs_T::dataTestOutput
string dataTestOutput
Definition: Rinex3Obs_T.cpp:125
gnsstk::Exception::what
std::string what() const
Dump to a string.
Definition: Exception.cpp:193
gnsstk::Rinex3ObsDataOperatorLessThanSimple
Definition: Rinex3ObsFilterOperators.hpp:176
Rinex3Obs_T::toConversionTest
void toConversionTest(void)
Definition: Rinex3Obs_T.cpp:296
Rinex3Obs_T::dataBadLineSize
string dataBadLineSize
Definition: Rinex3Obs_T.cpp:117
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
Rinex3Obs_T::embeddedHeadersTest
int embeddedHeadersTest()
Definition: Rinex3Obs_T.cpp:800
Rinex3Obs_T
Definition: Rinex3Obs_T.cpp:67
gnsstk::Rinex3ObsDataOperatorEqualsSimple
Definition: Rinex3ObsFilterOperators.hpp:190
gnsstk::Rinex3ObsHeader::validAntennaPosition
@ validAntennaPosition
APPROX POSITION XYZ.
Definition: Rinex3ObsHeader.hpp:259
gnsstk::Rinex3ObsHeader::dump
virtual void dump(std::ostream &s) const
Definition: Rinex3ObsHeader.hpp:568
gnsstk::XmitAnt::Standard
@ Standard
Transmitting antenna is the primary for that signal.
gnsstk::Rinex3ObsHeader::validAntennaType
@ validAntennaType
ANT # / TYPE.
Definition: Rinex3ObsHeader.hpp:258
Rinex3Obs_T::dataNotObs
string dataNotObs
Definition: Rinex3Obs_T.cpp:106
Rinex3Obs_T::dataFilterTest3
string dataFilterTest3
Definition: Rinex3Obs_T.cpp:122
gnsstk::Rinex3ObsHeader::prepareVer2Write
void prepareVer2Write(void)
Definition: Rinex3ObsHeader.cpp:2141
Rinex3Obs_T::dataSystemTransit
string dataSystemTransit
Definition: Rinex3Obs_T.cpp:110
Rinex3Obs_T::dataTestOutput2
string dataTestOutput2
Definition: Rinex3Obs_T.cpp:126
Rinex3Obs_T::dataInputRinex2ObsFile
string dataInputRinex2ObsFile
Definition: Rinex3Obs_T.cpp:134
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::TestUtil::assert_files_equal
void assert_files_equal(int lineNumber, const std::string &file1Name, const std::string &file2Name, const std::string &testMsg, int numLinesSkip=0, bool ignoreLeadingSpaces=false, bool ignoreTrailingSpaces=false, std::vector< std::string > ignoreRegex=std::vector< std::string >(0))
Definition: TestUtil.hpp:741
gnsstk::Rinex3ObsHeader::validNumObs
@ validNumObs
Definition: Rinex3ObsHeader.hpp:267
Rinex3Obs_T::toRinex3
void toRinex3(void)
Definition: Rinex3Obs_T.cpp:225
Rinex3Obs_T::file_sep
string file_sep
Definition: Rinex3Obs_T.cpp:100
gnsstk::Rinex3ObsHeader::mapObsTypes
RinexObsMap mapObsTypes
SYS / # / OBS TYPES.
Definition: Rinex3ObsHeader.hpp:519
Rinex3Obs_T::dataOutputRinex2ObsFile
string dataOutputRinex2ObsFile
Definition: Rinex3Obs_T.cpp:136
gnsstk::Exception
Definition: Exception.hpp:151
gnsstk::Rinex3ObsStream::header
Rinex3ObsHeader header
The header for this file.
Definition: Rinex3ObsStream.hpp:110
Rinex3Obs_T::dataInvalidLineLength
string dataInvalidLineLength
Definition: Rinex3Obs_T.cpp:104
Rinex3Obs_T::init
void init(void)
Definition: Rinex3Obs_T.cpp:147
TestUtil.hpp
Rinex3Obs_T::dataInputRinex3ObsFile
string dataInputRinex3ObsFile
Definition: Rinex3Obs_T.cpp:133
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
gnsstk::Rinex3ObsHeader::validFirstTime
@ validFirstTime
TIME OF FIRST OBS.
Definition: Rinex3ObsHeader.hpp:272
gnsstk::Rinex3ObsHeader::version
double version
RINEX 3 version/type.
Definition: Rinex3ObsHeader.hpp:481
TUPASS
#define TUPASS(MSG)
Definition: TestUtil.hpp:230
Rinex3Obs_T::transmitAntennaTest
int transmitAntennaTest()
Definition: Rinex3Obs_T.cpp:1116
Rinex3Obs_T::dataTestOutputObsDump
string dataTestOutputObsDump
Definition: Rinex3Obs_T.cpp:129
Rinex3Obs_T::dataIncompleteHeader
string dataIncompleteHeader
Definition: Rinex3Obs_T.cpp:103
Rinex3Obs_T::dataExceptionsTest
int dataExceptionsTest(void)
Definition: Rinex3Obs_T.cpp:591
gnsstk::Rinex3ObsHeader::validVersion
@ validVersion
RINEX VERSION / TYPE.
Definition: Rinex3ObsHeader.hpp:249
gnsstk::Rinex3ObsHeader::validInterval
@ validInterval
INTERVAL.
Definition: Rinex3ObsHeader.hpp:271
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::Rinex3ObsData
Definition: Rinex3ObsData.hpp:75
Rinex3ObsHeader.hpp
gnsstk::TimeSystem
TimeSystem
Definition of various time systems.
Definition: TimeSystem.hpp:51
gnsstk::Rinex3ObsHeaderTouchHeaderMerge::theHeader
Rinex3ObsHeader theHeader
Definition: Rinex3ObsFilterOperators.hpp:268
Rinex3Obs_T::filterOperatorsTest
int filterOperatorsTest(void)
Definition: Rinex3Obs_T.cpp:645
Rinex3Obs_T::dataFilterTest4
string dataFilterTest4
Definition: Rinex3Obs_T.cpp:123
Rinex3Obs_T::empty
Rinex3ObsHeader::Fields empty
Definition: Rinex3Obs_T.cpp:140
file_sep
string file_sep
Definition: Rinex3Obs_FromScratch_T.cpp:52
Rinex3ObsData.hpp
Rinex3Obs_T::dataFilterTest1
string dataFilterTest1
Definition: Rinex3Obs_T.cpp:120
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
Rinex3Obs_T::testMesg
string testMesg
Definition: Rinex3Obs_T.cpp:138
gnsstk::XmitAnt
XmitAnt
Definition: XmitAnt.hpp:53
Rinex3Obs_T::hardCodeTest
int hardCodeTest(void)
Definition: Rinex3Obs_T.cpp:510
Rinex3Obs_T::dataTestOutput3
string dataTestOutput3
Definition: Rinex3Obs_T.cpp:127
gnsstk::Rinex3ObsHeader::validObserver
@ validObserver
OBSERVER / AGENCY.
Definition: Rinex3ObsHeader.hpp:256
Rinex3Obs_T::dataTestOutput4
string dataTestOutput4
Definition: Rinex3Obs_T.cpp:128
gnsstk::Rinex3ObsHeaderTouchHeaderMerge
Definition: Rinex3ObsFilterOperators.hpp:209
Rinex3Obs_T::dataSystemGeosync
string dataSystemGeosync
Definition: Rinex3Obs_T.cpp:107
gnsstk::Rinex3ObsStream
Definition: Rinex3ObsStream.hpp:65
example3.data
data
Definition: example3.py:22
std::operator<<
std::ostream & operator<<(std::ostream &s, gnsstk::StringUtils::FFLead v)
Definition: FormattedDouble_T.cpp:44
gnsstk::CivilTime
Definition: CivilTime.hpp:55
gnsstk::Rinex3ObsDataOperatorLessThanFull
Definition: Rinex3ObsFilterOperators.hpp:67
Rinex3ObsStream.hpp
Rinex3Obs_T::dataHeaderTest
string dataHeaderTest
Definition: Rinex3Obs_T.cpp:113
Rinex3Obs_T::dataInvalidNumPRNWaveFact
string dataInvalidNumPRNWaveFact
Definition: Rinex3Obs_T.cpp:105
gnsstk::Rinex3ObsHeader::validMarkerNumber
@ validMarkerNumber
MARKER NUMBER.
Definition: Rinex3ObsHeader.hpp:254
Rinex3Obs_T::roundTripTest
int roundTripTest(void)
round-trip test for RINEX 3, read, write, compare.
Definition: Rinex3Obs_T.cpp:763
Rinex3Obs_T::version3ToVersion2Test
int version3ToVersion2Test(void)
Definition: Rinex3Obs_T.cpp:698
gnsstk::TimeSystem::GPS
@ GPS
GPS system time.
Rinex3Obs_T::Rinex3Obs_T
Rinex3Obs_T()
Definition: Rinex3Obs_T.cpp:72
std
Definition: Angle.hpp:142
gnsstk::XmitAnt::Regional
@ Regional
Transmitting antenna is secondary, regional coverage.
Rinex3ObsFilterOperators.hpp
Rinex3Obs_T::dataOutputRinex3ObsFile
string dataOutputRinex3ObsFile
Definition: Rinex3Obs_T.cpp:135
Rinex3ObsBase.hpp
Rinex3Obs_T::headerExceptionTest
int headerExceptionTest(void)
Definition: Rinex3Obs_T.cpp:323
Rinex3Obs_T::dataSystemGlonass
string dataSystemGlonass
Definition: Rinex3Obs_T.cpp:108
Rinex3Obs_T::dataBadEpochLine
string dataBadEpochLine
Definition: Rinex3Obs_T.cpp:115
Rinex3Obs_T::dataFilePath
string dataFilePath
Definition: Rinex3Obs_T.cpp:98
Rinex3Obs_T::dataUnSupVersion
string dataUnSupVersion
Definition: Rinex3Obs_T.cpp:111
Rinex3Obs_T::tempFilePath
string tempFilePath
Definition: Rinex3Obs_T.cpp:99
Rinex3Obs_T::dataTestOutputDataException
string dataTestOutputDataException
Definition: Rinex3Obs_T.cpp:130
gnsstk::Rinex3ObsHeader::Fields
Definition: Rinex3ObsHeader.hpp:369
gnsstk::Rinex3ObsHeader::validMarkerName
@ validMarkerName
MARKER NAME.
Definition: Rinex3ObsHeader.hpp:253
Rinex3Obs_T::dataInvalidTimeFormat
string dataInvalidTimeFormat
Definition: Rinex3Obs_T.cpp:118
gnsstk::TestUtil
Definition: TestUtil.hpp:265
Rinex3Obs_T::dataRinexContData
string dataRinexContData
Definition: Rinex3Obs_T.cpp:112
gnsstk::Rinex3ObsHeader::validWaveFact
@ validWaveFact
WAVELENGTH FACT L1/2.
Definition: Rinex3ObsHeader.hpp:269
tempFilePath
string tempFilePath
Definition: Rinex3Obs_FromScratch_T.cpp:50
gnsstk::Rinex3ObsHeader::validComment
@ validComment
COMMENT.
Definition: Rinex3ObsHeader.hpp:252
main
int main()
Definition: Rinex3Obs_T.cpp:1178
Rinex3Obs_T::dataTestFilterOutput
string dataTestFilterOutput
Definition: Rinex3Obs_T.cpp:131


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