Changeset 10127 in ntrip for trunk/BNC


Ignore:
Timestamp:
Jul 20, 2023, 12:13:41 PM (16 months ago)
Author:
stuerze
Message:
 
Location:
trunk/BNC
Files:
2 added
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/CHANGELOG.md

    r9769 r10127  
    11# Changelog
    22
    3 ## 2.13.0 (2022-06-xx)
     3## 2.13.0 (2023-07-)
    44- ADDED: **RINEX Version 4** support; in navigation files currently the EPH message type is considerred only
    55- ADDED: PPP Client upgrade
  • trunk/BNC/Example_Configs/09_PPPNet.bnc

    r10115 r10127  
    100100sp3CompFile=
    101101sp3CompOutLogFile=
     102sp3CompSummaryOnly=0
    102103sslCaCertPath=
    103104sslClientCertPath=
     
    128129uploadSamplRtcmEph=5
    129130uploadSamplRtcmEphCorr=0
    130 uploadSamplSp3=1
     131uploadSamplSp3=30 sec
    131132
    132133[PPP]
     
    167168sigmaL1=0.02
    168169snxtroAc=BKG
     170snxtroCampId=DEM
    169171snxtroIntr=1 hour
    170172snxtroPath=./
    171173snxtroSampl=1 sec
    172174snxtroSol=1
     175snxtroSolId=9
     176snxtroSolType=RTS
    173177staTable="WTZR00DEU0,100.0,100.0,100.0,100.0,100.0,100.0,0.1,3e-6,0,G:1&C G:2&W R:1&C R:2&P E:1&C E:5&Q C:26&I,", "FFMJ00DEU0,100.0,100.0,100.0,100.0,100.0,100.0,0.1,3e-6,0,G:12&W R:12&P E:15&X C:26&I,"
  • trunk/BNC/src/RTCM3/gnss.h

    r9000 r10127  
    8282#define BDS_WAVELENGTH_B2b  (LIGHTSPEED / BDS_FREQU_B2b) /* m */
    8383
     84#define IRNSS_FREQU_L1      1575420000.0 /* Hz */
    8485#define IRNSS_FREQU_L5      1176450000.0 /* Hz */
    8586#define IRNSS_FREQU_S       2492028000.0 /* Hz */
     87#define IRNSS_WAVELENGTH_L1 (LIGHTSPEED / IRNSS_FREQU_L1) /* m */
    8688#define IRNSS_WAVELENGTH_L5 (LIGHTSPEED / IRNSS_FREQU_L5) /* m */
    8789#define IRNSS_WAVELENGTH_S  (LIGHTSPEED / IRNSS_FREQU_S)  /* m */
  • trunk/BNC/src/bncmain.cpp

    r10102 r10127  
    238238      "   PPP/ionoFile    {VTEC file, full path [char string]}\n"
    239239#endif
    240       "   PPP/nmeaPath    {Directory for NMEA output files [character string]}\n"
    241       "   PPP/snxtroPath  {Directory for SINEX troposphere output files [character string]}\n"
    242       "   PPP/snxtroIntr  {SINEX troposphere file interval [character string: 1 min|2 min|5 min|10 min|15 min|30 min|1 hour|1 day]}\n"
    243       "   PPP/snxtroSampl {SINEX troposphere file sampling rate [character string: 1 sec|5 sec|10 sec|30 sec|60 sec|300 sec]}\n"
    244       "   PPP/snxtroAc    {SINEX troposphere Analysis Center [3-char string]}\n"
    245       "   PPP/snxtroSol   {SINEX troposphere solution ID [1-char]}\n"
     240      "   PPP/nmeaPath      {Directory for NMEA output files [character string]}\n"
     241      "   PPP/snxtroPath    {Directory for SINEX troposphere output files [character string]}\n"
     242      "   PPP/snxtroIntr    {SINEX troposphere file interval [character string: 1 min|2 min|5 min|10 min|15 min|30 min|1 hour|1 day]}\n"
     243      "   PPP/snxtroSampl   {SINEX troposphere file sampling rate [character string: 1 sec|5 sec|10 sec|30 sec|60 sec|300 sec]}\n"
     244      "   PPP/snxtroAc      {SINEX troposphere Analysis Center [3-char string]}\n"
     245      "   PPP/snxtroSolId   {SINEX troposphere solution ID [1-char]}\n"
     246      "   PPP/snxtroSolType {SINEX troposphere solution type, e.g. RTS, UNK, .. [3-char]}\n"
     247      "   PPP/snxtroCampId  {SINEX troposphere campaign ID, e.g. DEM, TST, OPS, .. [3-char]}\n"
    246248      "\n"
    247249      "PPP Client Panel 2 keys:\n"
  • trunk/BNC/src/bncoutf.cpp

    r9944 r10127  
    159159      bncSettings settings;
    160160      QString ac  = settings.value("PPP/snxtroAc").toString();
    161       QString sol = settings.value("PPP/snxtroSol").toString();
     161      QString solId = settings.value("PPP/snxtroSolId").toString();
     162      QString solType = settings.value("PPP/snxtroSolType").toString();
     163      QString campId  = settings.value("PPP/snxtroCampId").toString();
    162164      baseName.replace(0,3,ac);
    163       baseName.replace(3,1,sol);
    164       baseName.replace(4,3,"DEM");
    165       baseName.replace(7,3,"RTS");
     165      baseName.replace(3,1,solId);
     166      baseName.replace(4,3,solType);
     167      baseName.replace(7,3,campId);
    166168      addition = QString("_%1_TRO").arg(site);
    167169    }
  • trunk/BNC/src/bncsinextro.cpp

    r10083 r10127  
    7979                                       .arg(nominalEndSec , 5, 10, QLatin1Char('0'));
    8080  int numEpochs = ((nominalEndSec - daysec) / _sampl) +1;
    81   QString epo  = QString("%1").arg(numEpochs, 5, 10, QLatin1Char('0'));
    82   QString ac   = QString("%1").arg(settings.value("PPP/snxtroAc").toString(),3,QLatin1Char(' '));
    83   QString sol  = QString("   %1").arg(settings.value("PPP/snxtroSol").toString(),1,QLatin1Char(' '));
     81  QString epo    = QString("%1").arg(numEpochs, 5, 10, QLatin1Char('0'));
     82  QString ac     = QString("%1").arg(settings.value("PPP/snxtroAc").toString(),3,QLatin1Char(' '));
     83  QString solId  = settings.value("PPP/snxtroSolId").toString();
    8484  QString corr = "";
    8585  if      (settings.value("PPP/dataSource").toString() == "Real-Time Streams") {
     
    118118       << startTime.toStdString()    << " " << endTime.toStdString() << " P "
    119119       << epo.toStdString() << " 0 " << " T " << endl;
    120 
     120  _out << "*-------------------------------------------------------------------------------" << endl;
    121121  _out << "+FILE/REFERENCE" << endl;
     122  _out << "*INFO_TYPE_________ INFO________________________________________________________" << endl;
    122123  _out << " DESCRIPTION        " << "BNC generated SINEX TRO file" << endl;
    123124  _out << " OUTPUT             " << "Total Troposphere Zenith Path Delay Product" << endl;
    124125  _out << " SOFTWARE           " <<  BNCPGMNAME <<  endl;
    125   _out << " INPUT              " << "Observations: " << _opt->_roverName.substr(0,9)
    126                                  << ", SSR corrections: "  << corr.toStdString() << endl;
    127   _out << "-FILE/REFERENCE" << endl << endl;
     126  _out << " INPUT              " << "OBS: "    << _opt->_roverName.substr(0,9) << ", SSR: "  << corr.toStdString() << endl;
     127  _out << " VERSON NUMBER      " <<  QString("%1").arg(solId, 10, QLatin1Char(' ')).toStdString() << endl;
     128  _out << "-FILE/REFERENCE" << endl;
     129  _out << "*-------------------------------------------------------------------------------" << endl;
     130
     131
     132  QString blqFileName = QString::fromStdString(_opt->_blqFileName);
     133  QString blqFileBaseName;
     134  QString blqFileExtension;
     135  if (! blqFileName.isEmpty()) {
     136    QFileInfo fileInfo(blqFileName);
     137    blqFileBaseName  = fileInfo.baseName();
     138    blqFileExtension = fileInfo.completeSuffix();
     139    if (!blqFileExtension.isEmpty()) {
     140      blqFileExtension = "." + blqFileExtension;
     141    }
     142  }
     143  _out << "+TROP/DESCRIPTION" << endl;
     144  _out << "*KEYWORD______________________ VALUE(S)______________" << endl;
     145  _out << " SAMPLING INTERVAL                               "
     146       << setw(4) << _sampl << endl;
     147  _out << " SAMPLING TROP                                   "
     148       << setw(4) << _sampl << endl;
     149  _out << " ELEVATION CUTOFF ANGLE                          "
     150       << setw(4) <<  int(_opt->_minEle * 180.0/M_PI) << endl;
     151  if (! blqFileName.isEmpty()) {
     152    _out << " OCEAN TIDE LOADING MODEL      " << blqFileBaseName.toStdString() + blqFileExtension.toStdString() << endl;
     153  }
     154  _out << " TROP MAPPING FUNCTION         " << "Saastamoinen" << endl;
     155  _out << " SOLUTION_FIELDS_1             " << "TROTOT STDEV" << endl;
     156  _out << "-TROP/DESCRIPTION"<< endl;
     157  _out << "*-------------------------------------------------------------------------------" << endl;
    128158
    129159  double recEll[3];
     
    144174  }
    145175  _out << "+SITE/ID" << endl;
    146   _out << "*CODE      PT DOMES____ T _STATION DESCRIPTION__ APPROX_LON_ APPROX_LAT_ _APP_H_" << endl;
     176  _out << "*STATION__ PT __DOMES__ T _STATION_DESCRIPTION__ _LONGITUDE _LATITUDE_ _HGT_ELI_" << endl;
    147177  _out << " " << _opt->_roverName.substr(0,9) << "  A           P "
    148178       << country.toStdString() << "                   "
    149        << QString(" %1").arg(lonD, 3, 10, QLatin1Char(' ')).toStdString()
    150        << QString(" %1").arg(lonM, 2, 10, QLatin1Char(' ')).toStdString()
    151        << QString(" %1").arg(lonS, 4, 'f', 1, QLatin1Char(' ')).toStdString()
    152        << QString(" %1").arg(latD, 3, 10, QLatin1Char(' ')).toStdString()
    153        << QString(" %1").arg(latM, 2, 10, QLatin1Char(' ')).toStdString()
    154        << QString(" %1").arg(latS, 4, 'f', 1, QLatin1Char(' ')).toStdString()
    155        << QString(" %1").arg(recEll[2], 7, 'f', 1, QLatin1Char(' ')).toStdString()
     179       << QString(" %1").arg(recEll[0]* 180.0 / M_PI,10, 'f', 6, QLatin1Char(' ')).toStdString()
     180       << QString(" %1").arg(recEll[1]* 180.0 / M_PI,10, 'f', 6, QLatin1Char(' ')).toStdString()
     181       << QString(" %1").arg(recEll[2], 9, 'f', 3, QLatin1Char(' ')).toStdString()
    156182       << endl;
    157   _out << "-SITE/ID" << endl << endl;
     183  _out << "-SITE/ID" << endl;
     184  _out << "*-------------------------------------------------------------------------------" << endl;
     185
     186  _out << "+TROP/COORDINATES" << endl;
     187  _out << "*SITE      PT SOLN T STA_X_______ STA_Y_______ STA_Z_______ SYSTEM REMARK" << endl;
     188  _out << " " << _opt->_roverName.substr(0,9) << "  A "
     189       <<  solId.toStdString() << " P"
     190       << QString(" %1").arg(_opt->_xyzAprRover(1), 12, 'f', 3, QLatin1Char(' ')).toStdString()
     191       << QString(" %1").arg(_opt->_xyzAprRover(2), 12, 'f', 3, QLatin1Char(' ')).toStdString()
     192       << QString(" %1").arg(_opt->_xyzAprRover(3), 12, 'f', 3, QLatin1Char(' ')).toStdString()
     193       << " IGS20 " << ac.toStdString() << endl;
     194  _out << "-TROP/COORDINATES"<< endl;
     195  _out << "*-------------------------------------------------------------------------------" << endl;
     196
     197
     198  _out << "+SITE/ECCENTRICITY" << endl;
     199  _out << "*                                             UP______ NORTH___ EAST____" << endl;
     200  _out << "*SITE      PT SOLN T DATA_START__ DATA_END____ AXE ARP->BENCHMARK(M)_________" << endl;
     201  _out << " " << _opt->_roverName.substr(0,9) << "  A "
     202       <<  solId.toStdString() << " P "
     203       << startTime.toStdString() << " " << endTime.toStdString() << " UNE"
     204       << QString("%1").arg(_opt->_neuEccRover(3), 9, 'f', 4, QLatin1Char(' ')).toStdString()
     205       << QString("%1").arg(_opt->_neuEccRover(1), 9, 'f', 4, QLatin1Char(' ')).toStdString()
     206       << QString("%1").arg(_opt->_neuEccRover(2), 9, 'f', 4, QLatin1Char(' ')).toStdString() << endl;
     207  _out << "-SITE/ECCENTRICITY" << endl;
     208  _out << "*-------------------------------------------------------------------------------" << endl;
    158209
    159210  if (!_opt->_recNameRover.empty()) {
    160211    _out << "+SITE/RECEIVER" << endl;
    161     _out << "*SITE      PT SOLN T DATA_START__ DATA_END____ DESCRIPTION_________ S/N__ FIRMWARE___" << endl;
    162     _out << " " << _opt->_roverName.substr(0,9) << "  A "  <<  sol.toStdString() << " P "
     212    _out << "*STATION__ PT SOLN T __DATA_START__ __DATA_END____ DESCRIPTION_________ S/N_________________ FIRMW______" << endl;
     213    _out << " " << _opt->_roverName.substr(0,9) << "  A "  <<  solId.toStdString() << " P "
    163214         << startTime.toStdString() << " " << endTime.toStdString()
    164215         << QString(" %1").arg(_opt->_recNameRover.c_str(), 20,QLatin1Char(' ')).toStdString()
    165216         << " -----" << " -----------" << endl;
    166     _out << "-SITE/RECEIVER" << endl << endl;
     217    _out << "-SITE/RECEIVER" << endl;
     218    _out << "*-------------------------------------------------------------------------------" << endl;
    167219  }
    168220
    169221  _out << "+SITE/ANTENNA" << endl;
    170   _out << "*SITE      PT SOLN T DATA_START__ DATA_END____ DESCRIPTION_________ S/N__" << endl;
    171   _out << " " << _opt->_roverName.substr(0,9) << "  A "  <<  sol.toStdString() << " P "
     222  _out << "*STATION__ PT SOLN T __DATA_START__ __DATA_END____ DESCRIPTION_________ S/N_________________ PCV_MODEL_" << endl;
     223  _out << " " << _opt->_roverName.substr(0,9) << "  A "  <<  solId.toStdString() << " P "
    172224       << startTime.toStdString() << " " << endTime.toStdString() << " "
    173225       << _opt->_antNameRover << " -----" << endl;
    174   _out << "-SITE/ANTENNA" << endl << endl;
     226  _out << "-SITE/ANTENNA" << endl;
     227  _out << "*-------------------------------------------------------------------------------" << endl;
    175228
    176229  if (!_opt->_antexFileName.empty()) {
     
    188241           }
    189242      _out << " ---------" << endl;
    190       _out << "-SITE/GPS_PHASE_CENTER" << endl << endl;
     243      _out << "-SITE/GPS_PHASE_CENTER" << endl;
     244      _out << "*-------------------------------------------------------------------------------" << endl;
    191245    }
    192246    if (_opt->_LCsGLONASS.size()) {
     
    202256           }
    203257      _out << " ---------" << endl;
    204       _out << "-SITE/GLONASS_PHASE_CENTER" << endl << endl;
     258      _out << "-SITE/GLONASS_PHASE_CENTER" << endl;
     259      _out << "*-------------------------------------------------------------------------------" << endl;
    205260    }
    206261    if (_opt->_LCsGalileo.size()) {
     
    216271           }
    217272      _out << " ---------" << endl;
    218       _out << "-SITE/GALILEO_PHASE_CENTER" << endl << endl;
     273      _out << "-SITE/GALILEO_PHASE_CENTER" << endl;
     274      _out << "*-------------------------------------------------------------------------------" << endl;
    219275    }
    220276    if (_opt->_LCsBDS.size()) {
     
    230286               }
    231287      _out << " ---------" << endl;
    232       _out << "-SITE/BEIDOU_PHASE_CENTER" << endl << endl;
     288      _out << "-SITE/BEIDOU_PHASE_CENTER" << endl;
     289      _out << "*-------------------------------------------------------------------------------" << endl;
    233290    }
    234291    delete _antex;
     
    236293  }
    237294
    238   _out << "+SITE/ECCENTRICITY" << endl;
    239   _out << "*                                             UP______ NORTH___ EAST____" << endl;
    240   _out << "*SITE      PT SOLN T DATA_START__ DATA_END____ AXE ARP->BENCHMARK(M)_________" << endl;
    241   _out << " " << _opt->_roverName.substr(0,9) << "  A "  <<  sol.toStdString() << " P "
    242        << startTime.toStdString() << " " << endTime.toStdString() << " UNE"
    243        << QString("%1").arg(_opt->_neuEccRover(3), 9, 'f', 4, QLatin1Char(' ')).toStdString()
    244        << QString("%1").arg(_opt->_neuEccRover(1), 9, 'f', 4, QLatin1Char(' ')).toStdString()
    245        << QString("%1").arg(_opt->_neuEccRover(2), 9, 'f', 4, QLatin1Char(' ')).toStdString() << endl;
    246   _out << "-SITE/ECCENTRICITY" << endl << endl;
    247 
    248   _out << "+TROP/COORDINATES" << endl;
    249   _out << "*SITE      PT SOLN T STA_X_______ STA_Y_______ STA_Z_______ SYSTEM REMARK" << endl;
    250   _out << " " << _opt->_roverName.substr(0,9) << "  A "  <<  sol.toStdString() << " P"
    251        << QString(" %1").arg(_opt->_xyzAprRover(1), 12, 'f', 3, QLatin1Char(' ')).toStdString()
    252        << QString(" %1").arg(_opt->_xyzAprRover(2), 12, 'f', 3, QLatin1Char(' ')).toStdString()
    253        << QString(" %1").arg(_opt->_xyzAprRover(3), 12, 'f', 3, QLatin1Char(' ')).toStdString()
    254        << " IGS20 " << ac.toStdString() << endl;
    255   _out << "-TROP/COORDINATES"<< endl << endl;
    256 
    257   QString blqFileName = QString::fromStdString(_opt->_blqFileName);
    258   QString blqFileBaseName;
    259   QString blqFileExtension;
    260   if (! blqFileName.isEmpty()) {
    261     QFileInfo fileInfo(blqFileName);
    262     blqFileBaseName  = fileInfo.baseName();
    263     blqFileExtension = fileInfo.completeSuffix();
    264     if (!blqFileExtension.isEmpty()) {
    265       blqFileExtension = "." + blqFileExtension;
    266     }
    267   }
    268   _out << "+TROP/DESCRIPTION" << endl;
    269   _out << "*KEYWORD______________________ VALUE(S)______________" << endl;
    270   _out << " SAMPLING INTERVAL                               "
    271        << setw(4) << _sampl << endl;
    272   _out << " SAMPLING TROP                                   "
    273        << setw(4) << _sampl << endl;
    274   _out << " ELEVATION CUTOFF ANGLE                          "
    275        << setw(4) <<  int(_opt->_minEle * 180.0/M_PI) << endl;
    276   _out << " OCEAN TIDE LOADING MODEL      " << blqFileBaseName.toStdString() + blqFileExtension.toStdString() << endl;
    277   _out << " TROP MAPPING FUNCTION         " << "Saastamoinen" << endl;
    278   _out << " SOLUTION_FIELDS_1             " << "TROTOT STDEV" << endl;
    279   _out << "-TROP/DESCRIPTION"<< endl << endl;
    280 
    281295  _out << "+TROP/SOLUTION" << endl;
    282   _out << "*SITE      EPOCH_______ TROTOT STDEV" << endl;
     296  _out << "*STATION__ ____EPOCH_____ TROTOT STDDEV " << endl;
    283297}
    284298
  • trunk/BNC/src/bncsp3.cpp

    r10123 r10127  
    7878      if (_lastEpoTime.valid() && _sampl > 0) {
    7979        for (bncTime ep = _lastEpoTime +_sampl; ep < epoTime; ep = ep +_sampl) {
    80           _out << "*  " << ep.datestr(' ') << ' ' << ep.timestr(8, ' ') << endl;
     80          _out << "\n*  " << ep.datestr(' ') << ' ' << ep.timestr(8, ' ');
    8181        }
    8282      }
     
    8484      // Print the new epoch
    8585      // -------------------
    86       _out << "*  " << epoTime.datestr(' ') << ' ' << epoTime.timestr(8, ' ') << endl;
     86      _out << "\n*  " << epoTime.datestr(' ') << ' ' << epoTime.timestr(8, ' ');
    8787
    8888      _lastEpoTime = epoTime;
    8989    }
    9090
    91     _out << "P" << prn.toLatin1().data()
     91    _out << "\nP" << prn.toLatin1().data()
    9292         << setw(14) << setprecision(6) << xCoM(1) / 1000.0 // [km]
    9393         << setw(14) << setprecision(6) << xCoM(2) / 1000.0 // [km]
    9494         << setw(14) << setprecision(6) << xCoM(3) / 1000.0 // [km]
    95          << setw(14) << setprecision(6) << sp3Clk * 1e6     // microseconds
    96          << endl;
     95         << setw(14) << setprecision(6) << sp3Clk * 1e6;     // microseconds
    9796
    9897    if (sp3ClkRate) {
    99       _out << "V" << prn.toLatin1().data()
     98      _out << "\nV" << prn.toLatin1().data()
    10099           << setw(14) << setprecision(6) << v(1) * 10.0      // [dm/s]
    101100           << setw(14) << setprecision(6) << v(2) * 10.0      // [dm/s]
    102101           << setw(14) << setprecision(6) << v(3) * 10.0      // [dm/s]
    103            << setw(14) << setprecision(6) << sp3ClkRate * 1e2 // 10^⁻4 microseconds/sec
    104            << endl;
     102           << setw(14) << setprecision(6) << sp3ClkRate * 1e2; // 10^⁻4 microseconds/sec
    105103    }
    106104    return success;
     
    212210    istringstream in(_lastLine.substr(1).c_str());
    213211    in >> sp3Sat->_prn >> sp3Sat->_xyz(1) >> sp3Sat->_xyz(2) >> sp3Sat->_xyz(3) >> sp3Sat->_clk;
    214 
    215     if (sp3Sat->_xyz.NormFrobenius() == 0.0) {
     212    sp3Sat->_xyz *= 1.e3;
     213
     214    // Simple Check - check satellite radial distance
     215    double rr = sp3Sat->_xyz.NormFrobenius();
     216    const double MINDIST = 2.e7;
     217    const double MAXDIST = 6.e7;
     218    if (rr < MINDIST || rr > MAXDIST || std::isnan(rr)) {
    216219      delete sp3Sat;
    217220      continue;
    218221    }
    219222
    220     sp3Sat->_xyz *= 1.e3;
     223    // Simple Check - clock valid
    221224    if (sp3Sat->_clk == 999999.999999) {
    222225      sp3Sat->_clkValid = false;
  • trunk/BNC/src/bncwindow.cpp

    r10102 r10127  
    983983  _pppWidgets._logPath->setMaximumWidth(35*ww);
    984984  _pppWidgets._snxtroPath->setMaximumWidth(35*ww);
    985   _pppWidgets._snxtroIntr->setMaximumWidth(10*ww);
    986   _pppWidgets._snxtroAc  ->setMaximumWidth(10*ww);
    987   _pppWidgets._snxtroSol ->setMaximumWidth(7*ww);
    988   _pppWidgets._ionoMount->setMaximumWidth(15*ww);
     985  _pppWidgets._snxtroIntr->setMaximumWidth(7*ww);
     986  _pppWidgets._snxtroAc->setMaximumWidth(7*ww);
     987  _pppWidgets._snxtroSolId->setMaximumWidth(7*ww);
     988  _pppWidgets._snxtroSolType->setMaximumWidth(7*ww);
     989  _pppWidgets._snxtroCampId->setMaximumWidth(7*ww);
     990    _pppWidgets._ionoMount->setMaximumWidth(15*ww);
    989991
    990992
     
    10291031  pppLayout1->addWidget(new QLabel("   SNX TRO AC"),         ir, 4);
    10301032  pppLayout1->addWidget(_pppWidgets._snxtroAc,               ir, 5);
    1031   pppLayout1->addWidget(new QLabel("   SNX TRO solution"),   ir, 6);
    1032   pppLayout1->addWidget(_pppWidgets._snxtroSol            ir, 7, Qt::AlignRight);
     1033  pppLayout1->addWidget(new QLabel("   SNX TRO solution ID"),ir, 6);
     1034  pppLayout1->addWidget(_pppWidgets._snxtroSolId,            ir, 7, Qt::AlignRight);
    10331035  ++ir;
    10341036#ifdef USE_PPP
    1035   pppLayout1->addWidget(new QLabel("BLQ file"),              ir, 0);
    1036   pppLayout1->addWidget(_pppWidgets._blqFile,                ir, 1);
     1037  pppLayout1->addWidget(new QLabel("BLQ file"),               ir, 0);
     1038  pppLayout1->addWidget(_pppWidgets._blqFile,                 ir, 1);
     1039  pppLayout1->addWidget(new QLabel("   SNX TRO campaign ID"), ir, 4);
     1040  pppLayout1->addWidget(_pppWidgets._snxtroCampId,            ir, 5);
     1041  pppLayout1->addWidget(new QLabel("   SNX TRO solution type"),ir, 6);
     1042  pppLayout1->addWidget(_pppWidgets._snxtroSolType,            ir, 7, Qt::AlignRight);
     1043
    10371044#endif
    10381045  pppLayout1->setRowStretch(ir+1, 999);
     
    14921499  _pppWidgets._snxtroSampl->setWhatsThis(tr("<p>Select a 'Sampling' rate for saving troposphere parameters. <i>[key: PPP/snxtroSampl]</i></p>"));
    14931500  _pppWidgets._snxtroAc->setWhatsThis(tr("<p>Specify a 3-character abbreviation describing you as the generating Analysis Center (AC) in your SINEX troposphere files. <i>[key: PPP/snxtroAc]</i></p>"));
    1494   _pppWidgets._snxtroSol->setWhatsThis(tr("<p>Specify a 1-character solution ID to allow a distinction between different solutions per AC. <i>[key: PPP/snxtroSol]</i></p>"));
    1495 
     1501  _pppWidgets._snxtroSolId->setWhatsThis(tr("<p>Specify a 1-character solution ID to allow a distinction between different solutions per AC. <i>[key: PPP/snxtroSolId]</i></p>"));
     1502  _pppWidgets._snxtroSolType->setWhatsThis(tr("<p>Specify a 3-character solution type, e.g. real-time (RTS), unknown (UNK), .. <i>[key: PPP/snxtroSolType]</i></p>"));
     1503  _pppWidgets._snxtroCampId->setWhatsThis(tr("<p>Specify a 3-character campaign ID, e.g. operational (OPS), demonstration (DEM), testing (TST), .. <i>[key: PPP/snxtroCampId]</i></p>"));
    14961504
    14971505  // WhatsThis, PPP (3)
  • trunk/BNC/src/orbComp/sp3Comp.cpp

    r10125 r10127  
    225225    for (map<t_prn, double>::iterator it = dc.begin(); it != dc.end(); it++) {
    226226      const t_prn& prn = it->first;
    227       std::string sys; sys.assign(1, prn.system());
     227      stringstream all; all << prn.system() << 99;
    228228      if (satIndex(clkSats, prn) != -1) {
    229229        int  index = epochs.size() + satIndex(clkSats, prn);
     
    233233          dcRed[prn] = dc[prn] - dr.find(prn)->second[0]; // clock minus radial component
    234234          stat[prn.toString()]._dcRedMean += dcRed[prn];
    235           stat[sys           ]._dcRedMean += dcRed[prn];
     235          stat[all.str()     ]._dcRedMean += dcRed[prn];
    236236          stat[prn.toString()]._nc        += 1;
    237           stat[sys           ]._nc        += 1;
     237          stat[all.str()     ]._nc        += 1;
    238238        }
    239239      }
     
    380380    for (map<t_prn, ColumnVector>::const_iterator it = dr.begin(); it != dr.end(); it++) {
    381381      const t_prn&  prn = it->first;
    382       std::string sys; sys.assign(1, prn.system());
     382      stringstream all; all << prn.system() << 99;
    383383      if (!excludeSat(prn)) {
    384384        const ColumnVector& rao = it->second;
     
    390390        }
    391391        stat[prn.toString()]._rao += SP(rao, rao); // Schur product
    392         stat[sys           ]._rao += SP(rao, rao);
     392        stat[all.str()     ]._rao += SP(rao, rao);
    393393        stat[prn.toString()]._nr  += 1;
    394         stat[sys           ]._nr  += 1;
     394        stat[all.str()     ]._nr  += 1;
    395395        if (dc.find(prn) != dc.end() && dcRed.find(prn) != dc.end()) {
    396396          double clkRes    = dc.find(prn)->second;
     
    401401          }
    402402          stat[prn.toString()]._dcRMS     += clkRes * clkRes;
    403           stat[sys           ]._dcRMS     += clkRes * clkRes;
     403          stat[all.str()     ]._dcRMS     += clkRes * clkRes;
    404404          stat[prn.toString()]._dcRedRMS  += clkResRed * clkResRed;
    405           stat[sys           ]._dcRedRMS  += clkResRed * clkResRed;
     405          stat[all.str()     ]._dcRedRMS  += clkResRed * clkResRed;
    406406          stat[prn.toString()]._dcRedSig  += (clkResRed - stat[prn.toString()]._dcRedMean) *
    407407                                             (clkResRed - stat[prn.toString()]._dcRedMean);
    408           stat[sys           ]._dcRedSig  += (clkResRed - stat[sys           ]._dcRedMean) *
    409                                              (clkResRed - stat[sys           ]._dcRedMean);
     408          stat[all.str()     ]._dcRedSig  += (clkResRed - stat[all.str()     ]._dcRedMean) *
     409                                             (clkResRed - stat[all.str()     ]._dcRedMean);
    410410        }
    411411        else {
     
    432432    const string& prn  = it->first;
    433433    t_stat&       stat = it->second;
    434     std::string sys; sys.assign(1, prn[0]);
     434    stringstream all; all << prn[0] << 99;
    435435    if (stat._nr > 0) {
    436436      stat._rao[0] = sqrt(stat._rao[0] / stat._nr);
     
    438438      stat._rao[2] = sqrt(stat._rao[2] / stat._nr);
    439439      stat._rao3DRMS = stat._rao.NormFrobenius();
    440       if (prn != sys) {
    441         (_summaryOnly) ? out << "     " << prn << ' ' :
     440      // orbit values in millimeter
     441      if (prn != all.str()) {
     442        (_summaryOnly) ? out << "     "  << prn << ' ':
    442443                         out << "!     " << prn << ' ';
    443444      }
    444       // orbit values in millimeters
    445       if (prn != sys) {
    446         out << setw(10) << setprecision(1) << stat._rao[0]   * 1e3 << ' '
    447             << setw(10) << setprecision(1) << stat._rao[1]   * 1e3 << ' '
    448             << setw(10) << setprecision(1) << stat._rao[2]   * 1e3 << ' '
    449             << setw(10) << setprecision(1) << stat._rao3DRMS * 1e3 << ' '
    450             << setw( 7) << stat._nr << " ";
    451       }
     445      else {
     446        (_summaryOnly) ? out << "     "   << QString("%1  ").arg(all.str()[0]).toStdString() << " ":
     447                         out << "!     "  << QString("%1  ").arg(all.str()[0]).toStdString() << " ";
     448      }
     449      out << setw(10) << setprecision(1) << stat._rao[0]   * 1e3 << ' '
     450          << setw(10) << setprecision(1) << stat._rao[1]   * 1e3 << ' '
     451          << setw(10) << setprecision(1) << stat._rao[2]   * 1e3 << ' '
     452          << setw(10) << setprecision(1) << stat._rao3DRMS * 1e3 << ' '
     453          << setw( 7) << stat._nr << " ";
     454      // clock values in nano seconds
    452455      if (stat._nc > 0) {
    453456        stat._dcRMS    = sqrt(stat._dcRMS    / stat._nc);
    454457        stat._dcRedRMS = sqrt(stat._dcRedRMS / stat._nc);
    455458        stat._dcRedSig = sqrt(stat._dcRedSig / stat._nc);
    456         // clock values in nano seconds
    457         if (prn != sys) {
    458           out << setw(10) << setprecision(2) << stat._dcRMS    / t_CST::c * 1e9 << ' '
    459               << setw(10) << setprecision(2) << stat._dcRedRMS / t_CST::c * 1e9 << ' '
    460               << setw(10) << setprecision(2) << stat._dcRedSig / t_CST::c * 1e9 << ' '
    461               << setw( 9) << stat._nc << " "
    462               << setw( 9) << setprecision(2) << stat._offset / t_CST::c * 1e9;
    463         }
    464       }
    465       else {
    466         if  (prn != sys) {
    467 //          out << "  .       .    ";
    468         }
    469       }
    470       if (prn != sys) {
    471         out << "\n";
    472       }
    473     }
    474   }
    475   // Print Total
    476   // ------------
    477   out << "!\n! Mean";
    478   out << "\n! -----------------------------------------------------------------------------------------------------------------\n";
    479   out << "!\n!    GNSS   radialRMS   alongRMS    outRMS     3DRMS      nOrb    clkRMS    clkRedRMS   clkRedSig   nClk "
    480           "\n!              [mm]       [mm]        [mm]      [mm]      [-]      [ns]        [ns]        [ns]      [-] "
    481           "\n! -----------------------------------------------------------------------------------------------------------------";
    482   for (map<string, t_stat>::iterator it = stat.begin(); it != stat.end(); it++) {
    483     const string& prn  = it->first;
    484     t_stat&       stat = it->second;
    485     std::string sys; sys.assign(1, prn[0]);
    486     if (stat._nr > 0) {
    487       if (prn == sys) {
    488         (_summaryOnly) ? out << "\n       "   << sys << " " :
    489                          out << "\n!       "  << sys << " ";
    490       }
    491       // orbit values in millimeters
    492       if (prn == sys) {
    493         out << setw(10) << setprecision(1) << stat._rao[0]   * 1e3 << ' '
    494             << setw(10) << setprecision(1) << stat._rao[1]   * 1e3 << ' '
    495             << setw(10) << setprecision(1) << stat._rao[2]   * 1e3 << ' '
    496             << setw(10) << setprecision(1) << stat._rao3DRMS * 1e3 << ' '
    497             << setw( 7) << stat._nr << " ";
    498       }
    499       if (stat._nc > 0) {
    500         // clock values in nano seconds
    501         if (prn == sys) {
    502           out << setw(10) << setprecision(2) << stat._dcRMS    / t_CST::c * 1e9 << ' '
    503               << setw(10) << setprecision(2) << stat._dcRedRMS / t_CST::c * 1e9 << ' '
    504               << setw(10) << setprecision(2) << stat._dcRedSig / t_CST::c * 1e9 << ' '
    505               << setw( 9) << stat._nc << " ";
    506         }
    507       }
    508       else {
    509         if (prn == sys) {
    510 //          out << "  .       .    ";
    511         }
    512       }
     459        out << setw(10) << setprecision(2) << stat._dcRMS    / t_CST::c * 1e9 << ' '
     460            << setw(10) << setprecision(2) << stat._dcRedRMS / t_CST::c * 1e9 << ' '
     461            << setw(10) << setprecision(2) << stat._dcRedSig / t_CST::c * 1e9 << ' '
     462            << setw( 9) << stat._nc << " ";
     463        if (prn != all.str()) {
     464          out << setw( 9) << setprecision(2) << stat._offset / t_CST::c * 1e9;
     465        }
     466      }
     467      out << "\n";
    513468    }
    514469  }
  • trunk/BNC/src/pppWidgets.cpp

    r10062 r10127  
    7777  _snxtroIntr   = new QComboBox();     _snxtroIntr  ->setObjectName("PPP/snxtroIntr");   _widgets << _snxtroIntr;
    7878  _snxtroAc     = new QLineEdit();     _snxtroAc    ->setObjectName("PPP/snxtroAc");     _widgets << _snxtroAc;
    79   _snxtroSol    = new QLineEdit();     _snxtroSol   ->setObjectName("PPP/snxtroSol");    _widgets << _snxtroSol;
     79  _snxtroSolId  = new QLineEdit();     _snxtroSolId ->setObjectName("PPP/snxtroSolId");  _widgets << _snxtroSolId;
     80  _snxtroSolType= new QLineEdit();     _snxtroSolType->setObjectName("PPP/snxtroSolType");_widgets << _snxtroSolType;
     81  _snxtroCampId = new QLineEdit();     _snxtroCampId ->setObjectName("PPP/snxtroCampId");  _widgets << _snxtroCampId;
    8082  _staTable     = new QTableWidget();  _staTable    ->setObjectName("PPP/staTable");     _widgets << _staTable;
    8183  _lcGPS        = new QComboBox();     _lcGPS       ->setObjectName("PPP/lcGPS");        _widgets << _lcGPS;
     
    118120  connect(_snxtroPath, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged()));
    119121  connect(_snxtroAc, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged()));
    120   connect(_snxtroSol, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged()));
     122  connect(_snxtroSolId, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged()));
     123  connect(_snxtroSolType, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged()));
     124  connect(_snxtroCampId, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged()));
    121125
    122126  slotEnableWidgets();
     
    247251  delete _snxtroIntr;
    248252  delete _snxtroAc;
    249   delete _snxtroSol;
     253  delete _snxtroSolId;
     254  delete _snxtroSolType;
     255  delete _snxtroCampId;
    250256  for (int iRow = _staTable->rowCount()-1; iRow >=0; iRow--) {
    251257    _staTable->removeRow(iRow);
     
    333339  // LineEdits
    334340  // ---------
    335   _corrMount  ->setText(settings.value(_corrMount  ->objectName()).toString());
    336   _ionoMount  ->setText(settings.value(_ionoMount  ->objectName()).toString());
    337   _logPath    ->setText(settings.value(_logPath    ->objectName()).toString());
    338   _nmeaPath   ->setText(settings.value(_nmeaPath   ->objectName()).toString());
    339   _snxtroPath ->setText(settings.value(_snxtroPath ->objectName()).toString());
    340   _snxtroAc   ->setText(settings.value(_snxtroAc   ->objectName()).toString());
    341   _snxtroSol  ->setText(settings.value(_snxtroSol  ->objectName()).toString());
     341  _corrMount    ->setText(settings.value(_corrMount     ->objectName()).toString());
     342  _ionoMount    ->setText(settings.value(_ionoMount     ->objectName()).toString());
     343  _logPath      ->setText(settings.value(_logPath       ->objectName()).toString());
     344  _nmeaPath     ->setText(settings.value(_nmeaPath      ->objectName()).toString());
     345  _snxtroPath   ->setText(settings.value(_snxtroPath    ->objectName()).toString());
     346  _snxtroAc     ->setText(settings.value(_snxtroAc      ->objectName()).toString());
     347  _snxtroSolId  ->setText(settings.value(_snxtroSolId   ->objectName()).toString());
     348  _snxtroSolType->setText(settings.value(_snxtroSolType ->objectName()).toString());
     349  _snxtroCampId ->setText(settings.value(_snxtroCampId  ->objectName()).toString());
    342350
    343351  if (!settings.value(_sigmaC1->objectName()).toString().isEmpty()) {
     
    462470  settings.setValue(_snxtroIntr  ->objectName(), _snxtroIntr  ->currentText());
    463471  settings.setValue(_snxtroAc    ->objectName(), _snxtroAc    ->text());
    464   settings.setValue(_snxtroSol   ->objectName(), _snxtroSol   ->text());
     472  settings.setValue(_snxtroSolId  ->objectName(), _snxtroSolId   ->text());
     473  settings.setValue(_snxtroSolType->objectName(), _snxtroSolType ->text());
     474  settings.setValue(_snxtroCampId ->objectName(), _snxtroCampId  ->text());
    465475  settings.setValue(_lcGPS       ->objectName(), _lcGPS       ->currentText());
    466476  settings.setValue(_lcGLONASS   ->objectName(), _lcGLONASS   ->currentText());
     
    545555    _snxtroIntr ->setEnabled(true);
    546556    _snxtroAc   ->setEnabled(true);
    547     _snxtroSol  ->setEnabled(true);
     557    _snxtroSolId  ->setEnabled(true);
     558    _snxtroSolType ->setEnabled(true);
     559    _snxtroCampId  ->setEnabled(true);
    548560  }
    549561  else {
     
    551563    _snxtroIntr ->setEnabled(false);
    552564    _snxtroAc   ->setEnabled(false);
    553     _snxtroSol  ->setEnabled(false);
     565    _snxtroSolId  ->setEnabled(false);
     566    _snxtroSolType ->setEnabled(false);
     567    _snxtroCampId  ->setEnabled(false);
    554568  }
    555569
     
    639653      _snxtroIntr ->setEnabled(true);
    640654      _snxtroAc   ->setEnabled(true);
    641       _snxtroSol  ->setEnabled(true);
     655      _snxtroSolId  ->setEnabled(true);
     656      _snxtroSolType ->setEnabled(true);
     657      _snxtroCampId  ->setEnabled(true);
    642658      _snxtroSampl->setPalette(paletteWhite);
    643659      _snxtroIntr ->setPalette(paletteWhite);
    644660      _snxtroAc   ->setPalette(paletteWhite);
    645       _snxtroSol  ->setPalette(paletteWhite);
     661      _snxtroSolId  ->setPalette(paletteWhite);
     662      _snxtroSolType ->setPalette(paletteWhite);
     663      _snxtroCampId  ->setPalette(paletteWhite);
    646664    }
    647665    else {
     
    649667    _snxtroIntr ->setEnabled(false);
    650668    _snxtroAc   ->setEnabled(false);
    651     _snxtroSol  ->setEnabled(false);
     669    _snxtroSolId  ->setEnabled(false);
     670    _snxtroSolType ->setEnabled(false);
     671    _snxtroCampId  ->setEnabled(false);
    652672    _snxtroSampl->setPalette(paletteGray);
    653673    _snxtroIntr ->setPalette(paletteGray);
    654674    _snxtroAc   ->setPalette(paletteGray);
    655     _snxtroSol  ->setPalette(paletteGray);
    656     }
    657   }
    658 
    659 
    660 }
     675    _snxtroSolId  ->setPalette(paletteGray);
     676    _snxtroSolType ->setPalette(paletteGray);
     677    _snxtroCampId  ->setPalette(paletteGray);
     678    }
     679  }
     680
     681
     682}
  • trunk/BNC/src/pppWidgets.h

    r9783 r10127  
    6161  QComboBox*     _snxtroIntr;
    6262  QLineEdit*     _snxtroAc;
    63   QLineEdit*     _snxtroSol;
     63  QLineEdit*     _snxtroSolId;
     64  QLineEdit*     _snxtroSolType;
     65  QLineEdit*     _snxtroCampId;
    6466  QTableWidget*  _staTable;
    6567  QComboBox*     _lcGPS;
  • trunk/BNC/src/rinex/rnxnavfile.h

    r9945 r10127  
    3838#define defaultRnxNavVersion2 2.11
    3939#define defaultRnxNavVersion3 3.05
    40 #define defaultRnxNavVersion4 4.00
     40#define defaultRnxNavVersion4 4.01
    4141
    4242class t_rnxNavFile {
  • trunk/BNC/src/rinex/rnxobsfile.h

    r10085 r10127  
    4040#define defaultRnxObsVersion2 2.11
    4141#define defaultRnxObsVersion3 3.05
    42 #define defaultRnxObsVersion4 4.00
     42#define defaultRnxObsVersion4 4.01
    4343
    4444class t_rnxObsHeader {
  • trunk/BNC/src/src.pro

    r10100 r10127  
    22TARGET = ../bnc
    33
    4 CONFIG -= debug
    5 CONFIG += release
     4CONFIG += debug
     5CONFIG -= release
    66
    77include(src.pri)
Note: See TracChangeset for help on using the changeset viewer.