Changeset 8905 in ntrip for trunk/BNC/src/PPP/pppClient.cpp
- Timestamp:
- Mar 18, 2020, 11:13:50 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/PPP/pppClient.cpp
r8453 r8905 55 55 _obsPool = new t_pppObsPool(); 56 56 _staRover = new t_pppStation(); 57 _filter = new t_pppFilter( );57 _filter = new t_pppFilter(_obsPool); 58 58 _tides = new t_tides(); 59 59 _antex = 0; 60 60 if (!_opt->_antexFileName.empty()) { 61 61 _antex = new bncAntex(_opt->_antexFileName.c_str()); 62 62 } 63 else {64 _antex = 0;65 }66 67 63 if (!_opt->_blqFileName.empty()) { 68 _loading = new t_loading(_opt->_blqFileName.c_str()); 69 } 70 else { 71 _loading = 0; 72 } 73 64 if (_tides->readBlqFile(_opt->_blqFileName.c_str()) == success) { 65 //_tides->printAllBlqSets(); 66 } 67 } 68 69 if (OPT->_refSatRequired) { 70 for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) { 71 char system = OPT->systems()[iSys]; 72 _obsPool->initRefSatMapElement(system); 73 } 74 } 75 _offGG = 0.0; 74 76 CLIENTS.setLocalData(this); // CLIENTS takes ownership over "this" 75 77 } … … 80 82 delete _log; 81 83 delete _opt; 84 delete _filter; 82 85 delete _ephPool; 83 86 delete _obsPool; … … 86 89 delete _antex; 87 90 } 88 delete _filter;89 91 delete _tides; 90 if (_loading) {91 delete _loading;92 }93 92 clearObs(); 94 93 } … … 157 156 t_irc t_pppClient::prepareObs(const vector<t_satObs*>& satObs, 158 157 vector<t_pppSatObs*>& obsVector, bncTime& epoTime) { 158 159 159 // Default 160 160 // ------- … … 176 176 } 177 177 178 // (re)set reference satellites per system if required 179 // --------------------------------------------------- 180 if (_opt->_refSatRequired) { 181 // reference satellite definition per system 182 for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) { 183 char system = OPT->systems()[iSys]; 184 bool refSatDefined = false; 185 t_pppRefSat* refSat = _obsPool->getRefSatMapElement(system); 186 for (unsigned ii = 0; ii < obsVector.size(); ii++) { 187 const t_pppSatObs* satObs = obsVector.at(ii); 188 // reference satellite is unchanged 189 if (!_obsPool->epoReProcessing() && refSat->prn() == satObs->prn()) { 190 refSatDefined = true; 191 obsVector[ii]->setAsReference(); 192 refSat->setStatus(t_pppRefSat::unchanged); 193 } 194 // reference satellite has changed 195 else if (_obsPool->epoReProcessing() && refSat->prn() != satObs->prn()) { 196 if (satObs->prn().system() == system) { 197 refSatDefined = true; 198 obsVector[ii]->setAsReference(); 199 refSat->setStatus(t_pppRefSat::changed); 200 refSat->setPrn(satObs->prn()); 201 } 202 } 203 if (refSatDefined) { 204 break; 205 } 206 } 207 // reference satellite has to be initialized 208 if (!refSatDefined) { 209 for (unsigned ii = 0; ii < obsVector.size(); ii++) { 210 const t_pppSatObs* satObs = obsVector.at(ii); 211 if (satObs->prn().system() == system) { 212 obsVector[ii]->setAsReference(); 213 refSat->setStatus(t_pppRefSat::initialized); 214 refSat->setPrn(satObs->prn()); 215 } 216 } 217 } 218 } 219 _obsPool->setEpoReProcessing(false); //TODO: später erst nach Trafo false setzen 220 } 221 178 222 // Check whether data are synchronized, compute epoTime 179 223 // ---------------------------------------------------- … … 202 246 } 203 247 248 // 249 ////////////////////////////////////////////////////////////////////////////// 250 bool t_pppClient::preparePseudoObs(std::vector<t_pppSatObs*>& obsVector) { 251 252 bool pseudoObsIono = false; 253 254 if (OPT->_pseudoObsIono) { 255 vector<t_pppSatObs*>::iterator it = obsVector.begin(); 256 while (it != obsVector.end()) { 257 t_pppSatObs* satObs = *it; 258 char system = satObs->prn().system(); 259 t_pppRefSat* refSat = _obsPool->getRefSatMapElement(system); 260 double stecRef = refSat->stecValue(); 261 if (stecRef && !satObs->isReference()) { 262 pseudoObsIono = true; 263 satObs->setPseudoObsIono(t_frequency::G1, stecRef); 264 } 265 satObs->printObsMinusComputed(); 266 it++; 267 } 268 } 269 270 return pseudoObsIono; 271 } 272 204 273 // Compute the Bancroft position, check for blunders 205 274 ////////////////////////////////////////////////////////////////////////////// … … 250 319 for (unsigned ii = 0; ii < obsVector.size(); ii++) { 251 320 const t_pppSatObs* satObs = obsVector.at(ii); 252 if ( satObs->isValid() && satObs->prn().system() == 'G' && 253 (!satObs->modelSet() || satObs->eleSat() >= OPT->_minEle) ) { 321 if (satObs->isValid() && 322 satObs->prn().system() == 'G' && 323 (!satObs->modelSet() || satObs->eleSat() >= OPT->_minEle) ) { 254 324 ColumnVector rr = satObs->xc().Rows(1,3) - xyzc.Rows(1,3); 255 double res = rr. norm_Frobenius() - satObs->obsValue(tLC)325 double res = rr.NormFrobenius() - satObs->obsValue(tLC) 256 326 - (satObs->xc()[3] - xyzc[3]) * t_CST::c; 257 327 if (std::isnan(res) || fabs(res) > maxRes) { … … 393 463 t_irc t_pppClient::cmpModel(t_pppStation* station, const ColumnVector& xyzc, 394 464 vector<t_pppSatObs*>& obsVector) { 395 396 465 bncTime time; 397 466 time = _epoTimeRover; 398 467 station->setName(OPT->_roverName); 399 468 station->setAntName(OPT->_antNameRover); 469 station->setEpochTime(time); 400 470 if (OPT->xyzAprRoverSet()) { 401 471 station->setXyzApr(OPT->_xyzAprRover); … … 412 482 // Tides 413 483 // ----- 414 station->setTideDspl( _tides->displacement(time, station->xyzApr()) ); 415 416 // Ionosphere 417 // ---------- 418 station->setIonoEpochTime(time); 484 station->setTideDsplEarth(_tides->earth(time, station->xyzApr())); 485 station->setTideDsplOcean(_tides->ocean(time, station->xyzApr(), station->name())); 419 486 420 487 // Observation model … … 430 497 satObs->eleSat() >= OPT->_minEle && 431 498 modelSetup == success) { 499 if (satObs->isReference() && OPT->_pseudoObsIono) { 500 char system = satObs->prn().system(); 501 t_pppRefSat* refSat = _obsPool->getRefSatMapElement(system); 502 refSat->setStecValue(satObs->getIonoCodeDelay(t_frequency::G1)); 503 } 432 504 ++it; 433 505 } … … 447 519 try { 448 520 initOutput(output); 449 450 // Prepare Observations of the Rover 451 // --------------------------------- 452 if (prepareObs(satObs, _obsRover, _epoTimeRover) != success) { 453 return finish(failure); 454 } 455 456 LOG << "\nPPP of Epoch "; 457 if (!_epoTimeRover.undef()) LOG << string(_epoTimeRover); 458 LOG << "\n---------------------------------------------------------------\n"; 459 460 for (int iter = 1; iter <= 2; iter++) { 461 ColumnVector xyzc(4); xyzc = 0.0; 462 bool print = (iter == 2); 463 if (cmpBancroft(_epoTimeRover, _obsRover, xyzc, print) != success) { 521 _num = 0; 522 _obsPool->setEpoReProcessing(false); // initialize for epoch 523 524 do { 525 _num++; 526 527 // Prepare Observations of the Rover 528 // --------------------------------- 529 if (prepareObs(satObs, _obsRover, _epoTimeRover) != success) { 464 530 return finish(failure); 465 531 } 466 if (cmpModel(_staRover, xyzc, _obsRover) != success) { 532 533 LOG << "\nPPP of Epoch "; 534 if (!_epoTimeRover.undef()) LOG << string(_epoTimeRover); 535 LOG << "\n---------------------------------------------------------------\n"; 536 537 for (int iter = 1; iter <= 2; iter++) { 538 ColumnVector xyzc(4); xyzc = 0.0; 539 bool print = (iter == 2); 540 if (cmpBancroft(_epoTimeRover, _obsRover, xyzc, print) != success) { 541 return finish(failure); 542 } 543 if (cmpModel(_staRover, xyzc, _obsRover) != success) { 544 return finish(failure); 545 } 546 } 547 548 _offGG = cmpOffGG(_obsRover); 549 550 // Prepare Pseudo Observations of the Rover 551 // ---------------------------------------- 552 _pseudoObsIono = preparePseudoObs(_obsRover);//qDebug() << "_pseudoObsIonoAvailable: " << _pseudoObsIono; 553 554 if (int(_obsRover.size()) < OPT->_minObs) { 555 LOG << "t_pppClient::processEpoch not enough observations" << endl; 467 556 return finish(failure); 468 557 } 469 } 470 471 _offGG = cmpOffGG(_obsRover); 472 473 if (int(_obsRover.size()) < OPT->_minObs) { 474 LOG << "t_pppClient::processEpoch not enough observations" << endl; 475 return finish(failure); 476 } 477 478 // Store last epoch of data 479 // ------------------------ 480 _obsPool->putEpoch(_epoTimeRover, _obsRover); 481 482 // Process Epoch in Filter 483 // ----------------------- 484 if (_filter->processEpoch(_obsPool) != success) { 485 return finish(failure); 486 } 558 559 if (OPT->_refSatRequired) { 560 LOG.setf(ios::fixed); 561 QMapIterator<char, t_pppRefSat*> it(_obsPool->getRefSatMap()); 562 while (it.hasNext()) { 563 it.next(); 564 char sys = it.key(); 565 string prn = it.value()->prn().toString(); 566 LOG << string(_epoTimeRover) << " REFSAT " << sys << ": " << prn << endl; 567 } 568 } 569 570 // Store last epoch of data 571 // ------------------------ 572 //_obsRover.resize(2); 573 _obsPool->putEpoch(_epoTimeRover, _obsRover, _pseudoObsIono); 574 575 // Process Epoch in Filter 576 // ----------------------- 577 if (_filter->processEpoch(_num) != success) { 578 return finish(failure); 579 } 580 // if num > 1 und !obsPool->epoReProcessing() => filter ->datumTransformation 581 } while (_obsPool->epoReProcessing()); 487 582 } 488 583 catch (Exception& exc) { … … 588 683 void t_pppClient::reset() { 589 684 590 // to delete all parameters591 delete _filter;592 _filter = new t_pppFilter();593 594 685 // to delete old orbit and clock corrections 595 686 delete _ephPool; … … 599 690 delete _obsPool; 600 691 _obsPool = new t_pppObsPool(); 601 } 692 693 // to delete all parameters 694 delete _filter; 695 _filter = new t_pppFilter(_obsPool); 696 697 }
Note:
See TracChangeset
for help on using the changeset viewer.