OrbitDataKepler.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> // trig functions
40 #include "OrbitDataKepler.hpp"
41 #include "GPSWeekSecond.hpp"
42 #include "GPSEllipsoid.hpp"
43 #include "TimeString.hpp"
44 
45 using namespace std;
46 
47 namespace gnsstk
48 {
49  OrbitDataKepler ::
50  OrbitDataKepler()
51  : Cuc(0.0), Cus(0.0), Crc(0.0), Crs(0.0), Cic(0.0), Cis(0.0), M0(0.0),
52  dn(0.0), dndot(0.0), ecc(0.0), A(0.0), Ahalf(0.0), Adot(0.0),
53  OMEGA0(0.0), i0(0.0), w(0.0), OMEGAdot(0.0), idot(0.0), af0(0.0),
54  af1(0.0), af2(0.0), health(SVHealth::Unknown),
55  frame(RefFrameSys::WGS84)
56  {
57  }
58 
59 
61  dump(std::ostream& s, DumpDetail dl) const
62  {
63  if (dl == DumpDetail::OneLine)
64  {
67  ? " toa: " : " toe: ")
68  << printTime(Toe, dumpTimeFmtBrief) << " "
69  << gnsstk::StringUtils::asString(health) << std::endl;
70  return;
71  }
72  // "header"
73  s << "****************************************************************"
74  << "************" << endl
75  << "Broadcast " << getDataType() << " (Engineering Units)"
76  // - " << getNameLong();
77  << endl
78  << endl
79  << getSignalString() << endl;
80 
81  // the rest is full details, so just return if Full is not asked for.
82  if (dl != DumpDetail::Full)
83  return;
84 
85  const ios::fmtflags oldFlags = s.flags();
86 
87  s.setf(ios::fixed, ios::floatfield);
88  s.setf(ios::right, ios::adjustfield);
89  s.setf(ios::uppercase);
90  s.precision(0);
91  s.fill(' ');
92 
93  dumpSVStatus(s);
94 
95  s << endl
96  << " TIMES OF INTEREST"
97  << endl << endl
98  << " " << getDumpTimeHdr(dl) << endl
99  << "Begin Valid: " << getDumpTime(dl, beginFit) << endl
100  << "Clock Epoch: " << getDumpTime(dl, Toc) << endl
101  << (signal.messageType == NavMessageType::Ephemeris ? "Eph" : "Alm")
102  << " Epoch: " << getDumpTime(dl, Toe) << endl
103  << "End Valid: " << getDumpTime(dl, endFit) << endl;
104 
105  s.setf(ios::scientific, ios::floatfield);
106  s.precision(precision);
107  s.fill(' ');
108 
109  dumpClock(s);
110  dumpOrbit(s);
111  dumpHarmonics(s);
112 
113  s.flags(oldFlags);
114  }
115 
116 
117  void OrbitDataKepler ::
118  dumpClock(std::ostream& s) const
119  {
120  s << endl
121  << " CLOCK PARAMETERS"
122  << endl
123  << endl
124  << "Bias T0: " << setw(fw) << af0 << " sec" << endl
125  << "Drift: " << setw(fw) << af1 << " sec/sec" << endl
126  << "Drift rate: " << setw(fw) << af2 << " sec/(sec**2)" << endl;
127  }
128 
129 
130  void OrbitDataKepler ::
131  dumpOrbit(std::ostream& s) const
132  {
133  s << endl
134  << " ORBIT PARAMETERS"
135  << endl
136  << endl
137  << "Semi-major axis: " << setw(fw) << A << " m "
138  << setw(fw) << Adot << " m/sec" << endl
139  << "Motion correction: " << setw(fw) << dn << " rad/sec "
140  << setw(fw) << dndot << " rad/(sec**2)" << endl
141  << "Eccentricity: " << setw(fw) << ecc << endl
142  << "Arg of perigee: " << setw(fw) << w << " rad" << endl
143  << "Mean anomaly at epoch: " << setw(fw) << M0 << " rad" << endl
144  << "Right ascension: " << setw(fw) << OMEGA0 << " rad "
145  << setw(fw) << OMEGAdot << " rad/sec" << endl
146  << "Inclination: " << setw(fw) << i0 << " rad "
147  << setw(fw) << idot << " rad/sec" << endl;
148  }
149 
150 
151  void OrbitDataKepler ::
152  dumpHarmonics(std::ostream& s) const
153  {
154  s << endl
155  << " HARMONIC CORRECTIONS"
156  << endl
157  << endl
158  << "Radial Sine: " << setw(fw) << Crs << " m Cosine: "
159  << setw(fw) << Crc << " m" << endl
160  << "Inclination Sine: " << setw(fw) << Cis << " rad Cosine: "
161  << setw(fw) << Cic << " rad" << endl
162  << "In-track Sine: " << setw(fw) << Cus << " rad Cosine: "
163  << setw(fw) << Cuc << " rad" << endl;
164  }
165 
166 
167  bool OrbitDataKepler ::
168  getXvt(const CommonTime& when, const EllipsoidModel& ell, Xvt& xvt,
169  const ObsID& oid)
170  {
171  GPSWeekSecond gpsws = (Toe);
172  double ToeSOW = gpsws.sow;
173  double ea; // eccentric anomaly
174  double delea; // delta eccentric anomaly during iteration
175  double elapte; // elapsed time since Toe
176  double q,sinea,cosea;
177  double GSTA,GCTA;
178  double amm;
179  double meana; // mean anomaly
180  double F,G; // temporary real variables
181  double alat,talat,c2al,s2al,du,dr,di,U,R,truea,AINC;
182  double ANLON,cosu,sinu,xip,yip,can,san,cinc,sinc;
183  double xef,yef,zef,dek,dlk,div,domk,duv,drv;
184  double dxp,dyp,vxef,vyef,vzef;
185 
186  double sqrtgm = SQRT(ell.gm());
187  double twoPI = 2.0e0 * PI;
188  double lecc; // eccentricity
189  double tdrinc; // dt inclination
190 
191  lecc = ecc;
192  tdrinc = idot;
193 
194  // Compute time since ephemeris & clock epochs
195  elapte = when - Toe;
196 
197  // Compute A at time of interest
198  double Ak = A + Adot * elapte;
199 
200  // Compute mean motion
201  double dnA = dn + 0.5 * dndot * elapte;
202  // NOT Ak because this equation specifies A0, not Ak.
203  amm = (sqrtgm / (A*Ahalf)) + dnA;
204 
205  // In-plane angles
206  // meana - Mean anomaly
207  // ea - Eccentric anomaly
208  // truea - True anomaly
209 
210  meana = M0 + elapte * amm;
211  meana = fmod(meana, twoPI);
212 
213  ea = meana + lecc * ::sin(meana);
214 
215  int loop_cnt = 1;
216  do {
217  F = meana - ( ea - lecc * ::sin(ea));
218  G = 1.0 - lecc * ::cos(ea);
219  delea = F/G;
220  ea = ea + delea;
221  loop_cnt++;
222  } while ( (fabs(delea) > 1.0e-11 ) && (loop_cnt <= 20) );
223 
224  // Compute clock corrections
225  xvt.relcorr = svRelativity(when, ell);
226  xvt.clkbias = svClockBias(when);
227  xvt.clkdrift = svClockDrift(when);
228  xvt.frame = RefFrame(frame, when);
229 
230  // Compute true anomaly
231  q = SQRT( 1.0e0 - lecc*lecc);
232  sinea = ::sin(ea);
233  cosea = ::cos(ea);
234  G = 1.0e0 - lecc * cosea;
235 
236  // G*SIN(TA) AND G*COS(TA)
237  GSTA = q * sinea;
238  GCTA = cosea - lecc;
239 
240  // True anomaly
241  truea = atan2 ( GSTA, GCTA );
242 
243  // Argument of lat and correction terms (2nd harmonic)
244  alat = truea + w;
245  talat = 2.0e0 * alat;
246  c2al = ::cos( talat );
247  s2al = ::sin( talat );
248 
249  du = c2al * Cuc + s2al * Cus;
250  dr = c2al * Crc + s2al * Crs;
251  di = c2al * Cic + s2al * Cis;
252 
253  // U = updated argument of lat, R = radius, AINC = inclination
254  U = alat + du;
255  R = Ak*G + dr;
256  AINC = i0 + tdrinc * elapte + di;
257 
258  // Longitude of ascending node (ANLON)
259  ANLON = OMEGA0 + (OMEGAdot - ell.angVelocity()) *
260  elapte - ell.angVelocity() * ToeSOW;
261 
262  // In plane location
263  cosu = ::cos( U );
264  sinu = ::sin( U );
265 
266  xip = R * cosu;
267  yip = R * sinu;
268 
269  // Angles for rotation to earth fixed
270  can = ::cos( ANLON );
271  san = ::sin( ANLON );
272  cinc = ::cos( AINC );
273  sinc = ::sin( AINC );
274 
275  // Earth fixed - meters
276  xef = xip*can - yip*cinc*san;
277  yef = xip*san + yip*cinc*can;
278  zef = yip*sinc;
279 
280  xvt.x[0] = xef;
281  xvt.x[1] = yef;
282  xvt.x[2] = zef;
283 
284  // Compute velocity of rotation coordinates
285  dek = amm / G;
286  dlk = amm * q / (G*G);
287  div = tdrinc - 2.0e0 * dlk *
288  ( Cic * s2al - Cis * c2al );
289  domk = OMEGAdot - ell.angVelocity();
290  duv = dlk*(1.e0+ 2.e0 * (Cus*c2al - Cuc*s2al) );
291  drv = Ak * lecc * dek * sinea - 2.e0 * dlk *
292  ( Crc * s2al - Crs * c2al ) + Adot * G;
293 
294  dxp = drv*cosu - R*sinu*duv;
295  dyp = drv*sinu + R*cosu*duv;
296 
297  // Calculate velocities
298  vxef = dxp*can - xip*san*domk - dyp*cinc*san
299  + yip*( sinc*san*div - cinc*can*domk);
300  vyef = dxp*san + xip*can*domk + dyp*cinc*can
301  - yip*( sinc*can*div + cinc*san*domk);
302  vzef = dyp*sinc + yip*cinc*div;
303 
304  // Move results into output variables
305  xvt.v[0] = vxef;
306  xvt.v[1] = vyef;
307  xvt.v[2] = vzef;
308  xvt.health = toXvtHealth(health);
309  return true;
310  }
311 
312 
313  double OrbitDataKepler ::
314  svRelativity(const CommonTime& when, const EllipsoidModel& ell) const
315  {
316  double twoPI = 2.0e0 * PI;
317  double sqrtgm = SQRT(ell.gm());
318  double elapte = when - Toe;
319  double amm = (sqrtgm / (A*Ahalf)) + dn;
320  double meana,F,G,delea;
321 
322  double Ak = A + Adot*elapte;
323  meana = M0 + elapte * amm;
324  meana = fmod(meana, twoPI);
325  double ea = meana + ecc * ::sin(meana);
326 
327  int loop_cnt = 1;
328  do {
329  F = meana - ( ea - ecc * ::sin(ea));
330  G = 1.0 - ecc * ::cos(ea);
331  delea = F/G;
332  ea = ea + delea;
333  loop_cnt++;
334  } while ( (ABS(delea) > 1.0e-11 ) && (loop_cnt <= 20) );
335  double dtr = REL_CONST * ecc * SQRT(Ak) * ::sin(ea);
336  return dtr;
337  }
338 
339 
340  double OrbitDataKepler ::
341  svClockBias(const CommonTime& when) const
342  {
343  double dtc, elaptc;
344  elaptc = when - Toc;
345  dtc = af0 + elaptc * ( af1 + elaptc * af2 );
346  return dtc;
347  }
348 
349 
350  double OrbitDataKepler ::
351  svClockDrift(const CommonTime& when) const
352  {
353  double drift, elaptc;
354  elaptc = when - Toc;
355  drift = af1 + elaptc * af2;
356  return drift;
357  }
358 
359 
360  bool OrbitDataKepler ::
361  isSameData(const NavDataPtr& right) const
362  {
363  const std::shared_ptr<OrbitDataKepler> rhs =
364  std::dynamic_pointer_cast<OrbitDataKepler>(right);
365  if (!rhs)
366  {
367  // not the same type.
368  return false;
369  }
370  return (NavData::isSameData(right) &&
371  (Toe == rhs->Toe) &&
372  (Toc == rhs->Toc) &&
373  (Cuc == rhs->Cuc) &&
374  (Cus == rhs->Cus) &&
375  (Crc == rhs->Crc) &&
376  (Crs == rhs->Crs) &&
377  (Cic == rhs->Cic) &&
378  (Cis == rhs->Cis) &&
379  (M0 == rhs->M0) &&
380  (dn == rhs->dn) &&
381  (dndot == rhs->dndot) &&
382  (ecc == rhs->ecc) &&
383  (A == rhs->A) &&
384  (Ahalf == rhs->Ahalf) &&
385  (Adot == rhs->Adot) &&
386  (OMEGA0 == rhs->OMEGA0) &&
387  (i0 == rhs->i0) &&
388  (w == rhs->w) &&
389  (OMEGAdot == rhs->OMEGAdot) &&
390  (idot == rhs->idot) &&
391  (af0 == rhs->af0) &&
392  (af1 == rhs->af1) &&
393  (af2 == rhs->af2));
394  }
395 
396 
397  std::list<std::string> OrbitDataKepler ::
398  compare(const NavDataPtr& right) const
399  {
400  // OrbitData doesn't have any data, but OrbitData::compare
401  // instead throws an exception if called so as to make sure
402  // unimplemented children make it clear they're
403  // unimplemented. So jump directly to NavData::compare.
404  std::list<std::string> rv = NavData::compare(right);
405  const std::shared_ptr<OrbitDataKepler> rhs =
406  std::dynamic_pointer_cast<OrbitDataKepler>(right);
407  if (!rhs)
408  {
409  // not the same type.
410  rv.push_back("CLASS");
411  }
412  else
413  {
414  // old nav implementation clearly didn't check this
415  // if (xmitTime != rhs->xmitTime)
416  // rv.push_back("xmitTime");
417  if (Toe != rhs->Toe)
418  rv.push_back("Toe");
419  if (Toc != rhs->Toc)
420  rv.push_back("Toc");
421  if (health != rhs->health)
422  rv.push_back("health");
423  if (Cuc != rhs->Cuc)
424  rv.push_back("Cuc");
425  if (Cus != rhs->Cus)
426  rv.push_back("Cus");
427  if (Crc != rhs->Crc)
428  rv.push_back("Crc");
429  if (Crs != rhs->Crs)
430  rv.push_back("Crs");
431  if (Cic != rhs->Cic)
432  rv.push_back("Cic");
433  if (Cis != rhs->Cis)
434  rv.push_back("Cis");
435  if (M0 != rhs->M0)
436  rv.push_back("M0");
437  if (dn != rhs->dn)
438  rv.push_back("dn");
439  if (dndot != rhs->dndot)
440  rv.push_back("dndot");
441  if (ecc != rhs->ecc)
442  rv.push_back("ecc");
443  if (A != rhs->A)
444  rv.push_back("A");
445  if (Ahalf != rhs->Ahalf)
446  rv.push_back("Ahalf");
447  if (Adot != rhs->Adot)
448  rv.push_back("Adot");
449  if (OMEGA0 != rhs->OMEGA0)
450  rv.push_back("OMEGA0");
451  if (i0 != rhs->i0)
452  rv.push_back("i0");
453  if (w != rhs->w)
454  rv.push_back("w");
455  if (OMEGAdot != rhs->OMEGAdot)
456  rv.push_back("OMEGAdot");
457  if (idot != rhs->idot)
458  rv.push_back("idot");
459  if (af0 != rhs->af0)
460  rv.push_back("af0");
461  if (af1 != rhs->af1)
462  rv.push_back("af1");
463  if (af2 != rhs->af2)
464  rv.push_back("af2");
465  if (beginFit != rhs->beginFit)
466  rv.push_back("beginFit");
467  if (endFit != rhs->endFit)
468  rv.push_back("endFit");
469  }
470  return rv;
471  }
472 }
gnsstk::NavDataPtr
std::shared_ptr< NavData > NavDataPtr
Factories instantiate these in response to find() requests.
Definition: NavData.hpp:62
gnsstk::OrbitDataKepler::idot
double idot
Rate of inclination angle (rad/sec)
Definition: OrbitDataKepler.hpp:193
gnsstk::NavData::getSignalString
std::string getSignalString() const
Definition: NavData.cpp:86
gnsstk::OrbitDataKepler::frame
RefFrameSys frame
Definition: OrbitDataKepler.hpp:202
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::NavData::compare
virtual std::list< std::string > compare(const NavDataPtr &right) const
Definition: NavData.cpp:66
SQRT
#define SQRT(x)
Definition: MathBase.hpp:74
gnsstk::OrbitDataKepler::af2
double af2
SV clock drift rate (sec/sec**2)
Definition: OrbitDataKepler.hpp:197
gnsstk::OrbitDataKepler::svRelativity
virtual double svRelativity(const CommonTime &when) const =0
gnsstk::OrbitDataKepler::ecc
double ecc
Eccentricity.
Definition: OrbitDataKepler.hpp:185
gnsstk::OrbitDataKepler::svClockBias
double svClockBias(const CommonTime &when) const
Definition: OrbitDataKepler.cpp:341
gnsstk::toXvtHealth
gnsstk::Xvt::HealthStatus toXvtHealth(SVHealth e)
Cast SVHealth to Xvt::HealthStatus.
Definition: SVHealth.cpp:43
gnsstk::NavMessageID::messageType
NavMessageType messageType
Definition: NavMessageID.hpp:97
gnsstk::OrbitDataKepler::OMEGAdot
double OMEGAdot
Rate of Rt ascension (rad/sec)
Definition: OrbitDataKepler.hpp:192
gnsstk::NavData::getDumpTime
std::string getDumpTime(DumpDetail dl, const CommonTime &t) const
Definition: NavData.cpp:145
OrbitDataKepler.hpp
example5.oid
oid
Definition: example5.py:29
gnsstk::Xvt::frame
RefFrame frame
reference frame of this data
Definition: Xvt.hpp:156
gnsstk::NavFit::endFit
CommonTime endFit
Time at end of fit interval.
Definition: NavFit.hpp:55
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
gnsstk::OrbitDataKepler::Cuc
double Cuc
Cosine latitude (rad)
Definition: OrbitDataKepler.hpp:175
gnsstk::EllipsoidModel::angVelocity
virtual double angVelocity() const noexcept=0
gnsstk::NavData::getDumpTimeHdr
std::string getDumpTimeHdr(DumpDetail dl) const
Definition: NavData.cpp:127
gnsstk::OrbitDataKepler::w
double w
Argument of perigee (rad)
Definition: OrbitDataKepler.hpp:191
gnsstk::PI
const double PI
GPS value of PI; also specified by GAL.
Definition: GNSSconstants.hpp:62
gnsstk::Xvt::v
Triple v
satellite velocity in ECEF Cartesian, meters/second
Definition: Xvt.hpp:152
gnsstk::OrbitDataKepler::Toe
CommonTime Toe
Orbit epoch.
Definition: OrbitDataKepler.hpp:171
gnsstk::OrbitDataKepler::Crs
double Crs
Sine radius (m)
Definition: OrbitDataKepler.hpp:178
gnsstk::SVHealth
SVHealth
Identify different types of SV health states.
Definition: SVHealth.hpp:52
gnsstk::RefFrame
Definition: RefFrame.hpp:53
gnsstk::NavData::signal
NavMessageID signal
Source signal identification for this navigation message data.
Definition: NavData.hpp:175
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::IonexStoreStrategy::Unknown
@ Unknown
Unknown or uninitialized stategy value.
std::sin
double sin(gnsstk::Angle x)
Definition: Angle.hpp:144
gnsstk::Xvt::relcorr
double relcorr
relativity correction (standard 2R.V/c^2 term), seconds
Definition: Xvt.hpp:155
gnsstk::GPSWeekSecond
Definition: GPSWeekSecond.hpp:56
gnsstk::OrbitDataKepler::dumpHarmonics
virtual void dumpHarmonics(std::ostream &s) const
Definition: OrbitDataKepler.cpp:152
gnsstk::NavData::timeStamp
CommonTime timeStamp
Definition: NavData.hpp:173
gnsstk::OrbitDataKepler::Adot
double Adot
Rate of semi-major axis (m/sec)
Definition: OrbitDataKepler.hpp:188
gnsstk::OrbitDataKepler::M0
double M0
Mean anomaly (rad)
Definition: OrbitDataKepler.hpp:182
gnsstk::Xvt::x
Triple x
Sat position ECEF Cartesian (X,Y,Z) meters.
Definition: Xvt.hpp:151
gnsstk::NavData::dumpTimeFmtBrief
static const GNSSTK_EXPORT std::string dumpTimeFmtBrief
Time format used for the dump method (Brief).
Definition: NavData.hpp:92
gnsstk::REL_CONST
const double REL_CONST
relativity constant (sec/sqrt(m))
Definition: GNSSconstants.hpp:72
gnsstk::OrbitDataKepler::dndot
double dndot
Rate of correction to mean motion (rad/sec/sec)
Definition: OrbitDataKepler.hpp:184
gnsstk::OrbitDataKepler::Cus
double Cus
Sine latitude (rad)
Definition: OrbitDataKepler.hpp:176
gnsstk::OrbitDataKepler::fw
static const size_t fw
Field width of floating point numbers (precision + 8).
Definition: OrbitDataKepler.hpp:58
gnsstk::ObsID
Definition: ObsID.hpp:82
gnsstk::OrbitDataKepler::Ahalf
double Ahalf
Square Root of semi-major axis (m**.5)
Definition: OrbitDataKepler.hpp:187
gnsstk::OrbitDataKepler::precision
static const size_t precision
Precision used when printing floating point numbers.
Definition: OrbitDataKepler.hpp:56
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::WeekSecond::sow
double sow
Definition: WeekSecond.hpp:155
gnsstk::Xvt::clkdrift
double clkdrift
satellite clock drift in seconds/second
Definition: Xvt.hpp:154
gnsstk::OrbitDataKepler::Toc
CommonTime Toc
Clock epoch.
Definition: OrbitDataKepler.hpp:172
gnsstk::RefFrameSys::WGS84
@ WGS84
The reference frame used by GPS.
gnsstk::NavFit::beginFit
CommonTime beginFit
Time at beginning of fit interval.
Definition: NavFit.hpp:54
gnsstk::Xvt
Definition: Xvt.hpp:60
std::cos
double cos(gnsstk::Angle x)
Definition: Angle.hpp:146
gnsstk::OrbitDataKepler::dumpSVStatus
virtual void dumpSVStatus(std::ostream &s) const
Definition: OrbitDataKepler.hpp:77
gnsstk::RefFrameSys
RefFrameSys
Reference frame systems. For specific realizations, see RefFrameRlz.
Definition: RefFrameSys.hpp:51
gnsstk::DumpDetail::Full
@ Full
Include all detailed information.
GPSEllipsoid.hpp
ABS
#define ABS(x)
Definition: MathBase.hpp:73
gnsstk::OrbitDataKepler::i0
double i0
Inclination (rad)
Definition: OrbitDataKepler.hpp:190
gnsstk::Xvt::health
HealthStatus health
Health status of satellite at ref time.
Definition: Xvt.hpp:157
gnsstk::OrbitDataKepler::svClockDrift
double svClockDrift(const CommonTime &when) const
Definition: OrbitDataKepler.cpp:351
gnsstk::OrbitDataKepler::Cic
double Cic
Cosine inclination (rad)
Definition: OrbitDataKepler.hpp:179
gnsstk::OrbitDataKepler::getDataType
virtual std::string getDataType() const
Definition: OrbitDataKepler.hpp:93
gnsstk::OrbitDataKepler::dumpOrbit
virtual void dumpOrbit(std::ostream &s) const
Definition: OrbitDataKepler.cpp:131
gnsstk::OrbitDataKepler::Crc
double Crc
Cosine radius (m)
Definition: OrbitDataKepler.hpp:177
GPSWeekSecond.hpp
gnsstk::DumpDetail
DumpDetail
Specify level of detail for dump output.
Definition: DumpDetail.hpp:51
gnsstk::printTime
std::string printTime(const CommonTime &t, const std::string &fmt)
Definition: TimeString.cpp:64
std
Definition: Angle.hpp:142
gnsstk::OrbitDataKepler::af0
double af0
SV clock error (sec)
Definition: OrbitDataKepler.hpp:195
gnsstk::NavMessageType::Ephemeris
@ Ephemeris
Precision orbits for the transmitting SV.
gnsstk::DumpDetail::OneLine
@ OneLine
Limit output to minimal information on a single line.
gnsstk::OrbitDataKepler::compare
std::list< std::string > compare(const NavDataPtr &right) const override
Definition: OrbitDataKepler.cpp:398
gnsstk::Xvt::clkbias
double clkbias
Sat clock correction in seconds.
Definition: Xvt.hpp:153
gnsstk::EllipsoidModel::gm
virtual double gm() const noexcept=0
gnsstk::EllipsoidModel
Definition: EllipsoidModel.hpp:56
gnsstk::OrbitDataKepler::health
SVHealth health
SV health status.
Definition: OrbitDataKepler.hpp:173
gnsstk::OrbitDataKepler::OMEGA0
double OMEGA0
Longitude of ascending node at weekly epoch (rad)
Definition: OrbitDataKepler.hpp:189
gnsstk::OrbitDataKepler::dumpClock
virtual void dumpClock(std::ostream &s) const
Definition: OrbitDataKepler.cpp:118
gnsstk::NavData::isSameData
virtual bool isSameData(const NavDataPtr &right) const
Definition: NavData.cpp:58
gnsstk::OrbitDataKepler::isSameData
bool isSameData(const NavDataPtr &right) const override
Definition: OrbitDataKepler.cpp:361
gnsstk::OrbitDataKepler::af1
double af1
SV clock drift (sec/sec)
Definition: OrbitDataKepler.hpp:196
TimeString.hpp
gnsstk::OrbitDataKepler::dump
void dump(std::ostream &s, DumpDetail dl) const override
Definition: OrbitDataKepler.cpp:61
gnsstk::OrbitDataKepler::getXvt
bool getXvt(const CommonTime &when, Xvt &xvt, const ObsID &oid=ObsID()) override=0
gnsstk::NavMessageType::Almanac
@ Almanac
Low-precision orbits for other than the transmitting SV.
gnsstk::OrbitDataKepler::dn
double dn
Correction to mean motion (rad/sec)
Definition: OrbitDataKepler.hpp:183


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