Changeset 11140 in ntrip
- Timestamp:
- Oct 29, 2026, 10:47:20 PM (13 hours ago)
- Location:
- trunk/BNC
- Files:
-
- 10 added
- 12 edited
-
CHANGELOG.md (modified) (1 diff)
-
src/bncephuser.cpp (modified) (7 diffs)
-
src/bncephuser.h (modified) (2 diffs)
-
src/bnchelp.html (modified) (4 diffs)
-
src/bncmain.cpp (modified) (1 diff)
-
src/bncsettings.cpp (modified) (1 diff)
-
src/bncwindow.cpp (modified) (6 diffs)
-
src/bncwindow.h (modified) (1 diff)
-
src/combination/bnccomb.cpp (modified) (1 diff)
-
src/ssrQc.cpp (modified) (1 diff)
-
src/upload/bncrtnetuploadcaster.cpp (modified) (1 diff)
-
tests/README.md (modified) (1 diff)
-
tests/cases/ssr_qc_ephmount (added)
-
tests/cases/ssr_qc_ephmount/case.json (added)
-
tests/cases/ssr_qc_ephmount/expected (added)
-
tests/cases/ssr_qc_ephmount/expected/SSRA00BKG1_S_20262750000_01D_QC.txt.gz (added)
-
tests/cases/ssr_qc_ephmount/expected/SSRA00CHC1_S_20262750000_01D_QC.txt.gz (added)
-
tests/cases/ssr_qc_ephmount/expected/SSRA00CNE1_S_20262750000_01D_QC.txt.gz (added)
-
tests/cases/ssr_qc_ephmount/expected/SSRA00GMV0_S_20262750000_01D_QC.txt.gz (added)
-
tests/cases/ssr_qc_ephmount/expected/SSRA00NRC0_S_20262750000_01D_QC.txt.gz (added)
-
tests/cases/ssr_qc_ephmount/expected/SSRA01GFZ1_S_20262750000_01D_QC.txt.gz (added)
-
tests/cases/ssr_qc_ephmount/expected/SSRA01SHA1_S_20262750000_01D_QC.txt.gz (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/CHANGELOG.md
r11139 r11140 27 27 - 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 28 28 - 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 29 30 - ADDED: Regression test suite ('tests'): example configurations and short raw captures replayed through BNC and compared with reference outputs 30 31 - ADDED: macOS packaging script -
trunk/BNC/src/bncephuser.cpp
r11137 r11140 43 43 #include "bncephuser.h" 44 44 #include "bnccore.h" 45 #include "bncsettings.h" 45 46 46 47 using namespace std; … … 64 65 connect(BNC_CORE, SIGNAL(newBDSEph(t_ephBDS)), 65 66 this, SLOT(slotNewBDSEph(t_ephBDS)), Qt::DirectConnection); 67 } 68 } 69 70 // Ephemerides of the streams in the general option 'Ephemeris streams' only 71 //////////////////////////////////////////////////////////////////////////// 72 void 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); 66 78 } 67 79 } … … 83 95 //////////////////////////////////////////////////////////////////////////// 84 96 void bncEphUser::slotNewGPSEph(t_ephGPS eph) { 85 putNewEph(&eph, true); 97 if (fromEphMount(eph)) { 98 putNewEph(&eph, true); 99 } 86 100 } 87 101 … … 89 103 //////////////////////////////////////////////////////////////////////////// 90 104 void bncEphUser::slotNewGlonassEph(t_ephGlo eph) { 91 putNewEph(&eph, true); 105 if (fromEphMount(eph)) { 106 putNewEph(&eph, true); 107 } 92 108 } 93 109 … … 95 111 //////////////////////////////////////////////////////////////////////////// 96 112 void bncEphUser::slotNewGalileoEph(t_ephGal eph) { 97 putNewEph(&eph, true); 113 if (fromEphMount(eph)) { 114 putNewEph(&eph, true); 115 } 98 116 } 99 117 … … 101 119 //////////////////////////////////////////////////////////////////////////// 102 120 void bncEphUser::slotNewSBASEph(t_ephSBAS eph) { 103 putNewEph(&eph, true); 121 if (fromEphMount(eph)) { 122 putNewEph(&eph, true); 123 } 104 124 } 105 125 … … 107 127 //////////////////////////////////////////////////////////////////////////// 108 128 void bncEphUser::slotNewBDSEph(t_ephBDS eph) { 109 putNewEph(&eph, true); 129 if (fromEphMount(eph)) { 130 putNewEph(&eph, true); 131 } 110 132 } 111 133 -
trunk/BNC/src/bncephuser.h
r11137 r11140 51 51 t_irc putNewEph(t_eph* newEph, bool check); 52 52 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 53 59 // Plausibility check: satellite position computable at TOC and its 54 60 // distance from the geocenter within 20000-60000 km … … 92 98 private: 93 99 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 94 104 QMutex _mutex; 95 105 unsigned _maxQueueSize; // data sets kept per satellite -
trunk/BNC/src/bnchelp.html
r11137 r11140 113 113 2.3.4 <a href="#genstart">Auto Start</a><br> 114 114 2.3.5 <a href="#rawout">Raw Output File</a><br> 115 2.3.6 <a href="#genephmount">Ephemeris Streams</a><br> 115 116 2.4 <a href="#rinex"><b>RINEX Observations</b></a><br> 116 117 2.4.1 <a href="#rnxname">Filenames</a><br> … … 2699 2700 </p> 2700 2701 <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. 2702 2704 </p> 2703 2705 … … 2817 2819 The default value for 'Raw output file' is an empty option field, meaning that BNC will not save all raw data into 2818 2820 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. 2819 2851 </p> 2820 2852 … … 10993 11025 autoStart {Auto start [integer number: 0=no,2=yes]} 10994 11026 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]} 10995 11028 10996 11029 RINEX Observations Panel keys: -
trunk/BNC/src/bncmain.cpp
r11136 r11140 143 143 " autoStart {Auto start [integer number: 0=no,2=yes]}\n" 144 144 " 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" 145 146 "\n" 146 147 "RINEX Observations Panel keys:\n" -
trunk/BNC/src/bncsettings.cpp
r11136 r11140 81 81 setValue_p("autoStart", "0"); 82 82 setValue_p("rawOutFile", ""); 83 setValue_p("ephMount", ""); 83 84 // RINEX Observations 84 85 setValue_p("rnxPath", ""); -
trunk/BNC/src/bncwindow.cpp
r11136 r11140 199 199 _logFileLineEdit = new QLineEdit(settings.value("logFile").toString()); 200 200 _rawOutFileLineEdit = new QLineEdit(settings.value("rawOutFile").toString()); 201 _ephMountLineEdit = new QLineEdit(settings.value("ephMount").toString()); 201 202 _rnxAppendCheckBox = new QCheckBox(); 202 203 _rnxAppendCheckBox->setCheckState(Qt::CheckState( … … 838 839 _onTheFlyComboBox->setMaximumWidth(9 * ww); 839 840 840 gLayout->addWidget(new QLabel("General settings for logfile, file handling, configuration on-the-fly, auto-start, andraw 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); 841 842 gLayout->addWidget(new QLabel("Logfile (full path)"), 1, 0); 842 843 gLayout->addWidget(_logFileLineEdit, 1, 1, 1, 20); … … 849 850 gLayout->addWidget(new QLabel("Raw output file (full path)"), 5, 0); 850 851 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); 852 855 gLayout->setRowStretch(7, 999); 853 856 … … 1563 1566 _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>")); 1564 1567 _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>")); 1565 1569 _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>")); 1566 1570 … … 1872 1876 delete _logFileLineEdit; 1873 1877 delete _rawOutFileLineEdit; 1878 delete _ephMountLineEdit; 1874 1879 delete _rnxAppendCheckBox; 1875 1880 delete _onTheFlyComboBox; … … 2405 2410 settings.setValue("autoStart", _autoStartCheckBox->checkState()); 2406 2411 settings.setValue("rawOutFile", _rawOutFileLineEdit->text()); 2412 settings.setValue("ephMount", _ephMountLineEdit->text()); 2407 2413 // RINEX Observations 2408 2414 settings.setValue("rnxPath", _rnxPathLineEdit->text()); -
trunk/BNC/src/bncwindow.h
r11136 r11140 184 184 QLineEdit* _logFileLineEdit; 185 185 QLineEdit* _rawOutFileLineEdit; 186 QLineEdit* _ephMountLineEdit; 186 187 QComboBox* _rnxIntrComboBox; 187 188 QComboBox* _ephIntrComboBox; -
trunk/BNC/src/combination/bnccomb.cpp
r11123 r11140 133 133 134 134 bncSettings settings; 135 136 _ephUser.useEphMounts("bncComb"); 135 137 136 138 _running = true; -
trunk/BNC/src/ssrQc.cpp
r11137 r11140 123 123 t_ssrQc::t_ssrQc(const QString& dirName, double interval, const QStringList& streams, 124 124 const QString& reference) : _ephUser(true, EPH_KEPT) { 125 _ephUser.useEphMounts("SSR QC"); 125 126 _dirName = dirName; 126 127 _reference = reference.isEmpty() ? QString("CONSENSUS") : reference; -
trunk/BNC/src/upload/bncrtnetuploadcaster.cpp
r11126 r11140 84 84 // ---------------------------------- 85 85 _ephUser = new bncEphUser(true); 86 _ephUser->useEphMounts("bncRtnetUploadCaster " + mountpoint); 86 87 87 88 bncSettings settings; -
trunk/BNC/tests/README.md
r11137 r11140 101 101 `data/combi_multi_261002_5min.raw`. `ssr_qc_bias` adds the CAS DCB file as 102 102 '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. 103 106 * `ssr_qc_iod`: IOD check of the SSR QC on `data/qc_iod_261015.raw` (made with 104 107 `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.
