Changeset 11140 in ntrip


Ignore:
Timestamp:
Oct 29, 2026, 10:47:20 PM (13 hours ago)
Author:
stuerze
Message:

General option 'Ephemeris streams' is added and valid for combination, upload of SSR corrections and SSR QC

Location:
trunk/BNC
Files:
10 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/CHANGELOG.md

    r11139 r11140  
    2727- FIXED: Ephemeris upload: the periods of validity of the uploaded data sets were not applied (logical or instead of and), so a data set was uploaded as long as no newer one came, e.g. a Galileo data set 32 hours after its TOC
    2828- CHANGED: SSR QC: the IOD of the corrections is looked up among the last 30 data sets of a satellite instead of the last two (false 'IOD of no received broadcast ephemeris' for Galileo and GLONASS); new report lines for IODs received from the ephemeris stream(s) only later (with the largest delay) and for corrections referring to a broadcast ephemeris outside its validity
     29- ADDED: General option 'Ephemeris streams' (key ephMount): combination, upload of corrections and SSR QC use the Broadcast Ephemeris of the given stream(s) only, e.g. BCEP00BKG0, not those contained in other streams (e.g. RTCM-SSR streams of ACs with ephemeris messages); PPP, RINEX navigation files and ephemeris upload not affected; empty: all streams as before
    2930- ADDED: Regression test suite ('tests'): example configurations and short raw captures replayed through BNC and compared with reference outputs
    3031- ADDED: macOS packaging script
  • trunk/BNC/src/bncephuser.cpp

    r11137 r11140  
    4343#include "bncephuser.h"
    4444#include "bnccore.h"
     45#include "bncsettings.h"
    4546
    4647using namespace std;
    … …  
    6465    connect(BNC_CORE, SIGNAL(newBDSEph(t_ephBDS)),
    6566            this, SLOT(slotNewBDSEph(t_ephBDS)), Qt::DirectConnection);
     67  }
     68}
     69
     70// Ephemerides of the streams in the general option 'Ephemeris streams' only
     71////////////////////////////////////////////////////////////////////////////
     72void bncEphUser::useEphMounts(const QString& user) {
     73  bncSettings settings;
     74  _ephMounts = settings.value("ephMount").toString().split(QRegularExpression("[,\\s]+"),
     75                                                            Qt::SkipEmptyParts);
     76  if (!_ephMounts.isEmpty()) {
     77    BNC_CORE->slotMessage((user.trimmed() + ": ephemerides of " + _ephMounts.join(", ") + " only").toLatin1(), true);
    6678  }
    6779}
    … …  
    8395////////////////////////////////////////////////////////////////////////////
    8496void bncEphUser::slotNewGPSEph(t_ephGPS eph) {
    85   putNewEph(&eph, true);
     97  if (fromEphMount(eph)) {
     98    putNewEph(&eph, true);
     99  }
    86100}
    87101
    … …  
    89103////////////////////////////////////////////////////////////////////////////
    90104void bncEphUser::slotNewGlonassEph(t_ephGlo eph) {
    91   putNewEph(&eph, true);
     105  if (fromEphMount(eph)) {
     106    putNewEph(&eph, true);
     107  }
    92108}
    93109
    … …  
    95111////////////////////////////////////////////////////////////////////////////
    96112void bncEphUser::slotNewGalileoEph(t_ephGal eph) {
    97   putNewEph(&eph, true);
     113  if (fromEphMount(eph)) {
     114    putNewEph(&eph, true);
     115  }
    98116}
    99117
    … …  
    101119////////////////////////////////////////////////////////////////////////////
    102120void bncEphUser::slotNewSBASEph(t_ephSBAS eph) {
    103   putNewEph(&eph, true);
     121  if (fromEphMount(eph)) {
     122    putNewEph(&eph, true);
     123  }
    104124}
    105125
    … …  
    107127////////////////////////////////////////////////////////////////////////////
    108128void bncEphUser::slotNewBDSEph(t_ephBDS eph) {
    109   putNewEph(&eph, true);
     129  if (fromEphMount(eph)) {
     130    putNewEph(&eph, true);
     131  }
    110132}
    111133
  • trunk/BNC/src/bncephuser.h

    r11137 r11140  
    5151  t_irc putNewEph(t_eph* newEph, bool check);
    5252
     53  // Real-time input restricted to the ephemerides of the streams given in the
     54  // general option 'Ephemeris streams' (key ephMount; empty: all streams), used
     55  // for SSR processing: combination, upload of corrections, SSR QC. The name of
     56  // the user is written to the logfile together with the streams.
     57  void useEphMounts(const QString& user);
     58
    5359  // Plausibility check: satellite position computable at TOC and its
    5460  // distance from the geocenter within 20000-60000 km
    … …  
    9298 private:
    9399  void checkEphemeris(t_eph* eph, bool realTime);
     100  bool fromEphMount(const t_eph& eph) const {
     101    return _ephMounts.isEmpty() || _ephMounts.contains(eph.receptStaID());
     102  }
     103  QStringList                        _ephMounts;     // empty: all streams
    94104  QMutex                             _mutex;
    95105  unsigned                           _maxQueueSize;  // data sets kept per satellite
  • trunk/BNC/src/bnchelp.html

    r11137 r11140  
    113113    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.3.4 <a href="#genstart">Auto Start</a><br>
    114114    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.3.5 <a href="#rawout">Raw Output File</a><br>
     115    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.3.6 <a href="#genephmount">Ephemeris Streams</a><br>
    115116    &nbsp; &nbsp; &nbsp; 2.4 <a href="#rinex"><b>RINEX Observations</b></a><br>
    116117    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.4.1 <a href="#rnxname">Filenames</a><br>
    … …  
    26992700  </p>
    27002701  <p>
    2701     The following defines general settings for BNC's logfile, file handling, reconfiguration on-the-fly, and auto-start.
     2702    The following defines general settings for BNC's logfile, file handling, reconfiguration on-the-fly, auto-start,
     2703    raw file output, and the ephemeris streams for the SSR processing.
    27022704  </p>
    27032705
    … …  
    28172819    The default value for 'Raw output file' is an empty option field, meaning that BNC will not save all raw data into
    28182820    one single daily file.
     2821  </p>
     2822  <p>
     2823  <h4 id="genephmount">2.3.6 Ephemeris Streams - optional</h4>
     2824  </p>
     2825  <p>
     2826    SSR corrections refer to a Broadcast Ephemeris data set via its IOD. By default, BNC uses the Broadcast Ephemeris
     2827    of all streams it is pulling, also those contained in observation streams or in Broadcast Correction streams of
     2828    Analysis Centers (e.g. RTCM-SSR streams with ephemeris messages). Specify one or more 'mountpoints' (separated by
     2829    comma) of Broadcast Ephemeris streams, e.g. 'BCEP00BKG0' or 'BCEP00BKG0,BCEP08BKG0', to use their ephemerides only
     2830    in
     2831  </p>
     2832  <ul>
     2833    <li>the combination of Broadcast Corrections ('Combine Corrections'),</li>
     2834    <li>the upload of Broadcast Corrections ('Upload Corrections'), also without combination, and</li>
     2835    <li>the SSR QC.</li>
     2836  </ul>
     2837  <p>
     2838    The combined or uploaded corrections then refer to the data sets users receive from these streams, and the SSR
     2839    QC reports IODs missing in them, independent of ephemerides contained in other streams. The combination and the
     2840    upload always use the same ephemerides. The streams used are written to the logfile.
     2841  </p>
     2842  <p>
     2843    Not affected are the PPP client, which has an option 'Ephemeris stream' of its own (<a
     2844      href=#pppephstream>Section 2.13.1.8</a>), the saving of RINEX Navigation files (all streams, optionally one file
     2845    per stream), and the 'Upload Ephemeris', which combines the ephemerides of all streams into a Broadcast Ephemeris
     2846    stream.
     2847  </p>
     2848  <p>
     2849    The default value for 'Ephemeris streams' is an empty option field, meaning that the Broadcast Ephemeris of all
     2850    streams are used.
    28192851  </p>
    28202852
    … …  
    1099311025   autoStart        {Auto start [integer number: 0=no,2=yes]}
    1099411026   rawOutFile       {Raw output file, full path [character string]}
     11027   ephMount         {Broadcast Ephemeris mountpoint(s) for combination, upload of corrections and SSR QC, comma separated [character string]}
    1099511028
    1099611029RINEX Observations Panel keys:
  • trunk/BNC/src/bncmain.cpp

    r11136 r11140  
    143143        "   autoStart        {Auto start [integer number: 0=no,2=yes]}\n"
    144144        "   rawOutFile       {Raw output file, full path [character string]}\n"
     145        "   ephMount         {Broadcast Ephemeris mountpoint(s) for combination, upload of corrections and SSR QC, comma separated [character string]}\n"
    145146        "\n"
    146147        "RINEX Observations Panel keys:\n"
  • trunk/BNC/src/bncsettings.cpp

    r11136 r11140  
    8181        setValue_p("autoStart", "0");
    8282        setValue_p("rawOutFile", "");
     83        setValue_p("ephMount", "");
    8384        // RINEX Observations
    8485        setValue_p("rnxPath", "");
  • trunk/BNC/src/bncwindow.cpp

    r11136 r11140  
    199199  _logFileLineEdit = new QLineEdit(settings.value("logFile").toString());
    200200  _rawOutFileLineEdit = new QLineEdit(settings.value("rawOutFile").toString());
     201  _ephMountLineEdit = new QLineEdit(settings.value("ephMount").toString());
    201202  _rnxAppendCheckBox = new QCheckBox();
    202203  _rnxAppendCheckBox->setCheckState(Qt::CheckState(
    … …  
    838839  _onTheFlyComboBox->setMaximumWidth(9 * ww);
    839840
    840   gLayout->addWidget(new QLabel("General settings for logfile, file handling, configuration on-the-fly, auto-start, and raw file output.<br>"), 0, 0, 1, 50);
     841  gLayout->addWidget(new QLabel("General settings for logfile, file handling, configuration on-the-fly, auto-start, raw file output, and the ephemeris streams for SSR processing.<br>"), 0, 0, 1, 50);
    841842  gLayout->addWidget(new QLabel("Logfile (full path)"), 1, 0);
    842843  gLayout->addWidget(_logFileLineEdit, 1, 1, 1, 20);
    … …  
    849850  gLayout->addWidget(new QLabel("Raw output file (full path)"), 5, 0);
    850851  gLayout->addWidget(_rawOutFileLineEdit, 5, 1, 1, 20);
    851   gLayout->addWidget(new QLabel(""), 6, 1);
     852  gLayout->addWidget(new QLabel("Ephemeris streams"), 6, 0);
     853  gLayout->addWidget(_ephMountLineEdit, 6, 1, 1, 20);
     854  gLayout->addWidget(new QLabel(""), 7, 1);
    852855  gLayout->setRowStretch(7, 999);
    853856
    … …  
    15631566  _onTheFlyComboBox->setWhatsThis(tr("<p>When operating BNC online in 'no window' mode, some configuration parameters can be changed on-the-fly without interrupting the running process. For that BNC rereads parts of its configuration in pre-defined intervals. The default entry is 'no' that means the reread function is switched of. <p></p>Select '1 min', '5 min', '1 hour', or '1 day' to force BNC to reread its configuration every full minute, five minutes, hour, or day and let in between edited configuration options become effective on-the-fly without terminating uninvolved threads.</p><p>Note that when operating BNC in window mode, on-the-fly changeable configuration options become effective immediately via button 'Save & Reread Configuration'. <i>[key: onTheFlyInterval]</i></p>"));
    15641567  _autoStartCheckBox->setWhatsThis(tr("<p>Tick 'Auto start' for auto-start of BNC at startup time in window mode with preassigned processing options. <i>[key: autoStart]</i></p>"));
     1568  _ephMountLineEdit->setWhatsThis(tr("<p>Specify one or more 'mountpoints' (separated by comma) from the 'Streams' canvas below which provide the Broadcast Ephemeris for the SSR processing, e.g. 'BCEP00BKG0'. The 'Combine Corrections', the 'Upload Corrections' and the SSR QC then use the Broadcast Ephemeris of these streams only, so that the corrections refer to the data sets users receive from them, and not to those contained in other streams, e.g. in Broadcast Correction streams of an Analysis Center.</p><p>The PPP client ('Ephemeris stream' there), the saving of RINEX Navigation files and the 'Upload Ephemeris' are not affected.</p><p>Default is an empty option field, meaning that the Broadcast Ephemeris of all streams are used. <i>[key: ephMount]</i></p>"));
    15651569  _rawOutFileLineEdit->setWhatsThis(tr("<p>Save all data coming in through various streams in the received order and format in one file.</p><p>This option is primarily meant for debugging purposes. <i>[key: rawOutFile]</i></p>"));
    15661570
    … …  
    18721876  delete _logFileLineEdit;
    18731877  delete _rawOutFileLineEdit;
     1878  delete _ephMountLineEdit;
    18741879  delete _rnxAppendCheckBox;
    18751880  delete _onTheFlyComboBox;
    … …  
    24052410  settings.setValue("autoStart", _autoStartCheckBox->checkState());
    24062411  settings.setValue("rawOutFile", _rawOutFileLineEdit->text());
     2412  settings.setValue("ephMount", _ephMountLineEdit->text());
    24072413  // RINEX Observations
    24082414  settings.setValue("rnxPath", _rnxPathLineEdit->text());
  • trunk/BNC/src/bncwindow.h

    r11136 r11140  
    184184    QLineEdit* _logFileLineEdit;
    185185    QLineEdit* _rawOutFileLineEdit;
     186    QLineEdit* _ephMountLineEdit;
    186187    QComboBox* _rnxIntrComboBox;
    187188    QComboBox* _ephIntrComboBox;
  • trunk/BNC/src/combination/bnccomb.cpp

    r11123 r11140  
    133133
    134134  bncSettings settings;
     135
     136  _ephUser.useEphMounts("bncComb");
    135137
    136138  _running = true;
  • trunk/BNC/src/ssrQc.cpp

    r11137 r11140  
    123123t_ssrQc::t_ssrQc(const QString& dirName, double interval, const QStringList& streams,
    124124                 const QString& reference) : _ephUser(true, EPH_KEPT) {
     125  _ephUser.useEphMounts("SSR QC");
    125126  _dirName   = dirName;
    126127  _reference = reference.isEmpty() ? QString("CONSENSUS") : reference;
  • trunk/BNC/src/upload/bncrtnetuploadcaster.cpp

    r11126 r11140  
    8484    // ----------------------------------
    8585    _ephUser = new bncEphUser(true);
     86    _ephUser->useEphMounts("bncRtnetUploadCaster " + mountpoint);
    8687
    8788    bncSettings settings;
  • trunk/BNC/tests/README.md

    r11137 r11140  
    101101  `data/combi_multi_261002_5min.raw`. `ssr_qc_bias` adds the CAS DCB file as
    102102  'QC Bias File' (code bias check against the other ACs and the file).
     103* `ssr_qc_ephmount`: `ssr_qc` with the general option 'Ephemeris streams' BCEP00BKG0: the
     104  ephemerides contained in SSRA00GMV0 are not used, so the GPS uploads within the fit interval
     105  of G10, G22, G29 (only in SSRA00GMV0 on 2 Oct) are IODs of no received broadcast ephemeris.
    103106* `ssr_qc_iod`: IOD check of the SSR QC on `data/qc_iod_261015.raw` (made with
    104107  `tools/mk_qc_iod.py` from the QC capture of 15 Oct 2026: BCEP00BKG0 with each message only
Note: See TracChangeset for help on using the changeset viewer.