- Timestamp:
- Jul 20, 2023, 12:13:41 PM (16 months ago)
- Location:
- trunk/BNC
- Files:
-
- 2 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/CHANGELOG.md
r9769 r10127 1 1 # Changelog 2 2 3 ## 2.13.0 (202 2-06-xx)3 ## 2.13.0 (2023-07-) 4 4 - ADDED: **RINEX Version 4** support; in navigation files currently the EPH message type is considerred only 5 5 - ADDED: PPP Client upgrade -
trunk/BNC/Example_Configs/09_PPPNet.bnc
r10115 r10127 100 100 sp3CompFile= 101 101 sp3CompOutLogFile= 102 sp3CompSummaryOnly=0 102 103 sslCaCertPath= 103 104 sslClientCertPath= … … 128 129 uploadSamplRtcmEph=5 129 130 uploadSamplRtcmEphCorr=0 130 uploadSamplSp3= 1131 uploadSamplSp3=30 sec 131 132 132 133 [PPP] … … 167 168 sigmaL1=0.02 168 169 snxtroAc=BKG 170 snxtroCampId=DEM 169 171 snxtroIntr=1 hour 170 172 snxtroPath=./ 171 173 snxtroSampl=1 sec 172 174 snxtroSol=1 175 snxtroSolId=9 176 snxtroSolType=RTS 173 177 staTable="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 82 82 #define BDS_WAVELENGTH_B2b (LIGHTSPEED / BDS_FREQU_B2b) /* m */ 83 83 84 #define IRNSS_FREQU_L1 1575420000.0 /* Hz */ 84 85 #define IRNSS_FREQU_L5 1176450000.0 /* Hz */ 85 86 #define IRNSS_FREQU_S 2492028000.0 /* Hz */ 87 #define IRNSS_WAVELENGTH_L1 (LIGHTSPEED / IRNSS_FREQU_L1) /* m */ 86 88 #define IRNSS_WAVELENGTH_L5 (LIGHTSPEED / IRNSS_FREQU_L5) /* m */ 87 89 #define IRNSS_WAVELENGTH_S (LIGHTSPEED / IRNSS_FREQU_S) /* m */ -
trunk/BNC/src/bncmain.cpp
r10102 r10127 238 238 " PPP/ionoFile {VTEC file, full path [char string]}\n" 239 239 #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" 246 248 "\n" 247 249 "PPP Client Panel 2 keys:\n" -
trunk/BNC/src/bncoutf.cpp
r9944 r10127 159 159 bncSettings settings; 160 160 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(); 162 164 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); 166 168 addition = QString("_%1_TRO").arg(site); 167 169 } -
trunk/BNC/src/bncsinextro.cpp
r10083 r10127 79 79 .arg(nominalEndSec , 5, 10, QLatin1Char('0')); 80 80 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(); 84 84 QString corr = ""; 85 85 if (settings.value("PPP/dataSource").toString() == "Real-Time Streams") { … … 118 118 << startTime.toStdString() << " " << endTime.toStdString() << " P " 119 119 << epo.toStdString() << " 0 " << " T " << endl; 120 120 _out << "*-------------------------------------------------------------------------------" << endl; 121 121 _out << "+FILE/REFERENCE" << endl; 122 _out << "*INFO_TYPE_________ INFO________________________________________________________" << endl; 122 123 _out << " DESCRIPTION " << "BNC generated SINEX TRO file" << endl; 123 124 _out << " OUTPUT " << "Total Troposphere Zenith Path Delay Product" << endl; 124 125 _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; 128 158 129 159 double recEll[3]; … … 144 174 } 145 175 _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; 147 177 _out << " " << _opt->_roverName.substr(0,9) << " A P " 148 178 << 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() 156 182 << 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; 158 209 159 210 if (!_opt->_recNameRover.empty()) { 160 211 _out << "+SITE/RECEIVER" << endl; 161 _out << "*S ITE 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 " 163 214 << startTime.toStdString() << " " << endTime.toStdString() 164 215 << QString(" %1").arg(_opt->_recNameRover.c_str(), 20,QLatin1Char(' ')).toStdString() 165 216 << " -----" << " -----------" << endl; 166 _out << "-SITE/RECEIVER" << endl << endl; 217 _out << "-SITE/RECEIVER" << endl; 218 _out << "*-------------------------------------------------------------------------------" << endl; 167 219 } 168 220 169 221 _out << "+SITE/ANTENNA" << endl; 170 _out << "*S ITE 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 " 172 224 << startTime.toStdString() << " " << endTime.toStdString() << " " 173 225 << _opt->_antNameRover << " -----" << endl; 174 _out << "-SITE/ANTENNA" << endl << endl; 226 _out << "-SITE/ANTENNA" << endl; 227 _out << "*-------------------------------------------------------------------------------" << endl; 175 228 176 229 if (!_opt->_antexFileName.empty()) { … … 188 241 } 189 242 _out << " ---------" << endl; 190 _out << "-SITE/GPS_PHASE_CENTER" << endl << endl; 243 _out << "-SITE/GPS_PHASE_CENTER" << endl; 244 _out << "*-------------------------------------------------------------------------------" << endl; 191 245 } 192 246 if (_opt->_LCsGLONASS.size()) { … … 202 256 } 203 257 _out << " ---------" << endl; 204 _out << "-SITE/GLONASS_PHASE_CENTER" << endl << endl; 258 _out << "-SITE/GLONASS_PHASE_CENTER" << endl; 259 _out << "*-------------------------------------------------------------------------------" << endl; 205 260 } 206 261 if (_opt->_LCsGalileo.size()) { … … 216 271 } 217 272 _out << " ---------" << endl; 218 _out << "-SITE/GALILEO_PHASE_CENTER" << endl << endl; 273 _out << "-SITE/GALILEO_PHASE_CENTER" << endl; 274 _out << "*-------------------------------------------------------------------------------" << endl; 219 275 } 220 276 if (_opt->_LCsBDS.size()) { … … 230 286 } 231 287 _out << " ---------" << endl; 232 _out << "-SITE/BEIDOU_PHASE_CENTER" << endl << endl; 288 _out << "-SITE/BEIDOU_PHASE_CENTER" << endl; 289 _out << "*-------------------------------------------------------------------------------" << endl; 233 290 } 234 291 delete _antex; … … 236 293 } 237 294 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 281 295 _out << "+TROP/SOLUTION" << endl; 282 _out << "*S ITE EPOCH_______ TROTOT STDEV" << endl;296 _out << "*STATION__ ____EPOCH_____ TROTOT STDDEV " << endl; 283 297 } 284 298 -
trunk/BNC/src/bncsp3.cpp
r10123 r10127 78 78 if (_lastEpoTime.valid() && _sampl > 0) { 79 79 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, ' '); 81 81 } 82 82 } … … 84 84 // Print the new epoch 85 85 // ------------------- 86 _out << " * " << epoTime.datestr(' ') << ' ' << epoTime.timestr(8, ' ') << endl;86 _out << "\n* " << epoTime.datestr(' ') << ' ' << epoTime.timestr(8, ' '); 87 87 88 88 _lastEpoTime = epoTime; 89 89 } 90 90 91 _out << " P" << prn.toLatin1().data()91 _out << "\nP" << prn.toLatin1().data() 92 92 << setw(14) << setprecision(6) << xCoM(1) / 1000.0 // [km] 93 93 << setw(14) << setprecision(6) << xCoM(2) / 1000.0 // [km] 94 94 << 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 97 96 98 97 if (sp3ClkRate) { 99 _out << " V" << prn.toLatin1().data()98 _out << "\nV" << prn.toLatin1().data() 100 99 << setw(14) << setprecision(6) << v(1) * 10.0 // [dm/s] 101 100 << setw(14) << setprecision(6) << v(2) * 10.0 // [dm/s] 102 101 << 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 105 103 } 106 104 return success; … … 212 210 istringstream in(_lastLine.substr(1).c_str()); 213 211 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)) { 216 219 delete sp3Sat; 217 220 continue; 218 221 } 219 222 220 sp3Sat->_xyz *= 1.e3;223 // Simple Check - clock valid 221 224 if (sp3Sat->_clk == 999999.999999) { 222 225 sp3Sat->_clkValid = false; -
trunk/BNC/src/bncwindow.cpp
r10102 r10127 983 983 _pppWidgets._logPath->setMaximumWidth(35*ww); 984 984 _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); 989 991 990 992 … … 1029 1031 pppLayout1->addWidget(new QLabel(" SNX TRO AC"), ir, 4); 1030 1032 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); 1033 1035 ++ir; 1034 1036 #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 1037 1044 #endif 1038 1045 pppLayout1->setRowStretch(ir+1, 999); … … 1492 1499 _pppWidgets._snxtroSampl->setWhatsThis(tr("<p>Select a 'Sampling' rate for saving troposphere parameters. <i>[key: PPP/snxtroSampl]</i></p>")); 1493 1500 _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>")); 1496 1504 1497 1505 // WhatsThis, PPP (3) -
trunk/BNC/src/orbComp/sp3Comp.cpp
r10125 r10127 225 225 for (map<t_prn, double>::iterator it = dc.begin(); it != dc.end(); it++) { 226 226 const t_prn& prn = it->first; 227 st d::string sys; sys.assign(1, prn.system());227 stringstream all; all << prn.system() << 99; 228 228 if (satIndex(clkSats, prn) != -1) { 229 229 int index = epochs.size() + satIndex(clkSats, prn); … … 233 233 dcRed[prn] = dc[prn] - dr.find(prn)->second[0]; // clock minus radial component 234 234 stat[prn.toString()]._dcRedMean += dcRed[prn]; 235 stat[ sys]._dcRedMean += dcRed[prn];235 stat[all.str() ]._dcRedMean += dcRed[prn]; 236 236 stat[prn.toString()]._nc += 1; 237 stat[ sys]._nc += 1;237 stat[all.str() ]._nc += 1; 238 238 } 239 239 } … … 380 380 for (map<t_prn, ColumnVector>::const_iterator it = dr.begin(); it != dr.end(); it++) { 381 381 const t_prn& prn = it->first; 382 st d::string sys; sys.assign(1, prn.system());382 stringstream all; all << prn.system() << 99; 383 383 if (!excludeSat(prn)) { 384 384 const ColumnVector& rao = it->second; … … 390 390 } 391 391 stat[prn.toString()]._rao += SP(rao, rao); // Schur product 392 stat[ sys]._rao += SP(rao, rao);392 stat[all.str() ]._rao += SP(rao, rao); 393 393 stat[prn.toString()]._nr += 1; 394 stat[ sys]._nr += 1;394 stat[all.str() ]._nr += 1; 395 395 if (dc.find(prn) != dc.end() && dcRed.find(prn) != dc.end()) { 396 396 double clkRes = dc.find(prn)->second; … … 401 401 } 402 402 stat[prn.toString()]._dcRMS += clkRes * clkRes; 403 stat[ sys]._dcRMS += clkRes * clkRes;403 stat[all.str() ]._dcRMS += clkRes * clkRes; 404 404 stat[prn.toString()]._dcRedRMS += clkResRed * clkResRed; 405 stat[ sys]._dcRedRMS += clkResRed * clkResRed;405 stat[all.str() ]._dcRedRMS += clkResRed * clkResRed; 406 406 stat[prn.toString()]._dcRedSig += (clkResRed - stat[prn.toString()]._dcRedMean) * 407 407 (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); 410 410 } 411 411 else { … … 432 432 const string& prn = it->first; 433 433 t_stat& stat = it->second; 434 st d::string sys; sys.assign(1, prn[0]);434 stringstream all; all << prn[0] << 99; 435 435 if (stat._nr > 0) { 436 436 stat._rao[0] = sqrt(stat._rao[0] / stat._nr); … … 438 438 stat._rao[2] = sqrt(stat._rao[2] / stat._nr); 439 439 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 << ' ': 442 443 out << "! " << prn << ' '; 443 444 } 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 452 455 if (stat._nc > 0) { 453 456 stat._dcRMS = sqrt(stat._dcRMS / stat._nc); 454 457 stat._dcRedRMS = sqrt(stat._dcRedRMS / stat._nc); 455 458 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"; 513 468 } 514 469 } -
trunk/BNC/src/pppWidgets.cpp
r10062 r10127 77 77 _snxtroIntr = new QComboBox(); _snxtroIntr ->setObjectName("PPP/snxtroIntr"); _widgets << _snxtroIntr; 78 78 _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; 80 82 _staTable = new QTableWidget(); _staTable ->setObjectName("PPP/staTable"); _widgets << _staTable; 81 83 _lcGPS = new QComboBox(); _lcGPS ->setObjectName("PPP/lcGPS"); _widgets << _lcGPS; … … 118 120 connect(_snxtroPath, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged())); 119 121 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())); 121 125 122 126 slotEnableWidgets(); … … 247 251 delete _snxtroIntr; 248 252 delete _snxtroAc; 249 delete _snxtroSol; 253 delete _snxtroSolId; 254 delete _snxtroSolType; 255 delete _snxtroCampId; 250 256 for (int iRow = _staTable->rowCount()-1; iRow >=0; iRow--) { 251 257 _staTable->removeRow(iRow); … … 333 339 // LineEdits 334 340 // --------- 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()); 342 350 343 351 if (!settings.value(_sigmaC1->objectName()).toString().isEmpty()) { … … 462 470 settings.setValue(_snxtroIntr ->objectName(), _snxtroIntr ->currentText()); 463 471 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()); 465 475 settings.setValue(_lcGPS ->objectName(), _lcGPS ->currentText()); 466 476 settings.setValue(_lcGLONASS ->objectName(), _lcGLONASS ->currentText()); … … 545 555 _snxtroIntr ->setEnabled(true); 546 556 _snxtroAc ->setEnabled(true); 547 _snxtroSol ->setEnabled(true); 557 _snxtroSolId ->setEnabled(true); 558 _snxtroSolType ->setEnabled(true); 559 _snxtroCampId ->setEnabled(true); 548 560 } 549 561 else { … … 551 563 _snxtroIntr ->setEnabled(false); 552 564 _snxtroAc ->setEnabled(false); 553 _snxtroSol ->setEnabled(false); 565 _snxtroSolId ->setEnabled(false); 566 _snxtroSolType ->setEnabled(false); 567 _snxtroCampId ->setEnabled(false); 554 568 } 555 569 … … 639 653 _snxtroIntr ->setEnabled(true); 640 654 _snxtroAc ->setEnabled(true); 641 _snxtroSol ->setEnabled(true); 655 _snxtroSolId ->setEnabled(true); 656 _snxtroSolType ->setEnabled(true); 657 _snxtroCampId ->setEnabled(true); 642 658 _snxtroSampl->setPalette(paletteWhite); 643 659 _snxtroIntr ->setPalette(paletteWhite); 644 660 _snxtroAc ->setPalette(paletteWhite); 645 _snxtroSol ->setPalette(paletteWhite); 661 _snxtroSolId ->setPalette(paletteWhite); 662 _snxtroSolType ->setPalette(paletteWhite); 663 _snxtroCampId ->setPalette(paletteWhite); 646 664 } 647 665 else { … … 649 667 _snxtroIntr ->setEnabled(false); 650 668 _snxtroAc ->setEnabled(false); 651 _snxtroSol ->setEnabled(false); 669 _snxtroSolId ->setEnabled(false); 670 _snxtroSolType ->setEnabled(false); 671 _snxtroCampId ->setEnabled(false); 652 672 _snxtroSampl->setPalette(paletteGray); 653 673 _snxtroIntr ->setPalette(paletteGray); 654 674 _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 61 61 QComboBox* _snxtroIntr; 62 62 QLineEdit* _snxtroAc; 63 QLineEdit* _snxtroSol; 63 QLineEdit* _snxtroSolId; 64 QLineEdit* _snxtroSolType; 65 QLineEdit* _snxtroCampId; 64 66 QTableWidget* _staTable; 65 67 QComboBox* _lcGPS; -
trunk/BNC/src/rinex/rnxnavfile.h
r9945 r10127 38 38 #define defaultRnxNavVersion2 2.11 39 39 #define defaultRnxNavVersion3 3.05 40 #define defaultRnxNavVersion4 4.0 040 #define defaultRnxNavVersion4 4.01 41 41 42 42 class t_rnxNavFile { -
trunk/BNC/src/rinex/rnxobsfile.h
r10085 r10127 40 40 #define defaultRnxObsVersion2 2.11 41 41 #define defaultRnxObsVersion3 3.05 42 #define defaultRnxObsVersion4 4.0 042 #define defaultRnxObsVersion4 4.01 43 43 44 44 class t_rnxObsHeader { -
trunk/BNC/src/src.pro
r10100 r10127 2 2 TARGET = ../bnc 3 3 4 CONFIG -= debug5 CONFIG += release4 CONFIG += debug 5 CONFIG -= release 6 6 7 7 include(src.pri)
Note:
See TracChangeset
for help on using the changeset viewer.