source: ntrip/trunk/BNC/src/combination/bncbiassnx.cpp@ 10889

Last change on this file since 10889 was 10818, checked in by stuerze, 2 months ago

bug fixed regarding sign convention of biases

File size: 20.4 KB
Line 
1// Part of BNC, a utility for retrieving decoding and
2// converting GNSS data streams from NTRIP broadcasters.
3//
4// Copyright (C) 2007
5// German Federal Agency for Cartography and Geodesy (BKG)
6// http://www.bkg.bund.de
7// Czech Technical University Prague, Department of Geodesy
8// http://www.fsv.cvut.cz
9//
10// Email: euref-ip@bkg.bund.de
11//
12// This program is free software; you can redistribute it and/or
13// modify it under the terms of the GNU General Public License
14// as published by the Free Software Foundation, version 2.
15//
16// This program is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program; if not, write to the Free Software
23// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24
25/* -------------------------------------------------------------------------
26 * BKG NTRIP Client
27 * -------------------------------------------------------------------------
28 *
29 * Class: bncBiasSnx
30 *
31 * Purpose: Biases from Bias SINEX File
32 *
33 * Author: A. Stuerze
34 *
35 * Created: 15-Mar-2022
36 *
37 * Changes:
38 *
39 * -----------------------------------------------------------------------*/
40
41#include "bncbiassnx.h"
42
43#include <iostream>
44#include <newmatio.h>
45
46using namespace std;
47
48// Constructor
49////////////////////////////////////////////////////////////////////////////
50bncBiasSnx::bncBiasSnx() {
51 bncSettings settings;
52 _useGnss['G'] = (Qt::CheckState(settings.value("cmbGps").toInt()) == Qt::Checked) ? true : false;
53 _useGnss['R'] = (Qt::CheckState(settings.value("cmbGlo").toInt()) == Qt::Checked) ? true : false;
54 _useGnss['E'] = (Qt::CheckState(settings.value("cmbGal").toInt()) == Qt::Checked) ? true : false;
55 _useGnss['C'] = (Qt::CheckState(settings.value("cmbBds").toInt()) == Qt::Checked) ? true : false;
56 _useGnss['J'] = (Qt::CheckState(settings.value("cmbQzss").toInt()) == Qt::Checked) ? true : false;
57 _useGnss['S'] = (Qt::CheckState(settings.value("cmbSbas").toInt()) == Qt::Checked) ? true : false;
58 _useGnss['I'] = (Qt::CheckState(settings.value("cmbNavic").toInt()) == Qt::Checked) ? true : false;
59}
60
61// Destructor
62////////////////////////////////////////////////////////////////////////////
63bncBiasSnx::~bncBiasSnx() {
64 clear();
65}
66
67// Clear Satellite Map
68////////////////////////////////////////////////////////////////////////////
69void bncBiasSnx::clear() {
70 QMapIterator<QString,snxSatCodeBias*>it(_snxSatCodeBiasMap);
71 while (it.hasNext()) {
72 it.next();
73 delete it.value();
74 }
75 _snxSatCodeBiasMap.clear();
76}
77
78// Print
79////////////////////////////////////////////////////////////////////////////
80void bncBiasSnx::print() const {
81 QMapIterator<QString,snxSatCodeBias*> it(_snxSatCodeBiasMap);
82 cout << "============= bncBiasSnx::print() ==========" << endl;
83 while (it.hasNext()) {
84 it.next();
85 cout << it.key().toStdString() << " ";
86 snxSatCodeBias* satCbMap = it.value();
87 cout << satCbMap->_startTime.datestr() << "_" << satCbMap->_startTime.timestr() << " ";
88 QMapIterator <QString, double> itB(satCbMap->_biasMap);
89 cout << satCbMap->_biasMap.size() << " ";
90 while (itB.hasNext()) {
91 itB.next();
92 QString osb = itB.key();
93 double value = itB.value();
94 cout << osb.toStdString() << " " << value << " ";
95 }
96 cout << endl;
97 }
98}
99
100
101// Read Bias SINEX File
102////////////////////////////////////////////////////////////////////////////
103t_irc bncBiasSnx::readFile(const QString& fileName) {
104 clear();
105 QFile inFile(fileName);
106 if (!inFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
107 return failure;
108 }
109
110 QTextStream in(&inFile);
111
112 while ( !in.atEnd() ) {
113 QString biasType, biasAtrib, svn, prn, station, obs1, obs2, startTimeStr, endTimeStr, unit;
114 double value;
115 bncTime startTime;
116
117 QString line = in.readLine();//cout << line.toStdString() << endl;
118 if (line.indexOf("+BIAS/SOLUTION") == 14) {
119 clear();
120 }
121 else if (line.indexOf("BIAS_MODE") == 1) {
122 if (line.contains("ABSOLUTE")) {
123 _type = ABS;
124 }
125 else if (line.contains("RELATIVE")) {
126 _type = REL;
127 }
128 }
129 else if (line.indexOf("OSB") == 1 || line.indexOf("DSB") == 1) {
130 QTextStream inLine(&line, QIODevice::ReadOnly);
131 inLine >> biasType;
132 if (biasType == "OSB") {
133 inLine >> svn >> prn >> obs1 >> startTimeStr >> endTimeStr >> unit >> value;
134 biasAtrib = obs1;
135 }
136 else if (biasType == "DSB") {
137 inLine >> svn;
138 if (svn.size() == 1) { // station data
139 continue;
140 } else {
141 inLine >> prn >> obs1 >> obs2 >> startTimeStr >> endTimeStr >> unit >> value;
142 biasAtrib = QString("%1-%2").arg(obs1).arg(obs2);
143 }
144 }
145 // bncTime from snx time
146 // ---------------------
147 if (bncTimeFromSinex(startTimeStr, startTime) != success) {
148 continue;
149 }
150 // change of sign
151 // --------------
152 // post-processing convention is to subtract biases
153 // real-time convention is to add biases.
154 value *= -1.0;
155
156 // conversion of Code Biases
157 // -------------------------
158 if (unit.contains("ns")) {
159 // from nano seconds into meters
160 value /= 1.e9;
161 value *= t_CST::c;
162
163 }
164
165 // delete existing entries if there are newer once available
166 // ---------------------------------------------------------
167 if (_snxSatCodeBiasMap.contains(prn)) {
168 if (_snxSatCodeBiasMap[prn]->_startTime < startTime) {
169 delete _snxSatCodeBiasMap[prn];
170 _snxSatCodeBiasMap[prn] = new snxSatCodeBias(startTime);
171 }
172 }
173 else {
174 _snxSatCodeBiasMap[prn] = new snxSatCodeBias(startTime);
175 }
176 // save biases
177 // -----------
178 QMap<QString, double>& biasMap = _snxSatCodeBiasMap[prn]->_biasMap;
179 if (!biasMap.contains(biasAtrib)) {
180 biasMap.insert(biasAtrib, value);
181 }
182 }
183 }
184 inFile.close();
185
186 if (_type == ABS) {
187 getDsbFromOsb();
188 }
189 cleanDsb();
190 //print();
191 return success;
192}
193
194// bncTime from SINEX Time String
195////////////////////////////////////////////////////////////////////////////
196t_irc bncBiasSnx::bncTimeFromSinex(QString snxStr, bncTime& time) {
197 bool ok = false;
198 QStringList hlp = snxStr.split(":");// yyyy:doy:dssec
199
200 int year = hlp[0].toInt(&ok, 10);
201 if (!ok) {
202 return failure;
203 }
204 time.set(year, 1, 1, 0, 0, 0.0);
205
206 int doy = hlp[1].toInt(&ok, 10);
207 if (!ok) {
208 return failure;
209 }
210 time += (doy * 24.0 * 3600.0);
211
212 int daysec = hlp[2].toInt(&ok, 10);
213 if (!ok) {
214 return failure;
215 }
216
217 time += daysec;
218
219 return success;
220}
221
222
223// get DSBs from OSBs
224////////////////////////////////////////////////////////////////////////////
225t_irc bncBiasSnx::getDsbFromOsb(void) {
226 QMapIterator<QString,snxSatCodeBias*>itSat(_snxSatCodeBiasMap);
227 while (itSat.hasNext()) {
228 itSat.next();
229 char sys = itSat.key().at(0).toLatin1();
230 QMap<QString, double>& cb = itSat.value()->_biasMap;
231 switch (sys) {
232 case 'G':
233 if (cb.contains("C1W") && cb.contains("C2W")) {cb.insert("C1W-C2W", cb["C1W"] - cb["C2W"]);}
234 if (cb.contains("C1C") && cb.contains("C1W")) {cb.insert("C1C-C1W", cb["C1C"] - cb["C1W"]);}
235 if (cb.contains("C2C") && cb.contains("C2W")) {cb.insert("C2C-C2W", cb["C2C"] - cb["C2W"]);}
236 if (cb.contains("C2W") && cb.contains("C2S")) {cb.insert("C2W-C2S", cb["C2W"] - cb["C2S"]);}
237 if (cb.contains("C2W") && cb.contains("C2L")) {cb.insert("C2W-C2L", cb["C2W"] - cb["C2L"]);}
238 if (cb.contains("C2W") && cb.contains("C2X")) {cb.insert("C2W-C2X", cb["C2W"] - cb["C2X"]);}
239 if (cb.contains("C1C") && cb.contains("C2W")) {cb.insert("C1C-C2W", cb["C1C"] - cb["C2W"]);}
240 if (cb.contains("C1C") && cb.contains("C5Q")) {cb.insert("C1C-C5Q", cb["C1C"] - cb["C5Q"]);}
241 if (cb.contains("C1C") && cb.contains("C5X")) {cb.insert("C1C-C5X", cb["C1C"] - cb["C5X"]);}
242 break;
243 case 'R':
244 if (cb.contains("C1P") && cb.contains("C2P")) {cb.insert("C1P-C2P", cb["C1P"] - cb["C2P"]);}
245 if (cb.contains("C1C") && cb.contains("C1P")) {cb.insert("C1C-C1P", cb["C1C"] - cb["C1P"]);}
246 if (cb.contains("C2C") && cb.contains("C2P")) {cb.insert("C2C-C2P", cb["C2C"] - cb["C2P"]);}
247 if (cb.contains("C1C") && cb.contains("C2C")) {cb.insert("C1C-C2C", cb["C1C"] - cb["C2C"]);}
248 if (cb.contains("C1C") && cb.contains("C2P")) {cb.insert("C1C-C2P", cb["C1C"] - cb["C2P"]);}
249 break;
250 case 'E':
251 if (cb.contains("C1C") && cb.contains("C5Q")) {cb.insert("C1C-C5Q", cb["C1C"] - cb["C5Q"]);}
252 if (cb.contains("C1C") && cb.contains("C6C")) {cb.insert("C1C-C6C", cb["C1C"] - cb["C6C"]);}
253 if (cb.contains("C1C") && cb.contains("C7Q")) {cb.insert("C1C-C7Q", cb["C1C"] - cb["C7Q"]);}
254 if (cb.contains("C1C") && cb.contains("C8Q")) {cb.insert("C1C-C8Q", cb["C1C"] - cb["C8Q"]);}
255 break;
256 case 'C':
257 if (cb.contains("C2I") && cb.contains("C6I")) {cb.insert("C2I-C6I", cb["C2I"] - cb["C6I"]);}
258 if (cb.contains("C2I") && cb.contains("C7I")) {cb.insert("C2I-C7I", cb["C2I"] - cb["C7I"]);}
259 if (cb.contains("C1X") && cb.contains("C6I")) {cb.insert("C1X-C6I", cb["C1X"] - cb["C6I"]);}
260 if (cb.contains("C1P") && cb.contains("C6I")) {cb.insert("C1P-C6I", cb["C1P"] - cb["C6I"]);}
261 if (cb.contains("C1D") && cb.contains("C6I")) {cb.insert("C1D-C6I", cb["C1D"] - cb["C6I"]);}
262 if (cb.contains("C1X") && cb.contains("C7Z")) {cb.insert("C1X-C7Z", cb["C1X"] - cb["C7Z"]);}
263 if (cb.contains("C1X") && cb.contains("C8X")) {cb.insert("C1X-C8X", cb["C1X"] - cb["C8X"]);}
264 if (cb.contains("C1X") && cb.contains("C5X")) {cb.insert("C1X-C5X", cb["C1X"] - cb["C5X"]);}
265 if (cb.contains("C1P") && cb.contains("C5P")) {cb.insert("C1P-C5P", cb["C1P"] - cb["C5P"]);}
266 if (cb.contains("C1D") && cb.contains("C5D")) {cb.insert("C1D-C5D", cb["C1D"] - cb["C5D"]);}
267 break;
268 case 'J':
269 if (cb.contains("C1C") && cb.contains("C1X")) {cb.insert("C1C-C1X", cb["C1C"] - cb["C1X"]);}
270 if (cb.contains("C1C") && cb.contains("C2L")) {cb.insert("C1C-C2L", cb["C1C"] - cb["C2L"]);}
271 if (cb.contains("C1C") && cb.contains("C5X")) {cb.insert("C1C-C5X", cb["C1C"] - cb["C5X"]);}
272 if (cb.contains("C1C") && cb.contains("C5Q")) {cb.insert("C1C-C5Q", cb["C1C"] - cb["C5Q"]);}
273 if (cb.contains("C1X") && cb.contains("C2X")) {cb.insert("C1X-C2X", cb["C1X"] - cb["C2X"]);}
274 if (cb.contains("C1X") && cb.contains("C5X")) {cb.insert("C1X-C5X", cb["C1X"] - cb["C5X"]);}
275 break;
276 default:
277 break;
278 }
279 }
280 return success;
281}
282
283//
284////////////////////////////////////////////////////////////////////////////
285t_irc bncBiasSnx::cleanDsb() {
286
287 for (auto itS = _snxSatCodeBiasMap.begin(); itS != _snxSatCodeBiasMap.end();) {
288 char sys = itS.key().at(0).toLatin1();
289 if (!_useGnss[sys]) {
290 delete itS.value();
291 itS = _snxSatCodeBiasMap.erase(itS);
292 }
293 else {
294 QMap<QString, double>& cb = itS.value()->_biasMap;
295 for (auto itB = cb.begin(); itB != cb.end();){
296 if (itB.key().size() == 3) {
297 itB = cb.erase(itB);
298 }
299 else {
300 ++itB;
301 }
302 }
303 ++itS;
304 }
305 }
306 return success;
307}
308
309//
310////////////////////////////////////////////////////////////////////////////
311void bncBiasSnx::determineSsrSatCodeBiases(QString prn, double aIF1, double aIF2,
312 t_satCodeBias& satCodeBias) {
313 std::string rnxType2ch;
314 double value;
315 if (_snxSatCodeBiasMap.contains(prn)) {
316 char sys = prn.at(0).toLatin1();
317 QMap<QString, double>& cb = _snxSatCodeBiasMap[prn]->_biasMap;
318 switch (sys) {
319 case 'G':
320 if (cb.contains("C1W-C2W")) {
321 double dcb_1W2W = cb.find("C1W-C2W").value();
322 rnxType2ch = "1W";
323 value = aIF2 * dcb_1W2W;
324 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
325 rnxType2ch = "2W";
326 value = -aIF1 * dcb_1W2W;
327 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
328 if (cb.contains("C1C-C1W")) {
329 double dcb_1C1W = cb.find("C1C-C1W").value();
330 rnxType2ch = "1C";
331 value = dcb_1C1W + aIF2 * dcb_1W2W;
332 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
333 if (cb.contains("C1C-C5Q")) {
334 double dcb_1C5Q = cb.find("C1C-C5Q").value();
335 rnxType2ch = "5Q";
336 value = dcb_1C1W + aIF2 * dcb_1W2W - dcb_1C5Q;
337 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
338 }
339 if (cb.contains("C1C-C5X")) {
340 double dcb_1C5X = cb.find("C1C-C5X").value();
341 rnxType2ch = "5X";
342 value = dcb_1C1W + aIF2 * dcb_1W2W - dcb_1C5X;
343 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
344 }
345 }
346 else {
347 if (cb.contains("C1C-C2W")) {
348 double dcb_1C2W = cb.find("C1C-C2W").value();
349 rnxType2ch = "1C";
350 value = dcb_1C2W - aIF1 * dcb_1W2W;
351 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
352 }
353 }
354 if (cb.contains("C2C-C2W")) {
355 double dcb_2C2W = cb.find("C2C-C2W").value();
356 rnxType2ch = "2C";
357 value = dcb_2C2W - aIF1 * dcb_1W2W;
358 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
359 }
360 if (cb.contains("C2W-C2S")) {
361 double dcb_2W2S = cb.find("C2W-C2S").value();
362 rnxType2ch = "2S";
363 value = -aIF1 * dcb_1W2W - dcb_2W2S;
364 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
365 }
366 if (cb.contains("C2W-C2L")) {
367 double dcb_2W2L = cb.find("C2W-C2L").value();
368 rnxType2ch = "2L";
369 value = -aIF1 * dcb_1W2W - dcb_2W2L;
370 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
371 }
372 if (cb.contains("C2W-C2X")) {
373 double dcb_2W2X = cb.find("C2W-C2X").value();
374 rnxType2ch = "2X";
375 value = -aIF1 * dcb_1W2W - dcb_2W2X;
376 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
377 }
378 }
379 break;
380 case 'R':
381 if (cb.contains("C1P-C2P")) {
382 double dcb_1P2P = cb.find("C1P-C2P").value();
383 rnxType2ch = "1P";
384 value = aIF2 * dcb_1P2P;
385 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
386 rnxType2ch = "2P";
387 value = -aIF1 * dcb_1P2P;
388 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
389 if (cb.contains("C1C-C1P")) {
390 double dcb_1C1P = cb.find("C1C-C1P").value();
391 rnxType2ch = "1C";
392 value = dcb_1C1P + aIF2 * dcb_1P2P;
393 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
394 }
395 if (cb.contains("C2C-C2P")) {
396 double dcb_2C2P = cb.find("C2C-C2P").value();
397 rnxType2ch = "2C";
398 value = dcb_2C2P - aIF1 * dcb_1P2P;
399 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
400 }
401 }
402 break;
403 case 'E':
404 if (cb.contains("C1C-C5Q")) {
405 double dcb_1C5Q = cb.find("C1C-C5Q").value();
406 rnxType2ch = "5Q";
407 value = -aIF1 * dcb_1C5Q;
408 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
409 rnxType2ch = "1C";
410 value = aIF2 * dcb_1C5Q;
411 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
412 if (cb.contains("C1C-C6C")) {
413 double dcb_1C6C = cb.find("C1C-C6C").value();
414 rnxType2ch = "6C";
415 value = aIF2 * dcb_1C5Q - dcb_1C6C;
416 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
417 }
418 if (cb.contains("C1C-C7Q")) {
419 double dcb_1C7Q = cb.find("C1C-C7Q").value();
420 rnxType2ch = "7Q";
421 value = aIF2 * dcb_1C5Q - dcb_1C7Q;
422 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
423 }
424 if (cb.contains("C1C-C8Q")) {
425 double dcb_1C8Q = cb.find("C1C-C8Q").value();
426 rnxType2ch = "8Q";
427 value = aIF2 * dcb_1C5Q - dcb_1C8Q;
428 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
429 }
430 }
431 break;
432 case 'C':
433 if (cb.contains("C2I-C6I")) {
434 double dcb_2I6I = cb.find("C2I-C6I").value();
435 rnxType2ch = "2I";
436 value = aIF2 * dcb_2I6I;
437 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
438 rnxType2ch = "6I";
439 value = -aIF1 * dcb_2I6I;
440 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
441 if (cb.contains("C2I-C7I")) {
442 double dcb_2I7I = cb.find("C2I-C7I").value();
443 rnxType2ch = "7I";
444 value = aIF2 * dcb_2I6I - dcb_2I7I;
445 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
446 }
447 if (cb.contains("C1X-C6I")) {
448 double dcb_1X6I = cb.find("C1X-C6I").value();
449 rnxType2ch = "1X";
450 value = dcb_1X6I - aIF1 * dcb_2I6I;
451 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
452 if (cb.contains("C1X-C7Z")) {
453 double dcb_1X7Z = cb.find("C1X-C7Z").value();
454 rnxType2ch = "7Z";
455 value = dcb_1X6I - aIF1 * dcb_2I6I - dcb_1X7Z;
456 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
457 }
458 if (cb.contains("C1X-C8X")) {
459 double dcb_1X8X = cb.find("C1X-C8X").value();
460 rnxType2ch = "8X";
461 value = dcb_1X6I - aIF1 * dcb_2I6I - dcb_1X8X;
462 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
463 }
464 if (cb.contains("C1X-C5X")) {
465 double dcb_1X5X = cb.find("C1X-C5X").value();
466 rnxType2ch = "5X";
467 value = dcb_1X6I - aIF1 * dcb_2I6I - dcb_1X5X;
468 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
469 }
470 }
471 if (cb.contains("C1P-C6I")) {
472 double dcb_1P6I = cb.find("C1P-C6I").value();
473 rnxType2ch = "1P";
474 value = dcb_1P6I - aIF1 * dcb_2I6I;
475 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
476 if (cb.contains("C1P-C5P")) {
477 double dcb_1P5P = cb.find("C1P-C5P").value();
478 rnxType2ch = "5P";
479 value = dcb_1P6I - aIF1 * dcb_2I6I - dcb_1P5P;
480 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
481 }
482 }
483 if (cb.contains("C1D-C6I")) {
484 double dcb_1D6I = cb.find("C1D-C6I").value();
485 rnxType2ch = "1D";
486 value = dcb_1D6I - aIF1 * dcb_2I6I;
487 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
488 if (cb.contains("C1D-C5D")) {
489 double dcb_1D5D = cb.find("C1D-C5D").value();
490 rnxType2ch = "5D";
491 value = dcb_1D6I - aIF1 * dcb_2I6I - dcb_1D5D;
492 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
493 }
494 }
495 }
496 break;
497 case 'J':
498 if (cb.contains("C1C-C2L")) {
499 double dcb_1C2L = cb.find("C1C-C2L").value();
500 rnxType2ch = "1C";
501 value = aIF2 * dcb_1C2L;
502 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
503 rnxType2ch = "2L";
504 value = -aIF1 * dcb_1C2L;
505 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
506 if (cb.contains("C1C-C1X")) {
507 double dcb_1C1X = cb.find("C1C-C1X").value();
508 rnxType2ch = "1X";
509 value = aIF2 * dcb_1C2L - dcb_1C1X;
510 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
511 if (cb.contains("C1X-C2X")) {
512 double dcb_1X2X = cb.find("C1X-C2X").value();
513 rnxType2ch = "2X";
514 value = aIF2 * dcb_1C2L - dcb_1C1X - dcb_1X2X;
515 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
516 }
517 }
518 if (cb.contains("C1C-C5X")) {
519 double dcb_1C5X = cb.find("C1C-C5X").value();
520 rnxType2ch = "5X";
521 value = aIF2 * dcb_1C2L - dcb_1C5X;
522 setSsrSatCodeBias(rnxType2ch, value, satCodeBias);
523 }
524 }
525 break;
526 default:
527 break;
528 }
529 }
530 return;
531}
532
533
534void bncBiasSnx::setSsrSatCodeBias(std::string rnxType2ch, double value,
535 t_satCodeBias& satCodeBias) {
536 t_frqCodeBias frqCodeBias;
537
538 frqCodeBias._rnxType2ch = rnxType2ch;
539 frqCodeBias._value = value;
540
541 satCodeBias._bias.push_back(frqCodeBias);
542 return;
543}
Note: See TracBrowser for help on using the repository browser.