PreciseRange_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 <iostream>
40 
41 #include "TestUtil.hpp"
42 #include "NavDataFactory.hpp"
43 #include "RinexNavDataFactory.hpp"
44 #include "NavLibrary.hpp"
45 #include "EphemerisRange.hpp"
46 #include "PreciseRange.hpp"
47 #include "SolarSystem.hpp"
48 
50 {
51 public:
55 
57 };
58 
59 
62  : navLib()
63 {
65  ndfp(std::make_shared<gnsstk::RinexNavDataFactory>());
66 
67  std::string fname = gnsstk::getPathData() + gnsstk::getFileSep() +
68  "arlm2000.15n";
69 
70  navLib.addFactory(ndfp);
71 
73  dynamic_cast<gnsstk::RinexNavDataFactory*>(ndfp.get());
74 
75  GNSSTK_ASSERT(rndfp->addDataSource(fname));
76 }
77 
78 
79 unsigned PreciseRange_T ::
81 {
82  TUDEF("PreciseRange_T", "ComputeAtTransmitTime");
83 
84  gnsstk::Position rxPos(-7.0e5, -5.0e6, 3.0e6);
88 
90  l1data.PCOvalue[0] = 1;
91  l1data.PCOvalue[1] = 2;
92  l1data.PCOvalue[2] = 3;
93  l1data.hasAzimuth = true;
94  gnsstk::AntexData::azimZenMap l1PcvData = {
95  { 0.0, {{0.0, 0.0}, {90.0, 16.0}}},
96  {360.0, {{0.0, 0.0}, {90.0, 16.0}}}
97  };
98  l1data.PCVvalue = l1PcvData;
99 
101  l2data.PCOvalue[0] = 3;
102  l2data.PCOvalue[1] = 2;
103  l2data.PCOvalue[2] = 1;
104  l2data.hasAzimuth = true;
105  gnsstk::AntexData::azimZenMap l2PcvData = {
106  { 0.0, {{0.0, 0.0}, {90.0, 11.0}}},
107  {360.0, {{0.0, 0.0}, {90.0, 11.0}}}
108  };
109  l2data.PCVvalue = l2PcvData;
110 
111  gnsstk::AntexData antenna;
112  antenna.valid = gnsstk::AntexData::validBits::allValid13;
113  antenna.isRxAntenna = true;
114 
115  std::map<std::string, gnsstk::AntexData::antennaPCOandPCVData> antennaData;
116  antennaData["G01"] = l1data;
117  antennaData["G02"] = l2data;
118  antenna.freqPCVmap = antennaData;
119 
120  // Not bothering to setup a mock solar system object.
121  // PreciseRange should default to a lower accuracy computation
122  gnsstk::SolarSystem solsys;
123 
125  double corrected_range =
126  pr.ComputeAtTransmitTime(time, 2e7, rxPos, satId, antenna,
127  "G01", "G02", solsys, navLib, true);
128 
129  TUASSERTFESMRT(22289260.787348996848, pr.rawrange);
130  TUASSERTFESMRT(22354141.670028157532, corrected_range);
131  TURETURN();
132 }
133 
134 
135 unsigned PreciseRange_T ::
137 {
138  TUDEF("PreciseRange_T", "ComputeAtTransmitTime");
139 
140  gnsstk::Position rxPos(-7.0e5, -5.0e6, 3.0e6);
143  time(gnsstk::CivilTime(2015,7,19,2,0,0.0,gnsstk::TimeSystem::GPS));
145  double corrected_range = pr.ComputeAtTransmitTime(time, 2e7, rxPos, satId, navLib);
146 
147  TUASSERTFESMRT(22289260.787348996848, pr.rawrange);
148  TUASSERTFESMRT(22354141.654476162046, corrected_range);
149  TURETURN();
150 }
151 
152 
153 int main()
154 {
155  PreciseRange_T testClass;
156  unsigned errorTotal = 0;
157 
158  errorTotal += testClass.testComputeAtTransmitTimeWithAntenna();
159  errorTotal += testClass.testComputeAtTransmitTimeWithoutAntenna();
160 
161  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
162  << std::endl;
163 
164  return errorTotal;
165 }
PreciseRange_T::navLib
gnsstk::NavLibrary navLib
Definition: PreciseRange_T.cpp:56
gnsstk::PreciseRange
Definition: PreciseRange.hpp:73
main
int main()
Definition: PreciseRange_T.cpp:153
gnsstk::AntexData::azimZenMap
std::map< double, zenOffsetMap > azimZenMap
Definition: AntexData.hpp:197
gnsstk::AntexData::antennaPCOandPCVData::PCVvalue
azimZenMap PCVvalue
Definition: AntexData.hpp:222
PreciseRange_T
Definition: PreciseRange_T.cpp:49
gnsstk::SatID
Definition: SatID.hpp:89
PreciseRange_T::testComputeAtTransmitTimeWithoutAntenna
unsigned testComputeAtTransmitTimeWithoutAntenna()
Definition: PreciseRange_T.cpp:136
gnsstk::NavDataFactoryPtr
std::shared_ptr< NavDataFactory > NavDataFactoryPtr
Managed pointer to NavDataFactory.
Definition: NavDataFactory.hpp:398
gnsstk::SatelliteSystem::GPS
@ GPS
EphemerisRange.hpp
gnsstk::PreciseRange::rawrange
double rawrange
Definition: PreciseRange.hpp:139
gnsstk::NavDataFactoryWithStoreFile::addDataSource
bool addDataSource(const std::string &source) override
Definition: NavDataFactoryWithStoreFile.hpp:64
gnsstk::AntexData::antennaPCOandPCVData::PCOvalue
double PCOvalue[3]
Definition: AntexData.hpp:210
TestUtil.hpp
NavLibrary.hpp
PreciseRange.hpp
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
gnsstk::NavLibrary
Definition: NavLibrary.hpp:944
gnsstk::AntexData
Definition: AntexData.hpp:120
example4.time
time
Definition: example4.py:103
gnsstk::PreciseRange::ComputeAtTransmitTime
double ComputeAtTransmitTime(const CommonTime &nomRecTime, const double pr, const Position &rxPos, const SatID sat, const AntexData &antenna, const std::string &freq1, const std::string &freq2, SolarSystem &solSys, NavLibrary &eph, bool isCOM=false, const EllipsoidModel &ellipsoid=GPSEllipsoid())
Definition: PreciseRange.cpp:65
TUASSERTFESMRT
#define TUASSERTFESMRT(EXP, GOT)
Definition: TestUtil.hpp:150
gnsstk::AntexData::valid
unsigned long valid
Definition: AntexData.hpp:230
gnsstk::CommonTime
Definition: CommonTime.hpp:84
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
PreciseRange_T::PreciseRange_T
PreciseRange_T()
Definition: PreciseRange_T.cpp:61
gnsstk::AntexData::freqPCVmap
std::map< std::string, antennaPCOandPCVData > freqPCVmap
map from frequency to antennaPCOandPCVData
Definition: AntexData.hpp:278
gnsstk::AntexData::antennaPCOandPCVData::hasAzimuth
bool hasAzimuth
Definition: AntexData.hpp:214
gnsstk::CivilTime
Definition: CivilTime.hpp:55
GNSSTK_ASSERT
#define GNSSTK_ASSERT(CONDITION)
Provide an "ASSERT" type macro.
Definition: Exception.hpp:373
SolarSystem.hpp
gnsstk::TimeSystem::GPS
@ GPS
GPS system time.
gnsstk::NavLibrary::addFactory
void addFactory(NavDataFactoryPtr &fact)
Definition: NavLibrary.cpp:470
gnsstk::RinexNavDataFactory
Definition: RinexNavDataFactory.hpp:57
gnsstk::Position
Definition: Position.hpp:136
PreciseRange_T::testComputeAtTransmitTimeWithAntenna
unsigned testComputeAtTransmitTimeWithAntenna()
Definition: PreciseRange_T.cpp:80
gnsstk::AntexData::isRxAntenna
bool isRxAntenna
Definition: AntexData.hpp:242
gnsstk::SolarSystem
Definition: SolarSystem.hpp:162
NavDataFactory.hpp
gnsstk::AntexData::antennaPCOandPCVData
Definition: AntexData.hpp:203
RinexNavDataFactory.hpp


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