00001 #pragma ident "$Id: ObsRngDev.hpp 778 2007-09-25 16:14:58Z ocibu $"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00045 #ifndef OBSRNGDEV_HPP
00046 #define OBSRNGDEV_HPP
00047
00048 #include <ostream>
00049
00050 #include "DayTime.hpp"
00051 #include "ECEF.hpp"
00052 #include "XvtStore.hpp"
00053 #include "Exception.hpp"
00054 #include "GPSGeoid.hpp"
00055 #include "IonoModelStore.hpp"
00056 #include "TropModel.hpp"
00057 #include "ValidType.hpp"
00058 #include "SatID.hpp"
00059
00060 namespace gpstk
00061 {
00062
00068 class ObsRngDev
00069 {
00070 public:
00071
00077 ObsRngDev() throw() : wonky(false), obstime(DayTime::END_OF_TIME) {};
00078
00093 ObsRngDev(const double prange,
00094 const SatID& svid,
00095 const DayTime& time,
00096 const ECEF& rxpos,
00097 const XvtStore<SatID>& eph,
00098 GeoidModel& gm,
00099 bool svTime = false);
00114 ObsRngDev(const double prange,
00115 const SatID& svid,
00116 const DayTime& time,
00117 const ECEF& rxpos,
00118 const XvtStore<SatID>& eph,
00119 GeoidModel& gm,
00120 const IonoModelStore& ion,
00121 IonoModel::Frequency fq,
00122 bool svTime = false);
00138 ObsRngDev(const double prange,
00139 const SatID& svid,
00140 const DayTime& time,
00141 const ECEF& rxpos,
00142 const XvtStore<SatID>& eph,
00143 GeoidModel& gm,
00144 const TropModel& tm,
00145 bool svTime = false);
00146
00162 ObsRngDev(const double prange,
00163 const SatID& svid,
00164 const DayTime& time,
00165 const ECEF& rxpos,
00166 const XvtStore<SatID>& eph,
00167 GeoidModel& gm,
00168 const TropModel& tm,
00169 const IonoModelStore& ion,
00170 IonoModel::Frequency fq,
00171 bool svTime = false);
00172
00185 ObsRngDev(const double prange1,
00186 const double prange2,
00187 const SatID& svid,
00188 const DayTime& time,
00189 const ECEF& rxpos,
00190 const XvtStore<SatID>& eph,
00191 GeoidModel& gm,
00192 bool svTime = false);
00193
00207 ObsRngDev(const double prange1,
00208 const double prange2,
00209 const SatID& svid,
00210 const DayTime& time,
00211 const ECEF& rxpos,
00212 const XvtStore<SatID>& eph,
00213 const GeoidModel& gm,
00214 const TropModel& tm,
00215 bool svTime = false);
00216
00218 virtual ~ObsRngDev() throw() {}
00219
00220
00225 const DayTime& getTime() const throw() { return obstime; }
00226
00231 SatID getSvID() const throw() { return svid; }
00232
00237 vfloat getAzimuth() const throw() { return azimuth; }
00238
00243 vfloat getElevation() const throw() { return elevation; }
00244
00249 vshort getHealth() const throw() { return health; }
00250
00255 vshort getIODC() const throw() { return iodc; }
00256
00261 double getORD() const throw() { return ord; }
00262
00267 vdouble getIono() const throw() { return iono; }
00268
00273 vdouble getTrop() const throw() { return trop; }
00274
00275 friend std::ostream& operator<<(std::ostream& s,
00276 const ObsRngDev& r) throw();
00277
00278 void applyClockOffset(double clockOffset)
00279 {ord -= clockOffset;}
00280
00281 static bool debug;
00282
00283 private:
00284 void computeOrd(double obs,
00285 const ECEF& rxpos,
00286 const XvtStore<SatID>& eph,
00287 const GeoidModel& gm,
00288 bool svTime)
00289 {
00290 if (svTime)
00291 computeOrdTx(obs, rxpos, eph, gm);
00292 else
00293 computeOrdRx(obs, rxpos, eph, gm);
00294 return;
00295 }
00296
00297
00298
00299 void computeOrdTx(double obs,
00300 const ECEF& rxpos,
00301 const XvtStore<SatID>& eph,
00302 const GeoidModel& gm);
00303
00304 void computeOrdRx(double obs,
00305 const ECEF& rxpos,
00306 const XvtStore<SatID>& eph,
00307 const GeoidModel& gm);
00308
00309 void computeTrop(const TropModel& tm);
00310
00311 public:
00312 DayTime obstime;
00313 SatID svid;
00314 double ord;
00315 unsigned wonky;
00316
00317 vfloat azimuth;
00318 vfloat elevation;
00319 vshort health;
00320 vshort iodc;
00321 vdouble rho;
00322 vdouble iono;
00323 vdouble trop;
00324 };
00325 }
00326 #endif