source: ntrip/trunk/BNC/src/satObs.cpp@ 6513

Last change on this file since 6513 was 6513, checked in by mervart, 9 years ago
File size: 10.6 KB
Line 
1#include <iostream>
2#include <iomanip>
3#include <sstream>
4#include <newmatio.h>
5
6#include "satObs.h"
7
8using namespace std;
9
10// Constructor
11////////////////////////////////////////////////////////////////////////////
12t_clkCorr::t_clkCorr() {
13 _iod = 0;
14 _dClk = 0.0;
15 _dotDClk = 0.0;
16 _dotDotDClk = 0.0;
17}
18
19//
20////////////////////////////////////////////////////////////////////////////
21void t_clkCorr::writeEpoch(ostream* out, const QList<t_clkCorr>& corrList) {
22 if (!out || corrList.size() == 0) {
23 return;
24 }
25 out->setf(ios::fixed);
26 bncTime epoTime;
27 QListIterator<t_clkCorr> it(corrList);
28 while (it.hasNext()) {
29 const t_clkCorr& corr = it.next();
30 if (!epoTime.valid()) {
31 epoTime = corr._time;
32 *out << "> CLOCK " << epoTime.datestr(' ') << ' ' << epoTime.timestr(1,' ') << " "
33 << corrList.size() << ' ' << corr._staID << endl;
34 }
35 *out << corr._prn.toString() << ' ' << setw(3) << corr._iod << ' '
36 << setw(10) << setprecision(4) << corr._dClk * t_CST::c << ' '
37 << setw(10) << setprecision(4) << corr._dotDClk * t_CST::c << ' '
38 << setw(10) << setprecision(4) << corr._dotDotDClk * t_CST::c << endl;
39 }
40 out->flush();
41}
42
43//
44////////////////////////////////////////////////////////////////////////////
45void t_clkCorr::readEpoch(const string& epoLine, istream& inStream, QList<t_clkCorr>& corrList) {
46 bncTime epoTime;
47 int numCorr;
48 string staID;
49 if (t_corrSSR::readEpoLine(epoLine, epoTime, numCorr, staID) != t_corrSSR::clkCorr) {
50 return;
51 }
52 for (int ii = 0; ii < numCorr; ii++) {
53 t_clkCorr corr;
54 corr._time = epoTime;
55
56 string line;
57 getline(inStream, line);
58 istringstream in(line.c_str());
59
60 in >> corr._prn >> corr._iod >> corr._dClk >> corr._dotDClk >> corr._dotDotDClk;
61
62 corr._dClk /= t_CST::c;
63 corr._dotDClk /= t_CST::c;
64 corr._dotDotDClk /= t_CST::c;
65
66 corrList.push_back(corr);
67 }
68}
69
70// Constructor
71////////////////////////////////////////////////////////////////////////////
72t_orbCorr::t_orbCorr() {
73 _iod = 0;
74 _system = 'R';
75 _xr.ReSize(3); _xr = 0.0;
76 _dotXr.ReSize(3); _dotXr = 0.0;
77}
78
79//
80////////////////////////////////////////////////////////////////////////////
81void t_orbCorr::writeEpoch(ostream* out, const QList<t_orbCorr>& corrList) {
82 if (!out || corrList.size() == 0) {
83 return;
84 }
85 out->setf(ios::fixed);
86 bncTime epoTime;
87 QListIterator<t_orbCorr> it(corrList);
88 while (it.hasNext()) {
89 const t_orbCorr& corr = it.next();
90 if (!epoTime.valid()) {
91 epoTime = corr._time;
92 *out << "> ORBIT " << epoTime.datestr(' ') << ' ' << epoTime.timestr(1,' ') << " "
93 << corrList.size() << ' ' << corr._staID << endl;
94 }
95 *out << corr._prn.toString() << ' ' << setw(3) << corr._iod << ' '
96 << setw(10) << setprecision(4) << corr._xr[0] << ' '
97 << setw(10) << setprecision(4) << corr._xr[1] << ' '
98 << setw(10) << setprecision(4) << corr._xr[2] << " "
99 << setw(10) << setprecision(4) << corr._dotXr[0] << ' '
100 << setw(10) << setprecision(4) << corr._dotXr[1] << ' '
101 << setw(10) << setprecision(4) << corr._dotXr[2] << endl;
102 }
103 out->flush();
104}
105
106//
107////////////////////////////////////////////////////////////////////////////
108void t_orbCorr::readEpoch(const string& epoLine, istream& inStream, QList<t_orbCorr>& corrList) {
109 bncTime epoTime;
110 int numCorr;
111 string staID;
112 if (t_corrSSR::readEpoLine(epoLine, epoTime, numCorr, staID) != t_corrSSR::orbCorr) {
113 return;
114 }
115 for (int ii = 0; ii < numCorr; ii++) {
116 t_orbCorr corr;
117 corr._time = epoTime;
118
119 string line;
120 getline(inStream, line);
121 istringstream in(line.c_str());
122
123 in >> corr._prn >> corr._iod
124 >> corr._xr[0] >> corr._xr[1] >> corr._xr[2]
125 >> corr._dotXr[0] >> corr._dotXr[1] >> corr._dotXr[2];
126
127 corrList.push_back(corr);
128 }
129}
130
131//
132////////////////////////////////////////////////////////////////////////////
133void t_satCodeBias::writeEpoch(ostream* out, const QList<t_satCodeBias>& biasList) {
134 if (!out || biasList.size() == 0) {
135 return;
136 }
137 out->setf(ios::fixed);
138 bncTime epoTime;
139 QListIterator<t_satCodeBias> it(biasList);
140 while (it.hasNext()) {
141 const t_satCodeBias& satCodeBias = it.next();
142 if (!epoTime.valid()) {
143 epoTime = satCodeBias._time;
144 *out << "> CODE_BIAS " << epoTime.datestr(' ') << ' ' << epoTime.timestr(1,' ') << " "
145 << biasList.size() << ' ' << satCodeBias._staID << endl;
146 }
147 *out << satCodeBias._prn.toString();
148 for (unsigned ii = 0; ii < satCodeBias._bias.size(); ii++) {
149 const t_frqCodeBias& frqCodeBias = satCodeBias._bias[ii];
150 *out << " " << frqCodeBias._rnxType2ch << ' '
151 << setw(10) << setprecision(4) << frqCodeBias._value;
152 }
153 *out << endl;
154 }
155 out->flush();
156}
157
158//
159////////////////////////////////////////////////////////////////////////////
160void t_satCodeBias::readEpoch(const string& epoLine, istream& inStream, QList<t_satCodeBias>& biasList) {
161 bncTime epoTime;
162 int numSat;
163 string staID;
164 if (t_corrSSR::readEpoLine(epoLine, epoTime, numSat, staID) != t_corrSSR::codeBias) {
165 return;
166 }
167 for (int ii = 0; ii < numSat; ii++) {
168 t_satCodeBias satCodeBias;
169 satCodeBias._time = epoTime;
170
171 string line;
172 getline(inStream, line);
173 istringstream in(line.c_str());
174
175 in >> satCodeBias._prn;
176
177 while (in.good()) {
178 t_frqCodeBias frqCodeBias;
179 in >> frqCodeBias._rnxType2ch >> frqCodeBias._value;
180 if (!frqCodeBias._rnxType2ch.empty()) {
181 satCodeBias._bias.push_back(frqCodeBias);
182 }
183 }
184
185 biasList.push_back(satCodeBias);
186 }
187}
188
189//
190////////////////////////////////////////////////////////////////////////////
191void t_satPhaseBias::writeEpoch(ostream* out, const QList<t_satPhaseBias>& biasList) {
192 if (!out || biasList.size() == 0) {
193 return;
194 }
195 out->setf(ios::fixed);
196 bncTime epoTime;
197 QListIterator<t_satPhaseBias> it(biasList);
198 while (it.hasNext()) {
199 const t_satPhaseBias& satPhaseBias = it.next();
200 if (!epoTime.valid()) {
201 epoTime = satPhaseBias._time;
202 *out << "> PHASE_BIAS " << epoTime.datestr(' ') << ' ' << epoTime.timestr(1,' ') << " "
203 << biasList.size() << ' ' << satPhaseBias._staID << endl;
204 }
205 *out << satPhaseBias._prn.toString() << ' '
206 << setw(12) << setprecision(8) << satPhaseBias._yawDeg << ' '
207 << setw(12) << setprecision(8) << satPhaseBias._yawDegRate << " ";
208 for (unsigned ii = 0; ii < satPhaseBias._bias.size(); ii++) {
209 const t_frqPhaseBias& frqPhaseBias = satPhaseBias._bias[ii];
210 *out << " " << frqPhaseBias._rnxType2ch << ' '
211 << setw(10) << setprecision(4) << frqPhaseBias._value << ' '
212 << setw(3) << frqPhaseBias._fixIndicator << ' '
213 << setw(3) << frqPhaseBias._fixWideLaneIndicator << ' '
214 << setw(3) << frqPhaseBias._jumpCounter;
215 }
216 *out << endl;
217 }
218 out->flush();
219}
220
221//
222////////////////////////////////////////////////////////////////////////////
223void t_satPhaseBias::readEpoch(const string& epoLine, istream& inStream, QList<t_satPhaseBias>& biasList) {
224 bncTime epoTime;
225 int numSat;
226 string staID;
227 if (t_corrSSR::readEpoLine(epoLine, epoTime, numSat, staID) != t_corrSSR::phaseBias) {
228 return;
229 }
230 for (int ii = 0; ii < numSat; ii++) {
231 t_satPhaseBias satPhaseBias;
232 satPhaseBias._time = epoTime;
233
234 string line;
235 getline(inStream, line);
236 istringstream in(line.c_str());
237
238 in >> satPhaseBias._prn >> satPhaseBias._yawDeg >> satPhaseBias._yawDegRate;
239
240 while (in.good()) {
241 t_frqPhaseBias frqPhaseBias;
242 in >> frqPhaseBias._rnxType2ch >> frqPhaseBias._value
243 >> frqPhaseBias._fixIndicator >> frqPhaseBias._fixWideLaneIndicator
244 >> frqPhaseBias._jumpCounter;
245 if (!frqPhaseBias._rnxType2ch.empty()) {
246 satPhaseBias._bias.push_back(frqPhaseBias);
247 }
248 }
249
250 biasList.push_back(satPhaseBias);
251 }
252}
253
254//
255////////////////////////////////////////////////////////////////////////////
256void t_vTec::write(ostream* out, const t_vTec& vTec) {
257 if (!out || vTec._layers.size() == 0) {
258 return;
259 }
260 out->setf(ios::fixed);
261 bncTime epoTime = vTec._time;
262 *out << "> VTEC " << epoTime.datestr(' ') << ' ' << epoTime.timestr(1,' ') << " "
263 << vTec._layers.size() << ' ' << vTec._staID << endl;
264 for (unsigned ii = 0; ii < vTec._layers.size(); ii++) {
265 const t_vTecLayer& layer = vTec._layers[ii];
266 *out << setw(2) << ii+1 << ' '
267 << setw(2) << layer._C.Nrows() << ' '
268 << setw(2) << layer._C.Ncols() << ' '
269 << setw(10) << setprecision(1) << layer._height << endl
270 << setw(10) << setprecision(4) << layer._C
271 << setw(10) << setprecision(4) << layer._S;
272 }
273 out->flush();
274}
275
276//
277////////////////////////////////////////////////////////////////////////////
278void t_vTec::read(const string& epoLine, istream& inStream, t_vTec& vTec) {
279 bncTime epoTime;
280 int numLayers;
281 string staID;
282 if (t_corrSSR::readEpoLine(epoLine, epoTime, numLayers, staID) != t_corrSSR::vTec) {
283 return;
284 }
285 if (numLayers <= 0) {
286 return;
287 }
288 vTec._time = epoTime;
289 for (int ii = 0; ii < numLayers; ii++) {
290 t_vTecLayer layer;
291
292 string line;
293 getline(inStream, line);
294 istringstream in(line.c_str());
295
296 int dummy, maxDeg, maxOrd;
297 in >> dummy >> maxDeg >> maxOrd;
298
299 layer._C.ReSize(maxDeg, maxOrd);
300 layer._S.ReSize(maxDeg, maxOrd);
301
302 for (int iDeg = 0; iDeg < maxDeg; iDeg++) {
303 for (int iOrd = 0; iOrd < maxOrd; iOrd++) {
304 inStream >> layer._C[iDeg][iOrd];
305 }
306 }
307 for (int iDeg = 0; iDeg < maxDeg; iDeg++) {
308 for (int iOrd = 0; iOrd < maxOrd; iOrd++) {
309 inStream >> layer._S[iDeg][iOrd];
310 }
311 }
312
313 vTec._layers.push_back(layer);
314 }
315}
316
317//
318////////////////////////////////////////////////////////////////////////////
319t_corrSSR::e_type t_corrSSR::readEpoLine(const string& line, bncTime& epoTime,
320 int& numEntries, string& staID) {
321
322 istringstream inLine(line.c_str());
323
324 char epoChar;
325 string typeString;
326 int year, month, day, hour, min;
327 double sec;
328
329 inLine >> epoChar >> typeString
330 >> year >> month >> day >> hour >> min >> sec >> numEntries >> staID;
331
332 if (epoChar == '>') {
333 epoTime.set(year, month, day, hour, min, sec);
334 if (typeString == "CLOCK") {
335 return clkCorr;
336 }
337 else if (typeString == "ORBIT") {
338 return orbCorr;
339 }
340 else if (typeString == "CODE_BIAS") {
341 return codeBias;
342 }
343 else if (typeString == "PHASE_BIAS") {
344 return phaseBias;
345 }
346 else if (typeString == "VTEC") {
347 return vTec;
348 }
349 }
350
351 return unknown;
352}
Note: See TracBrowser for help on using the repository browser.