Changeset 10251 in ntrip


Ignore:
Timestamp:
Nov 20, 2023, 10:23:42 PM (5 months ago)
Author:
stuerze
Message:

changes regarding PPP: allow single frequency PPP and allow to select the frequency bands that are used

Location:
trunk/BNC/src
Files:
14 edited

Legend:

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

    r10237 r10251  
    231231  while (it != obsVector.end()) {
    232232    t_pppSatObs* pppSatObs = *it;
    233     char sys = pppSatObs->prn().system();
    234233    bool codeBiasesAvailable = false;
    235     t_frequency::type fType1 = t_lc::toFreq(sys,t_lc::c1);
    236     t_frequency::type fType2 = t_lc::toFreq(sys,t_lc::c2);
    237     if (pppSatObs->getCodeBias(fType1) &&
    238         pppSatObs->getCodeBias(fType2)) {
    239       codeBiasesAvailable = true;
     234    if (pppSatObs->getCodeBias(pppSatObs->fType1()) &&
     235        pppSatObs->getCodeBias(pppSatObs->fType2())) {
     236        codeBiasesAvailable = true;
    240237    }
    241238    if (codeBiasesAvailable) {
     
    247244    }
    248245  }
    249 
     246  return;
    250247}
    251248
  • trunk/BNC/src/PPP/pppFilter.cpp

    r10250 r10251  
    307307                                    const vector<t_pppSatObs*> &obsVector) {
    308308
    309   const double SLIP = 20.0;
     309  const double SLIP = 200.0;
    310310  string epoTimeStr = string(_epoTime);
    311311  const vector<t_pppParam*> &params = _parlist->params();
  • trunk/BNC/src/PPP/pppParlist.cpp

    r10232 r10251  
    179179        else {
    180180          if      (_tLC == t_lc::l1) {
    181             return obs->lambda(t_lc::l1) * phaseCoeff[t_lc::toFreq(obs->prn().system(),t_lc::l1)];
     181            return obs->lambda(t_lc::l1) * phaseCoeff[obs->fType1()];
    182182          }
    183183          else if (_tLC == t_lc::l2) {
    184             return obs->lambda(t_lc::l2) * phaseCoeff[t_lc::toFreq(obs->prn().system(),t_lc::l2)];
     184            return obs->lambda(t_lc::l2) * phaseCoeff[obs->fType2()];
    185185          }
    186186        }
     
    198198    if (obs->prn() == _prn) {
    199199      if      (tLC == t_lc::c1) {
    200         return ionoCoeff[t_lc::toFreq(obs->prn().system(),t_lc::c1)];
     200        return ionoCoeff[obs->fType1()];
    201201      }
    202202      else if (tLC == t_lc::c2) {
    203         return ionoCoeff[t_lc::toFreq(obs->prn().system(),t_lc::c2)];
     203        return ionoCoeff[obs->fType2()];
    204204      }
    205205      else if (tLC == t_lc::l1) {
    206         return ionoCoeff[t_lc::toFreq(obs->prn().system(),t_lc::l1)];
     206        return ionoCoeff[obs->fType1()];
    207207      }
    208208      else if (tLC == t_lc::l2) {
    209         return ionoCoeff[t_lc::toFreq(obs->prn().system(),t_lc::l2)];
     209        return ionoCoeff[obs->fType2()];
    210210      }
    211211      else if (tLC == t_lc::GIM) {
     
    414414  }
    415415
    416   if (OPT->_obsModelType == OPT->PPPRTK || OPT->_pseudoObsIono) {
     416  if (OPT->_ionoModelType == OPT->PPP_RTK || OPT->_pseudoObsIono) {
    417417    vector<t_pppParam*>::iterator it = _params.begin();
    418418    while (it != _params.end()) {
     
    502502  // Ionosphere
    503503  // ----------
    504   if (OPT->_obsModelType == OPT->UncombPPP) {
     504  if (OPT->_ionoModelType == OPT->est) {
    505505    for (unsigned jj = 0; jj < obsVector.size(); jj++) {
    506506      const t_pppSatObs* satObs = obsVector[jj];
    507       required.push_back(new t_pppParam(t_pppParam::ion, satObs->prn(), t_lc::dummy));
     507      char sys = satObs->prn().system();
     508      std::vector<t_lc::type> LCs = OPT->LCs(sys);
     509      if (std::find(LCs.begin(), LCs.end(), t_lc::cIF) == LCs.end() &&
     510          std::find(LCs.begin(), LCs.end(), t_lc::lIF) == LCs.end()) {
     511        required.push_back(new t_pppParam(t_pppParam::ion, satObs->prn(), t_lc::dummy));
     512      }
    508513    }
    509514  }
     
    512517  for (unsigned jj = 0; jj < obsVector.size(); jj++) {
    513518    const t_pppSatObs*  satObs = obsVector[jj];
    514     const vector<t_lc::type>& ambLCs = OPT->ambLCs(satObs->prn().system());
     519    char sys = satObs->prn().system();
     520    const vector<t_lc::type>& ambLCs = OPT->ambLCs(sys);
    515521    for (unsigned ii = 0; ii < ambLCs.size(); ii++) {
    516522      required.push_back(new t_pppParam(t_pppParam::amb, satObs->prn(), ambLCs[ii], &obsVector));
     
    520526  // Receiver Code Biases
    521527  // --------------------
    522   if (OPT->_obsModelType == OPT->PPPRTK) {
     528  if (OPT->_ionoModelType == OPT->PPP_RTK) {
    523529    std::vector<t_lc::type> lc;
    524530    if (_usedSystems.contains('G')) {
     
    589595  // Receiver Phase Biases
    590596  // ---------------------
    591   if (OPT->_obsModelType == OPT->PPPRTK) {
     597  if (OPT->_ionoModelType == OPT->PPP_RTK) {
    592598    std::vector<t_lc::type> lc;
    593599    if (_usedSystems.contains('G')) {
  • trunk/BNC/src/PPP/pppSatObs.cpp

    r10231 r10251  
    4646  _stecSat    = 0.0;
    4747  _signalPriorities = QString::fromStdString(OPT->_signalPriorities);
    48   if (!_signalPriorities.size()) {
    49     _signalPriorities = "G:12&CWPSLX R:12&CP E:1&CBX E:5&QIX C:26&IQX";
    50   }
    51 
    5248  for (unsigned ii = 0; ii < t_frequency::max; ii++) {
    5349    _obs[ii] = 0;
     
    6662//
    6763////////////////////////////////////////////////////////////////////////////
    68 void t_pppSatObs::prepareObs(const t_satObs& pppSatObs) {
     64void t_pppSatObs::prepareObs(const t_satObs& pppSatObs) {//cout << "SATELLITE: " << _prn.toString() << endl;
    6965
    7066  _model.reset();
     67
     68  std::vector<char> bb = OPT->frqBands(_prn.system());
     69  char frqNum1 = '0';
     70  if (bb.size() >= 1) {
     71    frqNum1 = bb[0];
     72  }
     73  char frqNum2 = '0';
     74  if (bb.size() == 2) {
     75    frqNum2 = bb[1];
     76  }
    7177
    7278  // Select pseudo-ranges and phase observations
     
    7480  QStringList priorList = _signalPriorities.split(" ", QString::SkipEmptyParts);
    7581  string preferredAttrib;
    76   char obsSys = pppSatObs._prn.system();  //cout << "SATELLITE: " << pppSatObs._prn.toString() << endl;
    7782  for (unsigned iFreq = 1; iFreq < t_frequency::max; iFreq++) {
    7883    t_frequency::type frqType = static_cast<t_frequency::type>(iFreq);
    7984    char frqSys = t_frequency::toString(frqType)[0]; //cout << "frqSys: " << frqSys << endl;
    8085    char frqNum = t_frequency::toString(frqType)[1]; //cout << "frqNum: " << frqNum << endl;
    81     if (obsSys != frqSys) {
     86    if (frqSys != _prn.system()) {
     87      continue;
     88    }
     89    if (frqNum != frqNum1 &&
     90        frqNum != frqNum2 ) {
    8291      continue;
    8392    }
     
    100109            //cout << "observation2char: " << obs->_rnxType2ch << " vs. " << obsType.toStdString().c_str()<< endl;
    101110            if (obs->_rnxType2ch == obsType.toStdString() &&
    102                 obs->_codeValid && obs->_code &&
     111                obs->_codeValid  && obs->_code &&
    103112                obs->_phaseValid && obs->_phase) {
    104113              _obs[iFreq] = new t_frqObs(*obs); //cout << "================> newObs: " << obs->_rnxType2ch <<endl;
     
    112121  // Used frequency types
    113122  // --------------------
    114   _fType1 = t_lc::toFreq(_prn.system(),t_lc::l1);
    115   _fType2 = t_lc::toFreq(_prn.system(),t_lc::l2);
     123  _fType1 = t_frqBand::toFreq(_prn.system(), frqNum1);
     124  _fType2 = t_frqBand::toFreq(_prn.system(), frqNum2);
    116125
    117126  // Check whether all required frequencies available
     
    524533        }
    525534        const t_frqObs* obs = _obs[iFreq];
    526         if (obs && obs->_rnxType2ch == bias._rnxType2ch) {
     535        if (obs &&
     536            obs->_rnxType2ch == bias._rnxType2ch) {
    527537          _model._codeBias[iFreq]  = bias._value;
    528538        }
     
    551561        }
    552562        const t_frqObs* obs = _obs[iFreq];
    553         if (obs && obs->_rnxType2ch == bias._rnxType2ch) {
     563        if (obs &&
     564            obs->_rnxType2ch == bias._rnxType2ch) {
    554565          _model._phaseBias[iFreq]  = bias._value;
    555566        }
     
    606617  _model._set = true;
    607618
    608   //printModel();
     619  printModel();
    609620
    610621  return success;
     
    619630
    620631      << "\n======================= " << endl
    621      << "PPP STRATEGY  : " <<  OPT->_obsmodelTypeStr.at((int)OPT->_obsModelType).toLocal8Bit().constData()
     632      << "PPP "
    622633      <<  ((OPT->_pseudoObsIono) ? " with pseudo-observations for STEC" : "")          << endl
    623634      << "RHO           : " << setw(12) << setprecision(3) << _model._rho              << endl
     
    701712      t_frequency::type tFreq = it->first;
    702713      dispPart += it->second * (_model._antPCO[tFreq] - _model._codeBias[tFreq]);
    703       if (OPT->PPPRTK) {
     714      if (OPT->PPP_RTK) {
    704715        dispPart += it->second * (_model._ionoCodeDelay[tFreq]);
    705716      }
     
    709720      dispPart += it->second * (_model._antPCO[tFreq] - _model._phaseBias[tFreq] +
    710721                                _model._windUp * t_CST::lambda(tFreq, _channel));
    711       if (OPT->PPPRTK) {
     722      if (OPT->PPP_RTK) {
    712723        dispPart += it->second * (- _model._ionoCodeDelay[tFreq]);
    713724      }
  • trunk/BNC/src/PPP/pppSatObs.h

    r10034 r10251  
    5050  double              getIonoCodeDelay(t_frequency::type freq) {return _model._ionoCodeDelay[freq];}
    5151  double              getCodeBias(t_frequency::type freq) {return _model._codeBias[freq];}
     52  t_frequency::type   fType1() const {return _fType1;}
     53  t_frequency::type   fType2() const {return _fType2;}
    5254
    5355  // RINEX
  • trunk/BNC/src/bncconst.h

    r9765 r10251  
    3333 public:
    3434  enum type {dummy = 0,
    35                         // GPS
    36                         G1, // L1 / 1575.42
    37                         G2, // L2 / 1227.60
    38                         G5, // L5 / 1176.45
    39                         // GLONASS
    40                         R1, // G1  / 1602 + k * 9/16 (k = -7 .. +12)
    41                         R4, // G1a / 1600.995
    42                         R2, // G2  / 1246 + k * 7/16 (k = -7 .. +12)
    43                         R6, // G2a / 1248.06
    44                         R3, // G3  / 1202.025
    45                         // Galileo
    46                         E1, // E1  / 1575.42
    47                         E5, // E5a / 1176.45
    48                         E7, // E5b / 1207.140
    49                         E8, // E5(E5a+E5b) / 1191.795
    50                         E6, // E6  / 1278.75
    51                         // QZSS
    52                         J1, // L1 / 1575.42
    53                         J2, // L2 / 1227.60
    54                         J5, // L5 / 1176.45
    55                         J6, // L6 / 1278.75
    56                         // BDS
    57                         C2, // B1 / 1561.098 (BDS 2/3 signals)
    58                         C1, // B1C, B1A / 1575.42 (BDS-3 signals)
    59                         C5, // B2a / 1176.45 (BDS-3 signals)
    60                         C7, // B2, B2b / 1207.14 (BDS-2 signals)
    61                         C8, // B2(B2a+B2b) / 1191.795 (BDS-3 signals)
    62                         C6, // B3,B3A / 1268.52
    63                         // IRNSS
    64                         I5, // L5 / 1176.45
    65                         I9, // S  / 2492.028
    66                         // SBAS
    67                         S1, // L1 / 1575.42
    68                         S5, // L5 / 1176.45
    69              max};
     35            // GPS
     36            G1, // L1 / 1575.42
     37            G2, // L2 / 1227.60
     38            G5, // L5 / 1176.45
     39            // GLONASS
     40            R1, // G1  / 1602 + k * 9/16 (k = -7 .. +12)
     41            R4, // G1a / 1600.995
     42            R2, // G2  / 1246 + k * 7/16 (k = -7 .. +12)
     43            R6, // G2a / 1248.06
     44            R3, // G3  / 1202.025
     45            // Galileo
     46            E1, // E1  / 1575.42
     47            E5, // E5a / 1176.45
     48            E7, // E5b / 1207.140
     49            E8, // E5(E5a+E5b) / 1191.795
     50            E6, // E6  / 1278.75
     51            // QZSS
     52            J1, // L1 / 1575.42
     53            J2, // L2 / 1227.60
     54            J5, // L5 / 1176.45
     55            J6, // L6 / 1278.75
     56            // BDS
     57            C2, // B1 / 1561.098 (BDS 2/3 signals)
     58            C1, // B1C, B1A / 1575.42 (BDS-3 signals)
     59            C5, // B2a / 1176.45 (BDS-3 signals)
     60            C7, // B2, B2b / 1207.14 (BDS-2 signals)
     61            C8, // B2(B2a+B2b) / 1191.795 (BDS-3 signals)
     62            C6, // B3,B3A / 1268.52
     63            // IRNSS
     64            I5, // L5 / 1176.45
     65            I9, // S  / 2492.028
     66            // SBAS
     67            S1, // L1 / 1575.42
     68            S5, // L5 / 1176.45
     69            max};
    7070
    7171  static std::string toString(type tt) {
  • trunk/BNC/src/bncmain.cpp

    r10244 r10251  
    233233      "   PPP/logPath     {Directory for PPP log files [character string]}\n"
    234234      "   PPP/antexFile   {ANTEX file, full path [character string]}\n"
    235 #ifdef USE_PPP
     235#ifdef USE_PPP     
    236236      "   PPP/blqFile     {BLQ file, full path [character string]}\n"
    237237      "   PPP/ionoMount   {VTEC mountpoint, [char string]}\n"
    238238      "   PPP/ionoFile    {VTEC file, full path [char string]}\n"
    239 #endif
     239#endif     
    240240      "   PPP/nmeaPath      {Directory for NMEA output files [character string]}\n"
    241241      "   PPP/snxtroPath    {Directory for SINEX troposphere output files [character string]}\n"
     
    248248      "\n"
    249249      "PPP Client Panel 2 keys:\n"
    250       "   PPP/lcGPS        {Select observations from GPS code and/or phase data [character string;     Pi&Li|Pi|Li|no]}\n"
    251       "   PPP/lcGLONASS    {Select observations from GLONASS code and/or phase data [character string: Pi&Li|Pi|Li|no]}\n"
    252       "   PPP/lcGalileo    {Select observations from Galileo code and/or phase data [character string: Pi&Li|Pi|Li|no]}\n"
    253       "   PPP/lcBDS        {Select observations from BDS code and/or phase data [character string:     Pi&Li|Pi|Li|no]}\n"
    254       "   PPP/modelObs     {select observation model [character string: Uncombined PPP|Ionosphere-free PPP]}\n"
     250      "   PPP/lcGPS        {Select the kind of linear combination from GPS code and/or phase data [character string: Pi&Li|Pi|Li|P1&L1|P1|L1|P3&L3|P3|L3|no]}\n"
     251      "   PPP/lcGLONASS    {Select the kind of linear combination from GLONASS code and/or phase data [character string: Pi&Li|Pi|Li|P1&L1|P1|L1|P3&L3|P3|L3|no]}\n"
     252      "   PPP/lcGalileo    {Select the kind of linear combination from Galileo code and/or phase data [character string: Pi&Li|Pi|Li|P1&L1|P1|L1|P3&L3|P3|L3|no]}\n"
     253      "   PPP/lcBDS        {Select the kind of linear combination from BDS code and/or phase data [character string: Pi&Li|Pi|Li|P1&L1|P1|L1|P3&L3|P3|L3|no]}\n"
    255254      "   PPP/sigmaC1      {Sigma for code observations in meters [floating-point number]}\n"
    256255      "   PPP/sigmaL1      {Sigma for phase observations in meters [floating-point number]}\n"
     
    264263      "   PPP/seedingTime  {Seeding time span for Quick Start [integer number of seconds]}\n"
    265264#ifdef USE_PPP
    266       "   PPP/pseudoOb     {Select pseudo observations [character string: no|Ionosphere]}\n"
     265      "   PPP/constraints  {Specify, whether ionospheric constraints in form of pseudo-observations shall be added [character string: no|Ionosphere: pseudo-obs]}\n"
    267266      "   PPP/sigmaGIM     {Sigma for GIM pseudo observations in meters [floating-point number]}\n"
    268267      "   PPP/maxResGIM    {Maximal residuum for GIM pseudo observations in meters [floating-point number]}\n"
  • trunk/BNC/src/bncwindow.cpp

    r10244 r10251  
    10411041  pppLayout1->addWidget(new QLabel("   SNX TRO solution type"),ir, 6);
    10421042  pppLayout1->addWidget(_pppWidgets._snxtroSolType,            ir, 7, Qt::AlignRight);
    1043 
    10441043#endif
    10451044  pppLayout1->setRowStretch(ir+1, 999);
     
    10801079  pppLayout2->addWidget(_pppWidgets._minEle,                ir, 7);_pppWidgets._minEle->setMaximumWidth(8*ww);
    10811080  ++ir;
    1082   pppLayout2->addWidget(new QLabel("Model Obs"),            ir, 0, Qt::AlignLeft);
    1083   pppLayout2->addWidget(_pppWidgets._modelObs,              ir, 1);
    1084   pppLayout2->addWidget(new QLabel("Wait for clock corr."), ir, 3, Qt::AlignLeft);
    1085   pppLayout2->addWidget(_pppWidgets._corrWaitTime,          ir, 4);
     1081#ifdef USE_PPP
     1082  pppLayout2->addWidget(new QLabel("Constraints"),          ir, 0, Qt::AlignLeft);
     1083  pppLayout2->addWidget(_pppWidgets._constraints,           ir, 1);
     1084  pppLayout2->addWidget(new QLabel("Sigma GIM"),            ir, 3, Qt::AlignLeft);
     1085  pppLayout2->addWidget(_pppWidgets._sigmaGIM,              ir, 4); _pppWidgets._sigmaGIM->setMaximumWidth(8*ww);
     1086#endif
     1087  pppLayout2->addItem(new QSpacerItem(8*ww, 0),             ir, 5);
     1088  pppLayout2->addWidget(new QLabel("Wait for clock corr."), ir, 6, Qt::AlignLeft);
     1089  pppLayout2->addWidget(_pppWidgets._corrWaitTime,          ir, 7);
     1090  ++ir;
     1091  pppLayout2->addItem(new QSpacerItem(8*ww, 0),             ir, 2);
     1092#ifdef USE_PPP
     1093  pppLayout2->addWidget(new QLabel("Max Res GIM"),          ir, 3, Qt::AlignLeft);
     1094  pppLayout2->addWidget(_pppWidgets._maxResGIM,             ir, 4); _pppWidgets._maxResGIM->setMaximumWidth(8*ww);
     1095#endif
    10861096  pppLayout2->addWidget(new QLabel("Seeding (sec)"),        ir, 6, Qt::AlignLeft);
    10871097  pppLayout2->addWidget(_pppWidgets._seedingTime,           ir, 7);_pppWidgets._seedingTime->setMaximumWidth(8*ww);
    1088   ++ir;
    1089   pppLayout2->addWidget(new QLabel("Pseudo Obs"),           ir, 0, Qt::AlignLeft);
    1090   pppLayout2->addWidget(_pppWidgets._pseudoObs,             ir, 1);
    1091   pppLayout2->addItem(new QSpacerItem(8*ww, 0),             ir, 2);
    1092   pppLayout2->addWidget(new QLabel("Sigma GIM"),            ir, 3, Qt::AlignLeft);
    1093   pppLayout2->addWidget(_pppWidgets._sigmaGIM,              ir, 4); _pppWidgets._sigmaGIM->setMaximumWidth(8*ww);
    1094   pppLayout2->addItem(new QSpacerItem(8*ww, 0),             ir, 5);
    1095   pppLayout2->addWidget(new QLabel("Max Res GIM"),            ir, 6, Qt::AlignLeft);
    1096   pppLayout2->addWidget(_pppWidgets._maxResGIM,        ir, 7); _pppWidgets._maxResGIM->setMaximumWidth(8*ww);
    10971098  ++ir;
    10981099  pppLayout2->addWidget(new QLabel(""),                     ir, 8);
     
    15051506  // WhatsThis, PPP (3)
    15061507  // ------------------
    1507   _pppWidgets._lcGPS->setWhatsThis(tr("<p>Specify which kind of GPS observations you want to use</p><p><ul><li>Specifying 'Pi' means that you request BNC to use code data of two frequencies.</li><li>Specifying 'Li' means that you request BNC to use phase data of two frequencies.</li> <li>Specifying 'Pi&Li' means that you request BNC to use both, code and phase data of two frequencies.</li></ul></p><p>Specifying 'no' means that you don't want BNC to use GPS data. <i>[key: PPP/lcGPS]</i></p>"));
    1508   _pppWidgets._lcGLONASS->setWhatsThis(tr("<p>Specify which kind of GLONASS observations you want to use</p><p><ul><li>Specifying 'Pi' means that you request BNC to use code data of two frequencies.</li><li>Specifying'Li' means that you request BNC to use phase data of two frequencies.</li> <li>Specifying'Pi&Li' means that you request BNC to use both, code and phase data of two frequencies.</li></ul></p><p>Specifying 'no' means that you don't want BNC to use GLONASS data. <i>[key: PPP/lcGLONASS]</i></p>"));
    1509   _pppWidgets._lcGalileo->setWhatsThis(tr("<p>Specify which kind of Galileo observations you want to use</p><p><ul><li>Specifying 'Pi' means that you request BNC to use code data of two frequencies.</li><li>Specifying'Li' means that you request BNC to use phase data of two frequencies.</li> <li>Specifying'Pi&Li' means that you request BNC to use both, code and phase data of two frequencies.</li></ul></p><p>Specifying 'no' means that you don't want BNC to use Galileo data. <i>[key: PPP/lcGalileo]</i></p>"));
    1510   _pppWidgets._lcBDS->setWhatsThis(tr("<p>Specify which kind of BDS observations you want to use</p><p><ul><li>Specifying 'Pi' means that you request BNC to use code data from two frequencies.</li><li>Specifying'Li' means that you request BNC to use phase data of two frequencies.</li> <li>Specifying'Pi&Li' means that you request BNC to use both, code and phase data of two frequencies.</li></ul></p><p>Specifying 'no' means that you don't want BNC to use BDS data. <i>[key: PPP/lcBDS]</i></p>"));
    1511   _pppWidgets._modelObs->setWhatsThis(tr("<p>Specify which kind of PPP model you want to use:</p><p><ul><li>Uncombined PPP</li><li>Iopnosphere-free PPP</li><li>PPP-RTK (currently not activated because of an incomplete standardized SSR model)</li><li></p><p>[key: PPP/modelObs]</i></p>"));
    1512   _pppWidgets._pseudoObs->setWhatsThis(tr("<p>Specify whether pseudo observations regarding the Ionosphere shall be used. Please note, this is useful, as soon as the ionospheric information is more accurate than the code data accuracy. <i>[key: PPP/pseudoObs]</i></p>"));
    1513   _pppWidgets._sigmaC1->setWhatsThis(tr("<p>Enter a Sigma for GPS C1 code observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GPS C1 code observations to a PPP solution from combined code and phase data. 2.0 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma C1 = 2.0' <i>[key: PPP/sigmaC1]</i></p>"));
    1514   _pppWidgets._sigmaL1->setWhatsThis(tr("<p>Enter a Sigma for GPS L1 phase observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GPS L1 phase observations to a PPP solutions from combined code and phase data. 0.02 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma L1 = 0.02' <i>[key: PPP/sigmaL1]</i></p>"));
     1508  _pppWidgets._lcGPS->setWhatsThis(tr("<p>Specify which kind of GPS observations you want to use and on which kind of linear combination the GPS ambiguity resolutions shall be based:</p><p><ul>"
     1509#ifdef USE_PPP_SSR_I
     1510      "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>"
     1511      "<li>'P3'    means that the inonosphere-free linear combination of code data shall be used.</li>"
     1512#else
     1513      "<li>'Pi&Li' means that uncombined code and phase data of two frequencies shall be used.</li>"
     1514      "<li>'Pi'    means that uncombined code data of two frequencies shall be used.</li>"
     1515      "<li>'Li'    means that uncombined phase data of two frequencies shall be used.</li> "
     1516      "<li>'P1&L1' means that uncombined code and phase data of one frequency shall be used.</li>"
     1517      "<li>'P1'    means that uncombined code data of one frequency shall be used.</li>"
     1518      "<li>'L1'    means that uncombined phase data of one frequency shall be used.</li> "
     1519      "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>"
     1520      "<li>'P3'    means that the inonosphere-free linear combination of code data shall be used.</li>"
     1521      "<li>'L3'    means that the inonosphere-free linear combination of phase data shall be used.</li> "
     1522#endif
     1523      "<li>'no'    means that you don't want BNC to use GPS data.</li></ul></p><p><i>[key: PPP/lcGPS]</i></p>"));
     1524  _pppWidgets._lcGLONASS->setWhatsThis(tr("<p>Specify which kind of GLONASS observations you want to use and on which kind of linear combination the GLONASS ambiguity resolutions shall be based:</p><p><ul>"
     1525#ifdef USE_PPP_SSR_I
     1526      "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>"
     1527      "<li>'P3'    means that the inonosphere-free linear combination of code data shall be used.</li>"
     1528      "<li>'L3'    means that the inonosphere-free linear combination of phase data shall be used.</li> "
     1529#else
     1530      "<li>'Pi&Li' means that uncombined code and phase data of two frequencies shall be used.</li>"
     1531      "<li>'Pi'    means that uncombined code data of two frequencies shall be used.</li>"
     1532      "<li>'Li'    means that uncombined phase data of two frequencies shall be used.</li> "
     1533      "<li>'P1&L1' means that uncombined code and phase data of one frequency shall be used.</li>"
     1534      "<li>'P1'    means that uncombined code data of one frequency shall be used.</li>"
     1535      "<li>'L1'    means that uncombined phase data of one frequency shall be used.</li> "
     1536      "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>"
     1537      "<li>'P3'    means that the inonosphere-free linear combination of code data shall be used.</li>"
     1538      "<li>'L3'    means that the inonosphere-free linear combination of phase data shall be used.</li> "
     1539#endif
     1540      "<li>'no'    means that you don't want BNC to use GLONASS data.</li></ul></p><p><i>[key: PPP/lcGLONASS]</i></p>"));
     1541  _pppWidgets._lcGalileo->setWhatsThis(tr("<p>Specify which kind of Galileo observations you want to use and on which kind of linear combination the Galileo ambiguity resolutions shall be based:</p><p><ul>"
     1542#ifdef USE_PPP_SSR_I
     1543          "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>"
     1544          "<li>'P3'    means that the inonosphere-free linear combination of code data shall be used.</li>"
     1545          "<li>'L3'    means that the inonosphere-free linear combination of phase data shall be used.</li> "
     1546#else
     1547      "<li>'Pi&Li' means that uncombined code and phase data of two frequencies shall be used.</li>"
     1548      "<li>'Pi'    means that uncombined code data of two frequencies shall be used.</li>"
     1549      "<li>'Li'    means that uncombined phase data of two frequencies shall be used.</li> "
     1550      "<li>'P1&L1' means that uncombined code and phase data of one frequency shall be used.</li>"
     1551      "<li>'P1'    means that uncombined code data of one frequency shall be used.</li>"
     1552      "<li>'L1'    means that uncombined phase data of one frequency shall be used.</li> "
     1553      "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>"
     1554      "<li>'P3'    means that the inonosphere-free linear combination of code data shall be used.</li>"
     1555      "<li>'L3'    means that the inonosphere-free linear combination of phase data shall be used.</li> "
     1556#endif
     1557      "<li>'no'    means that you don't want BNC to use Galileo data.</li></ul></p><p><i>[key: PPP/lcGalileo]</i></p>"));
     1558  _pppWidgets._lcBDS->setWhatsThis(tr("<p>Specify which kind of BDS observations you want to use and on which kind of linear combination the BDS ambiguity resolutions shall be based:</p><p><ul>"
     1559#ifdef USE_PPP_SSR_I
     1560          "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>"
     1561          "<li>'P3'    means that the inonosphere-free linear combination of code data shall be used.</li>"
     1562          "<li>'L3'    means that the inonosphere-free linear combination of phase data shall be used.</li> "
     1563#else
     1564      "<li>'Pi&Li' means that uncombined code and phase data of two frequencies shall be used.</li>"
     1565      "<li>'Pi'    means that uncombined code data of two frequencies shall be used.</li>"
     1566      "<li>'Li'    means that uncombined phase data of two frequencies shall be used.</li> "
     1567      "<li>'P1&L1' means that uncombined code and phase data of one frequency shall be used.</li>"
     1568      "<li>'P1'    means that uncombined code data of one frequency shall be used.</li>"
     1569      "<li>'L1'    means that uncombined phase data of one frequency shall be used.</li> "
     1570      "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>"
     1571      "<li>'P3'    means that the inonosphere-free linear combination of code data shall be used.</li>"
     1572      "<li>'L3'    means that the inonosphere-free linear combination of phase data shall be used.</li> "
     1573#endif
     1574      "<li>'no'    means that you don't want BNC to use BDS data.</li></ul></p><p><i>[key: PPP/lcBDS]</i></p>"));
     1575  _pppWidgets._constraints->setWhatsThis(tr("<p>Specify, whether ionospheric constraints in form of pseudo-observations shall be added. Please note, this is only valid, if no ionosphere-free linear-combination is used and only helpful as soon as the ionosphere information is more accurate than the code data accuracy. <i>[key: PPP/constraints]</i></p>"));
     1576  _pppWidgets._sigmaC1->setWhatsThis(tr("<p>Enter a Sigma for GPS C1 code observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GPS C1 code observations to a PPP solution from combined code and phase data. 1.0 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma C1 = 1.0' <i>[key: PPP/sigmaC1]</i></p>"));
     1577  _pppWidgets._sigmaL1->setWhatsThis(tr("<p>Enter a Sigma for GPS L1 phase observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GPS L1 phase observations to a PPP solutions from combined code and phase data. 0.01 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma L1 = 0.01' <i>[key: PPP/sigmaL1]</i></p>"));
     1578#ifdef USE_PPP
    15151579  _pppWidgets._sigmaGIM->setWhatsThis(tr("<p>Enter a Sigma for GIM pseudo observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GIM pseudo observations to a PPP solution. 5.0 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma GIM = 5.0' <i>[key: PPP/sigmaGIM]</i></p>"));
    1516   _pppWidgets._maxResC1->setWhatsThis(tr("<p>Specify a maximum for residuals from GPS C1 code observations in a PPP solution. '3.0' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res C1 = 3.0' <i>[key: PPP/maxResC1]</i></p>"));
    1517   _pppWidgets._maxResL1->setWhatsThis(tr("<p>Specify a maximum for residuals from GPS L1 phase observations in a PPP solution. '0.03' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res L1 = 0.03' <i>[key: PPP/maxResL1]</i></p>"));
    1518   _pppWidgets._maxResGIM->setWhatsThis(tr("<p>Specify a maximum for residuals from GIM pseudo observations in a PPP solution. '3.0' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res GIM = 3.0' <i>[key: PPP/maxResGIM]</i></p>"));
     1580#endif
     1581  _pppWidgets._maxResC1->setWhatsThis(tr("<p>Specify a maximum for residuals from GPS C1 code observations in a PPP solution. '2.0' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res C1 = 2.0' <i>[key: PPP/maxResC1]</i></p>"));
     1582  _pppWidgets._maxResL1->setWhatsThis(tr("<p>Specify a maximum for residuals from GPS L1 phase observations in a PPP solution. '0.02' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res L1 = 0.02' <i>[key: PPP/maxResL1]</i></p>"));
     1583#ifdef USE_PPP
     1584  _pppWidgets._maxResGIM->setWhatsThis(tr("<p>Specify a maximum for residuals from GIM pseudo observations in a PPP solution. '2.0' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res GIM = 2.0' <i>[key: PPP/maxResGIM]</i></p>"));
     1585#endif
    15191586  _pppWidgets._eleWgtCode->setWhatsThis(tr("<p>Tic 'Ele Wgt Code' to use satellite Elevation depending Weights for Code observations in the PPP solution. <i>[key: PPP/eleWgtCode]</i></p>"));
    15201587  _pppWidgets._eleWgtPhase->setWhatsThis(tr("<p>Tic 'Ele Wgt Phase' to use satellite Elevation depending Weights for Phase observations in the PPP solution. <i>[key: PPP/eleWgtPhase]</i></p>"));
  • trunk/BNC/src/pppInclude.h

    r9547 r10251  
    3838  std::string  _log;
    3939  bool         _error;
     40};
     41
     42
     43class t_frqBand {
     44public:
     45  static t_frequency::type toFreq(char sys, char bb) {
     46    switch (bb) {
     47    case '1':
     48      if      (sys == 'G') return t_frequency::G1;
     49      else if (sys == 'R') return t_frequency::R1;
     50      else if (sys == 'E') return t_frequency::E1;
     51      else if (sys == 'C') return t_frequency::C1;
     52      else                 return t_frequency::dummy;
     53    case '2':
     54      if      (sys == 'G') return t_frequency::G2;
     55      else if (sys == 'R') return t_frequency::R2;
     56      else if (sys == 'C') return t_frequency::C2;
     57      else                 return t_frequency::dummy;
     58    case '5':
     59      if      (sys == 'G') return t_frequency::G5;
     60      else if (sys == 'E') return t_frequency::E5;
     61      else if (sys == 'C') return t_frequency::C5;
     62      else                 return t_frequency::dummy;
     63    case '6':
     64      if      (sys == 'E') return t_frequency::E6;
     65      else if (sys == 'C') return t_frequency::C6;
     66      else                 return t_frequency::dummy;
     67    case '7':
     68      if      (sys == 'E') return t_frequency::E7;
     69      else if (sys == 'C') return t_frequency::C7;
     70      else                 return t_frequency::dummy;
     71    case '8':
     72      if      (sys == 'E') return t_frequency::E8;
     73      else if (sys == 'C') return t_frequency::C8;
     74      else                 return t_frequency::dummy;
     75    }
     76    return t_frequency::dummy;
     77  }
    4078};
    4179
  • trunk/BNC/src/pppMain.cpp

    r10250 r10251  
    162162#ifdef USE_PPP
    163163    opt->_signalPriorities = hlp[10].toStdString();
     164    if (!opt->_signalPriorities.size()) {
     165      opt->_signalPriorities = "G:12&CWPSLX R:12&CP E:1&CBX E:5&QIX C:26&IQX";
     166    }
    164167#endif
    165168    if (_realTime) {
     
    189192      opt->_corrWaitTime = 0;
    190193    }
    191     opt->_obsModelType   = t_pppOptions::IF;
     194
    192195    opt->_pseudoObsIono  = false;
    193196    opt->_refSatRequired = false;
    194 #ifdef USE_PPP
     197#ifdef USE_PPP_SSR_I
     198    if (settings.value("PPP/lcGPS").toString() == "P3&L3") {
     199      opt->_LCsGPS.push_back(t_lc::cIF);
     200      opt->_LCsGPS.push_back(t_lc::lIF);
     201    }
     202    if (settings.value("PPP/lcGPS").toString() == "P3") {
     203      opt->_LCsGPS.push_back(t_lc::cIF);
     204    }
     205    if (settings.value("PPP/lcGLONASS").toString() == "P3&L3") {
     206      opt->_LCsGLONASS.push_back(t_lc::cIF);
     207      opt->_LCsGLONASS.push_back(t_lc::lIF);
     208    }
     209    if (settings.value("PPP/lcGLONASS").toString() == "P3") {
     210      opt->_LCsGLONASS.push_back(t_lc::cIF);
     211    }
     212    if (settings.value("PPP/lcGLONASS").toString() == "L3") {
     213      opt->_LCsGLONASS.push_back(t_lc::lIF);
     214    }
     215    if (settings.value("PPP/lcGalileo").toString() == "P3&L3") {
     216      opt->_LCsGalileo.push_back(t_lc::cIF);
     217      opt->_LCsGalileo.push_back(t_lc::lIF);
     218    }
     219    if (settings.value("PPP/lcGalileo").toString() == "P3") {
     220      opt->_LCsGalileo.push_back(t_lc::cIF);
     221    }
     222    if (settings.value("PPP/lcGalileo").toString() == "L3") {
     223      opt->_LCsGalileo.push_back(t_lc::lIF);
     224    }
     225    if (settings.value("PPP/lcBDS").toString() == "P3&L3") {
     226      opt->_LCsBDS.push_back(t_lc::cIF);
     227      opt->_LCsBDS.push_back(t_lc::lIF);
     228    }
     229    if (settings.value("PPP/lcBDS").toString() == "P3") {
     230      opt->_LCsBDS.push_back(t_lc::cIF);
     231    }
     232    if (settings.value("PPP/lcBDS").toString() == "L3") {
     233      opt->_LCsBDS.push_back(t_lc::lIF);
     234    }
     235#else
    195236    // Pseudo Observations
    196     if      (settings.value("PPP/pseudoObs").toString() == "no") {
     237    if      (settings.value("PPP/constraints").toString() == "no") {
    197238      opt->_pseudoObsIono  = false;
    198     }
    199     else if (settings.value("PPP/pseudoObs").toString() == "Ionosphere") {
     239      opt->_refSatRequired = false;
     240      opt->_ionoModelType = opt->est;
     241    }
     242    else if (settings.value("PPP/constraints").toString() == "Ionosphere: pseudo-obs") {
    200243      opt->_pseudoObsIono  = true;
    201     }
    202     // Observation Model
    203     if      (settings.value("PPP/modelObs").toString() == "Ionosphere-free PPP") {
    204       opt->_obsModelType = t_pppOptions::IF;
    205       opt->_pseudoObsIono  = false;
    206     }
    207     else if (settings.value("PPP/modelObs").toString() == "PPP-RTK") {
    208       opt->_obsModelType = t_pppOptions::PPPRTK;
    209       opt->_pseudoObsIono  = false;
    210     }
    211     else if (settings.value("PPP/modelObs").toString() == "Uncombined PPP") {
    212       opt->_obsModelType = t_pppOptions::UncombPPP;
    213       if (opt->_pseudoObsIono) {
    214         opt->_refSatRequired = true;
    215       }
    216     }
    217 #endif
     244      opt->_refSatRequired = true;
     245      opt->_ionoModelType = opt->est;
     246    }
    218247    // GPS
    219248    if (settings.value("PPP/lcGPS").toString() == "Pi&Li") {
    220       if (opt->_obsModelType == t_pppOptions::IF) {
    221         opt->_LCsGPS.push_back(t_lc::cIF);
    222         opt->_LCsGPS.push_back(t_lc::lIF);
    223       }
    224       else {
     249      opt->_LCsGPS.push_back(t_lc::c1);
     250      opt->_LCsGPS.push_back(t_lc::c2);
     251      opt->_LCsGPS.push_back(t_lc::l1);
     252      opt->_LCsGPS.push_back(t_lc::l2);
     253      if (opt->_pseudoObsIono) {
     254        opt->_LCsGPS.push_back(t_lc::GIM);
     255      }
     256    }
     257    if (settings.value("PPP/lcGPS").toString() == "Pi") {
     258      opt->_LCsGPS.push_back(t_lc::c1);
     259      opt->_LCsGPS.push_back(t_lc::c2);
     260      if (opt->_pseudoObsIono) {
     261        opt->_LCsGPS.push_back(t_lc::GIM);
     262      }
     263    }
     264    if (settings.value("PPP/lcGPS").toString() == "Li") {
     265      opt->_LCsGPS.push_back(t_lc::l1);
     266      opt->_LCsGPS.push_back(t_lc::l2);
     267      if (opt->_pseudoObsIono) {
     268        opt->_LCsGPS.push_back(t_lc::GIM);
     269      }
     270    }
     271    if (settings.value("PPP/lcGPS").toString() == "P1&L1") {
     272      opt->_LCsGPS.push_back(t_lc::c1);
     273      opt->_LCsGPS.push_back(t_lc::l1);
     274      if (opt->_pseudoObsIono) {
     275        opt->_LCsGPS.push_back(t_lc::GIM);
     276      }
     277    }
     278    if (settings.value("PPP/lcGPS").toString() == "P1") {
    225279        opt->_LCsGPS.push_back(t_lc::c1);
    226         opt->_LCsGPS.push_back(t_lc::c2);
    227         opt->_LCsGPS.push_back(t_lc::l1);
    228         opt->_LCsGPS.push_back(t_lc::l2);
    229280        if (opt->_pseudoObsIono) {
    230281          opt->_LCsGPS.push_back(t_lc::GIM);
    231282        }
    232       }
    233     }
    234     if (settings.value("PPP/lcGPS").toString() == "Pi") {
    235       if (opt->_obsModelType == t_pppOptions::IF) {
    236         opt->_LCsGPS.push_back(t_lc::cIF);
    237       }
    238       else {
    239         opt->_LCsGPS.push_back(t_lc::c1);
    240         opt->_LCsGPS.push_back(t_lc::c2);
    241         if (opt->_pseudoObsIono) {
    242           opt->_LCsGPS.push_back(t_lc::GIM);
    243         }
    244       }
    245     }
    246     if (settings.value("PPP/lcGPS").toString() == "Li") {
    247       if (opt->_obsModelType == t_pppOptions::IF) {
    248         opt->_LCsGPS.push_back(t_lc::lIF);
    249       }
    250       else {
    251         opt->_LCsGPS.push_back(t_lc::l1);
    252         opt->_LCsGPS.push_back(t_lc::l2);
    253         if (opt->_pseudoObsIono) {
    254           opt->_LCsGPS.push_back(t_lc::GIM);
    255         }
    256       }
     283    }
     284    if (settings.value("PPP/lcGPS").toString() == "L1") {
     285      opt->_LCsGPS.push_back(t_lc::l1);
     286      if (opt->_pseudoObsIono) {
     287        opt->_LCsGPS.push_back(t_lc::GIM);
     288      }
     289    }
     290    if (settings.value("PPP/lcGPS").toString() == "P3&L3") {
     291      opt->_LCsGPS.push_back(t_lc::cIF);
     292      opt->_LCsGPS.push_back(t_lc::lIF);
     293    }
     294    if (settings.value("PPP/lcGPS").toString() == "P3") {
     295      opt->_LCsGPS.push_back(t_lc::cIF);
     296    }
     297    if (settings.value("PPP/lcGPS").toString() == "L3") {
     298      opt->_LCsGPS.push_back(t_lc::lIF);
    257299    }
    258300    // GLONASS
    259301    if (settings.value("PPP/lcGLONASS").toString() == "Pi&Li") {
    260       if (opt->_obsModelType == t_pppOptions::IF) {
    261         opt->_LCsGLONASS.push_back(t_lc::cIF);
    262         opt->_LCsGLONASS.push_back(t_lc::lIF);
    263       }
    264       else {
     302      opt->_LCsGLONASS.push_back(t_lc::c1);
     303      opt->_LCsGLONASS.push_back(t_lc::c2);
     304      opt->_LCsGLONASS.push_back(t_lc::l1);
     305      opt->_LCsGLONASS.push_back(t_lc::l2);
     306      if (opt->_pseudoObsIono) {
     307        opt->_LCsGLONASS.push_back(t_lc::GIM);
     308      }
     309    }
     310    if (settings.value("PPP/lcGLONASS").toString() == "Pi") {
     311      opt->_LCsGLONASS.push_back(t_lc::c1);
     312      opt->_LCsGLONASS.push_back(t_lc::c2);
     313      if (opt->_pseudoObsIono) {
     314        opt->_LCsGLONASS.push_back(t_lc::GIM);
     315      }
     316    }
     317    if (settings.value("PPP/lcGLONASS").toString() == "Li") {
     318      opt->_LCsGLONASS.push_back(t_lc::l1);
     319      opt->_LCsGLONASS.push_back(t_lc::l2);
     320      if (opt->_pseudoObsIono) {
     321        opt->_LCsGLONASS.push_back(t_lc::GIM);
     322      }
     323    }
     324    if (settings.value("PPP/lcGLONASS").toString() == "P1&L1") {
     325      opt->_LCsGLONASS.push_back(t_lc::c1);
     326      opt->_LCsGLONASS.push_back(t_lc::l1);
     327      if (opt->_pseudoObsIono) {
     328        opt->_LCsGLONASS.push_back(t_lc::GIM);
     329      }
     330    }
     331    if (settings.value("PPP/lcGLONASS").toString() == "P1") {
    265332        opt->_LCsGLONASS.push_back(t_lc::c1);
    266         opt->_LCsGLONASS.push_back(t_lc::c2);
    267         opt->_LCsGLONASS.push_back(t_lc::l1);
    268         opt->_LCsGLONASS.push_back(t_lc::l2);
    269333        if (opt->_pseudoObsIono) {
    270334          opt->_LCsGLONASS.push_back(t_lc::GIM);
    271335        }
    272       }
    273     }
    274     if (settings.value("PPP/lcGLONASS").toString() == "Pi") {
    275       if (opt->_obsModelType == t_pppOptions::IF) {
    276         opt->_LCsGLONASS.push_back(t_lc::cIF);
    277       }
    278       else {
    279         opt->_LCsGLONASS.push_back(t_lc::c1);
    280         opt->_LCsGLONASS.push_back(t_lc::c2);
    281         if (opt->_pseudoObsIono) {
    282           opt->_LCsGLONASS.push_back(t_lc::GIM);
    283         }
    284       }
    285     }
    286     if (settings.value("PPP/lcGLONASS").toString() == "Li") {
    287       if (opt->_obsModelType == t_pppOptions::IF) {
    288         opt->_LCsGLONASS.push_back(t_lc::lIF);
    289       }
    290       else {
    291         opt->_LCsGLONASS.push_back(t_lc::l1);
    292         opt->_LCsGLONASS.push_back(t_lc::l2);
    293         if (opt->_pseudoObsIono) {
    294           opt->_LCsGLONASS.push_back(t_lc::GIM);
    295         }
    296       }
     336    }
     337    if (settings.value("PPP/lcGLONASS").toString() == "L1") {
     338      opt->_LCsGLONASS.push_back(t_lc::l1);
     339      if (opt->_pseudoObsIono) {
     340        opt->_LCsGLONASS.push_back(t_lc::GIM);
     341      }
     342    }
     343    if (settings.value("PPP/lcGLONASS").toString() == "P3&L3") {
     344      opt->_LCsGLONASS.push_back(t_lc::cIF);
     345      opt->_LCsGLONASS.push_back(t_lc::lIF);
     346    }
     347    if (settings.value("PPP/lcGLONASS").toString() == "P3") {
     348      opt->_LCsGLONASS.push_back(t_lc::cIF);
     349    }
     350    if (settings.value("PPP/lcGLONASS").toString() == "L3") {
     351      opt->_LCsGLONASS.push_back(t_lc::lIF);
    297352    }
    298353    // Galileo
    299354    if (settings.value("PPP/lcGalileo").toString() == "Pi&Li") {
    300       if (opt->_obsModelType == t_pppOptions::IF) {
    301         opt->_LCsGalileo.push_back(t_lc::cIF);
    302         opt->_LCsGalileo.push_back(t_lc::lIF);
    303       }
    304       else {
     355      opt->_LCsGalileo.push_back(t_lc::c1);
     356      opt->_LCsGalileo.push_back(t_lc::c2);
     357      opt->_LCsGalileo.push_back(t_lc::l1);
     358      opt->_LCsGalileo.push_back(t_lc::l2);
     359      if (opt->_pseudoObsIono) {
     360        opt->_LCsGalileo.push_back(t_lc::GIM);
     361      }
     362    }
     363    if (settings.value("PPP/lcGalileo").toString() == "Pi") {
     364      opt->_LCsGalileo.push_back(t_lc::c1);
     365      opt->_LCsGalileo.push_back(t_lc::c2);
     366      if (opt->_pseudoObsIono) {
     367        opt->_LCsGalileo.push_back(t_lc::GIM);
     368      }
     369    }
     370    if (settings.value("PPP/lcGalileo").toString() == "Li") {
     371      opt->_LCsGalileo.push_back(t_lc::l1);
     372      opt->_LCsGalileo.push_back(t_lc::l2);
     373      if (opt->_pseudoObsIono) {
     374        opt->_LCsGalileo.push_back(t_lc::GIM);
     375      }
     376    }
     377    if (settings.value("PPP/lcGalileo").toString() == "P1&L1") {
     378      opt->_LCsGalileo.push_back(t_lc::c1);
     379      opt->_LCsGalileo.push_back(t_lc::l1);
     380      if (opt->_pseudoObsIono) {
     381        opt->_LCsGalileo.push_back(t_lc::GIM);
     382      }
     383    }
     384    if (settings.value("PPP/lcGalileo").toString() == "P1") {
    305385        opt->_LCsGalileo.push_back(t_lc::c1);
    306         opt->_LCsGalileo.push_back(t_lc::c2);
    307         opt->_LCsGalileo.push_back(t_lc::l1);
    308         opt->_LCsGalileo.push_back(t_lc::l2);
    309386        if (opt->_pseudoObsIono) {
    310387          opt->_LCsGalileo.push_back(t_lc::GIM);
    311388        }
    312       }
    313     }
    314     if (settings.value("PPP/lcGalileo").toString() == "Pi") {
    315       if (opt->_obsModelType == t_pppOptions::IF) {
    316         opt->_LCsGalileo.push_back(t_lc::cIF);
    317       }
    318       else {
    319         opt->_LCsGalileo.push_back(t_lc::c1);
    320         opt->_LCsGalileo.push_back(t_lc::c2);
    321         if (opt->_pseudoObsIono) {
    322           opt->_LCsGalileo.push_back(t_lc::GIM);
    323         }
    324       }
    325     }
    326     if (settings.value("PPP/lcGalileo").toString() == "Li") {
    327       if (opt->_obsModelType == t_pppOptions::IF) {
    328         opt->_LCsGalileo.push_back(t_lc::lIF);
    329       }
    330       else {
    331         opt->_LCsGalileo.push_back(t_lc::l1);
    332         opt->_LCsGalileo.push_back(t_lc::l2);
    333         if (opt->_pseudoObsIono) {
    334           opt->_LCsGalileo.push_back(t_lc::GIM);
    335         }
    336       }
     389    }
     390    if (settings.value("PPP/lcGalileo").toString() == "L1") {
     391      opt->_LCsGalileo.push_back(t_lc::l1);
     392      if (opt->_pseudoObsIono) {
     393        opt->_LCsGalileo.push_back(t_lc::GIM);
     394      }
     395    }
     396    if (settings.value("PPP/lcGalileo").toString() == "P3&L3") {
     397      opt->_LCsGalileo.push_back(t_lc::cIF);
     398      opt->_LCsGalileo.push_back(t_lc::lIF);
     399    }
     400    if (settings.value("PPP/lcGalileo").toString() == "P3") {
     401      opt->_LCsGalileo.push_back(t_lc::cIF);
     402    }
     403    if (settings.value("PPP/lcGalileo").toString() == "L3") {
     404      opt->_LCsGalileo.push_back(t_lc::lIF);
    337405    }
    338406    // BDS
    339407    if (settings.value("PPP/lcBDS").toString() == "Pi&Li") {
    340       if (opt->_obsModelType == t_pppOptions::IF) {
    341         opt->_LCsBDS.push_back(t_lc::cIF);
    342         opt->_LCsBDS.push_back(t_lc::lIF);
    343       }
    344       else {
     408      opt->_LCsBDS.push_back(t_lc::c1);
     409      opt->_LCsBDS.push_back(t_lc::c2);
     410      opt->_LCsBDS.push_back(t_lc::l1);
     411      opt->_LCsBDS.push_back(t_lc::l2);
     412      if (opt->_pseudoObsIono) {
     413        opt->_LCsBDS.push_back(t_lc::GIM);
     414      }
     415    }
     416    if (settings.value("PPP/lcBDS").toString() == "Pi") {
     417      opt->_LCsBDS.push_back(t_lc::c1);
     418      opt->_LCsBDS.push_back(t_lc::c2);
     419      if (opt->_pseudoObsIono) {
     420        opt->_LCsBDS.push_back(t_lc::GIM);
     421      }
     422    }
     423    if (settings.value("PPP/lcBDS").toString() == "Li") {
     424      opt->_LCsBDS.push_back(t_lc::l1);
     425      opt->_LCsBDS.push_back(t_lc::l2);
     426      if (opt->_pseudoObsIono) {
     427        opt->_LCsBDS.push_back(t_lc::GIM);
     428      }
     429    }
     430    if (settings.value("PPP/lcBDS").toString() == "P1&L1") {
     431      opt->_LCsBDS.push_back(t_lc::c1);
     432      opt->_LCsBDS.push_back(t_lc::l1);
     433      if (opt->_pseudoObsIono) {
     434        opt->_LCsBDS.push_back(t_lc::GIM);
     435      }
     436    }
     437    if (settings.value("PPP/lcBDS").toString() == "P1") {
    345438        opt->_LCsBDS.push_back(t_lc::c1);
    346         opt->_LCsBDS.push_back(t_lc::c2);
    347         opt->_LCsBDS.push_back(t_lc::l1);
    348         opt->_LCsBDS.push_back(t_lc::l2);
    349439        if (opt->_pseudoObsIono) {
    350440          opt->_LCsBDS.push_back(t_lc::GIM);
    351441        }
    352       }
    353     }
    354     if (settings.value("PPP/lcBDS").toString() == "Pi") {
    355       if (opt->_obsModelType == t_pppOptions::IF) {
    356         opt->_LCsBDS.push_back(t_lc::cIF);
    357       }
    358       else {
    359         opt->_LCsBDS.push_back(t_lc::c1);
    360         opt->_LCsBDS.push_back(t_lc::c2);
    361         if (opt->_pseudoObsIono) {
    362           opt->_LCsBDS.push_back(t_lc::GIM);
    363         }
    364       }
    365     }
    366     if (settings.value("PPP/lcBDS").toString() == "Li") {
    367       if (opt->_obsModelType == t_pppOptions::IF) {
    368         opt->_LCsBDS.push_back(t_lc::lIF);
    369       }
    370       else {
    371         opt->_LCsBDS.push_back(t_lc::l1);
    372         opt->_LCsBDS.push_back(t_lc::l2);
    373         if (opt->_pseudoObsIono) {
    374           opt->_LCsBDS.push_back(t_lc::GIM);
    375         }
    376       }
    377     }
     442    }
     443    if (settings.value("PPP/lcBDS").toString() == "L1") {
     444      opt->_LCsBDS.push_back(t_lc::l1);
     445      if (opt->_pseudoObsIono) {
     446        opt->_LCsBDS.push_back(t_lc::GIM);
     447      }
     448    }
     449    if (settings.value("PPP/lcBDS").toString() == "P3&L3") {
     450      opt->_LCsBDS.push_back(t_lc::cIF);
     451      opt->_LCsBDS.push_back(t_lc::lIF);
     452    }
     453    if (settings.value("PPP/lcBDS").toString() == "P3") {
     454      opt->_LCsBDS.push_back(t_lc::cIF);
     455    }
     456    if (settings.value("PPP/lcBDS").toString() == "L3") {
     457      opt->_LCsBDS.push_back(t_lc::lIF);
     458    }
     459
     460    QString     priorStr  = QString::fromStdString(opt->_signalPriorities);
     461    QStringList priorList = priorStr.split(" ", QString::SkipEmptyParts);
     462    QStringList hlpList;
     463    vector<char> systems = opt->systems();
     464    for (unsigned iSys= 0; iSys < systems.size(); iSys++) {
     465      char sys = systems[iSys];
     466      for (int ii = 0; ii < priorList.size(); ii++) {
     467        if (priorList[ii].indexOf(":") != -1) {
     468          hlpList = priorList[ii].split(":", QString::SkipEmptyParts);
     469          if (hlpList.size() == 2 && hlpList[0].length() == 1 && hlpList[0][0] == sys) {
     470            hlpList = hlpList[1].split("&", QString::SkipEmptyParts);
     471            if (hlpList.size() == 2) {
     472              for (int jj = 0; jj < hlpList[0].size(); jj++) {
     473                char bb = hlpList[0][jj].toLatin1();
     474                if      (sys == 'G' && opt->_frqBandsGPS.size() < 2) {
     475                  opt->_frqBandsGPS.push_back(bb);
     476                }
     477                else if (sys == 'R' && opt->_frqBandsGLONASS.size() < 2) {
     478                  opt->_frqBandsGLONASS.push_back(bb);
     479                }
     480                else if (sys == 'E' && opt->_frqBandsGalileo.size() < 2) {
     481                  opt->_frqBandsGalileo.push_back(bb);
     482                }
     483                else if (sys == 'C' && opt->_frqBandsBDS.size() < 2) {
     484                  opt->_frqBandsBDS.push_back(bb);
     485                }
     486              }
     487            }
     488          }
     489        }
     490      }
     491    }
     492#endif
     493
     494
    378495    // Information from the coordinate file
    379496    // ------------------------------------
  • trunk/BNC/src/pppOptions.cpp

    r8905 r10251  
    7979//
    8080//////////////////////////////////////////////////////////////////////////////
     81const std::vector<char>& t_pppOptions::frqBands(char system) const {
     82
     83  if      (system == 'R') {
     84    return _frqBandsGLONASS;
     85  }
     86  else if (system == 'E') {
     87    return _frqBandsGalileo;
     88  }
     89  else if (system == 'C') {
     90    return  _frqBandsBDS;
     91  }
     92  else {
     93    return _frqBandsGPS;
     94  }
     95}
     96
     97//
     98//////////////////////////////////////////////////////////////////////////////
    8199bool t_pppOptions::useOrbClkCorr() const {
    82100  if (_realTime) {
  • trunk/BNC/src/pppOptions.h

    r10034 r10251  
    1111class t_pppOptions {
    1212 public:
    13   enum e_type {IF, UncombPPP, PPPRTK};
     13  enum iono_type {est,PPP_RTK};
    1414  t_pppOptions();
    1515  ~t_pppOptions();
     
    1717  std::vector<char>              systems() const;
    1818  const std::vector<t_lc::type>& LCs(char system) const;
     19  const std::vector<char>&       frqBands(char system) const;
    1920  std::vector<t_lc::type>        ambLCs(char system) const;
    2021  std::vector<t_lc::type>        codeLCs(char system) const;
     
    2728  }
    2829
    29   e_type                  _obsModelType;
    30   QStringList             _obsmodelTypeStr = QStringList()
    31       << "IF PPP"
    32       << "Uncombined PPP";
     30  iono_type               _ionoModelType;
    3331  bool                    _realTime;
    3432  std::string             _crdFile;
     
    7775  std::vector<t_lc::type> _LCsGalileo;
    7876  std::vector<t_lc::type> _LCsBDS;
     77  std::vector<char>       _frqBandsGPS;
     78  std::vector<char>       _frqBandsGLONASS;
     79  std::vector<char>       _frqBandsGalileo;
     80  std::vector<char>       _frqBandsBDS;
    7981  bool                    _pseudoObsIono;
    8082  bool                    _refSatRequired;
  • trunk/BNC/src/pppWidgets.cpp

    r10250 r10251  
    8585  _lcGalileo    = new QComboBox();     _lcGalileo   ->setObjectName("PPP/lcGalileo");    _widgets << _lcGalileo;
    8686  _lcBDS        = new QComboBox();     _lcBDS       ->setObjectName("PPP/lcBDS");        _widgets << _lcBDS;
    87   _modelObs     = new QComboBox();     _modelObs    ->setObjectName("PPP/modelObs");     _widgets << _modelObs;
    88   _pseudoObs    = new QComboBox();     _pseudoObs   ->setObjectName("PPP/pseudoObs");    _widgets << _pseudoObs;
     87  _constraints  = new QComboBox();     _constraints ->setObjectName("PPP/constraints");  _widgets << _constraints;
    8988  _sigmaC1      = new QLineEdit();     _sigmaC1     ->setObjectName("PPP/sigmaC1");      _widgets << _sigmaC1;
    9089  _sigmaL1      = new QLineEdit();     _sigmaL1     ->setObjectName("PPP/sigmaL1");      _widgets << _sigmaL1;
     
    116115  _dataSource->addItems(QString(",Real-Time Streams,RINEX Files").split(","));
    117116  connect(_dataSource, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets()));
    118   connect(_pseudoObs, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets()));
    119   connect(_modelObs, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets()));
     117  connect(_constraints, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets()));
    120118  connect(_snxtroPath, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged()));
    121119  connect(_snxtroAc, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged()));
     
    130128  _lcGPS->addItems(QString("P3,P3&L3").split(","));
    131129#else
    132   _lcGPS->addItems(QString("Pi&Li,Pi,Li,no").split(","));
     130  _lcGPS->addItems(QString("Pi&Li,Pi,Li,P1&L1,P1,L1,P3&L3,P3,L3,no").split(","));
    133131#endif
    134132
     
    136134#ifdef USE_PPP_SSR_I
    137135   _lcGLONASS->addItems(QString("no,P3,L3,P3&L3").split(","));
    138 #else
    139   _lcGLONASS->addItems(QString("Pi&Li,Pi,Li,no").split(","));
     136#else 
     137  _lcGLONASS->addItems(QString("Pi&Li,Pi,Li,P1&L1,P1,L1,P3&L3,P3,L3,no").split(","));
    140138#endif
    141139
     
    143141#ifdef USE_PPP_SSR_I
    144142  _lcGalileo->addItems(QString("no,P3,L3,P3&L3").split(","));
    145 #else
    146   _lcGalileo->addItems(QString("Pi&Li,Pi,Li,no").split(","));
     143#else 
     144  _lcGalileo->addItems(QString("Pi&Li,Pi,Li,P1&L1,P1,L1,P3&L3,P3,L3,no").split(","));
    147145#endif
    148146
    149147  _lcBDS->setEditable(false);
    150 #ifdef USE_PPP_SSR_I
     148 #ifdef USE_PPP_SSR_I
    151149  _lcBDS->addItems(QString("no,P3,L3,P3&L3").split(","));
    152 #else
    153   _lcBDS->addItems(QString("Pi&Li,Pi,Li,no").split(","));
     150#else 
     151  _lcBDS->addItems(QString("Pi&Li,Pi,Li,P1&L1,P1,L1,P3&L3,P3,L3,no").split(","));
    154152#endif
    155153
    156   _modelObs->setEditable(false);
    157   _pseudoObs->setEditable(false);
    158 #ifdef USE_PPP_SSR_I
    159   _modelObs->addItems(QString("Ionosphere-free PPP").split(","));
    160   _pseudoObs->addItems(QString("no").split(","));
    161 #else
    162   _modelObs->addItems(QString("Uncombined PPP,Ionosphere-free PPP").split(","));
    163   _pseudoObs->addItems(QString("no,Ionosphere").split(","));
     154#ifdef USE_PPP
     155  _constraints->setEditable(false);
     156  _constraints->addItems(QString("no,Ionosphere: pseudo-obs").split(","));
    164157#endif
    165 
    166158  _snxtroSampl->setEditable(false);
    167159  _snxtroSampl->addItems(QString("1 sec,5 sec,10 sec,30 sec,60 sec,300 sec").split(","));
     
    218210  // WhatsThis, PPP (3)
    219211  // ------------------
    220   _staTable->setWhatsThis(tr("<p>Specify values for Sigma and white Noise of the Stations North, East and Height coordinate components in meters. Specify also a Sigma in meters for a priori model based Tropospheric delays and a Sigma in meters per second for the delay's Noise. You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host. Specify a list of signal priorities for the observations that shall be used for PPP.</p><p>Specifying one record per Station is mandatory. BNC will only process data for stations which are listed here. To define a station, specify the 'Mountpoint' when in 'Real-Time Streams' mode or the 9-character station ID when in 'RINEX Files' mode.</p><p>'Sigma' is meant to describe the uncertainty of a single coordinate or tropospheric delay estimated for one epoch. 'Noise' is meant to describe the variation of estimates from epoch to epoch.</p><p><ul><li>A Sigma of 100.0 meters may be an appropriate choice e.g. for the initial N/E/H coordinates. However, this value may be significantly smaller (i.e. 0.01) for stations with well-known a priori coordinates.</li><li>A Noise of 100.0 meters for the estimated N/E/H coordinates may also be appropriate considering the potential movement of a rover position.</li><li>A value of 0.1 meters may be an appropriate Sigma for the a priori model based Tropospheric delay estimation.</li><li>Specify a Noise to describe the expected variation of the tropospheric effect over time. Supposing 1Hz observation data, specifying a value of 3e-6 would mean that the tropospheric effect may vary 3600 * 3e-6 = 0.01 meters per hour.</li></ul></p><p>'Signal Priorities' can be specified as equal for all systems, as system specific or as system and frequency specific. Default for all PPP models is the following list of 'Signal Priorities': <ul><li>'G:12&CWPSLX R:12&CP E:1&CBX E:5&QIX C:26&IQX'</li></ul><p>But it is recommended to specify it in more detail per individual station, e.g.:</p> <ul>  <li>'G:12&W R:12&P E:1&C E:5&Q C:26&I'</li>  </ul> <p> <i>[key: PPP/staTable]</i></p>"));
    221 
     212#ifdef USE_PPP
     213  _staTable->setWhatsThis(tr("<p>Specify values for Sigma and white Noise of the Stations North, East and Height coordinate components in meters. Specify also a Sigma in meters for a priori model based Tropospheric delays and a Sigma in meters per second for the delay's Noise. You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host. Specify a list of signal priorities for the observations that shall be used for PPP.</p>"
     214                             "<p>'Sigma' is meant to describe the uncertainty of a single coordinate or tropospheric delay estimated for one epoch. 'Noise' is meant to describe the variation of estimates from epoch to epoch.</p><p><ul><li>A Sigma of 100.0 meters may be an appropriate choice e.g. for the initial N/E/H coordinates. However, this value may be significantly smaller (i.e. 0.01) for stations with well-known a priori coordinates.</li><li>A Noise of 100.0 meters for the estimated N/E/H coordinates may also be appropriate considering the potential movement of a rover position.</li><li>A value of 0.1 meters may be an appropriate Sigma for the a priori model based Tropospheric delay estimation.</li><li>Specify a Noise to describe the expected variation of the tropospheric effect over time. Supposing 1Hz observation data, specifying a value of 3e-6 would mean that the tropospheric effect may vary 3600 * 3e-6 = 0.01 meters per hour.</li></ul></p>"
     215                             "<p>'Signal Priorities' can be specified as system (G,R,E,C) and frequency specific. Two frequency bands per GNSS are allowed and will be considered. The following frequency bands are available for selection: <ul>"
     216                             "<li>G: 1, 2, 5</li>"
     217                             "<li>R: 1, 2</li>"
     218                             "<li>E: 1, 5, 6, 7, 8</li>"
     219                             "<li>C: 1, 2, 5, 6, 7, 8</li>"
     220                             "</ul>"
     221                             "<p>'Default is the following list of 'Signal Priorities': <ul><li>'G:12&CWPSLX R:12&CP E:1&CBX E:5&QIX C:26&IQX'</li></ul>"
     222                             "<p>But it is recommended to specify it in more detail per individual station, e.g.:</p> <ul>  <li>'G:12&W R:12&P E:1&C E:5&Q C:26&I'</li></ul> "
     223                             "<p> <i>[key: PPP/staTable]</i></p>"));
     224#else
     225  _staTable->setWhatsThis(tr("<p>Specify values for Sigma and white Noise of the Stations North, East and Height coordinate components in meters. Specify also a Sigma in meters for a priori model based Tropospheric delays and a Sigma in meters per second for the delay's Noise. You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host.<i>[key: PPP/staTable]</i></p>"));
     226#endif
    222227  // WhatsThis, PPP (4)
    223228  // ------------------
     
    262267  delete _lcGalileo;
    263268  delete _lcBDS;
    264   delete _modelObs;
    265   delete _pseudoObs;
     269  delete _constraints;
    266270  delete _sigmaC1;
    267271  delete _sigmaL1;
     
    314318    _lcBDS->setCurrentIndex(ii);
    315319  }
    316   ii = _modelObs->findText(settings.value(_modelObs->objectName()).toString());
    317   if (ii != -1) {
    318     _modelObs->setCurrentIndex(ii);
    319   }
    320   ii = _pseudoObs->findText(settings.value(_pseudoObs->objectName()).toString());
    321   if (ii != -1) {
    322     _pseudoObs->setCurrentIndex(ii);
     320  ii = _constraints->findText(settings.value(_constraints->objectName()).toString());
     321  if (ii != -1) {
     322    _constraints->setCurrentIndex(ii);
    323323  }
    324324  ii = _snxtroIntr->findText(settings.value(_snxtroIntr->objectName()).toString());
     
    477477  settings.setValue(_lcGalileo   ->objectName(), _lcGalileo   ->currentText());
    478478  settings.setValue(_lcBDS       ->objectName(), _lcBDS       ->currentText());
    479   settings.setValue(_modelObs    ->objectName(), _modelObs    ->currentText());
    480   settings.setValue(_pseudoObs   ->objectName(), _pseudoObs   ->currentText());
     479  settings.setValue(_constraints ->objectName(), _constraints ->currentText());
    481480  settings.setValue(_sigmaC1     ->objectName(), _sigmaC1     ->text());
    482481  settings.setValue(_sigmaL1     ->objectName(), _sigmaL1     ->text());
     
    520519  const static QPalette paletteGray(QColor(230, 230, 230));
    521520
    522   bool allDisabled = _dataSource->currentText() == "";
    523   bool realTime    = _dataSource->currentText() == "Real-Time Streams";
    524   bool rinexFiles  = _dataSource->currentText() == "RINEX Files";
    525   bool enablePseudoObs;
    526   if (_modelObs->currentText() == "PPP-RTK" ||
    527       _modelObs->currentText() == "Ionosphere-free PPP") {
    528     enablePseudoObs = false;
    529   }
    530   else {
    531     enablePseudoObs = true;
    532   }
    533   bool pseudoObsUsed = _pseudoObs->currentText() == "Ionosphere";
     521  bool allDisabled   = _dataSource->currentText() == "";
     522  bool realTime      = _dataSource->currentText() == "Real-Time Streams";
     523  bool rinexFiles    = _dataSource->currentText() == "RINEX Files";
     524  bool pseudoObsIono = _constraints->currentText() == "Ionosphere: pseudo-obs";
    534525
    535526  QListIterator<QWidget*> it(_widgets);
     
    568559  }
    569560
    570   if (enablePseudoObs) {
    571     _pseudoObs->setEnabled(true);
    572     if (pseudoObsUsed) {
    573      _sigmaGIM->setEnabled(true);
    574      _maxResGIM->setEnabled(true);
    575     } else {
    576       _sigmaGIM->setEnabled(false);
    577       _maxResGIM->setEnabled(false);
    578     }
     561
     562  if (pseudoObsIono) {
     563   _sigmaGIM->setEnabled(true);
     564   _maxResGIM->setEnabled(true);
    579565  } else {
    580     _pseudoObs->setEnabled(false);
    581566    _sigmaGIM->setEnabled(false);
    582567    _maxResGIM->setEnabled(false);
  • trunk/BNC/src/pppWidgets.h

    r10127 r10251  
    6969  QComboBox*     _lcGalileo;
    7070  QComboBox*     _lcBDS;
    71   QComboBox*     _modelObs;
    72   QComboBox*     _pseudoObs;
     71  QComboBox*     _constraints;
    7372  QLineEdit*     _sigmaC1;
    7473  QLineEdit*     _sigmaL1;
Note: See TracChangeset for help on using the changeset viewer.