Changeset 8956 in ntrip for trunk/BNC/src/PPP/pppClient.cpp


Ignore:
Timestamp:
Jun 23, 2020, 11:58:46 AM (4 years ago)
Author:
stuerze
Message:

update regarding PPP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/PPP/pppClient.cpp

    r8912 r8956  
    160160  // -------
    161161  epoTime.reset();
     162  clearObs();
    162163
    163164  // Create vector of valid observations
     
    174175      }
    175176    }
    176   }
    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->refSatChangeRequired() && 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->refSatChangeRequired() && 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->setRefSatChangeRequired(false);
    220177  }
    221178
     
    497454        satObs->eleSat() >= _opt->_minEle &&
    498455        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       }
    504456      ++it;
    505457    }
     
    517469void t_pppClient::processEpoch(const vector<t_satObs*>& satObs, t_output* output) {
    518470
     471  _historicalRefSats.clear();
    519472  try {
    520473    initOutput(output);
     
    524477    do {
    525478      num++;
     479      if (num == 1) {
     480        LOG << "\nPPP of Epoch ";
     481        if (!_epoTimeRover.undef()) LOG << string(_epoTimeRover);
     482        LOG << "\n---------------------------------------------------------------\n";
     483      }
    526484
    527485      // Prepare Observations of the Rover
     
    530488        return finish(failure);
    531489      }
    532 
    533       LOG << "\nPPP of Epoch ";
    534       if (!_epoTimeRover.undef()) LOG << string(_epoTimeRover);
    535       LOG << "\n---------------------------------------------------------------\n";
    536490
    537491      for (int iter = 1; iter <= 2; iter++) {
     
    548502      _offGG = cmpOffGG(_obsRover);
    549503
    550       // Prepare Pseudo Observations of the Rover
    551       // ----------------------------------------
    552       _pseudoObsIono = preparePseudoObs(_obsRover);
    553       if (int(_obsRover.size()) < _opt->_minObs) {
    554         LOG << "t_pppClient::processEpoch not enough observations" << endl;
    555         return finish(failure);
    556       }
    557 
    558504      if (_opt->_refSatRequired) {
     505        setRefSatellites(_obsRover);
    559506        LOG.setf(ios::fixed);
    560507        QMapIterator<char, t_pppRefSat*> it(_obsPool->getRefSatMap());
     
    563510          char   sys = it.key();
    564511          string prn = it.value()->prn().toString();
     512          if (num == 1) {
     513            LOG << "set   ";
     514          }
     515          else {
     516            LOG << "reset ";
     517          }
    565518          LOG << string(_epoTimeRover) << " REFSAT  " << sys << ": " << prn << endl;
    566519        }
    567520      }
     521
     522
     523      // Prepare Pseudo Observations of the Rover
     524      // ----------------------------------------
     525      _pseudoObsIono = preparePseudoObs(_obsRover);
     526
     527      if (int(_obsRover.size()) < _opt->_minObs) {
     528        LOG << "t_pppClient::processEpoch not enough observations" << endl;
     529        return finish(failure);
     530      }
     531
    568532
    569533      // Store last epoch of data
    570534      // ------------------------
    571       //_obsRover.resize(2);
    572535      _obsPool->putEpoch(_epoTimeRover, _obsRover, _pseudoObsIono);
     536      _obsPool->setHistoricalRefSatList(_historicalRefSats);
    573537
    574538      // Process Epoch in Filter
     
    582546      if (_obsPool->refSatChangeRequired()) {
    583547        epochReProcessing = true;
     548        _obsPool->deleteLastEpoch();
     549        QMapIterator<char, t_pppRefSat*> it(_obsPool->getRefSatMap());
     550        while (it.hasNext()) {
     551          it.next();
     552          _historicalRefSats.append(it.value()->prn());
     553        }
    584554      }
    585555      else {
    586556        epochReProcessing = false;
    587       }
    588       // Datum transformation required?
    589       // ------------------------------
    590       if (num > 1 && epochReProcessing) {
    591         _filter->datumTransformation();
    592       }
    593 
     557
     558      }
    594559    } while (epochReProcessing);
    595560  }
     
    694659//
    695660//////////////////////////////////////////////////////////////////////////////
     661void t_pppClient::setRefSatellites(std::vector<t_pppSatObs*>& obsVector) {
     662
     663  // reference satellite definition per system
     664  for (unsigned iSys = 0; iSys < _opt->systems().size(); iSys++) {
     665    char system = _opt->systems()[iSys];
     666    bool refSatDefined = false;
     667    t_pppRefSat* refSat = _obsPool->getRefSatMapElement(system);
     668    for (unsigned ii = 0; ii < obsVector.size(); ii++) {
     669      t_pppSatObs* satObs = obsVector.at(ii);
     670      if (satObs->eleSat() < _opt->_minEle) {continue;}
     671      // reference satellite is unchanged
     672      if      (!_obsPool->refSatChangeRequired() &&  refSat->prn() == satObs->prn()) {
     673        refSatDefined = true;
     674        obsVector[ii]->setAsReference();
     675      }
     676      // reference satellite has changed
     677      else if ( _obsPool->refSatChangeRequired() && refSat->prn() != satObs->prn() && !_historicalRefSats.contains(satObs->prn())) {
     678        if (satObs->prn().system() == system) {
     679          refSatDefined = true;
     680          obsVector[ii]->setAsReference();
     681          refSat->setPrn(satObs->prn());
     682        }
     683      }
     684      if (refSatDefined) {
     685        if (OPT->_pseudoObsIono) {
     686          refSat->setStecValue(satObs->getIonoCodeDelay(t_frequency::G1));
     687        }
     688        break;
     689      }
     690    }
     691    // reference satellite has to be initialized
     692    if (!refSatDefined) {
     693      for (unsigned ii = 0; ii < obsVector.size(); ii++) {
     694        t_pppSatObs* satObs = obsVector.at(ii);
     695        if (satObs->eleSat() < _opt->_minEle) {
     696          continue;
     697        }
     698        if (satObs->prn().system() == system) {
     699          obsVector[ii]->setAsReference();
     700          refSat->setPrn(satObs->prn());
     701          if (OPT->_pseudoObsIono) {
     702            refSat->setStecValue(satObs->getIonoCodeDelay(t_frequency::G1));
     703          }
     704          refSatDefined = true;
     705          break;
     706        }
     707      }
     708    }
     709  }
     710  _obsPool->setRefSatChangeRequired(false);
     711
     712}
     713
     714//
     715//////////////////////////////////////////////////////////////////////////////
    696716void t_pppClient::reset() {
    697717
Note: See TracChangeset for help on using the changeset viewer.