-
-
Notifications
You must be signed in to change notification settings - Fork 99
Description
Given a snippet like this:
from georinex import load as load_rinex
CONSTELLATIONS = ["G", "E", "C"]
ds_igs_nav = load_rinex(p, use=CONSTELLATIONS)
Problem 1
ds will have different sets of data_vars based on the set of constellations observed in the rinex file
Problem 2
if reading a file which contains no observations for G, E, or C constellations -- then the dtype of the dim's on the returned ds_igs_nav will also be incorrect.
This example rinex file containing only QZSS sats is enough to demonstrate both issues. If we include some galileo observations in the mix -- then only problem 1 is observable.
3.05 N: GNSS NAV DATA M: Mixed RINEX VERSION / TYPE
BNC 2.13.1 gremlin 20250622 005502 UTC PGM / RUN BY / DATE
Source: RTCM_3.3 caster.cddis.eosdis.nasa.gov/BCEP00BKG0 COMMENT
Source: RTCM_3.1 caster.cddis.eosdis.nasa.gov/SSRA03IGS1 COMMENT
Source: RTCM_3.1 products.igs-ip.net/IONO00UPC1 COMMENT
END OF HEADER
S29 2025 06 22 00 55 28 1.238659024239e-07 1.091393642128e-11 9.999000000000e+08
-2.537621472000e+04 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
3.367537432000e+04 0.000000000000e+00 0.000000000000e+00 8.192000000000e+03
0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.500000000000e+01
S37 2025 06 22 00 55 12-7.636845111847e-08 0.000000000000e+00 9.999000000000e+08
-2.539903304000e+04-5.250000000000e-04 0.000000000000e+00 0.000000000000e+00
3.364869376000e+04-8.243750000000e-04 0.000000000000e+00 8.192000000000e+03
-9.180000000000e-01-2.432000000000e-03 0.000000000000e+00 1.500000000000e+01
S23 2025 06 22 00 55 44 0.000000000000e+00 0.000000000000e+00 9.999000000000e+08
3.866796400000e+04 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
1.681330800000e+04 0.000000000000e+00 0.000000000000e+00 8.192000000000e+03
0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 4.600000000000e+01
S36 2025 06 22 00 55 44 0.000000000000e+00 0.000000000000e+00 9.999000000000e+08
4.200368800000e+04 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
3.674846960000e+03 0.000000000000e+00 0.000000000000e+00 8.192000000000e+03
0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.700000000000e+01
S31 2025 06 22 00 56 32 2.188608050346e-08 1.000444171950e-11 9.999000000000e+08
-1.913726576000e+04-1.250000000000e-05 2.500000000000e-08 0.000000000000e+00
-3.757228064000e+04 1.393750000000e-04-1.250000000000e-08 2.000000000000e+00
-2.694800000000e+00-4.400000000000e-05 0.000000000000e+00 1.420000000000e+02
S32 2025 06 22 00 56 32 0.000000000000e+00 0.000000000000e+00 9.999000000000e+08
-2.552879520000e+03-1.370625000000e-03-1.500000000000e-07 0.000000000000e+00
4.207820216000e+04-1.043750000000e-03 6.250000000000e-08 8.192000000000e+03
5.005080000000e+01-6.240000000000e-04-2.500000000000e-07 1.500000000000e+01
S33 2025 06 22 00 56 32-1.676380634308e-08 3.637978807092e-12 9.999000000000e+08
-2.662825448000e+04-2.012500000000e-04 1.250000000000e-08 0.000000000000e+00
-3.269443416000e+04 1.643750000000e-04 1.250000000000e-08 2.000000000000e+00
1.447880000000e+01-1.900000000000e-03-6.250000000000e-08 2.250000000000e+02
S35 2025 06 22 00 56 32-2.887099981308e-08-3.637978807092e-12 9.999000000000e+08
-2.417475784000e+04-9.375000000000e-05 0.000000000000e+00 0.000000000000e+00
-3.454393352000e+04-4.881250000000e-04 1.250000000000e-08 2.000000000000e+00
4.530800000000e+00-1.196000000000e-03 0.000000000000e+00 3.500000000000e+01
S27 2025 06 22 00 56 32 7.273629307747e-07 3.365130396560e-11 9.999000000000e+08
2.412546288000e+04-8.181250000000e-04 1.000000000000e-07 0.000000000000e+00
3.456707688000e+04 7.462500000000e-04 5.000000000000e-08 8.192000000000e+03
-8.471196000000e+02-1.744800000000e-02 4.500000000000e-06 1.500000000000e+01
S28 2025 06 22 00 56 32 5.122274160385e-08 4.547473508865e-11 9.999000000000e+08
5.093251200000e+03-5.237500000000e-04 5.000000000000e-08 0.000000000000e+00
4.185416112000e+04 2.975000000000e-04 5.000000000000e-08 4.096000000000e+03
4.929160000000e+01 5.880000000000e-04-2.500000000000e-07 1.400000000000e+01
S48 2025 06 22 00 55 12 0.000000000000e+00 0.000000000000e+00 9.999000000000e+08
-3.168728032000e+04-1.089375000000e-03 0.000000000000e+00 0.000000000000e+00
2.780853152000e+04-7.062500000000e-05 0.000000000000e+00 2.000000000000e+00
-1.115480000000e+01 6.160000000000e-04 0.000000000000e+00 0.000000000000e+00
S37 2025 06 22 00 56 16-7.636845111847e-08 0.000000000000e+00 9.999000000000e+08
-2.539906680000e+04-5.293750000000e-04 0.000000000000e+00 0.000000000000e+00
3.364864096000e+04-8.237500000000e-04 0.000000000000e+00 8.192000000000e+03
-1.074000000000e+00-2.432000000000e-03 0.000000000000e+00 1.500000000000e+01
S29 2025 06 22 00 56 32 1.238659024239e-07 1.091393642128e-11 9.999000000000e+08
-2.537621472000e+04 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
3.367537432000e+04 0.000000000000e+00 0.000000000000e+00 8.192000000000e+03
0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.500000000000e+01
S37 2025 06 22 00 57 04-7.636845111847e-08 0.000000000000e+00 9.999000000000e+08
-2.539909224000e+04-5.325000000000e-04 0.000000000000e+00 0.000000000000e+00
3.364860144000e+04-8.237500000000e-04 0.000000000000e+00 8.192000000000e+03
-1.190800000000e+00-2.432000000000e-03 0.000000000000e+00 1.500000000000e+01
S29 2025 06 22 00 57 20 1.238659024239e-07 1.091393642128e-11 9.999000000000e+08
-2.537621472000e+04 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
3.367537432000e+04 0.000000000000e+00 0.000000000000e+00 8.192000000000e+03
0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.500000000000e+01
S21 2025 06 22 00 57 52 0.000000000000e+00 0.000000000000e+00 9.999000000000e+08
4.200468400000e+04 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
-3.674932960000e+03 0.000000000000e+00 0.000000000000e+00 8.192000000000e+03
0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 9.600000000000e+01
S48 2025 06 22 00 57 20 0.000000000000e+00 0.000000000000e+00 9.999000000000e+08
-3.168741936000e+04-1.083125000000e-03 0.000000000000e+00 0.000000000000e+00
2.780852336000e+04-5.750000000000e-05 0.000000000000e+00 2.000000000000e+00
-1.107560000000e+01 6.240000000000e-04 0.000000000000e+00 0.000000000000e+00
S37 2025 06 22 00 58 08-7.636845111847e-08 0.000000000000e+00 9.999000000000e+08
-2.539912648000e+04-5.368750000000e-04 0.000000000000e+00 0.000000000000e+00
3.364854880000e+04-8.231250000000e-04 0.000000000000e+00 8.192000000000e+03
-1.346400000000e+00-2.432000000000e-03 0.000000000000e+00 1.500000000000e+01
S29 2025 06 22 00 58 24 1.238659024239e-07 1.091393642128e-11 9.999000000000e+08
-2.537621472000e+04 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
3.367537432000e+04 0.000000000000e+00 0.000000000000e+00 8.192000000000e+03
0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.500000000000e+01
S23 2025 06 22 00 58 24 0.000000000000e+00 0.000000000000e+00 9.999000000000e+08
3.866796400000e+04 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
1.681330800000e+04 0.000000000000e+00 0.000000000000e+00 8.192000000000e+03
0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 4.700000000000e+01
S36 2025 06 22 00 58 24 0.000000000000e+00 0.000000000000e+00 9.999000000000e+08
4.200368800000e+04 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
3.674846960000e+03 0.000000000000e+00 0.000000000000e+00 8.192000000000e+03
0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.800000000000e+01
S37 2025 06 22 00 59 12-7.636845111847e-08 0.000000000000e+00 9.999000000000e+08
-2.539916096000e+04-5.412500000000e-04 0.000000000000e+00 0.000000000000e+00
3.364849608000e+04-8.225000000000e-04 0.000000000000e+00 8.192000000000e+03
-1.502000000000e+00-2.432000000000e-03 0.000000000000e+00 1.500000000000e+01
S29 2025 06 22 00 59 28 1.238659024239e-07 1.091393642128e-11 9.999000000000e+08
-2.537621472000e+04 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
3.367537432000e+04 0.000000000000e+00 0.000000000000e+00 8.192000000000e+03
0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.500000000000e+01
Here we can observe that the dtype of the time and sv coords are both float64 (rather than the expected <M8[ns], and <U5 -- aditionall the set of data_vars is empty (outside of the one
ds_igs_nav.time.dtype: dtype('float64') (Float64DType) len=0
ds_igs_nav.sv.dtype: dtype('float64') (Float64DType) len=0
If we look at another file containing just QZSS and galileo -- we see that data_vars for constellations like gps and beidou will be missing
ds_igs_nav.data_vars.keys(): (
KeysView(Data variables:
SVclockBias (time, sv) float64 640B nan nan ... -0.0004123 -0.0004123
SVclockDrift (time, sv) float64 640B nan nan ... -5.357e-12 -5.357e-12
SVclockDriftRate (time, sv) float64 640B nan nan nan nan ... 0.0 0.0 0.0
IODnav (time, sv) float64 640B nan nan nan ... 115.0 115.0 115.0
Crs (time, sv) float64 640B nan nan nan ... -132.9 -132.9
DeltaN (time, sv) float64 640B nan nan ... 2.613e-09 2.613e-09
M0 (time, sv) float64 640B nan nan nan ... 1.804 1.804
Cuc (time, sv) float64 640B nan nan ... -6.134e-06 -6.134e-06
Eccentricity (time, sv) float64 640B nan nan ... 0.0001619 0.0001619
Cus (time, sv) float64 640B nan nan ... 2.496e-06 2.496e-06
sqrtA (time, sv) float64 640B nan nan ... 5.441e+03 5.441e+03
Toe (time, sv) float64 640B nan nan ... 6.024e+05 6.024e+05
Cic (time, sv) float64 640B nan nan ... -2.235e-08 -2.235e-08
Omega0 (time, sv) float64 640B nan nan nan ... 1.535 1.537 1.537
Cis (time, sv) float64 640B nan nan ... 1.676e-08 1.676e-08
Io (time, sv) float64 640B nan nan nan ... 0.9992 0.9992
Crc (time, sv) float64 640B nan nan nan ... 307.9 301.6 301.6
omega (time, sv) float64 640B nan nan nan ... 0.5118 0.5118
OmegaDot (time, sv) float64 640B nan nan ... -5.659e-09 -5.659e-09
IDOT (time, sv) float64 640B nan nan ... -1.632e-10 -1.632e-10
DataSrc (time, sv) float64 640B nan nan nan ... 258.0 517.0 258.0
GALWeek (time, sv) float64 640B nan nan ... 2.371e+03 2.371e+03
spare0 (time, sv) float64 640B nan nan nan nan ... 0.0 0.0 0.0
SISA (time, sv) float64 640B nan nan nan nan ... 3.12 3.12 3.12
health (time, sv) float64 640B nan nan nan nan ... 0.0 0.0 0.0
BGDe5a (time, sv) float64 640B nan nan ... 4.424e-09 4.424e-09
BGDe5b (time, sv) float64 640B nan nan nan ... 0.0 5.355e-09 0.0
TransTime (time, sv) float64 640B nan nan ... 9.999e+08 9.999e+08
spare1 (time, sv) float64 640B nan nan nan nan ... nan nan nan
spare2 (time, sv) float64 640B nan nan nan nan ... nan nan nan
spare3 (time, sv) float64 640B nan nan nan nan ... nan nan nan
filepath <U38 152B 'nav/BRDC00WRD_S_20251722330_05M_MN.rnx')
This kind of variation actually leads to some subtle bugs and necessitates some annoying workarounds when handling data loaded that varies in these ways based on the contents of the files -- particularly if you write logic in development scenarios where either all constellations or at least one of the expected constellations is observed in each file.
It would be nice if the data types were always the same and the set of data_vars was always complete with respect to the set of constellation arguments passed to use= -- regardless of the presence or absence of any specific constellations in the actual file read.