3 import unittest, sys, os
5 sys.path.insert(0, os.path.abspath(
".."))
6 from gnsstk.test_utils
import args,run_unit_tests
9 from tests
import AbstractBaseTesters
14 a = gnsstk.SatelliteSystem.GPS
15 self.assertIsNotNone(a)
18 a = gnsstk.std_vector_GNSS()
19 a.append(gnsstk.SatelliteSystem.GPS)
20 self.assertTrue(
not a.empty())
24 self.assertTrue(a.isWild())
25 self.assertTrue(a.isValid())
28 a = gnsstk.std_vector_SatID()
30 self.assertTrue(
not a.empty())
33 a = gnsstk.Xvt.Unhealthy
34 self.assertIsNotNone(a)
36 self.assertIsNotNone(b)
40 self.assertIsNotNone(a.sin())
46 self.assertTrue(b.rad() == 1.5707963267948966)
47 self.assertTrue(b.deg() == 90.0)
48 self.assertTrue(c.rad() == 0.4636476090008061)
49 self.assertTrue(c.deg() == 26.56505117707799)
52 a = gnsstk.ObservationType.Range
53 self.assertIsNotNone(a)
56 a = gnsstk.std_map_ObservationType_string()
57 self.assertTrue(len(a.values()) == 0)
63 a = gnsstk.CarrierBand.L1
64 self.assertIsNotNone(a)
67 a = gnsstk.std_map_CarrierBand_string()
68 self.assertTrue(len(a.values()) == 0)
74 a = gnsstk.TrackingCode.CA
75 self.assertIsNotNone(a)
78 a = gnsstk.std_map_TrackingCode_string()
79 self.assertTrue(len(a.values()) == 0)
85 a = gnsstk.XmitAnt.Standard
86 self.assertIsNotNone(a)
89 a =
gnsstk.ObsID(gnsstk.ObservationType.Range, gnsstk.CarrierBand.L1, gnsstk.TrackingCode.CA)
93 a = gnsstk.std_vector_ObsID()
94 a.append(
gnsstk.ObsID(gnsstk.ObservationType.Range, gnsstk.CarrierBand.L1, gnsstk.TrackingCode.CA))
95 self.assertTrue(
not a.empty())
98 a = gnsstk.std_map_SvObsEpoch()
99 self.assertTrue(len(a.values()) == 0)
100 a[
gnsstk.ObsID(gnsstk.ObservationType.Range, gnsstk.CarrierBand.L1, gnsstk.TrackingCode.CA)] = 5.0
101 self.assertTrue(a[
gnsstk.ObsID(gnsstk.ObservationType.Range, gnsstk.CarrierBand.L1, gnsstk.TrackingCode.CA)] == 5.0)
115 self.assertTrue(b.toString() ==
"?-1")
118 a = gnsstk.std_vector_RinexSatID()
122 self.assertTrue(
not a.empty())
131 self.assertIsNotNone(a.asClockType(
'Cesium'))
145 a = gnsstk.RinexObsHeader.allValid20
146 self.assertIsNotNone(a)
151 a =
gnsstk.ObsID(gnsstk.ObservationType.Range, gnsstk.CarrierBand.L1, gnsstk.TrackingCode.CA)
154 self.assertTrue(str(b) ==
"C1C")
157 a = gnsstk.std_vector_RinexObsID()
158 b =
gnsstk.ObsID(gnsstk.ObservationType.Range, gnsstk.CarrierBand.L1, gnsstk.TrackingCode.CA)
161 self.assertTrue(
not a.empty())
166 Tests for BCISCorrector
171 Test BCISCorrector setup and getCorr
173 Python users should be able to create a BCISCorrector
174 and compute a correction from inputs.
180 ndf.addDataSource(os.path.join(args.input_dir,
"arlm2000.15n"))
181 navLib.addFactory(ndf)
185 when =
gnsstk.CivilTime(2015,7,19,4,30,0,gnsstk.TimeSystem.Any).toCommonTime()
187 oid =
gnsstk.ObsID(gnsstk.ObservationType.Phase,gnsstk.CarrierBand.L1,gnsstk.TrackingCode.CA)
188 nav = gnsstk.NavType.GPSLNAV
190 rv, corr = isc.getCorr(stnPos, svPos, sat, oid, when, nav)
192 self.assertEqual(
True, rv)
193 self.assertAlmostEqual(2.04890966415e-08, corr)
197 rv, corr = isc.getCorr(stnPos, svXvt, sat, oid, when, nav)
199 self.assertEqual(
True, rv)
200 self.assertAlmostEqual(2.04890966415e-08, corr)
205 Tests for BCIonoCorrector
210 Test BCIonoCorrector setup and getCorr.
212 Python users should be able to create a BCIonoCorrector
213 and compute a correction from inputs.
219 ndf.addDataSource(os.path.join(args.input_dir,
"mixed.06n"))
220 navLib.addFactory(ndf)
224 when =
gnsstk.CivilTime(2006,10,1,4,30,0,gnsstk.TimeSystem.Any).toCommonTime()
226 oid =
gnsstk.ObsID(gnsstk.ObservationType.Iono,gnsstk.CarrierBand.L1,gnsstk.TrackingCode.CA)
227 nav = gnsstk.NavType.GPSLNAV
229 rv, corr = iono.getCorr(stnPos, svPos, sat, oid, when, nav)
231 self.assertEqual(
True, rv)
232 self.assertAlmostEqual(3.623343027333741, corr)
236 rv, corr = iono.getCorr(stnPos, svXvt, sat, oid, when, nav)
238 self.assertEqual(
True, rv)
239 self.assertAlmostEqual(3.623343027333741, corr)
244 Test existence and string conversions of CorrDupHandling enum
247 ENUM = gnsstk.CorrDupHandling
250 gnsstk.CorrDupHandling.Unknown:
"Unknown",
251 gnsstk.CorrDupHandling.ComputeFirst:
"ComputeFirst",
252 gnsstk.CorrDupHandling.ComputeLast:
"ComputeLast",
253 gnsstk.CorrDupHandling.UseFirst:
"UseFirst",
256 STR_CONVERTER = gnsstk.asCorrDupHandling
261 Test existence and string conversions of CorrectorType enum
264 ENUM = gnsstk.CorrectorType
267 gnsstk.CorrectorType.Unknown:
"Unknown",
268 gnsstk.CorrectorType.Trop:
"Trop",
269 gnsstk.CorrectorType.Iono:
"Iono",
270 gnsstk.CorrectorType.ISC:
"ISC",
271 gnsstk.CorrectorType.Multipath:
"Multipath",
272 gnsstk.CorrectorType.RxChlBias:
"RxChlBias"
275 STR_CONVERTER = gnsstk.asCorrectorType
280 Tests for CorrectionResult
285 Test general manipulation of CorrectionResult object
291 self.assertTrue(math.isnan(corr_nan.result))
292 self.assertEqual(corr_iono.result, 100)
293 self.assertEqual(corr_iono.source.corrType, gnsstk.CorrectorType.Iono)
297 Tests for CorrectionResults
302 Test general manipulation of CorrectionResults objects.
304 Most important will be the ability to get the total sum of corrections
305 and getting individual corrections within the list.
315 corr_results.addResult(corr_trop)
316 corr_results.addResult(corr_iono)
317 corr_results.addResult(corr_ISC)
318 corr_results.addResult(corr_ISC2)
320 self.assertEqual(len(corr_results.getResults()), 4)
321 self.assertEqual(corr_results.getResults()[0].result, 150)
322 self.assertEqual(corr_results.getCorrSum(gnsstk.CorrDupHandling.ComputeFirst), 175)
323 self.assertEqual(corr_results.getCorrSum(gnsstk.CorrDupHandling.ComputeLast), 295)
327 Tests of the GroupPathCorr SWIG bindings.
332 Test manual setup of GroupPathCorr.
334 GroupPathCorr should allow manually appending correctors.
340 ndf.addDataSource(os.path.join(args.input_dir,
"arlm2000.15n"))
341 navLib.addFactory(ndf)
345 when =
gnsstk.CivilTime(2015,7,19,4,30,0,gnsstk.TimeSystem.Any).toCommonTime()
347 oid =
gnsstk.ObsID(gnsstk.ObservationType.Iono,gnsstk.CarrierBand.L1,gnsstk.TrackingCode.CA)
348 nav = gnsstk.NavType.GPSLNAV
356 pec.calcs.append(iono)
357 pec.calcs.append(trop)
358 pec.calcs.append(isc)
360 rv, corr = pec.getCorr(stnPos, svPos, sat, oid, when, nav)
363 self.assertAlmostEqual(corr, 13.085598163018554)
367 Test the `init` method and resulting correction.
369 This should automatically setup GroupPathCorr with default ISC and Iono
376 ndf.addDataSource(os.path.join(args.input_dir,
"arlm2000.15n"))
377 navLib.addFactory(ndf)
381 when =
gnsstk.CivilTime(2015,7,19,4,30,0,gnsstk.TimeSystem.Any).toCommonTime()
383 oid =
gnsstk.ObsID(gnsstk.ObservationType.Iono,gnsstk.CarrierBand.L1,gnsstk.TrackingCode.CA)
384 nav = gnsstk.NavType.GPSLNAV
386 rv = pec.init(navLib)
389 rv, corr = pec.getCorr(stnPos, svPos, sat, oid, when, nav)
391 self.assertAlmostEqual(corr, 3.6233430478228374)
395 Test the `initGlobal` method and resulting correction.
397 This should automatically setup GroupPathCorr with default, ISC, Iono,
398 and Global Trop models.
404 ndf.addDataSource(os.path.join(args.input_dir,
"arlm2000.15n"))
405 navLib.addFactory(ndf)
409 when =
gnsstk.CivilTime(2015,7,19,4,30,0,gnsstk.TimeSystem.Any).toCommonTime()
411 oid =
gnsstk.ObsID(gnsstk.ObservationType.Iono,gnsstk.CarrierBand.L1,gnsstk.TrackingCode.CA)
412 nav = gnsstk.NavType.GPSLNAV
414 rv = pec.initGlobal(navLib, os.path.join(args.input_dir,
"arlm2000.15m"))
417 rv, corr = pec.getCorr(stnPos, svPos, sat, oid, when, nav)
419 self.assertAlmostEqual(corr, 13.399231057432754)
423 Test the `initNB` method and resulting correction
425 This should automatically setup GroupPathCorr with default
426 ISC, Iono, and NB Trop models.
432 ndf.addDataSource(os.path.join(args.input_dir,
"arlm2000.15n"))
433 navLib.addFactory(ndf)
437 when =
gnsstk.CivilTime(2015,7,19,4,30,0,gnsstk.TimeSystem.Any).toCommonTime()
439 oid =
gnsstk.ObsID(gnsstk.ObservationType.Iono,gnsstk.CarrierBand.L1,gnsstk.TrackingCode.CA)
440 nav = gnsstk.NavType.GPSLNAV
442 rv = pec.initNB(navLib, os.path.join(args.input_dir,
"arlm2000.15m"))
445 rv, corr = pec.getCorr(stnPos, svPos, sat, oid, when, nav)
447 self.assertAlmostEqual(corr, 12.468046669500502)
454 Test TropCorrector getCorr.
456 This is a regression test of the computed trop correction
460 errcalc.calcs.append(trop)
461 rv = trop.loadFile(os.path.join(args.input_dir,
"arlm2000.15m"))
462 self.assertEqual(
True, rv)
465 when =
gnsstk.CivilTime(2015,7,19,4,30,0,gnsstk.TimeSystem.Any).toCommonTime()
468 nav = gnsstk.NavType.GPSLNAV
469 rv,corr = errcalc.getCorr(stnPos,svPos,sat,oid,when,nav)
470 self.assertEqual(
True, rv)
471 self.assertAlmostEqual(9.775888009609917, corr)
475 TropCorrector must accept default weather.
477 This also serves as a regression test of the compute correction.
481 errcalc.calcs.append(trop)
482 trop.setDefaultWx(15, 1000, 75)
485 when =
gnsstk.CivilTime(2015,7,19,4,30,0,gnsstk.TimeSystem.Any).toCommonTime()
488 nav = gnsstk.NavType.GPSLNAV
489 rv,corr = errcalc.getCorr(stnPos,svPos,sat,oid,when,nav)
490 self.assertEqual(
True, rv)
491 self.assertAlmostEqual(9.06752734042942, corr)
493 if __name__ ==
'__main__':