Changeset 9783 in ntrip for trunk/BNC/src


Ignore:
Timestamp:
Jun 27, 2022, 5:09:40 PM (2 years ago)
Author:
stuerze
Message:

some changes regarding PPP

Location:
trunk/BNC/src
Files:
9 edited

Legend:

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

    r9607 r9783  
    304304    }
    305305    if (iObs + 1 < _opt->_minObs) {
    306       LOG << "t_pppClient::cmpBancroft not enough observations: " << iObs + 1  << endl;
     306      LOG << "t_pppClient::cmpBancroft not enough observations: " << iObs + 1;
    307307      return failure;
    308308    }
     
    335335      if (print && _numEpoProcessing == 1) {
    336336        LOG.setf(ios::fixed);
     337        LOG << "\nPPP of Epoch ";
     338        if (!_epoTimeRover.undef()) LOG << string(_epoTimeRover);
     339        LOG << "\n---------------------------------------------------------------\n";
    337340        LOG << string(epoTime) << " BANCROFT:"        << ' '
    338341            << setw(14) << setprecision(3) << xyzc[0] << ' '
     
    376379//////////////////////////////////////////////////////////////////////////////
    377380void t_pppClient::finish(t_irc irc, int ind) {
    378 
     381#ifdef BNC_DEBUG_PPP
    379382  LOG << "t_pppClient::finish(" << ind << "): " << irc << endl;
     383#endif
    380384
    381385  clearObs();
     
    495499      }
    496500
    497       if (_numEpoProcessing == 1) {
    498         LOG << "\nPPP of Epoch ";
    499         if (!_epoTimeRover.undef()) LOG << string(_epoTimeRover);
    500         LOG << "\n---------------------------------------------------------------\n";
    501       }
    502 
    503501      for (int iter = 1; iter <= 2; iter++) {
    504502        ColumnVector xyzc(4); xyzc = 0.0;
     
    507505          return finish(failure,3);
    508506        }
     507
    509508        if (cmpModel(_staRover, xyzc, _obsRover) != success) {
    510509          return finish(failure,4);
     
    525524      // use observations only if satellite code biases are available
    526525      // ------------------------------------------------------------
    527       if (!_opt->_corrMount.empty()&&
     526      if (!_opt->_corrMount.empty() &&
    528527          (OPT->_obsModelType == OPT->DCMcodeBias ||
    529528           OPT->_obsModelType == OPT->DCMphaseBias)) {
  • trunk/BNC/src/bncmain.cpp

    r9780 r9783  
    148148      "   reqcOldAntennaNumber  {Old antenna number [character string]}\n"
    149149      "   reqcNewAntennaNumber  {New antenna number [character string]}\n"
    150       "   reqcOldAntennadN      {Old north eccentritity [character string]}\n"
     150      "   reqcOldAntennadN      {Old north eccentricity [character string]}\n"
    151151      "   reqcNewAntennadN      {New north eccentricity [character string]}\n"
    152152      "   reqcOldAntennadE      {Old east eccentricity [character string]}\n"
     
    207207      "   PPP/corrMount   {Corrections mountpoint [character string]}\n"
    208208      "   PPP/corrFile    {Corrections file, full path [character string]}\n"
    209       "   PPP/v2filenames {Produce version 2 filenames, 0=no,2=yes}\n"
    210209      "   PPP/crdFile     {Coordinates file, full path [character string]}\n"
    211210      "   PPP/logPath     {Directory for PPP log files [character string]}\n"
    212211      "   PPP/antexFile   {ANTEX file, full path [character string]}\n"
    213212#ifdef USE_PPP
    214       "   PPP/blqFile   {ANTEX file, full path [character string]}\n"
     213      "   PPP/blqFile     {BLQ file, full path [character string]}\n"
     214      "   PPP/ionoMount   {VTEC mountpoint, [char string]}\n"
     215      "   PPP/ionoFile    {VTEC file, full path [char string]}\n"
    215216#endif
    216217      "   PPP/nmeaPath    {Directory for NMEA output files [character string]}\n"
  • trunk/BNC/src/bncoutf.cpp

    r9655 r9783  
    4848
    4949  _append = Qt::CheckState(settings.value("rnxAppend").toInt()) == Qt::Checked;
    50   _v2filenames = settings.value("PPP/v2filenames").toBool();
    5150}
    5251
     
    8483  if ( indHlp != -1) {
    8584    int step = intStr.left(indHlp-1).toInt();
    86     if (!_v2filenames) {
    87       epoStr +=  QString("%1").arg(datTim.time().hour(), 2, 10, QChar('0')); // H
    88     } else {
    89       epoStr +=  'A' + datTim.time().hour();
    90     }
     85    epoStr +=  QString("%1").arg(datTim.time().hour(), 2, 10, QChar('0')); // H
    9186
    9287    if (datTim.time().minute() >= 60-step) {
     
    10196      }
    10297    }
    103 
    104     if (!_v2filenames) {
    105       epoStr += QString("_%1M").arg(step, 2, 10, QChar('0'));                // period
    106     }
     98    epoStr += QString("_%1M").arg(step, 2, 10, QChar('0'));                // period
    10799
    108100    _numSec = 60 * step;
     
    110102  else if (intStr == "1 hour") {
    111103    int step = intStr.left(indHlp-1).toInt();
    112     if (!_v2filenames) {
    113       epoStr += QString("%1").arg(datTim.time().hour(), 2, 10, QChar('0'));  // H
    114       epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                     // M
    115       epoStr += QString("_%1H").arg(step+1, 2, 10, QChar('0'));              // period
    116     } else {
    117       epoStr +=  'A' + datTim.time().hour();
    118     }
     104    epoStr += QString("%1").arg(datTim.time().hour(), 2, 10, QChar('0'));  // H
     105    epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                     // M
     106    epoStr += QString("_%1H").arg(step+1, 2, 10, QChar('0'));              // period
    119107    _numSec = 3600;
    120108  }
    121109  else {
    122110    int step = intStr.left(indHlp-1).toInt();
    123     if (!_v2filenames) {
    124       epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                    // H
    125       epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                    // M
    126       epoStr += QString("_%1D").arg(step+1, 2, 10, QChar('0'));             // period
    127     }
     111    epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                    // H
     112    epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                    // M
     113    epoStr += QString("_%1D").arg(step+1, 2, 10, QChar('0'));             // period
    128114    _numSec = 86400;
    129115  }
    130116
    131   if (!_v2filenames) {
    132     if (sampl < 60) {
    133       epoStr += QString("_%1S").arg(sampl, 2, 10, QChar('0'));
    134     }
    135     else {
    136       sampl /= 60;
    137       epoStr += QString("_%1M").arg(sampl, 2, 10, QChar('0'));
    138     }
     117
     118  if (sampl < 60) {
     119    epoStr += QString("_%1S").arg(sampl, 2, 10, QChar('0'));
     120  }
     121  else {
     122    sampl /= 60;
     123    epoStr += QString("_%1M").arg(sampl, 2, 10, QChar('0'));
    139124  }
    140125
  • trunk/BNC/src/bncoutf.h

    r9652 r9783  
    3535  QString _fName;
    3636  bool    _append;
    37   bool    _v2filenames;
    3837};
    3938
  • trunk/BNC/src/bncwindow.cpp

    r9760 r9783  
    992992  pppLayout1->addWidget(new QLabel("Data source"),           ir, 0);
    993993  pppLayout1->addWidget(_pppWidgets._dataSource,             ir, 1);
    994   pppLayout1->addWidget(new QLabel("   Version 2 filenames"),ir, 4);
    995   pppLayout1->addWidget(_pppWidgets._v2filenames,            ir, 5, 1, 3);
     994  pppLayout1->addWidget(new QLabel("   Logfile directory"),  ir, 4);
     995  pppLayout1->addWidget(_pppWidgets._logPath,                ir, 5, 1, 3);
    996996  ++ir;
    997997  pppLayout1->addWidget(new QLabel("Corrections stream"),    ir, 0);
     
    999999  pppLayout1->addWidget(new QLabel("Corrections file"),      ir, 2);
    10001000  pppLayout1->addWidget(_pppWidgets._corrFile,               ir, 3);
    1001   pppLayout1->addWidget(new QLabel("   Logfile directory"),  ir, 4);
    1002   pppLayout1->addWidget(_pppWidgets._logPath,                ir, 5, 1, 3);
     1001  pppLayout1->addWidget(new QLabel("   NMEA directory"),     ir, 4);
     1002  pppLayout1->addWidget(_pppWidgets._nmeaPath,               ir, 5, 1, 3);
     1003  ++ir;
     1004#ifdef USE_PPP
     1005  pppLayout1->addWidget(new QLabel("Ionosphere stream"),     ir, 0);
     1006  pppLayout1->addWidget(_pppWidgets._ionoMount,              ir, 1);
     1007  pppLayout1->addWidget(new QLabel("Ionosphere file"),       ir, 2);
     1008  pppLayout1->addWidget(_pppWidgets._ionoFile,               ir, 3);
     1009#endif
     1010  pppLayout1->addWidget(new QLabel("   SNX TRO directory"),  ir, 4);
     1011  pppLayout1->addWidget(_pppWidgets._snxtroPath,             ir, 5, 1, 3);
    10031012  ++ir;
    10041013  pppLayout1->addWidget(new QLabel("RINEX Obs file"),        ir, 0);
     
    10061015  pppLayout1->addWidget(new QLabel("RINEX Nav file"),        ir, 2);
    10071016  pppLayout1->addWidget(_pppWidgets._rinexNav,               ir, 3);
    1008   pppLayout1->addWidget(new QLabel("   NMEA directory"),     ir, 4);
    1009   pppLayout1->addWidget(_pppWidgets._nmeaPath,               ir, 5, 1, 3);
     1017  pppLayout1->addWidget(new QLabel("   SNX TRO interval"),   ir, 4);
     1018  pppLayout1->addWidget(_pppWidgets._snxtroIntr,             ir, 5);
     1019  pppLayout1->addWidget(new QLabel("   SNX TRO sampling"),   ir, 6);
     1020  pppLayout1->addWidget(_pppWidgets._snxtroSampl,            ir, 7, Qt::AlignRight);
    10101021  ++ir;
    1011   pppLayout1->addWidget(new QLabel("Coordinates file"),      ir, 0);
    1012   pppLayout1->addWidget(_pppWidgets._crdFile,                ir, 1);
    1013   pppLayout1->addWidget(new QLabel("ANTEX file"),            ir, 2);
    1014   pppLayout1->addWidget(_pppWidgets._antexFile,              ir, 3);
    1015   pppLayout1->addWidget(new QLabel("   SNX TRO directory"),  ir, 4);
    1016   pppLayout1->addWidget(_pppWidgets._snxtroPath,             ir, 5, 1, 3);
     1022  pppLayout1->addWidget(new QLabel("ANTEX file"),            ir, 0);
     1023  pppLayout1->addWidget(_pppWidgets._antexFile,              ir, 1);
     1024  pppLayout1->addWidget(new QLabel("Coordinates file"),      ir, 2);
     1025  pppLayout1->addWidget(_pppWidgets._crdFile,                ir, 3);
     1026  pppLayout1->addWidget(new QLabel("   SNX TRO AC"),         ir, 4);
     1027  pppLayout1->addWidget(_pppWidgets._snxtroAc,               ir, 5);
     1028  pppLayout1->addWidget(new QLabel("   SNX TRO solution"),   ir, 6);
     1029  pppLayout1->addWidget(_pppWidgets._snxtroSol,              ir, 7, Qt::AlignRight);
    10171030  ++ir;
    10181031#ifdef USE_PPP
     
    10201033  pppLayout1->addWidget(_pppWidgets._blqFile,                ir, 1);
    10211034#endif
    1022   pppLayout1->addWidget(new QLabel("   SNX TRO interval"),   ir, 4);
    1023   pppLayout1->addWidget(_pppWidgets._snxtroIntr,             ir, 5);
    1024   pppLayout1->addWidget(new QLabel("   SNX TRO sampling"),   ir, 6);
    1025   pppLayout1->addWidget(_pppWidgets._snxtroSampl,            ir, 7, Qt::AlignRight);
    1026   ++ir;
    1027   pppLayout1->addWidget(new QLabel("Ionosphere stream"),     ir, 0);
    1028   pppLayout1->addWidget(_pppWidgets._ionoMount,              ir, 1);
    1029   pppLayout1->addWidget(new QLabel("Ionosphere file"),       ir, 2);
    1030   pppLayout1->addWidget(_pppWidgets._ionoFile,               ir, 3);
    1031   pppLayout1->addWidget(new QLabel("   SNX TRO AC"),         ir, 4);
    1032   pppLayout1->addWidget(_pppWidgets._snxtroAc,               ir, 5);
    1033   pppLayout1->addWidget(new QLabel("   SNX TRO solution"),   ir, 6);
    1034   pppLayout1->addWidget(_pppWidgets._snxtroSol,              ir, 7, Qt::AlignRight);
    10351035  pppLayout1->setRowStretch(ir+1, 999);
    10361036  pppGroup1->setLayout(pppLayout1);
     
    10801080  pppLayout3->addWidget(_pppWidgets._minObs,                ir, 4);
    10811081  pppLayout3->addWidget(new QLabel("Min Elevation"),        ir, 6, Qt::AlignLeft);
    1082   pppLayout3->addWidget(_pppWidgets._minEle,                ir, 7);
     1082  pppLayout3->addWidget(_pppWidgets._minEle,                ir, 7);_pppWidgets._minEle->setMaximumWidth(8*ww);
    10831083  ++ir;
    10841084  pppLayout3->addWidget(new QLabel("Model Obs"),            ir, 0, Qt::AlignLeft);
     
    10871087  pppLayout3->addWidget(_pppWidgets._corrWaitTime,          ir, 4);
    10881088  pppLayout3->addWidget(new QLabel("Seeding (sec)"),        ir, 6, Qt::AlignLeft);
    1089   pppLayout3->addWidget(_pppWidgets._seedingTime,           ir, 7);
     1089  pppLayout3->addWidget(_pppWidgets._seedingTime,           ir, 7);_pppWidgets._seedingTime->setMaximumWidth(8*ww);
    10901090  ++ir;
    10911091  pppLayout3->addWidget(new QLabel("Pseudo Obs"),           ir, 0, Qt::AlignLeft);
     
    14641464  // WhatsThis, PPP (1)
    14651465  // ------------------
    1466   _pppWidgets._dataSource->setWhatsThis(tr("<p>Select 'Real-time Streams' for real-time PPP from RTCM streams or 'RINEX Files' for post processing PPP from RINEX files.</p><p><ul><li>Real-time PPP requires that you pull a RTCM stream carrying GNSS observations plus a stream providing corrections to Broadcast Ephemeris. If the observations stream does not contain Broadcast Ephemeris then you must in addition pull a Broadcast Ephemeris stream like 'RTCM3EPH' from Ntrip Broadcaster <u>products.igs-ip.net</u>.<br></li><li>Post processing PPP requires RINEX Observation files, RINEX Navigation files and a file with corrections to Broadcast Ephemeris in plain ASCII format as saved beforehand using BNC.</li></ul></p><p>Note that BNC allows to carry out PPP solutions simultaneously for several stations.</p>"));
    1467   _pppWidgets._rinexObs->setWhatsThis(tr("<p>Specify the RINEX Observation file.</p>"));
    1468   _pppWidgets._rinexNav->setWhatsThis(tr("<p>Specify the RINEX Navigation file.</p>"));
    1469   _pppWidgets._corrMount->setWhatsThis(tr("<p>Specify a 'mountpoint' from the 'Streams' canvas below which provides corrections to Broadcast Ephemeris.</p><p>If you don't specify a corrections stream via this option, BNC will fall back to Single Point Positioning (SPP, positioning from observations and Broadcast Ephemeris only) instead of doing PPP.</p>"));
    1470   _pppWidgets._corrFile->setWhatsThis(tr("<p>Specify the Broadcast Ephemeris Corrections file as saved beforehand using BNC.</p><p>If you don't specify corrections by this option, BNC will fall back to Single Point Positioning (SPP, positioning from RINEX Obs and RINEX Nav files only) instead of doing PPP.</p>"));
    1471   _pppWidgets._antexFile->setWhatsThis(tr("<p>Observations in RTCM streams or RINEX files should be referred to the receiver's and to the satellite's Antenna Phase Center (APC) and therefore be corrected for<ul><li>Receiver APC offsets</li><li>Receiver APC variations</li><li>Satellite APC offsets.</li></ul> Specify the full path to an IGS 'ANTEX file' which contains APC offsets and variations.</p><p>If you don't specify an 'ANTEX file' then observations will not be corrected for APC offsets and variations.</p>"));
    1472   _pppWidgets._crdFile->setWhatsThis(tr("<p>Enter the full path to an ASCII file which specifies the streams or files of those stations you want to process. Specifying a 'Coordinates file' is optional. If it exists, it should contain one record per station with the following parameters separated by blank character:<p><ul><li>Specify the station either by<ul><li>the 'Mountpoint' of the station's RTCM stream (when in real-time PPP mode), or</li><li>the 4-charater station ID of the RINEX Observations file (when in post processing PPP mode).</li></ul></li><li>Approximate X,Y,Z coordinate of station's Antenna Reference Point [m] (ARP, specify '0.0 0.0 0.0' if unknown).</li><li>North, East and Up component of antenna eccentricity [m] (specify '0.0 0.0 0.0' if unknown).</li><li>20 Characters describing the antenna type and radome following the IGS 'ANTEX file' standard (leave blank if unknown).</li><li>Receiver type following the naming conventions for IGS equipment.</li></ul></p><p>Records with exclamation mark '!' in the first column or blank records will be interpreted as comment lines and ignored.</p>"));
    1473   _pppWidgets._v2filenames->setWhatsThis(tr("<p>Tick 'Version 2 filenames' to let BNC create filenames for PPP logfiles , NMEA files and SINEX Troposphere files following the RINEX Version 2 standard.</p><p>Default is an empty check box, meaning to create filenames following the RINEX Version 3 standard. The file content is not affected by this option. It only concerns the filenames.</p>"));
    1474   _pppWidgets._logPath->setWhatsThis(tr("<p>Specify a directory for saving daily PPP logfiles. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no PPP logfiles shall be produced.</p>"));
    1475   _pppWidgets._nmeaPath->setWhatsThis(tr("<p>Specify a directory for saving coordinates in daily NMEA files. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no NMEA file shall be produced.</p>"));
    1476   _pppWidgets._snxtroPath->setWhatsThis(tr("<p>Specify a directory for saving SINEX Troposphere files. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no SINEX Troposphere files shall be produced.</p>"));
    1477   _pppWidgets._snxtroIntr->setWhatsThis(tr("<p>Select a length for SINEX Troposphere files.</p><p>Default 'SNX TRO interval' for saving SINEX Troposphere files on disk is '1 hour'.</p>"));
    1478   _pppWidgets._snxtroSampl->setWhatsThis(tr("<p>Select a 'Sampling' rate for saving troposphere parameters.</p>"));
    1479   _pppWidgets._snxtroAc->setWhatsThis(tr("<p>Specify a 3-character abbreviation describing you as the generating Analysis Center (AC) in your SINEX troposphere files.</p>"));
    1480   _pppWidgets._snxtroSol->setWhatsThis(tr("<p>Specify a 4-character solution ID to allow a distingtion between different solutions per AC.</p>"));
    1481   _pppWidgets._ionoMount->setWhatsThis(tr("<p>Specify a 'mountpoint' from the 'Streams' canvas below which provides VTEC informations in SSR format.</p><p>If you don't specify a corrections stream via this option, BNC will use VTEC informations from the Corrections stream 'mountpoint', if available.</p>"));
     1466  _pppWidgets._dataSource->setWhatsThis(tr("<p>Select 'Real-time Streams' for real-time PPP from RTCM streams or 'RINEX Files' for post processing PPP from RINEX files.</p><p><ul><li>Real-time PPP requires that you pull a RTCM stream carrying GNSS observations plus a stream providing corrections to Broadcast Ephemeris. If the observations stream does not contain Broadcast Ephemeris then you must in addition pull a Broadcast Ephemeris stream like 'RTCM3EPH' from Ntrip Broadcaster <u>products.igs-ip.net</u>.<br></li><li>Post processing PPP requires RINEX Observation files, RINEX Navigation files and a file with corrections to Broadcast Ephemeris in plain ASCII format as saved beforehand using BNC.</li></ul></p><p>Note that BNC allows to carry out PPP solutions simultaneously for several stations. <i>[key: PPP/]</i></p>"));
     1467  _pppWidgets._rinexObs->setWhatsThis(tr("<p>Specify the RINEX Observation file. <i>[key: PPP/rinexObs]</i></p>"));
     1468  _pppWidgets._rinexNav->setWhatsThis(tr("<p>Specify the RINEX Navigation file. <i>[key: PPP/rinexNav]</i></p>"));
     1469  _pppWidgets._corrMount->setWhatsThis(tr("<p>Specify a 'mountpoint' from the 'Streams' canvas below which provides corrections to Broadcast Ephemeris.</p><p>If you don't specify a corrections stream via this option, BNC will fall back to Single Point Positioning (SPP, positioning from observations and Broadcast Ephemeris only) instead of doing PPP. <i>[key: PPP/corrMount]</i></p>"));
     1470  _pppWidgets._ionoMount->setWhatsThis(tr("<p>Specify a 'mountpoint' from the 'Streams' canvas below which provides VTEC informations in SSR format.</p><p>If you don't specify a corrections stream via this option, BNC will use VTEC informations from the Corrections stream 'mountpoint', if available. <i>[key: PPP/ionoMount]</i></p>"));
     1471  _pppWidgets._corrFile->setWhatsThis(tr("<p>Specify the Broadcast Ephemeris Corrections file as saved beforehand using BNC.</p><p>If you don't specify corrections by this option, BNC will fall back to Single Point Positioning (SPP, positioning from RINEX Obs and RINEX Nav files only) instead of doing PPP. <i>[key: PPP/corrFile]</i></p>"));
     1472  _pppWidgets._ionoFile->setWhatsThis(tr("<p>Specify the VTEC file as saved beforehand using BNC.</p><p>If you don't specify corrections by this option, BNC will use VTEC informations from the Corrections file, if available. <i>[key: PPP/ionoFile]</i></p>"));
     1473  _pppWidgets._antexFile->setWhatsThis(tr("<p>Observations in RTCM streams or RINEX files should be referred to the receiver's and to the satellite's Antenna Phase Center (APC) and therefore be corrected for<ul><li>Receiver APC offsets</li><li>Receiver APC variations</li><li>Satellite APC offsets.</li></ul> Specify the full path to an IGS 'ANTEX file' which contains APC offsets and variations.</p><p>If you don't specify an 'ANTEX file' then observations will not be corrected for APC offsets and variations. <i>[key: PPP/antexFile]</i></p>"));
     1474  _pppWidgets._crdFile->setWhatsThis(tr("<p>Enter the full path to an ASCII file which specifies the streams or files of those stations you want to process. Specifying a 'Coordinates file' is optional. If it exists, it should contain one record per station with the following parameters separated by blank character:<p><ul><li>Specify the station either by<ul><li>the 'Mountpoint' of the station's RTCM stream (when in real-time PPP mode), or</li><li>the 4-charater station ID of the RINEX Observations file (when in post processing PPP mode).</li></ul></li><li>Approximate X,Y,Z coordinate of station's Antenna Reference Point [m] (ARP, specify '0.0 0.0 0.0' if unknown).</li><li>North, East and Up component of antenna eccentricity [m] (specify '0.0 0.0 0.0' if unknown).</li><li>20 Characters describing the antenna type and radome following the IGS 'ANTEX file' standard (leave blank if unknown).</li><li>Receiver type following the naming conventions for IGS equipment.</li></ul></p><p>Records with exclamation mark '!' in the first column or blank records will be interpreted as comment lines and ignored. <i>[key: PPP/crdFile]</i></p>"));
     1475  _pppWidgets._logPath->setWhatsThis(tr("<p>Specify a directory for saving daily PPP logfiles. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no PPP logficorrMountles shall be produced. <i>[key: PPP/logPath]</i></p>"));
     1476  _pppWidgets._nmeaPath->setWhatsThis(tr("<p>Specify a directory for saving coordinates in daily NMEA files. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no NMEA file shall be produced. <i>[key: PPP/nmeaPath]</i></p>"));
     1477  _pppWidgets._snxtroPath->setWhatsThis(tr("<p>Specify a directory for saving SINEX Troposphere files. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no SINEX Troposphere files shall be produced. <i>[key: PPP/snxtroPath]</i></p>"));
     1478  _pppWidgets._snxtroIntr->setWhatsThis(tr("<p>Select a length for SINEX Troposphere files.</p><p>Default 'SNX TRO interval' for saving SINEX Troposphere files on disk is '1 hour'. <i>[key: PPP/snxtroIntr]</i></p>"));
     1479  _pppWidgets._snxtroSampl->setWhatsThis(tr("<p>Select a 'Sampling' rate for saving troposphere parameters. <i>[key: PPP/snxtroSampl]</i></p>"));
     1480  _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>"));
     1481  _pppWidgets._snxtroSol->setWhatsThis(tr("<p>Specify a 4-character solution ID to allow a distinction between different solutions per AC. <i>[key: PPP/snxtroSol]</i></p>"));
     1482
    14821483
    14831484  // WhatsThis, PPP (3)
  • trunk/BNC/src/pppMain.cpp

    r9694 r9783  
    410410    }
    411411
    412     opt->_minObs      = settings.value("PPP/minObs").toInt(); if (opt->_minObs < 5) opt->_minObs = 5;
     412    opt->_minObs      = settings.value("PPP/minObs").toInt(); if (opt->_minObs < 4) opt->_minObs = 4;
    413413    opt->_minEle      = settings.value("PPP/minEle").toDouble() * M_PI / 180.0;
    414414    opt->_maxResC1    = settings.value("PPP/maxResC1").toDouble(); if (opt->_maxResC1 <= 0.0) opt->_maxResC1 = 4.0;
  • trunk/BNC/src/pppRun.cpp

    r9709 r9783  
    185185        +  country;
    186186  }
    187   bool v2filenames = settings.value("PPP/v2filenames").toBool();
    188187  QString logFileSkl = settings.value("PPP/logPath").toString();
    189188  int l = logFileSkl.length();
     
    195194      logFileSkl += QDir::separator();
    196195    }
    197     if (!v2filenames) {
    198       logFileSkl = logFileSkl + ID9 + "${V3PROD}" + distStr + ".ppp";
    199     }
    200     else {
    201       logFileSkl = logFileSkl + ID4 + "${GPSWD}" + distStr + ".ppp";
    202     }
     196
     197    logFileSkl = logFileSkl + ID9 + "${V3PROD}" + distStr + ".ppp";
     198
    203199    _logFile = new bncoutf(logFileSkl, intr, sampl);
    204200  }
     
    213209      nmeaFileSkl += QDir::separator();
    214210    }
    215     if (!v2filenames) {
    216       nmeaFileSkl = nmeaFileSkl + ID9 + "${V3PROD}" + distStr + ".nmea";
    217     }
    218     else {
    219       nmeaFileSkl = nmeaFileSkl + ID4 + "${GPSWD}" + distStr + ".nmea";
    220     }
     211    nmeaFileSkl = nmeaFileSkl + ID9 + "${V3PROD}" + distStr + ".nmea";
     212
    221213    _nmeaFile = new bncoutf(nmeaFileSkl, intr, sampl);
    222214  }
     
    230222      snxtroFileSkl += QDir::separator();
    231223    }
    232     if (!v2filenames) {
    233       snxtroFileSkl = snxtroFileSkl + ID9 + "${V3PROD}" + distStr + ".tra";
    234     }
    235     else {
    236       snxtroFileSkl = snxtroFileSkl + ID4 + "${GPSWD}" + distStr + ".tro";
    237     }
     224    snxtroFileSkl = snxtroFileSkl + ID9 + "${V3PROD}" + distStr + ".tra";
    238225    sampl = settings.value("PPP/snxtroSampl").toString().split("sec").first().toInt();
    239226    intr  = settings.value("PPP/snxtroIntr").toString();
     
    350337    // Process the front epoch
    351338    // -----------------------
    352 
    353339    if (_opt->_corrWaitTime == 0 ||
    354340        (_epoData.front()->_time - _lastClkCorrTime) < _opt->_corrWaitTime) {
    355341
    356       if (fabs(_epoData.front()->_time - _lastClkCorrTime) > 60.0) {
     342      if (_opt->_corrWaitTime != 0 && (fabs(_epoData.front()->_time - _lastClkCorrTime) > 60.0)) {
    357343        delete _epoData.front();
    358344        _epoData.pop_front();
     
    563549  if (!_opt->_corrFile.empty()) {
    564550    _corrFile = new t_corrFile(QString(_opt->_corrFile.c_str()));
    565 
    566551    if (_opt->_ionoFile.empty()) {
    567552      connect(_corrFile, SIGNAL(newTec(t_vTec)), this, SLOT(slotNewTec(t_vTec)));
  • trunk/BNC/src/pppWidgets.cpp

    r9599 r9783  
    7878  _snxtroAc     = new QLineEdit();     _snxtroAc    ->setObjectName("PPP/snxtroAc");     _widgets << _snxtroAc;
    7979  _snxtroSol    = new QLineEdit();     _snxtroSol   ->setObjectName("PPP/snxtroSol");    _widgets << _snxtroSol;
    80   _v2filenames  = new QCheckBox();     _v2filenames ->setObjectName("PPP/v2filenames");  _widgets << _v2filenames;
    8180  _staTable     = new QTableWidget();  _staTable    ->setObjectName("PPP/staTable");     _widgets << _staTable;
    8281  _lcGPS        = new QComboBox();     _lcGPS       ->setObjectName("PPP/lcGPS");        _widgets << _lcGPS;
     
    115114  _dataSource->addItems(QString(",Real-Time Streams,RINEX Files").split(","));
    116115  connect(_dataSource, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets()));
     116  connect(_pseudoObs, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets()));
    117117  connect(_modelObs, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets()));
    118118  connect(_snxtroPath, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged()));
     
    168168  _snxtroIntr->setCurrentIndex(6);
    169169
    170   _minObs->setMinimum(5);
     170  _minObs->setMinimum(4);
    171171  _minObs->setMaximum(6);
    172172  _minObs->setSingleStep(1);
     
    209209  // WhatsThis, PPP (2)
    210210  // ------------------
    211   _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.</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 4-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>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>"));
     211  _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.</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 4-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> <i>[key: PPP/staTable]</i></p>"));
    212212
    213213  // WhatsThis, PPP (3)
     
    248248  delete _snxtroAc;
    249249  delete _snxtroSol;
    250   delete _v2filenames;
    251250  for (int iRow = _staTable->rowCount()-1; iRow >=0; iRow--) {
    252251    _staTable->removeRow(iRow);
     
    395394  _eleWgtCode ->setCheckState(Qt::CheckState(settings.value(_eleWgtCode ->objectName()).toInt()));
    396395  _eleWgtPhase->setCheckState(Qt::CheckState(settings.value(_eleWgtPhase->objectName()).toInt()));
    397   _v2filenames->setCheckState(Qt::CheckState(settings.value(_v2filenames->objectName()).toInt()));
    398396
    399397  // SpinBoxex
     
    464462  settings.setValue(_snxtroAc    ->objectName(), _snxtroAc    ->text());
    465463  settings.setValue(_snxtroSol   ->objectName(), _snxtroSol   ->text());
    466   settings.setValue(_v2filenames ->objectName(), _v2filenames ->checkState());
    467464  settings.setValue(_lcGPS       ->objectName(), _lcGPS       ->currentText());
    468465  settings.setValue(_lcGLONASS   ->objectName(), _lcGLONASS   ->currentText());
     
    523520    enablePseudoObs = true;
    524521  }
     522  bool pseudoObsUsed = _pseudoObs->currentText() == "Ionosphere";
    525523
    526524  QListIterator<QWidget*> it(_widgets);
     
    557555  if (enablePseudoObs) {
    558556    _pseudoObs->setEnabled(true);
    559     _sigmaGIM->setEnabled(true);
    560     _maxResGIM->setEnabled(true);
     557    if (pseudoObsUsed) {
     558     _sigmaGIM->setEnabled(true);
     559     _maxResGIM->setEnabled(true);
     560    } else {
     561      _sigmaGIM->setEnabled(false);
     562      _maxResGIM->setEnabled(false);
     563    }
    561564  } else {
    562565    _pseudoObs->setEnabled(false);
     
    593596     if (iCol == 6) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
    594597     if (iCol == 7) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.1"));
    595      if (iCol == 8) _staTable->setItem(iRow, iCol, new QTableWidgetItem("1e-6"));
     598     if (iCol == 8) _staTable->setItem(iRow, iCol, new QTableWidgetItem("3e-6"));
    596599     if (iCol == 9) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0"));
    597600  }
  • trunk/BNC/src/pppWidgets.h

    r9599 r9783  
    6262  QLineEdit*     _snxtroAc;
    6363  QLineEdit*     _snxtroSol;
    64   QCheckBox*     _v2filenames;
    6564  QTableWidget*  _staTable;
    6665  QComboBox*     _lcGPS;
Note: See TracChangeset for help on using the changeset viewer.