Changeset 10034 in ntrip for trunk/BNC/src/PPP/pppParlist.cpp
- Timestamp:
- Apr 21, 2023, 11:48:24 AM (12 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/PPP/pppParlist.cpp
r10031 r10034 62 62 _noise = OPT->_noiseCrd[2]; 63 63 break; 64 case rClkG: 65 _epoSpec = true; 66 _sigma0 = OPT->_aprSigClk; 67 break; 68 case rClkR: 69 _epoSpec = true; 70 _sigma0 = OPT->_aprSigClk; 71 break; 72 case rClkE: 73 _epoSpec = true; 74 _sigma0 = OPT->_aprSigClk; 75 break; 76 case rClkC: 64 case clkR: 77 65 _epoSpec = true; 78 66 _sigma0 = OPT->_aprSigClk; … … 86 74 const t_pppSatObs* obs = obsVector->at(ii); 87 75 if (obs->prn() == _prn) { 88 _x0 = floor((obs->obsValue(tLC) - obs->cmpValue(tLC)) / obs->lambda(tLC) + 0.5); 76 double offGlo = 0; 77 if (_prn.system() == 'R' && tLC != t_lc::MW) { 78 offGlo = PPP_CLIENT->offGlo(); 79 } 80 double offGal = 0; 81 if (_prn.system() == 'E' && tLC != t_lc::MW) { 82 offGal = PPP_CLIENT->offGal(); 83 } 84 double offBds = 0; 85 if (_prn.system() == 'C' && tLC != t_lc::MW) { 86 offBds = PPP_CLIENT->offBds(); 87 } 88 _x0 = floor((obs->obsValue(tLC) - offGlo - offGal - offBds - obs->cmpValue(tLC)) / obs->lambda(tLC) + 0.5); 89 89 break; 90 90 } 91 91 } 92 92 } 93 break; 94 case offGlo: 95 _epoSpec = true; 96 _sigma0 = OPT->_aprSigClk; 97 _x0 = PPP_CLIENT->offGlo(); 98 break; 99 case offGal: 100 _epoSpec = true; 101 _sigma0 = OPT->_aprSigClk; 102 _x0 = PPP_CLIENT->offGal(); 103 break; 104 case offBds: 105 _epoSpec = true; 106 _sigma0 = OPT->_aprSigClk; 107 _x0 = PPP_CLIENT->offBds(); 93 108 break; 94 109 case trp: … … 117 132 } 118 133 119 //120 ////////////////////////////////////////////////////////////////////////////121 t_pppParam::t_pppParam(const t_pppParam* old) {122 _type = old->type();123 _prn = old->prn();124 _tLC = old->tLC();125 _indexOld = old->indexOld();126 _indexNew = old->indexNew();127 _noise = old->noise();128 _sigma0 = old->sigma0();129 _epoSpec = old->epoSpec();130 _x0 = old->x0();131 setFirstObsTime(old->firstObsTime());132 setLastObsTime(old->lastObsTime());133 _ambInfo = 0;134 if (_type == t_pppParam::amb) {135 _ambInfo = new t_ambInfo();136 _ambInfo->_resetCandidate = old->_ambInfo->_resetCandidate;137 _ambInfo->_eleSat = old->_ambInfo->_eleSat;138 _ambInfo->_numEpo = old->_ambInfo->_numEpo;139 }140 }141 142 134 // Destructor 143 135 //////////////////////////////////////////////////////////////////////////// … … 150 142 //////////////////////////////////////////////////////////////////////////// 151 143 double t_pppParam::partial(const bncTime& /* epoTime */, const t_pppSatObs* obs, 152 const t_lc::type& tLC , const t_prn refPrn) const {144 const t_lc::type& tLC) const { 153 145 154 146 // Special Case - Melbourne-Wuebbena … … 176 168 if (tLC == t_lc::GIM) {return 0.0;} 177 169 return (sta->xyzApr()[2] - obs->xc()[2]) / rhoV.NormFrobenius(); 178 case rClkG:170 case clkR: 179 171 if (tLC == t_lc::GIM) {return 0.0;} 180 return (obs->prn().system() == 'G') ? 1.0 : 0.0;181 case rClkR:172 return 1.0; 173 case offGlo: 182 174 if (tLC == t_lc::GIM) {return 0.0;} 183 175 return (obs->prn().system() == 'R') ? 1.0 : 0.0; 184 case rClkE:176 case offGal: 185 177 if (tLC == t_lc::GIM) {return 0.0;} 186 178 return (obs->prn().system() == 'E') ? 1.0 : 0.0; 187 case rClkC:179 case offBds: 188 180 if (tLC == t_lc::GIM) {return 0.0;} 189 181 return (obs->prn().system() == 'C') ? 1.0 : 0.0; 190 182 case amb: 191 if (tLC == t_lc::GIM) {return 0.0;} 192 else if ((OPT->_obsModelType == OPT->IF) || 193 (OPT->_obsModelType == OPT->PPPRTK) || 194 (OPT->_obsModelType == OPT->UncombPPP) || 195 (OPT->_obsModelType == OPT->DCMcodeBias && !obs->isReference()) || 196 (OPT->_obsModelType == OPT->DCMphaseBias && !obs->isReference()) ) { 197 183 if (tLC == t_lc::GIM) { 184 return 0.0; 185 } 186 else { 198 187 if (obs->prn() == _prn) { 199 188 if (tLC == _tLC) { … … 236 225 } 237 226 else if (tLC == t_lc::GIM) { 238 return -1.0; 239 } 240 } 241 if (tLC == t_lc::GIM && _prn == refPrn) { 242 return 1.0; 227 return 1.0; 228 } 243 229 } 244 230 break; … … 310 296 ss << "CRD_Z"; 311 297 break; 312 case rClkG:313 ss << "REC_CLK G";314 break; 315 case rClkR:316 ss << " REC_CLK R";317 break; 318 case rClkE:319 ss << " REC_CLK E";320 break; 321 case rClkC:322 ss << " REC_CLK C";298 case clkR: 299 ss << "REC_CLK "; 300 break; 301 case offGlo: 302 ss << "OFF_GLO "; 303 break; 304 case offGal: 305 ss << "OFF_GAL "; 306 break; 307 case offBds: 308 ss << "OFF_BDS "; 323 309 break; 324 310 case trp: … … 361 347 _usedSystems.clear(); 362 348 363 vector<t_pppParam*>::iterator it = _params.begin(); 364 while (it != _params.end()) { 365 t_pppParam* par = *it; 366 delete par; 367 it = _params.erase(it); 349 for (unsigned ii = 0; ii < _params.size(); ii++) { 350 delete _params[ii]; 368 351 } 369 352 } … … 371 354 // 372 355 //////////////////////////////////////////////////////////////////////////// 373 t_pppParlist::t_pppParlist(const t_pppParlist& old) { 374 375 _usedSystems = old._usedSystems; 376 377 vector<t_pppParam*>::const_iterator it = old.params().begin(); 378 while (it != old.params().end()) { 379 const t_pppParam* oldParam = *it; 380 _params.push_back(new t_pppParam(oldParam)); 381 } 382 } 383 384 // 385 //////////////////////////////////////////////////////////////////////////// 386 const t_pppParlist& t_pppParlist::operator= (const t_pppParlist& p) { 387 388 _usedSystems.clear(); 389 390 _usedSystems = p._usedSystems; 391 392 vector<t_pppParam*>::iterator it = _params.begin(); 393 while (it != _params.end()) { 394 t_pppParam* par = *it; 395 delete par; 396 it = _params.erase(it); 397 } 398 399 for (unsigned jj = 0; jj < p.params().size(); jj++) { 400 t_pppParam* parFrom = p.params()[jj]; 401 _params.push_back(new t_pppParam(parFrom)); 402 } 403 return *this; 404 } 405 406 // 407 //////////////////////////////////////////////////////////////////////////// 408 t_irc t_pppParlist::set(const bncTime& epoTime, const std::vector<t_pppSatObs*>& obsVector, 409 const QMap<char, t_pppRefSat*>& refSatMap) { 356 t_irc t_pppParlist::set(const bncTime& epoTime, const std::vector<t_pppSatObs*>& obsVector) { 410 357 411 358 // Remove some Parameters … … 421 368 } 422 369 423 else if (par->type() == t_pppParam::crdX || 370 else if (par->type() == t_pppParam::amb || 371 par->type() == t_pppParam::ion || 372 par->type() == t_pppParam::crdX || 424 373 par->type() == t_pppParam::crdY || 425 374 par->type() == t_pppParam::crdZ) { … … 429 378 } 430 379 431 else if (par->type() == t_pppParam::amb) {432 if (par->lastObsTime().valid() && (epoTime - par->lastObsTime() > 60.0)) {433 remove = true;434 }435 if (OPT->_obsModelType == OPT->DCMcodeBias ||436 OPT->_obsModelType == OPT->DCMphaseBias) {437 char sys = par->prn().system();438 t_prn refPrn = (refSatMap[sys])->prn();439 if (par->lastObsTime().valid() && par->prn() == refPrn) {440 remove = true;441 }442 }443 }444 445 else if (par->type() == t_pppParam::ion) {446 if (par->lastObsTime().valid() && (epoTime - par->lastObsTime() > 60.0)) {447 remove = true;448 }449 }450 380 if (remove) { 451 381 #ifdef BNC_DEBUG_PPP … … 495 425 } 496 426 497 if (OPT->_obsModelType == OPT->DCMcodeBias || 498 OPT->_obsModelType == OPT->DCMphaseBias) { 499 // Check if ambiguity parameters have observations 500 // ----------------------------------------------- 427 if (OPT->_obsModelType == OPT->PPPRTK || OPT->_pseudoObsIono) { 501 428 vector<t_pppParam*>::iterator it = _params.begin(); 502 QList<t_prn> lostSats;503 429 while (it != _params.end()) { 504 430 t_pppParam* par = *it; 505 if ((par->type() == t_pppParam::amb) &&506 (!par->lastObsTime().valid() || (epoTime - par->lastObsTime() > 0.0))) {507 #ifdef BNC_DEBUG_PPP508 //LOG << "remove1 " << par->toString() << std::endl;509 #endif510 lostSats.append(par->prn());511 delete par;512 it = _params.erase(it);513 }514 431 // Check if systems have to be presented per biases 515 432 // ---------------------------------------------- 516 else if ((par->type() == t_pppParam::cBiasG1 ||433 if (( par->type() == t_pppParam::cBiasG1 || 517 434 par->type() == t_pppParam::cBiasG2 || 518 435 par->type() == t_pppParam::pBiasG1 || … … 558 475 } 559 476 } 560 // remove respective iono parameters 561 // --------------------------------- 562 it = _params.begin(); 563 while (it != _params.end()) { 564 t_pppParam* par = *it; 565 if ((par->type() == t_pppParam::ion) && 566 (lostSats.contains(par->prn()) || (epoTime - par->lastObsTime() > 0.0))) { 567 #ifdef BNC_DEBUG_PPP 568 //LOG << "remove1 " << par->toString() << std::endl; 569 #endif 570 delete par; 571 it = _params.erase(it); 572 } 573 else { 574 ++it; 575 } 576 } 577 } 578 477 } 579 478 580 479 // Required Set of Parameters … … 588 487 required.push_back(new t_pppParam(t_pppParam::crdZ, t_prn(), t_lc::dummy)); 589 488 489 // Receiver Clock 490 // -------------- 491 required.push_back(new t_pppParam(t_pppParam::clkR, t_prn(), t_lc::dummy)); 492 493 // GLONASS Clock Offset 494 // -------------------- 495 if ( _usedSystems.contains('R') && 496 (_usedSystems.contains('G') || _usedSystems.contains('E') || _usedSystems.contains('C'))) { 497 required.push_back(new t_pppParam(t_pppParam::offGlo, t_prn(), t_lc::dummy)); 498 } 499 500 // Galileo Clock Offset 501 // -------------------- 502 if (_usedSystems.contains('E') && _usedSystems.contains('G')) { 503 required.push_back(new t_pppParam(t_pppParam::offGal, t_prn(), t_lc::dummy)); 504 } 505 506 // BDS Clock Offset 507 // ---------------- 508 if (_usedSystems.contains('C') && (_usedSystems.contains('G') || _usedSystems.contains('E'))) { 509 required.push_back(new t_pppParam(t_pppParam::offBds, t_prn(), t_lc::dummy)); 510 } 511 512 // Troposphere 513 // ----------- 514 if (OPT->estTrp()) { 515 required.push_back(new t_pppParam(t_pppParam::trp, t_prn(), t_lc::dummy)); 516 } 517 518 // Ionosphere 519 // ---------- 520 if (OPT->_obsModelType == OPT->UncombPPP) { 521 for (unsigned jj = 0; jj < obsVector.size(); jj++) { 522 const t_pppSatObs* satObs = obsVector[jj]; 523 required.push_back(new t_pppParam(t_pppParam::ion, satObs->prn(), t_lc::dummy)); 524 } 525 } 526 // Ambiguities 527 // ----------- 528 for (unsigned jj = 0; jj < obsVector.size(); jj++) { 529 const t_pppSatObs* satObs = obsVector[jj]; 530 const vector<t_lc::type>& ambLCs = OPT->ambLCs(satObs->prn().system()); 531 for (unsigned ii = 0; ii < ambLCs.size(); ii++) { 532 required.push_back(new t_pppParam(t_pppParam::amb, satObs->prn(), ambLCs[ii], &obsVector)); 533 } 534 } 535 590 536 // Receiver Code Biases 591 537 // -------------------- 592 if (OPT->_obsModelType == OPT-> DCMcodeBias) {538 if (OPT->_obsModelType == OPT->PPPRTK) { 593 539 std::vector<t_lc::type> lc; 594 540 if (_usedSystems.contains('G')) { … … 629 575 } 630 576 } 577 if (OPT->_pseudoObsIono) { 578 std::vector<t_lc::type> lc; 579 if (_usedSystems.contains('G')) { 580 lc = OPT->LCs('G'); 581 if (std::find(lc.begin(), lc.end(), t_lc::c2) != lc.end()) { 582 required.push_back(new t_pppParam(t_pppParam::cBiasG2, t_prn(), t_lc::c2)); 583 } 584 } 585 if (_usedSystems.contains('R')) { 586 lc = OPT->LCs('R'); 587 if (std::find(lc.begin(), lc.end(), t_lc::c2) != lc.end()) { 588 required.push_back(new t_pppParam(t_pppParam::cBiasR2, t_prn(), t_lc::c2)); 589 } 590 } 591 if (_usedSystems.contains('E')) { 592 lc = OPT->LCs('E'); 593 if (std::find(lc.begin(), lc.end(), t_lc::c2) != lc.end()) { 594 required.push_back(new t_pppParam(t_pppParam::cBiasE2, t_prn(), t_lc::c2)); 595 } 596 } 597 if (_usedSystems.contains('C')) { 598 lc = OPT->LCs('C'); 599 if (std::find(lc.begin(), lc.end(), t_lc::c2) != lc.end()) { 600 required.push_back(new t_pppParam(t_pppParam::cBiasC2, t_prn(), t_lc::c2)); 601 } 602 } 603 } 631 604 632 605 // Receiver Phase Biases 633 606 // --------------------- 634 if ((OPT->_obsModelType == OPT->DCMphaseBias) || 635 (OPT->_obsModelType == OPT->PPPRTK) ) { 607 if (OPT->_obsModelType == OPT->PPPRTK) { 636 608 std::vector<t_lc::type> lc; 637 609 if (_usedSystems.contains('G')) { … … 669 641 if (std::find(lc.begin(), lc.end(), t_lc::l2) != lc.end()) { 670 642 required.push_back(new t_pppParam(t_pppParam::pBiasC2, t_prn(), t_lc::l2)); 671 }672 }673 }674 675 // Receiver Clocks676 // ---------------677 if (_usedSystems.contains('G')) {678 required.push_back(new t_pppParam(t_pppParam::rClkG, t_prn(), t_lc::dummy));679 }680 681 if (_usedSystems.contains('R')) {682 required.push_back(new t_pppParam(t_pppParam::rClkR, t_prn(), t_lc::dummy));683 }684 685 if (_usedSystems.contains('E')) {686 required.push_back(new t_pppParam(t_pppParam::rClkE, t_prn(), t_lc::dummy));687 }688 689 if (_usedSystems.contains('C')) {690 required.push_back(new t_pppParam(t_pppParam::rClkC, t_prn(), t_lc::dummy));691 }692 693 // Troposphere694 // -----------695 if (OPT->estTrp()) {696 required.push_back(new t_pppParam(t_pppParam::trp, t_prn(), t_lc::dummy));697 }698 699 // Ionosphere700 // ----------701 if (OPT->_obsModelType == OPT->UncombPPP ||702 OPT->_obsModelType == OPT->DCMcodeBias ||703 OPT->_obsModelType == OPT->DCMphaseBias ) {704 for (unsigned jj = 0; jj < obsVector.size(); jj++) {705 const t_pppSatObs* satObs = obsVector[jj];706 required.push_back(new t_pppParam(t_pppParam::ion, satObs->prn(), t_lc::dummy));707 }708 }709 // Ambiguities710 // -----------711 for (unsigned jj = 0; jj < obsVector.size(); jj++) {712 const t_pppSatObs* satObs = obsVector[jj];713 if ((OPT->_obsModelType == OPT->IF) ||714 (OPT->_obsModelType == OPT->PPPRTK) ||715 (OPT->_obsModelType == OPT->UncombPPP) ||716 (OPT->_obsModelType == OPT->DCMcodeBias && !satObs->isReference()) ||717 (OPT->_obsModelType == OPT->DCMphaseBias && !satObs->isReference()) ) {718 const vector<t_lc::type>& ambLCs = OPT->ambLCs(satObs->prn().system());719 for (unsigned ii = 0; ii < ambLCs.size(); ii++) {720 required.push_back(new t_pppParam(t_pppParam::amb, satObs->prn(), ambLCs[ii], &obsVector));721 643 } 722 644 } … … 779 701 t_pppParam* parY = 0; 780 702 t_pppParam* parZ = 0; 781 vector<t_pppParam*>::const_iterator it = _params.begin(); 782 while (it != _params.end()) { 783 t_pppParam* par = *it; 703 for (unsigned ii = 0; ii < _params.size(); ii++) { 704 t_pppParam* par = _params[ii]; 784 705 if (par->type() == t_pppParam::crdX) { 785 706 parX = par; … … 805 726 LOG << endl; 806 727 } 807 ++it;808 728 } 809 729
Note:
See TracChangeset
for help on using the changeset viewer.