source: ntrip/trunk/GnssCenter/thrift/rtnet_sdo_example/thrift_template/rtnet_data.thrift@ 10590

Last change on this file since 10590 was 4941, checked in by mervart, 12 years ago
File size: 11.9 KB
Line 
1namespace cpp com.gpssolutions.rtnet
2namespace java com.gpssolutions.rtnet
3namespace perl gpss
4
5struct PosNEU {
6 1: double n, // north (meters)
7 2: double e, // east (meters)
8 3: double u // up (meters)
9}
10
11struct PosXYZ {
12 1: double x, // x (meters)
13 2: double y, // y (meters)
14 3: double z // z (meters)
15}
16
17struct StationInfo {
18 1: string ID,
19 2: PosNEU sigma0,
20 3: PosNEU sigmaNoise,
21 4: PosXYZ xyz,
22}
23
24struct StationAuxInfo {
25 1: string ID,
26 2: string receiverID,
27 3: string antennaID,
28 4: PosNEU eccentricity,
29}
30
31enum ConstellationType {
32 GPS = 1,
33 GLONASS = 2,
34 SBAS = 3,
35 GALILEO = 4,
36 QZSS = 5,
37 COMPASS = 6,
38}
39
40// consider adding health flags
41struct SatelliteXYZ {
42 1: byte ID,
43 2: ConstellationType constellation,
44 3: PosXYZ xyz,
45// 4: double lon,
46// 5: double lat
47}
48
49enum FrequencyType {
50 // GPS phase
51 Gp1=1,
52 Gp2=2,
53 Gp5=3,
54 GpIF=4,
55 GpGF=5,
56 GpWL=6,
57 GpMW=7,
58
59 // Galileo phase
60 Ep1=8,
61 Ep5=9,
62 Ep6=10,
63 Ep7=11,
64 Ep8=12,
65 EpIF=13,
66 EpGF=14,
67 EpWL=15,
68 EpMW=16,
69
70 // GLONASS phase
71 Rp1=17,
72 Rp2=18,
73 RpIF=19,
74 RpGF=20,
75 RpWL=21,
76 RpMW=22,
77
78 // GPS code
79 Gc1=23,
80 Gc2=24,
81 Gc5=25,
82 GcIF=26,
83 GcGF=27,
84
85 // Galileo code
86 Ec1=28,
87 Ec5=29,
88 Ec6=30,
89 Ec7=31,
90 Ec8=32,
91 EcIF=33,
92 EcGF=34,
93
94 // GLONASS code
95 Rc1=35,
96 Rc2=36,
97 RcIF=37,
98 RcGF=38,
99
100 // GPS doppler
101 Gd1=39,
102 Gd2=40,
103}
104
105struct ZDAmb {
106 1: byte satelliteID,
107 2: ConstellationType constellation,
108 3: string stationID,
109 4: FrequencyType frequency,
110 5: bool constrainedFlag,
111 6: i16 duration,
112 7: bool hasObsFlag,
113 10: bool isNewAmb,
114 11: bool isResetAmbL1p,
115 12: bool isResetAmbClock,
116 8: optional double azimuth,
117 9: optional double elevation,
118}
119
120enum AmbresStatus
121{
122 AmbFloat = 1,
123 AmbFixed = 2,
124 AmbDumped = 3
125}
126
127struct DDAmbres
128{
129 1: byte satelliteID,
130 2: ConstellationType constellation,
131 3: AmbresStatus statusFlag,
132 4: bool hasObsFlag,
133}
134
135struct DDAmbresBaseline
136{
137 1: string stationID_1,
138 2: string stationID_2,
139 3: bool redundant,
140 4: optional list<DDAmbres> wideLaneStatisticList,
141 5: optional list<DDAmbres> narrowLaneStatisticList,
142 6: optional list<DDAmbres> l1StatisticList,
143 7: optional list<DDAmbres> l2StatisticList,
144}
145
146/*struct DDAmbresStatistic {
147 1: list<DDAmbresBaseline> baselineList
148}*/
149
150/**
151 * Stores information about rtnet job.
152 * For now, it only stores the rtnet job's name (should be unique).
153 * Eventually, may store other useful information such as the
154 * input file contents, the name of who started the job, etc.
155 */
156struct RtnetInformation {
157 1: string jobName
158}
159
160// Data needed for plots
161
162struct SatelliteClock {
163 1: byte satelliteID,
164 2: ConstellationType constellation,
165 3: double clock, // satellite clock estimate (s)
166 4: double clock_err, // satellite clock error (s)
167}
168
169struct DGPSCorr {
170 1: byte satelliteID,
171 2: ConstellationType constellation,
172 3: double a0, // non-dispersive correction (ie, clock)
173 4: double a0e, // formal error for a0
174 5: double aN, // non-dispersive correction, N-S gradient
175 6: double aE, // non-dispersive correction, E-W gradient
176 7: double i0, // dispersive correction
177 8: double iN, // dispersive correction, N-S gradient
178 9: double iE, // dispersive correction, E-W gradient
179 10: i16 nsdfix, // number of stations with fixed ZD ambiguity
180 11: i16 nsta, // number of stations
181 12: i16 cjumpCnt, // correction jump counter
182 13: double deltaMW, // MW bias
183 14: double deltaP3, // P3 bias
184 15: double te0, // vertical TEC
185 16: double teN, // vertical TEC, N-S gradient
186 17: double teE, // vertical TEC, E-W gradient
187 18: double teNN, // vertical TEC, gradient, 2nd order
188 19: double teEE, // vertical TEC, gradient, 2nd order
189 20: double teNE, // vertical TEC, gradient, 2nd order
190 21: optional double d0, // P4 system (not used)
191 22: optional double dN, // P4 system (not used)
192 23: optional double dE, // P4 system (not used)
193}
194
195enum SolutionQuality {
196 NoData=0, // No data for receiver for the epoch. In network mode, may also mean
197 // unable to create a baseline to a fixed station.
198 LowNsv=1, // Not enough SVs or solution has very high formal error
199 NoCorrection=2, // Have a solution but no correction values (legacy from P4)
200 HighRMS=3, // Have a solution with correction values, but the RMS is high
201 LowRMS=4, // Have a solution with correction values with a good RMS
202}
203
204struct StationPosition {
205 1: double x, // x position (m) (a-priori + estimate)
206 2: double xe, // x error (m)
207 3: double y, // y position (m) (a-priori + estimate)
208 4: double ye, // y error (m)
209 5: double z, // z position (m) (a-priori + estimate)
210 6: double ze, // z error (m)
211 7: double eh, // ellipsoid height (m)
212 8: double ehe, // ellipsoid height error (m)
213 9: double dn, // north position (m)
214 10: double dne, // north position error (m)
215 11: double de, // east position (m)
216 12: double dee, // east position error (m)
217 13: double dh, // height position (m)
218 14: double dhe, // height position error (m)
219 15: double GDOP, // (m)
220 16: double PDOP, // (m)
221 17: byte nsv_gps_used, // number of GPS satellites used in position calculation
222 18: byte nsv_glonass_used, // number of GLONASS satellites used in position calculation
223 19: SolutionQuality qFlag, // flag used to estimate quality of solution
224}
225
226struct SatelliteEleAzi {
227 1: byte ID, // satellite PRN/slot number
228 2: ConstellationType constellation,
229 3: double elevation, // elevation in degrees
230 4: double azimuth // azimuth in degrees
231}
232
233enum LinearCombination {
234 L1 = 1,
235 L2 = 2,
236 L3 = 3,
237 L1L2 = 4,
238 IF = 5,
239 GF = 6,
240 MW = 7,
241 MWIF = 8,
242 PL = 9, // (P1+L1)/2 (ionospheric-free)
243 WL = 10,
244}
245
246enum ProcessedLC {
247 Gp1, Gp2, Gp5, GpIF, GpGF, GpWL, GpMW, // GPS Phase
248 Ep1, Ep5, Ep6, Ep7, Ep8, EpIF, EpGF, EpWL, EpMW, // Galileo Phase
249 Rp1, Rp2, RpIF, RpGF, RpWL, RpMW, // Glonass Phase
250 Gc1, Gc2, Gc5, GcIF, GcGF, // GPS Code
251 Ec1, Ec5, Ec6, Ec7, Ec8, EcIF, EcGF, // Galileo Code
252 Rc1, Rc2, RcIF, RcGF, // Glonass Code
253 Gd1, Gd2, // GPS Doppler
254 GpPL, // GPS (P1+L1)/2
255 RpPL, // GLONASS (P1+L1)/2
256 invalidLC
257}
258
259struct ObservationMarkCount {
260 1: byte n_mark_none, // 0 (not marked)
261 2: byte n_mark_mis, // 1 (missing marked -- if processing dual-frequency data, marked if one frequency is missing)
262 3: byte n_mark_ele, // 2 (elevation marked)
263 4: byte n_mark_cor, // 3 (DGPS correction marked)
264 5: byte n_mark_orb, // 4 (orbit marked)
265 6: byte n_mark_unp, // 5 (unpaired observable between LC1 and LC2)
266 7: byte n_mark_ca, // 6 (CA marked)
267 8: byte n_mark_out, // 7 (outlier)
268 9: byte n_mark_crx, // 8 (SATCRUX marked)
269 10: byte n_mark_iod, // 9 (not used by current version of rtnet)
270 11: byte n_mark_dcb, // 10 (satellite DCB marked)
271 12: byte n_mark_few, // 11 (not used by current version of rtnet)
272 13: byte n_mark_blu, // 12 (blunder marked -- something to do with outlier detection. Perhaps if set, internal logic error in rtnet?)
273 14: byte n_mark_ban, // 13 (not enough satellites for Bancroft solution)
274 15: byte n_mark_l1m, // 14 (L1 missing)
275 16: byte n_mark_l1i, // 15 (not used by current version of rtnet)
276 17: byte n_mark_ion, // 16 (ionospheric delay marked)
277 18: byte n_mark_trp, // 17 (troposphere marked)
278 19: byte n_mark_glo, // 18 (GLONASS phase marked because channel number is unknown)
279 20: byte n_mark_exc, // 19 (satellite excluded from processing by user or because satellite is unhealthy)
280 21: byte n_mark_hlt, // 20 (not used by current version of rtnet)
281 22: byte n_mark_old, // 21 (marked because orbit is too old)
282 23: byte n_mark_rho, // 22 (computing range to satellite failed--solution did not converge)
283 24: byte n_mark_oth, // 23 (other marked)
284}
285
286struct SvResidualInfo {
287 1: byte ID, // satellite PRN/slot number
288 2: ConstellationType constellation,
289 3: double residual, // meters
290}
291
292struct ResidualInfo {
293 1: ProcessedLC lc,
294 2: double meanResid,
295 3: double pv,
296 4: list<SvResidualInfo> svResid,
297}
298
299struct StationResults {
300 1: string stationName,
301 2: LinearCombination lc, // linear combination of solution
302 // number of observations
303 3: byte n_p1, // # of P1 observations
304 4: byte n_l1, // # of L1 observations
305 5: byte n_p2, // # of P2 observations
306 6: byte n_l2, // # of L2 observations
307 7: byte n_g1, // # of G1 observations (GLONASS P1)
308 8: byte n_g2, // # of G2 observations (GLONASS P2)
309 9: list<SatelliteEleAzi> svPosList, // list of satellites used in calculation
310 10: double rcv_clk, // receiver clock (m)
311 11: double rcv_clke, // receiver clock error (m)
312 12: double GDOP, // GDOP obtained with satellites used in processing
313 13: double PDOP, // PDOP obtained with satellites used in processing
314 // number of observations for each mark (including mark_none, ie, not marked)
315 14: ObservationMarkCount n_mark_p1,
316 15: ObservationMarkCount n_mark_l1,
317 16: ObservationMarkCount n_mark_p2,
318 17: ObservationMarkCount n_mark_l2,
319 18: ObservationMarkCount n_mark_l3,
320 // station position and estimates
321 19: optional StationPosition filtered_result, // primary position solution (optional because station could be fixed)
322 20: optional StationPosition se_result, // single epoch result
323 // troposphere data
324 21: optional double ztd, // zenith delay (m)
325 22: optional double ztde, // zenith delay error (m)
326 23: list<ResidualInfo> residList, // residual information for each LC
327}
328// satellite elevation and azimuth (list)
329
330enum MissingEpochData
331{
332 NoError = 0, // solution was generated
333 MissingAllStationObservation = 1, // no station observations available
334 MissingOrbit = 2, // no orbit information available
335 MissingCorrection = 3, // correction is unavailable
336 KalmanFilterFailed = 4, // Kalman filter step failed
337}
338
339enum MissingStationData
340{
341 NoError = 0, // station could be processed
342 StationFixed = 1, // no position result because station is fixed
343 MissingStationObservation = 2, // no observations available for station
344 TooFewBancroft = 3, // not enough satellites to generate Bancroft solution
345 MissingStationInfo = 4, // station missing from coordinate file
346 MissingAntennaInfo = 5, // station's antenna not present in ATX file
347 // (if this is an immediate error by rtnet, this flag isn't needed)
348 StationUserMarked = 6, // station was removed from processing by user
349}
350
351struct RtnetEpoch {
352 1: i16 mjlDay, // MJL day of epoch
353 2: i32 msecDay, // time of day (msec)
354 3: list<StationResults> stationResultList, // set for each linear combination
355 4: MissingEpochData missing, // set to NoError if data is present,
356 // otherwise solution could not be generated because of specified reason
357 5: map<string,MissingStationData> dataAvailableList, // flag for each station in STALIST
358 6: i32 processTime, // process time (dt), msec
359 7: i32 compTime, // computation time (dt_proc), msec
360 8: i32 latency, // latency, msec
361}
362
363// Needed for plots
364//Per station data:
365//X Troposphere: quality flag, ztda, ztd, ztde
366//X Number of observations per station (ie, # P1, # L1, # L2, # G1, etc)
367//X GDOP, PDOP, # sv_used
368//X mres, pv, res_code_flag
369//X x, xi, xe, y, yi, ye, z, zi, ze, dn, dne, de, dee, dh, dhe
370//X receiver clk, clki, clke
371//List of satellites used
372//# new ambiguities, # clock resets, # L1 ambiguity resets
373
374//# of each mark flag for P1, L1 and L2
375//-- so perhaps 10 mark 0s for P1, 2 mark 3s for P1, 10 mark 0s for L1, etc.
376
377// other ideas:
378// Send basic input file information or entire input file.
379// Send current file used for orbits (or host/port if using external orbits).
380
381
382//----
383//Data latency per epoch. Processing time per step.
384//slant delay (maybe same as mres) (per station, per satellite, per LC, per epoch)
385
Note: See TracBrowser for help on using the repository browser.