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),
67 ?
" toa: " :
" toe: ")
73 s <<
"****************************************************************"
74 <<
"************" << endl
75 <<
"Broadcast " <<
getDataType() <<
" (Engineering Units)"
85 const ios::fmtflags oldFlags = s.flags();
87 s.setf(ios::fixed, ios::floatfield);
88 s.setf(ios::right, ios::adjustfield);
89 s.setf(ios::uppercase);
96 <<
" TIMES OF INTEREST"
105 s.setf(ios::scientific, ios::floatfield);
121 <<
" CLOCK PARAMETERS"
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;
134 <<
" ORBIT PARAMETERS"
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 "
146 <<
"Inclination: " << setw(
fw) <<
i0 <<
" rad "
147 << setw(
fw) <<
idot <<
" rad/sec" << endl;
155 <<
" HARMONIC CORRECTIONS"
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;
172 double ToeSOW = gpsws.
sow;
176 double q,sinea,cosea;
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;
186 double sqrtgm =
SQRT(ell.
gm());
187 double twoPI = 2.0e0 *
PI;
198 double Ak =
A +
Adot * elapte;
201 double dnA =
dn + 0.5 *
dndot * elapte;
203 amm = (sqrtgm / (
A*
Ahalf)) + dnA;
210 meana =
M0 + elapte * amm;
211 meana = fmod(meana, twoPI);
213 ea = meana + lecc *
::sin(meana);
217 F = meana - ( ea - lecc *
::sin(ea));
218 G = 1.0 - lecc *
::cos(ea);
222 }
while ( (fabs(delea) > 1.0e-11 ) && (loop_cnt <= 20) );
231 q =
SQRT( 1.0e0 - lecc*lecc);
234 G = 1.0e0 - lecc * cosea;
241 truea = atan2 ( GSTA, GCTA );
245 talat = 2.0e0 * alat;
246 c2al =
::cos( talat );
247 s2al =
::sin( talat );
249 du = c2al *
Cuc + s2al *
Cus;
250 dr = c2al *
Crc + s2al *
Crs;
251 di = c2al *
Cic + s2al *
Cis;
256 AINC =
i0 + tdrinc * elapte + di;
270 can =
::cos( ANLON );
271 san =
::sin( ANLON );
272 cinc =
::cos( AINC );
273 sinc =
::sin( AINC );
276 xef = xip*can - yip*cinc*san;
277 yef = xip*san + yip*cinc*can;
286 dlk = amm * q / (G*G);
287 div = tdrinc - 2.0e0 * dlk *
288 (
Cic * s2al -
Cis * c2al );
290 duv = dlk*(1.e0+ 2.e0 * (
Cus*c2al -
Cuc*s2al) );
291 drv = Ak * lecc * dek * sinea - 2.e0 * dlk *
294 dxp = drv*cosu - R*sinu*duv;
295 dyp = drv*sinu + R*cosu*duv;
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;
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;
322 double Ak =
A +
Adot*elapte;
323 meana =
M0 + elapte * amm;
324 meana = fmod(meana, twoPI);
325 double ea = meana +
ecc *
::sin(meana);
329 F = meana - ( ea -
ecc *
::sin(ea));
334 }
while ( (
ABS(delea) > 1.0e-11 ) && (loop_cnt <= 20) );
345 dtc =
af0 + elaptc * (
af1 + elaptc *
af2 );
353 double drift, elaptc;
355 drift =
af1 + elaptc *
af2;
363 const std::shared_ptr<OrbitDataKepler> rhs =
364 std::dynamic_pointer_cast<OrbitDataKepler>(right);
381 (
dndot == rhs->dndot) &&
384 (
Ahalf == rhs->Ahalf) &&
385 (
Adot == rhs->Adot) &&
386 (
OMEGA0 == rhs->OMEGA0) &&
390 (
idot == rhs->idot) &&
405 const std::shared_ptr<OrbitDataKepler> rhs =
406 std::dynamic_pointer_cast<OrbitDataKepler>(right);
410 rv.push_back(
"CLASS");
421 if (
health != rhs->health)
422 rv.push_back(
"health");
439 if (
dndot != rhs->dndot)
440 rv.push_back(
"dndot");
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");
456 rv.push_back(
"OMEGAdot");
457 if (
idot != rhs->idot)
458 rv.push_back(
"idot");
466 rv.push_back(
"beginFit");
467 if (
endFit != rhs->endFit)
468 rv.push_back(
"endFit");