Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,4 @@ dependencies = [
"numpy",
"matplotlib",
"cartopy",
"pysolid",
]
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,3 @@ notebook
numpy
matplotlib
cartopy
pysolid
7 changes: 6 additions & 1 deletion src/cssrlib/cssr_has.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,13 @@ def decode_cnav(self, tow, vi):
continue
hass, res = bs.unpack_from('u2u2', buff, i)
i += 4
# HAS status
if hass >= 2: # 0:test,1:operational,2:res,3:dnu
continue
# mt: type of message
# mid: id of the message
# ms: size of non-encoded message in number of pages 0:1,...
# pid: id of the transmitted HAS encoded page
mt, mid, ms, pid = bs.unpack_from('u2u5u5u8', buff, i)

self.msgtype = mt
Expand All @@ -202,7 +207,7 @@ def decode_cnav(self, tow, vi):
if self.monlevel >= 2:
print(f"{mt} {mid} {ms} {pid}")

if len(self.rec) >= self.ms_:
if self.ms_ > 0 and len(self.rec) >= self.ms_:
if self.monlevel >= 2:
print(" data collected mid={:2d} ms={:2d} tow={:.0f}"
.format(self.mid_, self.ms_, tow))
Expand Down
13 changes: 8 additions & 5 deletions src/cssrlib/cssr_mdc.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ def find_grid_index(self, pos):
latd, lond = np.rad2deg(pos[0:2])
self.reg = self.area = -1

for reg in self.pnt.key():
for area in self.pnt[reg].key():
for reg in self.pnt.keys():
for area in self.pnt[reg].keys():
p = self.pnt[reg][area]
if p.sid == 0: # rectangle shape:
if p.latr-p.lats <= latd and latd <= p.latr+p.lats and \
Expand Down Expand Up @@ -102,14 +102,14 @@ def get_stec(self, dlat=0.0, dlon=0.0):
""" calculate STEC correction by interporation """
if self.inet < 0:
print("get_stec: region, area not defined.")
return 0.0
return np.zeros(self.nsat_n)

p = self.lc[self.inet]
# if p.inet_ref != self.iodssr:
# return 0.0
stec = np.zeros(self.nsat_n)
stec = np.zeros(p.nsat_n)

for i, sat in enumerate(self.sat_n):
for i, sat in enumerate(p.sat_n):
stec[i] = [1, dlat, dlon, dlat*dlon, dlat**2, dlon**2]@p.ci[sat]

return stec
Expand Down Expand Up @@ -148,6 +148,9 @@ def decode_mdc_stec_area(self, buff, i=0):
def get_inet(self, reg, area):
""" region, area to inet conversion """

if reg < 0 or area < 0:
return -1

inet = 0
for r in self.narea_t.keys():
if r >= reg:
Expand Down
11 changes: 11 additions & 0 deletions src/cssrlib/rawnav.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ def gep2time(N4, Nt, sod):


class RawNav():
""" Raw Navigation Message decoder """
def __init__(self, opt=None, prefix=''):
self.gps_lnav = {}
for k in range(uGNSS.GPSMAX):
Expand Down Expand Up @@ -1368,6 +1369,7 @@ def decode_irn_lnav(self, week, time, sat, msg):
return eph

def decode_irn_l1nav_iono_grid(self, msg, i):
""" NavIC L1NAV Ionosphere delay at grid points """
mask, regid = bs.unpack_from('u10u4', msg, i)
i += 14
for k in range(15):
Expand All @@ -1378,12 +1380,14 @@ def decode_irn_l1nav_iono_grid(self, msg, i):
return i

def decode_irn_l1nav_alm(self, msg, i):
""" NavIC L1NAV Almanac """
wna, e, toa, i0, OMGd, sqrtA, OMG0, omg, M0, af0, af1, prn_a = \
bs.unpack_from('u13u20u16s24s19u24s24s24s24s14s11u6', msg, i)
i += 243
return i

def decode_irn_l1nav_iono_nequick(self, msg, i):
""" NavIC L1NAV NeQuick Iono parameters """
for k in range(3):
modip_mac, modip_min, mlon_max, mlon_min, a0, a1, a2, idf = \
bs.unpack_from('s6s6s7s7u11s11s14u1', msg, i)
Expand All @@ -1394,6 +1398,7 @@ def decode_irn_l1nav_iono_nequick(self, msg, i):
return i

def decode_irn_l1nav_iono_klob(self, msg, i):
""" NavIC L1NAV Klobuchar like Iono parameters """
alp0, alp1, alp2, alp3 = \
bs.unpack_from('s8s8s10s12', msg, i)
i += 38
Expand All @@ -1407,12 +1412,14 @@ def decode_irn_l1nav_iono_klob(self, msg, i):
return i

def decode_irn_l1nav_eop(self, msg, i):
""" NavIC L1NAV Earth Orientation Parameters """
teop, pmx, pmxd, pmy, pmyd, dut1, dut1d = \
bs.unpack_from('u16s21s15s21s15s31s19', msg, i)
i += 138
return i

def decode_irn_l1nav_utc(self, msg, i):
""" NavIC L1NAV UTC parameters """
iodt, tug, wnug, dtls, wnlsf, dn, dtlsf = \
bs.unpack_from('u3u8u13s8u13u4s8', msg, i)
i += 57
Expand Down Expand Up @@ -1852,6 +1859,7 @@ def decode_glo_cdma(self, week, time, sat, buff, stype):
return geph

def decode_sbs_l1(self, week, tow, sat, msg):
""" SBAS L1 navigation message decoder """
ura_t = [2, 2.8, 4, 5.7, 8, 11.3, 16, 32,
64, 128, 256, 512, 1024, 2048, 4096, 0]

Expand Down Expand Up @@ -1896,6 +1904,7 @@ def decode_sbs_l1(self, week, tow, sat, msg):


class rcvOpt():
""" template class for receiver options """
flg_qzslnav = False
flg_gpslnav = False
flg_qzscnav = False
Expand Down Expand Up @@ -2058,6 +2067,7 @@ def init_sig_tab(self, gnss_t='GEJ'):
return sig_tab

def init_param(self, opt: rcvOpt, prefix=''):
""" initialize parameters and file handlers """
if opt.flg_rnxnav or opt.flg_rnxobs:
self.re = rnxenc(sig_tab=self.sig_tab)

Expand Down Expand Up @@ -2146,6 +2156,7 @@ def init_param(self, opt: rcvOpt, prefix=''):
# self.re.rnx_obs_header(self.fh_rnxobs)

def file_close(self):
""" close file handlers """
if self.fh_qzsl6 is not None:
self.fh_qzsl6.close()

Expand Down
10 changes: 10 additions & 0 deletions src/cssrlib/rinex.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,15 @@ def autoSubstituteSignals(self):
self.sig_tab[sys][typ][i] = sig.toAtt(a)

def flt(self, u, c=-1):
""" convert string to float """
if c >= 0:
u = u[19*c+4:19*(c+1)+4]
if u.isspace():
return 0.0
return float(u.replace("D", "E"))

def adjday(self, t: gtime_t, t0: gtime_t):
""" adjust time to within 1 day of t0 """
tt = timediff(t, t0)
if tt < -43200.0:
return timeadd(t, 86400.0)
Expand All @@ -138,6 +140,7 @@ def adjday(self, t: gtime_t, t0: gtime_t):
return t

def decode_time(self, s, ofst=0, slen=2):
""" decode time from string """
year = int(s[ofst+0:ofst+4])
month = int(s[ofst+5:ofst+7])
day = int(s[ofst+8:ofst+10])
Expand Down Expand Up @@ -783,6 +786,7 @@ def decode_clk(self, clkfile, nav):

# TODO: decode GLONASS FCN lines
def decode_obsh(self, obsfile):
""" decode RINEX Observation header from file """
self.fobs = open(obsfile, 'rt')
for line in self.fobs:
if line[60:73] == 'END OF HEADER':
Expand Down Expand Up @@ -997,6 +1001,7 @@ def __init__(self, sig_tab=None):
self.rec_eph = {}

def rnx_nav_header(self, fh=None, ver=4.02):
""" write RINEX navigation header to file """
tutc = timeget()
tgps = utc2gpst(tutc)
leaps = timediff(tgps, tutc)
Expand All @@ -1015,6 +1020,7 @@ def rnx_nav_header(self, fh=None, ver=4.02):
format("", "END OF HEADER"))

def rnx_obs_header(self, ts: gtime_t, fh=None, ver=4.02):
""" write RINEX observation header to file """

if self.rnx_obs_header_sent:
return
Expand Down Expand Up @@ -1119,6 +1125,7 @@ def sval(self, v: float):
return s

def rnx_obs_body(self, obs=None, fh=None):
""" write RINEX observation message to file """

ep = time2epoch(obs.time)
nsat = len(obs.sat)
Expand Down Expand Up @@ -1152,6 +1159,7 @@ def rnx_obs_body(self, obs=None, fh=None):
fh.write("\n")

def rnx_nav_body(self, eph=None, fh=None):
""" write RINEX navigation message to file """
if eph.sat in self.rec_eph.keys():
if eph.mode in self.rec_eph[eph.sat].keys() and \
self.rec_eph[eph.sat][eph.mode][0] == eph.iode:
Expand Down Expand Up @@ -1332,6 +1340,7 @@ def rnx_nav_body(self, eph=None, fh=None):
format(tot_, "", "", ""))

def rnx_gnav_body(self, geph=None, fh=None):
""" write RINEX navigation message for GLONASS to file """
if geph.sat in self.rec_eph.keys():
if geph.mode in self.rec_eph[geph.sat].keys() and \
self.rec_eph[geph.sat][geph.mode][0] == geph.iode:
Expand Down Expand Up @@ -1403,6 +1412,7 @@ def rnx_gnav_body(self, geph=None, fh=None):
tot_))

def rnx_snav_body(self, seph=None, fh=None):
""" write RINEX navigation message for SBAS to file """
if seph.sat in self.rec_eph.keys():
if seph.mode in self.rec_eph[seph.sat].keys() and \
self.rec_eph[seph.sat][seph.mode][0] == seph.iodn:
Expand Down
Loading