56 bool PNBGalFNavDataFactory ::
60 if (navIn->getNavID().navType != NavType::GalFNAV)
68 unsigned long pageType = navIn->asUnsignedLong(
82 rv = processEph(pageType, navIn, navOut);
87 rv = processAlm(pageType, navIn, navOut);
103 catch (std::exception& exc)
106 cerr << exc.
what() << endl;
111 cerr <<
"Unknown exception" << endl;
117 bool PNBGalFNavDataFactory ::
122 navIn->getobsID(), navIn->getNavID());
123 if (!PNBNavDataFactory::processEph && !PNBNavDataFactory::processHea &&
124 !PNBNavDataFactory::processIono && !PNBNavDataFactory::processISC &&
125 !PNBNavDataFactory::processTim)
131 if (ephAcc.find(key) == ephAcc.end())
136 ephAcc[key][pageType-1] = navIn;
138 std::vector<PackedNavBitsPtr> &ephPage(ephAcc[key]);
139 ephPage[pageType-1] = navIn;
143 if (PNBNavDataFactory::processIono)
146 NavDataPtr p2 = std::make_shared<GalFNavIono>();
148 ip2->
timeStamp = navIn->getTransmitTime();
158 navOut.push_back(p2);
160 if (PNBNavDataFactory::processHea)
163 NavDataPtr p1 = std::make_shared<GalFNavHealth>();
165 hp1->
timeStamp = navIn->getTransmitTime();
176 navOut.push_back(p1);
178 if (PNBNavDataFactory::processISC)
181 NavDataPtr p4 = std::make_shared<GalFNavISC>();
182 p4->timeStamp = navIn->getTransmitTime();
185 navIn->getobsID(), navIn->getNavID()),
186 NavMessageType::ISC);
189 navOut.push_back(p4);
192 else if ((pageType == 4) && PNBNavDataFactory::processTim)
195 NavDataPtr p3 = std::make_shared<GalFNavTimeOffset>();
196 p3->timeStamp = navIn->getTransmitTime();
199 navIn->getobsID(), navIn->getNavID()),
200 NavMessageType::TimeOffset);
202 to->
tgt = TimeSystem::UTC;
213 long refWeek = gws.
week;
219 navOut.push_back(p3);
221 p3 = std::make_shared<GalFNavTimeOffset>();
222 p3->timeStamp = navIn->getTransmitTime();
225 navIn->getobsID(), navIn->getNavID()),
226 NavMessageType::TimeOffset);
228 to->
tgt = TimeSystem::GPS;
241 navOut.push_back(p3);
243 if (!PNBNavDataFactory::processEph)
250 if (!ephPage[
pt1] || !ephPage[
pt2] || !ephPage[
pt3] || !ephPage[
pt4] ||
251 (ephPage[
pt1]->getNumBits() != 244) ||
252 (ephPage[
pt2]->getNumBits() != 244) ||
253 (ephPage[
pt3]->getNumBits() != 244) ||
254 (ephPage[
pt4]->getNumBits() != 244))
269 unsigned long iod1, iod2, iod3, iod4;
274 if ((iod1 != iod2) || (iod1 != iod3) || (iod1 != iod4))
282 NavDataPtr p0 = std::make_shared<GalFNavEph>();
335 eph->
xmit2 = ephPage[
pt2]->getTransmitTime();
336 eph->
xmit3 = ephPage[
pt3]->getTransmitTime();
337 eph->
xmit4 = ephPage[
pt4]->getTransmitTime();
358 navOut.push_back(p0);
365 bool PNBGalFNavDataFactory ::
370 navIn->getobsID(), navIn->getNavID());
371 if (!PNBNavDataFactory::processAlm && !PNBNavDataFactory::processHea)
377 if (almAcc.find(key) == almAcc.end())
382 almAcc[key][pageType-5] = navIn;
387 std::vector<PackedNavBitsPtr> &almPage(almAcc[key]);
388 almPage[pageType-5] = navIn;
390 if (!almPage[
pt5] || !almPage[
pt6] ||
391 (almPage[
pt5]->getNumBits() != 244) ||
392 (almPage[
pt6]->getNumBits() != 244))
403 unsigned long ioda5, ioda6;
417 NavDataPtr p0 = std::make_shared<GalFNavAlm>();
418 NavDataPtr p1 = std::make_shared<GalFNavHealth>();
428 if (PNBNavDataFactory::processAlm)
435 navOut.push_back(p0);
437 if (PNBNavDataFactory::processHea)
439 navOut.push_back(p1);
443 p0 = std::make_shared<GalFNavAlm>();
444 p1 = std::make_shared<GalFNavHealth>();
454 if (PNBNavDataFactory::processAlm)
466 unsigned long lsb = almPage[
asiOMEGA0l_2]->asUnsignedLong(
474 navOut.push_back(p0);
476 if (PNBNavDataFactory::processHea)
478 navOut.push_back(p1);
482 p0 = std::make_shared<GalFNavAlm>();
483 p1 = std::make_shared<GalFNavHealth>();
493 if (PNBNavDataFactory::processAlm)
500 navOut.push_back(p0);
502 if (PNBNavDataFactory::processHea)
504 navOut.push_back(p1);
513 bool PNBGalFNavDataFactory ::
514 processAlmOrb(
const std::vector<PackedNavBitsPtr>& almPage,
517 int asiSVID,
int asbSVID,
518 int asidAhalf,
int asbdAhalf,
521 int asidi,
int asbdi,
523 int asiM0,
int asbM0,
526 int asiE5ahs,
int asbE5ahs)
529 alm->
timeStamp = almPage[ptA]->getTransmitTime();
530 unsigned long svid = almPage[asiSVID]->asUnsignedLong(asbSVID,
anbSVID,
534 SatID xmitSat(almPage[ptA]->getsatSys());
536 almPage[ptA]->getNavID());
542 alm->
xmit2 = almPage[ptB]->getTransmitTime();
551 alm->
Toe = alm->
Toc = gws;
556 alm->
dAhalf = almPage[asidAhalf]->asUnsignedDouble(asbdAhalf,
anbdAhalf,
560 alm->
Ahalf = ::sqrt(GalFNavAlm::refA) + alm->
dAhalf;
563 alm->
i0 = GalFNavAlm::refioffset + alm->
deltai;
565 alm->
OMEGAdot = almPage[asiOMEGAdot]->asDoubleSemiCircles(
574 if (PNBNavDataFactory::processHea)
576 hp1->
timeStamp = almPage[asiE5ahs]->getTransmitTime();
587 void PNBGalFNavDataFactory ::
588 dumpState(std::ostream& s)
591 s <<
"fullWNaMap.size() = " << fullWNaMap.size() <<
" (expect 32)" << endl
592 <<
"almAcc.size() = " << almAcc.size() <<
" (expect 32)" << endl;
593 for (
const auto& i : almAcc)
595 s <<
" almAcc[" << i.first <<
"].size() = " << i.second.size()
598 s <<
"ephAcc.size() = " << ephAcc.size() <<
" (expect 32)" << endl;
599 for (
const auto& i : ephAcc)
601 s <<
" ephAcc[" << i.first <<
"].size() = " << i.second.size()
603 for (
unsigned j = 0; j < i.second.size(); j++)
605 s <<
" ephAcc[" << i.first <<
"][" << j <<
"] = ";
609 s << i.second[j]->getNumBits() <<
" bits";
617 void PNBGalFNavDataFactory ::