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


Ignore:
Timestamp:
Mar 18, 2020, 11:13:50 AM (4 years ago)
Author:
stuerze
Message:

some developments regarding PPP, not completed!

File:
1 edited

Legend:

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

    r8453 r8905  
    5555  _obsPool  = new t_pppObsPool();
    5656  _staRover = new t_pppStation();
    57   _filter   = new t_pppFilter();
     57  _filter   = new t_pppFilter(_obsPool);
    5858  _tides    = new t_tides();
    59 
     59  _antex    = 0;
    6060  if (!_opt->_antexFileName.empty()) {
    6161    _antex = new bncAntex(_opt->_antexFileName.c_str());
    6262  }
    63   else {
    64     _antex = 0;
    65   }
    66 
    6763  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;
    7476  CLIENTS.setLocalData(this);  // CLIENTS takes ownership over "this"
    7577}
     
    8082  delete _log;
    8183  delete _opt;
     84  delete _filter;
    8285  delete _ephPool;
    8386  delete _obsPool;
     
    8689    delete _antex;
    8790  }
    88   delete _filter;
    8991  delete _tides;
    90   if (_loading) {
    91     delete _loading;
    92   }
    9392  clearObs();
    9493}
     
    157156t_irc t_pppClient::prepareObs(const vector<t_satObs*>& satObs,
    158157                              vector<t_pppSatObs*>& obsVector, bncTime& epoTime) {
     158
    159159  // Default
    160160  // -------
     
    176176  }
    177177
     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
    178222  // Check whether data are synchronized, compute epoTime
    179223  // ----------------------------------------------------
     
    202246}
    203247
     248//
     249//////////////////////////////////////////////////////////////////////////////
     250bool 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
    204273// Compute the Bancroft position, check for blunders
    205274//////////////////////////////////////////////////////////////////////////////
     
    250319    for (unsigned ii = 0; ii < obsVector.size(); ii++) {
    251320      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) ) {
    254324        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)
    256326                   - (satObs->xc()[3] - xyzc[3]) * t_CST::c;
    257327        if (std::isnan(res) || fabs(res) > maxRes) {
     
    393463t_irc t_pppClient::cmpModel(t_pppStation* station, const ColumnVector& xyzc,
    394464                               vector<t_pppSatObs*>& obsVector) {
    395 
    396465  bncTime time;
    397466  time = _epoTimeRover;
    398467  station->setName(OPT->_roverName);
    399468  station->setAntName(OPT->_antNameRover);
     469  station->setEpochTime(time);
    400470  if (OPT->xyzAprRoverSet()) {
    401471    station->setXyzApr(OPT->_xyzAprRover);
     
    412482  // Tides
    413483  // -----
    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()));
    419486
    420487  // Observation model
     
    430497        satObs->eleSat() >= OPT->_minEle &&
    431498        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      }
    432504      ++it;
    433505    }
     
    447519  try {
    448520    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) {
    464530        return finish(failure);
    465531      }
    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;
    467556        return finish(failure);
    468557      }
    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());
    487582  }
    488583  catch (Exception& exc) {
     
    588683void t_pppClient::reset() {
    589684
    590   // to delete all parameters
    591   delete _filter;
    592   _filter   = new t_pppFilter();
    593 
    594685  // to delete old orbit and clock corrections
    595686  delete _ephPool;
     
    599690  delete _obsPool;
    600691  _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.