Skip to content

Commit e4645be

Browse files
committed
- corrected STEC correction in MADOCA-PPP.
- added log for cssr_mdc.
1 parent 3edd775 commit e4645be

File tree

3 files changed

+59
-6
lines changed

3 files changed

+59
-6
lines changed

src/cssrlib/cssr_mdc.py

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import numpy as np
1111
import bitstruct as bs
1212
from cssrlib.cssrlib import cssr, sCSSRTYPE, sCSSR, local_corr, sCType
13-
from cssrlib.gnss import gpst2time, uGNSS, prn2sat, rCST
13+
from cssrlib.gnss import gpst2time, time2str, uGNSS, prn2sat, rCST, sat2id
1414

1515

1616
class areaInfo():
@@ -46,6 +46,8 @@ def __init__(self, foutname=None):
4646
self.ci = {}
4747

4848
self.area = -1
49+
self.reg = -1
50+
self.alrt = 0
4951
self.narea_t = {1: 8, 2: 16, 3: 5, 4: 1, 5: 8}
5052
self.MAXNET = np.sum(list(self.narea_t.values()))
5153

@@ -108,9 +110,10 @@ def get_stec(self, dlat=0.0, dlon=0.0):
108110
# if p.inet_ref != self.iodssr:
109111
# return 0.0
110112
stec = np.zeros(p.nsat_n)
113+
v = np.array([1, dlat, dlon, dlat*dlon, dlat**2, dlon**2])
111114

112115
for i, sat in enumerate(p.sat_n):
113-
stec[i] = [1, dlat, dlon, dlat*dlon, dlat**2, dlon**2]@p.ci[sat]
116+
stec[i] = v@p.ci[sat]
114117

115118
return stec
116119

@@ -121,6 +124,9 @@ def decode_mdc_stec_area(self, buff, i=0):
121124
self.tow0 = tow//3600*3600
122125
reg, alrt, len_, narea = bs.unpack_from('u8u1u16u5', buff, i)
123126
i += 30
127+
self.reg = reg
128+
self.alrt = alrt
129+
124130
if reg not in self.pnt:
125131
self.pnt[reg] = {}
126132

@@ -130,14 +136,14 @@ def decode_mdc_stec_area(self, buff, i=0):
130136

131137
if sid == 0: # rectangle shape
132138
latr, lonr, lats, lons = bs.unpack_from('s11u12u8u8', buff, i)
133-
if self.monlevel > 2:
139+
if self.monlevel >= 2:
134140
print(f"{reg} {area:2d} {sid} {latr*0.1:5.1f} "
135141
f"{lonr*0.1:5.1f} {lats*0.1:3.1f} {lons*0.1:3.1f}")
136142
self.pnt[reg][area] = areaInfo(
137143
sid, latr*0.1, lonr*0.1, lats*0.1, lons*0.1)
138144
else: # circle range
139145
latr, lonr, rng = bs.unpack_from('s15u16u8', buff, i)
140-
if self.monlevel > 2:
146+
if self.monlevel >= 2:
141147
print(f"{reg} {area:2d} {sid} {latr*0.01:6.2f} "
142148
f"{lonr*0.01:6.2f} {rng*10}")
143149
self.pnt[reg][area] = areaInfo(
@@ -168,6 +174,9 @@ def decode_mdc_stec_corr(self, buff, i=0):
168174
reg, area, stype_ = bs.unpack_from('u8u5u2', buff, i)
169175
i += 15
170176

177+
self.reg = reg
178+
self.area = area
179+
171180
nsat = bs.unpack_from('u5u5u5u5u5', buff, i)
172181
i += 25
173182
# gps, glo, gal, bds, qzss
@@ -224,6 +233,48 @@ def decode_mdc_stec_corr(self, buff, i=0):
224233

225234
return i
226235

236+
def out_log(self):
237+
# if self.msgtype not in (1, 2):
238+
# return super(cssr_mdc, self).out_log()
239+
240+
sz_t = [1, 3, 4, 6]
241+
242+
if self.time == -1:
243+
return
244+
245+
self.fh.write("{:4d}\t{:s}\n".format(self.msgtype,
246+
time2str(self.time)))
247+
248+
if self.msgtype == 1:
249+
250+
self.fh.write(f"Reg\tArea\tsid\t"
251+
f"latr\tlonr\tlats\tlons\n")
252+
253+
for area in self.pnt[self.reg].keys():
254+
p = self.pnt[self.reg][area]
255+
self.fh.write(f"{self.reg}\t{area:2d}\t{p.sid}\t"
256+
f"{p.latr:3.1f}\t{p.lonr:4.1f}\t")
257+
258+
if p.sid == 0:
259+
self.fh.write(f"{p.lats:3.1f}\t{p.lons:3.1f}\n")
260+
else:
261+
self.fh.write(f"{p.rng:3.1f}\n")
262+
263+
elif self.msgtype == 2:
264+
inet = self.get_inet(self.reg, self.area)
265+
266+
self.fh.write(f"Reg:{self.reg}\tArea:{self.area:2d}\n")
267+
self.fh.write("Sat,stype,c00,c01,c10,c11,c20,c02\n")
268+
269+
for sat in self.lc[inet].sat_n:
270+
stype = self.lc[inet].stype[sat]
271+
ci = self.lc[inet].ci[sat]
272+
self.fh.write(f"{sat2id(sat)}\t{stype}")
273+
for k in range(sz_t[stype]):
274+
self.fh.write(f"\t{ci[k]:6.2f}")
275+
self.fh.write("\n")
276+
self.fh.flush()
277+
227278
def decode_cssr(self, msg, i=0):
228279
"""decode Compact SSR message with MADOCA-PPP extension """
229280
df = {'msgtype': 4073}
@@ -233,6 +284,7 @@ def decode_cssr(self, msg, i=0):
233284
if df['msgtype'] not in [1, 2, 4073]:
234285
return -1
235286

287+
self.msgtype = df['msgtype']
236288
self.subtype = df['subtype']
237289
if df['msgtype'] == 4073: # Compact SSR
238290
if self.subtype == sCSSR.MASK:

src/cssrlib/cssrlib.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ def __init__(self, foutname=None):
282282
self.sid = -1
283283
self.cstat = 0
284284
self.local_pbias = True # for QZS CLAS
285-
self.buff = bytearray(250*5)
285+
self.buff = bytearray(250*10)
286286
self.buff_p = None
287287
self.sinfo = bytearray(160)
288288
self.grid = None
@@ -1316,7 +1316,7 @@ def decode_l6msg(self, msg, ofst):
13161316
if l6head['sid'] == 1:
13171317
self.fcnt = 0
13181318
self.buff_p = copy.copy(self.buff)
1319-
self.buff = bytearray(250*5)
1319+
self.buff = bytearray(250*10)
13201320

13211321
if l6head['vendor'] == 5: # CLAS
13221322
facility = facility_t[l6head['pt']][l6head['facility']]

src/cssrlib/pppssr.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,7 @@ def zdres(self, obs, cs, bsx, rs, vs, dts, rr, rtype=1):
497497
if self.nav.trop_opt == 2 or self.nav.iono_opt == 2: # from cssr
498498
inet = cs.find_grid_index(pos)
499499
dlat, dlon = cs.get_dpos(pos)
500+
cs.inet = inet
500501
else:
501502
inet = -1
502503

0 commit comments

Comments
 (0)