From 1be46bc3ebbd5a51186e545a4a3ceb7c9b472e68 Mon Sep 17 00:00:00 2001 From: gwbres Date: Sun, 8 Oct 2023 21:53:41 +0200 Subject: [PATCH] Develop (#172) * Rinex.navigation() should be available by default * Remove deprecated method. User is expected to use Rinex.snr() iterator. * Remove deprecated comments. User is expected to user the preprocessing toolkit. * improve and fix Merge operation fn merge_mut() was moved into a dedicated trait. Improved and fixed is_merged() * Observation SNR/lli - add possibility to compare SNR to value expressed in dB - add documentation * improving ionex definitions * ionex plotting * improving sbas support * sbas vehicles identification * improving the test infra * rtk opmode * rtk solver now works in mixed GPS, GAL, BDS --------- Signed-off-by: Guillaume W. Bres --- CONTRIBUTING.md | 65 +- README.md | 7 +- crx2rnx/Cargo.toml | 2 +- crx2rnx/src/cli.rs | 2 +- crx2rnx/src/main.rs | 4 +- doc/dependencies.png | Bin 0 -> 49508 bytes doc/plots/sp3_residual.png | Bin doc/plots/tec.png | Bin 0 -> 1340263 bytes gnss-rtk/Cargo.toml | 7 +- gnss-rtk/README.md | 100 +- gnss-rtk/src/cfg.rs | 131 ++ gnss-rtk/src/estimate.rs | 63 + gnss-rtk/src/lib.rs | 485 ++++-- gnss-rtk/src/model.rs | 58 + gnss-rtk/src/opts/mod.rs | 107 -- gnss-rtk/src/solver.rs | 0 rinex-cli/Cargo.toml | 16 +- rinex-cli/README.md | 13 +- rinex-cli/config/{ => qc}/gnss_snr30db.json | 0 rinex-cli/config/{ => qc}/sv_manual_gap.json | 0 rinex-cli/config/rtk/gpst_10sv_basic.json | 9 + rinex-cli/config/rtk/gpst_4sv_basic.json | 9 + rinex-cli/doc/file-combination.md | 27 +- rinex-cli/doc/positioning.md | 68 - rinex-cli/doc/preprocessing.md | 83 +- rinex-cli/doc/qc.md | 8 +- rinex-cli/doc/rtk.md | 128 ++ rinex-cli/src/cli.rs | 133 +- rinex-cli/src/identification.rs | 105 +- rinex-cli/src/main.rs | 118 +- rinex-cli/src/plot/context.rs | 12 +- rinex-cli/src/plot/mod.rs | 16 +- rinex-cli/src/plot/record/ionex.rs | 127 +- rinex-cli/src/plot/record/navigation.rs | 38 +- rinex-cli/src/plot/record/observation.rs | 4 +- rinex-cli/src/plot/record/sp3.rs | 2 +- rinex-cli/src/plot/skyplot.rs | 2 +- rinex-qc/Cargo.toml | 4 +- rinex-qc/src/analysis/mod.rs | 2 +- rinex-qc/src/analysis/obs.rs | 16 +- rinex-qc/src/analysis/sv.rs | 2 +- rinex-qc/src/context.rs | 25 +- rinex-qc/src/lib.rs | 14 +- rinex/Cargo.toml | 7 +- rinex/benches/benchmark.rs | 287 +--- rinex/build.rs | 82 +- rinex/db/SBAS/sbas.json | 121 ++ rinex/src/algorithm/filters/decim.rs | 4 +- rinex/src/algorithm/filters/mask.rs | 30 +- rinex/src/algorithm/filters/mod.rs | 18 +- rinex/src/algorithm/filters/smoothing.rs | 16 +- rinex/src/algorithm/target.rs | 16 +- rinex/src/antex/frequency.rs | 9 +- rinex/src/antex/pcv.rs | 7 +- rinex/src/antex/record.rs | 8 +- rinex/src/carrier.rs | 24 +- rinex/src/clocks/mod.rs | 12 +- rinex/src/clocks/record.rs | 129 +- rinex/src/constellation/mod.rs | 389 ++--- .../{augmentation.rs => sbas.rs} | 91 +- rinex/src/epoch/mod.rs | 102 +- rinex/src/ground_position.rs | 6 +- rinex/src/hatanaka/compressor.rs | 81 +- rinex/src/hatanaka/decompressor.rs | 53 +- rinex/src/hatanaka/textdiff.rs | 8 +- rinex/src/header.rs | 1314 +++++++---------- rinex/src/ionex/grid.rs | 2 +- rinex/src/ionex/mod.rs | 19 +- rinex/src/ionex/record.rs | 511 +++---- rinex/src/leap.rs | 16 +- rinex/src/lib.rs | 758 +++++----- rinex/src/macros.rs | 8 - rinex/src/merge.rs | 10 +- rinex/src/meteo/record.rs | 68 +- rinex/src/meteo/sensor.rs | 14 +- rinex/src/navigation/ephemeris.rs | 243 +-- rinex/src/navigation/orbits.rs | 63 +- rinex/src/navigation/record.rs | 320 ++-- rinex/src/observable.rs | 30 +- rinex/src/observation/mod.rs | 6 +- rinex/src/observation/record.rs | 372 +++-- rinex/src/observation/snr.rs | 67 +- rinex/src/record.rs | 224 ++- rinex/src/split.rs | 2 + rinex/src/sv.rs | 138 +- rinex/src/tests/antex.rs | 18 +- rinex/src/tests/clocks.rs | 83 +- rinex/src/tests/compression.rs | 130 +- rinex/src/tests/decompression.rs | 278 ++-- rinex/src/tests/ionex.rs | 258 +++- rinex/src/tests/masking.rs | 66 +- rinex/src/tests/merge.rs | 99 +- rinex/src/tests/meteo.rs | 131 +- rinex/src/tests/mod.rs | 12 +- rinex/src/tests/nav.rs | 286 ++-- rinex/src/tests/obs.rs | 629 ++++---- rinex/src/tests/parsing.rs | 69 +- rinex/src/tests/production.rs | 21 +- rinex/src/tests/sampling.rs | 10 +- rinex/src/tests/toolkit.rs | 504 ++++++- rinex/src/types.rs | 4 +- rinex/src/version.rs | 34 +- rnx2crx/Cargo.toml | 2 +- rnx2crx/src/cli.rs | 26 +- rnx2crx/src/main.rs | 12 +- sinex/Cargo.toml | 2 +- sinex/src/bias/description.rs | 52 +- sinex/src/bias/header.rs | 4 +- sinex/src/bias/mod.rs | 34 +- sinex/src/datetime.rs | 6 +- sinex/src/lib.rs | 6 +- sinex/src/receiver.rs | 2 +- sinex/tests/parser.rs | 2 +- sp3/Cargo.toml | 4 +- sp3/src/lib.rs | 6 +- sp3/src/tests/interpolation.rs | 8 +- sp3/src/tests/parser_3c.rs | 2 +- sp3/src/tests/parser_3d.rs | 1 - sp3/src/tests/test_pool.rs | 4 +- sp3/src/version.rs | 12 +- tools/clippy.sh | 5 + tools/release.py | 58 + ublox-rnx/Cargo.toml | 7 +- ublox-rnx/src/main.rs | 241 ++- 124 files changed, 6410 insertions(+), 4415 deletions(-) create mode 100644 doc/dependencies.png mode change 100755 => 100644 doc/plots/sp3_residual.png create mode 100644 doc/plots/tec.png create mode 100644 gnss-rtk/src/cfg.rs create mode 100644 gnss-rtk/src/estimate.rs create mode 100644 gnss-rtk/src/model.rs delete mode 100644 gnss-rtk/src/opts/mod.rs delete mode 100644 gnss-rtk/src/solver.rs rename rinex-cli/config/{ => qc}/gnss_snr30db.json (100%) rename rinex-cli/config/{ => qc}/sv_manual_gap.json (100%) create mode 100644 rinex-cli/config/rtk/gpst_10sv_basic.json create mode 100644 rinex-cli/config/rtk/gpst_4sv_basic.json delete mode 100644 rinex-cli/doc/positioning.md create mode 100644 rinex-cli/doc/rtk.md create mode 100644 rinex/db/SBAS/sbas.json rename rinex/src/constellation/{augmentation.rs => sbas.rs} (63%) create mode 100755 tools/clippy.sh create mode 100755 tools/release.py diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7a741fdb5..2b705618f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,11 +34,11 @@ from an `Observable`. - `src/hatanaka/mod.rs`: the Hatanaka module contains the RINEX Compressor and Decompressor - `src/antex/antenna.rs`: defines the index structure of ANTEX format -NAV RINEX -========= +Navigation Data +=============== -Orbit instantaneous parameters, broadcasted by GNSS vehicles, are presented in different -forms depending on the RINEX revision and the GNSS constellation. +Orbit broadcasted parameters are presented in different form depending on the RINEX revisions +and also may differ in their nature depending on which constellation we're talking about. To solve that problem, we use a dictionary, in the form of `src/db/NAV/orbits.json`, which describes all fields per RINEX revision and GNSS constellation. @@ -56,3 +56,60 @@ Introducing a new RINEX type `src/meteo/mod.rs` is the easiest format and can serve as a guideline to follow. When introducing a new Navigation Data, the dictionary will most likely have to be updated (see previous paragraph). + +GNSS Constellations +=================== + +Supported constellations are defined in the Constellation Module. +This structure defines both Orbiting and Stationary vehicles. + +Adding new SBAS vehicles +======================== + +To add a newly launched SBAS vehicles, simply add it to the +rinex/db/SBAS/sbas.json database. + +The only mandatory fields are : +- the "constellation" field +- the SBAS "prn" field (which is 100 + prn number) +- "id": the name of that vehicle, for example "ASTRA-5B" +- "launched\_year": the year this vehicle was launched + +Other optional fields are: +- "launched\_month": month ths vehicle was launched +- "launched\_day": day of month this vehicle was launched + +We don't support undeployed vehicles (in advance). + +Build scripts +============= + +The build script is rinex/build.rs. + +It is responsible for building several important but hidden structures. + +1. Navigation RINEX specs, described by rinex/db/NAV +2. Geostationary vehicles identification in rinex/db/sbas/sbas.json, +that follows the L1-CA-PRN Code assignment specifications (see online specs). +3. rinex/db/SBAS/*.wkt contains geographic definitions for most +standard SBAS systems. We parse them as Geo::LineStrings to +define a contour area for a given SBAS system. This gives one method +to select a SBAS from given location on Earth + +Crate dependencies +================== + +- `qc-traits` and `sinex` are core libraries. +- `rinex` is the central dependency to most other libraries or applications. +- tiny applications like `rnx2crx`, `crx2rnx` and `ublox-rnx` only depend on the rinex crate +- `sp3` is a library that only depends on `rinex` +- `gnss-rtk` is a library that depends on `rinex`, `sp3` and `rinex-qc` +- `cli` is an application that exposes `rinex-qc`, `gnss-rtk`, `sp3` and `rinex` + +External key dependencies: + +- `Hifitime` (timing lib) is used by all libraries +- `Nyx-space` (navigation lib) is used by `gnss-rtk` +- `Ublox-rs` (UBX protocol) is used by `ublox-rnx` + + diff --git a/README.md b/README.md index 7c12243c6..9d7d64c9a 100644 --- a/README.md +++ b/README.md @@ -22,10 +22,12 @@ and we aim towards advanced geodesic and ionospheric analysis. - Seamless .gzip decompression with `flate2` compilation feature - RINEX V4 full support, that includes modern Navigation messages - Meteo RINEX full support -- IONEX and Clock RINEX partial support, will be concluded soon +- IONEX (2D) support, partial 3D support +- Clock RINEX partial support: to be concluded soon - File merging, splitting and pre processing - Modern constellations like BeiDou, Galileo and IRNSS - Supported time scales are GPST, BDT, GST, UTC +- Supports many SBAS, refer to online documentation - Full support of Military codes : if you're working with such signals you can at least run a -qc analysis, and possibly the position solver once it is merged - Supports high precision RINEX (scaled phase data with micro cycle precision) @@ -41,7 +43,6 @@ summon from the "cli" application directly. - QZNSST is represented as GPST at the moment - GLONASST and IRNSST are not supported : calculations (mostly orbits) will not be accurate -- Partial SBAS support : some features are not yet available - The command line tool does not accept BINEX or other proprietary formats - File production is not fully concluded to this day, some formats are still not correctly supported (mostly NAV). @@ -73,7 +74,7 @@ RINEX formats & applications |----------------------------|-------------------|---------------------|----------------------|----------------------|--------------------------| ---------------------| | Navigation (NAV) | :heavy_check_mark:| Ephemeris :construction: V4 :construction: | :heavy_check_mark: :chart_with_upwards_trend: | :construction: | Orbit parameters, Ionospheric models.. | Epoch iteration | | Observation (OBS) | :heavy_check_mark:| :heavy_check_mark: | :heavy_check_mark: :chart_with_upwards_trend: | :construction: | Phase, Pseudo Range, Doppler, SSI | Epoch iteration | -| CRINEX (Compressed OBS) | :heavy_check_mark:| RNX2CRX1 :heavy_check_mark: RNX2CRX3 :construction: | :heavy_check_mark: :chart_with_upwards_trend: | :construction: | see OBS Data | Epoch iteration | +| CRINEX (Compressed OBS) | :heavy_check_mark:| RNX2CRX1 :heavy_check_mark: RNX2CRX3 :construction: | :heavy_check_mark: :chart_with_upwards_trend: | :construction: | Phase, Pseudo Range, Doppler, SSI | Epoch iteration | | Meteorological data (MET) | :heavy_check_mark:| :heavy_check_mark: | :heavy_check_mark: :chart_with_upwards_trend: | :construction: | Meteo sensors data (Temperature, Moisture..) | Epoch iteration | | Clocks (CLK) | :heavy_check_mark:| :construction: | :construction: |:construction: | Clock comparison | Epoch iteration | | Antenna (ATX) | :heavy_check_mark:| :construction: | :construction: |:construction: | Antenna calibration data | Sorted by `antex::Antenna` | diff --git a/crx2rnx/Cargo.toml b/crx2rnx/Cargo.toml index 7a9881443..f3f811aea 100644 --- a/crx2rnx/Cargo.toml +++ b/crx2rnx/Cargo.toml @@ -12,4 +12,4 @@ readme = "README.md" [dependencies] clap = { version = "4", features = ["derive", "color"] } -rinex = { path = "../rinex", version = "=0.14.0", features = ["serde"] } +rinex = { path = "../rinex", version = "=0.14.1", features = ["serde"] } diff --git a/crx2rnx/src/cli.rs b/crx2rnx/src/cli.rs index f9f4f2957..b778e482d 100644 --- a/crx2rnx/src/cli.rs +++ b/crx2rnx/src/cli.rs @@ -33,7 +33,7 @@ impl Cli { } } pub fn input_path(&self) -> &str { - &self.matches.get_one::("filepath").unwrap() + self.matches.get_one::("filepath").unwrap() } pub fn output_path(&self) -> Option<&String> { self.matches.get_one::("output") diff --git a/crx2rnx/src/main.rs b/crx2rnx/src/main.rs index 8bb721222..46c8308bf 100644 --- a/crx2rnx/src/main.rs +++ b/crx2rnx/src/main.rs @@ -13,9 +13,9 @@ fn main() -> Result<(), rinex::Error> { Some(path) => path.clone(), _ => { // deduce from input path - match input_path.strip_suffix("d") { + match input_path.strip_suffix('d') { Some(prefix) => prefix.to_owned() + "o", - _ => match input_path.strip_suffix("D") { + _ => match input_path.strip_suffix('D') { Some(prefix) => prefix.to_owned() + "O", _ => match input_path.strip_suffix("crx") { Some(prefix) => prefix.to_owned() + "rnx", diff --git a/doc/dependencies.png b/doc/dependencies.png new file mode 100644 index 0000000000000000000000000000000000000000..4a320af4be29e16328f2dca2a083eef3b7199350 GIT binary patch literal 49508 zcmeEu2|U#6{(mM)C`wVXbxMlJl6{*}DZ+$7WUC~*>^qa9l1 z7_x8K_pDj}pYJTC)4Au|d+xdSch31=uk$+1e8124`8>~Od4HDY^PMvo9gU?dJS+Zkd(wRXE%2t>77DSQo9_i54*cMJHbb|?&y5P_NcA(5$ZiD2`OnY2?a4J2?Gf^ zA?fWB3h+M}NpUF!2@~pgD;sMk+C|kqe z4gY9ZAGUW!9y#J_)Lz-K}h>d$*I=ub?BpcZau|q^!KLzJlg17uXdt#?#u> z%@!C&VIQ41a>L!n#hQBch_$EfVOWWjkn}DgiS2L?`A=H?h^>{4tCb^sak7GyQf9ya z55-_X$PBhL#=E;49x#!Vm9;gL@s``=E_uX5TkGeu(dTsZ)^N3QIi~G=#M%L-IO0uP zm^6rtGU*W?+7*dyz*K~cjVqlHjV^LQ-`1D5B1zgtZ9Hs`Si4alrVVs=c6M;Lb@}$< zVP_{NP@-=JTDiI+vZw5j_Uut-2io>%7hGWH-;6*m=pVLn`2MPq?Gg85)UonXw0$9? z_gLH79HUc~lm%HM`*XCS52o$J?U)s)BK3L7rTJo^GLp_tS7&FKZ=TfV-=+_8^j5ca zK)6lkBaIGd)4%@g7jC$Iv88`!x??*W<@Y*!$R1Y>r19kX?})_1W2J(k|-1u6#Dj=4KJz&A~O5v*X5gBXwBZyJE0hriZ&$}Zpbx2xP7Vc1qxmbPOCT-_nQ0~?=wWVD8b@qQ1 zf`&ENySu9o?2PvKwrv0e$WCcGFO3XFzI%ODAW3Q3wPW*?N0xTYil(zRU#3Q${%7P0 zV`yse>&r(__-ESliz1`x@;s640cdu&MGy{I(>$pG_dsXoOUKH=)&@bS!=O^uAfg=z zk8Q!Uw$pAn+8#NA2z`gEwVSQ4)gg)kAo%R!Z0qDsVS>yKA(@?U#md9o8O9)LfC&Cu z0XsQUlx4m)&@O#1?qA#{Yz5iPAE*P;->QHV?dv=ZpbLAx0??J>&!Yg6bk=+|+V3Q9 zeFPAbX1>m@?#G;MoSm#3c746N!`0ct=?KN4BhvjkW}mY&STseVcGm9hJ~a48gbm~7 z89Hc?tB)}Z1&<1MC|?gCU+G_VBDVMS8)A9Lx9{aoGj}&<4_6APz=&T|2^zk;Te;d; z)3E&)$IoBR zlf=(3hq__fQ;1RgHtc*$a=WXm6#|CzrPFK~4D6p@_&;2}3_UFP`SSm@RsN^vmxf?* zH?=ex@Edv{&ArhV)zKCeSr_^*LfO1SCaV(@aJ>O(%);q zclP>UcFQvIbYFY`9HAH_+K{bNJ@r3u&J-_>v37-Mk`fvXr#tmY4LveMgVhW)S2_ZM@jbk&*%(uWyk4har40iEtE+ix+eMI(&rve%}`ubve29(<8A7i?Ik~)cJA?gOIzL*G?Kiz2t$y@(bAI&02O5S+ z(ZAEd>5q4Q+vqq+BPmJ$PAB=hoge*(?LS(Xl&1S?`ts@D|Fy~@eXZZe2J`^>-<$t0 zR=Je=z6|zj@I!00_?5u>$ZqJ<`K?<0-^`f*p=#1C>yJ0)pC68YiHYbW|60cUW%>Uh zWB#4<|J987`@+~^S8pj-r|(N(zq|bLCpn7vSqdO2PwB`-Lgx8d0Ntt1PjcxEdvrtj zzs~~b1-E%2Ac#x~ME4yO|JB7NMvpn@PWCS?H(CfgPj24{Y+mT@4C8*aX!SdaPcS{r z-y)~xRO-Lb@cNq_a8fkn_?tOqcyEBp6PmhxIj^J}|Nk8G&njeJdX?!MqXX?97yit`I$_20}JO3@F<=o;{I$^P-t@^>WZ*h5#Q-|Y?muMcFA_lXf`oR=Kx|1IBu z{1U;_wC1nTh$4^C*e`8oq=OMN65Ao?W})G};{g4o=y@Xh&S(59`TRGzxf^J*JH3U4 zRtlh8`!0X~8LCK0e1|;0{wC1Z6AlgfOGe*R#porN`4~>W_TTCJkfR^n&{Rf}{+(|1 ze>~9qyk7nt$=?k$bawya!!KmSZ@s2Xp9Mz#cU}(rMFaTP($wE9X#LLszyVNx1>E>{O^;6UjzJqvGEWhfO&5(BQHrweR*x_9~5YQ@hz!8 z(sTSX-G&sV{MB8|&pZ9ZzLa|C2JpxG7+HF}{Ke$x0X3cGf6(au8G%uq4Bgdy*8w5> z9c0iq^w0XQ-yrY>_P#La_YwH>R+E0wtA3ve{2I#qmRJ1-4rrC)`GF)-=>4T*q5uEF zN-?^2(arCVH~F7y^dA>i{_*)MWyXK-YeRHuUw_zXKAuqS(tk>ddV}@={0s~Hhz0WF zMZUzjl?xUKF4((syMecPZ$0Zh8*G5^`KAPiU*fJGh7ma{^5;0R#Kip+kfT7u!f(kH;Op^Ap4{E zLU&PBkpi@?G0ee+@yum(w^mA(Y+-P6sxT@b4_+zwSWabb= z2QR>_VeFqP_6iO1{b(;8({+WHajbsebMs@hp#96t$Qr2FCB5q~9!CcXDB}hFaOu-s zJ%zds-Wp@A62Wau`K}!a&BEq>()=h!&-H?s>-^M-pT0q%$Zy;a#B9P?@81~PYmCNs zXD<-f4PL;2Vsz!=Ah@PAOysi~v_|l5N8_ay(^hkxiII4{>w)}!{OjBM6szwCqshk^ z4&Fo_V*a>A5Yu)rZzzD9@N%ufiD0z#GRhVhP|~a;Vi?Dn+^NEzMt9GN*z)tNq{-rR z=A^hhA4{(nFKkW*j8*#`Ei%wuNzh9@7nra?5R+iAG+-StfB|)V$%q1m&uzqBI;C=? zeib26&TaP`BO`H^Tz7g2LILfFN?1e`m~OiNtiSxK+Qh)Z6t6fpy${}%rYHD_HHqg# znODNrSLtgmq|VsKdWDA|Yxb%6-pmd5rA}>AEh^)oOVei~Tsnl)m)aW+bX+BkC0!R? zvBw0B*UV8?)S$5CJ=Z2lOy6{+SAisHD9xoVeJ)JG*EEig_^>0sVR`2cVBwB>8S0YO zp@bF@o69y}%y4ir&0CcW@~%}b z+G{DofU^@3U(AV!p8-{fOeCK_!A3R<^3cuhs%d0Z@>G2=QCCsQJL#;V-ew9)B7{Ok zF4<05B=egs7(4u@t0V!PCF$C6pG^zTsI1^1_!>B`!a(hwO>QR{-Ul4#VZ{`ll zQ@)!8F_C7TIAZT4kC_V0r*hte%IUn79E8{6xoE6sKtvip1CGeAkxJETa~5U;>nJmr zF@Lwwg=zv1q?2MQQO-Fm<&xH{o?!`a3d6l-x>K z1&YTZSf+&|&Ar*%JfuOYFTOu+RpzJic};VX#Vk&hjl6ov8_>+R`#N?~#-c6nsgKs& z*uGK(pMQ$0@}Au)4uV}<#cD)_IXa_)nY^k;4I6)9_fJpc_C82){)OFJJ~Q*ICTIP^ z?(a2;=k|7+{=)8!U82l9N5y_&_gk`y#d9aG{=)9L>VRVb#ozCqfwliZaaz80RaIyA zat=cG@d_5|b`p^7SR4Jtwu9s4s*|gC*UxS}uT-$g=-~3PYMZ$2v7Y^PYjhOauDHy8 z?g(4BOkOZ1aI&iz2C;_md46cBGJWK*WUZVN8@tL#S<`sc-2>9{W5kp+mZ|>SftI13 zs`RZn{R$OXov76Zxj>V+tl#gYXvD=t^fK1|<2bwe9FMcvlE-4*N)(z4ShupJ7^Ry} z&!n1WiGwXS>Sldw`0jXy$ccOyk*TY#)Zt=i`sfuSL_@ zvKj;Z3PYcz>naaD7g9Q!tdq#weS;VqI11L$ zt(zKgg<_u-;ui}~_`OH3TKN9iVu2^UsllT4pSZUl-jg$2qQvdYUH8b*^mNse@dm%e z&qQZ^i_Y^kSLo~VF+LJ`nrfEo$&s%&`}$V?=BX}IH8AeLit0^NC|i$G*phu1uQ2xE zu-BTPx>Gry+iyfEtIKHNi97V4tdf|W#D^^7>D64?xY4`TF-y$nylB7Si`dlWjvSuN zWib)$m_~)LPIr_WE3<(cryUigMvMf*n7qoB3<{qe^TOF}t9Vhn@NlDE;6~A~$+7X= z(x3D}kM)vI22#<2jmg#6C20i#B$@xwd1!6y355!|Lg%$+;`;!U?&3q$Dbv=h{K@KB z><&CnV5mqwR-*riV`F~3SdgQRVbu?17r|L^+&xO&lmO%83PMW;mRvh|)vwrMbW4S1 z*7S?o$+M@)Z=sjN*R^ z-9sTBz2aVzlcsEhCs{5+v2)k|9{eA3{%Ot0o=e}#JU5cMRgV0`Q;F-txW=5LcYkSY z)$y$dZ=%0ZCA8o=oXXgT^$;a)s90~d4vn`5zuLo+txAD>!HW^W=t%8k_bX_7P+j{9 z@tstQ`zQ|Knfdk^VGIepEh(9cVh9UxJHXxUV6``9Z0F!0v_Ewdp-xk_6=t;u!ea=A2wrC9})eupOH~yIOPA! z&F*ee7nsCkH=STD80)JotjV-5^y!G@ZkVjha$OI>H)sQj%EsWQPK<}HDGtApF7zTz z)xU^0Of^|0PMUVT_4>^^kRUyaU_j+^dXHtqseHK3GZU_aWmg_tpp0Vl6}Jo{c5pr& zq$y@S>+_C8|AfthXGs%ho89834o1iJSfw9QQJtzT9dr7K!VYLUJ*7I}r`u4Tgv58Q z4i-%OLDNI`2J)vuC*}gCRuCo)kGE0-U&h20gKT7jgUkAppQ_E2tDTauuRQtvAg;ly zq~upIWzx8b_g6cVI~1Cg8b9ll?&g1T<+j%6dxQ-4^nyZDKedHyxz;AOTFIO{~Ko9 zh1~A0Yl)~?Q;NlmoqWsb^*g5L@&lF_1f*mSt)N<jON49RVUS^ zGSpa$c-{8NPj z`v*y8gTrTdDd`bRGXdCRy^+IM#O2c~;V|~V!H^I%HlPn8h33m~(?^U+fdN~y8Hwgs zss(9cQ3NYjT$#E5652ndF~_5aYaw=;|IF5;iHRaL^Y;>7N?bUiT!JiyCTerwyZQEx zs7)@t_lrW+Cgasu=00tmTQSz)H!x@vG-?zg@ToRxD~`A|QdWodj1xTLv}5VYO@moM zQ(4V6f$cU0tryf(y%lz`83jP>F=^mJF~&6bX;Hq5^#||g zz`bA-9u&=wTml4M;ocIpoUmdmMysBaU~FoAUbQg!Xr$9S4zFc$WN(;9fCI z{p5Yq!UMu{{kLl-qte-<%mem*7+5oPN+W+}k9SdRDbI9u=K$YWi+bT+Qo#EbpTfSo ze(!SbeGa)%ID9jx>3NVj-^6ITBdg7mzH|3RwM?T7K6SQUSZ0$qb$8GvZldDS>@orO z)*@%-sno!iP1ACunUgNh_iM1tPV|>H@|{=tl#R(8`Y1e5|9Q)Dg5p*jy&&=!_VyTi z_xfz&N`mU(lmN5EbV2=DtFCt%0<2LnetSR6M)ZX=p0$v~)Q?`zEf5+ADiy>Vth1NL zVAmaMeKEjN>i2ATQODhYlA7%c!kew@;@Gu}ik2YMT{P%%NGZO^(8^AJldOJq zmkE?ihF!N&xq}vDHrTj*eRjA=GbO(x*yiNaEY_AB<6+e)!fuH76Z|l&)I01;$`GHkCF6~ zN@{*aABM`#n>ndDJbcP2D~{1-Zj+#DNibRn>Q=1#1<7cc$t~Er$3&;bv$^|+dM?LJ z7@W=;HFJBh_-Zfah1yw$zJMt6OyiI5V$+WYna5_omo^}ag^`c9dJ;n8o|)Ko+$~y*55So3Q9Y*TlSXLa71{8cW%XeIr^Tx{XigwvQprTxV!8Qc0x z53eoE-A@|HFT{|R?%(~Q{_Z=u8LYJBL@8-xZlaJG&U}^_aV^!tX0a}79Fw!fhdUZ=cNux~Y&VOtRXmD(60;0^ zI3=zzfEv={i|?0Vu@UcVl3E4^`d4)o=iN{Dt@nK*vo$bcmX~-uNL3tzZML0Y;w)z* zwv`O{%CZ=k89g1P;c747YOiMHo-qBITXsi+d14_Lj6VHpJC)lDaC3kg*OzYY$0TdY z0q5oV(==)E8Wd=(4?f|^bqXWyesk`|3WAjQ%`_U4)kDx$pPl51#ffBwyO#^#h-l6}XS9l-m$FB0W;r3}xEGeHQ-X&f zj%;lqfAGNlPJ*NseVbDQYGZpM#Oy>ga7q1n7VvGfgy)ovQ8!>Me;)pV?+&@s6@5&7Y*K|vj8E&ZEyvbXI6B%deR-h%Y&e@R#a!Y9A?4K(kQ2bhflpM?6Vyw^6J6E zhRrylhb#An{}F_8A)TdfWH9ya<=V~XmHL^D4j$k2!6q(X(IX|Vezv3-S55i3>ES|# z#k?FkYBM7)b;pZN6)sb980--VE?xXo7^rkm$YOqpgmnXwrZ zlGJ1lF$gmoFs*#YL94lYLW1U*r=Mq%j3d_EQvCGO`oc&f^EFPSnK752)`gwyNhhfu zbbBjfH8IYvHa+Olmsu66eM5GsXIe|uQn@+~N)!&IOO83^eur59Pp_J9`t>i7Yw$iS z-+t}zqM~|_Dl;fAEe)}VgQ!c(^Nn8WXV;k(1XtqKd|I%$7ff*Pm0QC)SNI8s(25gH zAyIj&ToO!Y5A8qnO?fG64a7uwAx*1-@(vfBcj-<}T81)R)l`{gro?RV7$VTe*nL4X zv?zgnm1teux!84?K@q=SuXyNj?(X&*&gP%k$Xjqk7VRO!rxQIP%M_2@6P5A5(d3v_ z|LCJaTDIvbuScPAJ({qb8 z=IL?h!inU6QqHfLPQ2m7G9=S6WZzSn+B`iRG%=h+Y_w;SzZ}X$+{cn|gT_Ne;Gtq> z=L6vYW&;T9owA2suH_DDzk<%}Imb!JnHG1a*@~bR&@X;KZs<~FBn|`&_)*l=$lS-; zILoQNWf{3G%7VXTS>^E}KJLnN3$=R@b9_Mo#bQ}oW@k%cl?pc}#YlZ1hj&Cx2w@_P zv4?38%L8S8p0>A%Loh3%Qoh0+2vj_hw#2{?aigL+qNzu zLSnf^RXr220K^zs#j^$dht68C#m$Z+EiQVVKG93gZJg;xte0)pKQ3Twb5)l`$1{Fb z_bp{qFEStWhV7*J>(&jstby%Vfy1r^kSP46DmLGUBT;M$Y z(wWU^*zbj?`TcCp(GY=YN^M-rX~~=Hirl^&KBAte{Xv=}4ud2PKRh5)mxRVL-NB|9 zo^tkYU3(Tn2j>O;owvdkWuacy&JgA1Qb(o^tnw}Z?c&^_aE?~|z<|!R?^xNXj}LE+ zxYY%jXu!mMfvNj1jFOE=UKRT_#2Wg!gPapg8MI;)P}nnAnT<3I+z%MIzrlfLz!V>T z>Wq@^P$j9`Mn9sVCacbLhG=uYB{f7SaEXDCA^953GN8mn-0hQL`(y+yvv=L}LE>D7 zepkZE%WqZ}(JX-RNn0uJgb^-(F>&H{_|mnqCzS@CWOP>DzHnpElkjrMXE!SG;HRg9 z`9$=8U>Q-tTxU{)V$>T(`kgC~Enl%b#V?LoW%6M&B)Zy5+FfWjkweT6x1<)sncVAx z)Wn&Qc^@2iX)iJCZ1yCui1l76TtP@=bd#s)22$qe#av(LNq9rM68!WWP&nsuD)wj? z@!p9Nd0r(0=>mlaDnmQd!M!)uuwOWcmtqg~5}Dx@8OG6gO|7aKG>0uQIK}N<&|G~h zn&Y(<9qlxM6nCiC#$zLcUdqv4Xh_>Ok=OW-*=XCxIs?F{cDJVpf?qEeW#;v)i#Lj8+|F zq_F!mO5pR^x6QN80jpk~erhv2=v+|TI8mN=+^7FSz69?as|_O@nQnfJqdBQzu$EyK zMbZ&meqa!@fl#U4VOnf!x2m(}#C^k^5vxSYss`9`#1EStEos(Jj|wo8sO%%;Nij`M z&aA^k>Ihc7rS}3T#6^TtWpNCRPiK9(Xp_tVJlcY!#z;g7XRMMDDa(imu_;0+rmBq!b;RUYJpsaw^llU6@La z^q5#gBd39o^L*a-0FL&N-Mx0W-7QYrT`WSb{!Ff`4vk!N0^Ps5iy-8ZI>m2BP{}zY z63)|vZ^nx3E;F~MV;z;;h0n=RG;%0}+(vXd>l!LEUt79%|3D>oF%%(Z+u5_Ln@UbE z?)oJ4w4ZsydW4)5Q`wJqsH!2PBIa?Pst$YhBIRUZUZ5Pc|5Imw@}iMq}g)dXGII`vQjlVxEAOxy=K9yvGiL(sGq zDsWE*E3@)tl2yCeaA|;tX`)S&)bR^&j7;;(tqrLrnIZ=RKez3`o)~?fFvc`F%f8H$ zP!s2tMm?ZnKC)r3*GA3np0v#5Dla0xcN6a1?%OGh-Q0uh%hth3f2pV#jh#$Op4VP8 zoUCyxRZ*WFo*)GcJI}stN!OUmJ+GD$A5lN5HI-X=-}dsx_Pw=^$V7Q_iy>aXlLnU} z%>vr2PkODlvc^r-bwuZ%8(VT@9fud;kz*~A8x@eIi%D#=q{+s?ppFTf$>~B9&#tnz zOpT)a+kU;1f?fp%UjMeGIMLnHjlSafMKo)j-PBEt=$YlXQwun<3#)UM?sL%h#@}R3o49xv7Z*{z~o&pdDjzOP2r(0a9D+N}%|K4uT=G6*YS( zq!t0GMca}PoY4SM7s4G06jFI`7?XEh8mN{DgVWU|%Nio;cg;jF|JOh;h8x#9^`feyQrz$s&Ou|Cd}byAdD} z0*@kORP_PDK1*8R6xq`;n6dK{4=?3OQK);0cKX94SHzHR6N`8R+;IwE5(*5lh@cAK zV*#s!H)UaQu&}te3|JTjl0B^NsfY`R<+iUly*1wZwf@Z&v*UBKjc%E(N09Yyf`cBB zjI`a9CKwrzvdnfn6e@4$c);=4x+$1X&p-1kr=?n_~|LKODY5E{onsnS2|}_%NJ@oid{c%=kK4 z5}6Ussa6^3EkuG?oFYu4D3b|`#C-zce6q9KNtrPoHn=`95t$qhA1(JUJ%jAEoAWfz zj!eWhLsc;~eZLsutCz3#L6aHNWD#Bk!}I9nODT#G4F#s? z46+nVr3qPxCgHXuupt;tjURas#a|AyEw|prOqmVh5j#!8T!fwKz|Q#dyD1$>GOW{x z!h5%gS}085@~8T;EGC|@2TEiY*r-ia4?c*>yW5^(OTkrFh|yhBV*(Ku0%YbstIc(| zAel8%IgjzIv27OG>a%xZxaOrBJgw5fn*JVfNjs~lgIN00-8^9>g;($ zQlwZyA6P=)ja-UzI3+KcjA9t8@ppB_jyi|;4(*a#I zi6?CdHk8J@`NpcpBwO!$NWS|;(pAML4HtS2TVzW)C?C=q;9CIXENMqBz%@JuD3%q> z_S~bkq%kr-1e?gT>C=QY{scPrns`v(%Mc$O{bmVVF*by#SQ1&iPmM->=~?$c#h zzsfWOnC~*?uo+m))jV=}SzE$vN_yyVrutox0AGpk_<@kd+>doyi{=F8rf$@d6y#?w z#;G0|Y}5_>)NsqL^{unoI^N?I%bORH=5T}gTIn?ji=v*)saO??%AWLkG85Kk?mH@E zMY8GT?w_5mZ~n0U0xN0synX?4Ht`^HZC^(YcPi@*wQL3DfzOM@6#_?UhNAE5nnBKF z)}1R0I10cege^BlfFK^t0womnQvMtV{A3Gvzd75! zc!NTQ?xn&{tfGQ5-wzcwcUE4g=RxY=T7%e~U#D#kMhgH6sTx$T29uBoLEGWFe{@!pVpa&tn3PTs+q!8e-ZTI6QK>ATcAz`PDLHOnj*_wy)vSkEVuou{_Jn3$r#DCaliy z8yHi|*T&nqoVSYxGuaFly4hg60D?t$kb=mftKB}yt6hnv9Z>oony|C68E%i0EIolX&Qyd6C5p8n$V7X42OdR zk^H6UIWL^v&e|_3)ll(?3%D8(YWG-f5}RvMnAIZYHDxw>&hV~9W-gW~vAeW?@{L&t z-eYJ=e3`(^Rsp^%IljeB9u(J&wLrvp{)kw2m7UOK#&5ax{5vR2ZS|0Q% zEe}^$?b(cZvCJ@?{{n+;Le?}Eju<@JFE1hzXY9BgMo1bz60=atvMlQL;cC9y&2p13a7I}JV%*-LRxPF1Cm%0W%PKC7;c2)}43s5r z>eN)*YCqB!91kb#UTU>=X}7hHKZw%XhigMlWP5jmg{uG~(1MToh%s6#LOz_bu~^+O zt0X+|XD;Oy+AglWL?`ZU?5-K&eW|56`)(+n=wDVq{3)D4F^(C-pM)^7cuQ*po~q};lafK-f!q~f#=qeQ-y+L|3DeK(J0)a7j^=^&W2&5-RpVin!SNke?N%sv($q{!F zIC1i9ygl%`Qx7_2wPxDWQ}f@h&4uuK2BL?_{WkHi^rsalt~&k8)*dG&k5Y=9f>5&+ zX>RG{fqmz!yw}vPNBV4^;ynB^4OD1eAEHENFw=O&kpr>#`~#6%HcL46z@gf|zeU_Z z?(aKI8JcNz#1$oKbJO5~7oRNGRa4>hsyp6%uW;GgY2V_jVo1!eT#(q(e zxd$0*)fg~trW`mkIcj$GPNjW^Nu$Z~ZHNqbKrwhYWDv7j!Q^V@a)H$Vs->n|jMz-z z6hJ3?uzB6MhH5mU zKm9}rOlqA;D!i^gt!tj_NoTJ*=%&4TcBYVBP5Gc-U#3-gqIO7Z%7jPZQn`~zsSjF< zw>($7pkyi>=kJ;gh1h}!xrWu}722;oJMLBQVe|nyO`EEOq5t9%Uq;PY8TF9Im0qE@ z6p^qY0;1uFPj)fz@iWWEoTi)GFfW4L2cIq8>L=QSv`^Z-yy)H$>m}YGp6yush$Gzx z$u&+GO^=@EQz}SKx~a(QfDJay_3RV$PxusRAD}-}&JLTRoIFxOjACTk^SE}1jO(rU z{Y%FI-M%$#CXH$J2jgIQ@hDWJ0wwxz`s-_o^m8 zAlGy@`Z^Km?nfuV$fRj;Br9=e`p1U>HE2Mo(s2HBJTi8%!KNiErR4uZJc1^2n=ne_`Fb>j zOY`vPUQ-Dr$_hx@=!WFWy_o7-pUe;hdv*fPG+I~d9}n*uy`2kL|D z&ntRv2f?EEnBmjopvu`Ttv?4_D0_fx!StvnGH@l-2!R?gJJ|sZL$B%L(*;fsCo3QX zs2jLGh3xy@PUJ=+Ij6ztDiSZt9Ajvb)VD&~CK29I6LL1^ixpPfat z(u2yb0kH8Kzo09XwTYKadRV5p@k3>7R%YDWlgP_|~>k7ROBS0Fc{ z7a?n+iieT-xjlkXZa}8sI4gPwnE-E1r6s1jEefH96dBR`^2Cu6Bd!AY4Wda=XlnJgk<>7lbY1B(fHfZ#xvY7q|G^Ap`)g5Up#cv>pEw3c{s`XAkI9Z$7~)&J0JV?Dkb@ zOTk%~d-s?&nsgppdKS%(LaIU&g=*7a1dp9b=KXLB9$S~M#VL4iMBoQ*Wp!&!%99s^PZ7H=h6MXWt4EIf2w_?; zW;DKJH#CRh&M<8;5KeTp3`4cshE0fTLuxJJMkx~*a^1toD7kV-=(-Uusjh&!ARqlD z6N&r5r@EgTEbGNQRqo?xOjyEkPo4VmAo8@JGlYl(lU*vfOF$^nK>ILK2wjTeBFYHb z-9FAR{P6f8ZdmjVs8LeSknmgKWD|WWR z3R|Cx1B2*CRvc1`Erj{p+f$l}Do=gN1{>U&J6DorVXI?VBDSvs! z45nHFLGO}VyhwzX4>!jW-uqlASALrt=&MW9PaamV8as}Am{f-SoDrBVJc4W z^t3b8faUiveOd{_{7F91UNa*%(R)EB_ma19fhkr9THZ2QczYucw}kFmVNaNfdPe7p zysS3)gXOK7D9sL;lD9YH!k|zuchLRauI7j3I;>=6I5uxwTcSGEd(XB!(dFeDn~yS^ z@`TWMX0V#mQap_Cd^Z$)x-%;D0#J=p4dVq6eirIO^XcFnVU^9w(BWYD}G#9lp*UUSndjx#@E>d!ps+ z@Y;*~oPwB>z|Ng(mLjhWj6$_y^nhKmIc_!nCN%bjLJx?;{bp!=RZ^ZFEc8t3PN;;e zKp)gn-%|;?<_3TOw_eUK5h`bNplm#iYCwlK`x^Xpn65 zb{V5wbX|fXl;{eeN2a4XxyD0gPw>-+V3H3HorgX=bTbI6nrW6^^r{YdbIiTecM{hu zwpB$bp1%iPruZ6*YC#t8K=^s0sV-vm^J%s^)^Skby@7=GCVoXZ=OxYw&X)dRpT=Dt(prh8-4KRYl`17&pRU z$Hpwz4WR$N(8C^S)?TrYTpvgB;|LGz;Y&JsIdJNZ&I z3t`np~(}$4HU4VaruZmH0hRyQ^}uJJ8y36_H^<fu8VQ(DY9NokAfch=s2 z%Qxp@B%HqYJge<+Qy4k+&Lg4H5OMPx;ux{Hs$_IzUD3Yfd@Bg=MdHzshAJbWa8MY6 zCci-0T`d`Fj!EOfnDy-&xs{l4?*4Nhmnw^TPT41uas{z*Ph{@~y;|3tXga&?;8?@j zg12*REe!kXZuyRiny*m(+(lv;pH5E?=oeZK%afu_2iYXpEhGy7f}+ z!myC)9BySfhn$av&4&f%Mg(JCU<^*BzLR2GOkABvG-aLZW(~^S@DZD}&M=67p$VHF z`S?(@b^t7ak(ekFy*n3$&w`=AWw9Il%*_bQ3o>(QZW z)t^%b*gVg+q#3d8F3dF|i&wdpnnjG+$V~%z5+}&dwX>_7lmkxv4rVagLn* z>XTPy@M{H3L_S_n)k}J^yKkd?<<45zRkPe@?ACLu1I)XM#w=7m_~eYI)E@N>wR_t= z!)3vBydwRH)RRdg9rK~eCy`E{&yJqU;yT}t!Op04|73JBaWzjbqbr;4vC0~?7McXuJVGv#WlqiQYbGbY}--Y%ybSnIkJc*Qbgy+}Cj z_!&!;)}4;N{03PqFM_5C4V_u^)9c|)gNrs8I-vu8@@T!$5>G#`|Q#&4DNv8j=6W`@NA^ z=?Uexh;rvJ8x$&qlkFe0vZ7iXP49b>{ZBg|yD<_;F5J4_I4$;_k#$jPn1zca{}a`T z$L{6+MY4VlMnMA125&1fdn(16a?_r^?@7_1#Yyg5ghMv1ZY;;|D^EM@VAB+>59jof zy6UH6=baQ^({?%+D>waa?nB#RUvaM~OmFd>bd#G*KGAMDCg@B)0&#&q^1~ixH@$fB zA~Qa%9e>^3?U~-aixEpmGk?KXyQbk(cqssuUG!oUd0S(;wm>bpaWM*89@+OOfOW!Y zMk76qpJu-o4e&&+{CF^fbx-O_1Cu?4LK{0}a)vR@cUKZx;&eZK6<;m98&bB7*C{Ln zGd)wE_rO=)0h|8Jyq_o6ul(Ss6z6agU-`ZRMY5a9DAYoBY2$5KCm6#eDwsz1P{TOf z78Ew~#`3t-aEn4U)5My{)%A~g>U~yo6AXRHpSBQ&L69h7A3C$HbQ!VEki}FK$aovs zPNdprz}u})mywklNgi?3?bJu^OHpC<9^Ipbc4q##_2MqT0Q)ng>Mtyc(wjT(w47zy z9TeQ*>b&6G**5z|lB7e(FGd!lJ^b2n7;nqar-4hGRYi0x2*D@pg@@g@HK;@GZ}=p~OGxyAP5o3(+0a5+E`F)VIqpz(j_5WciOh}_+2CU%F3_;BNnq~WGaxujF?S{vB%w<-~!QE==|2EauA7nnfW ze3srU@7m!Tl9elCT$3E#@6PXjFF1}RNn6)Zh8mQzMGs4MUGxrsq5a)zwYEI4tP1WIeo(Ka^TXe z{h2b;bC(}U`yV8?Z|O+%EIA*PopL$L_r<9jJ{LVqUD{Es z6E~c4HpAN)e9hsaY0Oi-8KuGQ9VM~NSM+t3bi@S($~OfsEa*y#7&`-8QLUPhS!>M_f-1ZHL; zh;2yb@sPch)vYlLBYEwIW|?c|NGH?zg60}?puu&!ls=)@M-U?EW+gV*Hk1jg~GTGxYPWSG5Gje=N&&HQ=`@C|9 zVR7n_Z&n_=v))X+sfdYa7uNmL`U`AGYkc<1SZ(3DFy0kuq}fTAw=z{Hn;YR>kix>u zD)Y6njy2mpJPx;zt8-B|&a}g3_dY1zF+H4};eos`>(~ESxX!yZqWRk4^J{p$s?5Aj zK_4|+U_i?mVex87d&U5{2+so-9u;-_GHSx%>53EwFzvLo8>@q)>br>iW(VcOLtBgv zP8e7e&Y=R3BOk84g;~tlq8D!LikpXJpIUP=P=Hos!2t z`<;?=K^LBrwzi~u^?q2cqcU2t-7*DL2QQyTP4iV8?aH~Uaii5;jM6%G2Ac(DYE-3t zPVIWXJNANjnkXh!xi1F{Eb@)T!U&H$#Z3Ne+bFM?96pb+VA*0wV(yDT=+fPtb7n}mJT|TS z-3t%lr3QsrL(g|rcb@24tTyqiWnu6Ai-mKVd~=yfs`pf<2d4%zc!nmj3BKdGjePw6 zgU<#pMLpR-DbmCa_;)nnCMIP3b1|lz31@wwsRx^t+vEN?*x5JCPJVTtI3^-A$J@_x zbX>DGvg-lA;|204^A%_e6Edtu0(&z#$=M@0!MdH(+ymZzm{Ci=>8P%S?8+`2X}d{>@WhfcR-)o*$j_-fb3}`(@HUQ| z?7GblZVcO(KO@dP2roo-`{hpAoh$<*SWQyp*o3@KayJ}t*EvpyreC=yrTDrZuiuLz z4>~FrX7wKo7$t|;5CTVyf;?WOTu!McM&*wrgmk13>yx}q-$7IBy@{Om<`YGSL(`>s z2|3ZL%_`LK-Nc$cvn-Gg3mkf`Ax>NnE}UDfpZ7X1&kk5(lFNllgmgCXh>ZhP#<4#p zPn72nHMpx{H(-`FzRWmCeeHr-=eS&QO#n|r9uZ~e(bL%3hdVwl+J7)YRbzRr{CJ() z;$g9d9UsO@A5(TY6qM(lvtCaFA6{yRb?z|*=Rsz5FwAM&+90kxeU&8cJbpGKwK&*x z)b3Ko22oGjG-+x}t03Iyy z5K0czbt2<|@-qCt@qtVXpoWiWe=LIja`mkzIL>5J|>1=2abBAlzDAu{{EQ7;D zW--}x#&EJ43%Nxo!P|8I^t0PT#bQARg0#A(F9w50Dc?>H0l^>aN__@#Q<3tw@Zx2yQpeZADHm43OJeL zwAmxYkJpT>jwj|`vdt96Bx{(UeANYm5XNB2Y6egdjGsTmK~OP2IJOL@1ZOL?|KX%=V(W)}0-O0uP4f!bs3E zw^31ze_P#dW#5rxs#Bk!ElI;qK^>Vap2=ZyQAm zCx!+>Z1S6`3ZN2`P#Nw1&e&)ee}|->OEB%OdIiF@K%D`SWxr3 z=4R4VddM#0RTI$@9x^c-Ytpzb9+&(uX7o_BxmfvHdU*RY_n@FFlj9KFG>-4@wlRI0 zgk49sH)!%ZI%CsxAPv%Lt_4e5j#fPMxw!v6PcP9&LO`7Kd0J1c7Q!GF&_8O?6$yhB zgby&VK0BgSZddds)NQQTphc z%}~0y_ZmLkAyNJQVU6UlrK(fl@aKfUMNrAKlWdtNSxSB}NJtApmdKKICR;l~WuF$?(AW~PbI`Gt$WD_rB1^Vx z_x+twr(gFx?!Axu&;8>b|N747``Nem>-GFbG0t3>iD{CY&4Iat6#DZ3k9N7woymFp z<^Jbx^~#SzV*0#&Qxojz6AS}eb|dOk!fEJrr(0sf)A4~8*@-r}7lz8cyO)P%bXGox zELROVt>u+Od&+ygD;-`PVX2%db<%LGwj-{?dTc{#E(*2xf8=26QGVnoI2i*RpK+!~ z$>RqLfiBk%H{??q_g-t3F<#cFvdv6`r1K$Z7dIsctSB{-)$nB=FufIp?Uv!1q>uTz zl4E=BL15`#P8vi{VT;V?IB??*+PlokAf2JmR41^_?P{k#n4Q5;L;X| zlDl@(@66oJomNhcW}Kl+|C616YUiK6^UuioznFI#HhGVz@7%;=>U6lh#K+6H(9NFe z!#&gY?Y)&G$rYklG@0rxu1wCoq*z&wYUM{!4of|fzMN*kqFmT0P$K9EHFudx$DTG7NFO)>XHtl&{m)mvkGuQ1fxi9ARyNo zS1b+^1=yC!>_!rSm(oZi|Kq&$PFn+-C-e?nrW_Z&8h{iBR7eJJCHCypJrKj$KwQ-3 z+&Cirf&b+~AT&4JHWc8@kjL#5nu`g|bQO#VuGU{_K`#Y0P)~KmfZhl!6Jmw;KS>eJ z!_((=>}bwYqA8@=-O0C|&<%@pw^&jswF2-^xltRSnLwQ^tiMTM9eDIRccwZue#LnS zki@no##A{JRNpvC(yOD6YNhGyYQ;dtli=M++%C%N^-};ci$)zHB)Oah(ho6e{m`R2 zAo|`Bc|4f;XU`HnY7k<5gYVzJW*UI#-=LxN3aDg|+CXg9P?YUZl&Di9>tGwHR7hJZ zk^dMT`wm+1T}9_Qn#L9uY+Df|H?ol4PhMwT*f}@$Mlu7e3rH}VX(h(G!H?a9-ED(HhW7zJMO_B6ALr zN0U@o!h@3O=EaK2v#BT9PI@+nSNL-r;+^aBTbo?y4+;L_x3+W+xoomI>18su;(Qo7 z4rro~DubRF8i?(_`D%H(t`gA>F`bmYI9@OuPpOw}V&ysOeP!E)Hvpimg<(;fmb#fX zT6S$bkM|ssP1p`VjI64uagak$D8V~lD&a0xvE2fR6bdKk+N?uO9*YSmpE)&kjpUKm z2gX7<4~N=`h*a=pAe>|*l1gnlrsKj?4TPsZTew3@9)|6qlk&T!3h_`wP@bI=X{S;8 z&?WS*DS(Td z3iY4se9UK8d=I;vCQ+te=Ey|P$Hl`8yDACT)5 zW@a}6WIa}s2*5v*q3&H;&luXM&18V%y=C&>IC{8w+4UR`QrHU7=|kf0>$%Y+E7M$U z3lrFjn@HEtTI1eEZ59JWLU8!C!sn{sAo=2z0PYQ~z)0H}kmTq$7FJGfh3onW6x9TD zX(qn3KqP&w>MWC=)2yq|gn3oZ^Vm|Fx#B0&5thh$tOiQHNMt;Q7t`Cvg?XG4z1j>k~xklqR`_pBD;Fc>HZvzF5e6 z(a%R1k#g#N zR}V%OmNS_>_a&&y4dEPt3xz8(%kVT83yK|GOo>F{0A3PhvQpoAZn#oOq-0RC^9L;s ze`WvWLB&Ee$y7WU)M&sA#kF|o5uN{}qucro`9=WJ=ZGGJQz)EwQ0l85$G`L8Ozrb4 z^a>(*YKZIJv2`Cq5NPim7jo2b%XtO#R^T_bG}sH0AEY1ti}(!7U87$-r_AsyvUl1D zYO9TWk}ricmu8mvcCFFXu;X!UuJbpuXizPg9K9QijD}l0d-egPOjAj)bF+kRUlrx) z+Tc@vK6X`gx#j5D(Yay@66tw-OVxUG_`q_vgsO|JM-Ay)hk=4FA3>~!^vUHWOcUSv z9D7VK!&uzab0&hZ*jAbRy3NLL-zOtST~4u9@SxR3yA+6vt7k?FOC>@~UieWZb%w>Z z!9Ux$HT%CILGw2(i1MCVD6|YrY%=1;>VWL$yADJjQJ7mr%lSbR54orLBC&jJJSoj7 z{^rnD>$r^2C|HC~m-CI1X|!e|k+RoW)Sp(uf`+p=H;6NAC`iNRRY8kvRc1o!{V zEMy_nL(Rms&|fpL_n9nGVmXe#D{*G%#4D7IX`iy@Q+7|JdZ}73JXG(tX6iH)&G>iI zkg=vaGUqu8KKpgfWBF9S>AjwNgMW~PoX)TF?cQgFWT;-}%8$5J zzrH)kQ6u1Pdhl~*B|~X%wxv#c{*?p*11u*Dp(=lg70m9fJiUnm`cDY$i53awu2?oeDD2(N@K#1=$N>{KsZ!+Ni9 zj9gd|#I}Q>^bjx$9)5l_xPOOp9HYYaF>!(x?C7*2_-ULEF0R+ELMlMsqyO~5pTm64 zunbW!4Biy_1aJq_A~UD1m-a&DGr-LfKxZtB2`IS*=$}+^<++V_9$u&&7jL^3 z8k4ii#S0tEyIZD*X=|P|Qab53{IF3dyi{$L0&eJQf65xHTpvk8Pr5s?Q8p5WG}6+gk5w=IH*zA4AT2TW{j^ z9rJVXyG4hV=RB+tLliL+G$#F09)n|L>OXOo=9YSo5lsmGG zkCqhqkcHzfg*MV#On4UHK_1{N3d93lIY>n1lNJTRO)q^Z_48Pss;QhWU0b1Iyk8`% zJfHO~z`(D597#A|t6?UNm;qRaa#JLpHz1ied#>B1$!RFcI_S1!$-&#wBcLZ9gz0Xu zwdDqF#}tN=#;VLjHL->Os{i8xl@vW$$|8CQ{WYmb##f zD{6JjD4yd}mbY}TZGjD@4s=o-pEks61Nlkf;_Xe$R+8h6^JnI~1Y}iPWTeqvCyQ#$ zF^G?|tu{&nXC15(Cx!Pg6<&6jkbdUZNo zfiPi645%6dg}4&G*T9wAa`{vJ@&W38b8mpbPUAvP{t%)Q`qr=>eThbaqfPzHQ}ZPY zfrXWcMrUOXt_e7*igyFa`9X`zcfq`1$KrUo>yKk!xpZA_RR2Xyo2ls9*z}<$P|yoR zyohFO@>(V6Xqz?=M&%{p2+1&G|8)#uG$71?hjD^ebSLt@ZTDX^G0RY#{DGzh;&icx zgKGn&fOpNwqp@bKw`ca_yyi0BM4R@7&*ycM_lp$rmfCS?9)&xUM6PdeWsr?Z-D_^W z(Q}|HgjMZL*xJ;?O3C609Ob@?By(43mJerW$;$I%4?y$4(lUr@JtukSsFi>{SwZwDMW9J*^xz31>7D@l zBCh>*q5e}Pa$R6{B$;PPvD+|rOz}_N&V#=vDs)tPnE7K#uwfxZzLi9w?{6OQoKlqh zW77U~|7z}`pyZRjAN9{6d#dHO6omyc6yPxSn- z%2<6!UGCMJ^v=6J84hct3;bp;!y$7 z9<-r%64==;{#kv6U5{`19s0)F{zA#&L_=4^&_(?VEfNHNSX}u@&qCl{M(oY($6Rtb z#}@+}$NQR>$Ifd1s~Ep)LgEg52&lhb_BTj@iNCCAO@%!)K-&V`fWqt_)pMCf1!k_+i25>+)Kas-%zF z;0%}GXD-!GJqPqt=S3}La<@$c<1JCF1`m4FmCzWyKX#G^K0XUZ~x zd%_0qh#6)zpjhk9&CMGor=%_)RSir$HPfjWK4qQQ=o^1xXKzsgdkDKxMtgzZgzMXP zUy>if2Z)rFcPXnlPKbj7t+TkGu=C4kW8)|%t7?6)?^1cM4cpp{59E%o0b-^#rQ6ab z2XLa{qNQiLS?I^myea8QH+-3}#Dj$Q4R*E!3f& zjP9^i#V;m2ESifnai3U?r`k7Im6>8Z}7RYTf~4Ob#-;jThYTq zN}yD^Wb(*<{?+9-a`UnVQ{w5~9If~J_{f1}yimUC$tW=)0NA0#8tl}VyQ2wo8(Nib zIPiMTF1LPN7;&04GguZsh7}DTBwe&*8rfn&Y@TNd_e`Ttmqq!`Iwzm=*gy`s5(3i~jy{9cBY%U%L{61c9gGm0$w^E{$*85gsc@*BkTM8k8?E}PMc!e!Xj z)U1e&^h^W0u`|&jiGz{It85gs7GH>4%ACceqv^e%CO%&aIu9)^LvT+>IN`Upl3FC* zmAX0KZSdRIfmJ)^(-%)w1P$$qkm=xOK*8-TG?n_oWj1=IcFc!(h9Zy2w?W1R+jbKp zHVE&l!skqCpav{6x6g!>P?15VqB(mQ8H@V2QF zS?L)_GNz}wQJf<;=uYSyv-&;a36c`CW`SH7oq{I%^*HD2BY1+?7R?6)I`lVT?7QZS zJRLE8Bqd?if&-HD&Y=%Q(hggkf!B52??1$ZwcthV-&bkuWAj*BL9ba&v2!zqalAc8 z7Oe)44A7%E@nsC~#F0NX>p?2pn%~}|Q@B(UA173XJ<5Qgqi5QS!M@9;Gpuzpq{y4nv1xgPh9+G`;7<)1i^(z|ujJ;q6gt^d$xylzn^0Hq*hM)=}LfWHpQH F{{hhJ*?|B6 literal 0 HcmV?d00001 diff --git a/doc/plots/sp3_residual.png b/doc/plots/sp3_residual.png old mode 100755 new mode 100644 diff --git a/doc/plots/tec.png b/doc/plots/tec.png new file mode 100644 index 0000000000000000000000000000000000000000..bed8c6706e56bd0f483f674e164ac71189e5eec1 GIT binary patch literal 1340263 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 z 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

G% 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 N4M!hnv{>nh9j(901FZ*V2Tm1;zN~<$DCP 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

Zr+R34{yy6gF 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 z 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⁢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

  • Q5<3sD8n73zr)=QrG9VQ$| z%0=qw1o3eUy%cxBsUeKZi1TI_=65JsS6kqpYDd?wtcND%$mpY!c~Dm7HQVOVY?(s0JA}!t5a!hsd?TWhZ5Wwu$Jjy_l1shtPPI{77NFdc zhN_`-7(FHMkIS~$1~t$n)BW2h=7l#mxbx6Vvr;ri=6DYZ`*9_#$(t#PC&``T6w8YD zj@F|mScVpNK03&a+bH;lB4rf(jpWVRV4Hiik;n6h`&npmXQNkm^;8qDZzumOhneU1 zk+Yi;RWOg$!bC0|CzoB_F=6+LH*d%+hxKmQk`*upE5*)ArUBOZn*n1#cs&-C@QUl0xh`Eh!Y@e`yKGtG&Evy^K znY*yCDZIH~@n+d_+&5MQ3wg6;v6}6To6!kWvu+NB+!G7{)3!mpF z2a#Akk!QSF>WWr>q`hiA)x+!bg#h6H2sVAu^a*-$lVhy=#YST z1h!h)9?)9?-$VzZbKPv*P3Q`gC@^dB5;O=hoiv$76rC4upAnN3_cHxS90CGxF$pj@ z(*h@ftv^J8?JuE_XG7<8eH8cN?F`N~BgSieQ>`S{`KYp`v(aS|1ak<8yf=lscf3|@ zUpOM$4HEGEGffEay0JAQHV&=WKeFS1;I^}4R-!yI+XQR89M+Kv6)oNgxaeI*I?nZ2u>78gmXQ&h{o*Z=0hN7j)Auui5AMW%M*lajF zvt#ebj8y@&O&*uETkE~p+%pki2Qjl^!022HX87FXaxY0)6S{q}4qUc+Vn@n`qk!wG z5lW}8H!_VN@NY%bc$^@n905Z5X=-%eI?roGzz5i=b&{ypV06)d1wMP004vS`*LWK` z{Pig8Ek;UfE*`ez;cA*{qqOObTIqQ?;4;@vs013wRfPCwdda4>-YLznTY=6RsFc07qRQ_MC#V}OPW81 z$$PjOCDS_@t?o+)!}q{^w>aJC95%uhYeZsRoN`0hJanin{EjJrW!I9Y7eSm+MDHBW zvE7eRpnK8nbzpLXqMw5Q=wz6J(2Ij37Y@$6IDRjVv-c+P-usgjYB7B4atu$-6F7S^ zLb5we5xl_jR&dDUYkP6nf*uuwsL>fDPWrI8X(Nu9N$3V)i8#?_mq1!^5@#8$W{1gl z)ohKS-#3Ecu^92lM;pY%N*@KhA7>{KT%HARaXE}#{=KjxWHdm+I|^4~1nY;R*gA?M zIvZ873lzDLQ3mk=<~`jwH~_6cQonXk{JXJt=)vlm6Wcps z?487LD9Z`XqRe9w?_G-XB&-|*N5>JCV}jTc|* zjxoBhiGF{QSP>#gN?gr0df9ql4cngEi@$&OO#)HXF+EKbA1&4>F*uCf^Lbo8UBvsB ztN7-HEEm|o>DdAEd`LllNHKmw(XPb+5RtA=-50Sgzll)S;srb(`M>S}&`lTo*Z;o0 zY(PJL-60@Oha;A$JVTZP$bBy^+{O|%#B<8{8DK0Ng)l312fpGEU0B4sw ztUJ4qxCk4YD~Kc#=(gC=VfUbKILtnL0zJNQmWPNRz9X4N`|N#a*r$lBh`5)O=ik|P z+eEBLyB$*)rwJK(58AtU<`B5Dm*3;lHsY}21k%Q(ZH=JEEx6#rwm2V;-Pk=2V0Jlz zL9dVEUxKoZQ9Q9;$y$9Smb5-q&*R7Mqon>y3?He>62l}3`-l%yn@)=AZp@R1EpGQ> zbg5BInIDKcAluhTyntpEEY^c&ualxs)+;l8O2|#CrIbyA*-jrC-7a$7AexDN9Tb4W zlM&2p`!TxGMbX*-d$b0wcs-BHfLAlQVm?JV*N(e#0|F$(CIY=1p1@w;j%PD|O(m7<@#+2}7Ik1kQ$e~0H<5#zP4 zu_pFE*{HH-DBj%R%~JzfGPU1LLGGuRPplZpUpwFYetCuiP2)OhpOjtTRd zy$DRz!!lAvUS6g6R|{J zDc)@G<-(e%Py>F#o0oS7*r#c{d1rqJE3!;i@#b#+-KTi-`pzJx$g@Y8w;A3)w$P>e zcY}L?6$_y^Sav>|kGKQM|d?ElmYZlAZ@%u3k@D7^e)@IaJ^OTK2xtz0lwbWP82Ite z!||D)h3zvx58IFY5?ntd4uN0bv7dwEM}F}moB78+hsLXbDQXBT zb@p8JhO0>;TH#1EqIbBAl|BpA)^q|YK`&B@K?-HpXbs}?ZJ66&qavuxP_R!C1dHpY(|z1qP%ckq5jtZhq_R}(gOhp<7A+dgt&ZJ#1!aS-Ov0D&Y%lXY)0J?+W_#GV0~ z*1%MQqv+Gfz||C7r+79Kd^h|}qU$Peqc|A4U<%Z#wQNf}{b~wUY@rpd$p-X})S|+g zhm7tNJTg4MW8)*F7#`tq`(tExWf8<`S@wglCY|UCIGG+hpF4~uS&z&Hr!{=NL0^G@ z0^Dn#FErF2MAOP$BVrQST{99MewSm~JNaaQ?c*EEU8c}Ia|p=%=MR=K z%_4NKM#`Rb@@fVR+lw=bHn$c1(GK{h+cCFp!rHEtMASi%>%!5gjUvxMaYSKzGQ)PU zgkD**?+BA%xUqI5(Xc}}ICSBZB=$t&4qOCq`ZR&_r&D-OZNV4Ef4vyPw=TvhyheDh z2@1(soIjc5c`@Qf5bn5#!aSr#oqUsFtnIn6vS(4dlb9nGwI;Eigi~8?GD|W#jaI%h z5!ijc5%{OVBxn{Sm-?{1@5R&e5j;H$;+wqx(M1yT+hgeU`B?`O7!1U)xI2%9?I~Cy zZ1Yx$^i52lY4uj?h}+n1r#I$td=|r#GdImcF)L-_#v#f2_O=cC2X5xy$FlOUoB}+D z&t-Xti9_J{B!t6@80NNO=ysZ!h9Ddx0nDsMu_Id_K9RDRXIX6Fgu--eX&D1dpK=^n zrr1%7Sde=8L3@sGn#pLPe7?L6e0NNybv99mh%+d$7{lS^Bt`W+zInca_b;|6vUe!R zDa20>ad>#3M7fB4vD1@F)(r^`D1imF;DUdXL*Qj%|7E71bNw29hJYS};QH@!f3;NL z@?1FsE-nseyEvopKReyy--kFm=l6>pJbhng3hb~?+`_`f3ao($I;_KJwFc3_zDIVh zknPy&Xc9L-%1FmOWeQt_&|b%szq9{&yN=1a5zn42*^qMA`%^KwM#FNgoy++z-t&85 zSLq}^i(^URs0?^)h|lz^QRnqt8?n)c(S;zoDXJSCBgAW&Ng%VO#EGrvQSNosS3T=r zUwqbwm>PYIs=C@_nL!8f(LdqC!j28IYZRZGGE=J`Gg}6XuJ*x{v{R4=d43Wt5-`@m zw%`k(#cM;eGeFUwq_7L~Hy2u5CJOf+bjG_eFiuVs3ZjjIuh%_{*iulmY z{t^{%yFXfuHVXYJYXJb zs00EOE;=boR>^H6iX2H1r+OEAI7R=8(7$j4>$y%2rD0*cm3#hZI0<;oFJWD?%| z2(`8}{#Jt|MQ&V8&2PsPIct(aJ2tCr(Ji}j?NFS{wuOiLRuvOLcJ`9shW@EK_;}yZ zrA~}5cSGWV$?^D1lj6-urf-hvT_wL=C2wBhb(7@c!;|&siE z{ERb;J#(Tx$1qj56mOO`BfNR$8gFLZA#au#5e>4Pp|u^(SiM^2E4+DTqYEMC&mjYX ze6J;@Y@~HQ(s*+x`Ev((bH`)k_2i({(*#q(3`@cVqtC&9#?E&iyyDGL$EB|7b^5AJ zf1rJfUDf9wVAIN8cL+S^&CmK1^-iR`Uw-}njD2bj0fz%A|KOis@F%_i=a2pz>_7So zuz%)raR2ZZ;QGuj^83%j`I%q($Y%NR&m)VP`}^7<(CUAJ-l9~KQ%kjVDM$5lK|J`%0YhbJ!I0ddhVd0_bwY(COib181FSf02y0qLzI9u zGTlJ1Y9k;GV)w*KqHDu3!AZ& zKum}L0YnR&Lh>fyCLN)W2PYc@Nw>^gy))IRqL@zP-f3S zM&EthH{Qep!%d`g-N)muhsf!9#7?S+os9wEH4_FCov1c9qS`c|M3;=zKKJm6U2_QN z_6*ph(SI@x|Kppa^F>0dr|-Ib@HZX61l(lJqh>m=$?wiZ~AtV**&)b*Lby;b|j=!hICyUbfXZ zp0BHy&QnP2C`slR$(SoCkP*7{^BeULPigg%Bpuo?M^8+QAgdH-_WW0L3uR=Xqym(>Od? z!OrP63FiU^{7JN1SRaSved%>ioH#O~C&!+*yC%L<-68NvwJR;?*rXce>mPPwc00yA z$8mZziHoBpJUQNEo_BEhCzZ;OM<(x^Ne< zuM2$ryKE~cCf{|_#lC*MJ`+KnDLV(ecpv#)mN8tMAM^8w=SWb&4ICaW@tv;l_ifhs z9UPzRF)#f6@&HGto7g&7Lu4WjUm}5ipB5BTrfbXWGU-#)T3D8k;9RqssxIF}pvrpP zA5`4{`ux4M2?{fQvOjEf#EE}?xD!Jd zUoc=rc84O57+tU;Fl9%V-@*DMyPs(JllA`M)YaD*Yvsf|DUAO(`ICD{U7k?!O^l8( zpJ!7XZjRz^ZO5htr>4mR6H7JQyPBpZqA zwdnK~qnW=~kvG>kGSNR$0SEc4jr`F!R-<<1THe-p^CHtLvjp^kwD5GxGv4f)Y=LEr zA~jTuR#z79nF@nH2S)N{S?`}Kyt(flvU_f$h@Ud$UuMt>=ba!I9bIfz!Lt*yO_*LY zVEu3i`!ZU8#hdqK%k8}ZO!7DXWDU&GVl}&9SY{V2l2@`^CnX*juNSUALmoZ9-KXLm zC}+b;2R!7xoq+>@#n!dQidQoyYOZ&|Mo^p5loUlkCHbhpY!H0(oS-|9=|Swd;3mIEcT<%V_}^W&dfUV0p2W}SsVhw&7_S8Z@!vItNs?8lUV}%?v!>V zbxn9PG0z!7yL$lsv3AT+1I%ytJ{w3hk=M5cicoAxLt4*WjW-)_;c@o^q>?x1_ocAx z%i&+>LU7fD?r;an2O3agv6457LqOv$&)cljbxHfn+PD1vQS1FDZ7*V%p0*e5gTLwA z;{&`|9h2WaIo|wfIs_j7gMW&lpZp@+KmH4F{P-`z@nfHd_cQ$dqo0G5$J{^mOCQ;+ zKk<2F{pvsY{&om-_z58LcPq28NEkgQPKsJO;! zD3a^cQUU1<*0%Zy#siq4&=zlJQl>u<-~v<4a1qdqUf$o9iDq{WJBn1)SstJe8tdW*f9)Y`s%0DF`y%vdck)K;j-AGvgS#3oI)6c+{$;E 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%0A_ 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

    *iqGl}FH2 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

    ;@nQSSz}ey|g*z52L3zb3tZ#A**y%95 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%0DV(s=$>#Hi@mSU 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

      R+zVUq2HbqVm+P^oIKu{B4eIFzNZ(d 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]xH%mIGuez&f;qOY!Og_a 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 z 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

      -Nu;xF|QSNE}LL?+BM4DW525Y)Ah>& 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

      o|-MQcwEDr~X1ni3}Vp;w;c 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

      ac*kYa!1az`r?h4S{cjN>@qGDwnJd^gi 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 aJve}Zx2X$WR*hj{E**^*&l}YoqyG TimeScale { + TimeScale::GPST +} + +fn default_interp() -> usize { + 7 +} + +fn default_max_sv() -> usize { + 10 +} + +fn default_smoothing() -> bool { + false +} + +fn default_iono() -> bool { + false +} + +fn default_tropo() -> bool { + false +} + +#[derive(Default, Debug, Clone, PartialEq)] +#[cfg_attr(feature = "serde", derive(Deserialize))] +pub struct RTKConfig { + /// Time scale + #[cfg_attr(feature = "serde", serde(default = "default_timescale"))] + pub timescale: TimeScale, + /// positioning mode + #[cfg_attr(feature = "serde", serde(default))] + pub mode: SolverMode, + /// (Position) interpolation filter order. + /// A minimal order must be respected for correct results. + /// - 7 when working with broadcast ephemeris + /// - 11 when working with SP3 + #[cfg_attr(feature = "serde", serde(default = "default_interp"))] + pub interp_order: usize, + /// Whether the solver is working in fixed altitude mode or not + #[cfg_attr(feature = "serde", serde(default))] + pub fixed_altitude: Option, + /// Position receveir position, if known before hand + pub rcvr_position: Option, + /// PR code smoothing filter before moving forward + #[cfg_attr(feature = "serde", serde(default = "default_smoothing"))] + pub code_smoothing: bool, + /// true if we're using troposphere modeling + #[cfg_attr(feature = "serde", serde(default = "default_tropo"))] + pub tropo: bool, + /// true if we're using ionosphere modeling + #[cfg_attr(feature = "serde", serde(default = "default_iono"))] + pub iono: bool, + /// Minimal percentage ]0; 1[ of Sun light to be received by an SV + /// for not to be considered in Eclipse. + /// A value closer to 0 means we tolerate fast Eclipse exit. + /// A value closer to 1 is a stringent criteria: eclipse must be totally exited. + #[cfg_attr(feature = "serde", serde(default))] + pub min_sv_sunlight_rate: Option, + /// Minimal elevation angle. SV below that angle will not be considered. + pub min_sv_elev: Option, + /// Minimal SNR for an SV to be considered. + pub min_sv_snr: Option, + /// modeling + #[cfg_attr(feature = "serde", serde(default))] + pub modeling: Modeling, + /// Max. number of vehicules to consider. + /// The more the merrier, but it also means heavier computations + #[cfg_attr(feature = "serde", serde(default = "default_max_sv"))] + pub max_sv: usize, +} + +impl RTKConfig { + pub fn default(solver: SolverType) -> Self { + match solver { + SolverType::SPP => Self { + timescale: default_timescale(), + mode: SolverMode::default(), + fixed_altitude: None, + rcvr_position: None, + interp_order: default_interp(), + code_smoothing: default_smoothing(), + tropo: default_tropo(), + iono: default_iono(), + min_sv_sunlight_rate: None, + min_sv_elev: Some(10.0), + min_sv_snr: Some(Snr::from_str("weak").unwrap()), + modeling: Modeling::default(), + max_sv: default_max_sv(), + }, + SolverType::PPP => Self { + timescale: default_timescale(), + mode: SolverMode::default(), + fixed_altitude: None, + rcvr_position: None, + interp_order: 11, + code_smoothing: default_smoothing(), + tropo: default_tropo(), + iono: default_iono(), + min_sv_sunlight_rate: Some(0.75), + min_sv_elev: Some(25.0), + min_sv_snr: Some(Snr::from_str("strong").unwrap()), + modeling: Modeling::default(), + max_sv: default_max_sv(), + }, + } + } +} + +#[derive(Default, Debug, Clone, Copy, PartialEq)] +#[cfg_attr(feature = "serde", derive(Deserialize))] +pub enum SolverMode { + /// Receiver is kept at fixed location + #[default] + Static, + /// Receiver is not static + Kinematic, +} diff --git a/gnss-rtk/src/estimate.rs b/gnss-rtk/src/estimate.rs new file mode 100644 index 000000000..4e98a7002 --- /dev/null +++ b/gnss-rtk/src/estimate.rs @@ -0,0 +1,63 @@ +use nyx_space::cosmic::SPEED_OF_LIGHT; +// use nalgebra::linalg::svd::SVD; +use nalgebra::base::{DVector, MatrixXx4}; + +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + +/* + * Solver solution estimate + * is always expressed as a correction of an 'a priori' position +*/ +#[derive(Debug, Copy, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +pub struct SolverEstimate { + /// X coordinates correction + pub dx: f64, + /// Y coordinates correction + pub dy: f64, + /// Z coordinates correction + pub dz: f64, + /// Time correction + pub dt: f64, + /// Dilution of Position Precision, horizontal component + pub hdop: f64, + /// Dilution of Position Precision, vertical component + pub vdop: f64, + /// Time Dilution of Precision + pub tdop: f64, +} + +impl SolverEstimate { + /* + * Builds a new SolverEstimate from `g` Nav Matrix, + * and `y` Nav Vector + */ + pub fn new(g: MatrixXx4, y: DVector) -> Option { + //let svd = g.clone().svd(true, true); + //let u = svd.u?; + //let v = svd.v_t?; + //let s = svd.singular_values; + //let s_inv = s.pseudo_inverse(1.0E-8).unwrap(); + //let x = v * u.transpose() * y * s_inv; + + let g_prime = g.clone().transpose(); + let q = (g_prime.clone() * g.clone()).try_inverse()?; + let x = q * g_prime.clone(); + let x = x * y; + + let hdop = (q[(0, 0)] + q[(1, 1)]).sqrt(); + let vdop = q[(2, 2)].sqrt(); + let tdop = q[(3, 3)].sqrt(); + + Some(Self { + dx: x[0], + dy: x[1], + dz: x[2], + dt: x[3] / SPEED_OF_LIGHT, + hdop, + vdop, + tdop, + }) + } +} diff --git a/gnss-rtk/src/lib.rs b/gnss-rtk/src/lib.rs index 1474df897..9195b3e30 100644 --- a/gnss-rtk/src/lib.rs +++ b/gnss-rtk/src/lib.rs @@ -1,35 +1,68 @@ use nyx_space::cosmic::eclipse::{eclipse_state, EclipseState}; use nyx_space::cosmic::{Orbit, SPEED_OF_LIGHT}; use nyx_space::md::prelude::{Bodies, LightTimeCalc}; -use rinex::prelude::{Duration, Epoch, Sv}; +use rinex::navigation::Ephemeris; +use rinex::prelude::{ + //Duration, + Epoch, + Sv, +}; use rinex_qc::QcContext; use std::collections::HashMap; +use hifitime::{Duration, TimeScale, Unit}; + extern crate nyx_space as nyx; +use nalgebra::base::{ + DVector, + MatrixXx4, + //Vector1, + //Vector3, + //Vector4, +}; use nyx::md::prelude::{Arc, Cosm}; -mod models; -mod opts; +mod cfg; +mod estimate; +mod model; pub mod prelude { - pub use crate::opts::PositioningMode; - pub use crate::opts::SolverOpts; + pub use crate::cfg::RTKConfig; + pub use crate::cfg::SolverMode; + pub use crate::estimate::SolverEstimate; + pub use crate::model::Modeling; pub use crate::Solver; - pub use crate::SolverEstimate; + pub use crate::SolverError; pub use crate::SolverType; } -use opts::SolverOpts; +use cfg::RTKConfig; +use estimate::SolverEstimate; +use model::Modeling; -use log::{debug, trace, warn}; +use log::{debug, error, trace, warn}; use thiserror::Error; -#[derive(Debug, Clone, Copy, Error)] -pub enum Error { - #[error("provided context is either unsufficient or invalid for any position solving")] +#[derive(Debug, Clone, Error)] +pub enum SolverError { + #[error("provided context is either not sufficient or invalid")] Unfeasible, + #[error("apriori position is not defined")] + UndefinedAprioriPosition, + #[error("failed to initialize solver - \"{0}\"")] + InitializationError(String), + #[error("no vehicles elected @{0}")] + NoSv(Epoch), + #[error("not enough vehicles elected @{0}")] + LessThan4Sv(Epoch), + #[error("failed to retrieve work epoch (index: {0})")] + EpochDetermination(usize), + #[error("badop: solver not initialized")] + NotInitialized, + #[error("failed to invert navigation matrix @{0}")] + SolvingError(Epoch), } #[derive(Default, Debug, Clone, Copy, PartialEq)] @@ -53,60 +86,42 @@ impl std::fmt::Display for SolverType { } impl SolverType { - fn from(ctx: &QcContext) -> Result { + fn from(ctx: &QcContext) -> Result { if ctx.primary_data().is_observation_rinex() { - if ctx.has_sp3() { - Ok(Self::PPP) - } else { - if ctx.has_navigation_data() { - Ok(Self::SPP) - } else { - Err(Error::Unfeasible) - } - } + //TODO : multi carrier for selected constellations + Ok(Self::SPP) } else { - Err(Error::Unfeasible) + Err(SolverError::Unfeasible) } } } #[derive(Debug)] pub struct Solver { - /// Cosmic model - cosmic: Arc, /// Solver parametrization - pub opts: SolverOpts, - /// Whether this solver is initiated (ready to iterate) or not - initiated: bool, + pub cfg: RTKConfig, /// Type of solver implemented pub solver: SolverType, - /// Current epoch + /// cosmic model + cosmic: Arc, + /// true if self has been initiated and is ready to compute + initiated: bool, + /// current epoch nth_epoch: usize, - /// current estimate - pub estimate: SolverEstimate, -} - -#[derive(Debug, Copy, Clone, Default)] -pub struct SolverEstimate { - /// Position estimate - pub pos: (f64, f64, f64), - /// Time offset estimate - pub clock_offset: Duration, } impl Solver { - pub fn from(context: &QcContext) -> Result { + pub fn from(context: &QcContext) -> Result { let solver = SolverType::from(context)?; Ok(Self { cosmic: Cosm::de438(), solver, initiated: false, - opts: SolverOpts::default(solver), + cfg: RTKConfig::default(solver), nth_epoch: 0, - estimate: SolverEstimate::default(), }) } - pub fn init(&mut self, ctx: &mut QcContext) { + pub fn init(&mut self, ctx: &mut QcContext) -> Result<(), SolverError> { trace!("{} solver initialization..", self.solver); //TODO: Preprocessing: // only for ppp solver @@ -123,140 +138,332 @@ impl Solver { // total_dropped, // total // ); + /* + * Solving needs a ref. position + */ + if self.cfg.rcvr_position.is_none() { + // defined in context ? + let position = ctx.ground_position(); + if let Some(position) = position { + self.cfg.rcvr_position = Some(position); + } else { + return Err(SolverError::UndefinedAprioriPosition); + } + } - // 2: interpolate: if need be - //if !ctx.interpolated { - // trace!("orbit interpolation.."); - // let order = self.opts.interp_order; - // ctx.orbit_interpolation(order, None); - // //TODO could be nice to have some kind of timing/perf evaluation here - // // and also total number of required interpolations - //} + /* + * print some infos on latched config + */ + if self.cfg.modeling.earth_rotation { + warn!("can't compensate for earth rotation at the moment"); + } + if self.cfg.modeling.relativistic_clock_corr { + warn!("relativistic clock corr. is not feasible at the moment"); + } + if self.solver == SolverType::PPP && self.cfg.min_sv_sunlight_rate.is_some() { + warn!("eclipse filter is not meaningful when using spp strategy"); + } - //initialization self.nth_epoch = 0; - self.estimate.pos = self.opts.rcvr_position.into(); self.initiated = true; + Ok(()) } - pub fn run(&mut self, ctx: &mut QcContext) -> Option<(Epoch, SolverEstimate)> { + pub fn run(&mut self, ctx: &mut QcContext) -> Result<(Epoch, SolverEstimate), SolverError> { if !self.initiated { - self.init(ctx); - trace!("solver initiated"); - } else { - // move on to next epoch + return Err(SolverError::NotInitialized); + } + + let pos0 = self + .cfg + .rcvr_position + .ok_or(SolverError::UndefinedAprioriPosition)?; + + let (x0, y0, z0): (f64, f64, f64) = pos0.into(); + + let modeling = self.cfg.modeling; + let interp_order = self.cfg.interp_order; + + // 0: grab work instant + let t = ctx.primary_data().epoch().nth(self.nth_epoch); + + if t.is_none() { + self.nth_epoch += 1; + return Err(SolverError::EpochDetermination(self.nth_epoch)); + } + let t = t.unwrap(); + + // 1: elect sv + let sv = Self::sv_at_epoch(ctx, t); + if sv.is_none() { + warn!("no vehicles found @ {}", t); self.nth_epoch += 1; + return Err(SolverError::NoSv(t)); } - // grab work instant - let t = ctx.primary_data().epoch().nth(self.nth_epoch)?; + let mut elected_sv: Vec = sv.unwrap().into_iter().take(self.cfg.max_sv).collect(); + + trace!("{:?}: {} candidates", t, elected_sv.len()); + + // retrieve associated PR + let pr: Vec<_> = ctx + .primary_data() + .pseudo_range_ok() + .filter_map(|(epoch, svnn, _, pr)| { + if epoch == t && elected_sv.contains(&svnn) { + Some((svnn, pr)) + } else { + None + } + }) + .collect(); - let interp_order = self.opts.interp_order; + // apply first set of filters : on OBSERVATION + // - no pseudo range: nothing is feasible + // - if we're in ppp mode: must be compliant + // - if an SNR mask is defined: SNR must be good enough + elected_sv.retain(|sv| { + let has_pr = pr + .iter() + .filter_map(|(svnn, pr)| if svnn == sv { Some(pr) } else { None }) + .reduce(|pr, _| pr) + .is_some(); - /* elect vehicles */ - let elected_sv = Self::sv_election(ctx, t); - if elected_sv.is_none() { - warn!("no vehicles elected @ {}", t); - return Some((t, self.estimate)); + let mut ppp_ok = !(self.solver == SolverType::PPP); + if self.solver == SolverType::PPP { + //TODO: verify PPP compliancy + } + + let mut snr_ok = self.cfg.min_sv_snr.is_none(); + if let Some(min_snr) = self.cfg.min_sv_snr { + let snr = ctx + .primary_data() + .snr() + .filter_map(|((epoch, _), svnn, _, snr)| { + if epoch == t && svnn == *sv { + Some(snr) + } else { + None + } + }) + .reduce(|snr, _| snr); + if let Some(snr) = snr { + snr_ok = snr >= min_snr; + } + } + + if !has_pr { + trace!("{:?}: {} no pseudo range", t, sv); + } + if !ppp_ok { + trace!("{:?}: {} not ppp compliant", t, sv); + } + if !snr_ok { + trace!("{:?}: {} snr below criteria", t, sv); + } + + has_pr && snr_ok & ppp_ok + }); + + // make sure we still have enough SV + if elected_sv.len() < 4 { + debug!("{:?}: not enough vehicles elected", t); + self.nth_epoch += 1; + return Err(SolverError::LessThan4Sv(t)); } - let mut elected_sv = elected_sv.unwrap(); - debug!("elected sv : {:?}", elected_sv); + debug!("{:?}: {} elected sv", t, elected_sv.len()); - /* determine sv positions */ - /* TODO: SP3 APC corrections: Self::eval_sun_vector3d */ + let mut sv_data: HashMap = HashMap::new(); - let mut sv_pos: HashMap = HashMap::new(); + // 3: sv position evaluation for sv in &elected_sv { - if let Some(sp3) = ctx.sp3_data() { - if let Some((x_km, y_km, z_km)) = sp3.sv_position_interpolate(*sv, t, interp_order) - { - sv_pos.insert(*sv, (x_km, y_km, z_km)); - } else if let Some(nav) = ctx.navigation_data() { - if let Some((x_km, y_km, z_km)) = - nav.sv_position_interpolate(*sv, t, interp_order) - { - sv_pos.insert(*sv, (x_km, y_km, z_km)); - } - } - } else { - if let Some(nav) = ctx.navigation_data() { - if let Some((x_km, y_km, z_km)) = - nav.sv_position_interpolate(*sv, t, interp_order) - { - sv_pos.insert(*sv, (x_km, y_km, z_km)); + // retrieve pr for this SV @ t + let pr = pr + .iter() + .filter_map(|(svnn, pr)| if svnn == sv { Some(*pr) } else { None }) + .reduce(|pr, _| pr) + .unwrap(); // can't fail at this point + + let ts = sv.timescale().unwrap(); // can't fail at this point ? + + let nav = ctx.navigation_data().unwrap(); // can't fail at this point ? + + let ephemeris = nav.sv_ephemeris(*sv, t); + if ephemeris.is_none() { + error!("{:?} : {} no valid ephemeris", t, sv); + continue; + } + + let (toe, eph) = ephemeris.unwrap(); + let clock_bias = eph.sv_clock(); + let (t_tx, dt_sat) = + Self::sv_transmission_time(t, *sv, toe, pr, eph, modeling, clock_bias, ts); + + if modeling.earth_rotation { + //TODO + // dt = || rsat - rcvr0 || /c + // rsat = R3 * we * dt * rsat + // we = 7.2921151467 E-5 + } + + if modeling.relativistic_clock_corr { + //TODO + let e = 1.204112719279E-2; + let sqrt_a = 5.153704689026E3; + let sqrt_mu = (3986004.418E8_f64).sqrt(); + //let dt = -2.0_f64 * sqrt_a * sqrt_mu / SPEED_OF_LIGHT / SPEED_OF_LIGHT * e * elev.sin(); + } + + // interpolate + let pos: Option<(f64, f64, f64)> = match ctx.sp3_data() { + Some(sp3) => { + /* + * SP3 always prefered + */ + let pos = sp3.sv_position_interpolate(*sv, t_tx, interp_order); + if let Some(pos) = pos { + Some(pos) + } else { + /* try to fall back to ephemeris nav */ + nav.sv_position_interpolate(*sv, t_tx, interp_order) } + }, + _ => nav.sv_position_interpolate(*sv, t_tx, interp_order), + }; + + if pos.is_none() { + trace!("{:?} : {} interpolation failed", t, sv); + continue; + } + + let (x_km, y_km, z_km) = pos.unwrap(); + + // Elevation filter + if let Some(min_elev) = self.cfg.min_sv_elev { + let (e, _) = Ephemeris::elevation_azimuth( + (x_km * 1.0E3, y_km * 1.0E3, z_km * 1.0E3), + pos0.into(), + ); + if e < min_elev { + trace!("{:?} : {} elev below mask", t, sv); + continue; } } - } - /* remove sv in eclipse */ - if let Some(min_rate) = self.opts.min_sv_sunlight_rate { - sv_pos.retain(|sv, (x_km, y_km, z_km)| { - let state = self.eclipse_state(*x_km, *y_km, *z_km, t); + // Eclipse filter + if let Some(min_rate) = self.cfg.min_sv_sunlight_rate { + let state = self.eclipse_state(x_km, y_km, z_km, t_tx); let eclipsed = match state { EclipseState::Umbra => true, EclipseState::Visibilis => false, - EclipseState::Penumbra(r) => { - debug!("{} state: {}", sv, state); - r < min_rate - }, + EclipseState::Penumbra(r) => r < min_rate, }; - if eclipsed { - debug!("dropping eclipsed {}", sv); + debug!("{:?} : dropping eclipsed {}", t, sv); + } else { + sv_data.insert(*sv, (x_km * 1.0E3, y_km * 1.0E3, z_km * 1.0E3, pr, dt_sat)); } - !eclipsed - }); + } else { + sv_data.insert(*sv, (x_km * 1.0E3, y_km * 1.0E3, z_km * 1.0E3, pr, dt_sat)); + } } - // 3: t_tx - let mut t_tx: HashMap = HashMap::new(); - for sv in &elected_sv { - if let Some(sv_t_tx) = Self::sv_transmission_time(ctx, *sv, t) { - t_tx.insert(*sv, sv_t_tx); - } + // 6: form matrix + let mut y = DVector::::zeros(elected_sv.len()); + let mut g = MatrixXx4::::zeros(elected_sv.len()); + + if sv_data.iter().count() < 4 { + error!("{:?} : not enough sv to resolve", t); + self.nth_epoch += 1; + return Err(SolverError::LessThan4Sv(t)); } - //TODO - // add other models + for (index, (sv, data)) in sv_data.iter().enumerate() { + let pr = data.3; + let dt_sat = data.4.to_seconds(); + let (sv_x, sv_y, sv_z) = (data.0, data.1, data.2); + + let rho = ((sv_x - x0).powi(2) + (sv_y - y0).powi(2) + (sv_z - z0).powi(2)).sqrt(); + + //TODO + let mut models = -SPEED_OF_LIGHT * dt_sat; + //let models = models + // .iter() + // .filter_map(|sv, model| { + // if sv == svnn { + // Some(model) + // } else { + + // } + // }) + // .reduce(|m, _| m) + // .unwrap(); + + y[index] = pr - rho - models; - // form matrix - // resolve - Some((t, self.estimate)) + g[(index, 0)] = (x0 - sv_x) / rho; + g[(index, 1)] = (y0 - sv_y) / rho; + g[(index, 2)] = (z0 - sv_z) / rho; + g[(index, 3)] = 1.0_f64; + } + + // 7: resolve + //trace!("y: {} | g: {}", y, g); + let estimate = SolverEstimate::new(g, y); + self.nth_epoch += 1; + + if estimate.is_none() { + return Err(SolverError::SolvingError(t)); + } else { + Ok((t, estimate.unwrap())) + } } /* - * Evalutes T_tx transmission time, for given Sv at desired 't' + * Evalutes Sv position */ - fn sv_transmission_time(ctx: &QcContext, sv: Sv, t: Epoch) -> Option { - let nav = ctx.navigation_data()?; - // need one pseudo range observation for this SV @ 't' - let mut pr = ctx - .primary_data() - .pseudo_range() - .filter_map(|((e, flag), svnn, _, p)| { - if e == t && flag.is_ok() && svnn == sv { - Some(p) - } else { - None - } - }) - .take(1); - if let Some(pr) = pr.next() { - let t_tx = Duration::from_seconds(t.to_duration().to_seconds() - pr / SPEED_OF_LIGHT); - debug!("t_tx(pr): {}@{} : {}", sv, t, t_tx); + fn sv_transmission_time( + t: Epoch, + sv: Sv, + toe: Epoch, + pr: f64, + eph: &Ephemeris, + m: Modeling, + clock_bias: (f64, f64, f64), + ts: TimeScale, + ) -> (Epoch, Duration) { + let seconds_ts = t.to_duration().to_seconds(); - let mut e_tx = Epoch::from_duration(t_tx, sv.constellation.timescale()?); - let dt_sat = nav.sv_clock_bias(sv, e_tx)?; - debug!("clock bias: {}@{} : {}", sv, t, dt_sat); + let dt_tx = seconds_ts - pr / SPEED_OF_LIGHT; + let mut e_tx = Epoch::from_duration(dt_tx * Unit::Second, t.time_scale); + let mut dt_sat = Duration::default(); + if m.sv_clock_bias { + dt_sat = Ephemeris::sv_clock_corr(sv, clock_bias, t, toe); + debug!("{:?}: {} dt_sat {}", t, sv, dt_sat); e_tx -= dt_sat; - debug!("{} : t(obs): {} | t(tx) {}", sv, t, e_tx); + } - Some(e_tx) - } else { - debug!("missing PR measurement"); - None + if m.sv_total_group_delay { + if let Some(tgd) = eph.tgd() { + let tgd = tgd * Unit::Second; + debug!("{:?}: {} tgd {}", t, sv, tgd); + e_tx -= tgd; + } } + + debug!("{:?}: {} t_tx {:?}", t, sv, e_tx); + + /* + * physical verification on result + */ + let dt = (t - e_tx).to_seconds(); + assert!(dt > 0.0, "t_tx can't physically be after t_rx..!"); + assert!( + dt < 1.0, + "|t - t_tx| < 1s is physically impossible (signal propagation..)" + ); + + (e_tx, dt_sat) } /* * Evaluates Sun/Earth vector, expressed in Km @@ -291,9 +498,9 @@ impl Solver { eclipse_state(&sv_orbit, sun_frame, earth_frame, &self.cosmic) } /* - * Elects sv for this epoch + * Returns all Sv at "t" */ - fn sv_election(ctx: &QcContext, t: Epoch) -> Option> { + fn sv_at_epoch(ctx: &QcContext, t: Epoch) -> Option> { ctx.primary_data() .sv_epoch() .filter_map(|(epoch, svs)| if epoch == t { Some(svs) } else { None }) diff --git a/gnss-rtk/src/model.rs b/gnss-rtk/src/model.rs new file mode 100644 index 000000000..f77344b8d --- /dev/null +++ b/gnss-rtk/src/model.rs @@ -0,0 +1,58 @@ +use crate::SolverType; + +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + +fn default_sv_clock() -> bool { + true +} + +fn default_sv_tgd() -> bool { + true +} + +fn default_earth_rot() -> bool { + false +} + +fn default_rel_clock_corr() -> bool { + false +} + +#[derive(Copy, Clone, Debug, PartialEq)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +pub struct Modeling { + #[cfg_attr(feature = "serde", serde(default = "default_sv_clock"))] + pub sv_clock_bias: bool, + #[cfg_attr(feature = "serde", serde(default = "default_sv_tgd"))] + pub sv_total_group_delay: bool, + #[cfg_attr(feature = "serde", serde(default = "default_earth_rot"))] + pub earth_rotation: bool, + #[cfg_attr(feature = "serde", serde(default = "default_rel_clock_corr"))] + pub relativistic_clock_corr: bool, +} + +impl Default for Modeling { + fn default() -> Self { + Self { + sv_clock_bias: default_sv_clock(), + sv_total_group_delay: default_sv_tgd(), + earth_rotation: default_earth_rot(), + relativistic_clock_corr: default_rel_clock_corr(), + } + } +} + +impl From for Modeling { + fn from(solver: SolverType) -> Self { + let mut s = Self::default(); + match solver { + SolverType::PPP => { + s.earth_rotation = true; + s.relativistic_clock_corr = false; + }, + _ => {}, + } + s + } +} diff --git a/gnss-rtk/src/opts/mod.rs b/gnss-rtk/src/opts/mod.rs deleted file mode 100644 index 35a355065..000000000 --- a/gnss-rtk/src/opts/mod.rs +++ /dev/null @@ -1,107 +0,0 @@ -use crate::SolverType; -use rinex::prelude::{Constellation, GroundPosition}; - -#[derive(Default, Debug, Clone, PartialEq)] -pub struct SolverOpts { - /// Criteria (for convergence) - pub epsilon: f64, - /// (Position) interpolation filter order. - /// A minimal order must be respected for correct results. - /// - 7 when working with broadcast ephemeris - /// - 11 when working with SP3 - pub interp_order: usize, - /// positioning mode - pub positioning: PositioningMode, - /// Whether the solver is working in fixed altitude mode or not - pub fixed_altitude: Option, - /// Position receveir position, if known before hand - pub rcvr_position: GroundPosition, - /// constellation to consider, - pub gnss: Vec, - /// PR code smoothing filter before moving forward - pub code_smoothing: bool, - /// true if we're using troposphere modeling - pub tropo: bool, - /// true if we're using ionosphere modeling - pub iono: bool, - /// true if we're using total group delay modeling - pub tgd: bool, - /// Minimal percentage ]0; 1[ of Sun light to be received by an SV - /// for not to be considered in Eclipse. - /// A value closer to 0 means we tolerate fast Eclipse exit. - /// A value closer to 1 is a stringent criteria: eclipse must be totally exited. - pub min_sv_sunlight_rate: Option, -} - -impl SolverOpts { - pub fn default(solver: SolverType) -> Self { - match solver { - SolverType::SPP => Self { - epsilon: 5.0_f64, - gnss: vec![Constellation::GPS, Constellation::Galileo], - fixed_altitude: None, - rcvr_position: GroundPosition::default(), - interp_order: 7, - positioning: PositioningMode::default(), - code_smoothing: false, - tropo: false, - iono: false, - tgd: false, - min_sv_sunlight_rate: None, - }, - SolverType::PPP => Self { - epsilon: 0.1_f64, - gnss: vec![Constellation::GPS, Constellation::Galileo], - fixed_altitude: None, - rcvr_position: GroundPosition::default(), - interp_order: 11, - positioning: PositioningMode::default(), - code_smoothing: false, - tropo: false, - iono: false, - tgd: false, - min_sv_sunlight_rate: Some(0.3), - }, - } - } -} - -#[derive(Default, Debug, Clone, Copy, PartialEq)] -pub enum PositioningMode { - /// Receiver is kept at fixed location - #[default] - Static, - /// Receiver is not static - Kinematic, -} - -#[derive(Debug, Clone, Copy, PartialEq)] -#[allow(dead_code)] -pub enum SpecificOpts { - /// SPP solver specific parameters - SPPSpecificOpts(SppOpts), - /// PPP solver specific parameters - PPPSpecificOpts(PppOpts), -} - -#[allow(dead_code)] -impl SpecificOpts { - fn spp(&self) -> Option { - match self { - Self::SPPSpecificOpts(opts) => Some(*opts), - _ => None, - } - } - fn ppp(&self) -> Option { - match self { - Self::PPPSpecificOpts(opts) => Some(*opts), - _ => None, - } - } -} - -#[derive(Default, Debug, Clone, Copy, PartialEq)] -pub struct SppOpts {} - -#[derive(Default, Debug, Clone, Copy, PartialEq)] -pub struct PppOpts {} diff --git a/gnss-rtk/src/solver.rs b/gnss-rtk/src/solver.rs deleted file mode 100644 index e69de29bb..000000000 diff --git a/rinex-cli/Cargo.toml b/rinex-cli/Cargo.toml index c5bfc0d68..ee6d703d4 100644 --- a/rinex-cli/Cargo.toml +++ b/rinex-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rinex-cli" -version = "0.9.3" +version = "0.9.4" license = "MIT OR Apache-2.0" authors = ["Guillaume W. Bres "] description = "Command line tool parse and analyze RINEX data" @@ -14,19 +14,23 @@ rust-version = "1.64" [dependencies] log = "0.4" -pretty_env_logger = "0.5" +env_logger = "0.10" clap = { version = "4.4.3", features = ["derive", "color"] } rand = "0.8" serde_json = "1" -sp3 = { path = "../sp3", version = "=1.0.4", features = ["serde", "flate2"] } +sp3 = { path = "../sp3", version = "=1.0.5", features = ["serde", "flate2"] } rinex-qc = { path = "../rinex-qc", version = "=0.1.4", features = ["serde"] } -rinex = { path = "../rinex", version = "=0.14.0", features = ["full"] } -gnss-rtk = { path = "../gnss-rtk", version = "=0.0.1" } +rinex = { path = "../rinex", version = "=0.14.1", features = ["full"] } +gnss-rtk = { path = "../gnss-rtk", version = "=0.0.1", features = ["serde"] } thiserror = "1" itertools = "0.11" -plotly = "0.8.4" +# plotly = "0.8.4" +plotly = { git = "https://github.com/gwbres/plotly", branch = "density-mapbox" } +# plotly = { path = "../../plotly-rs/plotly" } map_3d = "0.1.5" ndarray = "0.15" colorous = "1.0" horrorshow = "0.8" nyx-space = "2.0.0-alpha.2" +hifitime = { version = "3.8.4", features = ["serde", "std"] } +serde = { version = "1.0", default-features = false, features = ["derive"] } diff --git a/rinex-cli/README.md b/rinex-cli/README.md index 3879d12c8..1c27ac975 100644 --- a/rinex-cli/README.md +++ b/rinex-cli/README.md @@ -108,12 +108,13 @@ if you know how to operate the preprocessing toolkit - [quality check](doc/qc.md): RINEX data quality analysis (mainly statistics and only on OBS RINEX at the moment) - other advanced operations are documented in the [processing](doc/processing.md) suite -## Positioning +## Positioning (RTK) -`rinex-cli` integrates a position solver that will resolve the user location -the best it can, from the provided RINEX context. This mode in requested with `-p`. +`rinex-cli` integrates a position solver that will resolve the radio receiver location +the best it can, by post processing the provided RINEX context. +This mode in requested with `-r` or `--rtk` and is turned off by default. -To learn how to operate the solver, refer to [the dedicated page](doc/positioning.md). +To learn how to operate the solver, refer to [the dedicated page](doc/rtk.md). ## Getting started @@ -236,10 +237,10 @@ rinex-cli -f OBS/V2/KOSG0010.95O --epochs rinex-cli -f test_resources/OBS/V2/KOSG0010.95O --epochs --sv ``` -The `--pretty` option is there to make the datasets more readable (json format): +The `--pretty` (`-p`) option is there to make the datasets more readable (json format): ```bash -rinex-cli -f test_resources/OBS/V2/KOSG0010.95O --epochs --sv --pretty +rinex-cli -f test_resources/OBS/V2/KOSG0010.95O -g --epochs --sv -p ``` ## Data analysis diff --git a/rinex-cli/config/gnss_snr30db.json b/rinex-cli/config/qc/gnss_snr30db.json similarity index 100% rename from rinex-cli/config/gnss_snr30db.json rename to rinex-cli/config/qc/gnss_snr30db.json diff --git a/rinex-cli/config/sv_manual_gap.json b/rinex-cli/config/qc/sv_manual_gap.json similarity index 100% rename from rinex-cli/config/sv_manual_gap.json rename to rinex-cli/config/qc/sv_manual_gap.json diff --git a/rinex-cli/config/rtk/gpst_10sv_basic.json b/rinex-cli/config/rtk/gpst_10sv_basic.json new file mode 100644 index 000000000..0a219e729 --- /dev/null +++ b/rinex-cli/config/rtk/gpst_10sv_basic.json @@ -0,0 +1,9 @@ +{ + "timescale": "GPST", + "interp_order": 11, + "max_sv": 10, + "modeling": { + "sv_clock_bias": true, + "sv_total_group_delay": true + } +} diff --git a/rinex-cli/config/rtk/gpst_4sv_basic.json b/rinex-cli/config/rtk/gpst_4sv_basic.json new file mode 100644 index 000000000..15f2165b0 --- /dev/null +++ b/rinex-cli/config/rtk/gpst_4sv_basic.json @@ -0,0 +1,9 @@ +{ + "timescale": "GPST", + "interp_order": 11, + "max_sv": 4, + "modeling": { + "sv_clock_bias": true, + "sv_total_group_delay": true + } +} diff --git a/rinex-cli/doc/file-combination.md b/rinex-cli/doc/file-combination.md index 3e9cf5eaa..de3325969 100644 --- a/rinex-cli/doc/file-combination.md +++ b/rinex-cli/doc/file-combination.md @@ -100,10 +100,25 @@ joint `--nav` and `--sp3` context yourself. ## IONEX analysis -To analyze a IONEX file, a primary file of this type should be passed -to `--fp` (or `-f`). In this case, you get a world map visualization -of the provided TEC map. Unfortunately we can only visualize the TEC map -at a single epoch, because we cannot animate the world map at the moment. -Therefore, it makes sense to zoom in on the Epoch you're interested in, -with the proper `-P` preprocessor command. Refer to related section. +IONEX is one of those files that can only serve as primary files. +Thefore all IONEX files should be passed with `--fp` (`-f`). +We can then plot the TEC map. Unfortunately we have no means to animate the plot +at the moment, so we create a TEC visualization for every single Epochs. +Usually IONEX files comprise 12 to 24 Epochs, so it's not that much but the HTML +graphs might come heavy. + +We recommend zooming on the time frame you're interested in, for example with something like this + +```bash +./target/release/rinex-cli \ + -f CKMG0090.21I.gz --epochs + +["2021-01-09T00:00:00 UTC","2021-01-09T01:00:00 UTC", ..., "2021-01-10T00:00:00 UTC"] + +./target/release/rinex-cli \ + -f CKMG0090.21I.gz \ + -P ">=2021-01-09T19:00:00 UTC" +``` + + diff --git a/rinex-cli/doc/positioning.md b/rinex-cli/doc/positioning.md deleted file mode 100644 index 94f241f22..000000000 --- a/rinex-cli/doc/positioning.md +++ /dev/null @@ -1,68 +0,0 @@ -Position solver -=============== - -The position solver is currently an "advanced" SPP solver. -SPP stands for Single Frequency Precice Point solver which means -you get a precise point location (ideally with metric accuracy) for a minimal -- down to single frequency data context. - -When we say "advanced" SPP it means it supports more than the minimal prerequisites -for a pure SPP solver. For example it is possible to still require SPP solving -but use other criteria that makes it a little closer to PPP. - -Command line interface -====================== - -* use `-p` to request position solving. -From the provided data context, we will try to evaluate the user position -the best we can - -* use `--spp` to force to SPP solving. - -* `--ppp` to force to PPP solving. It exists but not entirely supported to this day. - -Minimal data context -==================== - -A minimum of one primary RINEX Observation file with broadcast Ephemeris -valid for that particular time frame is required. - -SP3 can be stacked, broadcast Ephemeris are still required, we will prefer SP3 -for certain steps in the solving process. - -Example of minimum requirement : - -```bash -./target/release/rinex-cli -P GPS,GLO --spp \ - --fp DATA/2023/OBS/256/ANK200TUR_S_20232560000_01D_30S_MO.crx \ - --nav DATA/2023/NAV/255 \ - --nav DATA/2023/NAV/256 -``` - -Example of SP3 extension : - -```bash -./target/release/rinex-cli -P GPS,GLO --spp \ - --fp DATA/2023/OBS/256/ANK200TUR_S_20232560000_01D_30S_MO.crx \ - --nav DATA/2023/NAV/255 \ - --nav DATA/2023/NAV/256 \ - --sp3 DATA/2023/SP3/255 \ - --sp3 DATA/2023/SP3/256 -``` - -Position solver and results -=========================== - -The solver will try to resolve the navigation equations for every single Epoch -for which : - -* enough raw GNSS signals were observed in the Observation RINEX -* enough SV fit the Navigation requirements -* all minimal or requested models were correctly modelized - -The solver can totally work with its default configuration, as long as the previous points stand. -But you need to understand that in this configuration, you can't hope for an optimal result accuracy. - -Mastering and operating a position solver is a complex task. -To fully understand what can be achieved and how to achieve such results, -refer to the [gnss-rtk](../gnss-rtk/README.md) library documentation. diff --git a/rinex-cli/doc/preprocessing.md b/rinex-cli/doc/preprocessing.md index 03986f4c8..cecc46fe0 100644 --- a/rinex-cli/doc/preprocessing.md +++ b/rinex-cli/doc/preprocessing.md @@ -72,18 +72,20 @@ advanced mask filters. ## Stacked preprocessing ops -A whitespace separates two preprocessing operations. +A whitespace separates two preprocessing operations (ie., two sets of CSV). +Therefore it is considered as two separate filters. For example here, we're only left with +G08 and R03 data. ```bash rinex-cli \ --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz \ - -P GPS,GLO G08,R03 + -P GPS,GLO,BDS G08,R03 ``` -Therefore, if a filter operation involves a whitespace, it requires to be wrapped +If one opeation requies a whitespace, it needs to be wrapped in between inverted commas. Most common example is the [Epoch](epoch-target) description. -## Epoch target +## Epoch filter Any valid Hifitime::Epoch string description is supported. @@ -105,11 +107,7 @@ rinex-cli \ -P ">2020-06-12T08:00:00 UTC" "<=2020-06-25T16:00:00 UTC" GPS >G08 ``` -## Duration target - -TODO - -## Sv target +## SV filter A comma separated list of Sv (of any length) is supported. For example, retain _R03_ and _E10_ with the following: @@ -121,8 +119,8 @@ rinex-cli \ ``` `Sv` target is the only one amongst CSV arrays that supports more than "=" or "!=" operands. -For example we can select PRN above 08 for GPS and below 10 for Galileo constellations (only, others are untouched) -with this command: +This is used to filter on SV PRN. +For example here we can select PRN above 08 for GPS and below (included) 10 for Galileo: ```bash rinex-cli \ @@ -130,25 +128,66 @@ rinex-cli \ -P >G08 "<=E10" ``` -## Constellations +## Constellations filter + +Retain specific constellations. For example we only retain GPS with this: + +```bash +rinex-cli \ + --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz \ + -P GPS +``` -A comma separated list of Constellations is supported. -For example, with the following, we are left with data from Glonass and GPS +You can stack as many filters as you want, using csv. For example, retain +BeiDou also: ```bash rinex-cli \ --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz \ - -P !=BDS GPS,GLO # ineq(BDS) AND eq(GPS,GLO) + -P GPS,BDS ``` -`teqc` like quick GNSS filters also exist: +Inequality is also supported. For example: retain everything but Glonass -- `-G` to remove GPS -- `-C` to remove BDS -- `-E` to remove Galileo -- `-R` to remove Glonnass -- `-J` to remove QZSS -- `-S` to remove SBAS vehicles +```bash +rinex-cli \ + --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz \ + -P !=GLO +``` + +SBAS is a special case. If you use "SBAS", you can retain or discard +SBAS systems, whatever their actual constellation. For example we +retain all GPS and any SBAS with this: + +```bash +rinex-cli \ + --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz -P GPS,SBAS +``` + +If you want to retain specific SBAS, you have to name them precisely, we support all of them +(see Constellation module API). For example, retain GPS, EGNOS and SDCM with this: + +```bash +rinex-cli \ + --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz -P GPS,EGNOS,SDCM +``` + +Note that the following `teqc` equivalent filters are also supported. + +- `-G` removes GPS (equivalent to `-P !=GPS`) +- `-C` removes BDS +- `-E` removes Galileo +- `-R` removes Glonnass +- `-J` removes QZSS +- `-S` removes all SBAS vehicles + +If you want to remove specific SBAS constellations, for example EGNOS, you have to use +`-P`: + +```bash +rinex-cli \ + --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz -P !=EGNOS +``` ## Observables diff --git a/rinex-cli/doc/qc.md b/rinex-cli/doc/qc.md index dd560ca9f..52da524ec 100644 --- a/rinex-cli/doc/qc.md +++ b/rinex-cli/doc/qc.md @@ -1,7 +1,7 @@ Quality Check (QC) ================== -RINEX quality check is a special mode, activated with `--qc`. +RINEX quality check is a special mode. It is activated with `--qc` and is turned off by default. QC is first developed for Observation files analysis, but this tool will accept other RINEX files, for which it will compute basic statistical analysis. @@ -85,7 +85,7 @@ Run this configuration for the most basic QC: rinex-cli \ -P GPS,GLO \ --qc-only \ - --qc-cfg rinex-cli/config/gnss_snr30db.json \ + --qc-cfg rinex-cli/config/qc/gnss_snr30db.json \ --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz ``` @@ -134,7 +134,7 @@ To this one : ./target/release/rinex-cli \ --fp test_resources/CRNX/V3/MOJN00DNK_R_20201770000_01D_30S_MO.crx.gz \ -P G08,G15,G16,R23,C19,C09 \ - --qc --qc-cfg rinex-cli/config/sv_manual_gap.json + --qc --qc-cfg rinex-cli/config/qc/sv_manual_gap.json ``` ### SNR parametrization @@ -157,7 +157,7 @@ the go out of sight more rapidly, due to the stringent elevation criteria : rinex-cli \ -P gps,glo \ -P G08,G15,G16,R23,C19,C09 \ - --qc --qc-cfg rinex-cli/config/sv_manual_gap_ev35.json + --qc --qc-cfg rinex-cli/config/qc/sv_manual_gap_ev35.json --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz \ --nav test_resources/OBS/V3/ESBC00DNK_R_20201770000_01D_MN.rnx.gz ``` diff --git a/rinex-cli/doc/rtk.md b/rinex-cli/doc/rtk.md new file mode 100644 index 000000000..b48033ec1 --- /dev/null +++ b/rinex-cli/doc/rtk.md @@ -0,0 +1,128 @@ +RTK solver +========== + +RTK mode is requested with `-r` or `--rtk`. + +RTK (position solving) is feasible if you provide at least RINEX Observations +(`-f`) and overlapping RINEX Navigation data (`--nav`). + +Currently it is also mandatory to provide overlapping SP3 with `--sp3` but that should be fixed +in near future. + +As an example (this dataset is not provided), the most basic command line would look like this, +where observations are imported for day 256 and we combine several NAV/SP3 by lazyili importing entire folders: + +```bash +./target/release/rinex-cli -P GPS,GLO -r \ + --fp DATA/2023/OBS/256/ANK200TUR_S_20232560000_01D_30S_MO.crx \ + --nav DATA/2023/NAV/256 \ + --sp3 DATA/2023/SP3/256 +``` + +Current limitations +=================== + +Several limitations exit to this day and must be kept in mind. + +- Glonass and SBAS vehicles cannot be pushed into the pool of eligible vehicles. +Until further notice, one must combine -R and -S to the rtk mode. + +- We've only tested the solver against mixed GPS, Galileo and BeiDou vehicles + +- We only support GPST, GST and BDT. QZSST is expressed as GPST and I'm not 100% sure this +is correct. + +- The estimated clock offset is expressed against the timescale for which the Observation file is referenced to. +We don't have the flexibility to change that at the moment. +So far the solver has only be tested against Observations referenced against GPST. + +RTK (only) +========== + +Use `-r` (or `--rtk-only`) to disable other opmodes. This gives you the quickest results. + +```bash +./target/release/rinex-cli -R -S -r \ + --fp DATA/2023/OBS/256/ANK200TUR_S_20232560000_01D_30S_MO.crx \ + --nav DATA/2023/NAV/256 \ + --sp3 DATA/2023/SP3/256 +``` + +RTK configuration +================= + +The solver can be customized, either to improve performances +or improve the final resolution. Refer to the library section +that defines the [RTK configuration](https://github.com/georust/rinex/gnss-rtk/doc/cfg.md) +to understand the physics and what they imply on the end result. + +A few configuration files are provided in the rinex-cli/config/rtk directory. + +You can use them with `--rtk-cfg`: + +Forced SPP mode +=============== + +By default the solver will adapt to the provided context and will deploy the best strategy. + +You can force the strategy to SPP with `--spp` + +It is possible to use the configuration file, even in forced SPP mode, to improve the end results: + +In this scenario, one wants to define Ionospheric delay model + +Provide SP3 +=========== + +When SP3 is provided, they are prefered over NAV RINEX. +Refer to the library documentation [TODO](TODO) + +Example of SP3 extension : + +```bash +./target/release/rinex-cli -R -S --spp \ + --fp DATA/2023/OBS/256/ANK200TUR_S_20232560000_01D_30S_MO.crx \ + --nav DATA/2023/NAV/255 \ + --nav DATA/2023/NAV/256 \ + --sp3 DATA/2023/SP3/255 \ + --sp3 DATA/2023/SP3/256 +``` + +It is totally possible to combine SP3 to a single frequency context, +or a forced --spp strategy. + +Results +======= + +The solver will try to resolve the navigation equations for every single Epoch +for which : + +* enough raw GNSS signals were observed in the Observation RINEX +* enough SV fit the Navigation requirements +* all minimal or requested models were correctly modelized + +The solver can totally work with its default configuration, as long as the previous points stand. +But you need to understand that in this configuration, you can't hope for an optimal result accuracy. + +Mastering and operating a position solver is a complex task. +To fully understand what can be achieved and how to achieve such results, +refer to the [gnss-rtk](../gnss-rtk/README.md) library documentation. + +RTK and logger +============== + +The RTK solver and its dependencies, make extensive use of the Rust logger. +Turn it on so you have meaningful information on what is happening: + +- Epochs for which we perform the calculations +- Navigation context evolution +- Results and meaningful information +- More information on the configuration and what can be achieved + +The Rust logger sensitivity is controlled by the RUST\_LOG environment variable, +which you can either export or adjust for a single run. `trace` is the most sensitive, +`info` is the standard value. + +The output is directed towards Stdout, therefore it can be streamed into a text file for example, +to easily compare runs between them. + diff --git a/rinex-cli/src/cli.rs b/rinex-cli/src/cli.rs index 5b8d79c19..b287da5ed 100644 --- a/rinex-cli/src/cli.rs +++ b/rinex-cli/src/cli.rs @@ -1,4 +1,5 @@ use clap::{Arg, ArgAction, ArgMatches, ColorChoice, Command}; +use gnss_rtk::prelude::RTKConfig; use log::{error, info}; use rinex::prelude::*; use rinex_qc::QcOpts; @@ -27,8 +28,8 @@ impl Cli { .long("fp") .value_name("FILE") .help("Input RINEX file. Serves as primary data. -In advanced usage, this must be Observation Data. -Observation, Meteo and IONEX, can only serve as primary data.") +Must be Observation Data for --rtk. +Observation, Meteo and IONEX can only serve as primary data.") .action(ArgAction::Append) .required(true)) .next_help_heading("General") @@ -37,8 +38,9 @@ Observation, Meteo and IONEX, can only serve as primary data.") .long("quiet") .action(ArgAction::SetTrue) .help("Disable all terminal output. Also disables auto HTML reports opener.")) - .arg(Arg::new("readable") - .short('r') + .arg(Arg::new("pretty") + .short('p') + .long("pretty") .action(ArgAction::SetTrue) .help("Make terminal output more readable.")) .arg(Arg::new("workspace") @@ -48,15 +50,19 @@ Observation, Meteo and IONEX, can only serve as primary data.") .help("Customize workspace location (folder does not have to exist). The default workspace is rinex-cli/workspace")) .next_help_heading("Data identification") + .arg(Arg::new("full-id") + .short('i') + .action(ArgAction::SetTrue) + .help("Turn all identifications ON")) .arg(Arg::new("epochs") .long("epochs") .action(ArgAction::SetTrue) .help("Enumerate all epochs")) - .arg(Arg::new("constellations") - .long("constellations") - .short('c') + .arg(Arg::new("gnss") + .long("gnss") + .short('g') .action(ArgAction::SetTrue) - .help("Enumerate GNSS constellations")) + .help("Enumerate GNSS constellations present in entire context.")) .arg(Arg::new("sv") .long("sv") .action(ArgAction::SetTrue) @@ -109,6 +115,7 @@ Useful to determine common Epochs or compare sample rates in between .num_args(1..) .help("Design preprocessing operations, like data filtering or resampling, prior further analysis. You can stack as many ops as you need. +Preprocessing ops apply prior entering both -q and --rtk modes. Refer to rinex-cli/doc/preprocessing.md to learn how to operate this interface.")) .next_help_heading("Observation RINEX") .arg(Arg::new("observables") @@ -250,27 +257,38 @@ The summary report by default is integrated to the global HTML report.")) .long("qc-only") .action(ArgAction::SetTrue) .help("Activates QC mode and disables all other features: quickest qc rendition.")) - .next_help_heading("Position Solver") - .arg(Arg::new("positioning") - .short('p') - .long("positioning") + .next_help_heading("RTK (Positioning)") + .arg(Arg::new("rtk") + .long("rtk") .action(ArgAction::SetTrue) .help("Activate GNSS receiver position solver. This is only possible if provided context is sufficient. Depending on provided context, either SPP (high accuracy) or PPP (ultra high accuracy) -method is deployed. -This is turned of by default, because it involves quite heavy computations. +solver is deployed. +This mode is turned off by default because it involves quite heavy computations. +Use the RUST_LOG env. variable for verbosity. See [spp] for more information. ")) .arg(Arg::new("spp") .long("spp") .action(ArgAction::SetTrue) .help("Enables Positioning forced to Single Frequency SPP solver mode. Disregards whether the provided context is PPP compatible. -NB: we do not account for Relativistic effects in clock bias estimates.")) - .arg(Arg::new("positioning-only") - .long("pos-only") +NB: we do not account for Relativistic effects by default and raw pseudo range are used. +For indepth customization, refer to the configuration file and online documentation.")) + .arg(Arg::new("rtk-only") + .long("rtk-only") + .short('r') .action(ArgAction::SetTrue) - .help("Activates GNSS position solver, disables all other modes: most performant solver.")) + .help("Activates GNSS position solver, disables all other modes. +This is the most performant mode to solve a position.")) + .arg(Arg::new("rtk-config") + .long("rtk-cfg") + .value_name("FILE") + .help("Pass RTK custom configuration.")) + .arg(Arg::new("kml") + .long("kml") + .help("Form a KML track with resolved positions. +This turns off the default visualization.")) .next_help_heading("File operations") .arg(Arg::new("merge") .short('m') @@ -394,6 +412,7 @@ Refer to README")) | self.matches.get_flag("orbits") | self.matches.get_flag("nav-msg") | self.matches.get_flag("anomalies") + | self.matches.get_flag("full-id") } /// Returns true if Sv accross epoch display is requested pub fn sv_epoch(&self) -> bool { @@ -413,38 +432,52 @@ Refer to README")) } /// Returns list of requested data to extract pub fn identification_ops(&self) -> Vec<&str> { - let flags = vec![ - "sv", - "epochs", - "header", - "constellations", - "observables", - "ssi-range", - "ssi-sv-range", - "orbits", - "nav-msg", - "anomalies", - ]; - flags - .iter() - .filter(|x| self.matches.get_flag(x)) - .map(|x| *x) - .collect() + if self.matches.get_flag("full-id") { + vec![ + "sv", + "epochs", + "gnss", + "observables", + "ssi-range", + "ssi-sv-range", + "orbits", + "nav-msg", + "anomalies", + ] + } else { + let flags = vec![ + "sv", + "header", + "epochs", + "gnss", + "observables", + "ssi-range", + "ssi-sv-range", + "orbits", + "nav-msg", + "anomalies", + ]; + flags + .iter() + .filter(|x| self.matches.get_flag(x)) + .map(|x| *x) + .collect() + } } fn get_flag(&self, flag: &str) -> bool { self.matches.get_flag(flag) } /// returns true if pretty JSON is requested - pub fn readable_json(&self) -> bool { - self.get_flag("readable") + pub fn pretty(&self) -> bool { + self.get_flag("pretty") } /// Returns true if quiet mode is activated pub fn quiet(&self) -> bool { self.matches.get_flag("quiet") } /// Returns true if position solver is enabled - pub fn positioning(&self) -> bool { - self.matches.get_flag("positioning") || self.forced_spp() || self.forced_ppp() + pub fn rtk(&self) -> bool { + self.matches.get_flag("rtk") || self.forced_spp() || self.forced_ppp() } /// Returns true if position solver forced to SPP pub fn forced_spp(&self) -> bool { @@ -454,8 +487,26 @@ Refer to README")) pub fn forced_ppp(&self) -> bool { self.matches.get_flag("spp") } - pub fn positioning_only(&self) -> bool { - self.matches.get_flag("positioning-only") + pub fn rtk_only(&self) -> bool { + self.matches.get_flag("rtk-only") + } + pub fn rtk_config(&self) -> Option { + if let Some(path) = self.matches.get_one::("rtk-config") { + if let Ok(content) = std::fs::read_to_string(path) { + let opts = serde_json::from_str(&content); + if let Ok(opts) = opts { + info!("loaded rtk config: \"{}\"", path); + return Some(opts); + } else { + error!("failed to parse config file \"{}\"", path); + info!("using default parameters"); + } + } else { + error!("failed to read config file \"{}\"", path); + info!("using default parameters"); + } + } + None } pub fn cs_graph(&self) -> bool { self.matches.get_flag("cs") diff --git a/rinex-cli/src/identification.rs b/rinex-cli/src/identification.rs index 53e2e50ae..491a5f311 100644 --- a/rinex-cli/src/identification.rs +++ b/rinex-cli/src/identification.rs @@ -1,4 +1,6 @@ use crate::Cli; +use hifitime::Epoch; +use rinex::observation::Snr; use rinex::*; use rinex_qc::QcContext; @@ -6,70 +8,109 @@ use rinex_qc::QcContext; * Basic identification operations */ pub fn rinex_identification(ctx: &QcContext, cli: &Cli) { - let pretty = cli.readable_json(); + let pretty = cli.pretty(); let ops = cli.identification_ops(); - identification(&ctx.primary_data(), pretty, ops.clone()); + identification( + &ctx.primary_data(), + &ctx.primary_path().to_string_lossy().to_string(), + pretty, + ops.clone(), + ); + if let Some(nav) = &ctx.navigation_data() { - identification(&nav, pretty, ops.clone()); + identification(&nav, "Navigation Context blob", pretty, ops.clone()); } } -fn identification(rnx: &Rinex, pretty: bool, ops: Vec<&str>) { +use serde::Serialize; + +#[derive(Clone, Debug, Serialize)] +struct EpochReport { + pub first: String, + pub last: String, +} + +#[derive(Clone, Debug, Serialize)] +struct SSIReport { + pub min: Option, + pub max: Option, +} + +fn identification(rnx: &Rinex, path: &str, pretty: bool, ops: Vec<&str>) { for op in ops { + debug!("identification: {}", op); if op.eq("header") { let content = match pretty { true => serde_json::to_string_pretty(&rnx.header).unwrap(), false => serde_json::to_string(&rnx.header).unwrap(), }; - println!("{}", content); + println!("[{}]: {}", path, content); } else if op.eq("epochs") { - let data: Vec = rnx.epoch().map(|e| e.to_string()).collect(); - let content = match pretty { - true => serde_json::to_string_pretty(&data).unwrap(), - false => serde_json::to_string(&data).unwrap(), - }; - println!("{}", content); - } else if op.eq("sv") { - let data: Vec<_> = rnx.sv().collect(); - let content = match pretty { - true => serde_json::to_string_pretty(&data).unwrap(), - false => serde_json::to_string(&data).unwrap(), + let report = EpochReport { + first: format!("{:?}", rnx.first_epoch()), + last: format!("{:?}", rnx.last_epoch()), }; - println!("{}", content); - } else if op.eq("observables") { - let data: Vec<_> = rnx.observable().collect(); let content = match pretty { - true => serde_json::to_string_pretty(&data).unwrap(), - false => serde_json::to_string(&data).unwrap(), + true => serde_json::to_string_pretty(&report).unwrap(), + false => serde_json::to_string(&report).unwrap(), }; - println!("{}", content); + println!("[{}]: {}", path, content); + } else if op.eq("sv") { + let mut csv = String::new(); + for (i, sv) in rnx.sv().enumerate() { + if i == rnx.sv().count() - 1 { + csv.push_str(&format!("{}\n", sv.to_string())); + } else { + csv.push_str(&format!("{}, ", sv.to_string())); + } + } + println!("[{}]: {}", path, csv); + } else if op.eq("observables") && rnx.is_observation_rinex() { + let mut data: Vec<_> = rnx.observable().collect(); + data.sort(); + //let content = match pretty { + // true => serde_json::to_string_pretty(&data).unwrap(), + // false => serde_json::to_string(&data).unwrap(), + //}; + println!("[{}]: {:?}", path, data); } else if op.eq("gnss") { let data: Vec<_> = rnx.constellation().collect(); let content = match pretty { true => serde_json::to_string_pretty(&data).unwrap(), false => serde_json::to_string(&data).unwrap(), }; - println!("{}", content); - } else if op.eq("ssi-range") { - let data = &rnx.observation_ssi_minmax(); + println!("[{}]: {}", path, content); + } else if op.eq("ssi-range") && rnx.is_observation_rinex() { + let ssi = SSIReport { + min: { + rnx.snr() + .min_by(|(_, _, _, snr_a), (_, _, _, snr_b)| snr_a.cmp(snr_b)) + .map(|(_, _, _, snr)| snr) + }, + max: { + rnx.snr() + .max_by(|(_, _, _, snr_a), (_, _, _, snr_b)| snr_a.cmp(snr_b)) + .map(|(_, _, _, snr)| snr) + }, + }; let content = match pretty { - true => serde_json::to_string_pretty(data).unwrap(), - false => serde_json::to_string(data).unwrap(), + true => serde_json::to_string_pretty(&ssi).unwrap(), + false => serde_json::to_string(&ssi).unwrap(), }; - println!("{}", content); - } else if op.eq("orbits") { - unimplemented!("nav::orbits"); + println!("[{}]: {}", path, content); + } else if op.eq("orbits") && rnx.is_navigation_rinex() { + error!("nav::orbits not available yet"); //let data: Vec<_> = rnx.orbit_fields(); //let content = match pretty { // true => serde_json::to_string_pretty(&data).unwrap(), // false => serde_json::to_string(&data).unwrap(), //}; //println!("{}", content); - } else if op.eq("nav-msg") { + } else if op.eq("nav-msg") && rnx.is_navigation_rinex() { let data: Vec<_> = rnx.nav_msg_type().collect(); println!("{:?}", data); - } else if op.eq("anomalies") { + } else if op.eq("anomalies") && rnx.is_observation_rinex() { let data: Vec<_> = rnx.epoch_anomalies().collect(); println!("{:#?}", data); } diff --git a/rinex-cli/src/main.rs b/rinex-cli/src/main.rs index c63fd5890..e0cadfcef 100644 --- a/rinex-cli/src/main.rs +++ b/rinex-cli/src/main.rs @@ -14,14 +14,14 @@ use preprocessing::preprocess; //use horrorshow::Template; use rinex::{ merge::Merge, - observation::{Combine, Dcb, IonoDelay, Mp}, + observation::{Combine, Dcb, IonoDelay}, //Mp}, prelude::RinexType, prelude::*, split::Split, }; extern crate gnss_rtk as rtk; -use rtk::prelude::{Solver, SolverOpts, SolverType}; +use rtk::prelude::{Solver, SolverError, SolverEstimate, SolverType}; use rinex_qc::*; @@ -29,8 +29,8 @@ use cli::Cli; use identification::rinex_identification; use plot::PlotContext; -extern crate pretty_env_logger; -use pretty_env_logger::env_logger::Builder; +//extern crate pretty_env_logger; +use env_logger::{Builder, Target}; #[macro_use] extern crate log; @@ -299,7 +299,7 @@ fn create_context(cli: &Cli) -> QcContext { * Returns true if Skyplot view if feasible */ fn skyplot_allowed(ctx: &QcContext, cli: &Cli) -> bool { - if cli.quality_check_only() || cli.positioning_only() { + if cli.quality_check_only() || cli.rtk_only() { /* * Special modes: no plots allowed */ @@ -318,6 +318,7 @@ fn skyplot_allowed(ctx: &QcContext, cli: &Cli) -> bool { pub fn main() -> Result<(), rinex::Error> { let mut builder = Builder::from_default_env(); builder + .target(Target::Stdout) .format_timestamp_secs() .format_module_path(false) .init(); @@ -329,8 +330,8 @@ pub fn main() -> Result<(), rinex::Error> { let qc_only = cli.quality_check_only(); let qc = cli.quality_check() || qc_only; - let positioning_only = cli.positioning_only(); - let positioning = cli.positioning() || positioning_only; + let rtk_only = cli.rtk_only(); + let rtk = cli.rtk() || rtk_only; // Initiate plot context let mut plot_ctx = PlotContext::new(); @@ -343,12 +344,43 @@ pub fn main() -> Result<(), rinex::Error> { // Position solver let mut solver = Solver::from(&ctx); + if let Ok(ref mut solver) = solver { + info!( + "provided context is compatible with {} position solver", + solver.solver + ); + // custom config ? apply it + if let Some(cfg) = cli.rtk_config() { + solver.cfg = cfg.clone(); + } + if !rtk { + warn!("position solver currently turned off"); + } else { + if cli.forced_spp() { + warn!("forced method to spp"); + solver.solver = SolverType::SPP; + } + // print config to be used + info!("{:#?}", solver.cfg); + } + } else { + warn!("context is not sufficient or not compatible with --rtk"); + } // Workspace let workspace = workspace_path(&ctx); info!("workspace is \"{}\"", workspace.to_string_lossy()); create_workspace(workspace.clone()); + /* + * Print more info on special primary data cases + */ + if ctx.primary_data().is_meteo_rinex() { + info!("meteo special primary data"); + } else if ctx.primary_data().is_ionex() { + info!("ionex special primary data"); + } + /* * Emphasize which reference position is to be used. * This will help user make sure everything is correct. @@ -364,30 +396,6 @@ pub fn main() -> Result<(), rinex::Error> { } else { info!("no reference position given or identified"); } - /* - * print more info on possible solver to deploy - */ - if let Ok(ref mut solver) = solver { - info!( - "provided context is compatible with {} position solver", - solver.solver - ); - if !positioning { - warn!("position solver currently turned off"); - } else { - if cli.forced_spp() { - solver.solver = SolverType::SPP; - solver.opts = SolverOpts::default(SolverType::SPP); - warn!("position solver restricted to SPP mode"); - } else if cli.forced_ppp() { - solver.solver = SolverType::PPP; - solver.opts = SolverOpts::default(SolverType::PPP); - warn!("position solver forced to PPP mode"); - } - } - } else { - info!("context is not sufficient for any position solving method"); - } /* * Preprocessing */ @@ -609,14 +617,14 @@ pub fn main() -> Result<(), rinex::Error> { * Record analysis / visualization * analysis depends on the provided record type */ - if !qc_only && !positioning_only { + if !qc_only && !rtk_only { info!("entering record analysis"); plot::plot_record(&ctx, &mut plot_ctx); } /* * Render Graphs (HTML) */ - if !qc_only && !positioning_only { + if !qc_only && !rtk_only { let html_path = workspace_path(&ctx).join("graphs.html"); let html_path = html_path.to_str().unwrap(); @@ -673,13 +681,43 @@ pub fn main() -> Result<(), rinex::Error> { } if let Ok(ref mut solver) = solver { // position solver is feasible, with provided context - if positioning { - info!("entering positioning mode\n"); - while let Some((t, estimate)) = solver.run(&mut ctx) { - trace!("epoch: {}", t); - // info!("%%%%%%%%% Iteration : {} %%%%%%%%%%%", iteration +1); - //info!("%%%%%%%%% Position : {:?}, Time: {:?}", position, time); - // iteration += 1; + let mut solving = true; + let mut results: HashMap = HashMap::new(); + + if rtk { + match solver.init(&mut ctx) { + Err(e) => panic!("failed to initialize rtk solver"), + Ok(_) => info!("entering rtk mode"), + } + while solving { + match solver.run(&mut ctx) { + Ok((t, estimate)) => { + trace!( + "epoch: {} +position error: {:.6E}, {:.6E}, {:.6E} +HDOP {:.5E} | VDOP {:.5E} +clock offset: {:.6E} | TDOP {:.5E}", + t, + estimate.dx, + estimate.dy, + estimate.dz, + estimate.hdop, + estimate.vdop, + estimate.dt, + estimate.tdop + ); + results.insert(t, estimate); + }, + Err(SolverError::NoSv(t)) => info!("no SV elected @{}", t), + Err(SolverError::LessThan4Sv(t)) => info!("less than 4 SV @{}", t), + Err(SolverError::SolvingError(t)) => { + error!("failed to invert navigation matrix @ {}", t) + }, + Err(SolverError::EpochDetermination(_)) => { + solving = false; // abort + }, + Err(e) => panic!("fatal error {:?}", e), + } } info!("done"); } diff --git a/rinex-cli/src/plot/context.rs b/rinex-cli/src/plot/context.rs index 01e597d0f..6ebaa4502 100644 --- a/rinex-cli/src/plot/context.rs +++ b/rinex-cli/src/plot/context.rs @@ -30,8 +30,16 @@ impl PlotContext { pub fn add_polar2d_plot(&mut self, title: &str) { self.plots.push(build_default_polar_plot(title)); } - pub fn add_world_map(&mut self, style: MapboxStyle, center: (f64, f64), zoom: u8) { - self.plots.push(build_world_map(style, center, zoom)); + pub fn add_world_map( + &mut self, + title: &str, + show_legend: bool, + map_style: MapboxStyle, + center: (f64, f64), + zoom: u8, + ) { + self.plots + .push(build_world_map(title, show_legend, map_style, center, zoom)); } pub fn add_trace(&mut self, trace: Box) { let len = self.plots.len() - 1; diff --git a/rinex-cli/src/plot/mod.rs b/rinex-cli/src/plot/mod.rs index 3c3f3ee57..bbc3bcae1 100644 --- a/rinex-cli/src/plot/mod.rs +++ b/rinex-cli/src/plot/mod.rs @@ -279,14 +279,22 @@ pub fn build_default_polar_plot(title: &str) -> Plot { * centered on given locations, in decimal degrees, * zoom factor */ -pub fn build_world_map(style: MapboxStyle, center: (f64, f64), zoom: u8) -> Plot { +pub fn build_world_map( + title: &str, + show_legend: bool, + map_style: MapboxStyle, + center: (f64, f64), + zoom: u8, +) -> Plot { let mut p = Plot::new(); let layout = Layout::new() + .title(Title::new(title).font(Font::default())) .drag_mode(DragMode::Zoom) .margin(Margin::new().top(0).left(0).bottom(0).right(0)) + .show_legend(show_legend) .mapbox( Mapbox::new() - .style(style) + .style(map_style) .center(Center::new(center.0, center.1)) .zoom(zoom), ); @@ -377,7 +385,7 @@ pub fn build_chart_epoch_axis( let txt: Vec = epochs.iter().map(|e| e.to_string()).collect(); Scatter::new(epochs.iter().map(|e| e.to_utc_seconds()).collect(), data_y) .mode(mode) - .web_gl_mode(true) + //.web_gl_mode(true) .name(name) .hover_text_array(txt) .hover_info(HoverInfo::All) @@ -392,7 +400,7 @@ pub fn plot_record(ctx: &QcContext, plot_ctx: &mut PlotContext) { } else if ctx.primary_data().is_meteo_rinex() { record::plot_meteo(ctx, plot_ctx); } else if ctx.primary_data().is_ionex() { - if let Some(borders) = ctx.primary_data().ionex_map_borders() { + if let Some(borders) = ctx.primary_data().tec_map_borders() { record::plot_tec_map(ctx, borders, plot_ctx); } } diff --git a/rinex-cli/src/plot/record/ionex.rs b/rinex-cli/src/plot/record/ionex.rs index 456145846..8160e8da6 100644 --- a/rinex-cli/src/plot/record/ionex.rs +++ b/rinex-cli/src/plot/record/ionex.rs @@ -1,13 +1,9 @@ //use itertools::Itertools; use crate::plot::PlotContext; -use plotly::{ - color::NamedColor, - common::{Marker, MarkerSymbol}, //color::Rgba}, - layout::MapboxStyle, - //scatter_mapbox::Fill, - ScatterMapbox, -}; +use plotly::layout::MapboxStyle; +use rinex::prelude::Epoch; use rinex_qc::QcContext; +use std::collections::HashMap; pub fn plot_tec_map( ctx: &QcContext, @@ -15,73 +11,62 @@ pub fn plot_tec_map( plot_ctx: &mut PlotContext, ) { let _cmap = colorous::TURBO; - plot_ctx.add_world_map(MapboxStyle::OpenStreetMap, (32.5, -40.0), 1); + //let hover_text: Vec = ctx.primary_data().epoch().map(|e| e.to_string()).collect(); + /* + * TEC map visualization + * plotly-rs has no means to animate plots at the moment + * therefore.. we create one plot for all existing epochs + */ + for (_index, epoch) in ctx.primary_data().epoch().enumerate() { + let content: Vec<_> = ctx + .primary_data() + .tec() + .filter_map(|(t, lat, lon, h, tec)| { + if t == epoch { + Some((lat, lon, h, tec)) + } else { + None + } + }) + .collect(); - let record = ctx.primary_data().record.as_ionex().unwrap(); // cannot fail + plot_ctx.add_world_map( + &epoch.to_string(), + true, + MapboxStyle::StamenTerrain, + (32.5, -40.0), + 1, + ); - let mut grid_lat: Vec = Vec::new(); - let mut grid_lon: Vec = Vec::new(); - let mut tec_max = -f64::INFINITY; - for (e_index, (_e, (tec, _, _))) in record.iter().enumerate() { - for point in tec { - if e_index == 0 { - // grab grid definition - grid_lat.push(point.latitude.into()); - grid_lon.push(point.longitude.into()); - } - if point.value > tec_max { - tec_max = point.value; - } + let mut lat: HashMap = HashMap::new(); + let mut lon: HashMap = HashMap::new(); + let mut z: HashMap = HashMap::new(); + for (tec_lat, tec_lon, _, tec) in content { + lat.insert(Epoch::default().to_string(), tec_lat); + lon.insert(Epoch::default().to_string(), tec_lon); + z.insert(Epoch::default().to_string(), tec); } - } - let grid = ScatterMapbox::new(grid_lat, grid_lon) - .marker( - Marker::new() - .size(5) - .symbol(MarkerSymbol::Circle) - .color(NamedColor::Black) - .opacity(0.5), - ) - .name("TEC Grid"); - plot_ctx.add_trace(grid); + /* plot the map grid */ + //let grid = ScatterMapbox::new(lat.clone(), lon.clone()) + // .marker( + // Marker::new() + // .size(3) + // .symbol(MarkerSymbol::Circle) + // .color(NamedColor::Black) + // .opacity(0.5), + // ) + // .name("grid"); + //plot_ctx.add_trace(grid); - /* - * Build heat map, - * we have no means to plot several heat map (day course) - * at the moment, we just plot the 1st epoch - */ - /* - for (e_index, (e, (tec, _, _))) in record.iter().enumerate() { - if e_index == 0 { - // form the smallest area from that grid - for rows in - for i in 0..tec.len() / 4 { - println!("MAPS {}", i); - //for i in 0..maps.len() / 2 { - /* - let mut row1 = maps[0] - let mut row2 = maps[1] - if let Some(points12) = row1.next() { - if let Some(points34) = row2.next() { - // average TEC in that area - let tec = (points12[0].value + points12[1].value - +points34[0].value + points34[1].value ) / 4.0; - let color = cmap.eval_continuous(tec / tec_max); - let area = ScatterMapbox::new( - vec![points12[0].latitude, points12[1].latitude, points34[0].latitude, points34[1].latitude], - vec![points12[0].longitude, points12[1].longitude, points34[0].longitude, points34[1].longitude], - ) - .opacity(0.5) - .fill(Fill::ToSelf) - .fill_color(Rgba::new(color.r, color.g, color.b, 0.9)); - ctx.add_trace(area); - println!("YES"); - } - }*/ - } - } else { - break ; // we need animations for that - } - }*/ + //let map = AnimatedDensityMapbox::new(lat.clone(), lon.clone(), z) + // .title("TEST") + // .name(epoch.to_string()) + // .opacity(0.66) + // .hover_text_array(hover_text.clone()) + // .zauto(true) + // //.animation_frame("test") + // .zoom(3); + //plot_ctx.add_trace(map); + } } diff --git a/rinex-cli/src/plot/record/navigation.rs b/rinex-cli/src/plot/record/navigation.rs index 2fc67d31e..68efd4e7b 100644 --- a/rinex-cli/src/plot/record/navigation.rs +++ b/rinex-cli/src/plot/record/navigation.rs @@ -67,7 +67,7 @@ fn plot_nav_data(rinex: &Rinex, sp3: Option<&SP3>, plot_ctx: &mut PlotContext) { .collect(); let trace = build_chart_epoch_axis( - &format!("{}(clk)", sv), + &format!("{:X}(clk)", sv), Mode::LinesMarkers, sv_epochs.clone(), sv_clock, @@ -86,7 +86,7 @@ fn plot_nav_data(rinex: &Rinex, sp3: Option<&SP3>, plot_ctx: &mut PlotContext) { plot_ctx.add_trace(trace); let trace = build_chart_epoch_axis( - &format!("{}(drift)", sv), + &format!("{:X}(drift)", sv), Mode::LinesMarkers, sv_epochs.clone(), sv_drift, @@ -134,7 +134,7 @@ fn plot_nav_data(rinex: &Rinex, sp3: Option<&SP3>, plot_ctx: &mut PlotContext) { ) .collect(); let trace = - build_chart_epoch_axis(&format!("{}(sp3_clk)", sv), Mode::Markers, epochs, data) + build_chart_epoch_axis(&format!("{:X}(sp3_clk)", sv), Mode::Markers, epochs, data) .visible({ if sv_index == 0 { // Clock data differs too much: plot only one to begin with @@ -182,7 +182,7 @@ fn plot_nav_data(rinex: &Rinex, sp3: Option<&SP3>, plot_ctx: &mut PlotContext) { ) .collect(); let trace = - build_chart_epoch_axis(&format!("{}(x)", sv), Mode::Markers, epochs.clone(), x_km) + build_chart_epoch_axis(&format!("{:X}(x)", sv), Mode::Markers, epochs.clone(), x_km) .visible({ if sv_index == 0 { Visible::True @@ -206,7 +206,7 @@ fn plot_nav_data(rinex: &Rinex, sp3: Option<&SP3>, plot_ctx: &mut PlotContext) { .collect(); let trace = - build_chart_epoch_axis(&format!("{}(y)", sv), Mode::Markers, epochs.clone(), y_km) + build_chart_epoch_axis(&format!("{:X}(y)", sv), Mode::Markers, epochs.clone(), y_km) .y_axis("y2") .visible({ if sv_index == 0 { @@ -245,7 +245,7 @@ fn plot_nav_data(rinex: &Rinex, sp3: Option<&SP3>, plot_ctx: &mut PlotContext) { ) .collect(); let trace = build_chart_epoch_axis( - &format!("{}(sp3_x)", sv), + &format!("{:X}(sp3_x)", sv), Mode::LinesMarkers, epochs.clone(), x, @@ -271,7 +271,7 @@ fn plot_nav_data(rinex: &Rinex, sp3: Option<&SP3>, plot_ctx: &mut PlotContext) { ) .collect(); let trace = build_chart_epoch_axis( - &format!("{}(sp3_y)", sv), + &format!("{:X}(sp3_y)", sv), Mode::LinesMarkers, epochs.clone(), y, @@ -317,7 +317,7 @@ fn plot_nav_data(rinex: &Rinex, sp3: Option<&SP3>, plot_ctx: &mut PlotContext) { }, ) .collect(); - let trace = build_chart_epoch_axis(&format!("{}(z)", sv), Mode::Markers, epochs, z_km) + let trace = build_chart_epoch_axis(&format!("{:X}(z)", sv), Mode::Markers, epochs, z_km) .visible({ if sv_index == 0 { Visible::True @@ -354,15 +354,19 @@ fn plot_nav_data(rinex: &Rinex, sp3: Option<&SP3>, plot_ctx: &mut PlotContext) { }, ) .collect(); - let trace = - build_chart_epoch_axis(&format!("{}(sp3_z)", sv), Mode::LinesMarkers, epochs, z_km) - .visible({ - if sv_index == 0 { - Visible::True - } else { - Visible::LegendOnly - } - }); + let trace = build_chart_epoch_axis( + &format!("{:X}(sp3_z)", sv), + Mode::LinesMarkers, + epochs, + z_km, + ) + .visible({ + if sv_index == 0 { + Visible::True + } else { + Visible::LegendOnly + } + }); plot_ctx.add_trace(trace); } } diff --git a/rinex-cli/src/plot/record/observation.rs b/rinex-cli/src/plot/record/observation.rs index 1b89eb254..c333dda98 100644 --- a/rinex-cli/src/plot/record/observation.rs +++ b/rinex-cli/src/plot/record/observation.rs @@ -113,7 +113,7 @@ pub fn plot_observation(ctx: &QcContext, plot_context: &mut PlotContext) { let data_y: Vec = data.iter().map(|(_cs, _e, y)| *y).collect(); let trace = build_chart_epoch_axis( - &format!("{}({})", sv, observable), + &format!("{:X}({})", sv, observable), Mode::Markers, data_x, data_y, @@ -142,7 +142,7 @@ pub fn plot_observation(ctx: &QcContext, plot_context: &mut PlotContext) { let epochs: Vec = data.iter().map(|(e, _)| *e).collect(); let elev: Vec = data.iter().map(|(_, f)| *f).collect(); let trace = build_chart_epoch_axis( - &format!("Elev({})", sv), + &format!("Elev({:X})", sv), Mode::LinesMarkers, epochs, elev, diff --git a/rinex-cli/src/plot/record/sp3.rs b/rinex-cli/src/plot/record/sp3.rs index d1962a3ad..784784a5a 100644 --- a/rinex-cli/src/plot/record/sp3.rs +++ b/rinex-cli/src/plot/record/sp3.rs @@ -81,7 +81,7 @@ pub fn plot_residual_ephemeris(ctx: &QcContext, plot_ctx: &mut PlotContext) { } } let trace = - build_chart_epoch_axis(&format!("|{}_err|", sv), Mode::Markers, epochs, residuals) + build_chart_epoch_axis(&format!("|{:X}_err|", sv), Mode::Markers, epochs, residuals) .visible({ if sv_index < 4 { Visible::True diff --git a/rinex-cli/src/plot/skyplot.rs b/rinex-cli/src/plot/skyplot.rs index 281c4a470..6129a7b43 100644 --- a/rinex-cli/src/plot/skyplot.rs +++ b/rinex-cli/src/plot/skyplot.rs @@ -55,7 +55,7 @@ pub fn skyplot(ctx: &QcContext, plot_context: &mut PlotContext) { } }) .connect_gaps(false) - .name(svnn.to_string()); + .name(format!("{:X}", svnn)); plot_context.add_trace(trace); } } diff --git a/rinex-qc/Cargo.toml b/rinex-qc/Cargo.toml index b37fe6639..99659467f 100644 --- a/rinex-qc/Cargo.toml +++ b/rinex-qc/Cargo.toml @@ -20,7 +20,7 @@ rustdoc-args = ["--cfg", "docrs", "--generate-link-to-definition"] [dependencies] serde = { version = "1.0", optional = true, default-features = false, features = ["derive"] } -hifitime = "3.8" +hifitime = "3.8.4" strum = "0.25" strum_macros = "0.25" horrorshow = "0.8" @@ -28,7 +28,7 @@ itertools = "0.11.0" statrs = "0.16" sp3 = { path = "../sp3", features = ["serde"] } rinex-qc-traits = { path = "../qc-traits", version = "=0.1.1" } -rinex = { path = "../rinex", features = ["obs", "nav", "qc", "processing", "serde", "flate2"] } +rinex = { path = "../rinex", version = "=0.14.1", features = ["full"] } [dev-dependencies] serde_json = "1" diff --git a/rinex-qc/src/analysis/mod.rs b/rinex-qc/src/analysis/mod.rs index dcc6f2bb7..404295f2e 100644 --- a/rinex-qc/src/analysis/mod.rs +++ b/rinex-qc/src/analysis/mod.rs @@ -33,7 +33,7 @@ pub struct QcAnalysis { impl QcAnalysis { /// Creates a new Analysis Report from given RINEX context. /// primary : primary file - pub fn new(primary: &Rinex, nav: &Option, opts: &QcOpts) -> Self { + pub fn new(primary: &Rinex, _nav: &Option, opts: &QcOpts) -> Self { Self { sv: QcSvAnalysis::new(primary, opts), sampling: QcSamplingAnalysis::new(primary, opts), diff --git a/rinex-qc/src/analysis/obs.rs b/rinex-qc/src/analysis/obs.rs index ce5d1d952..b9f6bab85 100644 --- a/rinex-qc/src/analysis/obs.rs +++ b/rinex-qc/src/analysis/obs.rs @@ -5,7 +5,7 @@ use std::str::FromStr; use crate::{pretty_array, QcOpts}; -use rinex::carrier; +//use rinex::carrier; use rinex::carrier::Carrier; use rinex::observation::Snr; use rinex::prelude::{Epoch, EpochFlag, Observable, Rinex, Sv}; @@ -115,7 +115,7 @@ fn report_anomalies<'a>( } tr { th { - : "Cycle slip(s)" + : "Cycle slips" } @ if cs.is_empty() { td { @@ -219,7 +219,7 @@ fn report_epoch_completion( td { @ for ((sv, carrier), count) in complete { b { - : format!("{} {}/L1", sv, carrier) + : format!("{:X} {}/L1", sv, carrier) } p { : format!("{} ({}%)", count, count * 100 / total) @@ -422,10 +422,8 @@ impl QcObsAnalysis { total_epochs = r.len(); for ((epoch, _flag), (_clk, svs)) in r { for (_sv, observables) in svs { - if !observables.is_empty() { - if !epoch_with_obs.contains(&epoch) { - epoch_with_obs.push(*epoch); - } + if !observables.is_empty() && !epoch_with_obs.contains(epoch) { + epoch_with_obs.push(*epoch); } } } @@ -433,7 +431,7 @@ impl QcObsAnalysis { // append ssi: drop vehicle differentiation let mut ssi: HashMap> = HashMap::new(); for (_, _, obs, value) in rnx.ssi() { - if let Some(values) = ssi.get_mut(&obs) { + if let Some(values) = ssi.get_mut(obs) { values.push(value); } else { ssi.insert(obs.clone(), vec![value]); @@ -451,7 +449,7 @@ impl QcObsAnalysis { let mut snr: HashMap> = HashMap::new(); for ((e, _), _, obs, snr_value) in rnx.snr() { let snr_f64: f64 = (snr_value as u8).into(); - if let Some(values) = snr.get_mut(&obs) { + if let Some(values) = snr.get_mut(obs) { values.push((e, snr_f64)); } else { snr.insert(obs.clone(), vec![(e, snr_f64)]); diff --git a/rinex-qc/src/analysis/sv.rs b/rinex-qc/src/analysis/sv.rs index bc3ba457e..ae1ea652b 100644 --- a/rinex-qc/src/analysis/sv.rs +++ b/rinex-qc/src/analysis/sv.rs @@ -13,7 +13,7 @@ impl QcSvAnalysis { pub fn new(primary: &Rinex, _opts: &QcOpts) -> Self { let sv = primary.sv(); Self { - sv: { sv.map(|sv| sv.to_string()).collect() }, + sv: { sv.map(|sv| format!("{:X}", sv)).collect() }, } } } diff --git a/rinex-qc/src/context.rs b/rinex-qc/src/context.rs index 803236e30..003e7984c 100644 --- a/rinex-qc/src/context.rs +++ b/rinex-qc/src/context.rs @@ -3,7 +3,7 @@ use rinex_qc_traits::HtmlReport; use std::collections::HashMap; use std::path::{Path, PathBuf}; -use rinex::carrier::Carrier; +//use rinex::carrier::Carrier; use rinex::observation::Snr; use rinex::prelude::{Epoch, GroundPosition, Rinex, Sv}; use rinex::Error; @@ -116,7 +116,7 @@ impl QcContext { /// Returns reference to SP3 data specifically pub fn sp3_data(&self) -> Option<&SP3> { if let Some(ref sp3) = self.sp3 { - Some(&sp3.data()) + Some(sp3.data()) } else { None } @@ -204,7 +204,7 @@ impl QcContext { /* NB: interpolate Complete Epochs only */ let complete_epoch: Vec<_> = self.primary_data().complete_epoch(min_snr).collect(); for (e, sv_signals) in complete_epoch { - for (sv, carrier) in sv_signals { + for (sv, _carrier) in sv_signals { // if orbit already exists: do not interpolate // this will make things much quicker for high quality data products let found = self @@ -214,17 +214,14 @@ impl QcContext { if let Some((_, _, (x, y, z))) = found { // store as is self.orbits.insert((e, sv), (x, y, z)); - } else { - if let Some(sp3) = self.sp3_data() { - if let Some((x_km, y_km, z_km)) = sp3.sv_position_interpolate(sv, e, order) - { - self.orbits.insert((e, sv), (x_km, y_km, z_km)); - } - } else if let Some(nav) = self.navigation_data() { - if let Some((x_m, y_m, z_m)) = nav.sv_position_interpolate(sv, e, order) { - self.orbits - .insert((e, sv), (x_m * 1.0E-3, y_m * 1.0E-3, z_m * 1.0E-3)); - } + } else if let Some(sp3) = self.sp3_data() { + if let Some((x_km, y_km, z_km)) = sp3.sv_position_interpolate(sv, e, order) { + self.orbits.insert((e, sv), (x_km, y_km, z_km)); + } + } else if let Some(nav) = self.navigation_data() { + if let Some((x_m, y_m, z_m)) = nav.sv_position_interpolate(sv, e, order) { + self.orbits + .insert((e, sv), (x_m * 1.0E-3, y_m * 1.0E-3, z_m * 1.0E-3)); } } } diff --git a/rinex-qc/src/lib.rs b/rinex-qc/src/lib.rs index ac5782d72..3ee92a710 100644 --- a/rinex-qc/src/lib.rs +++ b/rinex-qc/src/lib.rs @@ -85,8 +85,7 @@ impl QcReport { } }, QcClassification::Physics => { - let mut observables: Vec<_> = - ctx.primary_data().observable().map(|o| o.clone()).collect(); + let mut observables: Vec<_> = ctx.primary_data().observable().cloned().collect(); observables.sort(); // improves report rendering for obsv in observables { filter_targets.push(TargetItem::from(obsv)); @@ -103,14 +102,13 @@ impl QcReport { let subset = ctx.primary_data().filter(mask.clone().into()); // also apply to possible NAV augmentation - let nav_subset = if let Some(nav) = &ctx.navigation_data() { - Some(nav.filter(mask.clone().into())) - } else { - None - }; + let nav_subset = ctx + .navigation_data() + .as_ref() + .map(|nav| nav.filter(mask.clone().into())); // perform analysis on these subsets - analysis.push(QcAnalysis::new(&subset, &nav_subset, &opts)); + analysis.push(QcAnalysis::new(&subset, &nav_subset, opts)); } analysis } diff --git a/rinex/Cargo.toml b/rinex/Cargo.toml index 17b8fdcac..6b98e61cc 100644 --- a/rinex/Cargo.toml +++ b/rinex/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rinex" -version = "0.14.0" +version = "0.14.1" license = "MIT OR Apache-2.0" authors = ["Guillaume W. Bres "] description = "Package to parse and analyze RINEX data" @@ -18,6 +18,7 @@ sbas = ["geo", "wkt"] obs = [] meteo = [] nav = [] +ionex = [] processing = [] qc = ["rinex-qc-traits", "horrorshow"] # rinex Quality Check (mainly OBS RINEX) @@ -25,6 +26,7 @@ qc = ["rinex-qc-traits", "horrorshow"] # rinex Quality Check (mainly OBS RINEX) full = [ "flate2", "horrorshow", + "ionex", "meteo", "nav", "obs", @@ -40,6 +42,7 @@ rustdoc-args = ["--cfg", "docrs", "--generate-link-to-definition"] [build-dependencies] serde_json = { version = "1.0", features = ["preserve_order"] } +serde = { version = "1.0", default-features = false, features = ["derive"] } [dependencies] num = "0.4" @@ -58,7 +61,7 @@ geo = { version = "0.26", optional = true } wkt = { version = "0.10.0", default-features = false, optional = true } serde = { version = "1.0", optional = true, default-features = false, features = ["derive"] } flate2 = { version = "1.0.24", optional = true, default-features = false, features = ["zlib"] } -hifitime = { version = "3.8", features = ["serde", "std"] } +hifitime = { version = "3.8.4", features = ["serde", "std"] } horrorshow = { version = "0.8", optional = true } rinex-qc-traits = { path = "../qc-traits", version = "=0.1.1", optional = true } diff --git a/rinex/benches/benchmark.rs b/rinex/benches/benchmark.rs index 8592b920f..cac03acb4 100644 --- a/rinex/benches/benchmark.rs +++ b/rinex/benches/benchmark.rs @@ -3,7 +3,7 @@ use rinex::{ hatanaka::{numdiff::NumDiff, textdiff::TextDiff}, observation::*, prelude::*, - processing::*, + //processing::*, reader::BufferedReader, record::parse_record, }; @@ -36,7 +36,7 @@ fn profiled() -> Criterion { }*/ fn parse_file(fp: &str) { - let _ = Rinex::from_file(fp); + let _ = Rinex::from_file(fp).unwrap(); } fn text_decompression(textdiff: &mut TextDiff, data: &[&str]) { @@ -192,223 +192,96 @@ fn decompression_benchmark(c: &mut Criterion) { } /* - * Puts record section parsing to the test - */ + * Evaluates parsing performance of plain RINEX parsing fn record_parsing_benchmark(c: &mut Criterion) { let mut group = c.benchmark_group("parsing"); - // prepare for OBS/zegv0010.21o - let mut header = Header::basic_obs().with_observation_fields(HeaderFields { - crinex: None, - codes: { - let mut map: HashMap> = HashMap::new(); - map.insert( - Constellation::GPS, - vec![ - Observable::from_str("C1").unwrap(), - Observable::from_str("C2").unwrap(), - Observable::from_str("C5").unwrap(), - Observable::from_str("L1").unwrap(), - Observable::from_str("L2").unwrap(), - Observable::from_str("L5").unwrap(), - Observable::from_str("P1").unwrap(), - Observable::from_str("P2").unwrap(), - Observable::from_str("S1").unwrap(), - Observable::from_str("S2").unwrap(), - Observable::from_str("S5").unwrap(), - ], - ); - map.insert( - Constellation::Glonass, - vec![ - Observable::from_str("C1").unwrap(), - Observable::from_str("C2").unwrap(), - Observable::from_str("C5").unwrap(), - Observable::from_str("L1").unwrap(), - Observable::from_str("L2").unwrap(), - Observable::from_str("L5").unwrap(), - Observable::from_str("P1").unwrap(), - Observable::from_str("P2").unwrap(), - Observable::from_str("S1").unwrap(), - Observable::from_str("S2").unwrap(), - Observable::from_str("S5").unwrap(), - ], - ); - map - }, - clock_offset_applied: false, - dcb_compensations: Vec::new(), - scalings: HashMap::new(), - }); - group.bench_function("OBSv2/zegv0010.21o", |b| { - b.iter(|| { - record_parsing("../test_resources/OBS/V2/zegv0010.21o", &mut header); - }) - }); - - // prepare for OBS/V3/ACOR00ESP - let mut header = Header::basic_obs().with_observation_fields(HeaderFields { - crinex: None, - codes: { - let mut map: HashMap> = HashMap::new(); - map.insert( - Constellation::GPS, - vec![ - Observable::from_str("C1C").unwrap(), - Observable::from_str("L1C").unwrap(), - Observable::from_str("S1C").unwrap(), - Observable::from_str("C2S").unwrap(), - Observable::from_str("L2S").unwrap(), - Observable::from_str("S2S").unwrap(), - Observable::from_str("C2W").unwrap(), - Observable::from_str("L2W").unwrap(), - Observable::from_str("S2W").unwrap(), - Observable::from_str("C5Q").unwrap(), - Observable::from_str("L5Q").unwrap(), - Observable::from_str("S5Q").unwrap(), - ], - ); - map.insert( - Constellation::Glonass, - vec![ - Observable::from_str("C1C").unwrap(), - Observable::from_str("L1C").unwrap(), - Observable::from_str("S1C").unwrap(), - Observable::from_str("C2P").unwrap(), - Observable::from_str("L2P").unwrap(), - Observable::from_str("S2P").unwrap(), - Observable::from_str("C2C").unwrap(), - Observable::from_str("L2C").unwrap(), - Observable::from_str("S2C").unwrap(), - Observable::from_str("C3Q").unwrap(), - Observable::from_str("L3Q").unwrap(), - Observable::from_str("S3Q").unwrap(), - ], - ); - map.insert( - Constellation::Galileo, - vec![ - Observable::from_str("C1C").unwrap(), - Observable::from_str("L1C").unwrap(), - Observable::from_str("S1C").unwrap(), - Observable::from_str("C5Q").unwrap(), - Observable::from_str("L5Q").unwrap(), - Observable::from_str("S5Q").unwrap(), - Observable::from_str("C6C").unwrap(), - Observable::from_str("L6C").unwrap(), - Observable::from_str("S6C").unwrap(), - Observable::from_str("C7Q").unwrap(), - Observable::from_str("L7Q").unwrap(), - Observable::from_str("S7Q").unwrap(), - Observable::from_str("C8Q").unwrap(), - Observable::from_str("L8Q").unwrap(), - Observable::from_str("S8Q").unwrap(), - ], - ); - map.insert( - Constellation::BeiDou, - vec![ - Observable::from_str("C2I").unwrap(), - Observable::from_str("L2I").unwrap(), - Observable::from_str("S2I").unwrap(), - Observable::from_str("C6I").unwrap(), - Observable::from_str("L6I").unwrap(), - Observable::from_str("S6I").unwrap(), - Observable::from_str("C7I").unwrap(), - Observable::from_str("L7I").unwrap(), - Observable::from_str("S7I").unwrap(), - ], - ); - map - }, - clock_offset_applied: false, - dcb_compensations: Vec::new(), - scalings: HashMap::new(), - }); - group.bench_function("OBSv3/ACOR00ESP", |b| { - b.iter(|| { - record_parsing( - "../test_resources/OBS/V3/ACOR00ESP_R_20213550000_01D_30S_MO.rnx", - &mut header, - ); - }) - }); - - //prepare for CRNX/V1/delf0010.21d - //prepare for CRNX/V3/ESBC00DNK - //prepare for NAV/V2/ijmu3650.21n.gz - //prepare for NAV/V3/MOJN00DNK_R_20201770000_01D_MN.rnx.gz - - group.finish(); /* concludes record section */ -} - -fn processing_benchmark(c: &mut Criterion) { - let mut group = c.benchmark_group("processing"); - let rinex = - Rinex::from_file("../test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz") - .unwrap(); - let record = rinex.record.as_obs().unwrap(); - - for filter in vec![ - (Filter::from_str("mask:GPS,GLO,BDS").unwrap(), "mask:gnss"), - //(Filter::from_str("mask:gt:10 minutes").unwrap(), "mask:dt"), - ( - Filter::from_str("mask:L1C,C1C,L2P,L2W").unwrap(), - "mask:obs", - ), - ( - Filter::from_str("mask:g08,g15,g19,r03,r09").unwrap(), - "mask:sv", - ), - //(Filter::from_str("mask:2020-06-25 08:00:00UTC").unwrap(), "mask:epoch"), - (Filter::from_str("smooth:hatch").unwrap(), "smoothing:hatch"), - ( - Filter::from_str("smooth:hatch:l1c,l2c").unwrap(), - "smoothing:hatch:l1c,l2c", - ), - //(Filter::from_str("smooth:mov:10 minutes").unwrap(), "smoothing:mov:10 mins"), - ] { - let (filter, name) = filter; - group.bench_function(&format!("esbc00dnk_r_2021/{}", name), |b| { - b.iter(|| record.filter(filter.clone())) - }); - } - - for combination in vec![ - (Combination::GeometryFree, "gf"), - (Combination::NarrowLane, "nl"), - (Combination::WideLane, "wl"), - (Combination::MelbourneWubbena, "mw"), + let base_dir = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("..") + .join("test_resources"); + /* + * small, medium, large compressed: OBS + */ + for (rev, filename) in vec![ + ("V2", "del0010.21o"), ] { - let (combination, name) = combination; - group.bench_function(&format!("esbc00dnk_r_2021/{}", name), |b| { + group.bench_function("OBSv2/zegv0010.21o", |b| { b.iter(|| { - record.combine(combination); + record_parsing("../test_resources/OBS/V2/zegv0010.21o", &mut header); }) }); } - group.bench_function("esbc00dnk_r_2021/dcb", |b| { - b.iter(|| { - record.dcb(); - }) - }); - group.bench_function("esbc00dnk_r_2021/ionod", |b| { - b.iter(|| { - record.iono_delay_detector(Duration::from_seconds(30.0)); - }) - }); - group.bench_function("esbc00dnk_r_2021/derivative", |b| { - b.iter(|| { - let der = record.derivative(); - let mov = der.moving_average(Duration::from_seconds(600.0), None); - }) - }); + group.finish(); /* concludes record section */ } + */ + +//fn processing_benchmark(c: &mut Criterion) { +// let mut group = c.benchmark_group("processing"); +// let rinex = +// Rinex::from_file("../test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz") +// .unwrap(); +// let record = rinex.record.as_obs().unwrap(); +// +// for filter in vec![ +// (Filter::from_str("mask:GPS,GLO,BDS").unwrap(), "mask:gnss"), +// //(Filter::from_str("mask:gt:10 minutes").unwrap(), "mask:dt"), +// ( +// Filter::from_str("mask:L1C,C1C,L2P,L2W").unwrap(), +// "mask:obs", +// ), +// ( +// Filter::from_str("mask:g08,g15,g19,r03,r09").unwrap(), +// "mask:sv", +// ), +// //(Filter::from_str("mask:2020-06-25 08:00:00UTC").unwrap(), "mask:epoch"), +// (Filter::from_str("smooth:hatch").unwrap(), "smoothing:hatch"), +// ( +// Filter::from_str("smooth:hatch:l1c,l2c").unwrap(), +// "smoothing:hatch:l1c,l2c", +// ), +// //(Filter::from_str("smooth:mov:10 minutes").unwrap(), "smoothing:mov:10 mins"), +// ] { +// let (filter, name) = filter; +// group.bench_function(&format!("esbc00dnk_r_2021/{}", name), |b| { +// b.iter(|| record.filter(filter.clone())) +// }); +// } +// +// for combination in vec![ +// (Combination::GeometryFree, "gf"), +// (Combination::NarrowLane, "nl"), +// (Combination::WideLane, "wl"), +// (Combination::MelbourneWubbena, "mw"), +// ] { +// let (combination, name) = combination; +// group.bench_function(&format!("esbc00dnk_r_2021/{}", name), |b| { +// b.iter(|| { +// record.combine(combination); +// }) +// }); +// } +// group.bench_function("esbc00dnk_r_2021/dcb", |b| { +// b.iter(|| { +// record.dcb(); +// }) +// }); +// group.bench_function("esbc00dnk_r_2021/ionod", |b| { +// b.iter(|| { +// record.iono_delay_detector(Duration::from_seconds(30.0)); +// }) +// }); +// group.bench_function("esbc00dnk_r_2021/derivative", |b| { +// b.iter(|| { +// let der = record.derivative(); +// let mov = der.moving_average(Duration::from_seconds(600.0), None); +// }) +// }); +//} fn benchmark(c: &mut Criterion) { decompression_benchmark(c); - record_parsing_benchmark(c); - processing_benchmark(c); + //record_parsing_benchmark(c); + //processing_benchmark(c); } criterion_group!(benches, benchmark); diff --git a/rinex/build.rs b/rinex/build.rs index b9294403f..4ff3d4d62 100644 --- a/rinex/build.rs +++ b/rinex/build.rs @@ -3,8 +3,8 @@ use std::io::Write; use std::path::Path; fn build_nav_database() { - let out_dir = env::var("OUT_DIR").unwrap(); - let nav_path = Path::new(&out_dir).join("nav_orbits.rs"); + let outdir = env::var("OUT_DIR").unwrap(); + let nav_path = Path::new(&outdir).join("nav_orbits.rs"); let mut nav_file = std::fs::File::create(&nav_path).unwrap(); // read helper descriptor @@ -100,6 +100,84 @@ pub struct NavHelper<'a> { .unwrap(); } +use serde::Deserialize; + +fn default_launch_month() -> u8 { + 1 // Jan +} + +fn default_launch_day() -> u8 { + 1 // 1st day of month +} + +/* + * We use an intermediate struct + * and "serde" to allow not to describe the launched + * day or month for example + */ +#[derive(Deserialize)] +struct SBASDBEntry<'a> { + pub constellation: &'a str, + pub prn: u16, + pub id: &'a str, + #[serde(default = "default_launch_month")] + pub launched_month: u8, + #[serde(default = "default_launch_day")] + pub launched_day: u8, + pub launched_year: i32, +} + +fn build_sbas_helper() { + let outdir = env::var("OUT_DIR").unwrap(); + let path = Path::new(&outdir).join("sbas.rs"); + let mut fd = std::fs::File::create(path).unwrap(); + + // read descriptor: parse and dump into a static array + let db_content = std::fs::read_to_string("db/SBAS/sbas.json").unwrap(); + + let sbas_db: Vec = serde_json::from_str(&db_content).unwrap(); + + let content = "use lazy_static::lazy_static; + +#[derive(Debug)] +pub struct SBASHelper<'a> { + constellation: &'a str, + prn: u16, + id: &'a str, + launched_day: u8, + launched_month: u8, + launched_year: i32, +} + +lazy_static! { + static ref SBAS_VEHICLES: Vec> = vec![ +\n"; + + fd.write_all(content.as_bytes()).unwrap(); + + for e in sbas_db { + fd.write_all( + format!( + "SBASHelper {{ + constellation: \"{}\", + prn: {}, + id: \"{}\", + launched_year: {}, + launched_month: {}, + launched_day: {} + }},", + e.constellation, e.prn, e.id, e.launched_year, e.launched_month, e.launched_day, + ) + .as_bytes(), + ) + .unwrap() + } + + fd.write_all(" ];".as_bytes()).unwrap(); + fd.write_all("}\n".as_bytes()).unwrap(); +} + fn main() { build_nav_database(); + build_sbas_helper(); } diff --git a/rinex/db/SBAS/sbas.json b/rinex/db/SBAS/sbas.json new file mode 100644 index 000000000..ffb621810 --- /dev/null +++ b/rinex/db/SBAS/sbas.json @@ -0,0 +1,121 @@ +[ + { + "constellation": "AusNZ", + "prn": 122, + "id": "INMARSAT-4F1", + "launched_year": 2020, + "launched_month": 1 + }, + { + "constellation": "EGNOS", + "prn": 123, + "id": "ASTRA-5B", + "launched_year": 2021, + "launched_month": 11 + }, + { + "constellation": "SDCM", + "prn": 125, + "id": "Luch-5A", + "launched_year": 2021, + "launched_month": 12 + }, + { + "constellation": "EGNOS", + "prn": 126, + "id": "INMARSAT-4F2", + "launched_year": 2023, + "launched_month": 4 + }, + { + "constellation": "GAGAN", + "prn": 127, + "id": "GSAT-8", + "launched_year": 2020, + "launched_month": 9 + }, + { + "constellation": "GAGAN", + "prn": 128, + "id": "GSAT-10", + "launched_year": 2020, + "launched_month": 9 + }, + { + "constellation": "BDSBAS", + "prn": 130, + "id": "G6", + "launched_year": 2020, + "launched_month": 10 + }, + { + "constellation": "BDSBAS", + "prn": 130, + "id": "G6", + "launched_year": 2020, + "launched_month": 10 + }, + { + "constellation": "KASS", + "prn": 134, + "id": "MEASAT-3D", + "launched_year": 2021, + "launched_month": 6 + }, + { + "constellation": "EGNOS", + "prn": 136, + "id": "SES-5", + "launched_year": 2021, + "launched_month": 11 + }, + { + "constellation": "WAAS", + "prn": 138, + "id": "ANIK-F1R", + "launched_year": 2022, + "launched_month": 7 + }, + { + "constellation": "SDCM", + "prn": 140, + "id": "Luch-5B", + "launched_year": 2021, + "launched_month": 12 + }, + { + "constellation": "SDCM", + "prn": 141, + "id": "Luch-4", + "launched_year": 2021, + "launched_month": 12 + }, + { + "constellation": "BDSBAS", + "prn": 143, + "id": "G3", + "launched_year": 2020, + "launched_month": 10 + }, + { + "constellation": "BDSBAS", + "prn": 144, + "id": "G1", + "launched_year": 2020, + "launched_month": 10 + }, + { + "constellation": "NSAS", + "prn": 147, + "id": "NIGCOMSAT-1R", + "launched_year": 2021, + "launched_month": 1 + }, + { + "constellation": "ASAL", + "prn": 148, + "id": "ALCOMSAT-1", + "launched_year": 2020, + "launched_month": 1 + } +] diff --git a/rinex/src/algorithm/filters/decim.rs b/rinex/src/algorithm/filters/decim.rs index 0b97d4bba..998647c1b 100644 --- a/rinex/src/algorithm/filters/decim.rs +++ b/rinex/src/algorithm/filters/decim.rs @@ -81,7 +81,7 @@ pub trait Decimate { impl std::str::FromStr for DecimationFilter { type Err = Error; fn from_str(content: &str) -> Result { - let items: Vec<&str> = content.trim().split(":").collect(); + let items: Vec<&str> = content.trim().split(':').collect(); if let Ok(dt) = Duration::from_str(items[0].trim()) { Ok(Self { target: { @@ -94,7 +94,7 @@ impl std::str::FromStr for DecimationFilter { }, dtype: DecimationType::DecimByInterval(dt), }) - } else if let Ok(r) = u32::from_str_radix(items[0].trim(), 10) { + } else if let Ok(r) = items[0].trim().parse::() { Ok(Self { target: { if items.len() > 1 { diff --git a/rinex/src/algorithm/filters/mask.rs b/rinex/src/algorithm/filters/mask.rs index 6f7195b06..72d0395c0 100644 --- a/rinex/src/algorithm/filters/mask.rs +++ b/rinex/src/algorithm/filters/mask.rs @@ -4,13 +4,13 @@ use thiserror::Error; #[derive(Error, Debug)] pub enum Error { #[error("invalid mask target")] - TargetError(#[from] crate::algorithm::target::Error), + InvalidTarget(#[from] crate::algorithm::target::Error), #[error("missing a mask operand")] MissingOperand, #[error("invalid mask operand")] InvalidOperand, #[error("invalid mask target \"{0}\"")] - InvalidTarget(String), + NonSupportedTarget(String), #[error("invalid mask description")] InvalidDescriptor, } @@ -51,13 +51,13 @@ impl std::str::FromStr for MaskOperand { let c = content.trim(); if c.starts_with(">=") { Ok(Self::GreaterEquals) - } else if c.starts_with(">") { + } else if c.starts_with('>') { Ok(Self::GreaterThan) } else if c.starts_with("<=") { Ok(Self::LowerEquals) - } else if c.starts_with("<") { + } else if c.starts_with('<') { Ok(Self::LowerThan) - } else if c.starts_with("=") { + } else if c.starts_with('=') { Ok(Self::Equals) } else if c.starts_with("!=") { Ok(Self::NotEquals) @@ -256,14 +256,14 @@ impl std::str::FromStr for MaskFilter { let float_offset = operand_offset + operand.formatted_len() + 2; Ok(Self { operand, - item: TargetItem::from_elevation(&cleanedup[float_offset..].trim())?, + item: TargetItem::from_elevation(cleanedup[float_offset..].trim())?, }) } else if content[0..1].eq("a") { // --> Azimuth Mask case let float_offset = operand_offset + operand.formatted_len() + 2; Ok(Self { operand, - item: TargetItem::from_azimuth(&cleanedup[float_offset..].trim())?, + item: TargetItem::from_azimuth(cleanedup[float_offset..].trim())?, }) } else { // We're only left with SNR mask case @@ -271,10 +271,10 @@ impl std::str::FromStr for MaskFilter { if content[0..3].eq("snr") { Ok(Self { operand, - item: TargetItem::from_snr(&cleanedup[float_offset..].trim())?, + item: TargetItem::from_snr(cleanedup[float_offset..].trim())?, }) } else { - Err(Error::InvalidTarget( + Err(Error::NonSupportedTarget( cleanedup[..operand_offset].to_string(), )) } @@ -289,7 +289,7 @@ impl std::str::FromStr for MaskFilter { Ok(Self { operand, - item: TargetItem::from_str(&cleanedup[offset..].trim_start())?, + item: TargetItem::from_str(cleanedup[offset..].trim_start())?, }) } } @@ -303,7 +303,7 @@ mod test { use std::str::FromStr; #[test] fn mask_operand() { - for (descriptor, opposite_desc) in vec![ + for (descriptor, opposite_desc) in [ (">=", "<="), (">", "<"), ("=", "!="), @@ -349,7 +349,7 @@ mod test { } #[test] fn mask_elev() { - for desc in vec![ + for desc in [ "e< 40.0", "e != 30", " e<40.0", @@ -368,7 +368,7 @@ mod test { } #[test] fn mask_gnss() { - for (descriptor, opposite_desc) in vec![ + for (descriptor, opposite_desc) in [ (" = GPS", "!= GPS"), ("= GAL,GPS", "!= GAL,GPS"), (" =GLO,GAL", "!= GLO,GAL"), @@ -412,9 +412,7 @@ mod test { } #[test] fn mask_sv() { - for (descriptor, opposite_desc) in - vec![(" = G01", "!= G01"), ("= R03, G31", "!= R03, G31")] - { + for (descriptor, opposite_desc) in [(" = G01", "!= G01"), ("= R03, G31", "!= R03, G31")] { let mask = MaskFilter::from_str(descriptor); assert!( mask.is_ok(), diff --git a/rinex/src/algorithm/filters/mod.rs b/rinex/src/algorithm/filters/mod.rs index 4d4116d4f..6f28c2574 100644 --- a/rinex/src/algorithm/filters/mod.rs +++ b/rinex/src/algorithm/filters/mod.rs @@ -18,15 +18,15 @@ pub enum Error { #[error("unknown filter type \"{0}\"")] UnknownFilterType(String), #[error("invalid mask filter")] - MaskFilterParsingError(#[from] mask::Error), + MaskFilterParsing(#[from] mask::Error), #[error("invalid decimation filter")] - DecimationFilterParsingError(#[from] decim::Error), + DecimationFilterParsing(#[from] decim::Error), #[error("invalid smoothing filter")] - SmoothingFilterParsingError(#[from] smoothing::Error), + SmoothingFilterParsing(#[from] smoothing::Error), #[error("invalid filter target")] - TargetItemError(#[from] super::target::Error), + TargetItem(#[from] super::target::Error), #[error("failed to apply filter")] - FilterError, + Filter, } /// Preprocessing filters, to preprocess RINEX data prior further analysis. @@ -75,7 +75,7 @@ impl From for Filter { impl std::str::FromStr for Filter { type Err = Error; fn from_str(content: &str) -> Result { - let items: Vec<&str> = content.split(":").collect(); + let items: Vec<&str> = content.split(':').collect(); let identifier = items[0].trim(); if identifier.eq("decim") { @@ -118,7 +118,7 @@ mod test { /* * MASK FILTER description */ - for descriptor in vec![ + for descriptor in [ "GPS", "=GPS", " != GPS", @@ -141,7 +141,7 @@ mod test { /* * DECIMATION FILTER description */ - for desc in vec![ + for desc in [ "decim:10", "decim:10 min", "decim:1 hour", @@ -154,7 +154,7 @@ mod test { /* * SMOOTHING FILTER description */ - for desc in vec![ + for desc in [ "smooth:mov:10 min", "smooth:mov:1 hour", "smooth:mov:1 hour:l1c", diff --git a/rinex/src/algorithm/filters/smoothing.rs b/rinex/src/algorithm/filters/smoothing.rs index bf777dd9e..2cd1d5ef7 100644 --- a/rinex/src/algorithm/filters/smoothing.rs +++ b/rinex/src/algorithm/filters/smoothing.rs @@ -23,19 +23,19 @@ pub struct SmoothingFilter { #[derive(Error, Debug)] pub enum Error { #[error("invalid description \"{0}\"")] - InvalidDescriptionError(String), + InvalidDescription(String), #[error("unknown smoothing filter \"{0}\"")] UnknownFilter(String), - #[error("unknown smoothing target")] - TargetError(#[from] crate::algorithm::target::Error), + #[error("invalid target")] + InvalidTarget(#[from] crate::algorithm::target::Error), #[error("failed to parse duration")] - DurationParsingError(#[from] hifitime::Errors), + DurationParsing(#[from] hifitime::Errors), } impl std::str::FromStr for SmoothingFilter { type Err = Error; fn from_str(content: &str) -> Result { - let items: Vec<&str> = content.trim().split(":").collect(); + let items: Vec<&str> = content.trim().split(':').collect(); if items[0].trim().eq("hatch") { Ok(Self { target: { @@ -50,7 +50,7 @@ impl std::str::FromStr for SmoothingFilter { }) } else if items[0].trim().eq("mov") { if items.len() < 2 { - return Err(Error::InvalidDescriptionError(format!("{:?}", items))); + return Err(Error::InvalidDescription(format!("{:?}", items))); } let dt = Duration::from_str(items[1].trim())?; Ok(Self { @@ -87,7 +87,7 @@ mod test { use std::str::FromStr; #[test] fn from_str() { - for desc in vec!["hatch", "hatch:C1C", "hatch:c1c,c2p"] { + for desc in ["hatch", "hatch:C1C", "hatch:c1c,c2p"] { let filter = SmoothingFilter::from_str(desc); assert!( filter.is_ok(), @@ -95,7 +95,7 @@ mod test { desc ); } - for desc in vec![ + for desc in [ "mov:10 min", "mov:1 hour", "mov:10 min:clk", diff --git a/rinex/src/algorithm/target.rs b/rinex/src/algorithm/target.rs index 0165c181d..c96ded211 100644 --- a/rinex/src/algorithm/target.rs +++ b/rinex/src/algorithm/target.rs @@ -13,7 +13,7 @@ pub enum Error { #[error("unknown target \"{0}\"")] UnknownTarget(String), #[error("type guessing error \"{0}\"")] - TypeGuessingError(String), + TypeGuessing(String), #[error("expecting two epochs when describing a duration")] InvalidDuration, #[error("bad epoch description")] @@ -29,9 +29,9 @@ pub enum Error { #[error("constellation parsing error")] ConstellationParing(#[from] constellation::ParsingError), #[error("failed to parse epoch flag")] - EpochFlagParsingError(#[from] crate::epoch::flag::Error), + EpochFlagParsing(#[from] crate::epoch::flag::Error), #[error("failed to parse constellation")] - ConstellationParsingError, + ConstellationParsing, #[error("invalid nav item")] InvalidNavItem(#[from] crate::navigation::Error), #[error("observable parsing error")] @@ -236,7 +236,7 @@ impl std::str::FromStr for TargetItem { * when operand comes first in description. * Otherwise, we muse use other methods */ - let items: Vec<&str> = c.split(",").collect(); + let items: Vec<&str> = c.split(',').collect(); /* * Epoch and Durations */ @@ -309,11 +309,11 @@ impl std::str::FromStr for TargetItem { .map(|s| s.to_string()) .collect(); - if matched_orbits.len() > 0 { + if !matched_orbits.is_empty() { Ok(Self::OrbitItem(matched_orbits)) } else { // not a single match - Err(Error::TypeGuessingError(c.to_string())) + Err(Error::TypeGuessing(c.to_string())) } } } @@ -452,7 +452,7 @@ mod test { assert_eq!(target, TargetItem::DurationItem(dt)); // test Matching NAV orbits - for descriptor in vec![ + for descriptor in [ "iode", "crc", "crs", @@ -469,7 +469,7 @@ mod test { } // test non matching NAV orbits - for descriptor in vec!["oide", "ble", "blah, oide"] { + for descriptor in ["oide", "ble", "blah, oide"] { let target = TargetItem::from_str(descriptor); assert!( target.is_err(), diff --git a/rinex/src/antex/frequency.rs b/rinex/src/antex/frequency.rs index fcb3461cd..251a391a8 100644 --- a/rinex/src/antex/frequency.rs +++ b/rinex/src/antex/frequency.rs @@ -19,10 +19,7 @@ impl Default for Pattern { impl Pattern { /// Returns true if this phase pattern is azimuth dependent pub fn is_azimuth_dependent(&self) -> bool { - match self { - Self::AzimuthDependent(_) => true, - _ => false, - } + matches!(self, Self::AzimuthDependent(_)) } /// Unwraps pattern values, whether it is /// Azimuth dependent or not @@ -124,7 +121,7 @@ impl Frequency { } pub fn with_carrier(&self, carrier: Carrier) -> Self { let mut f = self.clone(); - f.carrier = carrier.clone(); + f.carrier = carrier; f } pub fn with_northern_eccentricity(&self, north: f64) -> Self { @@ -156,7 +153,7 @@ mod test { fn test_pattern() { let default = Pattern::default(); assert_eq!(default, Pattern::NonAzimuthDependent(Vec::new())); - assert_eq!(default.is_azimuth_dependent(), false); + assert!(!default.is_azimuth_dependent()); } #[test] fn test_frequency() { diff --git a/rinex/src/antex/pcv.rs b/rinex/src/antex/pcv.rs index ee52a1d6d..5ea4ab113 100644 --- a/rinex/src/antex/pcv.rs +++ b/rinex/src/antex/pcv.rs @@ -33,10 +33,7 @@ impl std::str::FromStr for Pcv { impl Pcv { pub fn is_relative(&self) -> bool { - match self { - Self::Relative(_) => true, - _ => false, - } + matches!(self, Self::Relative(_)) } pub fn is_absolute(&self) -> bool { !self.is_relative() @@ -58,7 +55,7 @@ mod test { fn test_pcv() { assert_eq!(Pcv::default(), Pcv::Absolute); assert!(Pcv::Absolute.is_absolute()); - assert_eq!(Pcv::Relative(String::from("AOAD/M_T")).is_absolute(), false); + assert!(!Pcv::Relative(String::from("AOAD/M_T")).is_absolute()); let pcv = Pcv::from_str("A"); assert!(pcv.is_ok()); diff --git a/rinex/src/antex/record.rs b/rinex/src/antex/record.rs index 97af7ed2d..245f8d8ab 100644 --- a/rinex/src/antex/record.rs +++ b/rinex/src/antex/record.rs @@ -181,16 +181,16 @@ mod test { #[test] fn test_new_epoch() { let content = " START OF ANTENNA"; - assert_eq!(is_new_epoch(content), true); + assert!(is_new_epoch(content)); let content = "TROSAR25.R4 LEIT727259 TYPE / SERIAL NO"; - assert_eq!(is_new_epoch(content), false); + assert!(!is_new_epoch(content)); let content = " 26 # OF FREQUENCIES"; - assert_eq!(is_new_epoch(content), false); + assert!(!is_new_epoch(content)); let content = " G01 START OF FREQUENCY"; - assert_eq!(is_new_epoch(content), false); + assert!(!is_new_epoch(content)); } } diff --git a/rinex/src/carrier.rs b/rinex/src/carrier.rs index 715f1b9ef..ad2ed60d2 100644 --- a/rinex/src/carrier.rs +++ b/rinex/src/carrier.rs @@ -637,9 +637,14 @@ impl Carrier { Constellation::Glonass => Self::from_glo_observable(observable), Constellation::Galileo => Self::from_gal_observable(observable), Constellation::QZSS => Self::from_qzss_observable(observable), - Constellation::Geo | Constellation::SBAS(_) => Self::from_geo_observable(observable), Constellation::IRNSS => Self::from_irnss_observable(observable), - _ => todo!("from_\"{}:{}\"_observable()", constellation, observable), + c => { + if c.is_sbas() { + Self::from_geo_observable(observable) + } else { + unreachable!("observable for {}", constellation); + } + }, } } @@ -668,7 +673,7 @@ impl Carrier { 8 => Ok(Self::E5), _ => Ok(Self::E1), }, - Constellation::SBAS(_) | Constellation::Geo => match sv.prn { + Constellation::SBAS => match sv.prn { 1 => Ok(Self::L1), 5 => Ok(Self::L5), _ => Ok(Self::L1), @@ -695,10 +700,7 @@ impl Carrier { 9 => Ok(Self::S), _ => Ok(Self::L1), }, - _ => panic!( - "non supported conversion from {}", - sv.constellation.to_3_letter_code() - ), + _ => panic!("non supported conversion from {:?}", sv.constellation), } } } @@ -717,9 +719,9 @@ mod test { assert_eq!(l1.frequency_mhz(), 1575.42_f64); assert_eq!(l1.wavelength(), 299792458.0 / 1_575_420_000.0_f64); - for constell in vec![ + for constell in [ Constellation::GPS, - Constellation::Geo, + Constellation::SBAS, Constellation::Glonass, Constellation::Galileo, Constellation::BeiDou, @@ -746,9 +748,9 @@ mod test { assert_eq!(Carrier::from_observable(constell, &obs), Ok(Carrier::L5),); } /* - * Geo + * SBAS */ - } else if constell == Constellation::Geo { + } else if constell == Constellation::SBAS { let codes = vec!["C1", "L1C", "D1", "S1", "S1C", "D1C"]; for code in codes { let obs = Observable::from_str(code).unwrap(); diff --git a/rinex/src/clocks/mod.rs b/rinex/src/clocks/mod.rs index 949fef590..039d02c26 100644 --- a/rinex/src/clocks/mod.rs +++ b/rinex/src/clocks/mod.rs @@ -1,16 +1,16 @@ //! RINEX Clock files parser & analysis use hifitime::TimeScale; pub mod record; -pub use record::{Data, DataType, Error, Record, System}; +pub use record::{ClockData, ClockDataType, Error, Record, System}; /// Clocks `RINEX` specific header fields #[derive(Clone, Debug, Default, PartialEq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct HeaderFields { /// Types of observation in this file - pub codes: Vec, + pub codes: Vec, /// Clock Data analysis production center - pub agency: Option, + pub agency: Option, /// Reference station pub station: Option, /// Reference clock descriptor @@ -40,7 +40,7 @@ impl HeaderFields { s } /// Set production agency - pub fn with_agency(&self, agency: Agency) -> Self { + pub fn with_agency(&self, agency: ClockAnalysisAgency) -> Self { let mut s = self.clone(); s.agency = Some(agency); s @@ -57,10 +57,10 @@ pub struct Station { pub id: String, } -/// Describes a clock analysis center / agency +/// Describes a clock analysis agency #[derive(Clone, PartialEq, Debug)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub struct Agency { +pub struct ClockAnalysisAgency { /// IGS AC 3 letter code pub code: String, /// agency name diff --git a/rinex/src/clocks/record.rs b/rinex/src/clocks/record.rs index d4115ca3e..e19d4dd28 100644 --- a/rinex/src/clocks/record.rs +++ b/rinex/src/clocks/record.rs @@ -68,20 +68,25 @@ pub enum Error { /// Clocks file payload #[derive(Clone, Debug, PartialEq, Default)] #[cfg_attr(feature = "serde", derive(Serialize))] -pub struct Data { - /// Clock bias +pub struct ClockData { + /// Clock bias [s] pub bias: f64, - pub bias_sigma: Option, - pub rate: Option, - pub rate_sigma: Option, - pub accel: Option, - pub accel_sigma: Option, + /// Clock bias deviation + pub bias_dev: Option, + /// Clock drift [s/s] + pub drift: Option, + /// Clock drift deviation + pub drift_dev: Option, + /// Clock drift change [s/s^2] + pub drift_change: Option, + /// Clock drift change deviation + pub drift_change_dev: Option, } /// Clock data observables #[derive(Debug, PartialEq, Eq, Hash, Clone, EnumString)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub enum DataType { +pub enum ClockDataType { /// Data analysis results for receiver clocks /// derived from a set of network receivers and satellites AR, @@ -96,7 +101,7 @@ pub enum DataType { MS, } -impl std::fmt::Display for DataType { +impl std::fmt::Display for ClockDataType { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { Self::AR => f.write_str("AR"), @@ -109,7 +114,6 @@ impl std::fmt::Display for DataType { } /// Clocks RINEX record content. -/// Data is sorted by [Epoch], by [DataType] and by [System]. /* TODO /// Example of Clock record browsing: /// ``` @@ -128,12 +132,12 @@ impl std::fmt::Display for DataType { /// } /// ``` */ -pub type Record = BTreeMap>>; +pub type Record = BTreeMap>>; pub(crate) fn is_new_epoch(line: &str) -> bool { - // first 2 bytes match a DataType code + // first 2 bytes match a ClockDataType code let content = line.split_at(2).0; - DataType::from_str(content).is_ok() + ClockDataType::from_str(content).is_ok() } /// Builds `RINEX` record entry for `Clocks` data files. @@ -142,12 +146,12 @@ pub(crate) fn is_new_epoch(line: &str) -> bool { pub(crate) fn parse_epoch( version: Version, content: &str, -) -> Result<(Epoch, DataType, System, Data), Error> { +) -> Result<(Epoch, ClockDataType, System, ClockData), Error> { let mut lines = content.lines(); let line = lines.next().unwrap(); // Data type code let (dtype, rem) = line.split_at(3); - let data_type = DataType::from_str(dtype.trim())?; // must pass + let data_type = ClockDataType::from_str(dtype.trim())?; // must pass let mut rem = rem.clone(); let limit = Version { major: 3, minor: 4 }; @@ -191,15 +195,15 @@ pub(crate) fn parse_epoch( // nb of data fields let (n, _) = rem.split_at(4); - let n = u8::from_str_radix(n.trim(), 10)?; + let n = n.trim().parse::()?; // data fields - let mut data = Data::default(); + let mut data = ClockData::default(); let items: Vec<&str> = line.split_ascii_whitespace().collect(); - data.bias = f64::from_str(items[9].trim())?; // bias must pass + data.bias = items[9].trim().parse::()?; // bias must pass if n > 1 { - if let Ok(f) = f64::from_str(items[10].trim()) { - data.bias_sigma = Some(f) + if let Ok(f) = items[10].trim().parse::() { + data.bias_dev = Some(f) } } @@ -207,51 +211,50 @@ pub(crate) fn parse_epoch( if let Some(l) = lines.next() { let line = l.clone(); let items: Vec<&str> = line.split_ascii_whitespace().collect(); - for i in 0..items.len() { - if let Ok(f) = f64::from_str(items[i].trim()) { + for (i, item) in items.iter().enumerate() { + if let Ok(f) = item.trim().parse::() { if i == 0 { - data.rate = Some(f); + data.drift = Some(f); } else if i == 1 { - data.rate_sigma = Some(f); + data.drift_dev = Some(f); } else if i == 2 { - data.accel = Some(f); + data.drift_change = Some(f); } else if i == 3 { - data.accel_sigma = Some(f); + data.drift_change_dev = Some(f); } } } } } - Ok((epoch, data_type, system, data)) } /// Writes epoch into stream pub(crate) fn fmt_epoch( epoch: &Epoch, - data: &HashMap>, + data: &HashMap>, ) -> Result { let mut lines = String::with_capacity(128); for (dtype, data) in data.iter() { for (system, data) in data.iter() { lines.push_str(&format!("{} {} {} ", dtype, system, epoch)); lines.push_str(&format!("{:.13E} ", data.bias)); - if let Some(sigma) = data.bias_sigma { + if let Some(sigma) = data.bias_dev { lines.push_str(&format!("{:.13E} ", sigma)); } - if let Some(rate) = data.rate { - lines.push_str(&format!("{:.13E} ", rate)); + if let Some(drift) = data.drift { + lines.push_str(&format!("{:.13E} ", drift)); } - if let Some(sigma) = data.rate_sigma { + if let Some(sigma) = data.drift_dev { lines.push_str(&format!("{:.13E} ", sigma)); } - if let Some(accel) = data.accel { - lines.push_str(&format!("{:.13E} ", accel)); + if let Some(drift_change) = data.drift_change { + lines.push_str(&format!("{:.13E} ", drift_change)); } - if let Some(sigma) = data.accel_sigma { + if let Some(sigma) = data.drift_change_dev { lines.push_str(&format!("{:.13E} ", sigma)); } - lines.push_str("\n"); + lines.push('\n'); } } Ok(lines) @@ -263,22 +266,22 @@ mod test { #[test] fn test_is_new_epoch() { let c = "AR AREQ 1994 07 14 20 59 0.000000 6 -0.123456789012E+00 -0.123456789012E+01"; - assert_eq!(is_new_epoch(c), true); + assert!(is_new_epoch(c)); let c = "RA AREQ 1994 07 14 20 59 0.000000 6 -0.123456789012E+00 -0.123456789012E+01"; - assert_eq!(is_new_epoch(c), false); + assert!(!is_new_epoch(c)); let c = "DR AREQ 1994 07 14 20 59 0.000000 6 -0.123456789012E+00 -0.123456789012E+01"; - assert_eq!(is_new_epoch(c), true); + assert!(is_new_epoch(c)); let c = "CR AREQ 1994 07 14 20 59 0.000000 6 -0.123456789012E+00 -0.123456789012E+01"; - assert_eq!(is_new_epoch(c), true); + assert!(is_new_epoch(c)); let c = "AS AREQ 1994 07 14 20 59 0.000000 6 -0.123456789012E+00 -0.123456789012E+01"; - assert_eq!(is_new_epoch(c), true); + assert!(is_new_epoch(c)); let c = "CR USNO 1995 07 14 20 59 50.000000 2 0.123456789012E+00 -0.123456789012E-01"; - assert_eq!(is_new_epoch(c), true); + assert!(is_new_epoch(c)); let c = "AS G16 1994 07 14 20 59 0.000000 2 -0.123456789012E+00 -0.123456789012E+01"; - assert_eq!(is_new_epoch(c), true); + assert!(is_new_epoch(c)); let c = "A G16 1994 07 14 20 59 0.000000 2 -0.123456789012E+00 -0.123456789012E+01"; - assert_eq!(is_new_epoch(c), false); + assert!(!is_new_epoch(c)); } } @@ -298,29 +301,29 @@ impl Merge for Record { for (system, data) in systems.iter() { if let Some(ddata) = ssystems.get_mut(system) { // provide only previously omitted fields - if let Some(data) = data.bias_sigma { - if ddata.bias_sigma.is_none() { - ddata.bias_sigma = Some(data); + if let Some(data) = data.bias_dev { + if ddata.bias_dev.is_none() { + ddata.bias_dev = Some(data); } } - if let Some(data) = data.rate { - if ddata.rate.is_none() { - ddata.rate = Some(data); + if let Some(data) = data.drift { + if ddata.drift.is_none() { + ddata.drift = Some(data); } } - if let Some(data) = data.rate_sigma { - if ddata.rate_sigma.is_none() { - ddata.rate_sigma = Some(data); + if let Some(data) = data.drift_dev { + if ddata.drift_dev.is_none() { + ddata.drift_dev = Some(data); } } - if let Some(data) = data.accel { - if ddata.accel.is_none() { - ddata.accel = Some(data); + if let Some(data) = data.drift_change { + if ddata.drift_change.is_none() { + ddata.drift_change = Some(data); } } - if let Some(data) = data.accel_sigma { - if ddata.accel_sigma.is_none() { - ddata.accel_sigma = Some(data); + if let Some(data) = data.drift_change_dev { + if ddata.drift_change_dev.is_none() { + ddata.drift_change_dev = Some(data); } } } else { @@ -348,7 +351,7 @@ impl Split for Record { .iter() .flat_map(|(k, v)| { if k <= &epoch { - Some((k.clone(), v.clone())) + Some((*k, v.clone())) } else { None } @@ -358,7 +361,7 @@ impl Split for Record { .iter() .flat_map(|(k, v)| { if k > &epoch { - Some((k.clone(), v.clone())) + Some((*k, v.clone())) } else { None } @@ -395,9 +398,9 @@ impl Mask for Record { true // retain other system types } }); - systems.len() > 0 + !systems.is_empty() }); - dtypes.len() > 0 + !dtypes.is_empty() }); }, _ => {}, // TargetItem:: diff --git a/rinex/src/constellation/mod.rs b/rinex/src/constellation/mod.rs index 2ce18cfb0..37478222b 100644 --- a/rinex/src/constellation/mod.rs +++ b/rinex/src/constellation/mod.rs @@ -2,28 +2,22 @@ use hifitime::TimeScale; use thiserror::Error; -mod augmentation; -pub use augmentation::Augmentation; +//#[cfg(feature = "serde")] +//use serde::{Deserialize, Serialize}; -#[cfg(feature = "serde")] -use serde::{Deserialize, Serialize}; +mod sbas; #[cfg(feature = "sbas")] -pub use augmentation::sbas_selection_helper; +pub use sbas::sbas_selection_helper; /// Constellation parsing & identification related errors #[derive(Error, Clone, Debug, PartialEq)] pub enum ParsingError { #[error("unknown constellation \"{0}\"")] Unknown(String), - #[error("unrecognized constellation \"{0}\"")] - Unrecognized(String), - #[error("unknown constellation format \"{0}\"")] - Format(String), } /// Describes all known `GNSS` constellations -/// when manipulating `RINEX` #[derive(Default, Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub enum Constellation { @@ -38,14 +32,37 @@ pub enum Constellation { QZSS, /// `Galileo` european constellation Galileo, - /// `Geo` : stationnary satellite, - /// also serves as SBAS with unknown augmentation system - Geo, - /// `SBAS` - SBAS(Augmentation), - /// `IRNSS` constellation, - /// now officially renamed "NavIC" + /// `IRNSS` constellation, renamed "NavIC" IRNSS, + /// American augmentation system, + WAAS, + /// European augmentation system + EGNOS, + /// Japanese MTSAT Space Based augmentation system + MSAS, + /// Indian augmentation system + GAGAN, + /// Chinese augmentation system + BDSBAS, + /// South Korean augmentation system + KASS, + /// Russian augmentation system + SDCM, + /// South African augmentation system + ASBAS, + /// Autralia / NZ augmentation system + SPAN, + /// SBAS is used to describe SBAS (augmentation) + /// vehicles without much more information + SBAS, + /// Australia-NZ Geoscience system + AusNZ, + /// Group Based SBAS + GBAS, + /// Nigerian SBAS + NSAS, + /// Algerian SBAS + ASAL, /// `Mixed` for Mixed constellations /// RINEX files description Mixed, @@ -53,168 +70,156 @@ pub enum Constellation { impl std::fmt::Display for Constellation { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - f.write_str(self.to_3_letter_code()) + write!(f, "{:X}", self) } } impl Constellation { - /* - * Identifies GNSS constellation from standard 1 letter code - * but can insensitive. - * Mostly used in Self::from_str (public method) - */ - pub(crate) fn from_1_letter_code(code: &str) -> Result { - if code.len() != 1 { - return Err(ParsingError::Format(code.to_string())); - } - - let lower = code.to_lowercase(); - if lower.eq("g") { - Ok(Self::GPS) - } else if lower.eq("r") { - Ok(Self::Glonass) - } else if lower.eq("c") { - Ok(Self::BeiDou) - } else if lower.eq("e") { - Ok(Self::Galileo) - } else if lower.eq("j") { - Ok(Self::QZSS) - } else if lower.eq("s") { - Ok(Self::Geo) - } else if lower.eq("i") { - Ok(Self::IRNSS) - } else if lower.eq("m") { - Ok(Self::Mixed) - } else { - Err(ParsingError::Unknown(code.to_string())) + /// Returns true if Self is an augmentation system + pub fn is_sbas(&self) -> bool { + match *self { + Constellation::WAAS + | Constellation::KASS + | Constellation::BDSBAS + | Constellation::EGNOS + | Constellation::GAGAN + | Constellation::SDCM + | Constellation::ASBAS + | Constellation::SPAN + | Constellation::MSAS + | Constellation::NSAS + | Constellation::ASAL + | Constellation::AusNZ + | Constellation::SBAS => true, + _ => false, } } - /* - * Identifies Constellation from stanadrd 3 letter code, case insensitive. - * Used in public Self::from_str, or some place else in that crate. - */ - pub(crate) fn from_3_letter_code(code: &str) -> Result { - if code.len() != 3 { - return Err(ParsingError::Format(code.to_string())); + pub(crate) fn is_mixed(&self) -> bool { + *self == Constellation::Mixed + } + /// Returns associated time scale. Returns None + /// if related time scale is not supported. + pub fn timescale(&self) -> Option { + match self { + Self::GPS | Self::QZSS => Some(TimeScale::GPST), + Self::Galileo => Some(TimeScale::GST), + Self::BeiDou => Some(TimeScale::BDT), + Self::Glonass => Some(TimeScale::UTC), + c => { + if c.is_sbas() { + Some(TimeScale::GPST) + } else { + None + } + }, } + } +} - let lower = code.to_lowercase(); - if lower.eq("gps") { +impl std::str::FromStr for Constellation { + type Err = ParsingError; + fn from_str(string: &str) -> Result { + let s = string.trim().to_lowercase(); + if s.eq("g") || s.contains("gps") { Ok(Self::GPS) - } else if lower.eq("glo") { + } else if s.eq("r") || s.contains("glo") || s.contains("glonass") { Ok(Self::Glonass) - } else if lower.eq("bds") { + } else if s.eq("bdsbas") { + Ok(Self::BDSBAS) + } else if s.eq("c") || s.contains("bds") || s.contains("beidou") { Ok(Self::BeiDou) - } else if lower.eq("gal") { + } else if s.eq("e") || s.contains("gal") || s.contains("galileo") { Ok(Self::Galileo) - } else if lower.eq("qzs") { + } else if s.eq("j") || s.contains("qzss") { Ok(Self::QZSS) - } else if lower.eq("sbs") | lower.eq("geo") { - Ok(Self::Geo) - } else if lower.eq("irn") { + } else if s.eq("i") || s.contains("irnss") || s.contains("navic") { Ok(Self::IRNSS) - } else { - Err(ParsingError::Unknown(code.to_string())) - } - } - /* - * Identifies `gnss` constellation from given standard plain name, - * like "GPS", or "Galileo". This method is not case sensitive. - * Used in public Self::from_str, or some place else in that crate. - */ - pub(crate) fn from_plain_name(code: &str) -> Result { - let lower = code.to_lowercase(); - if lower.contains("gps") { - Ok(Self::GPS) - } else if lower.contains("glonass") { - Ok(Self::Glonass) - } else if lower.contains("galileo") { - Ok(Self::Galileo) - } else if lower.contains("qzss") { - Ok(Self::QZSS) - } else if lower.contains("beidou") { - Ok(Self::BeiDou) - } else if lower.contains("sbas") { - Ok(Self::Geo) - } else if lower.contains("geo") { - Ok(Self::Geo) - } else if lower.contains("irnss") { - Ok(Self::IRNSS) - } else if lower.contains("mixed") { + } else if s.eq("m") || s.contains("mixed") { Ok(Self::Mixed) + } else if s.eq("ausnz") { + Ok(Self::AusNZ) + } else if s.eq("egnos") { + Ok(Self::EGNOS) + } else if s.eq("waas") { + Ok(Self::WAAS) + } else if s.eq("kass") { + Ok(Self::KASS) + } else if s.eq("gagan") { + Ok(Self::GAGAN) + } else if s.eq("asbas") { + Ok(Self::ASBAS) + } else if s.eq("nsas") { + Ok(Self::NSAS) + } else if s.eq("asal") { + Ok(Self::ASAL) + } else if s.eq("msas") { + Ok(Self::MSAS) + } else if s.eq("span") { + Ok(Self::SPAN) + } else if s.eq("gbas") { + Ok(Self::GBAS) + } else if s.eq("sdcm") { + Ok(Self::SDCM) + } else if s.eq("s") || s.contains("geo") || s.contains("sbas") { + Ok(Self::SBAS) } else { - Err(ParsingError::Unrecognized(code.to_string())) - } - } - /// Converts self into time scale - pub fn to_timescale(&self) -> Option { - match self { - Self::GPS | Self::QZSS => Some(TimeScale::GPST), - Self::Galileo => Some(TimeScale::GST), - Self::BeiDou => Some(TimeScale::BDT), - Self::Geo | Self::SBAS(_) => Some(TimeScale::GPST), - // this is wrong but we can't do better - Self::Glonass | Self::IRNSS => Some(TimeScale::UTC), - _ => None, - } - } - /// Converts self to 1 letter code (RINEX standard code) - pub(crate) fn to_1_letter_code(&self) -> &str { - match self { - Self::GPS => "G", - Self::Glonass => "R", - Self::Galileo => "E", - Self::BeiDou => "C", - Self::SBAS(_) | Self::Geo => "S", - Self::QZSS => "J", - Self::IRNSS => "I", - Self::Mixed => "M", - } - } - /* Converts self to 3 letter code (RINEX standard code) */ - pub(crate) fn to_3_letter_code(&self) -> &str { - match self { - Self::GPS => "GPS", - Self::Glonass => "GLO", - Self::Galileo => "GAL", - Self::BeiDou => "BDS", - Self::SBAS(_) | Self::Geo => "GEO", - Self::QZSS => "QZS", - Self::IRNSS => "IRN", - Self::Mixed => "MIX", + Err(ParsingError::Unknown(string.to_string())) } } +} - /// Returns associated time scale. Returns None - /// if related time scale is not supported. - pub fn timescale(&self) -> Option { +impl std::fmt::LowerHex for Constellation { + /* + * {:x}: formats Self as single letter standard code + */ + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { - Self::GPS | Self::QZSS => Some(TimeScale::GPST), - Self::Galileo => Some(TimeScale::GST), - Self::BeiDou => Some(TimeScale::BDT), - Self::Geo | Self::SBAS(_) => Some(TimeScale::GPST), // this is correct ? - _ => None, + Self::GPS => write!(f, "G"), + Self::Glonass => write!(f, "R"), + Self::Galileo => write!(f, "E"), + Self::BeiDou => write!(f, "C"), + Self::QZSS => write!(f, "J"), + Self::IRNSS => write!(f, "I"), + c => { + if c.is_sbas() { + write!(f, "S") + } else if c.is_mixed() { + write!(f, "M") + } else { + Err(std::fmt::Error) + } + }, } } } -impl std::str::FromStr for Constellation { - type Err = ParsingError; - /// Identifies `gnss` constellation from given code. - /// Code should be standard constellation name, - /// or official 1/3 letter RINEX code. - /// This method is case insensitive - fn from_str(code: &str) -> Result { - if code.len() == 3 { - Ok(Self::from_3_letter_code(code)?) - } else if code.len() == 1 { - Ok(Self::from_1_letter_code(code)?) - } else if let Ok(s) = Self::from_plain_name(code) { - Ok(s) - } else if let Ok(sbas) = Augmentation::from_str(code) { - Ok(Self::SBAS(sbas)) - } else { - Err(ParsingError::Unknown(code.to_string())) +impl std::fmt::UpperHex for Constellation { + /* + * {:X} formats Self as 3 letter standard code + */ + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + Self::GPS => write!(f, "GPS"), + Self::Glonass => write!(f, "GLO"), + Self::Galileo => write!(f, "GAL"), + Self::BeiDou => write!(f, "BDS"), + Self::QZSS => write!(f, "QZSS"), + Self::IRNSS => write!(f, "IRNSS"), + Self::WAAS => write!(f, "WAAS"), + Self::EGNOS => write!(f, "EGNOS"), + Self::BDSBAS => write!(f, "BDSBAS"), + Self::AusNZ => write!(f, "AUSNZ"), + Self::MSAS => write!(f, "MSAS"), + Self::NSAS => write!(f, "NSAS"), + Self::GBAS => write!(f, "GBAS"), + Self::SPAN => write!(f, "SPAN"), + Self::GAGAN => write!(f, "GAGAN"), + Self::KASS => write!(f, "KASS"), + Self::ASBAS => write!(f, "ASBAS"), + Self::ASAL => write!(f, "ASAL"), + Self::SDCM => write!(f, "SDCM"), + Self::Mixed => write!(f, "MIXED"), + Self::SBAS => write!(f, "SBAS"), } } } @@ -225,50 +230,48 @@ mod tests { use hifitime::TimeScale; use std::str::FromStr; #[test] - fn from_1_letter_code() { - let c = Constellation::from_1_letter_code("G"); - assert_eq!(c.is_ok(), true); - assert_eq!(c.unwrap(), Constellation::GPS); - - let c = Constellation::from_1_letter_code("R"); - assert_eq!(c.is_ok(), true); - assert_eq!(c.unwrap(), Constellation::Glonass); - - let c = Constellation::from_1_letter_code("M"); - assert_eq!(c.is_ok(), true); - assert_eq!(c.unwrap(), Constellation::Mixed); - - let c = Constellation::from_1_letter_code("J"); - assert_eq!(c.is_ok(), true); - assert_eq!(c.unwrap(), Constellation::QZSS); + fn from_str() { + for (desc, expected) in vec![ + ("G", Ok(Constellation::GPS)), + ("GPS", Ok(Constellation::GPS)), + ("R", Ok(Constellation::Glonass)), + ("GLO", Ok(Constellation::Glonass)), + ("J", Ok(Constellation::QZSS)), + ("M", Ok(Constellation::Mixed)), + ("WAAS", Ok(Constellation::WAAS)), + ("KASS", Ok(Constellation::KASS)), + ("GBAS", Ok(Constellation::GBAS)), + ("NSAS", Ok(Constellation::NSAS)), + ("SPAN", Ok(Constellation::SPAN)), + ("EGNOS", Ok(Constellation::EGNOS)), + ("ASBAS", Ok(Constellation::ASBAS)), + ("MSAS", Ok(Constellation::MSAS)), + ("GAGAN", Ok(Constellation::GAGAN)), + ("BDSBAS", Ok(Constellation::BDSBAS)), + ("ASAL", Ok(Constellation::ASAL)), + ("SDCM", Ok(Constellation::SDCM)), + ] { + assert_eq!( + Constellation::from_str(desc), + expected, + "failed to parse constellation from \"{}\"", + desc + ); + } - let c = Constellation::from_1_letter_code("X"); - assert_eq!(c.is_err(), true); - } - #[test] - fn from_3_letter_code() { - let c = Constellation::from_3_letter_code("GPS"); - assert_eq!(c.is_ok(), true); - assert_eq!(c.unwrap(), Constellation::GPS); - let c = Constellation::from_3_letter_code("GLO"); - assert_eq!(c.is_ok(), true); - assert_eq!(c.unwrap(), Constellation::Glonass); - let c = Constellation::from_3_letter_code("GPX"); - assert_eq!(c.is_err(), true); - let c = Constellation::from_3_letter_code("X"); - assert_eq!(c.is_err(), true); + for desc in ["X", "x", "GPX", "gpx", "unknown", "blah"] { + assert!(Constellation::from_str(desc).is_err()); + } } #[test] - fn augmentation() { - let c = Augmentation::from_str("WAAS"); - assert_eq!(c.is_ok(), true); - assert_eq!(c.unwrap(), Augmentation::WAAS); - let c = Augmentation::from_str("WASS"); - assert_eq!(c.is_err(), true); + fn test_sbas() { + for sbas in ["WAAS", "KASS", "EGNOS", "ASBAS", "MSAS", "GAGAN", "ASAL"] { + assert!(Constellation::from_str(sbas).unwrap().is_sbas()); + } } #[test] fn timescale() { - for (gnss, expected) in vec![ + for (gnss, expected) in [ (Constellation::GPS, TimeScale::GPST), (Constellation::Galileo, TimeScale::GST), (Constellation::BeiDou, TimeScale::BDT), diff --git a/rinex/src/constellation/augmentation.rs b/rinex/src/constellation/sbas.rs similarity index 63% rename from rinex/src/constellation/augmentation.rs rename to rinex/src/constellation/sbas.rs index b8edfa3c6..c9c9ce24a 100644 --- a/rinex/src/constellation/augmentation.rs +++ b/rinex/src/constellation/sbas.rs @@ -1,37 +1,8 @@ -//! `GNSS` geostationary augmentation systems, -//! mainly used for high precision positioning -use strum_macros::EnumString; - -#[cfg(feature = "serde")] -use serde::{Deserialize, Serialize}; - -#[derive(Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, EnumString)] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -/// GNSS Augmentation systems, -/// must be used based on current location -pub enum Augmentation { - /// Augmentation Unknown - #[default] - Unknown, - /// American augmentation system, - WAAS, - /// European augmentation system - EGNOS, - /// Japanese augmentation system - MSAS, - /// Indian augmentation system - GAGAN, - /// Chinese augmentation system - BDSBAS, - /// South Korean augmentation system - KASS, - /// Russian augmentation system - SDCM, - /// South African augmentation system - ASBAS, - /// Autralia / NZ augmentation system - SPAN, -} +//! Geostationary augmentation systems +use crate::prelude::Constellation; + +//#[cfg(feature = "serde")] +//use serde::{Deserialize, Serialize}; #[cfg(feature = "sbas")] use geo::{point, Contains, LineString}; @@ -68,8 +39,8 @@ where } #[cfg(feature = "sbas")] -fn load_database() -> Vec<(Augmentation, geo::Polygon)> { - let mut db: Vec<(Augmentation, geo::Polygon)> = Vec::new(); +fn load_database() -> Vec<(Constellation, geo::Polygon)> { + let mut db: Vec<(Constellation, geo::Polygon)> = Vec::new(); let db_path = env!("CARGO_MANIFEST_DIR").to_owned() + "/db/SBAS/"; let db_path = std::path::PathBuf::from(db_path); for entry in std::fs::read_dir(db_path).unwrap() { @@ -83,7 +54,7 @@ fn load_database() -> Vec<(Augmentation, geo::Polygon)> { line_string(fullpath), // exterior boundaries vec![], ); // dont care about interior - if let Ok(sbas) = Augmentation::from_str(&name.to_uppercase()) { + if let Ok(sbas) = Constellation::from_str(&name.to_uppercase()) { db.push((sbas, poly)) } } @@ -101,18 +72,18 @@ fn load_database() -> Vec<(Augmentation, geo::Polygon)> { /// /// let paris = (48.808378, 2.382682); // lat, lon [ddeg] /// let sbas = sbas_selection_helper(paris.0, paris.1); -/// assert_eq!(sbas, Some(Augmentation::EGNOS)); +/// assert_eq!(sbas, Some(Constellation::EGNOS)); /// /// let antartica = (-77.490631, 91.435181); // lat, lon [ddeg] /// let sbas = sbas_selection_helper(antartica.0, antartica.1); /// assert_eq!(sbas.is_none(), true); ///``` -pub fn sbas_selection_helper(lat: f64, lon: f64) -> Option { +pub fn sbas_selection_helper(lat: f64, lon: f64) -> Option { let db = load_database(); let point: geo::Point = point!(x: lon, y: lat,); for (sbas, area) in db { if area.contains(&point) { - return Some(sbas.clone()); + return Some(sbas); } } None @@ -127,63 +98,63 @@ mod test { fn sbas_helper() { // PARIS --> EGNOS let sbas = sbas_selection_helper(48.808378, 2.382682); - assert_eq!(sbas.is_some(), true); - assert_eq!(sbas.unwrap(), Augmentation::EGNOS); + assert!(sbas.is_some()); + assert_eq!(sbas.unwrap(), Constellation::EGNOS); // ANTARICA --> NONE let sbas = sbas_selection_helper(-77.490631, 91.435181); - assert_eq!(sbas.is_none(), true); + assert!(sbas.is_none()); // LOS ANGELES --> WAAS let sbas = sbas_selection_helper(33.981431, -118.193601); - assert_eq!(sbas.is_some(), true); - assert_eq!(sbas.unwrap(), Augmentation::WAAS); + assert!(sbas.is_some()); + assert_eq!(sbas.unwrap(), Constellation::WAAS); // ARGENTINA --> NONE let sbas = sbas_selection_helper(-23.216639, -63.170983); - assert_eq!(sbas.is_none(), true); + assert!(sbas.is_none()); // NIGER --> ASBAS let sbas = sbas_selection_helper(10.714217, 17.087263); - assert_eq!(sbas.is_some(), true); - assert_eq!(sbas.unwrap(), Augmentation::ASBAS); + assert!(sbas.is_some()); + assert_eq!(sbas.unwrap(), Constellation::ASBAS); // South AFRICA --> None let sbas = sbas_selection_helper(-32.473320, 21.112770); - assert_eq!(sbas.is_none(), true); + assert!(sbas.is_none()); // India --> GAGAN let sbas = sbas_selection_helper(19.314290, 76.798953); - assert_eq!(sbas.is_some(), true); - assert_eq!(sbas.unwrap(), Augmentation::GAGAN); + assert!(sbas.is_some()); + assert_eq!(sbas.unwrap(), Constellation::GAGAN); // South Indian Ocean --> None let sbas = sbas_selection_helper(-29.349172, 72.773447); - assert_eq!(sbas.is_none(), true); + assert!(sbas.is_none()); // Australia --> SPAN let sbas = sbas_selection_helper(-27.579847, 131.334992); - assert_eq!(sbas.is_some(), true); - assert_eq!(sbas.unwrap(), Augmentation::SPAN); + assert!(sbas.is_some()); + assert_eq!(sbas.unwrap(), Constellation::SPAN); // NZ --> SPAN let sbas = sbas_selection_helper(-45.113525, 169.864842); - assert_eq!(sbas.is_some(), true); - assert_eq!(sbas.unwrap(), Augmentation::SPAN); + assert!(sbas.is_some()); + assert_eq!(sbas.unwrap(), Constellation::SPAN); // Central China: BDSBAS let sbas = sbas_selection_helper(34.462967, 98.172480); - assert_eq!(sbas, Some(Augmentation::BDSBAS)); + assert_eq!(sbas, Some(Constellation::BDSBAS)); // South Korea: KASS let sbas = sbas_selection_helper(37.067846, 128.34); - assert_eq!(sbas, Some(Augmentation::KASS)); + assert_eq!(sbas, Some(Constellation::KASS)); // Japan: MSAS let sbas = sbas_selection_helper(36.081095, 138.274859); - assert_eq!(sbas, Some(Augmentation::MSAS)); + assert_eq!(sbas, Some(Constellation::MSAS)); // Russia: SDCM let sbas = sbas_selection_helper(60.004390, 89.090326); - assert_eq!(sbas, Some(Augmentation::SDCM)); + assert_eq!(sbas, Some(Constellation::SDCM)); } } diff --git a/rinex/src/epoch/mod.rs b/rinex/src/epoch/mod.rs index d88588cfa..d045a052d 100644 --- a/rinex/src/epoch/mod.rs +++ b/rinex/src/epoch/mod.rs @@ -36,7 +36,7 @@ pub enum ParsingError { * Infaillible `Epoch::now()` call. */ pub(crate) fn now() -> Epoch { - Epoch::now().unwrap_or(Epoch::from_gregorian_utc_at_midnight(2000, 01, 01)) + Epoch::now().unwrap_or(Epoch::from_gregorian_utc_at_midnight(2000, 1, 1)) } /* @@ -141,13 +141,13 @@ pub(crate) fn parse_in_timescale( let mut mm = 0_u8; let mut ss = 0_u8; let mut ns = 0_u32; - let mut epoch = Epoch::default(); let mut flag = EpochFlag::default(); for (field_index, item) in content.split_ascii_whitespace().enumerate() { match field_index { 0 => { - y = i32::from_str_radix(item, 10) + y = item + .parse::() .map_err(|_| ParsingError::YearField(item.to_string()))?; /* old RINEX problem: YY is sometimes encoded on two digits */ @@ -160,29 +160,37 @@ pub(crate) fn parse_in_timescale( } }, 1 => { - m = u8::from_str_radix(item, 10) + m = item + .parse::() .map_err(|_| ParsingError::MonthField(item.to_string()))?; }, 2 => { - d = u8::from_str_radix(item, 10) + d = item + .parse::() .map_err(|_| ParsingError::DayField(item.to_string()))?; }, 3 => { - hh = u8::from_str_radix(item, 10) + hh = item + .parse::() .map_err(|_| ParsingError::HoursField(item.to_string()))?; }, 4 => { - mm = u8::from_str_radix(item, 10) + mm = item + .parse::() .map_err(|_| ParsingError::MinutesField(item.to_string()))?; }, 5 => { - if let Some(dot) = item.find(".") { + if let Some(dot) = item.find('.') { let is_nav = item.trim().len() < 7; - ss = u8::from_str_radix(item[..dot].trim(), 10) + ss = item[..dot] + .trim() + .parse::() .map_err(|_| ParsingError::SecondsField(item.to_string()))?; - ns = u32::from_str_radix(item[dot + 1..].trim(), 10) + ns = item[dot + 1..] + .trim() + .parse::() .map_err(|_| ParsingError::NanosecondsField(item.to_string()))?; if is_nav { @@ -193,7 +201,9 @@ pub(crate) fn parse_in_timescale( ns *= 100; } } else { - ss = u8::from_str_radix(item.trim(), 10) + ss = item + .trim() + .parse::() .map_err(|_| ParsingError::SecondsField(item.to_string()))?; } }, @@ -214,7 +224,9 @@ pub(crate) fn parse_in_timescale( if y == 0 { return Err(ParsingError::FormatError); } - epoch = Epoch::from_gregorian_utc(y, m, d, hh, mm, ss, ns); + + let epoch = Epoch::from_gregorian_utc(y, m, d, hh, mm, ss, ns); + Ok((epoch, flag)) }, _ => { // in case provided content is totally invalid, @@ -222,14 +234,20 @@ pub(crate) fn parse_in_timescale( if y == 0 { return Err(ParsingError::FormatError); } - epoch = Epoch::from_str(&format!( + let epoch = Epoch::from_str(&format!( "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}.{:09} {}", - y, m, d, hh, mm, ss, ns, ts + y, + m, + d, + hh, + mm, + ss, + ns / 100_000_000, + ts ))?; + Ok((epoch, flag)) }, } - - Ok((epoch, flag)) } pub(crate) fn parse_utc(s: &str) -> Result<(Epoch, EpochFlag), ParsingError> { @@ -243,7 +261,7 @@ mod test { #[test] fn epoch_parse_nav_v2() { let e = parse_utc("20 12 31 23 45 0.0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, flag) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2020); @@ -261,7 +279,7 @@ mod test { ); let e = parse_utc("21 1 1 16 15 0.0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, flag) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2021); @@ -281,7 +299,7 @@ mod test { #[test] fn epoch_parse_nav_v2_nanos() { let e = parse_utc("20 12 31 23 45 0.1"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, _) = e.unwrap(); let (_, _, _, _, _, ss, ns) = e.to_gregorian_utc(); assert_eq!(ss, 0); @@ -294,7 +312,7 @@ mod test { #[test] fn epoch_parse_nav_v3() { let e = parse_utc("2021 01 01 00 00 00 "); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, _) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2021); @@ -311,7 +329,7 @@ mod test { ); let e = parse_utc("2021 01 01 09 45 00 "); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, _) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2021); @@ -327,7 +345,7 @@ mod test { ); let e = parse_utc("2020 06 25 00 00 00"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, _) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2020); @@ -343,7 +361,7 @@ mod test { ); let e = parse_utc("2020 06 25 09 49 04"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, _) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2020); @@ -361,7 +379,7 @@ mod test { #[test] fn epoch_parse_obs_v2() { let e = parse_utc(" 21 12 21 0 0 0.0000000 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, flag) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2021); @@ -379,7 +397,7 @@ mod test { ); let e = parse_utc(" 21 12 21 0 0 30.0000000 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, flag) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2021); @@ -396,38 +414,38 @@ mod test { ); let e = parse_utc(" 21 12 21 0 0 30.0000000 1"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (_e, flag) = e.unwrap(); assert_eq!(flag, EpochFlag::PowerFailure); //assert_eq!(format!("{:o}", e), "21 12 21 0 0 30.0000000 1"); let e = parse_utc(" 21 12 21 0 0 30.0000000 2"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (_e, flag) = e.unwrap(); assert_eq!(flag, EpochFlag::AntennaBeingMoved); let e = parse_utc(" 21 12 21 0 0 30.0000000 3"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (_e, flag) = e.unwrap(); assert_eq!(flag, EpochFlag::NewSiteOccupation); let e = parse_utc(" 21 12 21 0 0 30.0000000 4"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (_e, flag) = e.unwrap(); assert_eq!(flag, EpochFlag::HeaderInformationFollows); let e = parse_utc(" 21 12 21 0 0 30.0000000 5"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (_e, flag) = e.unwrap(); assert_eq!(flag, EpochFlag::ExternalEvent); let e = parse_utc(" 21 12 21 0 0 30.0000000 6"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (_e, flag) = e.unwrap(); assert_eq!(flag, EpochFlag::CycleSlip); let e = parse_utc(" 21 1 1 0 0 0.0000000 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, flag) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2021); @@ -441,7 +459,7 @@ mod test { //assert_eq!(format!("{:o}", e), "21 1 1 0 0 0.0000000 0"); let e = parse_utc(" 21 1 1 0 7 30.0000000 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, flag) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2021); @@ -457,7 +475,7 @@ mod test { #[test] fn epoch_parse_obs_v3() { let e = parse_utc(" 2022 01 09 00 00 0.0000000 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, flag) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2022); @@ -471,7 +489,7 @@ mod test { //assert_eq!(format!("{}", e), "2022 01 09 00 00 0.0000000 0"); let e = parse_utc(" 2022 01 09 00 13 30.0000000 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, flag) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2022); @@ -485,7 +503,7 @@ mod test { //assert_eq!(format!("{}", e), "2022 01 09 00 13 30.0000000 0"); let e = parse_utc(" 2022 03 04 00 52 30.0000000 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, flag) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2022); @@ -499,7 +517,7 @@ mod test { //assert_eq!(format!("{}", e), "2022 03 04 00 52 30.0000000 0"); let e = parse_utc(" 2022 03 04 00 02 30.0000000 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, flag) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2022); @@ -515,7 +533,7 @@ mod test { #[test] fn epoch_parse_obs_v2_nanos() { let e = parse_utc(" 21 1 1 0 7 39.1234567 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, _) = e.unwrap(); let (_, _, _, _, _, ss, ns) = e.to_gregorian_utc(); assert_eq!(ss, 39); @@ -524,7 +542,7 @@ mod test { #[test] fn epoch_parse_obs_v3_nanos() { let e = parse_utc("2022 01 09 00 00 0.1000000 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, _) = e.unwrap(); let (_, _, _, _, _, ss, ns) = e.to_gregorian_utc(); assert_eq!(ss, 0); @@ -532,7 +550,7 @@ mod test { //assert_eq!(format!("{}", e), "2022 01 09 00 00 0.1000000 0"); let e = parse_utc(" 2022 01 09 00 00 0.1234000 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, _) = e.unwrap(); let (_, _, _, _, _, ss, ns) = e.to_gregorian_utc(); assert_eq!(ss, 0); @@ -540,7 +558,7 @@ mod test { //assert_eq!(format!("{}", e), "2022 01 09 00 00 0.1234000 0"); let e = parse_utc(" 2022 01 09 00 00 8.7654321 0"); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, _) = e.unwrap(); let (_, _, _, _, _, ss, ns) = e.to_gregorian_utc(); assert_eq!(ss, 8); @@ -550,7 +568,7 @@ mod test { #[test] fn epoch_parse_meteo_v2() { let e = parse_utc(" 22 1 4 0 0 0 "); - assert_eq!(e.is_ok(), true); + assert!(e.is_ok()); let (e, _) = e.unwrap(); let (y, m, d, hh, mm, ss, ns) = e.to_gregorian_utc(); assert_eq!(y, 2022); diff --git a/rinex/src/ground_position.rs b/rinex/src/ground_position.rs index 6e9d613e2..64dad7410 100644 --- a/rinex/src/ground_position.rs +++ b/rinex/src/ground_position.rs @@ -13,9 +13,9 @@ impl From<(f64, f64, f64)> for GroundPosition { } } -impl Into<(f64, f64, f64)> for GroundPosition { - fn into(self) -> (f64, f64, f64) { - (self.0, self.1, self.2) +impl From for (f64, f64, f64) { + fn from(val: GroundPosition) -> Self { + (val.0, val.1, val.2) } } diff --git a/rinex/src/hatanaka/compressor.rs b/rinex/src/hatanaka/compressor.rs index 95b9bd83d..55c87f0e6 100644 --- a/rinex/src/hatanaka/compressor.rs +++ b/rinex/src/hatanaka/compressor.rs @@ -1,6 +1,6 @@ //! RINEX compression module use super::{numdiff::NumDiff, textdiff::TextDiff, Error}; -use crate::is_comment; +use crate::is_rinex_comment; use crate::{Constellation, Observable, Sv}; use std::collections::HashMap; use std::str::FromStr; @@ -49,17 +49,16 @@ pub struct Compressor { fn format_epoch_descriptor(content: &str) -> String { let mut result = String::new(); - result.push_str("&"); + result.push('&'); for line in content.lines() { result.push_str(line.trim()) // removes all \tab } - result.push_str("\n"); + result.push('\n'); result } -impl Compressor { - /// Creates a new compression structure - pub fn new() -> Self { +impl Default for Compressor { + fn default() -> Self { Self { first_epoch: true, epoch_ptr: 0, @@ -75,7 +74,9 @@ impl Compressor { forced_init: HashMap::new(), } } +} +impl Compressor { /// Identifies amount of vehicles to be provided in next iterations /// by analyzing epoch descriptor fn determine_nb_vehicles(&self, content: &str) -> Result { @@ -83,7 +84,7 @@ impl Compressor { Err(Error::MalformedEpochDescriptor) } else { let nb = &content[30..32]; - if let Ok(u) = u16::from_str_radix(nb.trim(), 10) { + if let Ok(u) = nb.trim().parse::() { //println!("Identified {} vehicles", u); //DEBUG Ok(u.into()) } else { @@ -104,9 +105,9 @@ impl Compressor { if constell_id.is_ascii_digit() { // in old RINEX + mono constell context // it is possible that constellation ID is omitted.. - vehicle.insert_str(0, constellation.to_1_letter_code()); + vehicle.insert_str(0, &format!("{:x}", constellation)); } - let sv = Sv::from_str(&vehicle)?; + let sv = Sv::from_str(vehicle)?; //println!("VEHICULE: {}", sv); //DEBUG Ok(sv) } else { @@ -120,10 +121,10 @@ impl Compressor { //println!(">>> VEHICULE CONCLUDED"); //DEBUG // conclude line with lli/ssi flags let flags = self.flags_descriptor.trim_end(); - if flags.len() > 0 { + if !flags.is_empty() { result.push_str(flags); } - result.push_str("\n"); + result.push('\n'); self.flags_descriptor.clear(); // move to next vehicle self.obs_ptr = 0; @@ -177,7 +178,7 @@ impl Compressor { loop { let line: &str = match lines.next() { Some(l) => { - if l.trim().len() == 0 { + if l.trim().is_empty() { // line completely empty // ==> determine if we were expecting content if self.state == State::Body { @@ -185,14 +186,14 @@ impl Compressor { if self.obs_ptr > 0 { // previously active // identify current Sv - if let Ok(sv) = self.current_vehicle(&constellation) { + if let Ok(sv) = self.current_vehicle(constellation) { // nb of obs for this constellation let sv_nb_obs = observables[&sv.constellation].len(); let nb_missing = std::cmp::min(5, sv_nb_obs - self.obs_ptr); //println!("Early empty line - missing {} field(s)", nb_missing); //DEBUG for i in 0..nb_missing { - result.push_str(" "); // empty whitespace, on each missing observable - // to remain retro compatible with official tools + result.push(' '); // empty whitespace, on each missing observable + // to remain retro compatible with official tools self.flags_descriptor.push_str(" "); // both missing self.schedule_kernel_init(&sv, self.obs_ptr + i); } @@ -217,7 +218,7 @@ impl Compressor { // println!("\nWorking from LINE : \"{}\"", line); //DEBUG // [0] : COMMENTS (special case) - if is_comment!(line) { + if is_rinex_comment(line) { if line.contains("RINEX FILE SPLICE") { // [0*] SPLICE special comments // merged RINEX Files @@ -227,7 +228,7 @@ impl Compressor { result // feed content as is .push_str(line); result // \n dropped by .lines() - .push_str("\n"); + .push('\n'); continue; } @@ -251,7 +252,7 @@ impl Compressor { // if we did have clock offset, // append in a new line // otherwise append a BLANK - self.epoch_descriptor.push_str("\n"); + self.epoch_descriptor.push('\n'); let nb_lines = num_integer::div_ceil(self.nb_vehicles, 12) as u8; if self.epoch_ptr == nb_lines { @@ -267,19 +268,19 @@ impl Compressor { //missing clock offset field here //next line should not always be empty ///////////////////////////////////// - result.push_str("\n"); + result.push('\n'); self.first_epoch = false; } else { result.push_str( - &self.epoch_diff.compress(&self.epoch_descriptor).trim_end(), + self.epoch_diff.compress(&self.epoch_descriptor).trim_end(), ); - result.push_str("\n"); + result.push('\n'); ///////////////////////////////////// //TODO //missing clock offset field here //next line should not always be empty ///////////////////////////////////// - result.push_str("\n"); + result.push('\n'); } self.obs_ptr = 0; @@ -292,7 +293,7 @@ impl Compressor { // nb of obs in this line let nb_obs_line = num_integer::div_ceil(line.len(), 17); // identify current satellite using stored epoch description - if let Ok(sv) = self.current_vehicle(&constellation) { + if let Ok(sv) = self.current_vehicle(constellation) { // nb of obs for this constellation let sv_nb_obs = observables[&sv.constellation].len(); if self.obs_ptr + nb_obs_line > sv_nb_obs { @@ -302,9 +303,9 @@ impl Compressor { //println!("SV {} final fields were omitted", sv); //DEBUG for index in self.obs_ptr..sv_nb_obs + 1 { self.schedule_kernel_init(&sv, index); - result.push_str(" "); // put an empty space on missing observables - // this is how RNX2CRX (official) behaves, - // if we don't do this we break retro compatibility + result.push(' '); // put an empty space on missing observables + // this is how RNX2CRX (official) behaves, + // if we don't do this we break retro compatibility self.flags_descriptor.push_str(" "); } result = self.conclude_vehicle(&result); @@ -314,7 +315,7 @@ impl Compressor { self.nb_vehicles = self.determine_nb_vehicles(line)?; self.epoch_ptr = 1; // we already have a new descriptor self.epoch_descriptor.push_str(line); - self.epoch_descriptor.push_str("\n"); + self.epoch_descriptor.push('\n'); continue; // avoid end of this loop, // as this vehicle is now concluded } @@ -329,9 +330,9 @@ impl Compressor { let (data, rem) = observables.split_at(index); let (obsdata, flags) = data.split_at(14); observables = rem.clone(); - if let Ok(obsdata) = f64::from_str(obsdata.trim()) { + if let Ok(obsdata) = obsdata.trim().parse::() { let obsdata = f64::round(obsdata * 1000.0) as i64; - if flags.trim().len() == 0 { + if flags.trim().is_empty() { // Both Flags ommited //println!("OBS \"{}\" LLI \"X\" SSI \"X\"", obsdata); //DEBUG // data compression @@ -357,7 +358,7 @@ impl Compressor { break; } } - if indexes.len() == 0 { + if indexes.is_empty() { self.forced_init.remove(&sv); } } else { @@ -432,7 +433,7 @@ impl Compressor { break; } } - if indexes.len() == 0 { + if indexes.is_empty() { self.forced_init.remove(&sv); } } else { @@ -460,17 +461,17 @@ impl Compressor { diff.1.init(lli); diff.2.init(ssi); result.push_str(&format!("3&{} ", obsdata)); //append obs - if lli.len() > 0 { + if !lli.is_empty() { self.flags_descriptor.push_str(lli); } else { - self.flags_descriptor.push_str(" "); + self.flags_descriptor.push(' '); } - if ssi.len() > 0 { + if !ssi.is_empty() { self.flags_descriptor.push_str(ssi); } else { // SSI omitted - self.flags_descriptor.push_str(" "); + self.flags_descriptor.push(' '); } sv_diffs.insert(self.obs_ptr, diff); } @@ -486,12 +487,12 @@ impl Compressor { diff.1.init(lli); diff.2.init(ssi); self.flags_descriptor.push_str(lli); - if ssi.len() > 0 { + if !ssi.is_empty() { self.flags_descriptor.push_str(ssi); } else { // SSI omitted diff.2.init(" "); // BLANK - self.flags_descriptor.push_str(" "); + self.flags_descriptor.push(' '); } let mut map: HashMap = HashMap::new(); @@ -503,9 +504,9 @@ impl Compressor { //obsdata::f64::from_str() // when floating point parsing is in failure, // we know this observable is omitted - result.push_str(" "); // put an empty space on missing observables - // this is how RNX2CRX (official) behaves, - // if we don't do this we break retro compatibility + result.push(' '); // put an empty space on missing observables + // this is how RNX2CRX (official) behaves, + // if we don't do this we break retro compatibility self.flags_descriptor.push_str(" "); self.schedule_kernel_init(&sv, self.obs_ptr); } diff --git a/rinex/src/hatanaka/decompressor.rs b/rinex/src/hatanaka/decompressor.rs index a82945e39..aa3c2da4a 100644 --- a/rinex/src/hatanaka/decompressor.rs +++ b/rinex/src/hatanaka/decompressor.rs @@ -1,6 +1,6 @@ //! RINEX decompression module use super::{numdiff::NumDiff, textdiff::TextDiff, Error}; -use crate::{is_comment, prelude::*}; +use crate::{is_rinex_comment, prelude::*}; use std::collections::HashMap; use std::str::FromStr; @@ -55,7 +55,7 @@ fn format_epoch( } let (epoch, systems) = content.split_at(32); // grab epoch - result.push_str(&epoch.replace("&", " ")); // rework + result.push_str(&epoch.replace('&', " ")); // rework //CRINEX has systems squashed in a single line // we just split it to match standard definitions @@ -99,7 +99,7 @@ fn format_epoch( return Err(Error::FaultyRecoveredEpoch); } let (epoch, _) = content.split_at(35); - result.push_str(&epoch.replace("&", " ")); + result.push_str(&epoch.replace('&', " ")); //TODO clock offset if let Some(value) = clock_offset { result.push_str(&format!(" {:3.12}", (value as f64) / 1000.0_f64)) @@ -183,10 +183,10 @@ impl Decompressor { ) -> Option { let epoch = &self.epoch_descriptor; let offset: usize = match crx_major { - 1 => std::cmp::min((32 + 3 * (sv_ptr + 1)).into(), epoch.len()), // overflow protection - _ => std::cmp::min((41 + 3 * (sv_ptr + 1)).into(), epoch.len()), // overflow protection + 1 => std::cmp::min(32 + 3 * (sv_ptr + 1), epoch.len()), // overflow protection + _ => std::cmp::min(41 + 3 * (sv_ptr + 1), epoch.len()), // overflow protection }; - let system = epoch.split_at(offset.into()).0; + let system = epoch.split_at(offset).0; let (_, svnn) = system.split_at(system.len() - 3); // last 3 XXX let svnn = svnn.trim(); match crx_major > 2 { @@ -203,7 +203,7 @@ impl Decompressor { }, constellation => { // OLD + FIXED: constellation might be omitted....... - if let Ok(prn) = u8::from_str_radix(&svnn[1..].trim(), 10) { + if let Ok(prn) = u8::from_str_radix(svnn[1..].trim(), 10) { Some(Sv { prn, constellation: *constellation, @@ -250,7 +250,7 @@ impl Decompressor { //println!("state: {:?}", self.state); // [0] : COMMENTS (special case) - if is_comment!(line) { + if is_rinex_comment(line) { //if line.contains("RINEX FILE SPLICE") { // [0*] SPLICE special comments // merged RINEX Files @@ -258,8 +258,7 @@ impl Decompressor { //} result // feed content as is .push_str(line); - result // \n dropped by .lines() - .push_str("\n"); + result.push('\n'); continue; // move to next line } @@ -269,8 +268,7 @@ impl Decompressor { if line.starts_with("> ") && !self.first_epoch { result // feed content as is .push_str(line); - result // \n dropped by .lines() - .push_str("\n"); + result.push('\n'); continue; // move to next line } @@ -279,12 +277,12 @@ impl Decompressor { if self.first_epoch { match crx_major { 1 => { - if !line.starts_with("&") { + if !line.starts_with('&') { return Err(Error::FaultyCrx1FirstEpoch); } }, 3 => { - if !line.starts_with(">") { + if !line.starts_with('>') { return Err(Error::FaultyCrx3FirstEpoch); } }, @@ -312,7 +310,7 @@ impl Decompressor { * this line is dedicated to clock offset description */ let mut clock_offset: Option = None; - if line.contains("&") { + if line.contains('&') { // clock offset kernel (re)init let (n, rem) = line.split_at(1); if let Ok(order) = u8::from_str_radix(n, 10) { @@ -368,8 +366,7 @@ impl Decompressor { /* * identify satellite we're dealing with */ - if let Some(sv) = self.current_satellite(crx_major, &crx_constell, self.sv_ptr) - { + if let Some(sv) = self.current_satellite(crx_major, crx_constell, self.sv_ptr) { //println!("SV: {:?}", sv); //DEBUG self.sv_ptr += 1; // increment for next time // vehicles are always described in a single line @@ -384,7 +381,11 @@ impl Decompressor { let mut inner: Vec<(NumDiff, TextDiff, TextDiff)> = Vec::with_capacity(16); // this protects from malformed Headers or malformed Epoch descriptions - if let Some(codes) = observables.get(&sv.constellation) { + let codes = match sv.constellation.is_sbas() { + true => observables.get(&Constellation::SBAS), + false => observables.get(&sv.constellation), + }; + if let Some(codes) = codes { for _ in codes { let mut kernels = ( NumDiff::new(NumDiff::MAX_COMPRESSION_ORDER)?, @@ -402,12 +403,16 @@ impl Decompressor { * iterate over entire line */ let mut line = line.trim_end(); - if let Some(codes) = observables.get(&sv.constellation) { + let codes = match sv.constellation.is_sbas() { + true => observables.get(&Constellation::SBAS), + false => observables.get(&sv.constellation), + }; + if let Some(codes) = codes { while obs_ptr < codes.len() { if let Some(pos) = line.find(' ') { let content = &line[..pos]; //println!("OBS \"{}\" - CONTENT \"{}\"", codes[obs_ptr], content); //DEBUG - if content.len() == 0 { + if content.is_empty() { /* * missing observation */ @@ -417,7 +422,7 @@ impl Decompressor { * regular progression */ if let Some(sv_diff) = self.sv_diff.get_mut(&sv) { - if let Some(marker) = content.find("&") { + if let Some(marker) = content.find('&') { // kernel (re)initialization let (order, rem) = content.split_at(marker); let order = u8::from_str_radix(order.trim(), 10)?; @@ -453,7 +458,7 @@ impl Decompressor { */ //println!("OBS \"{}\" - CONTENT \"{}\"", codes[obs_ptr], line); //DEBUG if let Some(sv_diff) = self.sv_diff.get_mut(&sv) { - if let Some(marker) = line.find("&") { + if let Some(marker) = line.find('&') { // kernel (re)initliaization let (order, rem) = line.split_at(marker); let order = u8::from_str_radix(order.trim(), 10)?; @@ -482,7 +487,7 @@ impl Decompressor { /* * Flags field */ - if line.len() > 0 { + if !line.is_empty() { // can parse at least 1 flag self.parse_flags(&sv, line); } @@ -522,7 +527,7 @@ impl Decompressor { // old RINEX if (index + 1).rem_euclid(5) == 0 { // maximal nb of OBS per line - result.push_str("\n") + result.push('\n') } } } diff --git a/rinex/src/hatanaka/textdiff.rs b/rinex/src/hatanaka/textdiff.rs index a22710936..1c0f20b99 100644 --- a/rinex/src/hatanaka/textdiff.rs +++ b/rinex/src/hatanaka/textdiff.rs @@ -43,7 +43,7 @@ impl TextDiff { if s1_len > s0_len { // got new bytes to latch - let new_slice = &data[min..s1_len].replace("&", " "); + let new_slice = &data[min..s1_len].replace('&', " "); self.buffer.push_str(new_slice); } @@ -63,7 +63,7 @@ impl TextDiff { if c != &inner[i] { result.push_str(&c.to_string()); } else { - result.push_str(" "); + result.push(' '); } } } @@ -71,8 +71,8 @@ impl TextDiff { for i in inner.len()..data.len() { if let Some(c) = to_compress.get(i) { if c.is_ascii_whitespace() { - self.buffer.push_str("&"); - result.push_str("&"); + self.buffer.push('&'); + result.push('&'); } else { self.buffer.push_str(&c.to_string()); result.push_str(&c.to_string()); diff --git a/rinex/src/header.rs b/rinex/src/header.rs index d75046869..8e8238d10 100644 --- a/rinex/src/header.rs +++ b/rinex/src/header.rs @@ -3,6 +3,7 @@ use super::*; use crate::{ antex, clocks, + clocks::{ClockAnalysisAgency, ClockDataType}, ground_position::GroundPosition, hardware::{Antenna, Rcvr, SvAntenna}, ionex, leap, meteo, observation, @@ -19,6 +20,8 @@ use std::str::FromStr; use strum_macros::EnumString; use thiserror::Error; +use crate::{fmt_comment, fmt_rinex}; + #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; @@ -348,11 +351,11 @@ impl Header { )); } - let date: Vec<&str> = items[0].split("-").collect(); - let time: Vec<&str> = items[1].split(":").collect(); + let date: Vec<&str> = items[0].split('-').collect(); + let time: Vec<&str> = items[1].split(':').collect(); let day = date[0].trim(); - let day = u8::from_str_radix(day, 10).or(Err(ParsingError::DateTimeParsing( + let day = day.parse::().or(Err(ParsingError::DateTimeParsing( String::from("day"), day.to_string(), )))?; @@ -361,19 +364,19 @@ impl Header { let month = parse_formatted_month(month)?; let y = date[2].trim(); - let mut y = i32::from_str_radix(y, 10).or(Err(ParsingError::DateTimeParsing( + let mut y = y.parse::().or(Err(ParsingError::DateTimeParsing( String::from("year"), y.to_string(), )))?; let h = time[0].trim(); - let h = u8::from_str_radix(h, 10).or(Err(ParsingError::DateTimeParsing( + let h = h.parse::().or(Err(ParsingError::DateTimeParsing( String::from("hour"), h.to_string(), )))?; let m = time[1].trim(); - let m = u8::from_str_radix(m, 10).or(Err(ParsingError::DateTimeParsing( + let m = m.parse::().or(Err(ParsingError::DateTimeParsing( String::from("minute"), m.to_string(), )))?; @@ -405,13 +408,13 @@ impl Header { if let Ok(mut pcv) = antex::Pcv::from_str(pcv_str.trim()) { if pcv.is_relative() { // try to parse "Relative Type" - if rel_type.trim().len() > 0 { + if !rel_type.trim().is_empty() { pcv = pcv.with_relative_type(rel_type.trim()); } } antex = antex.with_pcv(pcv); } - if ref_sn.trim().len() > 0 { + if !ref_sn.trim().is_empty() { antex = antex.with_serial_number(ref_sn.trim()) } } else if marker.contains("TYPE / SERIAL NO") { @@ -481,17 +484,17 @@ impl Header { rinex_type = Type::from_str(type_str.trim())?; if type_str.contains("GLONASS") { // old GLONASS NAV : no constellation field - constellation = Some(Constellation::Glonass) + constellation = Some(Constellation::Glonass); } else if type_str.contains("GPS NAV DATA") { // old GPS NAV: no constellation field - constellation = Some(Constellation::GPS) + constellation = Some(Constellation::GPS); } else if type_str.contains("METEOROLOGICAL DATA") { // these files are not tied to a constellation system, // therefore, do not have this field } else { // regular files if let Ok(constell) = Constellation::from_str(constell_str.trim()) { - constellation = Some(constell) + constellation = Some(constell); } } /* @@ -499,7 +502,7 @@ impl Header { */ let vers = vers.trim(); version = Version::from_str(vers).or(Err(ParsingError::VersionParsing( - format!("RINEX VERSION / TYPE \"{}\"", vers.to_string()), + format!("RINEX VERSION / TYPE \"{}\"", vers), )))?; if !version.is_supported() { @@ -514,7 +517,7 @@ impl Header { false => rb.trim().to_string(), }; let (date_str, _) = rem.split_at(20); - date = date_str.trim().to_string() + date = date_str.trim().to_string(); } else if marker.contains("MARKER NAME") { station = content.split_at(20).0.trim().to_string() } else if marker.contains("MARKER NUMBER") { @@ -522,9 +525,7 @@ impl Header { } else if marker.contains("MARKER TYPE") { let code = content.split_at(20).0.trim(); if let Ok(marker) = MarkerType::from_str(code) { - marker_type = Some(marker) - } else { - return Err(ParsingError::MarkerType(code.to_string())); + marker_type = Some(marker); } } else if marker.contains("OBSERVER / AGENCY") { let (obs, ag) = content.split_at(20); @@ -532,7 +533,7 @@ impl Header { agency = ag.trim().to_string(); } else if marker.contains("REC # / TYPE / VERS") { if let Ok(receiver) = Rcvr::from_str(content) { - rcvr = Some(receiver) + rcvr = Some(receiver); } } else if marker.contains("SYS / PCVS APPLIED") { let (gnss, rem) = content.split_at(2); @@ -551,7 +552,7 @@ impl Header { program.to_string() } }, - constellation: gnss.clone(), + constellation: gnss, url: { let url = url.trim(); if url.eq("") { @@ -580,7 +581,7 @@ impl Header { program.to_string() } }, - constellation: gnss.clone(), + constellation: gnss, url: { let url = url.trim(); if url.eq("") { @@ -601,7 +602,8 @@ impl Header { let (factor, rem) = rem.split_at(6); let factor = factor.trim(); - let scaling = u16::from_str_radix(factor, 10) + let scaling = factor + .parse::() .or(Err(parse_int_error!("SYS / SCALE FACTOR", factor)))?; let (_num, rem) = rem.split_at(3); @@ -800,10 +802,30 @@ impl Header { // {}, + Some(c) => { + // in case of OLD RINEX : fixed constellation + // use that information, as it may be omitted in the TIME OF OBS header + time_of_first_obs.time_scale = c + .timescale() + .ok_or(ParsingError::TimescaleParsing(c.to_string()))?; + }, + } observation = observation.with_time_of_first_obs(time_of_first_obs); } else if marker.contains("TIME OF LAST OBS") { - let time_of_last_obs = Self::parse_time_of_obs(content)?; + let mut time_of_last_obs = Self::parse_time_of_obs(content)?; + match constellation { + Some(Constellation::Mixed) | None => {}, + Some(c) => { + // in case of OLD RINEX : fixed constellation + // use that information, as it may be omitted in the TIME OF OBS header + time_of_last_obs.time_scale = c + .timescale() + .ok_or(ParsingError::TimescaleParsing(c.to_string()))?; + }, + } observation = observation.with_time_of_last_obs(time_of_last_obs); } else if marker.contains("TYPES OF OBS") { // these observations can serve both Observation & Meteo RINEX @@ -814,17 +836,17 @@ impl Header { match constellation { Some(Constellation::Mixed) => { lazy_static! { - static ref KNOWN_CONSTELLS: Vec = vec![ + static ref KNOWN_CONSTELLS: [Constellation; 6] = [ Constellation::GPS, Constellation::Glonass, Constellation::Galileo, Constellation::BeiDou, Constellation::QZSS, - Constellation::Geo, + Constellation::SBAS, ]; } for c in KNOWN_CONSTELLS.iter() { - if let Some(codes) = observation.codes.get_mut(&c) { + if let Some(codes) = observation.codes.get_mut(c) { codes.push(observable.clone()); } else { observation.codes.insert(*c, vec![observable.clone()]); @@ -849,10 +871,10 @@ impl Header { } } } else if marker.contains("SYS / # / OBS TYPES") { - let (possible_content, content) = content.split_at(6); - if possible_content.len() > 0 { - let code = &possible_content[..1]; - if let Ok(c) = Constellation::from_1_letter_code(code) { + let (possible_counter, content) = content.split_at(6); + if !possible_counter.is_empty() { + let code = &possible_counter[..1]; + if let Ok(c) = Constellation::from_str(code) { current_constell = Some(c); } } @@ -863,7 +885,7 @@ impl Header { let obscode = &content[i * 4..std::cmp::min((i + 1) * 4, content.len())].trim(); if let Ok(observable) = Observable::from_str(obscode) { - if obscode.len() > 0 { + if !obscode.is_empty() { if let Some(codes) = observation.codes.get_mut(&constell) { codes.push(observable); } else { @@ -875,20 +897,21 @@ impl Header { } } else if marker.contains("ANALYSIS CENTER") { let (code, agency) = content.split_at(3); - clocks = clocks.with_agency(clocks::Agency { + clocks = clocks.with_agency(ClockAnalysisAgency { code: code.trim().to_string(), name: agency.trim().to_string(), }); } else if marker.contains("# / TYPES OF DATA") { let (n, r) = content.split_at(6); let n = n.trim(); - let n = - u8::from_str_radix(n, 10).or(Err(parse_int_error!("# / TYPES OF DATA", n)))?; + let n = n + .parse::() + .or(Err(parse_int_error!("# / TYPES OF DATA", n)))?; let mut rem = r.clone(); for _ in 0..n { let (code, r) = rem.split_at(6); - if let Ok(c) = clocks::DataType::from_str(code.trim()) { + if let Ok(c) = ClockDataType::from_str(code.trim()) { clocks.codes.push(c); } rem = r.clone() @@ -914,18 +937,22 @@ impl Header { } } } else if marker.contains("GLONASS SLOT / FRQ #") { + //TODO + // This should be used when dealing with Glonass carriers + let slots = content.split_at(4).1.trim(); for i in 0..num_integer::div_ceil(slots.len(), 7) { let svnn = &slots[i * 7..i * 7 + 4]; let chx = &slots[i * 7 + 4..std::cmp::min(i * 7 + 4 + 3, slots.len())]; if let Ok(svnn) = Sv::from_str(svnn.trim()) { - if let Ok(chx) = i8::from_str_radix(chx.trim(), 10) { + if let Ok(chx) = chx.trim().parse::() { glo_channels.insert(svnn, chx); } } } } else if marker.contains("GLONASS COD/PHS/BIS") { //TODO + // This will help RTK solving against GLONASS SV } else if marker.contains("ION ALPHA") { //TODO //0.7451D-08 -0.1490D-07 -0.5960D-07 0.1192D-06 ION ALPHA @@ -975,19 +1002,19 @@ impl Header { } } else if marker.contains("# OF STATIONS") { // IONEX - if let Ok(u) = u32::from_str_radix(content.trim(), 10) { + if let Ok(u) = content.trim().parse::() { ionex = ionex.with_nb_stations(u) } } else if marker.contains("# OF SATELLITES") { // IONEX - if let Ok(u) = u32::from_str_radix(content.trim(), 10) { + if let Ok(u) = content.trim().parse::() { ionex = ionex.with_nb_satellites(u) } /* * Initial TEC map scaling */ } else if marker.contains("EXPONENT") { - if let Ok(e) = i8::from_str_radix(content.trim(), 10) { + if let Ok(e) = content.trim().parse::() { ionex = ionex.with_exponent(e); } @@ -1157,411 +1184,6 @@ impl Header { }) } - /// Combines self and rhs header into a new header. - /// Self's attribute are always preferred. - /// Behavior: - /// - self's attributes are always preferred (in case of unique attributes) - /// - observables are concatenated - /// This fails if : - /// - RINEX types do not match - /// - IONEX: map dimensions do not match and grid definitions do not strictly match - pub fn merge(&self, header: &Self) -> Result { - if self.rinex_type != header.rinex_type { - return Err(merge::Error::FileTypeMismatch); - } - if self.rinex_type == Type::IonosphereMaps { - if let Some(i0) = &self.ionex { - if let Some(i1) = &header.ionex { - if i0.map_dimension != i1.map_dimension { - panic!("can only merge ionex files with identical map dimensions") - } - } - } - } - Ok(Self { - version: { - // retains oldest rev - if self.version < header.version { - self.version.clone() - } else { - header.version.clone() - } - }, - rinex_type: self.rinex_type.clone(), - comments: { - self.comments.clone() //TODO: append rhs too! - }, - leap: { - if let Some(leap) = self.leap { - Some(leap.clone()) - } else if let Some(leap) = header.leap { - Some(leap.clone()) - } else { - None - } - }, - glo_channels: { - let mut channels = self.glo_channels.clone(); - for (svnn, channel) in &header.glo_channels { - channels.insert(*svnn, *channel); - } - channels - }, - run_by: self.run_by.clone(), - program: self.program.clone(), - observer: self.observer.clone(), - date: self.date.clone(), - station: self.station.clone(), - station_id: self.station_id.clone(), - station_url: self.station_url.clone(), - agency: self.agency.clone(), - license: self.license.clone(), - doi: self.doi.clone(), - dcb_compensations: { - /* - * DCBs compensations are marked, only if - * both compensated for in A & B. - * In this case, resulting data, for a given constellation, - * is still 100% compensated for. - */ - if self.dcb_compensations.len() == 0 || header.dcb_compensations.len() == 0 { - Vec::new() // drop everything - } else { - let rhs_constellations: Vec<_> = header - .dcb_compensations - .iter() - .map(|dcb| dcb.constellation.clone()) - .collect(); - let dcbs: Vec = self - .dcb_compensations - .clone() - .iter() - .filter(|dcb| rhs_constellations.contains(&dcb.constellation)) - .map(|dcb| dcb.clone()) - .collect(); - dcbs - } - }, - pcv_compensations: { - /* - * Same logic as .dcb_compensations - */ - if self.pcv_compensations.len() == 0 || header.pcv_compensations.len() == 0 { - Vec::new() // drop everything - } else { - let rhs_constellations: Vec<_> = header - .pcv_compensations - .iter() - .map(|pcv| pcv.constellation.clone()) - .collect(); - let pcvs: Vec = self - .pcv_compensations - .clone() - .iter() - .filter(|pcv| rhs_constellations.contains(&pcv.constellation)) - .map(|pcv| pcv.clone()) - .collect(); - pcvs - } - }, - marker_type: { - if let Some(mtype) = &self.marker_type { - Some(mtype.clone()) - } else if let Some(mtype) = &header.marker_type { - Some(mtype.clone()) - } else { - None - } - }, - gps_utc_delta: { - if let Some(d) = self.gps_utc_delta { - Some(d) - } else if let Some(d) = header.gps_utc_delta { - Some(d) - } else { - None - } - }, - data_scaling: { - if let Some(d) = self.data_scaling { - Some(d) - } else if let Some(d) = header.data_scaling { - Some(d) - } else { - None - } - }, - constellation: { - if let Some(c0) = self.constellation { - if let Some(c1) = header.constellation { - if c0 != c1 { - Some(Constellation::Mixed) - } else { - Some(c0.clone()) - } - } else { - Some(c0.clone()) - } - } else if let Some(constellation) = header.constellation { - Some(constellation.clone()) - } else { - None - } - }, - rcvr: { - if let Some(rcvr) = &self.rcvr { - Some(rcvr.clone()) - } else if let Some(rcvr) = &header.rcvr { - Some(rcvr.clone()) - } else { - None - } - }, - rcvr_antenna: { - if let Some(a) = &self.rcvr_antenna { - Some(a.clone()) - } else if let Some(a) = &header.rcvr_antenna { - Some(a.clone()) - } else { - None - } - }, - sv_antenna: { - if let Some(a) = &self.sv_antenna { - Some(a.clone()) - } else if let Some(a) = &header.sv_antenna { - Some(a.clone()) - } else { - None - } - }, - wavelengths: { - if let Some(wv) = &self.wavelengths { - Some(wv.clone()) - } else if let Some(wv) = &header.wavelengths { - Some(wv.clone()) - } else { - None - } - }, - sampling_interval: { - if let Some(interval) = self.sampling_interval { - Some(interval.clone()) - } else if let Some(interval) = header.sampling_interval { - Some(interval.clone()) - } else { - None - } - }, - ground_position: { - if let Some(pos) = &self.ground_position { - Some(pos.clone()) - } else if let Some(pos) = &header.ground_position { - Some(pos.clone()) - } else { - None - } - }, - obs: { - if let Some(d0) = &self.obs { - if let Some(d1) = &header.obs { - Some(observation::HeaderFields { - time_of_first_obs: std::cmp::min( - d0.time_of_first_obs, - d1.time_of_first_obs, - ), - time_of_last_obs: std::cmp::max( - d0.time_of_last_obs, - d1.time_of_last_obs, - ), - crinex: d0.crinex.clone(), - codes: { - let mut map = d0.codes.clone(); - for (constellation, obscodes) in d1.codes.iter() { - if let Some(codes) = map.get_mut(&constellation) { - for obs in obscodes { - if !codes.contains(&obs) { - codes.push(obs.clone()); - } - } - } else { - map.insert(constellation.clone(), obscodes.clone()); - } - } - map - }, - clock_offset_applied: d0.clock_offset_applied - && d1.clock_offset_applied, - scalings: HashMap::new(), //TODO - }) - } else { - Some(d0.clone()) - } - } else if let Some(data) = &header.obs { - Some(data.clone()) - } else { - None - } - }, - meteo: { - if let Some(m0) = &self.meteo { - if let Some(m1) = &header.meteo { - Some(meteo::HeaderFields { - sensors: { - let mut sensors = m0.sensors.clone(); - for sens in m1.sensors.iter() { - if !sensors.contains(&sens) { - sensors.push(sens.clone()) - } - } - sensors - }, - codes: { - let mut observables = m0.codes.clone(); - for obs in m1.codes.iter() { - if !observables.contains(&obs) { - observables.push(obs.clone()) - } - } - observables - }, - }) - } else { - Some(m0.clone()) - } - } else if let Some(meteo) = &header.meteo { - Some(meteo.clone()) - } else { - None - } - }, - clocks: { - if let Some(d0) = &self.clocks { - if let Some(d1) = &header.clocks { - Some(clocks::HeaderFields { - codes: { - let mut codes = d0.codes.clone(); - for code in d1.codes.iter() { - if !codes.contains(&code) { - codes.push(code.clone()) - } - } - codes - }, - agency: { - if let Some(agency) = &d0.agency { - Some(agency.clone()) - } else if let Some(agency) = &d1.agency { - Some(agency.clone()) - } else { - None - } - }, - station: { - if let Some(station) = &d0.station { - Some(station.clone()) - } else if let Some(station) = &d1.station { - Some(station.clone()) - } else { - None - } - }, - clock_ref: { - if let Some(clk) = &d0.clock_ref { - Some(clk.clone()) - } else if let Some(clk) = &d1.clock_ref { - Some(clk.clone()) - } else { - None - } - }, - timescale: { - if let Some(ts) = &d0.timescale { - Some(ts.clone()) - } else if let Some(ts) = &d1.timescale { - Some(ts.clone()) - } else { - None - } - }, - }) - } else { - Some(d0.clone()) - } - } else if let Some(d1) = &header.clocks { - Some(d1.clone()) - } else { - None - } - }, - antex: { - if let Some(d0) = &self.antex { - Some(d0.clone()) - } else if let Some(data) = &header.antex { - Some(data.clone()) - } else { - None - } - }, - ionex: { - if let Some(d0) = &self.ionex { - if let Some(d1) = &header.ionex { - Some(ionex::HeaderFields { - reference: d0.reference.clone(), - description: { - if let Some(description) = &d0.description { - Some(description.clone()) - } else if let Some(description) = &d1.description { - Some(description.clone()) - } else { - None - } - }, - exponent: std::cmp::min(d0.exponent, d1.exponent), // TODO: this is not correct, - mapping: { - if let Some(map) = &d0.mapping { - Some(map.clone()) - } else if let Some(map) = &d1.mapping { - Some(map.clone()) - } else { - None - } - }, - map_dimension: d0.map_dimension, - base_radius: d0.base_radius, - grid: d0.grid.clone(), - elevation_cutoff: d0.elevation_cutoff, - observables: { - if let Some(obs) = &d0.observables { - Some(obs.clone()) - } else if let Some(obs) = &d1.observables { - Some(obs.clone()) - } else { - None - } - }, - nb_stations: std::cmp::max(d0.nb_stations, d1.nb_stations), - nb_satellites: std::cmp::max(d0.nb_satellites, d1.nb_satellites), - dcbs: { - let mut dcbs = d0.dcbs.clone(); - for (b, dcb) in &d1.dcbs { - dcbs.insert(b.clone(), *dcb); - } - dcbs - }, - }) - } else { - Some(d0.clone()) - } - } else if let Some(d1) = &header.ionex { - Some(d1.clone()) - } else { - None - } - }, - }) - } - /// Returns true if self is a `Compressed RINEX` pub fn is_crinex(&self) -> bool { if let Some(obs) = &self.obs { @@ -1675,315 +1297,452 @@ impl Header { let (ns, rem) = rem.split_at(8); // println!("Y \"{}\" M \"{}\" D \"{}\" HH \"{}\" MM \"{}\" SS \"{}\" NS \"{}\"", y, m, d, hh, mm, ss, ns); // DEBUG - let y = u32::from_str_radix(y.trim(), 10) + let y = y + .trim() + .parse::() .map_err(|_| ParsingError::DateTimeParsing(String::from("year"), y.to_string()))?; - let m = u8::from_str_radix(m.trim(), 10) + let m = m + .trim() + .parse::() .map_err(|_| ParsingError::DateTimeParsing(String::from("months"), m.to_string()))?; - let d = u8::from_str_radix(d.trim(), 10) + let d = d + .trim() + .parse::() .map_err(|_| ParsingError::DateTimeParsing(String::from("days"), d.to_string()))?; - let hh = u8::from_str_radix(hh.trim(), 10) + let hh = hh + .trim() + .parse::() .map_err(|_| ParsingError::DateTimeParsing(String::from("hours"), hh.to_string()))?; - let mm = u8::from_str_radix(mm.trim(), 10) + let mm = mm + .trim() + .parse::() .map_err(|_| ParsingError::DateTimeParsing(String::from("minutes"), mm.to_string()))?; - let ss = u8::from_str_radix(ss.trim(), 10) + let ss = ss + .trim() + .parse::() .map_err(|_| ParsingError::DateTimeParsing(String::from("seconds"), ss.to_string()))?; - let ns = u32::from_str_radix(ns.trim(), 10) + let ns = ns + .trim() + .parse::() .map_err(|_| ParsingError::DateTimeParsing(String::from("nanos"), ns.to_string()))?; /* timescale might be missing in OLD RINEX: we handle that externally */ let mut ts = TimeScale::TAI; let rem = rem.trim(); - if rem.len() > 0 { - // println!("TS \"{}\"", rem); // DBEUG + if !rem.is_empty() { + // println!("TS \"{}\"", rem); // DBEUGts = TimeScale::from_str(rem.trim()).map_err(|_| { ts = TimeScale::from_str(rem.trim()).map_err(|_| { ParsingError::DateTimeParsing(String::from("timescale"), rem.to_string()) })?; } - Ok(Epoch::from_str(&format!( + Epoch::from_str(&format!( "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}.{:08} {}", y, m, d, hh, mm, ss, ns, ts )) - .map_err(|_| ParsingError::DateTimeParsing(String::from("timescale"), rem.to_string()))?) + .map_err(|_| ParsingError::DateTimeParsing(String::from("timescale"), rem.to_string())) } -} -impl std::fmt::Display for Header { - /// `Header` formatter, mainly for RINEX file production purposes - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - // start with CRINEX attributes, if need be - if let Some(obs) = &self.obs { - if let Some(crinex) = &obs.crinex { - write!(f, "{}\n", crinex)?; - } - } - // RINEX VERSION / TYPE - write!( - f, - "{:6}.{:02} ", - self.version.major, self.version.minor - )?; + /* + * Format VERSION/TYPE field + */ + pub(crate) fn fmt_rinex_version_type(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + let major = self.version.major; + let minor = self.version.minor; match self.rinex_type { - Type::NavigationData => { - match self.constellation { - Some(Constellation::Glonass) => { - // Glonass Special case - write!(f, "{:<20}", "G: GLONASS NAV DATA")?; - write!(f, "{:<20}", "")?; - write!(f, "{}", "RINEX VERSION / TYPE\n")? - }, - Some(c) => { - write!(f, "{:<20}", "NAVIGATION DATA")?; - write!(f, "{:<20}", c.to_1_letter_code())?; - write!(f, "{:<20}", "RINEX VERSION / TYPE\n")? - }, - _ => panic!("constellation must be specified when formatting a NavigationData"), - } + Type::NavigationData => match self.constellation { + Some(Constellation::Glonass) => { + writeln!( + f, + "{}", + fmt_rinex( + &format!("{:6}.{:02} G: GLONASS NAV DATA", major, minor), + "RINEX VERSION / TYPE" + ) + ) + }, + Some(c) => { + writeln!( + f, + "{}", + fmt_rinex( + &format!( + "{:6}.{:02} NAVIGATION DATA {:X<20}", + major, minor, c + ), + "RINEX VERSION / TYPE" + ) + ) + }, + _ => panic!("constellation must be specified when formatting a NavigationData"), }, Type::ObservationData => match self.constellation { Some(c) => { - write!(f, "{:<20}", "OBSERVATION DATA")?; - write!(f, "{:<20}", c.to_1_letter_code())?; - write!(f, "{:<20}", "RINEX VERSION / TYPE\n")? + writeln!( + f, + "{}", + fmt_rinex( + &format!( + "{:6}.{:02} OBSERVATION DATA {:x<20}", + major, minor, c + ), + "RINEX VERSION / TYPE" + ) + ) }, _ => panic!("constellation must be specified when formatting ObservationData"), }, Type::MeteoData => { - write!(f, "{:<20}", "METEOROLOGICAL DATA")?; - write!(f, "{:<20}", "")?; - write!(f, "{:<20}", "RINEX VERSION / TYPE\n")?; + writeln!( + f, + "{}", + fmt_rinex( + &format!("{:6}.{:02} METEOROLOGICAL DATA", major, minor), + "RINEX VERSION / TYPE" + ) + ) }, Type::ClockData => { - write!(f, "{:<20}", "CLOCK DATA")?; - write!(f, "{:<20}", "")?; - write!(f, "{:<20}", "RINEX VERSION / TYPE\n")?; + writeln!( + f, + "{}", + fmt_rinex( + &format!("{:6}.{:02} CLOCK DATA", major, minor), + "RINEX VERSION / TYPE" + ) + ) }, Type::AntennaData => todo!(), Type::IonosphereMaps => todo!(), } - // COMMENTS - for comment in self.comments.iter() { - write!(f, "{:<60}", comment)?; - write!(f, "COMMENT\n")? + } + /* + * Format rinex type dependent stuff + */ + pub(crate) fn fmt_rinex_dependent(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self.rinex_type { + Type::ObservationData => self.fmt_observation_rinex(f), + Type::MeteoData => self.fmt_meteo_rinex(f), + Type::NavigationData => Ok(()), + Type::ClockData => self.fmt_clock_rinex(f), + Type::IonosphereMaps => self.fmt_ionex(f), + Type::AntennaData => Ok(()), } - // PGM / RUN BY / DATE - write!(f, "{:<20}", self.program)?; - write!(f, "{:<20}", self.run_by)?; - write!(f, "{:<20}", self.date)?; //TODO - write!(f, "{}", "PGM / RUN BY / DATE\n")?; - // OBSERVER / AGENCY - if self.observer.len() + self.agency.len() > 0 { - write!(f, "{:<20}", self.observer)?; - write!(f, "{:<40}", self.agency)?; - write!(f, "OBSERVER / AGENCY\n")?; + } + /* + * Clock Data fields formatting + */ + fn fmt_clock_rinex(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + if let Some(clocks) = &self.clocks { + // Types of data: observables equivalent + let mut descriptor = String::new(); + descriptor.push_str(&format!("{:6}", clocks.codes.len())); + for (i, observable) in clocks.codes.iter().enumerate() { + if (i % 9) == 0 && i > 0 { + descriptor.push_str(" "); // TAB + } + descriptor.push_str(&format!("{:6}", observable)); + } + writeln!(f, "{}", fmt_rinex(&descriptor, "# / TYPES OF DATA"))?; + + // possible timescale + if let Some(ts) = clocks.timescale { + writeln!( + f, + "{}", + fmt_rinex(&format!(" {:x}", ts), "TIME SYSTEM ID") + )?; + } + + // possible agency + if let Some(agency) = &clocks.agency { + writeln!( + f, + "{}", + fmt_rinex( + &format!("{:<5} {}", agency.code, agency.name), + "ANALYSIS CENTER" + ) + )?; + } } - // MARKER NAME - if self.station.len() > 0 { - write!(f, "{:<20}", self.station)?; - write!(f, "{:<40}", " ")?; - write!(f, "{}", "MARKER NAME\n")?; + Ok(()) + } + /* + * IONEX fields formatting + */ + fn fmt_ionex(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + if let Some(ionex) = &self.ionex { + writeln!( + f, + "{}", + fmt_rinex(&format!("{:6}", ionex.map_dimension), "MAP DIMENSION") + )?; + // h grid + let (start, end, spacing) = ( + ionex.grid.height.start, + ionex.grid.height.end, + ionex.grid.height.spacing, + ); + writeln!( + f, + "{}", + fmt_rinex( + &format!("{} {} {}", start, end, spacing), + "HGT1 / HGT2 / DHGT" + ) + )?; + // lat grid + let (start, end, spacing) = ( + ionex.grid.latitude.start, + ionex.grid.latitude.end, + ionex.grid.latitude.spacing, + ); + writeln!( + f, + "{}", + fmt_rinex( + &format!("{} {} {}", start, end, spacing), + "LAT1 / LAT2 / DLAT" + ) + )?; + // lon grid + let (start, end, spacing) = ( + ionex.grid.longitude.start, + ionex.grid.longitude.end, + ionex.grid.longitude.spacing, + ); + writeln!( + f, + "{}", + fmt_rinex( + &format!("{} {} {}", start, end, spacing), + "LON1 / LON2 / DLON" + ) + )?; + // elevation cutoff + writeln!( + f, + "{}", + fmt_rinex(&format!("{}", ionex.elevation_cutoff), "ELEVATION CUTOFF") + )?; + // mapping func + if let Some(func) = &ionex.mapping { + writeln!( + f, + "{}", + fmt_rinex(&format!("{:?}", func), "MAPPING FUNCTION") + )?; + } else { + writeln!(f, "{}", fmt_rinex("NONE", "MAPPING FUNCTION"))?; + } + // time of first map + writeln!(f, "{}", fmt_rinex("TODO", "EPOCH OF FIRST MAP"))?; + // time of last map + writeln!(f, "{}", fmt_rinex("TODO", "EPOCH OF LAST MAP"))?; } - // MARKER NUMBER - if self.station_id.len() > 0 { - // has been parsed - write!(f, "{:<20}", self.station_id)?; - write!(f, "{:<40}", " ")?; - write!(f, "{}", "MARKER NUMBER\n")?; + Ok(()) + } + /* + * Meteo Data fields formatting + */ + fn fmt_meteo_rinex(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + if let Some(meteo) = &self.meteo { + /* + * List of observables + */ + let mut descriptor = String::new(); + descriptor.push_str(&format!("{:6}", meteo.codes.len())); + for (i, observable) in meteo.codes.iter().enumerate() { + if (i % 9) == 0 && i > 0 { + descriptor.push_str(" "); // TAB + } + descriptor.push_str(&format!(" {}", observable)); + } + writeln!(f, "{}", fmt_rinex(&descriptor, "# / TYPES OF OBSERV"))?; + for sensor in &meteo.sensors { + write!(f, "{}", sensor)?; + } } + Ok(()) + } + /* + * Observation Data fields formatting + */ + fn fmt_observation_rinex(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + if let Some(obs) = &self.obs { + if let Some(e) = obs.time_of_first_obs { + //TODO: hifitime does not have a gregorian decomposition method at the moment + //let offset = match time_of_first_obs.time_scale { + // TimeScale::GPST => Duration::from_seconds(19.0), + // TimeScale::GST => Duration::from_seconds(35.0), + // TimeScale::BDT => Duration::from_seconds(35.0), + // _ => Duration::default(), + //}; + let (y, m, d, hh, mm, ss, nanos) = e.to_gregorian_utc(); + writeln!( + f, + "{}", + fmt_rinex( + &format!( + " {:04} {:02} {:02} {:02} {:02} {:02}.{:07} {:x}", + y, m, d, hh, mm, ss, nanos, e.time_scale + ), + "TIME OF FIRST OBS" + ) + )?; + } + if let Some(e) = obs.time_of_last_obs { + let (y, m, d, hh, mm, ss, nanos) = e.to_gregorian_utc(); + writeln!( + f, + "{}", + fmt_rinex( + &format!( + " {:04} {:02} {:02} {:02} {:02} {:02}.{:07} {:x}", + y, m, d, hh, mm, ss, nanos, e.time_scale + ), + "TIME OF LAST OBS" + ) + )?; + } + /* + * Form the observables list + */ + match self.version.major { + 1 | 2 => { + /* + * List of observables + */ + let mut descriptor = String::new(); + if let Some((_constell, observables)) = obs.codes.iter().next() { + descriptor.push_str(&format!("{:6}", observables.len())); + for (i, observable) in observables.iter().enumerate() { + if (i % 9) == 0 && i > 0 { + descriptor.push_str(" "); // TAB + } + descriptor.push_str(&format!("{:>6}", observable)); + } + writeln!(f, "{}", fmt_rinex(&descriptor, "# / TYPES OF OBSERV"))?; + } + }, + _ => {}, + } + // must take place after list of observables: + // TODO scaling factor + // TODO DCBS compensations + // TODO PCVs compensations + } + Ok(()) + } + /* + * Format all comments + */ + pub(crate) fn fmt_comments(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + for comment in self.comments.iter() { + writeln!(f, "{}", fmt_comment(comment))?; + } + Ok(()) + } +} + +impl std::fmt::Display for Header { + /// `Header` formatter, mainly for RINEX file production purposes + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + // start with CRINEX attributes, if need be + if let Some(obs) = &self.obs { + if let Some(crinex) = &obs.crinex { + writeln!(f, "{}", crinex)?; + } + } + + self.fmt_rinex_version_type(f)?; + self.fmt_comments(f)?; + + // PGM / RUN BY / DATE + writeln!( + f, + "{}", + fmt_rinex( + &format!("{:<20}{:<20}{:<20}", self.program, self.run_by, self.date), + "PGM / RUN BY / DATE" + ) + )?; + + // OBSERVER / AGENCY + writeln!( + f, + "{}", + fmt_rinex( + &format!("{:<20}{}", self.observer, self.agency), + "OBSERVER /AGENCY" + ) + )?; + + writeln!(f, "{}", fmt_rinex(&self.station, "MARKER NAME"))?; + writeln!(f, "{}", fmt_rinex(&self.station_id, "MARKER NUMBER"))?; + // ANT if let Some(antenna) = &self.rcvr_antenna { - write!(f, "{:<20}", antenna.model)?; - write!(f, "{:<40}", antenna.sn)?; - write!(f, "{}", "ANT # / TYPE\n")?; + writeln!( + f, + "{}", + fmt_rinex( + &format!("{:<20}{}", antenna.model, antenna.sn), + "ANT # / TYPE" + ) + )?; if let Some(coords) = &antenna.coords { - write!(f, "{:14.4}", coords.0)?; - write!(f, "{:14.4}", coords.1)?; - write!(f, "{:14.4}", coords.2)?; - write!(f, "{}", "APPROX POSITION XYZ\n")? - } - if let Some(h) = &antenna.height { - write!(f, "{:14.4}", h)?; - if let Some(e) = &antenna.eastern { - write!(f, "{:14.4}", e)?; - } else { - write!(f, "{:14.4}", 0.0)?; - } - if let Some(n) = &antenna.northern { - write!(f, "{:14.4}", n)?; - } else { - write!(f, "{:14.4}", 0.0)?; - } - write!(f, "{:18}", "")?; - write!(f, "{}", "ANTENNA: DELTA H/E/N\n")? + writeln!( + f, + "{}", + fmt_rinex( + &format!("{:14.4}{:14.4}{:14.4}", coords.0, coords.1, coords.2), + "APPROX POSITION XYZ" + ) + )?; } + writeln!( + f, + "{}", + fmt_rinex( + &format!( + "{:14.4}{:14.4}{:14.4}", + antenna.height.unwrap_or(0.0), + antenna.eastern.unwrap_or(0.0), + antenna.northern.unwrap_or(0.0) + ), + "ANTENNA: DELTA H/E/N" + ) + )?; } // RCVR if let Some(rcvr) = &self.rcvr { - write!(f, "{:<20}", rcvr.sn)?; - write!(f, "{:<20}", rcvr.model)?; - write!(f, "{:<20}", rcvr.firmware)?; - write!(f, "REC # / TYPE / VERS\n")? + writeln!( + f, + "{}", + fmt_rinex( + &format!("{:<20}{:<20}{}", rcvr.sn, rcvr.model, rcvr.firmware), + "REC # / TYPE / VERS" + ) + )?; } // INTERVAL if let Some(interval) = &self.sampling_interval { - write!(f, "{:6}", interval.to_seconds())?; - write!(f, "{:<54}", "")?; - write!(f, "INTERVAL\n")? - } - // List of Observables - match self.rinex_type { - Type::ObservationData => { - if let Some(obs) = &self.obs { - if let Some(time_of_first_obs) = obs.time_of_first_obs { - //TODO: hifitime does not have a gregorian decomposition method at the moment - let offset = match time_of_first_obs.time_scale { - TimeScale::GPST => Duration::from_seconds(19.0), - TimeScale::GST => Duration::from_seconds(35.0), - TimeScale::BDT => Duration::from_seconds(35.0), - _ => Duration::default(), - }; - let (y, m, d, hh, mm, ss, nanos) = (time_of_first_obs).to_gregorian_utc(); - let mut descriptor = format!( - " {:04} {:02} {:02} {:02} {:02} {:02}.{:07} {:x}", - y, m, d, hh, mm, ss, nanos, time_of_first_obs.time_scale - ); - descriptor.push_str(&format!( - "{: Duration::from_seconds(19.0), - TimeScale::GST => Duration::from_seconds(35.0), - TimeScale::BDT => Duration::from_seconds(35.0), - _ => Duration::default(), - }; - let (y, m, d, hh, mm, ss, nanos) = - (time_of_last_obs + offset).to_gregorian_utc(); - let mut descriptor = format!( - " {:04} {:02} {:02} {:02} {:02} {:02}.{:08} {:x}", - y, m, d, hh, mm, ss, nanos, time_of_last_obs.time_scale - ); - descriptor.push_str(&format!( - "{: { - // old revisions - for (_, observables) in obs.codes.iter() { - write!(f, "{:6}", observables.len())?; - let mut descriptor = String::new(); - for i in 0..observables.len() { - if (i % 9) == 0 && i > 0 { - //ADD LABEL - descriptor.push_str("# / TYPES OF OBSERV\n"); - descriptor.push_str(&format!("{:<6}", "")); - //TAB - } - // this will not work if observable - // does not fit on 2 characters - descriptor.push_str(&format!(" {}", observables[i])); - } - //ADD BLANK on last line - if observables.len() <= 9 { - // fits on one line - descriptor.push_str(&format!( - "{: { - // modern revisions - for (constell, codes) in obs.codes.iter() { - let mut line = format!("{:<4}", constell.to_1_letter_code()); - line.push_str(&format!("{:2}", codes.len())); - for i in 0..codes.len() { - if (i + 1) % 14 == 0 { - line.push_str(&format!( - "{: { - if let Some(obs) = &self.meteo { - write!(f, "{:6}", obs.codes.len())?; - let mut description = String::new(); - for i in 0..obs.codes.len() { - if (i % 9) == 0 && i > 0 { - description.push_str("# / TYPES OF OBSERV\n"); - write!(f, "{}", description)?; - description.clear(); - description.push_str(&format!("{:<6}", "")); //TAB - } - description.push_str(&format!(" {}", obs.codes[i])); - } - description.push_str(&format!( - "{: {}, + writeln!( + f, + "{}", + fmt_rinex(&format!("{:6}", interval.to_seconds()), "INTERVAL") + )?; } - // Must take place after list of Observables: - //TODO: scale factor, if any - //TODO: DCBS compensation, if any - //TODO: PCVs compensation, if any + // LEAP if let Some(leap) = &self.leap { let mut line = String::new(); @@ -2005,83 +1764,35 @@ impl std::fmt::Display for Header { )); write!(f, "{}", line)? } - // Custom Meteo fields - if let Some(meteo) = &self.meteo { - let sensors = &meteo.sensors; - for sensor in sensors { - write!(f, "{}", sensor)? - } - } - // Custom Clock fields - if let Some(clocks) = &self.clocks { - // Types of data: is the equivalent of Observation codes - write!(f, "{:6}", clocks.codes.len())?; - for code in &clocks.codes { - write!(f, " {}", code)?; - } - write!( - f, - "{:>width$}\n", - "# / TYPES OF DATA\n", - width = 80 - 6 - 6 * clocks.codes.len() - 2 - )?; - // possible timescale - if let Some(ts) = clocks.timescale { - write!( - f, - " {:x} TIME SYSTEM ID\n", - ts - )?; - } - // possible reference agency - if let Some(agency) = &clocks.agency { - write!(f, "{:<5} ", agency.code)?; - write!(f, "{}", agency.name)?; - write!(f, "ANALYSIS CENTER\n")?; - } - // possible reference clock information - } - // Custom IONEX fields - if let Some(ionex) = &self.ionex { - //TODO: - // EPOCH OF FIRST and LAST MAP - // with epoch::format(Ionex) - let _ = write!(f, "{:6} MAP DIMENSION\n", ionex.map_dimension); - let h = &ionex.grid.height; - let _ = write!( - f, - "{} {} {} HGT1 / HGT2 / DHGT\n", - h.start, h.end, h.spacing - ); - let lat = &ionex.grid.latitude; - let _ = write!( - f, - "{} {} {} LAT1 / LON2 / DLAT\n", - lat.start, lat.end, lat.spacing - ); - let lon = &ionex.grid.longitude; - let _ = write!( - f, - "{} {} {} LON1 / LON2 / DLON\n", - lon.start, lon.end, lon.spacing - ); - let _ = write!(f, "{} ELEVATION CUTOFF\n", ionex.elevation_cutoff); - if let Some(func) = &ionex.mapping { - let _ = write!(f, "{:?} MAPPING FUNCTION\n", func); - } else { - let _ = write!(f, "NONE MAPPING FUNCTION\n"); - } - let _ = write!(f, "{} EXPONENT\n", ionex.exponent); - if let Some(desc) = &ionex.description { - for line in 0..desc.len() / 60 { - let max = std::cmp::min((line + 1) * 60, desc.len()); - let _ = write!(f, "{} COMMENT\n", &desc[line * 60..max]); - } - } - } - // END OF HEADER - write!(f, "{:>74}", "END OF HEADER\n") + // RINEX Type dependent header + self.fmt_rinex_dependent(f)?; + + //TODO + // things that could be nice to squeeze in: + // [+] SBAS contained (detailed vehicles) + // [+] RINEX 3 -> 2 observables conversion (see OBS/V2/rovn as an example) + writeln!(f, "{}", fmt_rinex("", "END OF HEADER")) + } +} + +impl Header { + /* + * Macro to be used when marking Self as Merged file + */ + fn merge_comment(timestamp: Epoch) -> String { + let (y, m, d, hh, mm, ss, _) = timestamp.to_gregorian_utc(); + format!( + "rustrnx-{:<11} FILE MERGE {}{}{} {}{}{} {:x}", + env!("CARGO_PKG_VERSION"), + y, + m, + d, + hh, + mm, + ss, + timestamp.time_scale + ) } } @@ -2111,9 +1822,22 @@ impl Merge for Header { let (a_rev, b_rev) = (self.version, rhs.version); self.version = std::cmp::min(a_rev, b_rev); + // sampling interval special case + match self.sampling_interval { + None => { + if rhs.sampling_interval.is_some() { + self.sampling_interval = rhs.sampling_interval; + } + }, + Some(lhs) => { + if let Some(rhs) = rhs.sampling_interval { + self.sampling_interval = Some(std::cmp::min(lhs, rhs)); + } + }, + } + merge::merge_mut_vec(&mut self.comments, &rhs.comments); merge::merge_mut_option(&mut self.marker_type, &rhs.marker_type); - merge::merge_mut_option(&mut self.sampling_interval, &rhs.sampling_interval); merge::merge_mut_option(&mut self.license, &rhs.license); merge::merge_mut_option(&mut self.data_scaling, &rhs.data_scaling); merge::merge_mut_option(&mut self.doi, &rhs.doi); @@ -2124,6 +1848,41 @@ impl Merge for Header { merge::merge_mut_option(&mut self.sv_antenna, &rhs.sv_antenna); merge::merge_mut_option(&mut self.ground_position, &rhs.ground_position); merge::merge_mut_option(&mut self.wavelengths, &rhs.wavelengths); + merge::merge_mut_option(&mut self.gps_utc_delta, &rhs.gps_utc_delta); + + // DCBS compensation is preserved, only if both A&B both have it + if self.dcb_compensations.is_empty() || rhs.dcb_compensations.is_empty() { + self.dcb_compensations.clear(); // drop everything + } else { + let rhs_constellations: Vec<_> = rhs + .dcb_compensations + .iter() + .map(|dcb| dcb.constellation) + .collect(); + self.dcb_compensations + .iter_mut() + .filter(|dcb| rhs_constellations.contains(&dcb.constellation)) + .count(); + } + + // PCV compensation : same logic + // only preserve compensations present in both A & B + if self.pcv_compensations.is_empty() || rhs.pcv_compensations.is_empty() { + self.pcv_compensations.clear(); // drop everything + } else { + let rhs_constellations: Vec<_> = rhs + .pcv_compensations + .iter() + .map(|pcv| pcv.constellation) + .collect(); + self.dcb_compensations + .iter_mut() + .filter(|pcv| rhs_constellations.contains(&pcv.constellation)) + .count(); + } + + //TODO : + //merge::merge_mut(&mut self.glo_channels, &rhs.glo_channels); // RINEX specific operation if let Some(lhs) = &mut self.antex { @@ -2151,6 +1910,7 @@ impl Merge for Header { if let Some(rhs) = &rhs.obs { merge::merge_mut_option(&mut lhs.crinex, &rhs.crinex); merge::merge_mut_unique_map2d(&mut lhs.codes, &rhs.codes); + // TODO: manage that lhs.clock_offset_applied |= rhs.clock_offset_applied; } } @@ -2174,6 +1934,10 @@ impl Merge for Header { if lhs.base_radius != rhs.base_radius { return Err(merge::Error::IonexBaseRadiusMismatch); } + + //TODO: this is not enough, need to take into account and rescale.. + lhs.exponent = std::cmp::min(lhs.exponent, rhs.exponent); + merge::merge_mut_option(&mut lhs.description, &rhs.description); merge::merge_mut_option(&mut lhs.mapping, &rhs.mapping); if lhs.elevation_cutoff == 0.0 { @@ -2188,6 +1952,10 @@ impl Merge for Header { } } } + // add special comment + let now = Epoch::now()?; + let merge_comment = Self::merge_comment(now); + self.comments.push(merge_comment); Ok(()) } } @@ -2260,7 +2028,7 @@ mod test { use super::parse_formatted_month; #[test] fn formatted_month_parser() { - for (desc, expected) in vec![("Jan", 1), ("Feb", 2), ("Mar", 3), ("Nov", 11), ("Dec", 12)] { + for (desc, expected) in [("Jan", 1), ("Feb", 2), ("Mar", 3), ("Nov", 11), ("Dec", 12)] { let month = parse_formatted_month(desc); assert!(month.is_ok(), "failed to parse month from \"{}\"", desc); let month = month.unwrap(); diff --git a/rinex/src/ionex/grid.rs b/rinex/src/ionex/grid.rs index eecd067a3..2947ec2c8 100644 --- a/rinex/src/ionex/grid.rs +++ b/rinex/src/ionex/grid.rs @@ -112,6 +112,6 @@ mod test { ); let grid = GridLinspace::new(1.0, 10.0, 1.0).unwrap(); assert_eq!(grid.length(), 10); - assert_eq!(grid.is_single_point(), false); + assert!(!grid.is_single_point()); } } diff --git a/rinex/src/ionex/mod.rs b/rinex/src/ionex/mod.rs index 600fbd9fc..d9694a3ce 100644 --- a/rinex/src/ionex/mod.rs +++ b/rinex/src/ionex/mod.rs @@ -1,10 +1,11 @@ //! IONEX module use super::Sv; +use hifitime::Epoch; use std::collections::HashMap; use strum_macros::EnumString; pub mod record; -pub use record::{Map, Record}; +pub use record::{Record, TECPlane, TEC}; pub mod grid; pub use grid::{Grid, GridLinspace}; @@ -41,6 +42,10 @@ pub enum BiasSource { #[derive(Debug, Clone, PartialEq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct HeaderFields { + /// Epoch of first map + pub epoch_of_first_map: Epoch, + /// Epoch of last map + pub epoch_of_last_map: Epoch, /// Reference system used for following TEC maps, /// cf. [system::RefSystem]. pub reference: RefSystem, @@ -76,6 +81,8 @@ pub struct HeaderFields { impl Default for HeaderFields { fn default() -> Self { Self { + epoch_of_first_map: Epoch::default(), + epoch_of_last_map: Epoch::default(), reference: RefSystem::default(), exponent: -1, // very important: allows missing EXPONENT fields map_dimension: 2, // 2D map by default @@ -109,7 +116,7 @@ impl HeaderFields { pub fn with_description(&self, desc: &str) -> Self { let mut s = self.clone(); if let Some(ref mut d) = s.description { - d.push_str(" "); + d.push(' '); d.push_str(desc) } else { s.description = Some(desc.to_string()) @@ -129,7 +136,7 @@ impl HeaderFields { } pub fn with_observables(&self, o: &str) -> Self { let mut s = self.clone(); - if o.len() > 0 { + if !o.is_empty() { s.observables = Some(o.to_string()) } s @@ -197,14 +204,14 @@ mod test { fn test_mapping_func() { let content = "COSZ"; let func = MappingFunction::from_str(content); - assert_eq!(func.is_ok(), true); + assert!(func.is_ok()); assert_eq!(func.unwrap(), MappingFunction::CosZ); let content = "QFAC"; let func = MappingFunction::from_str(content); - assert_eq!(func.is_ok(), true); + assert!(func.is_ok()); assert_eq!(func.unwrap(), MappingFunction::QFac); let content = "DONT"; let func = MappingFunction::from_str(content); - assert_eq!(func.is_err(), true); + assert!(func.is_err()); } } diff --git a/rinex/src/ionex/record.rs b/rinex/src/ionex/record.rs index db29edd57..a1abeae75 100644 --- a/rinex/src/ionex/record.rs +++ b/rinex/src/ionex/record.rs @@ -1,71 +1,41 @@ use crate::{merge, merge::Merge, prelude::*, split, split::Split}; -use super::{grid, GridLinspace}; +use super::grid; +use crate::epoch; use hifitime::Duration; -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashMap}; use std::str::FromStr; use thiserror::Error; -pub(crate) fn is_new_tec_map(line: &str) -> bool { +pub(crate) fn is_new_tec_plane(line: &str) -> bool { line.contains("START OF TEC MAP") } -pub(crate) fn is_new_rms_map(line: &str) -> bool { +pub(crate) fn is_new_rms_plane(line: &str) -> bool { line.contains("START OF RMS MAP") } -pub(crate) fn is_new_height_map(line: &str) -> bool { - line.contains("START OF HEIGHT MAP") -} - -/// Returns true if given content describes the start of -/// a Ionosphere map. -pub(crate) fn is_new_map(line: &str) -> bool { - is_new_tec_map(line) || is_new_rms_map(line) || is_new_height_map(line) -} +/* + * Don't know what Height maps are actually + */ +// pub(crate) fn is_new_height_map(line: &str) -> bool { +// line.contains("START OF HEIGHT MAP") +// } -/// A Map is a list of estimates for -/// a given Latitude, Longitude, Altitude #[derive(Debug, Clone, PartialEq, PartialOrd)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub struct MapPoint { - /// Latitude of this estimate - pub latitude: f64, - /// Longitude of this estimate - pub longitude: f64, - /// Altitude of this estimate - pub altitude: f64, - /// Actual estimate (scaling applied) - pub value: f64, +pub struct TEC { + /// TEC value + pub tec: f64, + /// RMS(tec) + pub rms: Option, } -pub type Map = Vec; +pub type TECPlane = HashMap<(i32, i32), TEC>; -/* - * Merges `rhs` into `lhs` in up to 3 dimensions - */ -fn map_merge3d_mut(lhs: &mut Map, rhs: &Map) { - for rhs_p in rhs { - let mut found = false; - for lhs_p in lhs.into_iter() { - found |= (lhs_p.latitude == rhs_p.latitude) - && (lhs_p.longitude == rhs_p.longitude) - && (lhs_p.altitude == rhs_p.altitude); - if found { - break; - } - } - if !found { - lhs.push(rhs_p.clone()); - } - } -} - -/// `IONEX` record is sorted by epoch. -/// For each epoch, a TEC map is always given. -/// Possible RMS map and Height map may exist at a given epoch. -/// Ionosphere maps are always given in Earth fixed reference frames. +/// IONEX contains 2D (fixed altitude) or 3D Ionosphere Maps. +/// See [Rinex::ionex] and related feature for more information. /// ``` /// use rinex::prelude::*; /// use rinex::ionex::*; @@ -87,33 +57,32 @@ fn map_merge3d_mut(lhs: &mut Map, rhs: &Map) { /// assert_eq!(params.elevation_cutoff, 0.0); /// assert_eq!(params.mapping, None); // no mapping function /// } -/// let record = rinex.record.as_ionex() -/// .unwrap(); -/// for (epoch, (tec, rms, height)) in record { -/// // RMS map never provided in this file -/// assert_eq!(rms.is_none(), true); -/// // 2D IONEX: height maps never provided -/// assert_eq!(height.is_none(), true); -/// // We only get TEC maps -/// // when using TEC values, we previously applied all required scalings -/// for point in tec { -/// let lat = point.latitude; // in ddeg -/// let lon = point.longitude; // in ddeg -/// let alt = point.altitude; // in km -/// let value = point.value; // correctly scaled ("exponent") -/// } -/// } /// ``` -pub type Record = BTreeMap, Option)>; +pub type Record = BTreeMap<(Epoch, i32), TECPlane>; #[derive(Debug, Error)] pub enum Error { - #[error("failed to parse map index")] - ParseIndexError, + #[error("failed to parse map index from \"{0}\"")] + MapIndexParsing(String), #[error("faulty epoch description")] EpochDescriptionError, - #[error("faulty longitude range definition")] - LongitudeRangeError(#[from] grid::Error), + #[error("bad grid definition")] + BadGridDefinition(#[from] grid::Error), + #[error("failed to parse {0} coordinates from \"{1}\"")] + CoordinatesParsing(String, String), + #[error("failed to parse epoch")] + EpochParsing(#[from] epoch::ParsingError), +} + +/* + * Merges `rhs` into `lhs` + */ +fn merge_plane_mut(lhs: &mut TECPlane, rhs: &TECPlane) { + for (coord, tec) in rhs { + if lhs.get(coord).is_none() { + lhs.insert(*coord, tec.clone()); + } + } } /* @@ -121,20 +90,29 @@ pub enum Error { * - a TEC map * - an RMS tec map * - an height map - * defined for returned Epoch + * Returns: Epoth(t), nth Map index, latitude, altitude and TEC plane accross longitudes */ -pub(crate) fn parse_map(header: &mut Header, content: &str) -> Result<(usize, Epoch, Map), Error> { +pub(crate) fn parse_plane( + content: &str, + header: &mut Header, + is_rms_plane: bool, +) -> Result<(Epoch, i32, TECPlane), Error> { let lines = content.lines(); let mut epoch = Epoch::default(); - let mut map = Map::with_capacity(128); // result - let mut latitude: f64 = 0.0; // current latitude - let mut altitude: f64 = 0.0; // current altitude - let mut ptr: usize = 0; // pointer in longitude space - let mut linspace = GridLinspace::default(); // (longitude) linspace + let mut plane = TECPlane::with_capacity(128); + + // this can't fail at this point let ionex = header .ionex .as_mut() .expect("faulty ionex context: missing specific header definitions"); + + // current {lat, lon} within current grid def. + let mut latitude = 0_i32; + let mut longitude = 0_i32; + let mut altitude = 0_i32; + let mut dlon = (ionex.grid.longitude.spacing * 1000.0) as i32; + for line in lines { if line.len() > 60 { let (content, marker) = line.split_at(60); @@ -142,90 +120,126 @@ pub(crate) fn parse_map(header: &mut Header, content: &str) -> Result<(usize, Ep continue; // skip that one } else if marker.contains("END OF") && marker.contains("MAP") { let index = content.split_at(6).0; - if let Ok(u) = u32::from_str_radix(index.trim(), 10) { - return Ok((u as usize, epoch, map)); - } else { - return Err(Error::ParseIndexError); - } + let index = index.trim(); + let _map_index = index + .parse::() + .or(Err(Error::MapIndexParsing(index.to_string())))?; + + return Ok((epoch, altitude, plane)); } else if marker.contains("LAT/LON1/LON2/DLON/H") { - // space coordinates definition for next block + // grid definition for next block let (_, rem) = content.split_at(2); + let (lat, rem) = rem.split_at(6); + let lat = lat.trim(); + let lat = f64::from_str(lat).or(Err(Error::CoordinatesParsing( + String::from("latitude"), + lat.to_string(), + )))?; + let (lon1, rem) = rem.split_at(6); - let (lon2, rem) = rem.split_at(6); - let (dlon, rem) = rem.split_at(6); + let lon1 = lon1.trim(); + let lon1 = f64::from_str(lon1).or(Err(Error::CoordinatesParsing( + String::from("longitude"), + lon1.to_string(), + )))?; + + let (_lon2, rem) = rem.split_at(6); + //let lon2 = lon2.trim(); + //let lon2 = f64::from_str(lon2).or(Err(Error::CoordinatesParsing( + // String::from("longitude"), + // lon2.to_string(), + //)))?; + + let (dlon_str, rem) = rem.split_at(6); + let dlon_str = dlon_str.trim(); + let dlon_f64 = f64::from_str(dlon_str).or(Err(Error::CoordinatesParsing( + String::from("longitude"), + dlon_str.to_string(), + )))?; + let (h, _) = rem.split_at(6); - latitude = - f64::from_str(lat.trim()).expect("failed to parse grid latitude start point"); - let lon1 = - f64::from_str(lon1.trim()).expect("failed to parse longitude start point"); - let lon2 = f64::from_str(lon2.trim()).expect("failed to parse longitude end point"); - let dlon = - f64::from_str(dlon.trim()).expect("failed to parse longitude grid spacing"); - altitude = f64::from_str(h.trim()).expect("failed to parse next grid altitude"); - linspace = GridLinspace::new(lon1, lon2, dlon)?; - ptr = 0; + let h = h.trim(); + let alt = f64::from_str(h).or(Err(Error::CoordinatesParsing( + String::from("altitude"), + h.to_string(), + )))?; + + altitude = (alt.round() * 100.0_f64) as i32; + latitude = (lat.round() * 1000.0_f64) as i32; + longitude = (lon1.round() * 1000.0_f64) as i32; + dlon = (dlon_f64.round() * 1000.0_f64) as i32; + + // debug + // println!("NEW GRID : h: {} lat : {} lon : {}, dlon: {}", altitude, latitude, longitude, dlon); } else if marker.contains("EPOCH OF CURRENT MAP") { - // time definition - let items: Vec<&str> = content.split_ascii_whitespace().collect(); - if items.len() != 6 { - return Err(Error::EpochDescriptionError); - } - if let Ok(y) = i32::from_str_radix(items[0].trim(), 10) { - if let Ok(m) = u8::from_str_radix(items[1].trim(), 10) { - if let Ok(d) = u8::from_str_radix(items[2].trim(), 10) { - if let Ok(hh) = u8::from_str_radix(items[3].trim(), 10) { - if let Ok(mm) = u8::from_str_radix(items[4].trim(), 10) { - if let Ok(ss) = u8::from_str_radix(items[5].trim(), 10) { - epoch = Epoch::from_gregorian_utc(y, m, d, hh, mm, ss, 0); - } - } - } - } - } - } + epoch = epoch::parse_utc(content)?.0; } else if marker.contains("EXPONENT") { - // scaling redefinition - if let Ok(e) = i8::from_str_radix(content.trim(), 10) { - *ionex = ionex.with_exponent(e); // scaling update + // update current scaling + if let Ok(e) = content.trim().parse::() { + ionex.exponent = e; } } else { // parsing TEC values - for item in line.split_ascii_whitespace().into_iter() { - if let Ok(v) = i32::from_str_radix(item.trim(), 10) { - // parse & apply correct scaling + for item in line.split_ascii_whitespace() { + if let Ok(v) = item.trim().parse::() { let mut value = v as f64; + // current scaling value *= 10.0_f64.powf(ionex.exponent as f64); - map.push(MapPoint { - latitude, - longitude: linspace.start + linspace.spacing * ptr as f64, - altitude, - value, - }); - ptr += 1; + + let tec = match is_rms_plane { + true => { + TEC { + tec: 0.0_f64, // DONT CARE + rms: Some(value), + } + }, + false => TEC { + tec: value, + rms: None, + }, + }; + + plane.insert((latitude, longitude), tec); } + + longitude += dlon; + //debug + //println!("longitude: {}", longitude); } } } else { // less than 60 characters // parsing TEC values - for item in line.split_ascii_whitespace().into_iter() { - if let Ok(v) = i32::from_str_radix(item.trim(), 10) { - // parse & apply correct scaling + for item in line.split_ascii_whitespace() { + if let Ok(v) = item.trim().parse::() { let mut value = v as f64; + // current scaling value *= 10.0_f64.powf(ionex.exponent as f64); - map.push(MapPoint { - latitude, - longitude: linspace.start + linspace.spacing * ptr as f64, - altitude, - value, - }); - ptr += 1; + + let tec = match is_rms_plane { + true => { + TEC { + tec: 0.0_f64, // DONT CARE + rms: Some(value), + } + }, + false => TEC { + tec: value, + rms: None, + }, + }; + + plane.insert((latitude, longitude), tec); } + + longitude += dlon; + //debug + //println!("longitude: {}", longitude); } } } - Ok((0, epoch, map)) + Ok((epoch, altitude, plane)) } #[cfg(test)] @@ -233,150 +247,25 @@ mod test { use super::*; #[test] fn test_new_tec_map() { - assert_eq!( - is_new_tec_map( - "1 START OF TEC MAP" - ), - true - ); - assert_eq!( - is_new_tec_map( - "1 START OF RMS MAP" - ), - false - ); - assert_eq!( - is_new_rms_map( - "1 START OF RMS MAP" - ), - true - ); - assert_eq!( - is_new_height_map( - "1 START OF HEIGHT MAP" - ), - true - ); - } - #[test] - fn test_merge_map2d() { - let mut lhs = vec![ - MapPoint { - latitude: 0.0, - longitude: 0.0, - altitude: 0.0, - value: 1.0, - }, - MapPoint { - latitude: 0.0, - longitude: 10.0, - altitude: 0.0, - value: 2.0, - }, - MapPoint { - latitude: 0.0, - longitude: 20.0, - altitude: 0.0, - value: 3.0, - }, - MapPoint { - latitude: 10.0, - longitude: 0.0, - altitude: 0.0, - value: 4.0, - }, - MapPoint { - latitude: 10.0, - longitude: 10.0, - altitude: 0.0, - value: 5.0, - }, - MapPoint { - latitude: 10.0, - longitude: 20.0, - altitude: 0.0, - value: 6.0, - }, - ]; - let rhs = vec![ - MapPoint { - latitude: 0.0, - longitude: 0.0, - altitude: 0.0, - value: 0.0, - }, - MapPoint { - latitude: 5.0, - longitude: 0.0, - altitude: 0.0, - value: 1.0, - }, - MapPoint { - latitude: 10.0, - longitude: 0.0, - altitude: 0.0, - value: 0.0, - }, - MapPoint { - latitude: 10.0, - longitude: 25.0, - altitude: 0.0, - value: 6.0, - }, - ]; - let expected = vec![ - MapPoint { - latitude: 0.0, - longitude: 0.0, - altitude: 0.0, - value: 1.0, - }, - MapPoint { - latitude: 0.0, - longitude: 10.0, - altitude: 0.0, - value: 2.0, - }, - MapPoint { - latitude: 0.0, - longitude: 20.0, - altitude: 0.0, - value: 3.0, - }, - MapPoint { - latitude: 10.0, - longitude: 0.0, - altitude: 0.0, - value: 4.0, - }, - MapPoint { - latitude: 10.0, - longitude: 10.0, - altitude: 0.0, - value: 5.0, - }, - MapPoint { - latitude: 10.0, - longitude: 20.0, - altitude: 0.0, - value: 6.0, - }, - MapPoint { - latitude: 5.0, - longitude: 0.0, - altitude: 0.0, - value: 1.0, - }, - MapPoint { - latitude: 10.0, - longitude: 25.0, - altitude: 0.0, - value: 6.0, - }, - ]; - map_merge3d_mut(&mut lhs, &rhs); - assert_eq!(&lhs, &expected); + assert!(is_new_tec_plane( + "1 START OF TEC MAP" + )); + assert!(!is_new_tec_plane( + "1 START OF RMS MAP" + )); + assert!(is_new_rms_plane( + "1 START OF RMS MAP" + )); + // assert_eq!( + // is_new_height_map( + // "1 START OF HEIGHT MAP" + // ), + // true + // ); } + //#[test] + //fn test_merge_map2d() { + //} } impl Merge for Record { @@ -388,31 +277,21 @@ impl Merge for Record { } /// Merges `rhs` into `Self` fn merge_mut(&mut self, rhs: &Self) -> Result<(), merge::Error> { - for (epoch, maps) in rhs { - let (tec, rms, h) = maps; - if let Some(lhs_maps) = self.get_mut(epoch) { - let (lhs_tec, lhs_rms, lhs_h) = lhs_maps; - - map_merge3d_mut(&mut lhs_tec.to_vec(), tec); - - if let Some(map) = rms { - if let Some(lhs_map) = lhs_rms { - map_merge3d_mut(&mut lhs_map.to_vec(), map); - } else { - *lhs_rms = Some(map.to_vec()); // RMS map now provided - } - } - - if let Some(map) = h { - if let Some(lhs_map) = lhs_h { - map_merge3d_mut(&mut lhs_map.to_vec(), map); + for (eh, plane) in rhs { + if let Some(lhs_plane) = self.get_mut(eh) { + for (latlon, plane) in plane { + if let Some(tec) = lhs_plane.get_mut(latlon) { + if let Some(rms) = plane.rms { + if tec.rms.is_none() { + tec.rms = Some(rms); + } + } } else { - *lhs_h = Some(map.to_vec()); // H map now provided + lhs_plane.insert(*latlon, plane.clone()); } } } else { - // new epoch - self.insert(*epoch, (tec.to_vec(), rms.clone(), h.clone())); + self.insert(*eh, plane.clone()); } } Ok(()) @@ -421,27 +300,27 @@ impl Merge for Record { impl Split for Record { fn split(&self, epoch: Epoch) -> Result<(Self, Self), split::Error> { - let r0 = self + let before = self .iter() - .flat_map(|(k, v)| { - if *k < epoch { - Some((k.clone(), v.clone())) + .flat_map(|((e, h), plane)| { + if *e < epoch { + Some(((*e, *h), plane.clone())) } else { None } }) .collect(); - let r1 = self + let after = self .iter() - .flat_map(|(k, v)| { - if *k >= epoch { - Some((k.clone(), v.clone())) + .flat_map(|((e, h), plane)| { + if *e >= epoch { + Some(((*e, *h), plane.clone())) } else { None } }) .collect(); - Ok((r0, r1)) + Ok((before, after)) } fn split_dt(&self, _duration: Duration) -> Result, split::Error> { Ok(Vec::new()) @@ -461,27 +340,27 @@ impl Mask for Record { fn mask_mut(&mut self, mask: MaskFilter) { match mask.operand { MaskOperand::Equals => match mask.item { - TargetItem::EpochItem(epoch) => self.retain(|e, _| *e == epoch), + TargetItem::EpochItem(epoch) => self.retain(|(e, _), _| *e == epoch), _ => {}, // TargetItem:: does not apply }, MaskOperand::NotEquals => match mask.item { - TargetItem::EpochItem(epoch) => self.retain(|e, _| *e != epoch), + TargetItem::EpochItem(epoch) => self.retain(|(e, _), _| *e != epoch), _ => {}, // TargetItem:: does not apply }, MaskOperand::GreaterEquals => match mask.item { - TargetItem::EpochItem(epoch) => self.retain(|e, _| *e >= epoch), + TargetItem::EpochItem(epoch) => self.retain(|(e, _), _| *e >= epoch), _ => {}, // TargetItem:: does not apply }, MaskOperand::GreaterThan => match mask.item { - TargetItem::EpochItem(epoch) => self.retain(|e, _| *e > epoch), + TargetItem::EpochItem(epoch) => self.retain(|(e, _), _| *e > epoch), _ => {}, // TargetItem:: does not apply }, MaskOperand::LowerEquals => match mask.item { - TargetItem::EpochItem(epoch) => self.retain(|e, _| *e <= epoch), + TargetItem::EpochItem(epoch) => self.retain(|(e, _), _| *e <= epoch), _ => {}, // TargetItem:: does not apply }, MaskOperand::LowerThan => match mask.item { - TargetItem::EpochItem(epoch) => self.retain(|e, _| *e < epoch), + TargetItem::EpochItem(epoch) => self.retain(|(e, _), _| *e < epoch), _ => {}, // TargetItem:: does not apply }, } diff --git a/rinex/src/leap.rs b/rinex/src/leap.rs index ae1b6be1f..2a90e8427 100644 --- a/rinex/src/leap.rs +++ b/rinex/src/leap.rs @@ -59,7 +59,7 @@ impl std::str::FromStr for Leap { match items.len() > 2 { false => { // [1] simple format: basic - ls.leap = u32::from_str_radix(items[0].trim(), 10)? + ls.leap = items[0].trim().parse::()?; }, true => { // [2] complex format: advanced infos @@ -68,10 +68,10 @@ impl std::str::FromStr for Leap { let (week, rem) = rem.split_at(5); let (day, rem) = rem.split_at(5); let system = rem.trim(); - ls.leap = u32::from_str_radix(leap.trim(), 10)?; - ls.delta_tls = Some(u32::from_str_radix(tls.trim(), 10)?); - ls.week = Some(u32::from_str_radix(week.trim(), 10)?); - ls.day = Some(u32::from_str_radix(day.trim(), 10)?); + ls.leap = leap.trim().parse::()?; + ls.delta_tls = Some(tls.trim().parse::()?); + ls.week = Some(week.trim().parse::()?); + ls.day = Some(day.trim().parse::()?); if system.eq("") { ls.timescale = None } else { @@ -91,7 +91,7 @@ mod test { fn basic_format() { let content = "18"; let leap = Leap::from_str(content); - assert_eq!(leap.is_ok(), true); + assert!(leap.is_ok()); let leap = leap.unwrap(); assert_eq!(leap.leap, 18); } @@ -99,7 +99,7 @@ mod test { fn standard_format() { let content = "18 18 2185 7"; let leap = Leap::from_str(content); - assert_eq!(leap.is_ok(), true); + assert!(leap.is_ok()); let leap = leap.unwrap(); assert_eq!(leap.leap, 18); assert_eq!(leap.week, Some(2185)); @@ -109,7 +109,7 @@ mod test { fn parse_with_timescale() { let content = "18 18 2185 7GPS"; let leap = Leap::from_str(content); - assert_eq!(leap.is_ok(), true); + assert!(leap.is_ok()); let leap = leap.unwrap(); assert_eq!(leap.leap, 18); assert_eq!(leap.week, Some(2185)); diff --git a/rinex/src/lib.rs b/rinex/src/lib.rs index de93b605b..519f20b0e 100644 --- a/rinex/src/lib.rs +++ b/rinex/src/lib.rs @@ -1,6 +1,7 @@ #![doc(html_logo_url = "https://raw.githubusercontent.com/georust/meta/master/logo/logo.png")] #![doc = include_str!("../README.md")] #![cfg_attr(docrs, feature(doc_cfg))] +#![allow(clippy::type_complexity)] pub mod antex; pub mod carrier; @@ -52,13 +53,14 @@ use std::collections::{BTreeMap, HashMap}; use thiserror::Error; use hifitime::Duration; +use ionex::TECPlane; use observable::Observable; use observation::Crinex; use version::Version; /// Package to include all basic structures pub mod prelude { - pub use crate::constellation::{Augmentation, Constellation}; + pub use crate::constellation::Constellation; pub use crate::epoch::EpochFlag; pub use crate::ground_position::GroundPosition; pub use crate::header::Header; @@ -116,6 +118,46 @@ macro_rules! hourly_session { #[cfg(docrs)] pub use bibliography::Bibliography; +/* + * returns true if given line is a comment + */ +pub(crate) fn is_rinex_comment(content: &str) -> bool { + content.len() > 60 && content.trim_end().ends_with("COMMENT") +} + +/* + * macro to format one header line or a comment + */ +pub(crate) fn fmt_rinex(content: &str, marker: &str) -> String { + if content.len() < 60 { + format!("{: String { + fmt_rinex(content, "COMMENT") +} + #[derive(Clone, Default, Debug, PartialEq)] /// `Rinex` describes a `RINEX` file, it comprises a [Header] section, /// and a [record::Record] file body. @@ -335,12 +377,12 @@ impl Rinex { /// IONEX specific filename convention fn ionex_filename(&self) -> String { let mut ret: String = "ccc".to_string(); // 3 figue Analysis center - ret.push_str("e"); // extension or region code "G" for global ionosphere maps + ret.push('e'); // extension or region code "G" for global ionosphere maps ret.push_str("ddd"); // day of the year of first record - ret.push_str("h"); // file sequence number (1,2,...) or hour (A, B.., Z) within day + ret.push('h'); // file sequence number (1,2,...) or hour (A, B.., Z) within day ret.push_str("yy"); // 2 digit year - ret.push_str("I"); // ionex - //ret.to_uppercase(); //TODO + ret.push('I'); // ionex + //ret.to_uppercase(); //TODO ret } @@ -418,7 +460,7 @@ impl Rinex { //NB - _FFU is omitted for files containing navigation data let uf = String::from("Z"); let c: String = match header.constellation { - Some(c) => c.to_1_letter_code().to_uppercase(), + Some(c) => format!("{:x}", c).to_uppercase(), _ => String::from("X"), }; let t: String = match rtype { @@ -522,56 +564,6 @@ impl Rinex { } } - /// Converts 2D Ionex to 3D ionex by - /// providing some height maps. - pub fn with_height_maps(&self, height: BTreeMap) -> Self { - let mut s = self.clone(); - s.to_ionex_3d(height); - s - } - - /// Add RMS maps to self, for epochs - /// where such map was not previously provided - pub fn with_rms_maps(&self, rms: BTreeMap) -> Self { - let mut s = self.clone(); - if let Some(r) = s.record.as_mut_ionex() { - for (e, (_, rms_map, _)) in r.iter_mut() { - if let Some(m) = rms.get(e) { - *rms_map = Some(m.to_vec()); - } - } - } - s - } - - /// Provide Height maps for epochs where such map was not previously provided - pub fn to_ionex_3d(&mut self, height: BTreeMap) { - if let Some(ionex) = self.header.ionex.as_mut() { - ionex.map_dimension = 3; - } - if let Some(r) = self.record.as_mut_ionex() { - for (e, (_, _, map_h)) in r.iter_mut() { - if let Some(m) = height.get(e) { - *map_h = Some(m.to_vec()); - } - } - } - } - - /// Returns ionex map borders, as North Eastern - /// and South Western latitude longitude coordinates, - /// expressed in ddeg° - pub fn ionex_map_borders(&self) -> Option<((f64, f64), (f64, f64))> { - if let Some(params) = &self.header.ionex { - Some(( - (params.grid.latitude.start, params.grid.longitude.start), - (params.grid.latitude.end, params.grid.longitude.end), - )) - } else { - None - } - } - /// Returns true if this is a METEO RINEX pub fn is_meteo_rinex(&self) -> bool { self.header.rinex_type == types::Type::MeteoData @@ -602,7 +594,6 @@ impl Rinex { .count() > 0 } - /// Returns true if Antenna Phase Center variations are compensated /// for in this file. Useful for high precision application. pub fn pcv_compensation(&self, constellation: Constellation) -> bool { @@ -617,60 +608,30 @@ impl Rinex { /// meaning, this file is the combination of two RINEX files merged together. /// This is determined by the presence of a custom yet somewhat standardized `FILE MERGE` comments pub fn is_merged(&self) -> bool { - for (_, content) in self.comments.iter() { - for c in content { - if c.contains("FILE MERGE") { - return true; - } + let special_comment = String::from("FILE MERGE"); + for comment in self.header.comments.iter() { + if comment.contains(&special_comment) { + return true; } } false } - //TODO: move to ObsverationIter - // /// Returns [`Epoch`]s where a loss of lock event happened. - // /// This is only relevant on OBS RINEX. - // pub fn epoch_lock_loss(&self) -> Vec { - // self.lli_and_mask(observation::LliFlags::LOCK_LOSS).epoch() - // } - /// Removes all observations where receiver phase lock was lost. /// This is only relevant on OBS RINEX. pub fn lock_loss_filter_mut(&mut self) { self.lli_and_mask_mut(observation::LliFlags::LOCK_LOSS) } - pub fn retain_best_elevation_angles_mut(&mut self) { - unimplemented!("retain_best_elev: use preprocessing toolkit instead"); - //let best_vehicles = self.space_vehicles_best_elevation_angle(); - //if let Some(record) = self.record.as_mut_nav() { - // record.retain(|e, classes| { - // let best = best_vehicles.get(e).unwrap(); - // classes.retain(|class, frames| { - // if *class == navigation::FrameClass::Ephemeris { - // frames.retain(|fr| { - // let (_, sv, _) = fr.as_eph().unwrap(); - // best.contains(sv) - // }); - // frames.len() > 0 - // } else { - // false - // } - // }); - // classes.len() > 0 - // }); - //} - } - /// List [clocks::record::System] (reference systems) contained in this CLK RINEX. /// Reference systems can either be an Sv or a ground station. pub fn clock_ref_systems(&self) -> Vec { let mut map: Vec = Vec::new(); if let Some(r) = self.record.as_clock() { - for (_, dtypes) in r { - for (_dtype, systems) in dtypes { - for (system, _) in systems { - if !map.contains(&system) { + for dtypes in r.values() { + for systems in dtypes.values() { + for system in systems.keys() { + if !map.contains(system) { map.push(system.clone()); } } @@ -686,9 +647,9 @@ impl Rinex { pub fn clock_ref_stations(&self) -> Vec { let mut ret: Vec = Vec::with_capacity(32); if let Some(r) = self.record.as_clock() { - for (_, dtypes) in r { - for (_, systems) in dtypes { - for (system, _) in systems { + for dtypes in r.values() { + for systems in dtypes.values() { + for system in systems.keys() { if let clocks::System::Station(station) = system { if !ret.contains(station) { ret.push(station.clone()); @@ -730,101 +691,6 @@ impl Rinex { c.lli_and_mask_mut(mask); c } - - /// Extracts signal strength as (min, max) duplet, - /// accross all vehicles. - /// Only relevant on Observation RINEX. - pub fn observation_ssi_minmax(&self) -> Option<(observation::Snr, observation::Snr)> { - let mut ret: Option<(observation::Snr, observation::Snr)> = None; - if let Some(r) = self.record.as_obs() { - for (_, (_, vehicles)) in r.iter() { - for (_, observation) in vehicles.iter() { - for (_, data) in observation.iter() { - if let Some(snr) = data.snr { - if let Some((min, max)) = &mut ret { - if snr < *min { - *min = snr; - } else if snr > *max { - *max = snr; - } - } - } - } - } - } - } - ret - } - - /// Extracts signal strength as (min, max) duplet, - /// per vehicle. Only relevant on Observation RINEX - pub fn observation_ssi_sv_minmax(&self) -> HashMap { - let mut map: HashMap = HashMap::new(); - if let Some(r) = self.record.as_obs() { - for (_, (_, vehicles)) in r.iter() { - for (sv, observations) in vehicles.iter() { - let (mut min, mut max) = (observation::Snr::DbHz54, observation::Snr::DbHz0); - for (_, observation) in observations.iter() { - if let Some(ssi) = observation.snr { - min = std::cmp::min(min, ssi); - max = std::cmp::max(max, ssi); - } - } - map.insert(*sv, (min, max)); - } - } - } - map - } - - /* - /// Applies given elevation mask - pub fn elevation_mask_mut( - &mut self, - mask: navigation::ElevationMask, - ref_pos: Option<(f64, f64, f64)>, - ) { - let ref_pos = match ref_pos { - Some(ref_pos) => ref_pos, - _ => self.header.coords.expect( - "can't apply an elevation mask when ground/ref position is unknown. - Specify one yourself with `ref_pos`", - ), - }; - if let Some(r) = self.record.as_mut_nav() { - r.retain(|epoch, classes| { - classes.retain(|class, frames| { - if *class == navigation::FrameClass::Ephemeris { - frames.retain(|fr| { - let (_, _, ephemeris) = fr.as_eph().unwrap(); - if let Some((el, _)) = ephemeris.sat_elev_azim(*epoch, ref_pos) { - mask.fits(el) - } else { - false - } - }); - frames.len() > 0 - } else { - // not an EPH - true // keep it anyway - } - }); - classes.len() > 0 - }) - } - } - */ - /* - pub fn elevation_mask( - &self, - mask: navigation::ElevationMask, - ref_pos: Option<(f64, f64, f64)>, - ) -> Self { - let mut s = self.clone(); - s.elevation_mask_mut(mask, ref_pos); - s - } - */ /// Aligns Phase observations at origin pub fn observation_phase_align_origin_mut(&mut self) { let mut init_phases: HashMap> = HashMap::new(); @@ -1125,30 +991,6 @@ impl Rinex { results } */ - /* - /// Applies Hatch filter to all Pseudo Range observations. - /// When feasible dual frequency dual code method is prefered - /// for optimal, fully unbiased smoothed PR. - /// PR observations get modified in place - pub fn observation_pseudorange_smoothing_mut(&mut self) { - if let Some(r) = self.record.as_mut_obs() { - for ((epoch, _), (_, svs)) in r { - for (sv, observations) in svs { - for (code, observation) in observations { - - } - } - } - } - } - - pub fn observation_pseudorange_smoothing(&self) -> Self { - let mut s = self.clone(); - s.observation_pseudorange_smoothing(); - s - } - */ - /* /// Returns epochs where a so called "cycle slip" has been confirmed. /// We confirm a cycle slip by computing the double difference @@ -1268,7 +1110,7 @@ impl Rinex { /// ``` pub fn dominant_sample_rate(&self) -> Option { self.sampling_histogram() - .max_by(|(_, x_pop), (_, y_pop)| x_pop.cmp(y_pop)) + .max_by(|(_, pop_i), (_, pop_j)| pop_i.cmp(pop_j)) .map(|dominant| dominant.0) } /// Histogram analysis on Epoch interval. Although @@ -1394,6 +1236,7 @@ impl Rinex { * These methods are used to browse data easily and efficiently. * It includes Format dependent extraction methods : one per format. */ +use crate::navigation::NavFrame; use itertools::Itertools; // .unique() use observation::ObservationData; @@ -1408,7 +1251,7 @@ impl Rinex { } else if let Some(r) = self.record.as_clock() { Box::new(r.iter().map(|(k, _)| *k)) } else if let Some(r) = self.record.as_ionex() { - Box::new(r.iter().map(|(k, _)| *k)) + Box::new(r.iter().map(|((k, _), _)| *k)) } else { panic!( "cannot get an epoch iterator for \"{:?}\" RINEX", @@ -1468,7 +1311,7 @@ impl Rinex { // grab all vehicles through all epochs, // fold them into a unique list record - .into_iter() + .iter() .flat_map(|(_, frames)| { frames .iter() @@ -1758,10 +1601,41 @@ impl Rinex { .flat_map(|record| record.iter()), ) } + /// Returns Navigation Data interator (any type of message). + /// NAV records may contain several different types of frames. + /// You should prefer narrowed down methods, like [ephemeris] or + /// [ionosphere_models] but those require the "nav" feature. + /// ``` + /// use rinex::prelude::*; + /// use rinex::navigation::NavMsgType; + /// let rinex = Rinex::from_file("../test_resources/NAV/V2/amel0010.21g") + /// .unwrap(); + /// for (epoch, nav_frames) in rinex.navigation() { + /// for frame in nav_frames { + /// // this record only contains ephemeris frames + /// assert!(frame.as_eph().is_some()); + /// assert!(frame.as_ion().is_none()); + /// assert!(frame.as_eop().is_none()); + /// assert!(frame.as_sto().is_none()); + /// if let Some((msg, sv, data)) = frame.as_eph() { + /// // this record only contains legacy frames + /// assert_eq!(msg, NavMsgType::LNAV); + /// } + /// } + /// } + /// ``` + pub fn navigation(&self) -> Box)> + '_> { + Box::new( + self.record + .as_nav() + .into_iter() + .flat_map(|record| record.iter()), + ) + } } #[cfg(feature = "obs")] -use crate::observation::Snr; +use crate::observation::{LliFlags, Snr}; /* * OBS RINEX specific methods: only available on crate feature. @@ -1793,6 +1667,8 @@ impl Rinex { }) })) } + /// Returns a Unique Iterator over signal Codes, like "1C" or "1P" + /// for precision code. pub fn code(&self) -> Box + '_> { Box::new( self.observation() @@ -1965,6 +1841,26 @@ impl Rinex { }) })) } + /// Returns an Iterator over pseudo range observations in valid + /// Epochs, with valid LLI flags + pub fn pseudo_range_ok(&self) -> Box + '_> { + Box::new(self.observation().flat_map(|((e, flag), (_, vehicles))| { + vehicles.iter().flat_map(|(sv, observations)| { + observations.iter().filter_map(|(obs, obsdata)| { + if obs.is_pseudorange_observable() { + if flag.is_ok() { + Some((*e, *sv, obs, obsdata.obs)) + } else { + None + } + } else { + None + } + }) + }) + })) + } + /// Returns an Iterator over fractional pseudo range observations pub fn pseudo_range_fract( &self, @@ -2045,6 +1941,25 @@ impl Rinex { } /// Returns an Iterator over signal SNR indications. /// All observation that did not come with such indication are filtered out. + /// ``` + /// use rinex::*; + /// let rinex = + /// Rinex::from_file("../test_resources/OBS/V3/ALAC00ESP_R_20220090000_01D_30S_MO.rnx") + /// .unwrap(); + /// for ((e, flag), sv, observable, snr) in rinex.snr() { + /// // See RINEX specs or [Snr] documentation + /// if snr.weak() { + /// } else if snr.strong() { + /// } else if snr.excellent() { + /// } + /// // you can directly compare to dBHz + /// if snr < 29.0.into() { + /// // considered weak signal + /// } else if snr >= 30.0.into() { + /// // considered strong signal + /// } + /// } + /// ``` pub fn snr(&self) -> Box + '_> { Box::new(self.observation().flat_map(|(e, (_, vehicles))| { vehicles.iter().flat_map(|(sv, observations)| { @@ -2054,6 +1969,33 @@ impl Rinex { }) })) } + /// Returns an Iterator over LLI flags that might be associated to an Observation. + /// ``` + /// use rinex::*; + /// use rinex::observation::LliFlags; + /// let rinex = + /// Rinex::from_file("../test_resources/OBS/V3/ALAC00ESP_R_20220090000_01D_30S_MO.rnx") + /// .unwrap(); + /// let custom_mask + /// = LliFlags::OK_OR_UNKNOWN | LliFlags::UNDER_ANTI_SPOOFING; + /// for ((e, flag), sv, observable, lli) in rinex.lli() { + /// // See RINEX specs or [LliFlags] documentation + /// if lli.intersects(custom_mask) { + /// // sane observation but under AS + /// } + /// } + /// ``` + pub fn lli( + &self, + ) -> Box + '_> { + Box::new(self.observation().flat_map(|(e, (_, vehicles))| { + vehicles.iter().flat_map(|(sv, observations)| { + observations + .iter() + .filter_map(|(obs, obsdata)| obsdata.lli.map(|lli| (*e, *sv, obs, lli))) + }) + })) + } /// Returns an Iterator over "complete" Epochs. /// "Complete" Epochs are Epochs were both Phase and Pseudo Range /// observations are present on two carriers, sane sampling conditions are met @@ -2064,46 +2006,50 @@ impl Rinex { ) -> Box)> + '_> { Box::new( self.observation() - .filter_map(|((e, flag), (_, vehicles))| { + .filter_map(move |((e, flag), (_, vehicles))| { if flag.is_ok() { let mut list: Vec<(Sv, Carrier)> = Vec::new(); for (sv, observables) in vehicles { let mut l1_pr_ph = (false, false); let mut lx_pr_ph: HashMap = HashMap::new(); - let mut criteria_met = true; for (observable, observation) in observables { if !observable.is_phase_observable() && !observable.is_pseudorange_observable() { continue; // not interesting here } - let carrier_code = &observable.to_string()[1..2]; + //let carrier_code = &observable.to_string()[1..2]; let carrier = Carrier::from_observable(sv.constellation, observable); if carrier.is_err() { // fail to identify this signal continue; } + if let Some(min_snr) = min_snr { + if let Some(snr) = observation.snr { + if snr < min_snr { + continue; + } + } else { + continue; // can't compare to criteria + } + } let carrier = carrier.unwrap(); if carrier == Carrier::L1 { l1_pr_ph.0 |= observable.is_pseudorange_observable(); l1_pr_ph.1 |= observable.is_phase_observable(); - } else { - if let Some((lx_pr, lx_ph)) = lx_pr_ph.get_mut(&carrier) { - *lx_pr |= observable.is_pseudorange_observable(); - *lx_ph |= observable.is_phase_observable(); - } else { - if observable.is_pseudorange_observable() { - lx_pr_ph.insert(carrier, (true, false)); - } else if observable.is_phase_observable() { - lx_pr_ph.insert(carrier, (false, true)); - } - } + } else if let Some((lx_pr, lx_ph)) = lx_pr_ph.get_mut(&carrier) { + *lx_pr |= observable.is_pseudorange_observable(); + *lx_ph |= observable.is_phase_observable(); + } else if observable.is_pseudorange_observable() { + lx_pr_ph.insert(carrier, (true, false)); + } else if observable.is_phase_observable() { + lx_pr_ph.insert(carrier, (false, true)); } } if l1_pr_ph == (true, true) { for (carrier, (pr, ph)) in lx_pr_ph { - if pr == true && ph == true { + if pr && ph { list.push((*sv, carrier)); } } @@ -2114,14 +2060,14 @@ impl Rinex { None } }) - .filter(|(sv, list)| !list.is_empty()), + .filter(|(_sv, list)| !list.is_empty()), ) } } #[cfg(feature = "nav")] use crate::navigation::{ - BdModel, EopMessage, Ephemeris, IonMessage, KbModel, NavFrame, NavMsgType, NgModel, StoMessage, + BdModel, EopMessage, Ephemeris, IonMessage, KbModel, NavMsgType, NgModel, StoMessage, }; //#[cfg(feature = "nav")] @@ -2138,35 +2084,6 @@ use map_3d::ecef2geodetic; #[cfg(feature = "nav")] #[cfg_attr(docrs, doc(cfg(feature = "nav")))] impl Rinex { - /// Returns NAV frames interator (any types). - /// NAV record may contain several different types of frames. - /// ``` - /// use rinex::prelude::*; - /// use rinex::navigation::NavMsgType; - /// let rinex = Rinex::from_file("../test_resources/NAV/V2/amel0010.21g") - /// .unwrap(); - /// for (epoch, nav_frames) in rinex.navigation() { - /// for frame in nav_frames { - /// // this record only contains ephemeris frames - /// assert!(frame.as_eph().is_some()); - /// assert!(frame.as_ion().is_none()); - /// assert!(frame.as_eop().is_none()); - /// assert!(frame.as_sto().is_none()); - /// if let Some((msg, sv, data)) = frame.as_eph() { - /// // this record only contains legacy frames - /// assert_eq!(msg, NavMsgType::LNAV); - /// } - /// } - /// } - /// ``` - pub fn navigation(&self) -> Box)> + '_> { - Box::new( - self.record - .as_nav() - .into_iter() - .flat_map(|record| record.iter()), - ) - } /// Returns a Unique Iterator over [`NavMsgType`]s that were identified /// ``` /// use rinex::prelude::*; @@ -2185,7 +2102,7 @@ impl Rinex { self.navigation() .map(|(_, frames)| { frames - .into_iter() + .iter() .filter_map(|fr| { if let Some((msg, _, _)) = fr.as_eph() { Some(msg) @@ -2240,41 +2157,51 @@ impl Rinex { }) })) } - /// Select Ephemeris data for given Sv at desired Epoch "t" - /// using closest TOE in time - pub fn sv_ephemeris(&self, sv: Sv, t: Epoch) -> Option<(Epoch, Ephemeris)> { - /* ephemeris data for this sv */ - let ephemeris_toe = self.ephemeris().filter_map(|(toc, (_, svnn, eph))| { - if *svnn == sv { - let ts = sv.constellation.timescale()?; - if let Some(toe) = eph.toe(ts) { - Some((toc, eph, toe)) + /// Ephemeris selection method. Use this method to select Ephemeris + /// to be used in "sv" navigation at "t" instant. Returns (toe and ephemeris frame). + pub fn sv_ephemeris(&self, sv: Sv, t: Epoch) -> Option<(Epoch, &Ephemeris)> { + /* + * minimize self.ephemeris with closest toe to t + * with toe <= t + * and t < toe + max dtoe + * TODO + * = match msg { + NavMsgType::CNAV => { + /* in CNAV : specs says toc is toe actually */ + // TODO Some(toc.in_time_scale(ts)) + None + }, + _ => { + /* determine toe */ + eph.toe(ts) + }, + }; + //TODO : this fails at this point + // on both GLONASS and SBAS + // therfore, kills rtk with these two constellations + let toe = toe?; + let dt = t - toe; + let max_dtoe = Ephemeris::max_dtoe(svnn.constellation)?; + // = None; - - for (toc, ephemeris, toe) in ephemeris_toe { - let dt = t - toe; - if dt <= max_dtoe { - // allowed - if let Some((ref mut ttoc, ref mut ep, ref mut ddt)) = ret.as_mut() { - *ep = ephemeris.clone(); - *ddt = dt; - *ttoc = *toc; - } else { - ret = Some((*toc, ephemeris.clone(), dt)); - } - } - } - let (toc, ephemeris, _) = ret?; - Some((toc, ephemeris)) + }) + .min_by_key(|(toe_i, _)| (t - *toe_i).abs()) } /// Returns an Iterator over Sv (embedded) clock offset (s), drift (s.s⁻¹) and /// drift rate (s.s⁻²) @@ -2295,30 +2222,6 @@ impl Rinex { .map(|(e, (_, sv, data))| (*e, *sv, data.sv_clock())), ) } - /// Returns Sv clock bias, at desired t_tx that should be expressed - /// in correct timescale. - pub fn sv_clock_bias(&self, sv: Sv, t_tx: Epoch) -> Option { - let (toc, ephemeris) = self.sv_ephemeris(sv, t_tx)?; - let (a0, a1, a2) = ephemeris.sv_clock(); - match sv.constellation { - Constellation::Glonass => { - //GLONASST not supported - //let ts = sv.constellation.timescale()?; - //let toe = ephemeris.toe()?; - //let dt = (t_tx - toe).to_seconds(); - //Some(Duration::from_seconds(-a0 + a1 * dt)) - None - }, - Constellation::Geo | Constellation::SBAS(_) => { - let dt = (t_tx - toc).to_seconds(); - Some(Duration::from_seconds(a0 + a1 * dt + a2 * dt.powi(2))) - }, - _ => { - let dt = (t_tx - toc).to_seconds(); - Some(Duration::from_seconds(a0 + a1 * dt + a2 * dt.powi(2))) - }, - } - } /// Returns an Iterator over Sv position vectors, /// expressed in km ECEF for all Epochs. /// ``` @@ -2899,12 +2802,10 @@ impl Rinex { /// ``` pub fn hail_detected(&self) -> bool { if let Some(r) = self.record.as_meteo() { - for (_, observables) in r { + for observables in r.values() { for (observ, value) in observables { - if *observ == Observable::HailIndicator { - if *value > 0.0 { - return true; - } + if *observ == Observable::HailIndicator && *value > 0.0 { + return true; } } } @@ -2925,34 +2826,14 @@ impl Merge for Rinex { /// Merges `rhs` into `Self` in place fn merge_mut(&mut self, rhs: &Self) -> Result<(), merge::Error> { self.header.merge_mut(&rhs.header)?; + if self.epoch().count() == 0 { + // lhs is empty : overwrite + self.record = rhs.record.clone(); + } else if rhs.epoch().count() != 0 { + // real merge + self.record.merge_mut(&rhs.record)?; + } Ok(()) - //TODO: needs to reapply - //if self.epoch().len() == 0 { - // // self is empty - // self.record = rhs.record.clone(); - // Ok(()) - //} else if rhs.epoch().len() == 0 { - // // nothing to merge - // Ok(()) - //} else { - // // add special marker, ts: YYYYDDMM HHMMSS UTC - // let now = hifitime::Epoch::now().expect("failed to retrieve system time"); - // let (y, m, d, hh, mm, ss, _) = now.to_gregorian_utc(); - // self.header.comments.push(format!( - // "rustrnx-{:<20} FILE MERGE {}{}{} {}{}{} {}", - // env!("CARGO_PKG_VERSION"), - // y + 1900, - // m, - // d, - // hh, - // mm, - // ss, - // now.time_scale - // )); - // // RINEX record merging - // self.record.merge_mut(&rhs.record)?; - // Ok(()) - //} } } @@ -3152,6 +3033,7 @@ impl Dcb for Rinex { use observation::Combine; #[cfg(feature = "obs")] +#[cfg_attr(docrs, doc(cfg(feature = "obs")))] impl Combine for Rinex { fn geo_free( &self, @@ -3195,6 +3077,7 @@ impl Combine for Rinex { use observation::IonoDelay; #[cfg(feature = "obs")] +#[cfg_attr(docrs, doc(cfg(feature = "obs")))] impl IonoDelay for Rinex { fn iono_delay( &self, @@ -3208,14 +3091,138 @@ impl IonoDelay for Rinex { } } +/* + * IONEX specific feature + */ +#[cfg(feature = "ionex")] +#[cfg_attr(docrs, doc(cfg(feature = "ionex")))] +impl Rinex { + /// Iterates over IONEX maps, per Epoch and altitude. + /// ``` + /// use rinex::prelude::*; + /// ``` + fn ionex(&self) -> Box + '_> { + Box::new( + self.record + .as_ionex() + .into_iter() + .flat_map(|record| record.iter()), + ) + } + /// Returns an iterator over TEC values exclusively. + /// ``` + /// use rinex::prelude::*; + /// let rnx = Rinex::from_file("../test_resources/IONEX/V1/CKMG0020.22I.gz") + /// .unwrap(); + /// for (t, lat, lon, alt, tec) in rnx.tec() { + /// // t: Epoch + /// // lat: ddeg + /// // lon: ddeg + /// // alt: km + /// // tec: TECu (f64: properly scaled) + /// } + /// ``` + pub fn tec(&self) -> Box + '_> { + Box::new(self.ionex().flat_map(|((e, h), plane)| { + plane.iter().map(|((lat, lon), tec)| { + ( + *e, + *lat as f64 / 1000.0_f64, + *lon as f64 / 1000.0_f64, + *h as f64 / 100.0_f64, + tec.tec, + ) + }) + })) + } + /// Returns an iterator over TEC RMS exclusively + /// ``` + /// use rinex::prelude::*; + /// let rnx = Rinex::from_file("../test_resources/IONEX/V1/jplg0010.17i.gz") + /// .unwrap(); + /// for (t, lat, lon, alt, rms) in rnx.tec_rms() { + /// // t: Epoch + /// // lat: ddeg + /// // lon: ddeg + /// // alt: km + /// // rms|TECu| (f64) + /// } + /// ``` + pub fn tec_rms(&self) -> Box + '_> { + Box::new(self.ionex().flat_map(|((e, h), plane)| { + plane.iter().filter_map(|((lat, lon), tec)| { + tec.rms.map(|rms| { + ( + *e, + *lat as f64 / 1000.0_f64, + *lon as f64 / 1000.0_f64, + *h as f64 / 100.0_f64, + rms, + ) + }) + }) + })) + } + /// Returns 2D fixed altitude value, expressed in km, in case self is a 2D IONEX. + /// ``` + /// use rinex::prelude::*; + /// let rnx = Rinex::from_file("../test_resources/IONEX/V1/jplg0010.17i.gz") + /// .unwrap(); + /// assert_eq!(rnx.tec_fixed_altitude(), Some(450.0)); + /// + /// let rnx = Rinex::from_file("../test_resources/IONEX/V1/CKMG0020.22I.gz") + /// .unwrap(); + /// assert_eq!(rnx.tec_fixed_altitude(), Some(350.0)); + /// ``` + pub fn tec_fixed_altitude(&self) -> Option { + if self.is_ionex_2d() { + let header = self.header.ionex.as_ref()?; + Some(header.grid.height.start) + } else { + None + } + } + /// Returns altitude range of this 3D IONEX as {min, max} + /// both expressed in km. + pub fn tec_altitude_range(&self) -> Option<(f64, f64)> { + if self.is_ionex_3d() { + let header = self.header.ionex.as_ref()?; + Some((header.grid.height.start, header.grid.height.end)) + } else { + None + } + } + /// Returns 2D TEC plane at specified altitude and time. + /// Refer to the header.grid specification for its width and height. + pub fn tec_plane(&self, t: Epoch, h: f64) -> Option<&TECPlane> { + self.ionex() + .filter_map(|((e, alt), plane)| { + if t == *e && (*alt as f64) / 100.0 == h { + Some(plane) + } else { + None + } + }) + .reduce(|plane, _| plane) // is unique, in a normal IONEX + } + /// Returns IONEX map borders, expressed as North Eastern + /// and South Western (latitude; longitude) coordinates, + /// both expressed in ddeg. + pub fn tec_map_borders(&self) -> Option<((f64, f64), (f64, f64))> { + let ionex = self.header.ionex.as_ref()?; + Some(( + (ionex.grid.latitude.start, ionex.grid.longitude.start), + (ionex.grid.latitude.end, ionex.grid.longitude.end), + )) + } +} + #[cfg(test)] mod test { use super::*; use std::str::FromStr; #[test] fn test_macros() { - assert_eq!(is_comment!("This is a comment COMMENT"), true); - assert_eq!(is_comment!("This is a comment"), false); let _ = sv!("G01"); let _ = sv!("R03"); let _ = gnss!("GPS"); @@ -3233,4 +3240,39 @@ mod test { assert_eq!(hourly_session!(5), "f"); assert_eq!(hourly_session!(23), "x"); } + use crate::{fmt_comment, is_rinex_comment}; + #[test] + fn fmt_comments_singleline() { + for desc in [ + "test", + "just a basic comment", + "just another lengthy comment blahblabblah", + ] { + let comment = fmt_comment(desc); + assert!( + comment.len() >= 60, + "comments should be at least 60 byte long" + ); + assert_eq!( + comment.find("COMMENT"), + Some(60), + "comment marker should located @ 60" + ); + assert!(is_rinex_comment(&comment), "should be valid comment"); + } + } + #[test] + fn fmt_wrapped_comments() { + for desc in ["just trying to form a very lengthy comment that will overflow since it does not fit in a single line", + "just trying to form a very very lengthy comment that will overflow since it does fit on three very meaningful lines. Imazdmazdpoakzdpoakzpdokpokddddddddddddddddddaaaaaaaaaaaaaaaaaaaaaaa"] { + let nb_lines = num_integer::div_ceil(desc.len(), 60); + let comments = fmt_comment(desc); + assert_eq!(comments.lines().count(), nb_lines); + for line in comments.lines() { + assert!(line.len() >= 60, "comment line should be at least 60 byte long"); + assert_eq!(line.find("COMMENT"), Some(60), "comment marker should located @ 60"); + assert!(is_rinex_comment(line), "should be valid comment"); + } + } + } } diff --git a/rinex/src/macros.rs b/rinex/src/macros.rs index 0f25d2e00..ea895c089 100644 --- a/rinex/src/macros.rs +++ b/rinex/src/macros.rs @@ -36,14 +36,6 @@ macro_rules! filter { }; } -/// Returns `true` if given `Rinex` line is a comment -#[macro_export] -macro_rules! is_comment { - ($line: expr) => { - $line.trim_end().ends_with("COMMENT") - }; -} - /// Builds a [crate::GroundPosition] in WGS84 #[macro_export] macro_rules! wgs84 { diff --git a/rinex/src/merge.rs b/rinex/src/merge.rs index 9f0217296..d2e49b20b 100644 --- a/rinex/src/merge.rs +++ b/rinex/src/merge.rs @@ -15,10 +15,12 @@ pub enum Error { IonexReferenceMismatch, #[error("cannot merge ionex with different grid definition")] IonexMapGridMismatch, - #[error("cannot merge ionex with different map dimensions")] + #[error("cannot merge ionex of different dimensions")] IonexMapDimensionsMismatch, #[error("cannot merge ionex where base radius differs")] IonexBaseRadiusMismatch, + #[error("failed to retrieve system time for merge ops date")] + HifitimeError(#[from] hifitime::Errors), } /* @@ -35,7 +37,7 @@ pub(crate) fn merge_mut_vec(lhs: &mut Vec, rhs: &Vec) { */ pub(crate) fn merge_mut_unique_vec(lhs: &mut Vec, rhs: &Vec) { for item in rhs { - if !lhs.contains(&item) { + if !lhs.contains(item) { lhs.push(item.clone()); } } @@ -49,9 +51,9 @@ pub(crate) fn merge_mut_unique_map2d>, ) { for (k, values) in rhs.iter() { - if let Some(vvalues) = lhs.get_mut(&k) { + if let Some(vvalues) = lhs.get_mut(k) { for value in values { - if !vvalues.contains(&value) { + if !vvalues.contains(value) { vvalues.push(value.clone()); } } diff --git a/rinex/src/meteo/record.rs b/rinex/src/meteo/record.rs index bdc884ad3..75e80f5bb 100644 --- a/rinex/src/meteo/record.rs +++ b/rinex/src/meteo/record.rs @@ -69,13 +69,13 @@ pub(crate) fn parse_epoch( let codes = &header.meteo.as_ref().unwrap().codes; let nb_codes = codes.len(); - let nb_lines: usize = num_integer::div_ceil(nb_codes, 8).into(); + let nb_lines: usize = num_integer::div_ceil(nb_codes, 8); let mut code_index: usize = 0; for i in 0..nb_lines { for _ in 0..8 { let code = &codes[code_index]; - let obs: Option = match f64::from_str(&line[offset..offset + 7].trim()) { + let obs: Option = match f64::from_str(line[offset..offset + 7].trim()) { Ok(f) => Some(f), Err(_) => None, }; @@ -126,13 +126,13 @@ pub(crate) fn fmt_epoch( if let Some(data) = data.get(obscode) { lines.push_str(&format!("{:7.1}", data)); } else { - lines.push_str(&format!(" ")); + lines.push_str(" "); } if (index % 8) == 0 { - lines.push_str("\n"); + lines.push('\n'); } } - lines.push_str("\n"); + lines.push('\n'); Ok(lines) } @@ -142,35 +142,35 @@ mod test { #[test] fn test_new_epoch() { let content = " 22 1 4 0 0 0 993.4 -6.8 52.9 1.6 337.0 0.0 0.0"; - assert_eq!( - is_new_epoch(content, version::Version { major: 2, minor: 0 }), - true - ); + assert!(is_new_epoch( + content, + version::Version { major: 2, minor: 0 } + )); let content = " 22 1 4 0 0 0 993.4 -6.8 52.9 1.6 337.0 0.0 0.0"; - assert_eq!( - is_new_epoch(content, version::Version { major: 2, minor: 0 }), - true - ); + assert!(is_new_epoch( + content, + version::Version { major: 2, minor: 0 } + )); let content = " 22 1 4 9 55 0 997.9 -6.4 54.2 2.9 342.0 0.0 0.0"; - assert_eq!( - is_new_epoch(content, version::Version { major: 2, minor: 0 }), - true - ); + assert!(is_new_epoch( + content, + version::Version { major: 2, minor: 0 } + )); let content = " 22 1 4 10 0 0 997.9 -6.3 55.4 3.4 337.0 0.0 0.0"; - assert_eq!( - is_new_epoch(content, version::Version { major: 2, minor: 0 }), - true - ); + assert!(is_new_epoch( + content, + version::Version { major: 2, minor: 0 } + )); let content = " 08 1 1 0 0 1 1018.0 25.1 75.9 1.4 95.0 0.0 0.0"; - assert_eq!( - is_new_epoch(content, version::Version { major: 2, minor: 0 }), - true - ); + assert!(is_new_epoch( + content, + version::Version { major: 2, minor: 0 } + )); let content = " 2021 1 7 0 0 0 993.3 23.0 90.0"; - assert_eq!( - is_new_epoch(content, version::Version { major: 4, minor: 0 }), - true - ); + assert!(is_new_epoch( + content, + version::Version { major: 4, minor: 0 } + )); } } @@ -204,7 +204,7 @@ impl Split for Record { .iter() .flat_map(|(k, v)| { if k < &epoch { - Some((k.clone(), v.clone())) + Some((*k, v.clone())) } else { None } @@ -214,7 +214,7 @@ impl Split for Record { .iter() .flat_map(|(k, v)| { if k >= &epoch { - Some((k.clone(), v.clone())) + Some((*k, v.clone())) } else { None } @@ -244,7 +244,7 @@ impl Mask for Record { TargetItem::ObservableItem(filter) => { self.retain(|_, data| { data.retain(|code, _| filter.contains(code)); - data.len() > 0 + !data.is_empty() }); }, _ => {}, @@ -254,7 +254,7 @@ impl Mask for Record { TargetItem::ObservableItem(filter) => { self.retain(|_, data| { data.retain(|code, _| !filter.contains(code)); - data.len() > 0 + !data.is_empty() }); }, _ => {}, @@ -338,7 +338,7 @@ impl Decimate for Record { } fn decimate_match(&self, rhs: &Self) -> Self { let mut s = self.clone(); - s.decimate_match_mut(&rhs); + s.decimate_match_mut(rhs); s } } diff --git a/rinex/src/meteo/sensor.rs b/rinex/src/meteo/sensor.rs index 4181abf9f..086ca4da3 100644 --- a/rinex/src/meteo/sensor.rs +++ b/rinex/src/meteo/sensor.rs @@ -37,14 +37,14 @@ impl std::str::FromStr for Sensor { let (observable, _) = rem.split_at(2); Ok(Self { model: { - if model.trim().len() > 0 { + if !model.trim().is_empty() { Some(model.trim().to_string()) } else { None } }, sensor_type: { - if s_type.trim().len() > 0 { + if !s_type.trim().is_empty() { Some(s_type.trim().to_string()) } else { None @@ -82,14 +82,14 @@ impl std::fmt::Display for Sensor { } else { write!(f, "{:11}", "")? } - write!(f, "{} SENSOR MOD/TYPE/ACC\n", self.observable)?; + writeln!(f, "{} SENSOR MOD/TYPE/ACC", self.observable)?; if let Some((x, y, z, h)) = self.position { write!(f, "{:14.4}", x)?; write!(f, "{:14.4}", y)?; write!(f, "{:14.4}", z)?; write!(f, "{:14.4}", h)?; - write!(f, " {} SENSOR POS XYZ/H\n", self.observable)? + writeln!(f, " {} SENSOR POS XYZ/H", self.observable)? } Ok(()) } @@ -164,7 +164,7 @@ mod test { #[test] fn from_str() { let s = Sensor::from_str(" 0.0 PR "); - assert_eq!(s.is_ok(), true); + assert!(s.is_ok()); let s = s.unwrap(); assert_eq!(s.model, None); assert_eq!(s.sensor_type, None); @@ -174,10 +174,10 @@ mod test { let s = Sensor::from_str( "PAROSCIENTIFIC 740-16B 0.2 PR SENSOR MOD/TYPE/ACC", ); - assert_eq!(s.is_ok(), true); + assert!(s.is_ok()); let s = Sensor::from_str( " 0.0 PR SENSOR MOD/TYPE/ACC", ); - assert_eq!(s.is_ok(), true); + assert!(s.is_ok()); } } diff --git a/rinex/src/navigation/ephemeris.rs b/rinex/src/navigation/ephemeris.rs index 22743f157..3da9e320e 100644 --- a/rinex/src/navigation/ephemeris.rs +++ b/rinex/src/navigation/ephemeris.rs @@ -1,7 +1,7 @@ use super::{orbits::closest_nav_standards, NavMsgType, OrbitItem}; use crate::{epoch, prelude::*, sv, version::Version}; -use hifitime::GPST_REF_EPOCH; +use hifitime::Unit; use std::collections::HashMap; use std::str::FromStr; use thiserror::Error; @@ -127,16 +127,42 @@ impl Ephemeris { self.orbits.get("week").and_then(|field| field.as_u32()) } /* - * Retrieves toe, expressed as an Epoch, if Week + TOE are properly received + * Returns TGD field if such field is not empty + */ + pub fn tgd(&self) -> Option { + self.get_orbit_f64("tgd") + } + /* + * Helper to apply a clock correction to provided time (expressed as Epoch) + */ + pub fn sv_clock_corr(sv: Sv, clock_bias: (f64, f64, f64), t: Epoch, toe: Epoch) -> Duration { + let (a0, a1, a2) = clock_bias; + match sv.constellation { + Constellation::Glonass => { + todo!("sv_clock_corr not supported for glonass @ the moment"); + }, + _ => { + let dt = (t - toe).to_seconds(); + Duration::from_seconds(a0 + a1 * dt + a2 * dt.powi(2)) + }, + } + } + /* + * Retrieves and express TOE as an hifitime Epoch */ pub(crate) fn toe(&self, ts: TimeScale) -> Option { - let week = self.get_week()?; - let toe_f64 = self.get_orbit_f64("toe")?; - Some(Epoch::from_time_of_week( - week, - toe_f64.round() as u64 * 1_000_000_000, - ts, - )) + /* toe week counter */ + let mut week = self.get_week()?; + if ts == TimeScale::GST { + /* Galileo vehicles stream week counter referenced to GPST.. */ + week -= 1024; + } + + // "toe" field is seconds within current week to obtain toe + let secs_dur = self.get_orbit_f64("toe")?; + let week_dur = (week * 7) as f64 * Unit::Day; + + Some(Epoch::from_duration(week_dur + secs_dur * Unit::Second, ts)) } /* * Parses ephemeris from given line iterator @@ -155,49 +181,34 @@ impl Ephemeris { true => 3, false => 4, }; - let date_offset: usize = match version.major < 3 { - true => 19, - false => 19, - }; let (svnn, rem) = line.split_at(svnn_offset); - let (date, rem) = rem.split_at(date_offset); + let (date, rem) = rem.split_at(19); let (clk_bias, rem) = rem.split_at(19); let (clk_dr, clk_drr) = rem.split_at(19); - let mut sv = Sv::default(); - let mut epoch = Epoch::default(); - - match version.major { - 1 | 2 => { - match constellation { - Constellation::Mixed => { - // not sure that even exists - sv = Sv::from_str(svnn.trim())? - }, - _ => { - sv.constellation = constellation; - sv.prn = u8::from_str_radix(svnn.trim(), 10)?; - }, - } - }, - 3 => { - sv = Sv::from_str(svnn.trim())?; + //println!("SVNN \"{}\"", svnn); // DEBUG + let sv = match Sv::from_str(svnn.trim()) { + Ok(sv) => sv, + Err(_) => { + // parsing failed probably due to omitted constellation (old rev.) + let desc = format!("{:x}{:02}", constellation, svnn.trim()); + Sv::from_str(&desc)? }, - _ => unreachable!("V4 is treated in a dedicated method"), }; + //println!("\"{}\"={}", svnn, sv); // DEBUG let ts = sv .constellation - .to_timescale() + .timescale() .ok_or(Error::TimescaleIdentification(sv))?; //println!("V2/V3 CONTENT \"{}\" TIMESCALE {}", line, ts); //DEBUG let (epoch, _) = epoch::parse_in_timescale(date.trim(), ts)?; - let clock_bias = f64::from_str(clk_bias.replace("D", "E").trim())?; - let clock_drift = f64::from_str(clk_dr.replace("D", "E").trim())?; - let clock_drift_rate = f64::from_str(clk_drr.replace("D", "E").trim())?; + let clock_bias = f64::from_str(clk_bias.replace('D', "E").trim())?; + let clock_drift = f64::from_str(clk_dr.replace('D', "E").trim())?; + let clock_drift_rate = f64::from_str(clk_drr.replace('D', "E").trim())?; // parse orbits : // only Legacy Frames in V2 and V3 (old) RINEX let orbits = parse_orbits(version, NavMsgType::LNAV, sv.constellation, lines)?; @@ -233,9 +244,9 @@ impl Ephemeris { let (clk_bias, rem) = rem.split_at(19); let (clk_dr, clk_drr) = rem.split_at(19); - let clock_bias = f64::from_str(clk_bias.replace("D", "E").trim())?; - let clock_drift = f64::from_str(clk_dr.replace("D", "E").trim())?; - let clock_drift_rate = f64::from_str(clk_drr.replace("D", "E").trim())?; + let clock_bias = f64::from_str(clk_bias.replace('D', "E").trim())?; + let clock_drift = f64::from_str(clk_dr.replace('D', "E").trim())?; + let clock_drift_rate = f64::from_str(clk_drr.replace('D', "E").trim())?; let orbits = parse_orbits(Version { major: 4, minor: 0 }, msg, sv.constellation, lines)?; Ok(( epoch, @@ -318,40 +329,39 @@ impl Ephemeris { s } /* - * Manual calculations of satellite position vector, in km ECEF. - * `t_sv`: orbit epoch as parsed in RINEX. - * TODO: this is currently only verified in GPST - need to verify GST/BDT/IRNSST support - * See [Bibliography::AsceAppendix3] and [Bibliography::JLe19] - */ - pub(crate) fn kepler2ecef(&self, sv: &Sv, epoch: Epoch) -> Option<(f64, f64, f64)> { - // To form t_sv : we need to convert UTC time to GNSS time. - // Hifitime v4, once released, will help here - let mut t_sv = epoch.clone(); + * Kepler equation solver at desired instant "t" for given "sv" + * based off Self. Self must be correctly selected in navigation + * record. + * "t" does not have to expressed in correct timescale prior this calculation + * See [Bibliography::AsceAppendix3] and [Bibliography::JLe19] + */ + pub(crate) fn kepler2ecef(&self, sv: &Sv, t: Epoch) -> Option<(f64, f64, f64)> { + let mut t = t; + + /* + * if "t" is not expressed in the correct constellation, + * take that into account + */ + t.time_scale = sv.timescale()?; match sv.constellation { Constellation::GPS | Constellation::QZSS => { - t_sv.time_scale = TimeScale::GPST; - t_sv -= Duration::from_seconds(18.0); // GPST(t=0) number of leap seconds @ the time + t -= Duration::from_seconds(18.0); // GPST(t=0) number of leap seconds @ the time }, Constellation::Galileo => { - t_sv.time_scale = TimeScale::GST; - t_sv -= Duration::from_seconds(31.0); // GST(t=0) number of leap seconds @ the time + t -= Duration::from_seconds(31.0); // GST(t=0) number of leap seconds @ the time }, Constellation::BeiDou => { - t_sv.time_scale = TimeScale::BDT; - t_sv -= Duration::from_seconds(32.0); // BDT(t=0) number of leap seconds @ the time + t -= Duration::from_seconds(32.0); // BDT(t=0) number of leap seconds @ the time }, _ => {}, // either not needed, or most probably not truly supported } + let toe = self.toe(t.time_scale)?; let kepler = self.kepler()?; let perturbations = self.perturbations()?; - let weeks = self.get_week()?; - let t0 = GPST_REF_EPOCH + Duration::from_days((weeks * 7).into()); - let toe = t0 + Duration::from_seconds(kepler.toe as f64); - let t_k = (t_sv - toe).to_seconds(); + let t_k = (t - toe).to_seconds(); let n0 = (Kepler::EARTH_GM_CONSTANT / kepler.a.powf(3.0)).sqrt(); let n = n0 + perturbations.dn; @@ -385,12 +395,10 @@ impl Ephemeris { Some((x_k / 1000.0, y_k / 1000.0, z_k / 1000.0)) } - /* - * Returns Sv position in km ECEF, based off Self Ephemeris data, - * and for given Satellite Vehicle at given Epoch. - * Either by solving Kepler equations, or directly if such data is available. - */ - pub(crate) fn sv_position(&self, sv: &Sv, epoch: Epoch) -> Option<(f64, f64, f64)> { + /// Returns Sv position in km ECEF, based off Self Ephemeris data, + /// and for given Satellite Vehicle at given Epoch. + /// Either by solving Kepler equations, or directly if such data is available. + pub fn sv_position(&self, sv: &Sv, epoch: Epoch) -> Option<(f64, f64, f64)> { let (x_km, y_km, z_km) = ( self.get_orbit_f64("satPosX"), self.get_orbit_f64("satPosY"), @@ -407,27 +415,21 @@ impl Ephemeris { _ => self.kepler2ecef(sv, epoch), } } - /* - * Computes elev, azim angles both in degrees - */ - pub(crate) fn sv_elev_azim( - &self, - sv: &Sv, - epoch: Epoch, - reference: GroundPosition, - ) -> Option<(f64, f64)> { - let (sv_x, sv_y, sv_z) = self.sv_position(sv, epoch)?; - let (ref_x, ref_y, ref_z) = reference.to_ecef_wgs84(); + /// Helper method to calculate elevation and azimuth angles, both in degrees, + /// between a reference position (in meter ECEF WGS84) and a resolved + /// SV position in the sky, expressed in meter ECEF WFS84. + pub fn elevation_azimuth( + sv_position: (f64, f64, f64), + reference_position: (f64, f64, f64), + ) -> (f64, f64) { + let (sv_x, sv_y, sv_z) = sv_position; // convert ref position to radians(lat, lon) + let (ref_x, ref_y, ref_z) = reference_position; let (ref_lat, ref_lon, _) = map_3d::ecef2geodetic(ref_x, ref_y, ref_z, map_3d::Ellipsoid::WGS84); // ||sv - ref_pos|| pseudo range - let a_i = ( - sv_x * 1000.0 - ref_x, - sv_y * 1000.0 - ref_y, - sv_z * 1000.0 - ref_z, - ); + let a_i = (sv_x - ref_x, sv_y - ref_y, sv_z - ref_z); let norm = (a_i.0.powf(2.0) + a_i.1.powf(2.0) + a_i.2.powf(2.0)).sqrt(); let a_i = (a_i.0 / norm, a_i.1 / norm, a_i.2 / norm); @@ -456,7 +458,22 @@ impl Ephemeris { if az < 0.0 { az += 360.0; } - Some((el, az)) + (el, az) + } + /* + * Resolves a position and computes elev, azim angles both in degrees + */ + pub(crate) fn sv_elev_azim( + &self, + sv: &Sv, + epoch: Epoch, + reference: GroundPosition, + ) -> Option<(f64, f64)> { + let (sv_x, sv_y, sv_z) = self.sv_position(sv, epoch)?; + Some(Self::elevation_azimuth( + (sv_x * 1.0E3, sv_y * 1.0E3, sv_z * 1.0E3), + reference.to_ecef_wgs84(), + )) } /* * Returns max time difference between an Epoch and @@ -464,15 +481,19 @@ impl Ephemeris { */ pub(crate) fn max_dtoe(c: Constellation) -> Option { match c { - Constellation::GPS | Constellation::QZSS | Constellation::Geo => { - Some(Duration::from_seconds(7200.0)) - }, + Constellation::GPS | Constellation::QZSS => Some(Duration::from_seconds(7200.0)), Constellation::Galileo => Some(Duration::from_seconds(10800.0)), Constellation::BeiDou => Some(Duration::from_seconds(21600.0)), - Constellation::SBAS(_) => Some(Duration::from_seconds(360.0)), Constellation::IRNSS => Some(Duration::from_seconds(86400.0)), Constellation::Glonass => Some(Duration::from_seconds(1800.0)), - _ => None, + c => { + if c.is_sbas() { + //TODO: verify this please + Some(Duration::from_seconds(7200.0)) + } else { + None + } + }, } } } @@ -488,6 +509,11 @@ fn parse_orbits( constell: Constellation, lines: std::str::Lines<'_>, ) -> Result, Error> { + // convert SBAS constell to compatible "sbas" (undetermined/general constell) + let constell = match constell.is_sbas() { + true => Constellation::SBAS, + false => constell, + }; // Determine closest standards from DB // <=> data fields to parse let nav_standards = match closest_nav_standards(constell, version, msg) { @@ -514,38 +540,41 @@ fn parse_orbits( //println!("LINE \"{}\" | NB MISSING {}", line, nb_missing); //DEBUG loop { - if line.len() == 0 { - key_index += nb_missing as usize; + if line.is_empty() { + key_index += nb_missing; break; } let (content, rem) = line.split_at(std::cmp::min(word_size, line.len())); + let content = content.trim(); - if content.trim().len() == 0 { + if content.is_empty() { // omitted field key_index += 1; - if nb_missing > 0 { - nb_missing -= 1; - } + nb_missing = nb_missing.saturating_sub(1); line = rem.clone(); continue; } - - if let Some((key, token)) = fields.get(key_index) { - //println!( - // "Key \"{}\"(index: {}) | Token \"{}\" | Content \"{}\"", - // key, - // key_index, - // token, - // content.trim() - //); //DEBUG - if !key.contains(&"spare") { - if let Ok(item) = OrbitItem::new(token, content.trim(), constell) { - map.insert(key.to_string(), item); + /* + * In NAV RINEX, unresolved data fields are either + * omitted (handled previously) or put a zeros + */ + if !content.contains(".000000000000E+00") { + if let Some((key, token)) = fields.get(key_index) { + //println!( + // "Key \"{}\"(index: {}) | Token \"{}\" | Content \"{}\"", + // key, + // key_index, + // token, + // content.trim() + //); //DEBUG + if !key.contains("spare") { + if let Ok(item) = OrbitItem::new(token, content, constell) { + map.insert(key.to_string(), item); + } } } } - key_index += 1; line = rem.clone(); } diff --git a/rinex/src/navigation/orbits.rs b/rinex/src/navigation/orbits.rs index 6d3ed7ce4..980c1326b 100644 --- a/rinex/src/navigation/orbits.rs +++ b/rinex/src/navigation/orbits.rs @@ -86,30 +86,30 @@ impl OrbitItem { match type_desc { "u8" => { // float->unsigned conversion - let float = f64::from_str(&content.replace("D", "e"))?; + let float = f64::from_str(&content.replace('D', "e"))?; Ok(OrbitItem::U8(float as u8)) }, "i8" => { // float->signed conversion - let float = f64::from_str(&content.replace("D", "e"))?; + let float = f64::from_str(&content.replace('D', "e"))?; Ok(OrbitItem::I8(float as i8)) }, "u32" => { // float->signed conversion - let float = f64::from_str(&content.replace("D", "e"))?; + let float = f64::from_str(&content.replace('D', "e"))?; Ok(OrbitItem::U32(float as u32)) }, - "f64" => Ok(OrbitItem::F64(f64::from_str(&content.replace("D", "e"))?)), + "f64" => Ok(OrbitItem::F64(f64::from_str(&content.replace('D', "e"))?)), "gloStatus" => { // float->unsigned conversion - let float = f64::from_str(&content.replace("D", "e"))?; + let float = f64::from_str(&content.replace('D', "e"))?; let unsigned = float as u32; let status = GloStatus::from_bits(unsigned).unwrap_or(GloStatus::empty()); Ok(OrbitItem::GloStatus(status)) }, "health" => { // float->unsigned conversion - let float = f64::from_str(&content.replace("D", "e"))?; + let float = f64::from_str(&content.replace('D', "e"))?; let unsigned = float as u32; match constellation { Constellation::GPS | Constellation::QZSS => { @@ -127,19 +127,22 @@ impl OrbitItem { .unwrap_or(health::GalHealth::empty()); Ok(OrbitItem::GalHealth(flags)) }, - Constellation::SBAS(_) | Constellation::Geo => { - let flag: health::GeoHealth = num::FromPrimitive::from_u32(unsigned) - .unwrap_or(health::GeoHealth::default()); - Ok(OrbitItem::GeoHealth(flag)) - }, Constellation::IRNSS => { let flag: health::IrnssHealth = num::FromPrimitive::from_u32(unsigned) .unwrap_or(health::IrnssHealth::default()); Ok(OrbitItem::IrnssHealth(flag)) }, - _ => unreachable!(), // MIXED is not feasible here - // as we use the current vehicle's constellation, - // which is always defined + c => { + if c.is_sbas() { + let flag: health::GeoHealth = num::FromPrimitive::from_u32(unsigned) + .unwrap_or(health::GeoHealth::default()); + Ok(OrbitItem::GeoHealth(flag)) + } else { + // Constellation::Mixed will not happen here, + // it's always defined in the database + unreachable!("unhandled case!"); + } + }, } }, // "health" _ => Err(OrbitItemError::UnknownTypeDescriptor(type_desc.to_string())), @@ -164,7 +167,7 @@ impl OrbitItem { /// Unwraps OrbitItem as f64 pub fn as_f64(&self) -> Option { match self { - OrbitItem::F64(f) => Some(f.clone()), + OrbitItem::F64(f) => Some(*f), _ => None, } } @@ -178,14 +181,14 @@ impl OrbitItem { /// Unwraps OrbitItem as u8 pub fn as_u8(&self) -> Option { match self { - OrbitItem::U8(u) => Some(u.clone()), + OrbitItem::U8(u) => Some(*u), _ => None, } } /// Unwraps OrbitItem as i8 pub fn as_i8(&self) -> Option { match self { - OrbitItem::I8(i) => Some(i.clone()), + OrbitItem::I8(i) => Some(*i), _ => None, } } @@ -213,7 +216,7 @@ impl OrbitItem { /// Unwraps Self as GAL orbit Health indication pub fn as_gal_health(&self) -> Option { match self { - OrbitItem::GalHealth(h) => Some(h.clone()), + OrbitItem::GalHealth(h) => Some(*h), _ => None, } } @@ -257,7 +260,7 @@ pub(crate) fn closest_nav_standards( }) .collect(); - if items.len() == 0 { + if items.is_empty() { if minor == 0 { // we're done with this major // -> downgrade to previous major @@ -301,7 +304,7 @@ mod test { // Like we use it when parsing.. let e = OrbitItem::new(value, &content, constellation); assert!( - e.is_ok() == true, + e.is_ok(), "failed to build Orbit Item from (\"{}\", \"{}\", \"{}\")", key, value, @@ -321,7 +324,7 @@ mod test { ); // Test existing (exact match) entries - for (constellation, rev, msg) in vec![ + for (constellation, rev, msg) in [ (Constellation::GPS, Version::new(1, 0), NavMsgType::LNAV), (Constellation::GPS, Version::new(2, 0), NavMsgType::LNAV), (Constellation::GPS, Version::new(4, 0), NavMsgType::LNAV), @@ -342,7 +345,7 @@ mod test { (Constellation::BeiDou, Version::new(4, 0), NavMsgType::CNV1), (Constellation::BeiDou, Version::new(4, 0), NavMsgType::CNV2), (Constellation::BeiDou, Version::new(4, 0), NavMsgType::CNV3), - (Constellation::Geo, Version::new(4, 0), NavMsgType::SBAS), + (Constellation::SBAS, Version::new(4, 0), NavMsgType::SBAS), ] { let found = closest_nav_standards(constellation, rev, msg); assert!( @@ -369,7 +372,7 @@ mod test { } // Test cases where the nearest revision is used, not that exact revision - for (constellation, desired, expected, msg) in vec![ + for (constellation, desired, expected, msg) in [ ( Constellation::GPS, Version::new(5, 0), @@ -419,21 +422,21 @@ mod test { #[test] fn test_db_item() { let e = OrbitItem::U8(10); - assert_eq!(e.as_u8().is_some(), true); - assert_eq!(e.as_u32().is_some(), false); + assert!(e.as_u8().is_some()); + assert!(!e.as_u32().is_some()); let u = e.as_u8().unwrap(); assert_eq!(u, 10); let e = OrbitItem::F64(10.0); - assert_eq!(e.as_u8().is_some(), false); - assert_eq!(e.as_u32().is_some(), false); - assert_eq!(e.as_f64().is_some(), true); + assert!(!e.as_u8().is_some()); + assert!(!e.as_u32().is_some()); + assert!(e.as_f64().is_some()); let u = e.as_f64().unwrap(); assert_eq!(u, 10.0_f64); let e = OrbitItem::U32(1); - assert_eq!(e.as_u32().is_some(), true); - assert_eq!(e.as_f64().is_some(), false); + assert!(e.as_u32().is_some()); + assert!(!e.as_f64().is_some()); let u = e.as_u32().unwrap(); assert_eq!(u, 1_u32); } diff --git a/rinex/src/navigation/record.rs b/rinex/src/navigation/record.rs index 6732475d5..026678d0d 100644 --- a/rinex/src/navigation/record.rs +++ b/rinex/src/navigation/record.rs @@ -16,7 +16,7 @@ use crate::Bibliography; fn double_exponent_digits(content: &str) -> String { // replace "eN " with "E+0N" let re = Regex::new(r"e\d{1} ").unwrap(); - let lines = re.replace_all(&content, |caps: &Captures| format!("E+0{}", &caps[0][1..])); + let lines = re.replace_all(content, |caps: &Captures| format!("E+0{}", &caps[0][1..])); // replace "eN" with "E+0N" let re = Regex::new(r"e\d{1}").unwrap(); @@ -225,12 +225,12 @@ pub(crate) fn is_new_epoch(line: &str, v: Version) -> bool { } // rest matches a valid epoch descriptor let datestr = &line[3..22]; - epoch::parse_utc(&datestr).is_ok() + epoch::parse_utc(datestr).is_ok() } else if v.major == 3 { // RINEX V3 if line.len() < 24 { return false; // not enough bytes - // to describe an SVN and an Epoch + // to describe an SV and an Epoch } // 1st entry matches a valid SV description let (sv, _) = line.split_at(4); @@ -239,10 +239,10 @@ pub(crate) fn is_new_epoch(line: &str, v: Version) -> bool { } // rest matches a valid epoch descriptor let datestr = &line[4..23]; - epoch::parse_utc(&datestr).is_ok() + epoch::parse_utc(datestr).is_ok() } else { // Modern --> easy - if let Some(c) = line.chars().nth(0) { + if let Some(c) = line.chars().next() { c == '>' // new epoch marker } else { false @@ -256,7 +256,7 @@ pub(crate) fn parse_epoch( constell: Constellation, content: &str, ) -> Result<(Epoch, NavFrame), Error> { - if content.starts_with(">") { + if content.starts_with('>') { parse_v4_record_entry(content) } else { parse_v2_v3_record_entry(version, constell, content) @@ -282,7 +282,7 @@ fn parse_v4_record_entry(content: &str) -> Result<(Epoch, NavFrame), Error> { let ts = sv .constellation - .to_timescale() + .timescale() .ok_or(Error::TimescaleIdentification(sv))?; let (epoch, fr): (Epoch, NavFrame) = match frame_class { @@ -425,20 +425,20 @@ fn fmt_epoch_v2v3(epoch: &Epoch, data: &Vec, header: &Header) -> Resul if let Some(data) = ephemeris.orbits.get(*key) { lines.push_str(&format!("{} ", data.to_string())); } else { - lines.push_str(&format!(" ")); + lines.push_str(" "); } } - lines.push_str(&format!("\n ")); + lines.push_str("\n "); } else { // last row for (key, _) in chunk { if let Some(data) = ephemeris.orbits.get(*key) { - lines.push_str(&format!("{}", data.to_string())); + lines.push_str(&data.to_string()); } else { - lines.push_str(&format!(" ")); + lines.push_str(" "); } } - lines.push_str("\n"); + lines.push('\n'); } } } @@ -458,7 +458,7 @@ fn fmt_epoch_v4(epoch: &Epoch, data: &Vec, header: &Header) -> Result< // Mixed constellation context // we need to fully describe the vehicle lines.push_str(&sv.to_string()); - lines.push_str(" "); + lines.push(' '); }, Some(_) => { // Unique constellation context: @@ -546,43 +546,43 @@ mod test { // NAV V<3 let line = " 1 20 12 31 23 45 0.0 7.282570004460D-05 0.000000000000D+00 7.380000000000D+04"; - assert_eq!(is_new_epoch(line, Version::new(1, 0)), true); - assert_eq!(is_new_epoch(line, Version::new(2, 0)), true); - assert_eq!(is_new_epoch(line, Version::new(3, 0)), false); - assert_eq!(is_new_epoch(line, Version::new(4, 0)), false); + assert!(is_new_epoch(line, Version::new(1, 0))); + assert!(is_new_epoch(line, Version::new(2, 0))); + assert!(!is_new_epoch(line, Version::new(3, 0))); + assert!(!is_new_epoch(line, Version::new(4, 0))); // NAV V<3 let line = " 2 21 1 1 11 45 0.0 4.610531032090D-04 1.818989403550D-12 4.245000000000D+04"; - assert_eq!(is_new_epoch(line, Version::new(1, 0)), true); - assert_eq!(is_new_epoch(line, Version::new(2, 0)), true); - assert_eq!(is_new_epoch(line, Version::new(3, 0)), false); - assert_eq!(is_new_epoch(line, Version::new(4, 0)), false); + assert!(is_new_epoch(line, Version::new(1, 0))); + assert!(is_new_epoch(line, Version::new(2, 0))); + assert!(!is_new_epoch(line, Version::new(3, 0))); + assert!(!is_new_epoch(line, Version::new(4, 0))); // GPS NAV V<3 let line = " 3 17 1 13 23 59 44.0-1.057861372828D-04-9.094947017729D-13 0.000000000000D+00"; - assert_eq!(is_new_epoch(line, Version::new(1, 0)), true); - assert_eq!(is_new_epoch(line, Version::new(2, 0)), true); - assert_eq!(is_new_epoch(line, Version::new(3, 0)), false); - assert_eq!(is_new_epoch(line, Version::new(4, 0)), false); + assert!(is_new_epoch(line, Version::new(1, 0))); + assert!(is_new_epoch(line, Version::new(2, 0))); + assert!(!is_new_epoch(line, Version::new(3, 0))); + assert!(!is_new_epoch(line, Version::new(4, 0))); // NAV V3 let line = "C05 2021 01 01 00 00 00-4.263372393325e-04-7.525180478751e-11 0.000000000000e+00"; - assert_eq!(is_new_epoch(line, Version::new(1, 0)), false); - assert_eq!(is_new_epoch(line, Version::new(2, 0)), false); - assert_eq!(is_new_epoch(line, Version::new(3, 0)), true); - assert_eq!(is_new_epoch(line, Version::new(4, 0)), false); + assert!(!is_new_epoch(line, Version::new(1, 0))); + assert!(!is_new_epoch(line, Version::new(2, 0))); + assert!(is_new_epoch(line, Version::new(3, 0))); + assert!(!is_new_epoch(line, Version::new(4, 0))); // NAV V3 let line = "R21 2022 01 01 09 15 00-2.666609361768E-04-2.728484105319E-12 5.508000000000E+05"; - assert_eq!(is_new_epoch(line, Version::new(1, 0)), false); - assert_eq!(is_new_epoch(line, Version::new(2, 0)), false); - assert_eq!(is_new_epoch(line, Version::new(3, 0)), true); - assert_eq!(is_new_epoch(line, Version::new(4, 0)), false); + assert!(!is_new_epoch(line, Version::new(1, 0))); + assert!(!is_new_epoch(line, Version::new(2, 0))); + assert!(is_new_epoch(line, Version::new(3, 0))); + assert!(!is_new_epoch(line, Version::new(4, 0))); // NAV V4 let line = "> EPH G02 LNAV"; - assert_eq!(is_new_epoch(line, Version::new(2, 0)), false); - assert_eq!(is_new_epoch(line, Version::new(3, 0)), false); - assert_eq!(is_new_epoch(line, Version::new(4, 0)), true); + assert!(!is_new_epoch(line, Version::new(2, 0))); + assert!(!is_new_epoch(line, Version::new(3, 0))); + assert!(is_new_epoch(line, Version::new(4, 0))); } #[test] fn parse_glonass_v2() { @@ -592,8 +592,10 @@ mod test { 1.292880712890D+04-2.049269676210D+00 0.000000000000D+00 1.000000000000D+00 2.193169775390D+04 1.059645652770D+00-9.313225746150D-10 0.000000000000D+00"; let version = Version::new(2, 0); + assert!(is_new_epoch(content, version)); + let entry = parse_epoch(version, Constellation::Glonass, content); - assert_eq!(entry.is_ok(), true); + assert!(entry.is_ok(), "failed to parse epoch {:?}", entry.err()); let (epoch, frame) = entry.unwrap(); assert_eq!( @@ -602,7 +604,7 @@ mod test { ); let fr = frame.as_eph(); - assert_eq!(fr.is_some(), true); + assert!(fr.is_some()); let (msg_type, sv, ephemeris) = fr.unwrap(); assert_eq!(msg_type, NavMsgType::LNAV); @@ -621,60 +623,60 @@ mod test { for (k, v) in orbits.iter() { if k.eq("satPosX") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -1.488799804690E+03); } else if k.eq("velX") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -2.196182250980E+00); } else if k.eq("accelX") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 3.725290298460E-09); } else if k.eq("health") { let v = v.as_glo_health(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); } else if k.eq("satPosY") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 1.292880712890E+04); } else if k.eq("velY") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -2.049269676210E+00); } else if k.eq("accelY") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.0); } else if k.eq("channel") { let v = v.as_i8(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 1); } else if k.eq("satPosZ") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 2.193169775390E+04); } else if k.eq("velZ") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 1.059645652770E+00); } else if k.eq("accelZ") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -9.313225746150E-10); } else if k.eq("ageOp") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.0); } else { @@ -695,13 +697,13 @@ mod test { .432000000000e+06 .000000000000e+00 0.000000000000e+00 0.000000000000e+00"; let version = Version::new(3, 0); let entry = parse_epoch(version, Constellation::Mixed, content); - assert_eq!(entry.is_ok(), true); + assert!(entry.is_ok()); let (epoch, frame) = entry.unwrap(); assert_eq!(epoch, Epoch::from_str("2021-01-01T00:00:00 BDT").unwrap()); let fr = frame.as_eph(); - assert_eq!(fr.is_some(), true); + assert!(fr.is_some()); let (msg_type, sv, ephemeris) = fr.unwrap(); assert_eq!(msg_type, NavMsgType::LNAV); @@ -720,124 +722,124 @@ mod test { for (k, v) in orbits.iter() { if k.eq("aode") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.100000000000e+01); } else if k.eq("crs") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.118906250000e+02); } else if k.eq("deltaN") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.105325815814e-08); } else if k.eq("m0") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.255139531119e+01); } else if k.eq("cuc") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.169500708580e-06); } else if k.eq("e") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.401772442274e-03); } else if k.eq("cus") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.292365439236e-04); } else if k.eq("sqrta") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.649346986580e+04); } else if k.eq("toe") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.432000000000e+06); } else if k.eq("cic") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.105705112219e-06); } else if k.eq("omega0") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.277512444499e+01); } else if k.eq("cis") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.211410224438e-06); } else if k.eq("i0") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.607169709798e-01); } else if k.eq("crc") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.897671875000e+03); } else if k.eq("omega") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.154887266488e+00); } else if k.eq("omegaDot") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.871464871438e-10); } else if k.eq("idot") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.940753471872e-09); // SPARE } else if k.eq("week") { let v = v.as_u32(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 782); //SPARE } else if k.eq("svAccuracy") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.200000000000e+01); } else if k.eq("satH1") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.000000000000e+00); } else if k.eq("tgd1b1b3") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.599999994133e-09); } else if k.eq("tgd2b2b3") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.900000000000e-08); } else if k.eq("t_tm") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.432000000000e+06); } else if k.eq("aodc") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.000000000000e+00); } else { @@ -858,13 +860,13 @@ mod test { .469330000000e+06 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00"; let version = Version::new(3, 0); let entry = parse_epoch(version, Constellation::Mixed, content); - assert_eq!(entry.is_ok(), true); + assert!(entry.is_ok()); let (epoch, frame) = entry.unwrap(); assert_eq!(epoch, Epoch::from_str("2021-01-01T10:10:00 GST").unwrap(),); let fr = frame.as_eph(); - assert_eq!(fr.is_some(), true); + assert!(fr.is_some()); let (msg_type, sv, ephemeris) = fr.unwrap(); assert_eq!(msg_type, NavMsgType::LNAV); @@ -883,121 +885,121 @@ mod test { for (k, v) in orbits.iter() { if k.eq("iodnav") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.130000000000e+02); } else if k.eq("crs") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.435937500000e+02); } else if k.eq("deltaN") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.261510892978e-08); } else if k.eq("m0") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.142304064404e+00); } else if k.eq("cuc") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.201165676117e-05); } else if k.eq("e") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.226471573114e-03); } else if k.eq("cus") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.109840184450e-04); } else if k.eq("sqrta") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.544061822701e+04); } else if k.eq("toe") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.468600000000e+06); } else if k.eq("cic") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.111758708954e-07); } else if k.eq("omega0") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.313008275208e+01); } else if k.eq("cis") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.409781932831e-07); } else if k.eq("i0") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.980287270202e+00); } else if k.eq("crc") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.113593750000e+03); } else if k.eq("omega") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.276495796017e+00); } else if k.eq("omegaDot") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.518200156545e-08); } else if k.eq("idot") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.595381942905e-09); } else if k.eq("dataSrc") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.258000000000e+03); } else if k.eq("week") { let v = v.as_u32(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 2138); //SPARE } else if k.eq("sisa") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.312000000000e+01); } else if k.eq("health") { let v = v.as_gal_health(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); } else if k.eq("bgdE5aE1") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.232830643654e-09); } else if k.eq("bgdE5bE1") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.000000000000e+00); } else if k.eq("t_tm") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.469330000000e+06); } else { @@ -1014,7 +1016,7 @@ mod test { .214479208984e+05 -.131077289581e+01 -.279396772385e-08 .000000000000e+00"; let version = Version::new(3, 0); let entry = parse_epoch(version, Constellation::Mixed, content); - assert_eq!(entry.is_ok(), true); + assert!(entry.is_ok()); let (epoch, frame) = entry.unwrap(); assert_eq!( epoch, @@ -1022,7 +1024,7 @@ mod test { ); let fr = frame.as_eph(); - assert_eq!(fr.is_some(), true); + assert!(fr.is_some()); let (msg_type, sv, ephemeris) = fr.unwrap(); assert_eq!(msg_type, NavMsgType::LNAV); assert_eq!( @@ -1040,60 +1042,60 @@ mod test { for (k, v) in orbits.iter() { if k.eq("satPosX") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.124900639648e+05); } else if k.eq("velX") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.912527084351e+00); } else if k.eq("accelX") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.000000000000e+00); } else if k.eq("health") { let v = v.as_glo_health(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); } else if k.eq("satPosY") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.595546582031e+04); } else if k.eq("velY") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.278496932983e+01); } else if k.eq("accelY") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.000000000000e+00); } else if k.eq("channel") { let v = v.as_i8(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 5); } else if k.eq("satPosZ") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.214479208984e+05); } else if k.eq("velZ") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.131077289581e+01); } else if k.eq("accelZ") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, -0.279396772385e-08); } else if k.eq("ageOp") { let v = v.as_f64(); - assert_eq!(v.is_some(), true); + assert!(v.is_some()); let v = v.unwrap(); assert_eq!(v, 0.000000000000e+00); } else { @@ -1125,10 +1127,10 @@ impl Merge for Record { /// Merges `rhs` into `Self` fn merge_mut(&mut self, rhs: &Self) -> Result<(), merge::Error> { for (rhs_epoch, rhs_frames) in rhs { - if let Some(frames) = self.get_mut(&rhs_epoch) { + if let Some(frames) = self.get_mut(rhs_epoch) { // this epoch already exists for fr in rhs_frames { - if !frames.contains(&fr) { + if !frames.contains(fr) { frames.push(fr.clone()); // insert new NavFrame } } @@ -1147,7 +1149,7 @@ impl Split for Record { .iter() .flat_map(|(k, v)| { if k < &epoch { - Some((k.clone(), v.clone())) + Some((*k, v.clone())) } else { None } @@ -1157,7 +1159,7 @@ impl Split for Record { .iter() .flat_map(|(k, v)| { if k >= &epoch { - Some((k.clone(), v.clone())) + Some((*k, v.clone())) } else { None } @@ -1184,38 +1186,58 @@ fn mask_mut_equal(rec: &mut Record, target: TargetItem) { rec.retain(|_, frames| { frames.retain(|fr| { if let Some((_, sv, _)) = fr.as_eph() { - filter.contains(&sv) + filter.contains(sv) } else if let Some((_, sv, _)) = fr.as_ion() { - filter.contains(&sv) + filter.contains(sv) } else if let Some((_, sv, _)) = fr.as_eop() { - filter.contains(&sv) + filter.contains(sv) } else if let Some((_, sv, _)) = fr.as_sto() { - filter.contains(&sv) + filter.contains(sv) } else { // non existing false } }); - frames.len() > 0 + !frames.is_empty() }); }, TargetItem::ConstellationItem(filter) => { + let mut broad_sbas_filter = false; + for c in &filter { + broad_sbas_filter |= *c == Constellation::SBAS; + } rec.retain(|_, frames| { frames.retain(|fr| { if let Some((_, sv, _)) = fr.as_eph() { - filter.contains(&sv.constellation) + if broad_sbas_filter { + sv.constellation.is_sbas() || filter.contains(&sv.constellation) + } else { + filter.contains(&sv.constellation) + } } else if let Some((_, sv, _)) = fr.as_ion() { - filter.contains(&sv.constellation) + if broad_sbas_filter { + sv.constellation.is_sbas() || filter.contains(&sv.constellation) + } else { + filter.contains(&sv.constellation) + } } else if let Some((_, sv, _)) = fr.as_eop() { - filter.contains(&sv.constellation) + if broad_sbas_filter { + sv.constellation.is_sbas() || filter.contains(&sv.constellation) + } else { + filter.contains(&sv.constellation) + } } else if let Some((_, sv, _)) = fr.as_sto() { - filter.contains(&sv.constellation) + if broad_sbas_filter { + sv.constellation.is_sbas() || filter.contains(&sv.constellation) + } else { + filter.contains(&sv.constellation) + } } else { // non existing false } }); - frames.len() > 0 + !frames.is_empty() }); }, TargetItem::OrbitItem(_filter) => { @@ -1236,19 +1258,19 @@ fn mask_mut_equal(rec: &mut Record, target: TargetItem) { TargetItem::NavFrameItem(filter) => { rec.retain(|_, frames| { frames.retain(|fr| { - if let Some(_) = fr.as_eph() { + if fr.as_eph().is_some() { filter.contains(&FrameClass::Ephemeris) - } else if let Some(_) = fr.as_eop() { + } else if fr.as_eop().is_some() { filter.contains(&FrameClass::EarthOrientation) - } else if let Some(_) = fr.as_ion() { + } else if fr.as_ion().is_some() { filter.contains(&FrameClass::IonosphericModel) - } else if let Some(_) = fr.as_sto() { + } else if fr.as_sto().is_some() { filter.contains(&FrameClass::SystemTimeOffset) } else { false } }); - frames.len() > 0 + !frames.is_empty() }); }, TargetItem::NavMsgItem(filter) => { @@ -1266,7 +1288,7 @@ fn mask_mut_equal(rec: &mut Record, target: TargetItem) { false } }); - frames.len() > 0 + !frames.is_empty() }); }, _ => {}, // Other items: either not supported, or do not apply @@ -1281,19 +1303,19 @@ fn mask_mut_ineq(rec: &mut Record, target: TargetItem) { rec.retain(|_, frames| { frames.retain(|fr| { if let Some((_, sv, _)) = fr.as_eph() { - !filter.contains(&sv) + !filter.contains(sv) } else if let Some((_, sv, _)) = fr.as_ion() { - !filter.contains(&sv) + !filter.contains(sv) } else if let Some((_, sv, _)) = fr.as_eop() { - !filter.contains(&sv) + !filter.contains(sv) } else if let Some((_, sv, _)) = fr.as_sto() { - !filter.contains(&sv) + !filter.contains(sv) } else { // non existing false } }); - frames.len() > 0 + !frames.is_empty() }); }, TargetItem::ConstellationItem(filter) => { @@ -1312,7 +1334,7 @@ fn mask_mut_ineq(rec: &mut Record, target: TargetItem) { false } }); - frames.len() > 0 + !frames.is_empty() }); }, TargetItem::OrbitItem(_filter) => { @@ -1333,13 +1355,13 @@ fn mask_mut_ineq(rec: &mut Record, target: TargetItem) { TargetItem::NavFrameItem(filter) => { rec.retain(|_, frames| { frames.retain(|fr| { - if let Some(_) = fr.as_eph() { + if fr.as_eph().is_some() { !filter.contains(&FrameClass::Ephemeris) - } else if let Some(_) = fr.as_eop() { + } else if fr.as_eop().is_some() { !filter.contains(&FrameClass::EarthOrientation) - } else if let Some(_) = fr.as_ion() { + } else if fr.as_ion().is_some() { !filter.contains(&FrameClass::IonosphericModel) - } else if let Some(_) = fr.as_sto() { + } else if fr.as_sto().is_some() { !filter.contains(&FrameClass::SystemTimeOffset) } else { false @@ -1525,7 +1547,7 @@ fn mask_mut_gt(rec: &mut Record, target: TargetItem) { false } }); - frames.len() > 0 + !frames.is_empty() }); }, _ => {}, // Other items: either not supported, or do not apply @@ -1579,7 +1601,7 @@ fn mask_mut_geq(rec: &mut Record, target: TargetItem) { false } }); - frames.len() > 0 + !frames.is_empty() }); }, _ => {}, // Other items: either not supported, or do not apply @@ -1788,7 +1810,7 @@ impl Decimate for Record { } fn decimate_match(&self, rhs: &Self) -> Self { let mut s = self.clone(); - s.decimate_match_mut(&rhs); + s.decimate_match_mut(rhs); s } } diff --git a/rinex/src/observable.rs b/rinex/src/observable.rs index 00bfa1801..13890a6e7 100644 --- a/rinex/src/observable.rs +++ b/rinex/src/observable.rs @@ -54,28 +54,16 @@ impl Default for Observable { impl Observable { pub fn is_phase_observable(&self) -> bool { - match self { - Self::Phase(_) => true, - _ => false, - } + matches!(self, Self::Phase(_)) } pub fn is_pseudorange_observable(&self) -> bool { - match self { - Self::PseudoRange(_) => true, - _ => false, - } + matches!(self, Self::PseudoRange(_)) } pub fn is_doppler_observable(&self) -> bool { - match self { - Self::Doppler(_) => true, - _ => false, - } + matches!(self, Self::Doppler(_)) } pub fn is_ssi_observable(&self) -> bool { - match self { - Self::SSI(_) => true, - _ => false, - } + matches!(self, Self::SSI(_)) } pub fn code(&self) -> Option { match self { @@ -228,7 +216,7 @@ impl Observable { _ => None, // invalid: not a pseudo range } }, - Constellation::Geo | Constellation::SBAS(_) => { + Constellation::SBAS => { match self { Self::PseudoRange(code) => { match code.as_ref() { @@ -317,13 +305,13 @@ impl std::str::FromStr for Observable { _ => { let len = content.len(); if len > 1 && len < 4 { - if content.starts_with("L") { + if content.starts_with('L') { Ok(Self::Phase(content.to_string())) - } else if content.starts_with("C") || content.starts_with("P") { + } else if content.starts_with('C') || content.starts_with('P') { Ok(Self::PseudoRange(content.to_string())) - } else if content.starts_with("S") { + } else if content.starts_with('S') { Ok(Self::SSI(content.to_string())) - } else if content.starts_with("D") { + } else if content.starts_with('D') { Ok(Self::Doppler(content.to_string())) } else { Err(ParsingError::UnknownObservable(content.to_string())) diff --git a/rinex/src/observation/mod.rs b/rinex/src/observation/mod.rs index c4f82d7d0..0556e01f4 100644 --- a/rinex/src/observation/mod.rs +++ b/rinex/src/observation/mod.rs @@ -81,9 +81,9 @@ impl std::fmt::Display for Crinex { let version = self.version.to_string(); write!(f, "{: Self { let mut s = self.clone(); - s.time_of_first_obs = Some(epoch); + s.time_of_last_obs = Some(epoch); s } /// Insert a data scaling diff --git a/rinex/src/observation/record.rs b/rinex/src/observation/record.rs index 115bead35..b3f6265c8 100644 --- a/rinex/src/observation/record.rs +++ b/rinex/src/observation/record.rs @@ -50,7 +50,7 @@ bitflags! { } } -#[derive(Copy, Clone, Debug, PartialEq, PartialOrd)] +#[derive(Default, Copy, Clone, Debug, PartialEq, PartialOrd)] #[cfg_attr(feature = "serde", derive(Serialize))] pub struct ObservationData { /// physical measurement @@ -146,7 +146,7 @@ pub(crate) fn is_new_epoch(line: &str, v: Version) -> bool { } else { // Modern RINEX // OBS::V3 behaves like all::V4 - match line.chars().nth(0) { + match line.chars().next() { Some(c) => { c == '>' // epochs always delimited // by this new identifier @@ -156,8 +156,7 @@ pub(crate) fn is_new_epoch(line: &str, v: Version) -> bool { } } -/// Builds `Record` entry for `ObservationData` -/// from given epoch content +/// Builds `Record` entry for `ObservationData` from given epoch content pub(crate) fn parse_epoch( header: &Header, content: &str, @@ -190,13 +189,13 @@ pub(crate) fn parse_epoch( } // V > 2 might start with a ">" marker - if line.starts_with(">") { + if line.starts_with('>') { line = line.split_at(1).1.clone(); } let (date, rem) = line.split_at(offset + 3); let (n_sat, rem) = rem.split_at(3); - let n_sat = u16::from_str_radix(n_sat.trim(), 10)?; + let n_sat = n_sat.trim().parse::()?; let epoch = epoch::parse_in_timescale(date, ts)?; // previously identified observables (that we expect) @@ -259,7 +258,7 @@ pub(crate) fn parse_epoch( return Err(Error::MissingData); } } - parse_v2(&header, &systems, observables, lines) + parse_v2(header, &systems, observables, lines) }, _ => parse_v3(observables, lines), }; @@ -284,9 +283,10 @@ fn parse_v2( let mut obs_ptr = 0; // observable pointer let mut data: BTreeMap> = BTreeMap::new(); let mut inner: HashMap = HashMap::with_capacity(5); - let mut sv: Sv; + let mut sv = Sv::default(); let mut observables: &Vec; - //println!("SYSTEMS \"{}\"", systems); // DEBUG + //println!("{:?}", header_observables); // DEBUG + //println!("\"{}\"", systems); // DEBUG // parse first system we're dealing with if systems.len() < svnn_size { @@ -298,32 +298,51 @@ fn parse_v2( /* * identify 1st system */ - let max = std::cmp::min(svnn_size, systems.len()); // covers epoch with a unique vehicle + let max = std::cmp::min(svnn_size, systems.len()); // for epochs with a single vehicle let system = &systems[0..max]; if let Ok(ssv) = Sv::from_str(system) { sv = ssv; } else { - // mono constellation context - if let Ok(prn) = u8::from_str_radix(system.trim(), 10) { - if let Some(constellation) = header.constellation { - sv = Sv { prn, constellation } - } else { - panic!("faulty RINEX2 constellation /sv definition"); - } - } else { - // can't parse 1st vehicle - return data; + // may fail on omitted X in "XYY", + // mainly on OLD RINEX with mono constellation + match header.constellation { + Some(Constellation::Mixed) => panic!("bad gnss definition"), + Some(c) => { + if let Ok(prn) = system.trim().parse::() { + if let Ok(s) = Sv::from_str(&format!("{}{:02}", c, prn)) { + sv = s; + } else { + return data; + } + } + }, + None => return data, } } sv_ptr += svnn_size; // increment pointer - // grab observables for this vehicle - if let Some(o) = header_observables.get(&sv.constellation) { - observables = &o; - } else { - // failed to identify observations for this vehicle - return data; - } + //println!("\"{}\"={}", system, sv); // DEBUG + + // grab observables for this vehicle + observables = match sv.constellation.is_sbas() { + true => { + if let Some(observables) = header_observables.get(&Constellation::SBAS) { + observables + } else { + // failed to identify observations for this vehicle + return data; + } + }, + false => { + if let Some(observables) = header_observables.get(&sv.constellation) { + observables + } else { + // failed to identify observations for this vehicle + return data; + } + }, + }; + //println!("{:?}", observables); // DEBUG for line in lines { // browse all lines provided @@ -364,11 +383,11 @@ fn parse_v2( //println!("OBS \"{}\"", obs); //DEBUG let mut lli: Option = None; let mut snr: Option = None; - if let Ok(obs) = f64::from_str(obs.trim()) { + if let Ok(obs) = obs.trim().parse::() { // parse obs if slice.len() > 14 { let lli_str = &slice[14..15]; - if let Ok(u) = u8::from_str_radix(lli_str, 10) { + if let Ok(u) = lli_str.parse::() { lli = LliFlags::from_bits(u); } if slice.len() > 15 { @@ -406,30 +425,47 @@ fn parse_v2( let start = sv_ptr; let end = std::cmp::min(sv_ptr + svnn_size, systems.len()); // trimed epoch description let system = &systems[start..end]; - //println!("NEW SYSTEM \"{}\"\n", system); //DEBUG - if let Ok(ssv) = Sv::from_str(system) { - sv = ssv; + if let Ok(s) = Sv::from_str(system) { + sv = s; } else { - // mono constellation context - if let Ok(prn) = u8::from_str_radix(system.trim(), 10) { - if let Some(constellation) = header.constellation { - sv = Sv { prn, constellation } - } else { - panic!("faulty RINEX2 constellation /sv definition"); - } - } else { - // can't parse vehicle - return data; + // may fail on omitted X in "XYY", + // mainly on OLD RINEX with mono constellation + match header.constellation { + Some(c) => { + if let Ok(prn) = system.trim().parse::() { + if let Ok(s) = Sv::from_str(&format!("{}{:02}", c, prn)) { + sv = s; + } else { + return data; + } + } + }, + _ => unreachable!(), } } + //println!("\"{}\"={}", system, sv); //DEBUG sv_ptr += svnn_size; // increment pointer - // grab observables for this vehicle - if let Some(o) = header_observables.get(&sv.constellation) { - observables = &o; - } else { - // failed to identify observations for this vehicle - return data; - } + + // grab observables for this vehicle + observables = match sv.constellation.is_sbas() { + true => { + if let Some(observables) = header_observables.get(&Constellation::SBAS) { + observables + } else { + // failed to identify observations for this vehicle + return data; + } + }, + false => { + if let Some(observables) = header_observables.get(&sv.constellation) { + observables + } else { + // failed to identify observations for this vehicle + return data; + } + }, + }; + //println!("{:?}", observables); // DEBUG } } // for all lines provided data @@ -452,11 +488,14 @@ fn parse_v3( //println!("parse_v3: \"{}\"", line); //DEBUG let (sv, line) = line.split_at(svnn_size); if let Ok(sv) = Sv::from_str(sv) { - //println!("SV: \"{}\"", sv); //DEBUG - if let Some(obscodes) = observables.get(&sv.constellation) { + let obscodes = match sv.constellation.is_sbas() { + true => observables.get(&Constellation::SBAS), + false => observables.get(&sv.constellation), + }; + //println!("SV: {} OBSERVABLES: {:?}", sv, obscodes); // DEBUG + if let Some(obscodes) = obscodes { let nb_obs = line.len() / observable_width; inner.clear(); - //println!("NB OBS: {}", nb_obs); //DEBUG let mut rem = line; for i in 0..nb_obs { if i == obscodes.len() { @@ -492,7 +531,27 @@ fn parse_v3( inner.insert(obscodes[i].clone(), ObservationData { obs, lli, snr }); } } - if inner.len() > 0 { + if rem.len() >= observable_width - 2 { + let mut snr: Option = None; + let mut lli: Option = None; + let obs = &rem[0..observable_width - 2]; + if let Ok(obs) = obs.trim().parse::() { + if rem.len() > observable_width - 2 { + let lli_str = &rem[observable_width - 2..observable_width - 1]; + if let Ok(u) = lli_str.parse::() { + lli = LliFlags::from_bits(u); + if rem.len() > observable_width - 1 { + let snr_str = &rem[observable_width - 1..]; + if let Ok(s) = Snr::from_str(snr_str) { + snr = Some(s); + } + } + } + } + inner.insert(obscodes[nb_obs].clone(), ObservationData { obs, lli, snr }); + } + } + if !inner.is_empty() { data.insert(sv, inner.clone()); } } //got some observables to work with @@ -536,29 +595,33 @@ fn fmt_epoch_v3( lines.push_str(&format!("{:13.4}", data)); } - lines.push_str("\n"); + lines.push('\n'); for (sv, data) in data.iter() { - lines.push_str(&format!("{}", sv.to_string())); - if let Some(observables) = observables.get(&sv.constellation) { + lines.push_str(&format!("{:x}", sv)); + let observables = match sv.constellation.is_sbas() { + true => observables.get(&Constellation::SBAS), + false => observables.get(&sv.constellation), + }; + if let Some(observables) = observables { for observable in observables { if let Some(observation) = data.get(observable) { lines.push_str(&format!("{:14.3}", observation.obs)); if let Some(flag) = observation.lli { lines.push_str(&format!("{}", flag.bits())); } else { - lines.push_str(" "); + lines.push(' '); } if let Some(flag) = observation.snr { lines.push_str(&format!("{:x}", flag)); } else { - lines.push_str(" "); + lines.push(' '); } } else { - lines.push_str(&format!(" ")); + lines.push_str(" "); } } } - lines.push_str("\n"); + lines.push('\n'); } lines } @@ -590,9 +653,9 @@ fn fmt_epoch_v2( lines.push_str(&format!(" {:9.1}", data)); } } - lines.push_str(&format!("\n ")); + lines.push_str("\n "); } - lines.push_str(&sv.to_string()); + lines.push_str(&format!("{:x}", sv)); index += 1; } let obs_per_line = 5; @@ -600,10 +663,14 @@ fn fmt_epoch_v2( for (sv, observations) in data.iter() { // follow list of observables, as described in header section // for given constellation - if let Some(observables) = observables.get(&sv.constellation) { + let observables = match sv.constellation.is_sbas() { + true => observables.get(&Constellation::SBAS), + false => observables.get(&sv.constellation), + }; + if let Some(observables) = observables { for (obs_index, observable) in observables.iter().enumerate() { if obs_index % obs_per_line == 0 { - lines.push_str("\n"); + lines.push('\n'); } if let Some(observation) = observations.get(observable) { let formatted_obs = format!("{:14.3}", observation.obs); @@ -626,7 +693,7 @@ fn fmt_epoch_v2( } } } - lines.push_str("\n"); + lines.push('\n'); lines } @@ -653,7 +720,7 @@ impl Merge for Record { *data = *rhs_data; // overwrite } else { // new observation: insert it - observations.insert(rhs_observable.clone(), rhs_data.clone()); + observations.insert(rhs_observable.clone(), *rhs_data); } } } else { @@ -676,7 +743,7 @@ impl Split for Record { .iter() .flat_map(|(k, v)| { if k.0 < epoch { - Some((k.clone(), v.clone())) + Some((*k, v.clone())) } else { None } @@ -686,7 +753,7 @@ impl Split for Record { .iter() .flat_map(|(k, v)| { if k.0 >= epoch { - Some((k.clone(), v.clone())) + Some((*k, v.clone())) } else { None } @@ -762,8 +829,8 @@ impl Smooth for Record { let phase_data = ph_data.unwrap(); - if let Some(data) = buffer.get_mut(&sv) { - if let Some((n, prev_result, prev_phase)) = data.get_mut(&pr_observable) { + if let Some(data) = buffer.get_mut(sv) { + if let Some((n, prev_result, prev_phase)) = data.get_mut(pr_observable) { let delta_phase = phase_data - *prev_phase; // implement corrector equation pr_observation.obs = 1.0 / *n * pr_observation.obs @@ -821,24 +888,34 @@ impl Mask for Record { self.retain(|_, (clk, _)| clk.is_some()); }, TargetItem::ConstellationItem(constells) => { + let mut broad_sbas_filter = false; + for c in &constells { + broad_sbas_filter |= *c == Constellation::SBAS; + } self.retain(|_, (_, svs)| { - svs.retain(|sv, _| constells.contains(&sv.constellation)); - svs.len() > 0 + svs.retain(|sv, _| { + if broad_sbas_filter { + sv.constellation.is_sbas() || constells.contains(&sv.constellation) + } else { + constells.contains(&sv.constellation) + } + }); + !svs.is_empty() }); }, TargetItem::SvItem(items) => { self.retain(|_, (_, svs)| { - svs.retain(|sv, _| items.contains(&sv)); - svs.len() > 0 + svs.retain(|sv, _| items.contains(sv)); + !svs.is_empty() }); }, TargetItem::ObservableItem(filter) => { self.retain(|_, (_, svs)| { svs.retain(|_, obs| { - obs.retain(|code, _| filter.contains(&code)); - obs.len() > 0 + obs.retain(|code, _| filter.contains(code)); + !obs.is_empty() }); - svs.len() > 0 + !svs.is_empty() }); }, TargetItem::SnrItem(filter) => { @@ -852,9 +929,9 @@ impl Mask for Record { false // no snr: drop out } }); - obs.len() > 0 + !obs.is_empty() }); - svs.len() > 0 + !svs.is_empty() }); }, _ => {}, @@ -868,22 +945,22 @@ impl Mask for Record { TargetItem::ConstellationItem(constells) => { self.retain(|_, (_, svs)| { svs.retain(|sv, _| !constells.contains(&sv.constellation)); - svs.len() > 0 + !svs.is_empty() }); }, TargetItem::SvItem(items) => { self.retain(|_, (_, svs)| { - svs.retain(|sv, _| !items.contains(&sv)); - svs.len() > 0 + svs.retain(|sv, _| !items.contains(sv)); + !svs.is_empty() }); }, TargetItem::ObservableItem(filter) => { self.retain(|_, (_, svs)| { svs.retain(|_, obs| { - obs.retain(|code, _| !filter.contains(&code)); - obs.len() > 0 + obs.retain(|code, _| !filter.contains(code)); + !obs.is_empty() }); - svs.len() > 0 + !svs.is_empty() }); }, _ => {}, @@ -903,7 +980,7 @@ impl Mask for Record { } retain }); - svs.len() > 0 + !svs.is_empty() }); }, TargetItem::SnrItem(filter) => { @@ -917,9 +994,9 @@ impl Mask for Record { false // no snr: drop out } }); - obs.len() > 0 + !obs.is_empty() }); - svs.len() > 0 + !svs.is_empty() }); }, _ => {}, @@ -939,7 +1016,7 @@ impl Mask for Record { } retain }); - svs.len() > 0 + !svs.is_empty() }); }, TargetItem::SnrItem(filter) => { @@ -953,9 +1030,9 @@ impl Mask for Record { false // no snr: drop out } }); - obs.len() > 0 + !obs.is_empty() }); - svs.len() > 0 + !svs.is_empty() }); }, _ => {}, @@ -975,7 +1052,7 @@ impl Mask for Record { } retain }); - svs.len() > 0 + !svs.is_empty() }); }, TargetItem::SnrItem(filter) => { @@ -989,9 +1066,9 @@ impl Mask for Record { false // no snr: drop out } }); - obs.len() > 0 + !obs.is_empty() }); - svs.len() > 0 + !svs.is_empty() }); }, _ => {}, @@ -1011,7 +1088,7 @@ impl Mask for Record { } retain }); - svs.len() > 0 + !svs.is_empty() }); }, TargetItem::SnrItem(filter) => { @@ -1025,9 +1102,9 @@ impl Mask for Record { false // no snr: drop out } }); - obs.len() > 0 + !obs.is_empty() }); - svs.len() > 0 + !svs.is_empty() }); }, _ => {}, @@ -1254,7 +1331,7 @@ impl Decimate for Record { } fn decimate_match(&self, rhs: &Self) -> Self { let mut s = self.clone(); - s.decimate_match_mut(&rhs); + s.decimate_match_mut(rhs); s } } @@ -1318,7 +1395,7 @@ impl Combine for Record { if let Some(data) = ret.get_mut(&(lhs_observable.clone(), ref_observable.clone())) { - if let Some(data) = data.get_mut(&sv) { + if let Some(data) = data.get_mut(sv) { data.insert(*epoch, gf); } else { let mut bmap: BTreeMap<(Epoch, EpochFlag), f64> = BTreeMap::new(); @@ -1328,7 +1405,7 @@ impl Combine for Record { } else { // new combination let mut inject = true; // insert only if not already combined to some other signal - for ((lhs, rhs), _) in &ret { + for (lhs, rhs) in ret.keys() { if lhs == lhs_observable { inject = false; break; @@ -1408,7 +1485,7 @@ impl Combine for Record { if let Some(data) = ret.get_mut(&(lhs_observable.clone(), ref_observable.clone())) { - if let Some(data) = data.get_mut(&sv) { + if let Some(data) = data.get_mut(sv) { data.insert(*epoch, gf); } else { let mut bmap: BTreeMap<(Epoch, EpochFlag), f64> = BTreeMap::new(); @@ -1418,7 +1495,7 @@ impl Combine for Record { } else { // new combination let mut inject = true; // insert only if not already combined to some other signal - for ((lhs, rhs), _) in &ret { + for (lhs, rhs) in ret.keys() { if lhs == lhs_observable { inject = false; break; @@ -1504,7 +1581,7 @@ impl Combine for Record { if let Some(data) = ret.get_mut(&(lhs_observable.clone(), ref_observable.clone())) { - if let Some(data) = data.get_mut(&sv) { + if let Some(data) = data.get_mut(sv) { data.insert(*epoch, yp); } else { let mut bmap: BTreeMap<(Epoch, EpochFlag), f64> = BTreeMap::new(); @@ -1514,7 +1591,7 @@ impl Combine for Record { } else { // new combination let mut inject = true; // insert only if not already combined to some other signal - for ((lhs, rhs), _) in &ret { + for (lhs, rhs) in ret.keys() { if lhs == lhs_observable { inject = false; break; @@ -1610,7 +1687,7 @@ impl Combine for Record { if let Some(data) = ret.get_mut(&(lhs_observable.clone(), ref_observable.clone())) { - if let Some(data) = data.get_mut(&sv) { + if let Some(data) = data.get_mut(sv) { data.insert(*epoch, gf); } else { let mut bmap: BTreeMap<(Epoch, EpochFlag), f64> = BTreeMap::new(); @@ -1620,7 +1697,7 @@ impl Combine for Record { } else { // new combination let mut inject = true; // insert only if not already combined to some other signal - for ((lhs, rhs), _) in &ret { + for (lhs, rhs) in ret.keys() { if lhs == lhs_observable { inject = false; break; @@ -1691,11 +1768,11 @@ impl Dcb for Record { // determine this code's role in the diff op // so it remains consistent - let items: Vec<&str> = op.split("-").collect(); + let items: Vec<&str> = op.split('-').collect(); if lhs_code == items[0] { // code is differenced - if let Some(data) = vehicles.get_mut(&sv) { + if let Some(data) = vehicles.get_mut(sv) { data.insert( *epoch, lhs_observation.obs - rhs_observation.obs, @@ -1713,7 +1790,7 @@ impl Dcb for Record { } } else { // code is refered to - if let Some(data) = vehicles.get_mut(&sv) { + if let Some(data) = vehicles.get_mut(sv) { data.insert( *epoch, rhs_observation.obs - lhs_observation.obs, @@ -1821,54 +1898,33 @@ mod test { use super::*; #[test] fn obs_record_is_new_epoch() { - assert_eq!( - is_new_epoch( - "95 01 01 00 00 00.0000000 0 7 06 17 21 22 23 28 31", - Version { major: 2, minor: 0 } - ), - true - ); - assert_eq!( - is_new_epoch( - "21700656.31447 16909599.97044 .00041 24479973.67844 24479975.23247", - Version { major: 2, minor: 0 } - ), - false - ); - assert_eq!( - is_new_epoch( - "95 01 01 11 00 00.0000000 0 8 04 16 18 19 22 24 27 29", - Version { major: 2, minor: 0 } - ), - true - ); - assert_eq!( - is_new_epoch( - "95 01 01 11 00 00.0000000 0 8 04 16 18 19 22 24 27 29", - Version { major: 3, minor: 0 } - ), - false - ); - assert_eq!( - is_new_epoch( - "> 2022 01 09 00 00 30.0000000 0 40", - Version { major: 3, minor: 0 } - ), - true - ); - assert_eq!( - is_new_epoch( - "> 2022 01 09 00 00 30.0000000 0 40", - Version { major: 2, minor: 0 } - ), - false - ); - assert_eq!( - is_new_epoch( - "G01 22331467.880 117352685.28208 48.950 22331469.28", - Version { major: 3, minor: 0 } - ), - false - ); + assert!(is_new_epoch( + "95 01 01 00 00 00.0000000 0 7 06 17 21 22 23 28 31", + Version { major: 2, minor: 0 } + )); + assert!(!is_new_epoch( + "21700656.31447 16909599.97044 .00041 24479973.67844 24479975.23247", + Version { major: 2, minor: 0 } + )); + assert!(is_new_epoch( + "95 01 01 11 00 00.0000000 0 8 04 16 18 19 22 24 27 29", + Version { major: 2, minor: 0 } + )); + assert!(!is_new_epoch( + "95 01 01 11 00 00.0000000 0 8 04 16 18 19 22 24 27 29", + Version { major: 3, minor: 0 } + )); + assert!(is_new_epoch( + "> 2022 01 09 00 00 30.0000000 0 40", + Version { major: 3, minor: 0 } + )); + assert!(!is_new_epoch( + "> 2022 01 09 00 00 30.0000000 0 40", + Version { major: 2, minor: 0 } + )); + assert!(!is_new_epoch( + "G01 22331467.880 117352685.28208 48.950 22331469.28", + Version { major: 3, minor: 0 } + )); } } diff --git a/rinex/src/observation/snr.rs b/rinex/src/observation/snr.rs index 8d95fee0c..b5f3b707c 100644 --- a/rinex/src/observation/snr.rs +++ b/rinex/src/observation/snr.rs @@ -1,6 +1,6 @@ use std::str::FromStr; -#[derive(Debug, Clone)] +#[derive(PartialEq, Debug, Clone)] pub enum Error { InvalidSnrCode, } @@ -83,14 +83,53 @@ impl FromStr for Snr { "7" => Ok(Snr::DbHz42_47), "8" => Ok(Snr::DbHz48_53), "9" => Ok(Snr::DbHz54), + "bad" => Ok(Snr::DbHz18_23), + "weak" => Ok(Snr::DbHz24_29), + "strong" => Ok(Snr::DbHz30_35), + "excellent" => Ok(Snr::DbHz48_53), _ => Err(Error::InvalidSnrCode), } } } impl From for Snr { - fn from(f: f64) -> Self { - Self::from(f as u8) + fn from(f_db: f64) -> Self { + if f_db < 12.0 { + Self::DbHz12 + } else if f_db <= 17.0 { + Self::DbHz12_17 + } else if f_db <= 23.0 { + Self::DbHz18_23 + } else if f_db <= 29.0 { + Self::DbHz24_29 + } else if f_db <= 35.0 { + Self::DbHz30_35 + } else if f_db <= 41.0 { + Self::DbHz36_41 + } else if f_db <= 47.0 { + Self::DbHz42_47 + } else if f_db <= 53.0 { + Self::DbHz48_53 + } else { + Self::DbHz54 + } + } +} + +impl From for f64 { + fn from(val: Snr) -> Self { + match val { + Snr::DbHz0 => 0.0_f64, + Snr::DbHz12 => 12.0_f64, + Snr::DbHz12_17 => 17.0_f64, + Snr::DbHz18_23 => 23.0_f64, + Snr::DbHz24_29 => 29.0_f64, + Snr::DbHz30_35 => 35.0_f64, + Snr::DbHz36_41 => 41.0_f64, + Snr::DbHz42_47 => 47.0_f64, + Snr::DbHz48_53 => 53.0_f64, + Snr::DbHz54 => 54.0_f64, + } } } @@ -121,14 +160,6 @@ impl From for Snr { } impl Snr { - pub fn new(quality: &str) -> Self { - match quality.trim() { - "excellent" => Self::DbHz42_47, - "strong" => Self::DbHz30_35, - "weak" => Self::DbHz24_29, - _ => Self::DbHz18_23, - } - } /// Returns true if self describes a bad signal level pub fn bad(self) -> bool { self <= Snr::DbHz18_23 @@ -150,6 +181,7 @@ impl Snr { #[cfg(test)] mod test { use super::*; + use std::str::FromStr; #[test] fn observation_snr() { let snr = Snr::from_str("0").unwrap(); @@ -176,9 +208,14 @@ mod test { assert_eq!(snr, Snr::DbHz12); assert!(snr.bad()); - assert_eq!(Snr::new("excellent"), Snr::DbHz42_47); - assert_eq!(Snr::new("strong"), Snr::DbHz30_35); - assert_eq!(Snr::new("weak"), Snr::DbHz24_29); - assert_eq!(Snr::new("bad"), Snr::DbHz18_23); + assert_eq!(Snr::from_str("excellent"), Ok(Snr::DbHz48_53)); + assert_eq!(Snr::from_str("strong"), Ok(Snr::DbHz30_35)); + assert_eq!(Snr::from_str("weak"), Ok(Snr::DbHz24_29)); + assert_eq!(Snr::from_str("bad"), Ok(Snr::DbHz18_23)); + + assert!(Snr::from_str("bad").unwrap().bad()); + assert!(Snr::from_str("weak").unwrap().weak()); + assert!(Snr::from_str("strong").unwrap().strong()); + assert!(Snr::from_str("excellent").unwrap().excellent()); } } diff --git a/rinex/src/record.rs b/rinex/src/record.rs index 3034ad4f2..c7f52876a 100644 --- a/rinex/src/record.rs +++ b/rinex/src/record.rs @@ -7,8 +7,9 @@ use serde::Serialize; use super::{ antex, clocks, + clocks::{ClockData, ClockDataType}, hatanaka::{Compressor, Decompressor}, - header, ionex, is_comment, merge, + header, ionex, is_rinex_comment, merge, merge::Merge, meteo, navigation, observation, reader::BufferedReader, @@ -145,11 +146,11 @@ impl Record { Type::ObservationData => { let record = self.as_obs().unwrap(); let obs_fields = &header.obs.as_ref().unwrap(); - let mut compressor = Compressor::new(); + let mut compressor = Compressor::default(); for ((epoch, flag), (clock_offset, data)) in record.iter() { let epoch = observation::record::fmt_epoch(*epoch, *flag, clock_offset, data, header); - if let Some(_) = &obs_fields.crinex { + if obs_fields.crinex.is_some() { let major = header.version.major; let constell = &header.constellation.as_ref().unwrap(); for line in epoch.lines() { @@ -184,38 +185,38 @@ impl Record { } }, Type::IonosphereMaps => { - if let Some(r) = self.as_ionex() { - for (index, (epoch, (_map, _, _))) in r.iter().enumerate() { - let _ = write!(writer, "{:6} START OF TEC MAP", index); - let _ = write!( - writer, - "{} EPOCH OF CURRENT MAP", - epoch::format(*epoch, None, Type::IonosphereMaps, 1) - ); - let _ = write!(writer, "{:6} END OF TEC MAP", index); - } - /* - * not efficient browsing, but matches provided examples and common formatting. - * RMS and Height maps are passed after TEC maps. - */ - for (index, (epoch, (_, _map, _))) in r.iter().enumerate() { - let _ = write!(writer, "{:6} START OF RMS MAP", index); - let _ = write!( - writer, - "{} EPOCH OF CURRENT MAP", - epoch::format(*epoch, None, Type::IonosphereMaps, 1) - ); - let _ = write!(writer, "{:6} END OF RMS MAP", index); - } - for (index, (epoch, (_, _, _map))) in r.iter().enumerate() { - let _ = write!(writer, "{:6} START OF HEIGHT MAP", index); - let _ = write!( - writer, - "{} EPOCH OF CURRENT MAP", - epoch::format(*epoch, None, Type::IonosphereMaps, 1) - ); - let _ = write!(writer, "{:6} END OF HEIGHT MAP", index); - } + if let Some(_r) = self.as_ionex() { + //for (index, (epoch, (_map, _, _))) in r.iter().enumerate() { + // let _ = write!(writer, "{:6} START OF TEC MAP", index); + // let _ = write!( + // writer, + // "{} EPOCH OF CURRENT MAP", + // epoch::format(*epoch, None, Type::IonosphereMaps, 1) + // ); + // let _ = write!(writer, "{:6} END OF TEC MAP", index); + //} + // /* + // * not efficient browsing, but matches provided examples and common formatting. + // * RMS and Height maps are passed after TEC maps. + // */ + //for (index, (epoch, (_, _map, _))) in r.iter().enumerate() { + // let _ = write!(writer, "{:6} START OF RMS MAP", index); + // let _ = write!( + // writer, + // "{} EPOCH OF CURRENT MAP", + // epoch::format(*epoch, None, Type::IonosphereMaps, 1) + // ); + // let _ = write!(writer, "{:6} END OF RMS MAP", index); + //} + //for (index, (epoch, (_, _, _map))) in r.iter().enumerate() { + // let _ = write!(writer, "{:6} START OF HEIGHT MAP", index); + // let _ = write!( + // writer, + // "{} EPOCH OF CURRENT MAP", + // epoch::format(*epoch, None, Type::IonosphereMaps, 1) + // ); + // let _ = write!(writer, "{:6} END OF HEIGHT MAP", index); + //} } }, _ => panic!("record type not supported yet"), @@ -249,13 +250,15 @@ pub enum Error { /// Returns true if given line matches the start /// of a new epoch, inside a RINEX record. pub fn is_new_epoch(line: &str, header: &header::Header) -> bool { - if is_comment!(line) { + if is_rinex_comment(line) { return false; } match &header.rinex_type { Type::AntennaData => antex::record::is_new_epoch(line), Type::ClockData => clocks::record::is_new_epoch(line), - Type::IonosphereMaps => ionex::record::is_new_map(line), + Type::IonosphereMaps => { + ionex::record::is_new_tec_plane(line) || ionex::record::is_new_rms_plane(line) + }, Type::NavigationData => navigation::record::is_new_epoch(line, header.version), Type::ObservationData => observation::record::is_new_epoch(line, header.version), Type::MeteoData => meteo::record::is_new_epoch(line, header.version), @@ -300,7 +303,7 @@ pub fn parse_record( }, Some(constellation) => { obs_ts = constellation - .to_timescale() + .timescale() .ok_or(Error::ObservationDataTimescaleIdentification)?; }, } @@ -310,12 +313,8 @@ pub fn parse_record( // but others may exist: // in this case we used the previously identified Epoch // and attach other kinds of maps - let mut ionx_rms = false; - let mut ionx_height = false; let mut ionx_rec = ionex::Record::new(); - // we need to store encountered epochs, to relate RMS and H maps - // that might be provided in a separate sequence - let mut ionx_epochs: Vec = Vec::with_capacity(128); + let mut ionex_rms_plane = false; for l in reader.lines() { // iterates one line at a time @@ -323,7 +322,7 @@ pub fn parse_record( // COMMENTS special case // --> store // ---> append later with epoch.timestamp attached to it - if is_comment!(line) { + if is_rinex_comment(&line) { let comment = line.split_at(60).0.trim_end(); comment_content.push(comment.to_string()); continue; @@ -333,7 +332,7 @@ pub fn parse_record( if line.contains("EXPONENT") { if let Some(ionex) = header.ionex.as_mut() { let content = line.split_at(60).0; - if let Ok(e) = i8::from_str_radix(content.trim(), 10) { + if let Ok(e) = content.trim().parse::() { *ionex = ionex.with_exponent(e); // scaling update } } @@ -367,7 +366,7 @@ pub fn parse_record( /* * RINEX */ - if line.len() == 0 { + if line.is_empty() { // we might encounter empty lines // and the following parsers (.lines() iterator) // do not like it @@ -380,7 +379,7 @@ pub fn parse_record( /* * RINEX */ - if line.len() == 0 { + if line.is_empty() { // we might encounter empty lines // and the following parsers (.lines() iterator) // do not like it @@ -393,9 +392,8 @@ pub fn parse_record( for line in content.lines() { // in case of CRINEX -> RINEX < 3 being recovered, // we have more than 1 ligne to process - let new_epoch = is_new_epoch(line, &header); - ionx_rms |= ionex::record::is_new_rms_map(line); - ionx_height |= ionex::record::is_new_height_map(line); + let new_epoch = is_new_epoch(line, header); + ionex_rms_plane = ionex::record::is_new_rms_plane(line); if new_epoch && !first_epoch { match &header.rinex_type { @@ -410,21 +408,21 @@ pub fn parse_record( .entry(e) .and_modify(|frames| frames.push(fr.clone())) .or_insert_with(|| vec![fr.clone()]); - comment_ts = e.clone(); // for comments classification & management + comment_ts = e; // for comments classification & management } }, Type::ObservationData => { if let Ok((e, ck_offset, map)) = - observation::record::parse_epoch(&header, &epoch_content, obs_ts) + observation::record::parse_epoch(header, &epoch_content, obs_ts) { obs_rec.insert(e, (ck_offset, map)); - comment_ts = e.0.clone(); // for comments classification & management + comment_ts = e.0; // for comments classification & management } }, Type::MeteoData => { - if let Ok((e, map)) = meteo::record::parse_epoch(&header, &epoch_content) { + if let Ok((e, map)) = meteo::record::parse_epoch(header, &epoch_content) { met_rec.insert(e, map); - comment_ts = e.clone(); // for comments classification & management + comment_ts = e; // for comments classification & management } }, Type::ClockData => { @@ -436,24 +434,23 @@ pub fn parse_record( d.insert(system, data); } else { // --> new system entry for this `epoch` - let mut inner: HashMap = + let mut inner: HashMap = HashMap::new(); inner.insert(system, data); e.insert(dtype, inner); } } else { // --> new epoch entry - let mut inner: HashMap = - HashMap::new(); + let mut inner: HashMap = HashMap::new(); inner.insert(system, data); let mut map: HashMap< - clocks::DataType, - HashMap, + ClockDataType, + HashMap, > = HashMap::new(); map.insert(dtype, inner); clk_rec.insert(epoch, map); } - comment_ts = epoch.clone(); // for comments classification & management + comment_ts = epoch; // for comments classification & management } }, Type::AntennaData => { @@ -476,31 +473,31 @@ pub fn parse_record( } }, Type::IonosphereMaps => { - if let Ok((index, epoch, map)) = - ionex::record::parse_map(header, &epoch_content) + if let Ok((epoch, altitude, plane)) = + ionex::record::parse_plane(&epoch_content, header, ionex_rms_plane) { - if ionx_rms { - ionx_rms = false; - if let Some(e) = ionx_epochs.get(index) { - // relate - if let Some((_, rms, _)) = ionx_rec.get_mut(e) { - // locate - *rms = Some(map); // insert + if ionex_rms_plane { + if let Some(rec_plane) = ionx_rec.get_mut(&(epoch, altitude)) { + // provide RMS value for the entire plane + for ((_, rec_tec), (_, tec)) in + rec_plane.iter_mut().zip(plane.iter()) + { + rec_tec.rms = tec.rms; } + } else { + // insert RMS values + ionx_rec.insert((epoch, altitude), plane); } - } else if ionx_height { - ionx_height = false; - if let Some(e) = ionx_epochs.get(index) { - // relate - if let Some((_, _, h)) = ionx_rec.get_mut(e) { - // locate - *h = Some(map); // insert - } + } else if let Some(rec_plane) = ionx_rec.get_mut(&(epoch, altitude)) { + // provide TEC value for the entire plane + for ((_, rec_tec), (_, tec)) in + rec_plane.iter_mut().zip(plane.iter()) + { + rec_tec.tec = tec.tec; } } else { - // TEC map => insert epoch - ionx_epochs.push(epoch.clone()); - ionx_rec.insert(epoch, (map, None, None)); + // insert TEC values + ionx_rec.insert((epoch, altitude), plane); } } }, @@ -538,21 +535,21 @@ pub fn parse_record( .entry(e) .and_modify(|current| current.push(fr.clone())) .or_insert_with(|| vec![fr.clone()]); - comment_ts = e.clone(); // for comments classification & management + comment_ts = e; // for comments classification & management } }, Type::ObservationData => { if let Ok((e, ck_offset, map)) = - observation::record::parse_epoch(&header, &epoch_content, obs_ts) + observation::record::parse_epoch(header, &epoch_content, obs_ts) { obs_rec.insert(e, (ck_offset, map)); - comment_ts = e.0.clone(); // for comments classification + management + comment_ts = e.0; // for comments classification + management } }, Type::MeteoData => { - if let Ok((e, map)) = meteo::record::parse_epoch(&header, &epoch_content) { + if let Ok((e, map)) = meteo::record::parse_epoch(header, &epoch_content) { met_rec.insert(e, map); - comment_ts = e.clone(); // for comments classification + management + comment_ts = e; // for comments classification + management } }, Type::ClockData => { @@ -569,46 +566,47 @@ pub fn parse_record( } else { // --> new system entry for this `epoch` let mut map: HashMap< - clocks::DataType, - HashMap, + ClockDataType, + HashMap, > = HashMap::new(); - let mut inner: HashMap = HashMap::new(); + let mut inner: HashMap = HashMap::new(); inner.insert(system, data); map.insert(dtype, inner); } } else { // --> new epoch entry - let mut map: HashMap> = + let mut map: HashMap> = HashMap::new(); - let mut inner: HashMap = HashMap::new(); + let mut inner: HashMap = HashMap::new(); inner.insert(system, data); map.insert(dtype, inner); clk_rec.insert(e, map); } - comment_ts = e.clone(); // for comments classification & management + comment_ts = e; // for comments classification & management } }, Type::IonosphereMaps => { - if let Ok((index, epoch, map)) = ionex::record::parse_map(header, &epoch_content) { - if ionx_rms { - if let Some(e) = ionx_epochs.get(index) { - // relate - if let Some((_, rms, _)) = ionx_rec.get_mut(e) { - // locate - *rms = Some(map); // insert + if let Ok((epoch, altitude, plane)) = + ionex::record::parse_plane(&epoch_content, header, ionex_rms_plane) + { + if ionex_rms_plane { + if let Some(rec_plane) = ionx_rec.get_mut(&(epoch, altitude)) { + // provide RMS value for the entire plane + for ((_, rec_tec), (_, tec)) in rec_plane.iter_mut().zip(plane.iter()) { + rec_tec.rms = tec.rms; } + } else { + // insert RMS values + ionx_rec.insert((epoch, altitude), plane); } - } else if ionx_height { - if let Some(e) = ionx_epochs.get(index) { - // relate - if let Some((_, _, h)) = ionx_rec.get_mut(e) { - // locate - *h = Some(map); // insert - } + } else if let Some(rec_plane) = ionx_rec.get_mut(&(epoch, altitude)) { + // provide TEC value for the entire plane + for ((_, rec_tec), (_, tec)) in rec_plane.iter_mut().zip(plane.iter()) { + rec_tec.tec = tec.tec; } } else { - // introduce TEC+epoch - ionx_rec.insert(epoch, (map, None, None)); + // insert TEC values + ionx_rec.insert((epoch, altitude), plane); } } }, @@ -657,15 +655,15 @@ impl Merge for Record { fn merge_mut(&mut self, rhs: &Self) -> Result<(), merge::Error> { if let Some(lhs) = self.as_mut_nav() { if let Some(rhs) = rhs.as_nav() { - lhs.merge_mut(&rhs)?; + lhs.merge_mut(rhs)?; } } else if let Some(lhs) = self.as_mut_obs() { if let Some(rhs) = rhs.as_obs() { - lhs.merge_mut(&rhs)?; + lhs.merge_mut(rhs)?; } } else if let Some(lhs) = self.as_mut_meteo() { if let Some(rhs) = rhs.as_meteo() { - lhs.merge_mut(&rhs)?; + lhs.merge_mut(rhs)?; } /*} else if let Some(lhs) = self.as_mut_ionex() { if let Some(rhs) = rhs.as_ionex() { @@ -673,11 +671,11 @@ impl Merge for Record { }*/ } else if let Some(lhs) = self.as_mut_antex() { if let Some(rhs) = rhs.as_antex() { - lhs.merge_mut(&rhs)?; + lhs.merge_mut(rhs)?; } } else if let Some(lhs) = self.as_mut_clock() { if let Some(rhs) = rhs.as_clock() { - lhs.merge_mut(&rhs)?; + lhs.merge_mut(rhs)?; } } Ok(()) diff --git a/rinex/src/split.rs b/rinex/src/split.rs index a104d6c97..ffaaf9055 100644 --- a/rinex/src/split.rs +++ b/rinex/src/split.rs @@ -6,6 +6,8 @@ use thiserror::Error; pub enum Error { #[error("this record type is not indexed by epoch")] NoEpochIteration, + #[error("this record does not contained specified epoch")] + NonExistingEpoch, } pub trait Split { diff --git a/rinex/src/sv.rs b/rinex/src/sv.rs index be066e4e6..c5480e392 100644 --- a/rinex/src/sv.rs +++ b/rinex/src/sv.rs @@ -1,5 +1,7 @@ //! Satellite vehicle use super::{constellation, Constellation}; +use hifitime::Epoch; +use hifitime::TimeScale; use thiserror::Error; #[cfg(feature = "serde")] @@ -15,6 +17,11 @@ pub struct Sv { pub constellation: Constellation, } +/* + * Database, built by build.rs, for detailed SBAS vehicle identification + */ +include!(concat!(env!("OUT_DIR"), "/sbas.rs")); + /// ̀`Sv` parsing & identification related errors #[derive(Error, Debug, Clone, PartialEq)] pub enum ParsingError { @@ -29,30 +36,84 @@ impl Sv { pub fn new(constellation: Constellation, prn: u8) -> Self { Self { prn, constellation } } + /// Returns timescale associated to this SV + pub fn timescale(&self) -> Option { + self.constellation.timescale() + } + /* + * Tries to retrieve SBAS detailed definitions for self. + * For that, we use the PRN number (+100 for SBAS) + */ + pub(crate) fn sbas_definitions(&self) -> Option<&SBASHelper> { + let to_find = (self.prn as u16) + 100; + SBAS_VEHICLES + .iter() + .filter(|e| e.prn == to_find) + .reduce(|e, _| e) + } + /// Returns datetime at which Self was either launched or its serviced was deployed. + /// This only applies to SBAS vehicles. Datetime expressed as [Epoch] at midnight UTC. + pub fn launched_date(&self) -> Option { + let definition = self.sbas_definitions()?; + Some(Epoch::from_gregorian_utc_at_midnight( + definition.launched_year, + definition.launched_month, + definition.launched_day, + )) + } } impl std::str::FromStr for Sv { type Err = ParsingError; - /// Builds an `Sv` from XYY identification code. - /// code should strictly follow rinex conventions. - /// This method tolerates trailing whitespaces - fn from_str(s: &str) -> Result { - Ok(Sv { - constellation: Constellation::from_1_letter_code(&s[0..1])?, - prn: u8::from_str_radix(&s[1..].trim(), 10)?, - }) + /* + * Parse SV from "XYY" standardized format. + * On "sbas" crate feature, we have the ability to identify + * vehicles in detail. For example S23 is Eutelsat 5WB. + */ + fn from_str(string: &str) -> Result { + let constellation = Constellation::from_str(&string[0..1])?; + let prn = string[1..].trim().parse::()?; + let mut ret = Sv::new(constellation, prn); + if constellation.is_sbas() { + // map the SXX to meaningful SBAS + if let Some(sbas) = ret.sbas_definitions() { + // this can't fail because the SBAS database only + // contains valid Constellations + ret.constellation = Constellation::from_str(sbas.constellation).unwrap(); + } + } + Ok(ret) + } +} + +impl std::fmt::UpperHex for Sv { + /* + * Possibly detailed identity for SBAS vehicles + */ + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + if let Some(sbas) = self.sbas_definitions() { + write!(f, "{}", sbas.id) + } else { + write!(f, "{:x}", self) + } + } +} + +impl std::fmt::LowerHex for Sv { + /* + * Prints self as XYY standard format + */ + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "{:x}{:02}", self.constellation, self.prn) } } impl std::fmt::Display for Sv { - /// Formats self as XYY RINEX three letter code - fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result { - write!( - fmt, - "{}{:02}", - self.constellation.to_1_letter_code(), - self.prn - ) + /* + * Prints self as XYY standard format + */ + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "{:x}{:02}", self.constellation, self.prn) } } @@ -75,11 +136,14 @@ mod test { ("R 9", Sv::new(Constellation::Glonass, 9)), ("I 3", Sv::new(Constellation::IRNSS, 3)), ("I16", Sv::new(Constellation::IRNSS, 16)), - ("S36", Sv::new(Constellation::Geo, 36)), - ("S 6", Sv::new(Constellation::Geo, 6)), ] { let sv = Sv::from_str(descriptor); - assert!(sv.is_ok(), "failed to parse sv from \"{}\"", descriptor); + assert!( + sv.is_ok(), + "failed to parse sv from \"{}\" - {:?}", + descriptor, + sv.err().unwrap() + ); let sv = sv.unwrap(); assert_eq!( sv, expected, @@ -88,4 +152,40 @@ mod test { ); } } + #[test] + fn from_str_with_sbas() { + for (desc, parsed, lowerhex, upperhex) in vec![ + ("S 3", Sv::new(Constellation::SBAS, 3), "S03", "S03"), + ( + "S22", + Sv::new(Constellation::AusNZ, 22), + "S22", + "INMARSAT-4F1", + ), + ("S23", Sv::new(Constellation::EGNOS, 23), "S23", "ASTRA-5B"), + ("S25", Sv::new(Constellation::SDCM, 25), "S25", "Luch-5A"), + ("S 5", Sv::new(Constellation::SBAS, 5), "S05", "S05"), + ("S48", Sv::new(Constellation::ASAL, 48), "S48", "ALCOMSAT-1"), + ] { + let sv = Sv::from_str(desc).unwrap(); + assert_eq!(sv, parsed, "failed to parse correct sv from \"{}\"", desc); + assert_eq!(format!("{:x}", sv), lowerhex); + assert_eq!(format!("{:X}", sv), upperhex); + } + } + #[test] + fn sbas_db_sanity() { + for sbas in SBAS_VEHICLES.iter() { + assert!( + Constellation::from_str(sbas.constellation).is_ok(), + "sbas database should only contain valid constellations: \"{}\"", + sbas.constellation, + ); + let _ = Epoch::from_gregorian_utc_at_midnight( + sbas.launched_year, + sbas.launched_month, + sbas.launched_day, + ); + } + } } diff --git a/rinex/src/tests/antex.rs b/rinex/src/tests/antex.rs index c6c53ff9a..ab0e6361c 100644 --- a/rinex/src/tests/antex.rs +++ b/rinex/src/tests/antex.rs @@ -8,17 +8,17 @@ mod test { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/ATX/V1/TROSAR25.R4__LEIT_2020_09_23.atx"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.is_antex(), true); + assert!(rinex.is_antex()); let header = rinex.header; assert_eq!(header.version.major, 1); assert_eq!(header.version.minor, 4); - assert_eq!(header.antex.is_some(), true); + assert!(header.antex.is_some()); let atx_header = header.antex.as_ref().unwrap(); assert_eq!(atx_header.pcv, Pcv::Absolute); let record = rinex.record.as_antex(); - assert_eq!(record.is_some(), true); + assert!(record.is_some()); let record = record.unwrap(); assert_eq!(record.len(), 1); // Only 1 antenna let (antenna, frequencies) = record.first().unwrap(); @@ -31,17 +31,17 @@ mod test { assert_eq!(antenna.dazi, 5.0); assert_eq!(antenna.zen, (0.0, 90.0)); assert_eq!(antenna.dzen, 5.0); - assert_eq!(antenna.valid_from.is_none(), true); - assert_eq!(antenna.valid_until.is_none(), true); + assert!(antenna.valid_from.is_none()); + assert!(antenna.valid_until.is_none()); for freq in frequencies.iter() { let first = freq.patterns.first(); - assert_eq!(first.is_some(), true); + assert!(first.is_some()); let first = first.unwrap(); - assert_eq!(first.is_azimuth_dependent(), false); + assert!(!first.is_azimuth_dependent()); let mut angle = 0.0_f64; for i in 1..freq.patterns.len() { let p = &freq.patterns[i]; - assert_eq!(p.is_azimuth_dependent(), true); + assert!(p.is_azimuth_dependent()); let (a, _) = p.azimuth_pattern().unwrap(); assert_eq!(angle, a); angle += antenna.dzen; diff --git a/rinex/src/tests/clocks.rs b/rinex/src/tests/clocks.rs index ad6239118..8abe8730f 100644 --- a/rinex/src/tests/clocks.rs +++ b/rinex/src/tests/clocks.rs @@ -1,25 +1,30 @@ #[cfg(test)] mod test { use crate::clocks; - use crate::clocks::record::{DataType, System}; + use crate::clocks::{ClockAnalysisAgency, ClockDataType, System}; use crate::prelude::*; #[test] fn v3_usno_example() { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/CLK/V3/USNO1.txt"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.is_clocks_rinex(), true); - assert_eq!(rinex.header.clocks.is_some(), true); + assert!(rinex.is_clocks_rinex()); + assert!(rinex.header.clocks.is_some()); let clocks = rinex.header.clocks.as_ref().unwrap(); assert_eq!( clocks.codes, - vec![DataType::AS, DataType::AR, DataType::CR, DataType::DR] + vec![ + ClockDataType::AS, + ClockDataType::AR, + ClockDataType::CR, + ClockDataType::DR + ] ); assert_eq!( clocks.agency, - Some(clocks::Agency { + Some(ClockAnalysisAgency { code: String::from("USN"), name: String::from("USNO USING GIPSY/OASIS-II"), }) @@ -33,21 +38,21 @@ mod test { ); assert_eq!(rinex.epoch().count(), 1); let record = rinex.record.as_clock(); - assert_eq!(record.is_some(), true); + assert!(record.is_some()); let record = record.unwrap(); for (e, data_types) in record.iter() { assert_eq!(*e, Epoch::from_gregorian_utc(1994, 07, 14, 20, 59, 00, 00)); for (data_type, systems) in data_types.iter() { assert_eq!(systems.len(), 1); - if *data_type == DataType::AR { + if *data_type == ClockDataType::AR { for (system, data) in systems.iter() { assert_eq!(*system, System::Station("AREQ".to_string())); assert_eq!(data.bias, -0.123456789012); - assert_eq!(data.bias_sigma, Some(-1.23456789012E+0)); - assert_eq!(data.rate, Some(-12.3456789012)); - assert_eq!(data.rate_sigma, Some(-123.456789012)); + assert_eq!(data.bias_dev, Some(-1.23456789012E+0)); + assert_eq!(data.drift, Some(-12.3456789012)); + assert_eq!(data.drift_dev, Some(-123.456789012)); } - } else if *data_type == DataType::AS { + } else if *data_type == ClockDataType::AS { for (system, _) in systems.iter() { assert_eq!( *system, @@ -57,11 +62,11 @@ mod test { }) ); } - } else if *data_type == DataType::CR { + } else if *data_type == ClockDataType::CR { for (system, _) in systems.iter() { assert_eq!(*system, System::Station("USNO".to_string())); } - } else if *data_type == DataType::DR { + } else if *data_type == ClockDataType::DR { for (system, _) in systems.iter() { assert_eq!(*system, System::Station("USNO".to_string())); } @@ -76,27 +81,27 @@ mod test { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/CLK/V3/example1.txt"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.is_clocks_rinex(), true); - assert_eq!(rinex.header.clocks.is_some(), true); + assert!(rinex.is_clocks_rinex()); + assert!(rinex.header.clocks.is_some()); let clocks = rinex.header.clocks.as_ref().unwrap(); - assert_eq!(clocks.codes, vec![DataType::AS, DataType::AR]); + assert_eq!(clocks.codes, vec![ClockDataType::AS, ClockDataType::AR]); assert_eq!( clocks.agency, - Some(clocks::Agency { + Some(ClockAnalysisAgency { code: String::from("USN"), name: String::from("USNO USING GIPSY/OASIS-II"), }) ); assert_eq!(rinex.epoch().count(), 1); let record = rinex.record.as_clock(); - assert_eq!(record.is_some(), true); + assert!(record.is_some()); let record = record.unwrap(); for (e, data_types) in record.iter() { assert_eq!(*e, Epoch::from_gregorian_utc(1994, 07, 14, 20, 59, 00, 00)); for (data_type, systems) in data_types.iter() { - if *data_type == DataType::AR { + if *data_type == ClockDataType::AR { assert_eq!(systems.len(), 4); for (system, data) in systems.iter() { let areq_usa = System::Station("AREQ00USA".to_string()); @@ -105,25 +110,25 @@ mod test { let hark = System::Station("HARK".to_string()); if *system == areq_usa { assert_eq!(data.bias, -0.123456789012); - assert_eq!(data.bias_sigma, Some(-0.123456789012E+01)); - assert_eq!(data.rate, Some(-0.123456789012E+02)); - assert_eq!(data.rate_sigma, Some(-0.123456789012E+03)); + assert_eq!(data.bias_dev, Some(-0.123456789012E+01)); + assert_eq!(data.drift, Some(-0.123456789012E+02)); + assert_eq!(data.drift_dev, Some(-0.123456789012E+03)); } else if *system == gold { assert_eq!(data.bias, -0.123456789012E-01); - assert_eq!(data.bias_sigma, Some(-0.123456789012E-02)); - assert_eq!(data.rate, Some(-0.123456789012E-03)); - assert_eq!(data.rate_sigma, Some(-0.123456789012E-04)); + assert_eq!(data.bias_dev, Some(-0.123456789012E-02)); + assert_eq!(data.drift, Some(-0.123456789012E-03)); + assert_eq!(data.drift_dev, Some(-0.123456789012E-04)); } else if *system == tidb { assert_eq!(data.bias, 0.123456789012E+00); - assert_eq!(data.bias_sigma, Some(0.123456789012E+00)); + assert_eq!(data.bias_dev, Some(0.123456789012E+00)); } else if *system == hark { assert_eq!(data.bias, 0.123456789012E+00); - assert_eq!(data.bias_sigma, Some(0.123456789012E+00)); + assert_eq!(data.bias_dev, Some(0.123456789012E+00)); } else { panic!("falsely identified system \"{}\"", *system); } } - } else if *data_type == DataType::AS { + } else if *data_type == ClockDataType::AS { assert_eq!(systems.len(), 1); for (system, data) in systems.iter() { assert_eq!( @@ -134,7 +139,7 @@ mod test { }) ); assert_eq!(data.bias, -0.123456789012E+00); - assert_eq!(data.bias_sigma, Some(-0.123456789012E-01)); + assert_eq!(data.bias_dev, Some(-0.123456789012E-01)); } } else { panic!("identified unexpected data type \"{}\"", data_type); @@ -147,29 +152,29 @@ mod test { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/CLK/V3/example2.txt"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.is_clocks_rinex(), true); - assert_eq!(rinex.header.clocks.is_some(), true); + assert!(rinex.is_clocks_rinex()); + assert!(rinex.header.clocks.is_some()); let clocks = rinex.header.clocks.as_ref().unwrap(); - assert_eq!(clocks.codes, vec![DataType::AR, DataType::AS]); + assert_eq!(clocks.codes, vec![ClockDataType::AR, ClockDataType::AS]); assert_eq!( clocks.agency, - Some(clocks::Agency { + Some(ClockAnalysisAgency { code: String::from("IGS"), name: String::from("IGSACC @ GA and MIT"), }) ); assert_eq!(rinex.epoch().count(), 1); let record = rinex.record.as_clock(); - assert_eq!(record.is_some(), true); + assert!(record.is_some()); //let record = record.unwrap(); /*for (e, data_types) in record.iter() { assert_eq!(*e, Epoch::from_gregorian_utc(2017, 03, 11, 00, 00, 00, 00)); for (data_type, systems) in data_types.iter() { - if *data_type == DataType::AR { + if *data_type == ClockDataType::AR { assert_eq!(systems.len(), 4); - } else if *data_type == DataType::AS { + } else if *data_type == ClockDataType::AS { assert_eq!(systems.len(), 2); } else { panic!("identified unexpected data type \"{}\"", data_type); diff --git a/rinex/src/tests/compression.rs b/rinex/src/tests/compression.rs index be8a93ccd..8b40f6f39 100644 --- a/rinex/src/tests/compression.rs +++ b/rinex/src/tests/compression.rs @@ -1,16 +1,15 @@ #[cfg(test)] mod test { use crate::prelude::*; - use crate::tests::toolkit::*; + use crate::tests::toolkit::{random_name, test_against_model}; use std::path::PathBuf; #[test] #[ignore] fn crinex1() { let pool = vec![ - ("AJAC3550.21D", "AJAC3550.21O"), - ("aopr0010.17d", "aopr0010.17o"), - ("npaz3550.21d", "npaz3550.21o"), - ("pdel0010.21d", "pdel0010.21o"), + //("AJAC3550.21D", "AJAC3550.21O"), + //("aopr0010.17d", "aopr0010.17o"), + //("npaz3550.21d", "npaz3550.21o"), ("wsra0010.21d", "wsra0010.21o"), ("zegv0010.21d", "zegv0010.21o"), ]; @@ -19,18 +18,24 @@ mod test { let crnx_path = PathBuf::new() .join(env!("CARGO_MANIFEST_DIR")) - .join("CRNX/V1") + .join("../") + .join("test_resources") + .join("CRNX") + .join("V1") .join(crnx_name); let rnx_path = PathBuf::new() .join(env!("CARGO_MANIFEST_DIR")) - .join("OBS/V2") + .join("../") + .join("test_resources") + .join("OBS") + .join("V2") .join(rnx_name); let rnx = Rinex::from_file(&rnx_path.to_string_lossy()); assert!( rnx.is_ok(), - "failed to parse test file \"{}\"", + "failed to parse \"{}\"", rnx_path.to_string_lossy() ); let rnx = rnx.unwrap(); @@ -49,10 +54,12 @@ mod test { // compare to CRINEX1 model let model = model.unwrap(); - compare_with_panic( + let epsilon = 1.0E-3; // CRNX2RNX is not a lossless compression + test_against_model( &dut, &model, &format!("compression::crinx1::{}", rnx_path.to_string_lossy()), + epsilon, ); } } @@ -63,7 +70,6 @@ mod test { ("AJAC3550.21O"), ("aopr0010.17o"), ("npaz3550.21o"), - ("pdel0010.21o"), ("wsra0010.21o"), ("zegv0010.21o"), ]; @@ -99,6 +105,110 @@ mod test { testfile ); + // remove generated file + let _ = std::fs::remove_file(&tmp_path); + } + } + #[test] + #[ignore] + fn crinex3() { + let pool = vec![ + ( + "ACOR00ESP_R_20213550000_01D_30S_MO.crx", + "ACOR00ESP_R_20213550000_01D_30S_MO.rnx", + ), + ("DUTH0630.22D", "DUTH0630.22O"), + ("VLNS0010.22D", "VLNS0010.22O"), + ("VLNS0630.22D", "VLNS0630.22O"), + ("flrs0010.12d", "flrs0010.12o"), + ("pdel0010.21d", "pdel0010.21o"), + ]; + for duplet in pool { + let (crnx_name, rnx_name) = duplet; + + let crnx_path = PathBuf::new() + .join(env!("CARGO_MANIFEST_DIR")) + .join("../") + .join("test_resources") + .join("CRNX") + .join("V3") + .join(crnx_name); + + let rnx_path = PathBuf::new() + .join(env!("CARGO_MANIFEST_DIR")) + .join("../") + .join("test_resources") + .join("OBS") + .join("V3") + .join(rnx_name); + + let rnx = Rinex::from_file(&rnx_path.to_string_lossy()); + assert!( + rnx.is_ok(), + "failed to parse \"{}\"", + rnx_path.to_string_lossy() + ); + let rnx = rnx.unwrap(); + + // convert to CRINEX3 + println!("compressing \"{}\"..", rnx_path.to_string_lossy()); + let dut = rnx.rnx2crnx1(); + + // parse model + let model = Rinex::from_file(&crnx_path.to_string_lossy()); + assert!( + model.is_ok(), + "failed to parse test file \"{}\"", + crnx_path.to_string_lossy() + ); + + // compare + let model = model.unwrap(); + let epsilon = 1.0E-3; // CRNX2RNX is not a lossless compression + test_against_model( + &dut, + &model, + &format!("compression::crinx3::{}", rnx_path.to_string_lossy()), + epsilon, + ); + } + } + #[test] + #[ignore] + fn crinex3_reciprocity() { + let pool = vec![("pdel0010.21o")]; + for testfile in pool { + let rnx_path = format!("../test_resources/OBS/V3/{}", testfile); + + let rnx = Rinex::from_file(&rnx_path); + assert!( + rnx.is_ok(), + "Failed to parse test pool file \"{}\"", + testfile + ); + + // compress + let rnx = rnx.unwrap(); + let compressed = rnx.rnx2crnx1(); + + let tmp_path = format!("test-{}.crx", random_name(8)); + + assert!( + compressed.to_file(&tmp_path).is_ok(), + "{}{}", + "failed to format compressed rinex", + testfile + ); + + // test reciprocity + let uncompressed = compressed.crnx2rnx(); + assert!( + rnx == uncompressed, + "{}{}", + "reciprocity test failed for \"{}\"", + testfile + ); + // remove generated file let _ = std::fs::remove_file(&tmp_path); } diff --git a/rinex/src/tests/decompression.rs b/rinex/src/tests/decompression.rs index 72c619712..eee0080d3 100644 --- a/rinex/src/tests/decompression.rs +++ b/rinex/src/tests/decompression.rs @@ -1,7 +1,11 @@ #[cfg(test)] mod test { use crate::hatanaka::Decompressor; + use crate::tests::toolkit::random_name; + use crate::tests::toolkit::test_observation_rinex; + use crate::{erratic_time_frame, evenly_spaced_time_frame, tests::toolkit::TestTimeFrame}; use crate::{observable, prelude::*}; + use itertools::Itertools; use std::collections::HashMap; use std::path::Path; use std::str::FromStr; @@ -10,7 +14,7 @@ mod test { let pool = vec![ ("zegv0010.21d", "zegv0010.21o"), ("AJAC3550.21D", "AJAC3550.21O"), - ("KOSG0010.95D", "KOSG0010.95O"), + //("KOSG0010.95D", "KOSG0010.95O"), //TODO@ fix tests/obs/v2_kosg first ("aopr0010.17d", "aopr0010.17o"), ("npaz3550.21d", "npaz3550.21o"), ("wsra0010.21d", "wsra0010.21o"), @@ -21,14 +25,13 @@ mod test { let path = format!("../test_resources/CRNX/V1/{}", crnx_name); let crnx = Rinex::from_file(&path); - assert_eq!(crnx.is_ok(), true); + assert!(crnx.is_ok()); let mut rnx = crnx.unwrap(); - assert_eq!(rnx.header.obs.is_some(), true); - let obs = rnx.header.obs.as_ref().unwrap(); + let header = rnx.header.obs.as_ref().unwrap(); - assert_eq!(obs.crinex.is_some(), true); - let infos = obs.crinex.as_ref().unwrap(); + assert!(header.crinex.is_some()); + let infos = header.crinex.as_ref().unwrap(); if crnx_name.eq("zegv0010.21d") { assert_eq!(infos.version.major, 1); @@ -38,6 +41,21 @@ mod test { infos.date, Epoch::from_gregorian_utc(2021, 01, 02, 00, 01, 00, 00) ); + test_observation_rinex( + &rnx, + "2.11", + Some("MIXED"), + "GPS, GLO", + "G07, G08, G10, G13, G15, G16, G18, G20, G21, G23, G26, G27, G30, R01, R02, R03, R08, R09, R15, R16, R17, R18, R19, R24", + "C1, C2, C5, L1, L2, L5, P1, P2, S1, S2, S5", + Some("2021-01-01T00:00:00 GPST"), + Some("2021-01-01T23:59:30 GPST"), + evenly_spaced_time_frame!( + "2021-01-01T00:00:00 GPST", + "2021-01-01T00:09:00 GPST", + "30 s" + ), + ); } else if crnx_name.eq("npaz3550.21d") { assert_eq!(infos.version.major, 1); assert_eq!(infos.version.minor, 0); @@ -46,30 +64,112 @@ mod test { infos.date, Epoch::from_gregorian_utc(2021, 12, 28, 00, 18, 00, 00) ); - } else if crnx_name.eq("pdel0010.21d") { - assert_eq!(infos.version.major, 1); - assert_eq!(infos.version.minor, 0); - assert_eq!(infos.prog, "RNX2CRX ver.4.0.7"); - assert_eq!( - infos.date, - Epoch::from_gregorian_utc(2021, 01, 09, 00, 24, 00, 00) + + test_observation_rinex( + &rnx, + "2.11", + Some("MIXED"), + "GPS, GLO", + "G08,G10,G15,G16,G18,G21,G23,G26,G32,R04,R05,R06,R10,R12,R19,R20,R21", + "C1, L1, L2, P2, S1, S2", + Some("2021-12-21T00:00:00 GPST"), + Some("2021-12-21T23:59:30 GPST"), + evenly_spaced_time_frame!( + "2021-12-21T00:00:00 GPST", + "2021-12-21T01:04:00 GPST", + "30 s" + ), + ); + } else if crnx_name.eq("wsra0010.21d") { + test_observation_rinex( + &rnx, + "2.11", + Some("MIXED"), + "GPS, GLO", + "R09, R02, G07, G13, R17, R16, R01, G18, G26, G10, G30, G23, G27, G08, R18, G20, R15, G21, G15, R24, G16", + "L1, L2, C1, P2, P1, S1, S2", + Some("2021-01-01T00:00:00 GPST"), + None, + evenly_spaced_time_frame!( + "2021-01-01T00:00:00 GPST", + "2021-01-01T00:08:00 GPST", + "30 s" + ), + ); + } else if crnx_name.eq("aopr0010.17d") { + test_observation_rinex( + &rnx, + "2.10", + Some("GPS"), + "GPS", + "G31, G27, G03, G32, G16, G08, G14, G23, G22, G26", + "C1, L1, L2, P1, P2", + Some("2017-01-01T00:00:00 GPST"), + None, + erratic_time_frame!( + " + 2017-01-01T00:00:00 GPST, + 2017-01-01T03:33:40 GPST, + 2017-01-01T06:09:10 GPST + " + ), + ); + //} else if crnx_name.eq("KOSG0010.95D") { + // test_observation_rinex( + // &rnx, + // "2.0", + // Some("GPS"), + // "GPS", + // "G01, G04, G05, G06, G16, G17, G18, G19, G20, G21, G22, G23, G24, G25, G27, G29, G31", + // "C1, L1, L2, P2, S1", + // Some("1995-01-01T00:00:00 GPST"), + // Some("1995-01-01T23:59:30 GPST"), + // erratic_time_frame!(" + // 1995-01-01T00:00:00 GPST, + // 1995-01-01T11:00:00 GPST, + // 1995-01-01T20:44:30 GPST + // "), + // ); + } else if crnx_name.eq("AJAC3550.21D") { + test_observation_rinex( + &rnx, + "2.11", + Some("MIXED"), + "GPS, GLO, GAL, EGNOS", + "G07, G08, G10, G16, G18, G21, G23, G26, G32, R04, R05, R10, R12, R19, R20, R21, E04, E11, E12, E19, E24, E25, E31, E33, S23, S36", + "L1, L2, C1, C2, P1, P2, D1, D2, S1, S2, L5, C5, D5, S5, L7, C7, D7, S7, L8, C8, D8, S8", + Some("2021-12-21T00:00:00 GPST"), + None, + evenly_spaced_time_frame!( + "2021-12-21T00:00:00 GPST", + "2021-12-21T00:00:30 GPST", + "30 s"), ); } - - // convert to RINEX + // decompress and write to file rnx.crnx2rnx_mut(); - + let filename = format!("{}.rnx", random_name(10)); + assert!( + rnx.to_file(&filename).is_ok(), + "failed to dump \"{}\" after decompression", + crnx_name + ); + + // then run comparison with model let obs = rnx.header.obs.as_ref().unwrap(); - assert_eq!(obs.crinex.is_some(), false); + assert!(!obs.crinex.is_some()); - // parse Model for testbench + // parse plain RINEX and run reciprocity let path = format!("../test_resources/OBS/V2/{}", rnx_name); let model = Rinex::from_file(&path); assert!(model.is_ok(), "Failed to parse test model \"{}\"", path); //let model = model.unwrap(); // run testbench - // test_toolkit::compare_with_panic(&rnx, &model, &path); + // test_toolkit::test_against_model(&rnx, &model, &path); + + // remove copy + let _ = std::fs::remove_file(filename); } } #[test] @@ -94,11 +194,11 @@ mod test { let path = format!("../test_resources/CRNX/V3/{}", crnx_name); let crnx = Rinex::from_file(&path); - assert_eq!(crnx.is_ok(), true); + assert!(crnx.is_ok()); let mut rnx = crnx.unwrap(); - assert_eq!(rnx.header.obs.is_some(), true); + assert!(rnx.header.obs.is_some()); let obs = rnx.header.obs.as_ref().unwrap(); - assert_eq!(obs.crinex.is_some(), true); + assert!(obs.crinex.is_some()); let infos = obs.crinex.as_ref().unwrap(); if crnx_name.eq("ACOR00ESP_R_20213550000_01D_30S_MO.crx") { @@ -115,7 +215,7 @@ mod test { rnx.crnx2rnx_mut(); let obs = rnx.header.obs.as_ref().unwrap(); - assert_eq!(obs.crinex.is_some(), false); + assert!(!obs.crinex.is_some()); // parse Model for testbench let path = format!("../test_resources/OBS/V3/{}", rnx_name); @@ -123,7 +223,7 @@ mod test { assert!(model.is_ok(), "Failed to parse test model \"{}\"", path); // run testbench - // test_toolkit::compare_with_panic(&rnx, &model, &path); + // test_toolkit::test_against_model(&rnx, &model, &path); } } /* @@ -171,31 +271,26 @@ mod test { .join("V1") .join("zegv0010.21d"); let fullpath = path.to_string_lossy(); - let rnx = Rinex::from_file(&fullpath.to_string()); + let rnx = Rinex::from_file(fullpath.as_ref()); + assert!(rnx.is_ok(), "failed to parse CRNX/V1/zegv0010.21d"); let rnx = rnx.unwrap(); - let epochs = vec![ - Epoch::from_str("2021-01-01T00:00:00 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:00:30 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:01:00 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:01:30 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:02:00 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:02:30 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:03:00 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:03:30 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:04:00 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:04:30 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:05:00 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:05:30 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:06:00 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:06:30 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:07:00 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:07:30 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:08:00 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:08:30 GPST").unwrap(), - Epoch::from_str("2021-01-01T00:09:00 GPST").unwrap(), - ]; - assert!(rnx.epoch().eq(epochs), "Parsed wrong epoch content",); + + test_observation_rinex( + &rnx, + "2.11", + Some("MIXED"), + "GPS, GLO", + "G07, G08, G10, G13, G15, G16, G18, G20, G21, G23, G26, G27, G30, R01, R02, R03, R08, R09, R15, R16, R17, R18, R19, R24", + "C1, C2, C5, L1, L2, L5, P1, P2, S1, S2, S5", + Some("2021-01-01T00:00:00 GPST"), + Some("2021-01-01T23:59:30 GPST"), + evenly_spaced_time_frame!( + "2021-01-01T00:00:00 GPST", + "2021-01-01T00:09:00 GPST", + "30 s" + ), + ); let record = rnx.record.as_obs().unwrap(); @@ -206,7 +301,7 @@ mod test { assert_eq!(vehicles.len(), 24); for (sv, observations) in vehicles { if *sv == Sv::new(Constellation::GPS, 07) { - let mut keys: Vec<_> = observations.keys().map(|k| k.clone()).collect(); + let mut keys: Vec<_> = observations.keys().cloned().collect(); keys.sort(); let mut expected: Vec = "C1 C2 L1 L2 P1 P2 S1 S2" .split_ascii_whitespace() @@ -246,8 +341,7 @@ mod test { .unwrap(); assert_eq!(s2.obs, 22.286); } else if *sv == Sv::new(Constellation::GPS, 08) { - let mut keys: Vec = - observations.keys().map(|k| k.clone()).collect(); + let mut keys: Vec = observations.keys().cloned().collect(); keys.sort(); let mut expected: Vec = "C1 C2 C5 L1 L2 L5 P1 P2 S1 S2 S5" .split_ascii_whitespace() @@ -299,8 +393,7 @@ mod test { .unwrap(); assert_eq!(s5.obs, 52.161); } else if *sv == Sv::new(Constellation::GPS, 13) { - let mut keys: Vec = - observations.keys().map(|k| k.clone()).collect(); + let mut keys: Vec = observations.keys().cloned().collect(); keys.sort(); let mut expected: Vec = "C1 L1 L2 P1 P2 S1 S2" .split_ascii_whitespace() @@ -355,13 +448,13 @@ mod test { .join("V3") .join("ACOR00ESP_R_20213550000_01D_30S_MO.crx"); let fullpath = path.to_string_lossy(); - let crnx = Rinex::from_file(&fullpath.to_string()); - assert_eq!(crnx.is_ok(), true); + let crnx = Rinex::from_file(fullpath.as_ref()); + assert!(crnx.is_ok()); let rnx = crnx.unwrap(); - assert_eq!(rnx.header.obs.is_some(), true); + assert!(rnx.header.obs.is_some()); let obs = rnx.header.obs.as_ref().unwrap(); - assert_eq!(obs.crinex.is_some(), true); + assert!(obs.crinex.is_some()); let infos = obs.crinex.as_ref().unwrap(); assert_eq!(infos.version.major, 3); @@ -372,44 +465,22 @@ mod test { Epoch::from_gregorian_utc(2021, 12, 28, 01, 01, 00, 00) ); - //assert!( - // rinex.sv_epoch() - // .sorted() - // .eq( - - // ) - // ), - // "sv_epoch() failed", - //); - - let epochs: Vec = vec![ - Epoch::from_str("2021-12-21T00:00:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:00:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:01:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:01:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:02:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:02:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:03:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:03:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:04:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:04:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:05:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:05:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:06:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:06:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:07:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:07:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:08:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:08:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:09:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:09:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:10:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:10:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:11:00 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:11:30 GPST").unwrap(), - Epoch::from_str("2021-12-21T00:12:00 GPST").unwrap(), - ]; - assert!(rnx.epoch().eq(epochs.clone()), "parsed wrong epoch content"); + test_observation_rinex( + &rnx, + "3.04", + Some("MIXED"), + "GPS, GLO, GAL, BDS", + "G01, G07, G08, G10, G16, G18, G21, G23, G26, G30, R04, R05, R10, R12, R20, R21, E02, E11, E12, E24, E25, E31, E33, E36, C05, C11, C14, C21, C22, C23, C25, C28, C34, C37, C42, C43, C44, C58", + "C1C, L1C, S1C, C2S, L2S, S2S, C2W, L2W, S2W, C5Q, L5Q, S5Q, C1C, L1C, S1C, C2P, L2P, S2P, C2C, L2C, S2C, C3Q, L3Q, S3Q, C1C, L1C, S1C, C5Q, L5Q, S5Q, C6C, L6C, S6C, C7Q, L7Q, S7Q, C8Q, L8Q, S8Q, C2I, L2I, S2I, C6I, L6I, S6I, C7I, L7I, S7I", + Some("2021-12-21T00:00:00 GPST"), + Some("2021-12-21T23:59:30 GPST"), + evenly_spaced_time_frame!( + "2021-12-21T00:00:00 GPST", + "2021-12-21T00:12:00 GPST", + "30 s" + ), + ); + /* * record test */ @@ -419,16 +490,14 @@ mod test { assert!(clk_offset.is_none()); } - for e_index in 0..epochs.len() { - let e = epochs.get(e_index).unwrap(); - let flag = EpochFlag::Ok; - let (_, vehicles) = record.get(&(*e, flag)).unwrap(); + for (e_index, epoch) in rnx.epoch().enumerate() { + let (_, vehicles) = record.get(&(epoch, EpochFlag::Ok)).unwrap(); if e_index == 0 { /* * 1st epoch */ assert_eq!(vehicles.len(), 38); - let keys: Vec<_> = vehicles.keys().map(|sv| *sv).collect(); + let keys: Vec<_> = vehicles.keys().copied().collect(); let mut expected: Vec = vec![ Sv::new(Constellation::GPS, 01), Sv::new(Constellation::GPS, 07), @@ -471,12 +540,12 @@ mod test { ]; expected.sort(); assert_eq!(keys, expected); - } else if e_index == epochs.len() - 1 { + } else if e_index == rnx.epoch().count() - 1 { /* * last epoch */ assert_eq!(vehicles.len(), 38); - let keys: Vec<_> = vehicles.keys().map(|sv| *sv).collect(); + let keys: Vec<_> = vehicles.keys().copied().collect(); let mut expected: Vec = vec![ Sv::new(Constellation::GPS, 01), Sv::new(Constellation::GPS, 07), @@ -521,7 +590,7 @@ mod test { assert_eq!(keys, expected); let c58 = vehicles.get(&Sv::new(Constellation::BeiDou, 58)).unwrap(); - let mut keys: Vec = c58.keys().map(|k| k.clone()).collect(); + let mut keys: Vec = c58.keys().cloned().collect(); keys.sort(); let mut expected: Vec = "C2I L2I S2I" @@ -550,14 +619,13 @@ mod test { fn v3_mojn00dnk_sig_strength_regression() { let crnx = Rinex::from_file("../test_resources/CRNX/V3/MOJN00DNK_R_20201770000_01D_30S_MO.crx.gz"); - assert_eq!(crnx.is_ok(), true); + assert!(crnx.is_ok()); let rnx = crnx.unwrap(); - /* * Verify identified observables */ let obs = rnx.header.obs.unwrap().codes.clone(); - for constell in vec![Constellation::Glonass, Constellation::GPS] { + for constell in [Constellation::Glonass, Constellation::GPS] { let codes = obs.get(&constell); assert!(codes.is_some(), "MOJN00DNK_R_20201770000_01D_30S_MO: missing observable codes for constellation {:?}", constell); diff --git a/rinex/src/tests/ionex.rs b/rinex/src/tests/ionex.rs index 06dd6e18c..2b38dccfc 100644 --- a/rinex/src/tests/ionex.rs +++ b/rinex/src/tests/ionex.rs @@ -1,23 +1,114 @@ #[cfg(test)] mod test { use crate::prelude::*; + use std::path::Path; #[test] + #[cfg(feature = "flate2")] + fn v1_ckmg0090_12i() { + let path = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("..") + .join("test_resources") + .join("IONEX") + .join("V1") + .join("CKMG0090.21I.gz"); + let fullpath = path.to_string_lossy(); + + let rinex = Rinex::from_file(fullpath.as_ref()); + assert!(rinex.is_ok(), "failed to parse IONEX/V1CKMG0090.21I.gz"); + + let rinex = rinex.unwrap(); + assert_eq!( + rinex.tec_fixed_altitude(), + Some(350.0), + "bad fixed altitude" + ); + assert_eq!( + rinex.tec_rms().count(), + 0, + "falsely identified some RMS maps" + ); + assert_eq!( + rinex.epoch().count(), + 25, + "wrong amount of epochs identified" + ); + assert_eq!( + rinex.first_epoch(), + Some(Epoch::from_gregorian_utc(2021, 1, 9, 0, 0, 0, 0)) + ); + assert_eq!( + rinex.last_epoch(), + Some(Epoch::from_gregorian_utc(2021, 1, 10, 0, 0, 0, 0)) + ); + assert_eq!( + rinex.dominant_sample_rate(), + Some(Duration::from_hours(1.0)), + "bad dominant sample rate identified" + ); + } + #[test] + #[cfg(feature = "flate2")] + fn v1_jplg0010_17i() { + let path = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("..") + .join("test_resources") + .join("IONEX") + .join("V1") + .join("jplg0010.17i.gz"); + let fullpath = path.to_string_lossy(); + + let rinex = Rinex::from_file(fullpath.as_ref()); + assert!(rinex.is_ok(), "failed to parse IONEX/jplg0010.17i.gz"); + + let rinex = rinex.unwrap(); + assert_eq!( + rinex.tec_fixed_altitude(), + Some(450.0), + "bad fixed altitude" + ); + assert!(rinex.tec_rms().count() > 0, "failed to identify RMS maps"); + assert!( + rinex.tec().count() > 0, + "failed to parse both RMS + TEC maps" + ); + assert_eq!( + rinex.tec().count(), + rinex.tec_rms().count(), + "this file contains one RMS map per TEC map" + ); + + assert_eq!( + rinex.dominant_sample_rate(), + Some(Duration::from_hours(2.0)), + "bad dominant sample rate identified" + ); + } + #[test] + #[cfg(feature = "flate2")] fn v1_ckmg0020_22i() { - let test_resource = - env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/IONEX/V1/CKMG0020.22I.gz"; - let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + let path = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("..") + .join("test_resources") + .join("IONEX") + .join("V1") + .join("CKMG0020.22I.gz"); + let fullpath = path.to_string_lossy(); + + let rinex = Rinex::from_file(fullpath.as_ref()); + assert!(rinex.is_ok(), "failed to parse IONEX/V1/CKMG0020.22I.gz"); + let rinex = rinex.unwrap(); - assert_eq!(rinex.is_ionex(), true); + assert!(rinex.is_ionex()); let header = rinex.header.clone(); assert_eq!(header.version.major, 1); assert_eq!(header.version.minor, 0); - assert_eq!(header.ionex.is_some(), true); + assert!(header.ionex.is_some()); let header = header.ionex.as_ref().unwrap(); + let grid = header.grid.clone(); assert_eq!(grid.height.start, 350.0); assert_eq!(grid.height.end, 350.0); - assert_eq!(rinex.is_ionex_2d(), true); + assert!(rinex.is_ionex_2d()); assert_eq!(grid.latitude.start, 87.5); assert_eq!(grid.latitude.end, -87.5); assert_eq!(grid.latitude.spacing, -2.5); @@ -29,81 +120,86 @@ mod test { assert_eq!(header.elevation_cutoff, 0.0); assert_eq!(header.mapping, None); - let record = rinex.record.as_ionex(); - assert_eq!(record.is_some(), true); - let record = record.unwrap(); - assert_eq!(record.len(), 25); - - // test: this is a 2D IONEX - for (_, (_, rms, h)) in record { - assert_eq!(h.is_none(), true); - assert_eq!(rms.is_none(), true); - } + assert_eq!( + rinex.tec_fixed_altitude(), + Some(350.0), + "bad fixed altitude" + ); + assert_eq!( + rinex.tec_rms().count(), + 0, + "falsely identified some RMS maps" + ); + assert_eq!( + rinex.dominant_sample_rate(), + Some(Duration::from_hours(1.0)), + "bad dominant sample rate identified" + ); // epoch [1] - let e = Epoch::from_gregorian_utc(2022, 1, 2, 0, 0, 0, 0); - let data = record.get(&e); - let (tec, _, _) = data.unwrap(); - for p in tec { - assert_eq!(p.altitude, 350.0); - if p.latitude == 87.5 { - if p.longitude == -180.0 { - assert!((p.value - 9.2).abs() < 1E-3); - } - if p.longitude == -175.0 { - assert!((p.value - 9.2).abs() < 1E-3); - } - } - if p.latitude == 85.0 { - if p.longitude == -180.0 { - assert!((p.value - 9.2).abs() < 1E-3); - } - } - if p.latitude == 32.5 { - if p.longitude == -180.0 { - assert!((p.value - 17.7).abs() < 1E-3); - } - if p.longitude == -175.0 { - assert!((p.value - 16.7).abs() < 1E-3); - } - } - } - // epoch [N-2] - let e = Epoch::from_gregorian_utc(2022, 1, 2, 23, 0, 0, 0); - let data = record.get(&e); - let (tec, _, _) = data.unwrap(); - for p in tec { - assert_eq!(p.altitude, 350.0); - if p.latitude == 87.5 { - if p.longitude == -180.0 { - assert!((p.value - 9.2).abs() < 1E-3); - } - if p.longitude == -175.0 { - assert!((p.value - 9.2).abs() < 1E-3); - } - } - if p.latitude == 27.5 { - if p.longitude == -180.0 { - assert!((p.value - 21.6).abs() < 1E-3); - } - if p.longitude == -175.0 { - assert!((p.value - 21.4).abs() < 1E-3); - } - } - if p.latitude == 25.0 { - if p.longitude == -180.0 { - assert!((p.value - 23.8).abs() < 1E-3); - } - if p.longitude == -175.0 { - assert!((p.value - 23.8).abs() < 1E-3); - } - if p.longitude == 170.0 { - assert!((p.value - 23.2).abs() < 1E-3); - } - if p.longitude == 160.0 { - assert!((p.value - 21.8).abs() < 1E-3); - } - } - } + // let e = Epoch::from_gregorian_utc(2022, 1, 2, 0, 0, 0, 0); + // let data = record.get(&e); + // let (tec, _, _) = data.unwrap(); + // for p in tec { + // assert_eq!(p.altitude, 350.0); + // if p.latitude == 87.5 { + // if p.longitude == -180.0 { + // assert!((p.value - 9.2).abs() < 1E-3); + // } + // if p.longitude == -175.0 { + // assert!((p.value - 9.2).abs() < 1E-3); + // } + // } + // if p.latitude == 85.0 { + // if p.longitude == -180.0 { + // assert!((p.value - 9.2).abs() < 1E-3); + // } + // } + // if p.latitude == 32.5 { + // if p.longitude == -180.0 { + // assert!((p.value - 17.7).abs() < 1E-3); + // } + // if p.longitude == -175.0 { + // assert!((p.value - 16.7).abs() < 1E-3); + // } + // } + // } + // // epoch [N-2] + // let e = Epoch::from_gregorian_utc(2022, 1, 2, 23, 0, 0, 0); + // let data = record.get(&e); + // let (tec, _, _) = data.unwrap(); + // for p in tec { + // assert_eq!(p.altitude, 350.0); + // if p.latitude == 87.5 { + // if p.longitude == -180.0 { + // assert!((p.value - 9.2).abs() < 1E-3); + // } + // if p.longitude == -175.0 { + // assert!((p.value - 9.2).abs() < 1E-3); + // } + // } + // if p.latitude == 27.5 { + // if p.longitude == -180.0 { + // assert!((p.value - 21.6).abs() < 1E-3); + // } + // if p.longitude == -175.0 { + // assert!((p.value - 21.4).abs() < 1E-3); + // } + // } + // if p.latitude == 25.0 { + // if p.longitude == -180.0 { + // assert!((p.value - 23.8).abs() < 1E-3); + // } + // if p.longitude == -175.0 { + // assert!((p.value - 23.8).abs() < 1E-3); + // } + // if p.longitude == 170.0 { + // assert!((p.value - 23.2).abs() < 1E-3); + // } + // if p.longitude == 160.0 { + // assert!((p.value - 21.8).abs() < 1E-3); + // } + // } + // } } } diff --git a/rinex/src/tests/masking.rs b/rinex/src/tests/masking.rs index ca0526eb3..c99b46875 100644 --- a/rinex/src/tests/masking.rs +++ b/rinex/src/tests/masking.rs @@ -1,46 +1,44 @@ #[cfg(test)] mod test { - use rinex::filter; - use rinex::prelude::*; - use rinex::preprocessing::*; + use crate::filter; + use crate::prelude::*; + use crate::preprocessing::*; use std::str::FromStr; #[test] - fn v3_duth0630_g01_g02_filter() { - let mut rnx = Rinex::from_file("../test_resources/OBS/V3/DUTH0630.22O").unwrap(); - rnx.filter_mut(filter!("G01,G03")); + fn sv_filter_v3_duth0630() { + let rnx = Rinex::from_file("../test_resources/OBS/V3/DUTH0630.22O").unwrap(); + let rnx = rnx.filter(filter!("G01,G03")); assert_eq!(rnx.sv().count(), 2); } #[test] - fn v3_duth0630_gps_filter() { + #[ignore] + fn gnss_filter_v3_duth0630() { let mut rnx = Rinex::from_file("../test_resources/OBS/V3/DUTH0630.22O").unwrap(); rnx.filter_mut(filter!("GPS")); assert_eq!(rnx.sv().count(), 12); } - //#[test] - //fn v3_duth0630_gps_prn_filter() { - // let mut rnx = Rinex::from_file("../test_resources/OBS/V3/DUTH0630.22O").unwrap(); - // rnx.filter_mut(filter!(">=G26")); - // assert_eq!(rnx.sv().len(), 2); - //} - //#[test] - //fn v2_cari0010_07m_phys_filter() { - // let mut rnx = Rinex::from_file("../test_resources/MET/V2/cari0010.07m").unwrap(); - // let rnx = rnx.filter(filter!("L1C")); - // assert_eq!(rnx.observables().len(), 3); - // let rnx = rnx.filter(filter!("TD")); - // assert_eq!(rnx.observables().len(), 1); - //} - //#[test] - //fn v2_clar0020_00m_phys_filter() { - // let mut rnx = Rinex::from_file("../test_resources/MET/V2/clar0020.00m").unwrap(); - // rnx.filter_mut(filter!("L1C")); - // assert_eq!(rnx.observables().len(), 3); - // rnx.filter_mut(filter!("PR")); - // assert_eq!(rnx.observables().len(), 1); - //} - //#[test] - //fn v2_cari0010_07m_time_filter() { - // let mut rnx = Rinex::from_file("../test_resources/MET/V2/cari0010.07m").unwrap(); - // rnx.filter_mut(filter!(">= 2000-01-02T22:00:00UTC")); - //} + #[test] + #[ignore] + fn v2_cari0010_07m_phys_filter() { + let rnx = Rinex::from_file("../test_resources/MET/V2/cari0010.07m").unwrap(); + let rnx = rnx.filter(filter!("L1C")); + assert_eq!(rnx.observable().count(), 3); + let rnx = rnx.filter(filter!("TD")); + assert_eq!(rnx.observable().count(), 1); + } + #[test] + #[ignore] + fn v2_clar0020_00m_phys_filter() { + let mut rnx = Rinex::from_file("../test_resources/MET/V2/clar0020.00m").unwrap(); + rnx.filter_mut(filter!("L1C")); + assert_eq!(rnx.observable().count(), 3); + rnx.filter_mut(filter!("PR")); + assert_eq!(rnx.observable().count(), 1); + } + #[test] + #[ignore] + fn v2_cari0010_07m_time_filter() { + let mut rnx = Rinex::from_file("../test_resources/MET/V2/cari0010.07m").unwrap(); + rnx.filter_mut(filter!(">= 2000-01-02T22:00:00UTC")); + } } diff --git a/rinex/src/tests/merge.rs b/rinex/src/tests/merge.rs index ed0761830..592602eea 100644 --- a/rinex/src/tests/merge.rs +++ b/rinex/src/tests/merge.rs @@ -1,8 +1,16 @@ #[cfg(test)] mod test { use crate::prelude::*; + use crate::tests::toolkit::test_observation_rinex; use crate::Merge; + use crate::{ + //erratic_time_frame, + evenly_spaced_time_frame, + tests::toolkit::TestTimeFrame, + }; + //use itertools::Itertools; use std::path::PathBuf; + use std::str::FromStr; #[test] fn fail_on_type_mismatch() { let test_resources = PathBuf::new() @@ -21,10 +29,10 @@ mod test { .join("LARM0630.22O"); let mut r1 = Rinex::from_file(&path1.to_string_lossy()).unwrap(); let r2 = Rinex::from_file(&path2.to_string_lossy()).unwrap(); - assert_eq!(r1.merge_mut(&r2).is_err(), true) + assert!(r1.merge_mut(&r2).is_err()) } #[test] - fn merge() { + fn merge_nav() { let test_resources = PathBuf::new() .join(env!("CARGO_MANIFEST_DIR")) .join("..") @@ -53,7 +61,10 @@ mod test { let rnx_a = rnx_a.unwrap(); let rnx_b = rnx_b.unwrap(); let merged = rnx_a.merge(&rnx_b); - assert!(merged.is_ok(), "failed to merge NAV/V3/CBW100NLD_R_20210010000_01D_MN.rnx into NAV/V3/AMEL00NLD_R_20210010000_01D_MN.rnx"); + assert!( + merged.is_ok(), + "failed to merge NAV/V3/CBW100NLD_R_20210010000_01D_MN.rnx into NAV/V3/AMEL00NLD_R_20210010000_01D_MN.rnx" + ); // dump let merged = merged.unwrap(); @@ -61,11 +72,21 @@ mod test { merged.to_file("merge.txt").is_ok(), "failed to generate file previously merged" ); + assert!( + merged.is_merged(), + "is_merged() should be true after merging!" + ); // parse back let rnx = Rinex::from_file("merge.txt"); assert!(rnx.is_ok(), "Failed to parsed back previously merged file"); + let rnx = rnx.unwrap(); + assert!( + rnx.is_merged(), + "failed to identify a merged file correctly" + ); + /* * Unlock reciprocity test in near future * NAV file production does not work correctly at the moment, @@ -73,6 +94,78 @@ mod test { */ // assert_eq!(rnx, merged, "Merge::ops reciprocity"); + // remove file we just generated + let _ = std::fs::remove_file("merge.txt"); + } + #[test] + #[ignore] + fn merge_obs() { + let test_resources = PathBuf::new() + .join(env!("CARGO_MANIFEST_DIR")) + .join("..") + .join("test_resources"); + let path1 = test_resources + .clone() + .join("OBS") + .join("V2") + .join("AJAC3550.21O"); + let rnx_a = Rinex::from_file(&path1.to_string_lossy()); + assert!(rnx_a.is_ok(), "failed to parse OBS/V2/AJAC3550.21O"); + let path2 = test_resources + .clone() + .join("OBS") + .join("V2") + .join("npaz3550.21o"); + let rnx_b = Rinex::from_file(&path2.to_string_lossy()); + assert!(rnx_b.is_ok(), "failed to parse OBS/V2/npaz3550.21o"); + + let rnx_a = rnx_a.unwrap(); + let rnx_b = rnx_b.unwrap(); + let merged = rnx_a.merge(&rnx_b); + assert!( + merged.is_ok(), + "failed to merge OBS/V2/npaz3550.21o into OBS/V2/AJAC3550.21O" + ); + + let merged = merged.unwrap(); + + test_observation_rinex( + &merged, + "2.11", + Some("MIXED"), + "GPS, GLO, GAL, EGNOS", + "G07, G08, G10, G15, G16, G18, G21, G23, G26, G32, R04, R05, R06, R10, R12, R19, R20, R21, E04, E11, E12, E19, E24, E25, E31, E33, S23, S36", + "L1, L2, C1, C2, P1, P2, D1, D2, S1, S2, L5, C5, D5, S5, L7, C7, D7, S7, L8, C8, D8, S8", + Some("2021-21-12T00:00:00 GPST"), + Some("2021-12-21T23:59:30 GPST"), + evenly_spaced_time_frame!( + "2021-12-21T00:00:00 GPST", + "2021-12-21T01:04:00 GPST", + "30 s") + ); + + // dump + assert!( + merged.to_file("merge.txt").is_ok(), + "failed to generate file previously merged" + ); + assert!( + merged.is_merged(), + "is_merged() should be true after merging!" + ); + + // parse back + let rnx = Rinex::from_file("merge.txt"); + assert!(rnx.is_ok(), "Failed to parsed back previously merged file"); + + let rnx = rnx.unwrap(); + assert!( + rnx.is_merged(), + "failed to identify a merged file correctly" + ); + + assert_eq!(rnx, merged, "merge() reciprocity"); + // remove file we just generated let _ = std::fs::remove_file("merge.txt"); } diff --git a/rinex/src/tests/meteo.rs b/rinex/src/tests/meteo.rs index 060e21ec7..1c842a330 100644 --- a/rinex/src/tests/meteo.rs +++ b/rinex/src/tests/meteo.rs @@ -1,35 +1,102 @@ #[cfg(test)] mod test { use crate::prelude::*; + use crate::tests::toolkit::test_meteo_rinex; + use crate::{erratic_time_frame, evenly_spaced_time_frame, tests::toolkit::TestTimeFrame}; + use itertools::Itertools; use std::str::FromStr; #[test] fn v2_abvi0010_15m() { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/MET/V2/abvi0010.15m"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.is_meteo_rinex(), true); - assert_eq!(rinex.header.obs.is_none(), true); - assert_eq!(rinex.header.meteo.is_some(), true); - - let mut observables: Vec<_> = rinex.observable().collect(); - observables.sort(); // for comparison - - let mut expected: Vec<&Observable> = vec![ - &Observable::Temperature, - &Observable::Pressure, - &Observable::RainIncrement, - &Observable::HumidityRate, - &Observable::WindSpeed, - &Observable::WindDirection, - &Observable::HailIndicator, - ]; - expected.sort(); // for comparison - - assert!(observables == expected, "parsed wrong observable content"); + test_meteo_rinex( + &rinex, + "2.11", + "PR, TD, HR, WS, WD, RI, HI", + erratic_time_frame!( + " + 2015-01-01T00:00:00 UTC, + 2015-01-01T00:01:00 UTC, + 2015-01-01T00:02:00 UTC, + 2015-01-01T00:03:00 UTC, + 2015-01-01T00:04:00 UTC, + 2015-01-01T00:05:00 UTC, + 2015-01-01T00:06:00 UTC, + 2015-01-01T00:07:00 UTC, + 2015-01-01T00:08:00 UTC, + 2015-01-01T00:09:00 UTC, + 2015-01-01T09:00:00 UTC, + 2015-01-01T09:01:00 UTC, + 2015-01-01T09:02:00 UTC, + 2015-01-01T09:03:00 UTC, + 2015-01-01T09:04:00 UTC, + 2015-01-01T19:25:00 UTC, + 2015-01-01T19:26:00 UTC, + 2015-01-01T19:27:00 UTC, + 2015-01-01T19:28:00 UTC, + 2015-01-01T19:29:00 UTC, + 2015-01-01T19:30:00 UTC, + 2015-01-01T19:31:00 UTC, + 2015-01-01T19:32:00 UTC, + 2015-01-01T19:33:00 UTC, + 2015-01-01T19:34:00 UTC, + 2015-01-01T19:35:00 UTC, + 2015-01-01T19:36:00 UTC, + 2015-01-01T19:37:00 UTC, + 2015-01-01T19:38:00 UTC, + 2015-01-01T19:39:00 UTC, + 2015-01-01T19:40:00 UTC, + 2015-01-01T19:41:00 UTC, + 2015-01-01T19:42:00 UTC, + 2015-01-01T19:43:00 UTC, + 2015-01-01T19:44:00 UTC, + 2015-01-01T19:45:00 UTC, + 2015-01-01T19:46:00 UTC, + 2015-01-01T19:47:00 UTC, + 2015-01-01T19:48:00 UTC, + 2015-01-01T19:49:00 UTC, + 2015-01-01T19:50:00 UTC, + 2015-01-01T19:51:00 UTC, + 2015-01-01T19:52:00 UTC, + 2015-01-01T19:53:00 UTC, + 2015-01-01T19:54:00 UTC, + 2015-01-01T22:55:00 UTC, + 2015-01-01T22:56:00 UTC, + 2015-01-01T22:57:00 UTC, + 2015-01-01T22:58:00 UTC, + 2015-01-01T22:59:00 UTC, + 2015-01-01T23:01:00 UTC, + 2015-01-01T23:01:00 UTC, + 2015-01-01T23:02:00 UTC, + 2015-01-01T23:09:00 UTC, + 2015-01-01T23:10:00 UTC, + 2015-01-01T23:11:00 UTC, + 2015-01-01T23:12:00 UTC, + 2015-01-01T23:13:00 UTC, + 2015-01-01T23:14:00 UTC, + 2015-01-01T23:15:00 UTC, + 2015-01-01T23:16:00 UTC, + 2015-01-01T23:17:00 UTC, + 2015-01-01T23:18:00 UTC, + 2015-01-01T23:19:00 UTC, + 2015-01-01T23:20:00 UTC, + 2015-01-01T23:21:00 UTC, + 2015-01-01T23:52:00 UTC, + 2015-01-01T23:53:00 UTC, + 2015-01-01T23:54:00 UTC, + 2015-01-01T23:55:00 UTC, + 2015-01-01T23:56:00 UTC, + 2015-01-01T23:57:00 UTC, + 2015-01-01T23:58:00 UTC, + 2015-01-01T23:59:00 UTC + " + ), + ); - let labels = vec![ + let labels = [ "pressure", "temp", "moisture", @@ -108,7 +175,7 @@ mod test { let content = epochs.get(index as usize); assert!(content.is_some(), "missing epoch {}", epoch); - let content = content.unwrap(); + //let content = content.unwrap(); for (field_index, expected_value) in expected_values.iter().enumerate() { let label = labels[field_index]; let value = record_values[field_index].get(index as usize); @@ -151,24 +218,24 @@ mod test { 0.0, "Error: it did not rain on that day" ); - assert_eq!( - rinex.hail_detected(), - false, - "Error: it did not hail on that day" - ); + assert!(!rinex.hail_detected(), "Error: it did not hail on that day"); } #[test] fn v4_example1() { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/MET/V4/example1.txt"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.is_meteo_rinex(), true); - assert_eq!(rinex.header.obs.is_none(), true); - assert_eq!(rinex.header.meteo.is_some(), true); + test_meteo_rinex( + &rinex, + "4.00", + "PR, TD, HR", + evenly_spaced_time_frame!("2021-01-07T00:00:00 UTC", "2021-01-07T00:02:00 UTC", "30 s"), + ); + let record = rinex.record.as_meteo(); - assert_eq!(record.is_some(), true); + assert!(record.is_some()); let record = record.unwrap(); assert_eq!(record.len(), 5); diff --git a/rinex/src/tests/mod.rs b/rinex/src/tests/mod.rs index dacb79326..c97b7ab9b 100644 --- a/rinex/src/tests/mod.rs +++ b/rinex/src/tests/mod.rs @@ -5,15 +5,17 @@ mod antex; mod clocks; mod compression; mod decompression; -mod ionex; +mod masking; mod merge; - -#[cfg(feature = "meteo")] -mod meteo; - mod nav; mod obs; mod parsing; mod production; mod sampling; mod smoothing; + +#[cfg(feature = "meteo")] +mod meteo; + +#[cfg(feature = "ionex")] +mod ionex; diff --git a/rinex/src/tests/nav.rs b/rinex/src/tests/nav.rs index 3ac205f93..24a6020f4 100644 --- a/rinex/src/tests/nav.rs +++ b/rinex/src/tests/nav.rs @@ -4,25 +4,25 @@ mod test { use crate::prelude::*; use crate::sv; use itertools::*; + use std::path::Path; use std::path::PathBuf; use std::str::FromStr; #[test] + #[cfg(feature = "nav")] fn v2_amel0010_21g() { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/NAV/V2/amel0010.21g"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.is_navigation_rinex(), true); - assert_eq!(rinex.header.obs.is_none(), true); - assert_eq!(rinex.header.meteo.is_none(), true); let record = rinex.record.as_nav(); - assert_eq!(record.is_some(), true); + assert!(record.is_some()); let record = record.unwrap(); assert_eq!(record.len(), 4); // Test: parsed correct amount of entries assert_eq!(rinex.navigation().count(), 4); + // Test: only Ephemeris in this record assert_eq!(rinex.ephemeris().count(), 6); // Test: only Legacy Ephemeris frames in this record @@ -245,54 +245,52 @@ mod test { assert_eq!(ephemeris.get_week(), Some(2138)); } - } else if *e == Epoch::from_str("2021-01-02T00:00:00").unwrap() { - if sv.prn == 30 { - assert_eq!( - ephemeris.sv_clock(), - (-3.621461801230E-04, -6.139089236970E-12, 0.000000000000), - "parsed wrong clock data" - ); + } else if *e == Epoch::from_str("2021-01-02T00:00:00").unwrap() && sv.prn == 30 { + assert_eq!( + ephemeris.sv_clock(), + (-3.621461801230E-04, -6.139089236970E-12, 0.000000000000), + "parsed wrong clock data" + ); - for (field, data) in vec![ - ("iode", Some(8.500000000000E1)), - ("crs", Some(-7.500000000000)), - ("deltaN", Some(5.476656696160E-9)), - ("m0", Some(-1.649762378650)), - ("cuc", Some(-6.072223186490E-7)), - ("e", Some(4.747916595080E-3)), - ("cus", Some(5.392357707020E-6)), - ("sqrta", Some(5.153756387710E+3)), - ("toe", Some(5.184000000000E+5)), - ("cic", Some(7.636845111850E-8)), - ("omega0", Some(2.352085289360E+00)), - ("cis", Some(-2.421438694000E-8)), - ("i0", Some(9.371909002540E-1)), - ("crc", Some(2.614687500000E+2)), - ("omega", Some(-2.846234079630)), - ("omegaDot", Some(-8.435351366240E-9)), - ("idot", Some(-7.000291590240E-11)), - ("l2Codes", Some(1.000000000000)), - ("l2pDataFlag", Some(0.0)), - ("svAccuracy", Some(0.0)), - ("tgd", Some(3.725290298460E-9)), - ("iodc", Some(8.500000000000E1)), - ("t_tm", Some(5.146680000000E5)), - ] { - let value = ephemeris.get_orbit_f64(field); - assert!(value.is_some(), "missing orbit filed \"{}\"", field); - assert_eq!( - value, data, - "parsed wrong \"{}\" value, expecting {:?} got {:?}", - field, data, value - ); - } - assert!( - ephemeris.get_orbit_f64("fitInt").is_none(), - "parsed fitInt unexpectedly" + for (field, data) in vec![ + ("iode", Some(8.500000000000E1)), + ("crs", Some(-7.500000000000)), + ("deltaN", Some(5.476656696160E-9)), + ("m0", Some(-1.649762378650)), + ("cuc", Some(-6.072223186490E-7)), + ("e", Some(4.747916595080E-3)), + ("cus", Some(5.392357707020E-6)), + ("sqrta", Some(5.153756387710E+3)), + ("toe", Some(5.184000000000E+5)), + ("cic", Some(7.636845111850E-8)), + ("omega0", Some(2.352085289360E+00)), + ("cis", Some(-2.421438694000E-8)), + ("i0", Some(9.371909002540E-1)), + ("crc", Some(2.614687500000E+2)), + ("omega", Some(-2.846234079630)), + ("omegaDot", Some(-8.435351366240E-9)), + ("idot", Some(-7.000291590240E-11)), + ("l2Codes", Some(1.000000000000)), + ("l2pDataFlag", Some(0.0)), + ("svAccuracy", Some(0.0)), + ("tgd", Some(3.725290298460E-9)), + ("iodc", Some(8.500000000000E1)), + ("t_tm", Some(5.146680000000E5)), + ] { + let value = ephemeris.get_orbit_f64(field); + assert!(value.is_some(), "missing orbit filed \"{}\"", field); + assert_eq!( + value, data, + "parsed wrong \"{}\" value, expecting {:?} got {:?}", + field, data, value ); - - assert_eq!(ephemeris.get_week(), Some(2138)); } + assert!( + ephemeris.get_orbit_f64("fitInt").is_none(), + "parsed fitInt unexpectedly" + ); + + assert_eq!(ephemeris.get_week(), Some(2138)); } } } @@ -302,15 +300,15 @@ mod test { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/NAV/V3/AMEL00NLD_R_20210010000_01D_MN.rnx"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.is_navigation_rinex(), true); - assert_eq!(rinex.header.obs.is_none(), true); - assert_eq!(rinex.header.meteo.is_none(), true); + assert!(rinex.is_navigation_rinex()); + assert!(rinex.header.obs.is_none()); + assert!(rinex.header.meteo.is_none()); let record = rinex.record.as_nav(); - assert_eq!(record.is_some(), true); + assert!(record.is_some()); let record = record.unwrap(); assert_eq!(record.len(), 6); @@ -472,7 +470,7 @@ mod test { }, _ => panic!("identified unexpected GAL vehicle \"{}\"", sv.prn), }, - _ => panic!("falsely identified \"{}\"", sv.to_string()), + _ => panic!("falsely identified \"{}\"", sv), } } //match sv.constellation } @@ -483,14 +481,14 @@ mod test { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/NAV/V4/KMS300DNK_R_20221591000_01H_MN.rnx.gz"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.is_navigation_rinex(), true); - assert_eq!(rinex.header.obs.is_none(), true); - assert_eq!(rinex.header.meteo.is_none(), true); + assert!(rinex.is_navigation_rinex()); + assert!(rinex.header.obs.is_none()); + assert!(rinex.header.meteo.is_none()); let record = rinex.record.as_nav(); - assert_eq!(record.is_some(), true); + assert!(record.is_some()); let record = record.unwrap(); // test first epoch @@ -876,7 +874,7 @@ mod test { } else { panic!("got unexpected system time \"{}\"", sto.system) } - } else if let Some(fr) = fr.as_eop() { + } else if let Some(_fr) = fr.as_eop() { eop_count += 1; // EOP test //TODO // we do not have EOP frame examples at the moment @@ -945,16 +943,16 @@ mod test { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/NAV/V3/BRDC00GOP_R_20210010000_01D_MN.rnx.gz"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.is_navigation_rinex(), true); - assert_eq!(rinex.header.obs.is_none(), true); - assert_eq!(rinex.header.meteo.is_none(), true); + assert!(rinex.is_navigation_rinex()); + assert!(rinex.header.obs.is_none()); + assert!(rinex.header.meteo.is_none()); assert_eq!(rinex.epoch().count(), 4); let record = rinex.record.as_nav(); - assert_eq!(record.is_some(), true); + assert!(record.is_some()); let record = record.unwrap(); let mut epochs: Vec = vec![ @@ -985,24 +983,25 @@ mod test { for fr in frames { let fr = fr.as_eph(); assert!(fr.is_some(), "only ephemeris frames expected here"); - let (msg, sv, data) = fr.unwrap(); + let (msg, _sv, _data) = fr.unwrap(); assert!(msg == NavMsgType::LNAV, "only lnav frame expected here"); } } } #[test] + #[cfg(feature = "nav")] #[cfg(feature = "flate2")] fn v4_nav_messages() { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/NAV/V4/KMS300DNK_R_20221591000_01H_MN.rnx.gz"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - for (epoch, (msg, sv, ephemeris)) in rinex.ephemeris() { + for (_epoch, (msg, sv, _ephemeris)) in rinex.ephemeris() { match sv.constellation { Constellation::GPS | Constellation::QZSS => { - let expected = vec![NavMsgType::LNAV, NavMsgType::CNAV, NavMsgType::CNV2]; + let expected = [NavMsgType::LNAV, NavMsgType::CNAV, NavMsgType::CNV2]; assert!( expected.contains(&msg), "parsed invalid GPS/QZSS V4 message \"{}\"", @@ -1010,7 +1009,7 @@ mod test { ); }, Constellation::Galileo => { - let expected = vec![NavMsgType::FNAV, NavMsgType::INAV]; + let expected = [NavMsgType::FNAV, NavMsgType::INAV]; assert!( expected.contains(&msg), "parsed invalid Galileo V4 message \"{}\"", @@ -1018,7 +1017,7 @@ mod test { ); }, Constellation::BeiDou => { - let expected = vec![ + let expected = [ NavMsgType::D1, NavMsgType::D2, NavMsgType::CNV1, @@ -1039,7 +1038,7 @@ mod test { msg ); }, - Constellation::Geo => { + Constellation::SBAS => { assert_eq!( msg, NavMsgType::SBAS, @@ -1052,6 +1051,7 @@ mod test { } } #[test] + #[cfg(feature = "nav")] #[cfg(feature = "flate2")] fn v4_brd400dlr_s2023() { let path = PathBuf::new() @@ -1226,31 +1226,31 @@ mod test { } } else if *sv == sv!("G21") { assert_eq!(msg, NavMsgType::CNVX); - } else if *sv == sv!("J04") { - if *epoch == Epoch::from_str("2023-03-12T02:01:54 UTC").unwrap() { - let kb = iondata.as_klobuchar(); - assert!(kb.is_some()); - let kb = kb.unwrap(); - assert_eq!( - kb.alpha, - ( - 3.259629011154e-08, - -1.490116119385e-08, - -4.172325134277e-07, - -1.788139343262e-07 - ) - ); - assert_eq!( - kb.beta, - ( - 1.269760000000e+05, - -1.474560000000e+05, - 1.310720000000e+05, - 2.490368000000e+06 - ) - ); - assert_eq!(kb.region, KbRegionCode::WideArea); - } + } else if *sv == sv!("J04") + && *epoch == Epoch::from_str("2023-03-12T02:01:54 UTC").unwrap() + { + let kb = iondata.as_klobuchar(); + assert!(kb.is_some()); + let kb = kb.unwrap(); + assert_eq!( + kb.alpha, + ( + 3.259629011154e-08, + -1.490116119385e-08, + -4.172325134277e-07, + -1.788139343262e-07 + ) + ); + assert_eq!( + kb.beta, + ( + 1.269760000000e+05, + -1.474560000000e+05, + 1.310720000000e+05, + 2.490368000000e+06 + ) + ); + assert_eq!(kb.region, KbRegionCode::WideArea); } } for (epoch, (msg, sv, eop)) in rinex.earth_orientation() { @@ -1292,8 +1292,8 @@ mod test { } } #[test] - #[cfg(feature = "flate2")] #[cfg(feature = "nav")] + #[cfg(feature = "flate2")] #[ignore] fn sv_interp() { let path = PathBuf::new() @@ -1315,7 +1315,7 @@ mod test { let dt = rinex.dominant_sample_rate().unwrap(); let total_epochs = rinex.epoch().count(); - for (order, max_error) in vec![(7, 1E-1_f64), (9, 1.0E-2_64), (11, 0.5E-3_f64)] { + for (order, max_error) in [(7, 1E-1_f64), (9, 1.0E-2_64), (11, 0.5E-3_f64)] { let tmin = first_epoch + (order / 2) * dt; let tmax = last_epoch - (order / 2) * dt; println!("running Interp({}) testbench..", order); @@ -1324,20 +1324,23 @@ mod test { let interpolated = rinex.sv_position_interpolate(sv, epoch, order as usize); let achieved = interpolated.is_some(); //DEBUG - // println!("tmin: {} | tmax: {} | epoch: {} | feasible : {} | achieved: {}", tmin, tmax, epoch, feasible, achieved); - //if feasible { - // assert!( - // achieved == feasible, - // "interpolation should have been feasible @ epoch {}", - // epoch, - // ); - //} else { - // assert!( - // achieved == feasible, - // "interpolation should not have been feasible @ epoch {}", - // epoch, - // ); - //} + println!( + "tmin: {} | tmax: {} | epoch: {} | feasible : {} | achieved: {}", + tmin, tmax, epoch, feasible, achieved + ); + if feasible { + assert!( + achieved == feasible, + "interpolation should have been feasible @ epoch {}", + epoch, + ); + } else { + assert!( + achieved == feasible, + "interpolation should not have been feasible @ epoch {}", + epoch, + ); + } if !feasible { continue; } @@ -1384,4 +1387,57 @@ mod test { } } } + #[test] + #[cfg(feature = "nav")] + fn sv_toe_ephemeris() { + let path = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("..") + .join("test_resources") + .join("NAV") + .join("V3") + .join("AMEL00NLD_R_20210010000_01D_MN.rnx"); + let rinex = Rinex::from_file(&path.to_string_lossy().to_string()); + assert!(rinex.is_ok()); + let rinex = rinex.unwrap(); + for (toc, (_, sv, ephemeris)) in rinex.ephemeris() { + let e0 = Epoch::from_str("2021-01-01T00:00:00 BDT").unwrap(); + let e1 = Epoch::from_str("2021-01-01T05:00:00 BDT").unwrap(); + let e2 = Epoch::from_str("2021-01-01T10:10:00 GST").unwrap(); + let e3 = Epoch::from_str("2021-01-01T15:40:00 GST").unwrap(); + + let ts = sv.timescale(); + assert!(ts.is_some(), "timescale should be determined"); + let ts = ts.unwrap(); + + if let Some(toe) = ephemeris.toe(ts) { + let mut expected_sv = Sv::default(); + let mut expected_toe = Epoch::default(); + if *toc == e0 { + expected_toe = Epoch::from_str("2021-01-01T00:00:33 BDT").unwrap(); + expected_sv = sv!("C05"); + } else if *toc == e1 { + expected_toe = Epoch::from_str("2021-01-01T05:00:33 BDT").unwrap(); + expected_sv = sv!("C21"); + } else if *toc == e2 { + expected_toe = Epoch::from_str("2021-01-01T10:10:19 GST").unwrap(); + expected_sv = sv!("E01"); + } else if *toc == e3 { + expected_toe = Epoch::from_str("2021-01-01T15:40:19 GST").unwrap(); + expected_sv = sv!("E03"); + } else { + panic!("unhandled toc {}", toc); + } + assert_eq!(*sv, expected_sv, "wrong sv"); + assert_eq!(toe, expected_toe, "wrong toe evaluated"); + /* + * Rinex.sv_ephemeris(@ toe) should return exact ephemeris + */ + assert_eq!( + rinex.sv_ephemeris(expected_sv, toe), + Some((expected_toe, ephemeris)), + "sv_ephemeris(sv,t) @ toe should strictly identical ephemeris" + ); + } + } + } } diff --git a/rinex/src/tests/obs.rs b/rinex/src/tests/obs.rs index 3377d277e..e37760e7e 100644 --- a/rinex/src/tests/obs.rs +++ b/rinex/src/tests/obs.rs @@ -2,83 +2,12 @@ mod test { use crate::observable; use crate::sv; + use crate::tests::toolkit::test_observation_rinex; + use crate::{erratic_time_frame, evenly_spaced_time_frame, tests::toolkit::TestTimeFrame}; use crate::{header::*, observation::*, prelude::*}; + use itertools::Itertools; use std::path::Path; use std::str::FromStr; - /* - * Helper: to create a list of observable - */ - fn create_observ_list(descriptors: Vec<&str>) -> Vec { - let mut r: Vec = vec![]; - for desc in descriptors { - if desc.starts_with("L") { - let obs = Observable::Phase(String::from(desc)); - r.push(obs.clone()); - } else if desc.starts_with("P") { - let obs = Observable::PseudoRange(String::from(desc)); - r.push(obs.clone()); - } else if desc.starts_with("C") { - let obs = Observable::PseudoRange(String::from(desc)); - r.push(obs.clone()); - } else if desc.starts_with("S") { - let obs = Observable::SSI(String::from(desc)); - r.push(obs.clone()); - } - } - r.sort(); // for comparison purposes - r - } - /* - * General testbench - * shared accross all Observation files - */ - fn testbench( - rnx: &Rinex, - _major: u8, - _minor: u8, - c: Constellation, - epochs: Vec, - observables: Vec, - ) { - // must have dedicated fields - assert!(rnx.header.obs.is_some()); - /* - * Test epoch parsing and identification - */ - assert!(rnx.epoch().eq(epochs), "parsed wrong epoch content"); - - let mut parsed_observables: Vec = rnx.observable().cloned().collect(); - parsed_observables.sort(); - - assert!( - observables == parsed_observables, - "parsed wrong observable content,expecting\n{:?}\ngot\n{:?}", - observables, - parsed_observables - ); - - /* - * Test Record content - */ - let record = rnx.record.as_obs(); - assert!(record.is_some()); - let record = record.unwrap(); - assert!(record.len() > 0); - for ((_, _), (clk_offset, vehicles)) in record { - /* - * We don't have any files with clock offsets as of today - */ - assert!(clk_offset.is_none()); - /* - * test GNSS identification - */ - if c != Constellation::Mixed { - for (sv, _) in vehicles { - assert_eq!(sv.constellation, c); - } - } - } - } #[test] fn v2_aopr0010_17o() { let path = Path::new(env!("CARGO_MANIFEST_DIR")) @@ -88,19 +17,27 @@ mod test { .join("V2") .join("aopr0010.17o"); let fullpath = path.to_string_lossy(); - let rinex = Rinex::from_file(&fullpath.to_string()); - assert_eq!(rinex.is_ok(), true); + let rinex = Rinex::from_file(fullpath.as_ref()); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - let epochs: Vec = vec![ - Epoch::from_str("2017-01-01T00:00:00 GPST").unwrap(), - Epoch::from_str("2017-01-01T03:33:40 GPST").unwrap(), - Epoch::from_str("2017-01-01T06:09:10 GPST").unwrap(), - ]; - - let observables = create_observ_list(vec!["L1", "L2", "P1", "P2", "C1"]); + test_observation_rinex( + &rinex, + "2.10", + Some("GPS"), + "GPS", + "G31,G27,G03,G32,G16,G14,G08,G23,G22,G07, G30, G11, G19, G07", + "C1, L1, L2, P2, P1", + Some("2017-01-01T00:00:00 GPST"), + None, + erratic_time_frame!( + "2017-01-01T00:00:00 GPST, + 2017-01-01T03:33:40 GPST, + 2017-01-01T06:09:10 GPST" + ), + ); - testbench(&rinex, 2, 11, Constellation::GPS, epochs, observables); + //testbench(&rinex, 2, 11, Constellation::GPS, epochs, observables); let record = rinex.record.as_obs().unwrap(); for (index, (_e, (_, vehicles))) in record.iter().enumerate() { @@ -205,55 +142,60 @@ mod test { .join("V2") .join("npaz3550.21o"); let fullpath = path.to_string_lossy(); - let rinex = Rinex::from_file(&fullpath.to_string()); - assert_eq!(rinex.is_ok(), true); + let rinex = Rinex::from_file(fullpath.as_ref()); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - //testbench(&rinex, 2, 11, Constellation::Mixed, epochs); - - let obs_hd = rinex.header.obs.as_ref().unwrap(); - let record = rinex.record.as_obs(); - assert_eq!(record.is_some(), true); - let record = record.unwrap(); - ////////////////////////////// - // This file is GPS + GLONASS - ////////////////////////////// - let obscodes = obs_hd.codes.get(&Constellation::GPS); - assert_eq!(obscodes.is_some(), true); - let obscodes = obscodes.unwrap(); - assert_eq!( - obscodes, - &vec![ - Observable::from_str("C1").unwrap(), - Observable::from_str("L1").unwrap(), - Observable::from_str("L2").unwrap(), - Observable::from_str("P2").unwrap(), - Observable::from_str("S1").unwrap(), - Observable::from_str("S2").unwrap(), - ] - ); - let obscodes = obs_hd.codes.get(&Constellation::Glonass); - assert_eq!(obscodes.is_some(), true); - let obscodes = obscodes.unwrap(); - assert_eq!( - obscodes, - &vec![ - Observable::from_str("C1").unwrap(), - Observable::from_str("L1").unwrap(), - Observable::from_str("L2").unwrap(), - Observable::from_str("P2").unwrap(), - Observable::from_str("S1").unwrap(), - Observable::from_str("S2").unwrap(), - ] + test_observation_rinex( + &rinex, + "2.11", + Some("MIXED"), + "GPS, GLO", + "G08,G10,G15,G16,G18,G21,G23,G26,G32,R04,R05,R06,R10,R12,R19,R20,R21", + "C1, L1, L2, P2, S1, S2", + Some("2021-12-21T00:00:00 GPST"), + Some("2021-12-21T23:59:30 GPST"), + evenly_spaced_time_frame!( + "2021-12-21T00:00:00 GPST", + "2021-12-21T01:04:00 GPST", + "30 s" + ), ); + //let obscodes = obs_hd.codes.get(&Constellation::GPS); + //assert_eq!( + // obscodes, + // &vec![ + // Observable::from_str("C1").unwrap(), + // Observable::from_str("L1").unwrap(), + // Observable::from_str("L2").unwrap(), + // Observable::from_str("P2").unwrap(), + // Observable::from_str("S1").unwrap(), + // Observable::from_str("S2").unwrap(), + // ] + //); + //let obscodes = obs_hd.codes.get(&Constellation::Glonass); + //assert_eq!( + // obscodes, + // &vec![ + // Observable::from_str("C1").unwrap(), + // Observable::from_str("L1").unwrap(), + // Observable::from_str("L2").unwrap(), + // Observable::from_str("P2").unwrap(), + // Observable::from_str("S1").unwrap(), + // Observable::from_str("S2").unwrap(), + // ] + //); + + let record = rinex.record.as_obs().unwrap(); + // test epoch [1] let epoch = Epoch::from_str("2021-12-21T00:00:00 GPST").unwrap(); let flag = EpochFlag::Ok; let epoch = record.get(&(epoch, flag)); - assert_eq!(epoch.is_some(), true); + assert!(epoch.is_some()); let (clk_offset, epoch) = epoch.unwrap(); - assert_eq!(clk_offset.is_none(), true); + assert!(clk_offset.is_none()); assert_eq!(epoch.len(), 17); // G08 @@ -262,47 +204,47 @@ mod test { prn: 08, }; let observations = epoch.get(&sv); - assert_eq!(observations.is_some(), true); + assert!(observations.is_some()); let observations = observations.unwrap(); // C1 let observed = observations.get(&Observable::from_str("C1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 22288985.512); assert_eq!(observed.lli, None); assert_eq!(observed.snr, None); // L1 let observed = observations.get(&Observable::from_str("L1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); //assert_eq!(observed.obs, 117129399.048); assert_eq!(observed.lli, Some(LliFlags::OK_OR_UNKNOWN)); assert_eq!(observed.snr, Some(Snr::DbHz36_41)); // L2 let observed = observations.get(&Observable::from_str("L2").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); //assert_eq!(observed.obs, 91269672.416); assert_eq!(observed.lli, Some(LliFlags::UNDER_ANTI_SPOOFING)); assert_eq!(observed.snr, Some(Snr::DbHz36_41)); // P2 let observed = observations.get(&Observable::from_str("P2").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 22288987.972); assert_eq!(observed.lli, None); assert_eq!(observed.snr, None); // S1 let observed = observations.get(&Observable::from_str("S1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 44.000); assert_eq!(observed.lli, None); assert_eq!(observed.snr, None); // S2 let observed = observations.get(&Observable::from_str("S2").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 27.000); assert_eq!(observed.lli, None); @@ -314,39 +256,39 @@ mod test { prn: 19, }; let observations = epoch.get(&sv); - assert_eq!(observations.is_some(), true); + assert!(observations.is_some()); let observations = observations.unwrap(); // C1 let observed = observations.get(&Observable::from_str("C1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 23250776.648); assert_eq!(observed.lli, None); assert_eq!(observed.snr, None); // L1 let observed = observations.get(&Observable::from_str("L1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); //assert_eq!(observed.obs, 124375967.254); assert_eq!(observed.lli, Some(LliFlags::OK_OR_UNKNOWN)); assert_eq!(observed.snr, Some(Snr::DbHz0)); // L2 let observed = observations.get(&Observable::from_str("L2").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); // P2 let observed = observations.get(&Observable::from_str("P2").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); // S1 let observed = observations.get(&Observable::from_str("S1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 32.000); assert_eq!(observed.lli, None); assert_eq!(observed.snr, None); // S2 let observed = observations.get(&Observable::from_str("S2").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); } #[test] fn v2_rovn0010_21o() { @@ -357,16 +299,69 @@ mod test { .join("V2") .join("rovn0010.21o"); let fullpath = path.to_string_lossy(); - let rinex = Rinex::from_file(&fullpath.to_string()); - assert_eq!(rinex.is_ok(), true); + let rinex = Rinex::from_file(fullpath.as_ref()); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); + + test_observation_rinex(&rinex, "2.11", Some("MIXED"), "GPS, GLO", + "G07, G08, G10, G13, G15, G16, G18, G21, G23, G26, G27, G30, R01, R02, R03, R08, R09, R15, R16, R17, R18, R19, R24", "C1, C2, C5, L1, L2, L5, P1, P2, S1, S2, S5", Some("2021-01-01T00:00:00 GPST"), Some("2021-01-01T23:59:30 GPST"), + erratic_time_frame!(" + 2021-01-01T00:00:00 GPST, + 2021-01-01T00:00:30 GPST, + 2021-01-01T01:10:00 GPST, + 2021-01-01T02:25:00 GPST, + 2021-01-01T02:25:30 GPST, + 2021-01-01T02:26:00 GPST + ") + ); + + ////////////////////////////// + // This file is GPS + GLONASS + ////////////////////////////// + //let obscodes = obs_hd.codes.get(&Constellation::GPS); + //assert_eq!(obscodes.is_some(), true); + //let obscodes = obscodes.unwrap(); + //assert_eq!( + // obscodes, + // &vec![ + // Observable::from_str("C1").unwrap(), + // Observable::from_str("C2").unwrap(), + // Observable::from_str("C5").unwrap(), + // Observable::from_str("L1").unwrap(), + // Observable::from_str("L2").unwrap(), + // Observable::from_str("L5").unwrap(), + // Observable::from_str("P1").unwrap(), + // Observable::from_str("P2").unwrap(), + // Observable::from_str("S1").unwrap(), + // Observable::from_str("S2").unwrap(), + // Observable::from_str("S5").unwrap(), + // ] + //); + + //let obscodes = obs_hd.codes.get(&Constellation::Glonass); + //assert_eq!(obscodes.is_some(), true); + //let obscodes = obscodes.unwrap(); + //assert_eq!( + // obscodes, + // &vec![ + // Observable::from_str("C1").unwrap(), + // Observable::from_str("C2").unwrap(), + // Observable::from_str("C5").unwrap(), + // Observable::from_str("L1").unwrap(), + // Observable::from_str("L2").unwrap(), + // Observable::from_str("L5").unwrap(), + // Observable::from_str("P1").unwrap(), + // Observable::from_str("P2").unwrap(), + // Observable::from_str("S1").unwrap(), + // Observable::from_str("S2").unwrap(), + // Observable::from_str("S5").unwrap(), + // ] + //); + /* * Header tb */ let header = &rinex.header; - assert!(rinex.is_observation_rinex()); - assert!(header.obs.is_some()); - assert!(header.meteo.is_none()); assert_eq!( header.ground_position, Some(GroundPosition::from_ecef_wgs84(( @@ -379,62 +374,16 @@ mod test { assert_eq!(header.observer, "Hans van der Marel"); assert_eq!(header.agency, "TU Delft for Deltares"); - let obs_hd = header.obs.as_ref(); - assert!(obs_hd.is_some()); - let obs_hd = obs_hd.unwrap(); - let record = rinex.record.as_obs(); assert!(record.is_some()); let record = record.unwrap(); - ////////////////////////////// - // This file is GPS + GLONASS - ////////////////////////////// - let obscodes = obs_hd.codes.get(&Constellation::GPS); - assert_eq!(obscodes.is_some(), true); - let obscodes = obscodes.unwrap(); - assert_eq!( - obscodes, - &vec![ - Observable::from_str("C1").unwrap(), - Observable::from_str("C2").unwrap(), - Observable::from_str("C5").unwrap(), - Observable::from_str("L1").unwrap(), - Observable::from_str("L2").unwrap(), - Observable::from_str("L5").unwrap(), - Observable::from_str("P1").unwrap(), - Observable::from_str("P2").unwrap(), - Observable::from_str("S1").unwrap(), - Observable::from_str("S2").unwrap(), - Observable::from_str("S5").unwrap(), - ] - ); - - let obscodes = obs_hd.codes.get(&Constellation::Glonass); - assert_eq!(obscodes.is_some(), true); - let obscodes = obscodes.unwrap(); - assert_eq!( - obscodes, - &vec![ - Observable::from_str("C1").unwrap(), - Observable::from_str("C2").unwrap(), - Observable::from_str("C5").unwrap(), - Observable::from_str("L1").unwrap(), - Observable::from_str("L2").unwrap(), - Observable::from_str("L5").unwrap(), - Observable::from_str("P1").unwrap(), - Observable::from_str("P2").unwrap(), - Observable::from_str("S1").unwrap(), - Observable::from_str("S2").unwrap(), - Observable::from_str("S5").unwrap(), - ] - ); // test epoch [1] let epoch = Epoch::from_str("2021-01-01T00:00:00 GPST").unwrap(); let epoch = record.get(&(epoch, EpochFlag::Ok)); - assert_eq!(epoch.is_some(), true); + assert!(epoch.is_some()); let (clk_offset, epoch) = epoch.unwrap(); - assert_eq!(clk_offset.is_none(), true); + assert!(clk_offset.is_none()); assert_eq!(epoch.len(), 24); // G07 @@ -443,74 +392,74 @@ mod test { prn: 07, }; let observations = epoch.get(&sv); - assert_eq!(observations.is_some(), true); + assert!(observations.is_some()); let observations = observations.unwrap(); // C1 let observed = observations.get(&Observable::from_str("C1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 24225566.040); assert_eq!(observed.lli, None); assert_eq!(observed.snr, Some(Snr::DbHz36_41)); //C2 let observed = observations.get(&Observable::from_str("C2").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 24225562.932); assert_eq!(observed.lli, None); assert_eq!(observed.snr, Some(Snr::from_str("6").unwrap())); //C5 [missing] let observed = observations.get(&Observable::from_str("C5").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); //L1 let observed = observations.get(&Observable::from_str("L1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); //assert_eq!(observed.obs, 127306204.852); assert_eq!(observed.lli, Some(LliFlags::OK_OR_UNKNOWN)); assert_eq!(observed.snr, Some(Snr::from_str("6").unwrap())); //L2 let observed = observations.get(&Observable::from_str("L2").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); //assert_eq!(observed.obs, 99199629.819); assert_eq!(observed.lli, Some(LliFlags::OK_OR_UNKNOWN)); assert_eq!(observed.snr, Some(Snr::from_str("4").unwrap())); //L5 [missing] let observed = observations.get(&Observable::from_str("L5").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); //P1 let observed = observations.get(&Observable::from_str("P1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 24225565.620); assert_eq!(observed.lli, None); assert_eq!(observed.snr, Some(Snr::from_str("4").unwrap())); //P2 let observed = observations.get(&Observable::from_str("P2").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 24225563.191); assert_eq!(observed.lli, None); assert_eq!(observed.snr, Some(Snr::from_str("4").unwrap())); //S1 let observed = observations.get(&Observable::from_str("S1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 40.586); assert_eq!(observed.lli, None); assert_eq!(observed.snr, None); //S2 let observed = observations.get(&Observable::from_str("S2").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 25.564); assert_eq!(observed.lli, None); assert_eq!(observed.snr, None); //S5 (missing) let observed = observations.get(&Observable::from_str("S5").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); // G07 let sv = Sv { @@ -518,59 +467,59 @@ mod test { prn: 24, }; let observations = epoch.get(&sv); - assert_eq!(observations.is_some(), true); + assert!(observations.is_some()); let observations = observations.unwrap(); //C1,C2,C5 let observed = observations.get(&Observable::from_str("C1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 23126824.976); assert_eq!(observed.lli, None); assert_eq!(observed.snr, Some(Snr::from_str("6").unwrap())); let observed = observations.get(&Observable::from_str("C2").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 23126830.088); assert_eq!(observed.lli, None); assert_eq!(observed.snr, Some(Snr::from_str("6").unwrap())); let observed = observations.get(&Observable::from_str("C5").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); //L1,L2,L5 let observed = observations.get(&Observable::from_str("L1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); //assert_eq!(observed.obs, 123669526.377); assert_eq!(observed.lli, Some(LliFlags::OK_OR_UNKNOWN)); assert_eq!(observed.snr, Some(Snr::from_str("6").unwrap())); let observed = observations.get(&Observable::from_str("L2").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); //assert_eq!(observed.obs, 96187435.849); assert_eq!(observed.lli, Some(LliFlags::OK_OR_UNKNOWN)); assert_eq!(observed.snr, Some(Snr::from_str("6").unwrap())); let observed = observations.get(&Observable::from_str("L5").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); //P1, P2 let observed = observations.get(&Observable::from_str("P1").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); let observed = observations.get(&Observable::from_str("P2").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); //S1,S2,S5 let observed = observations.get(&Observable::from_str("S1").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 41.931); assert_eq!(observed.lli, None); assert_eq!(observed.snr, None); let observed = observations.get(&Observable::from_str("S2").unwrap()); - assert_eq!(observed.is_some(), true); + assert!(observed.is_some()); let observed = observed.unwrap(); assert_eq!(observed.obs, 39.856); assert_eq!(observed.lli, None); assert_eq!(observed.snr, None); let observed = observations.get(&Observable::from_str("S5").unwrap()); - assert_eq!(observed.is_none(), true); + assert!(observed.is_none()); } #[test] fn v3_duth0630() { @@ -581,67 +530,33 @@ mod test { .join("V3") .join("DUTH0630.22O"); let fullpath = path.to_string_lossy(); - let rinex = Rinex::from_file(&fullpath.to_string()); - assert_eq!(rinex.is_ok(), true); + let rinex = Rinex::from_file(fullpath.as_ref()); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); - assert_eq!(rinex.header.obs.is_some(), true); - let obs = rinex.header.obs.as_ref().unwrap(); - - /* - * test Glonass observables - */ - let observables = obs.codes.get(&Constellation::Glonass); - assert_eq!(observables.is_some(), true); - let mut observables = observables.unwrap().clone(); - observables.sort(); - - let mut expected: Vec = "C1C L1C D1C S1C C2P L2P D2P S2P" - .split_ascii_whitespace() - .map(|k| Observable::from_str(k).unwrap()) - .collect(); - expected.sort(); - assert_eq!(observables, expected); - - /* - * test GPS observables - */ - let observables = obs.codes.get(&Constellation::GPS); - assert_eq!(observables.is_some(), true); - let mut observables = observables.unwrap().clone(); - observables.sort(); - - let mut expected: Vec = "C1C L1C D1C S1C C2W L2W D2W S2W" - .split_ascii_whitespace() - .map(|k| Observable::from_str(k).unwrap()) - .collect(); - expected.sort(); - assert_eq!(observables, expected); - let record = rinex.record.as_obs(); - assert_eq!(record.is_some(), true); - let record = record.unwrap(); + test_observation_rinex( + &rinex, + "3.02", + Some("MIXED"), + "GPS, GLO", + "G03, G01, G04, G09, G17, G19, G21, G22, G31, G32, R01, R02, R08, R09, R10, R17, R23, R24", + "C1C, L1C, D1C, S1C, C2P, L2P, D2P, S2P, C2W, L2W, D2W, S2W", + Some("2022-03-04T00:00:00 GPST"), + Some("2022-03-04T23:59:30 GPST"), + erratic_time_frame!( + "2022-03-04T00:00:00 GPST, 2022-03-04T00:28:30 GPST, 2022-03-04T00:57:00 GPST" + ), + ); /* - * Test epochs + * test Glonass observables */ - let expected: Vec = vec![ - Epoch::from_str("2022-03-04T00:00:00 GPST").unwrap(), - Epoch::from_str("2022-03-04T00:28:30 GPST").unwrap(), - Epoch::from_str("2022-03-04T00:57:00 GPST").unwrap(), - ]; - - let content: Vec<_> = rinex.epoch().collect(); - assert!( - expected == content, - "parsed wrong epoch content {:?}", - content, - ); - + let record = rinex.record.as_obs().unwrap(); let epoch = Epoch::from_str("2022-03-04T00:00:00 GPST").unwrap(); let e = record.get(&(epoch, EpochFlag::Ok)); - assert_eq!(e.is_some(), true); + assert!(e.is_some()); let (clk, vehicles) = e.unwrap(); - assert_eq!(clk.is_none(), true); + assert!(clk.is_none()); assert_eq!(vehicles.len(), 18); let g01 = Sv { @@ -649,24 +564,24 @@ mod test { prn: 01, }; let g01 = vehicles.get(&g01); - assert_eq!(g01.is_some(), true); + assert!(g01.is_some()); let data = g01.unwrap(); let c1c = data.get(&Observable::from_str("C1C").unwrap()); - assert_eq!(c1c.is_some(), true); + assert!(c1c.is_some()); let c1c = c1c.unwrap(); assert_eq!(c1c.obs, 20243517.560); assert!(c1c.lli.is_none()); assert!(c1c.snr.is_none()); let l1c = data.get(&Observable::from_str("L1C").unwrap()); - assert_eq!(l1c.is_some(), true); + assert!(l1c.is_some()); let l1c = l1c.unwrap(); assert_eq!(l1c.obs, 106380411.418); assert_eq!(l1c.lli, Some(LliFlags::OK_OR_UNKNOWN)); assert_eq!(l1c.snr, Some(Snr::from_str("8").unwrap())); let s1c = data.get(&Observable::from_str("S1C").unwrap()); - assert_eq!(s1c.is_some(), true); + assert!(s1c.is_some()); let s1c = s1c.unwrap(); assert_eq!(s1c.obs, 51.250); assert!(s1c.lli.is_none()); @@ -677,47 +592,47 @@ mod test { prn: 03, }; let g03 = vehicles.get(&g03); - assert_eq!(g03.is_some(), true); + assert!(g03.is_some()); let data = g03.unwrap(); let c1c = data.get(&Observable::from_str("C1C").unwrap()); - assert_eq!(c1c.is_some(), true); + assert!(c1c.is_some()); let c1c = c1c.unwrap(); assert_eq!(c1c.obs, 20619020.680); - assert_eq!(c1c.lli.is_none(), true); - assert_eq!(c1c.snr.is_none(), true); + assert!(c1c.lli.is_none()); + assert!(c1c.snr.is_none()); let l1c = data.get(&Observable::from_str("L1C").unwrap()); - assert_eq!(l1c.is_some(), true); + assert!(l1c.is_some()); let g04 = Sv { constellation: Constellation::GPS, prn: 04, }; let g04 = vehicles.get(&g04); - assert_eq!(g04.is_some(), true); + assert!(g04.is_some()); let data = g04.unwrap(); let c1c = data.get(&Observable::from_str("C1C").unwrap()); - assert_eq!(c1c.is_some(), true); + assert!(c1c.is_some()); let c1c = c1c.unwrap(); assert_eq!(c1c.obs, 21542633.500); - assert_eq!(c1c.lli.is_none(), true); - assert_eq!(c1c.snr.is_none(), true); + assert!(c1c.lli.is_none()); + assert!(c1c.snr.is_none()); let l1c = data.get(&Observable::from_str("L1C").unwrap()); - assert_eq!(l1c.is_some(), true); + assert!(l1c.is_some()); let epoch = Epoch::from_str("2022-03-04T00:28:30 GPST").unwrap(); let e = record.get(&(epoch, EpochFlag::Ok)); - assert_eq!(e.is_some(), true); + assert!(e.is_some()); let (clk, vehicles) = e.unwrap(); - assert_eq!(clk.is_none(), true); + assert!(clk.is_none()); assert_eq!(vehicles.len(), 17); let epoch = Epoch::from_str("2022-03-04T00:57:00 GPST").unwrap(); let e = record.get(&(epoch, EpochFlag::Ok)); - assert_eq!(e.is_some(), true); + assert!(e.is_some()); let (clk, vehicles) = e.unwrap(); - assert_eq!(clk.is_none(), true); + assert!(clk.is_none()); assert_eq!(vehicles.len(), 17); } //#[test] @@ -725,19 +640,19 @@ mod test { let test_resource = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/CRNX/V3/KMS300DNK_R_20221591000_01H_30S_MO.crx"; let rinex = Rinex::from_file(&test_resource); - assert_eq!(rinex.is_ok(), true); + assert!(rinex.is_ok()); let rinex = rinex.unwrap(); ////////////////////////// // Header testbench ////////////////////////// - assert_eq!(rinex.is_observation_rinex(), true); - assert_eq!(rinex.header.obs.is_some(), true); + assert!(rinex.is_observation_rinex()); + assert!(rinex.header.obs.is_some()); let obs = rinex.header.obs.as_ref().unwrap(); let glo_observables = obs.codes.get(&Constellation::Glonass); - assert_eq!(glo_observables.is_some(), true); + assert!(glo_observables.is_some()); let glo_observables = glo_observables.unwrap(); let mut index = 0; - for code in vec![ + for code in [ "C1C", "C1P", "C2C", "C2P", "C3Q", "L1C", "L1P", "L2C", "L2P", "L3Q", ] { assert_eq!(glo_observables[index], Observable::from_str(code).unwrap()); @@ -748,33 +663,34 @@ mod test { // Record testbench ////////////////////////// let record = rinex.record.as_obs(); - assert_eq!(record.is_some(), true); + assert!(record.is_some()); let record = record.unwrap(); // EPOCH[1] let epoch = Epoch::from_gregorian_utc(2022, 06, 08, 10, 00, 00, 00); let epoch = record.get(&(epoch, EpochFlag::Ok)); - assert_eq!(epoch.is_some(), true); + assert!(epoch.is_some()); let (clk_offset, epoch) = epoch.unwrap(); - assert_eq!(clk_offset.is_none(), true); + assert!(clk_offset.is_none()); assert_eq!(epoch.len(), 49); // EPOCH[2] let epoch = Epoch::from_gregorian_utc(2022, 06, 08, 10, 00, 30, 00); let epoch = record.get(&(epoch, EpochFlag::Ok)); - assert_eq!(epoch.is_some(), true); + assert!(epoch.is_some()); let (clk_offset, epoch) = epoch.unwrap(); - assert_eq!(clk_offset.is_none(), true); + assert!(clk_offset.is_none()); assert_eq!(epoch.len(), 49); // EPOCH[3] let epoch = Epoch::from_gregorian_utc(2020, 6, 8, 10, 1, 0, 00); let epoch = record.get(&(epoch, EpochFlag::Ok)); - assert_eq!(epoch.is_some(), true); + assert!(epoch.is_some()); let (clk_offset, epoch) = epoch.unwrap(); - assert_eq!(clk_offset.is_none(), true); + assert!(clk_offset.is_none()); assert_eq!(epoch.len(), 47); } #[test] + #[ignore] fn v2_kosg0010_95o() { let path = Path::new(env!("CARGO_MANIFEST_DIR")) .join("..") @@ -783,17 +699,28 @@ mod test { .join("V2") .join("KOSG0010.95O"); let fullpath = path.to_string_lossy(); - let rnx = Rinex::from_file(&fullpath.to_string()).unwrap(); - let expected: Vec = vec![ - Epoch::from_str("1995-01-01T00:00:00 GPST").unwrap(), - Epoch::from_str("1995-01-01T11:00:00 GPST").unwrap(), - Epoch::from_str("1995-01-01T20:44:30 GPST").unwrap(), - ]; - let content: Vec<_> = rnx.epoch().collect(); - assert!( - expected == content, - "parsed wrong epoch content {:?}", - content, + let rnx = Rinex::from_file(fullpath.as_ref()).unwrap(); + //for (e, sv) in rnx.sv_epoch() { + // println!("{:?} @ {}", sv, e); + //} + //panic!("stop"); + test_observation_rinex( + &rnx, + "2.0", + Some("GPS"), + "GPS", + //"G01, G04, G05, G06, G16, G17, G18, G19, G20, G21, G22, G23, G24, G25, G27, G29, G31", + "G01, G04, G05, G06, G16, G17, G18, G19, G20, G21, G22, G23, G24, G25, G27, G29, G31", + "C1, L1, L2, P2, S1", + Some("1995-01-01T00:00:00 GPST"), + Some("1995-01-01T23:59:30 GPST"), + erratic_time_frame!( + " + 1995-01-01T00:00:00 GPST, + 1995-01-01T11:00:00 GPST, + 1995-01-01T20:44:30 GPST + " + ), ); } #[test] @@ -805,7 +732,7 @@ mod test { .join("V2") .join("AJAC3550.21O"); let fullpath = path.to_string_lossy(); - let rnx = Rinex::from_file(&fullpath.to_string()).unwrap(); + let rnx = Rinex::from_file(fullpath.as_ref()).unwrap(); let epochs: Vec = vec![ Epoch::from_str("2021-12-21T00:00:00 GPST").unwrap(), Epoch::from_str("2021-12-21T00:00:30 GPST").unwrap(), @@ -906,7 +833,7 @@ mod test { let g07 = Sv::new(Constellation::GPS, 07); let observations = vehicles.get(&g07).unwrap(); - let mut codes: Vec = observations.keys().map(|k| k.clone()).collect(); + let mut codes: Vec = observations.keys().cloned().collect(); codes.sort(); let mut expected: Vec = "L1 L2 C1 P2 D1 D2 S1 S2" @@ -928,7 +855,7 @@ mod test { let r04 = Sv::new(Constellation::Glonass, 04); let observations = vehicles.get(&r04).unwrap(); - let mut codes: Vec = observations.keys().map(|k| k.clone()).collect(); + let mut codes: Vec = observations.keys().cloned().collect(); codes.sort(); let mut expected: Vec = "L1 L2 C1 C2 P2 D1 D2 S1 S2" @@ -983,7 +910,7 @@ mod test { let r04 = Sv::new(Constellation::Glonass, 04); let observations = vehicles.get(&r04).unwrap(); - let mut codes: Vec = observations.keys().map(|k| k.clone()).collect(); + let mut codes: Vec = observations.keys().cloned().collect(); codes.sort(); let mut expected: Vec = "L1 L2 C1 C2 P2 D1 D2 S1 S2" @@ -1039,7 +966,26 @@ mod test { .join("V3") .join("NOA10630.22O"); let fullpath = path.to_string_lossy(); - let rnx = Rinex::from_file(&fullpath.to_string()).unwrap(); + let rnx = Rinex::from_file(fullpath.as_ref()).unwrap(); + + test_observation_rinex( + &rnx, + "3.02", + Some("GPS"), + "GPS", + "G01, G03, G09, G17, G19, G21, G22", + "C1C, L1C, D1C, S1C, S2W, L2W, D2W, S2W", + Some("2022-03-04T00:00:00 GPST"), + Some("2022-03-04T23:59:30 GPST"), + erratic_time_frame!( + " + 2022-03-04T00:00:00 GPST, + 2022-03-04T00:00:30 GPST, + 2022-03-04T00:01:00 GPST, + 2022-03-04T00:52:30 GPST" + ), + ); + let expected: Vec = vec![ Epoch::from_str("2022-03-04T00:00:00 GPST").unwrap(), Epoch::from_str("2022-03-04T00:00:30 GPST").unwrap(), @@ -1057,7 +1003,7 @@ mod test { assert!(clk_offset.is_none()); assert_eq!(vehicles.len(), 9); if e_index < 3 { - let keys: Vec = vehicles.keys().map(|k| *k).collect(); + let keys: Vec = vehicles.keys().copied().collect(); let expected: Vec = vec![ Sv::new(Constellation::GPS, 01), Sv::new(Constellation::GPS, 03), @@ -1071,7 +1017,7 @@ mod test { ]; assert_eq!(keys, expected); } else { - let keys: Vec = vehicles.keys().map(|k| *k).collect(); + let keys: Vec = vehicles.keys().copied().collect(); let expected: Vec = vec![ Sv::new(Constellation::GPS, 01), Sv::new(Constellation::GPS, 03), @@ -1097,6 +1043,34 @@ mod test { Rinex::from_file("../test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz") .unwrap(); + test_observation_rinex( + &rnx, + "3.05", + Some("MIXED"), + "BDS, GAL, GLO, QZSS, GPS, EGNOS, SDCM, BDSBAS", + "C05, C07, C10, C12, C19, C20, C23, C32, C34, C37, + E01, E03, E05, E09, E13, E15, E24, E31, + G02, G05, G07, G08, G09, G13, G15, G18, G21, G27, G28, G30, + R01, R02, R08, R09, R10, R11, R12, R17, R18, R19, + S23, S25, S36", + "C2I, C6I, C7I, D2I, D6I, D7I, L2I, L6I, L7I, S2I, S6I, S7I, + C1C, C5Q, C6C, C7Q, C8Q, D1C, D5Q, D6C, D7Q, D8Q, L1C, L5Q, L6C, + L7Q, L8Q, S1C, S5Q, S7Q, S8Q, + C1C, C1W, C2L, C2W, C5Q, D1C, D2L, D2W, D5Q, L1C, L2L, L2W, L5Q, + S1C, S1W, S2L, S2W, S5Q, + C1C, C2L, C5Q, D1C, D2L, D5Q, L1C, L2L, L5Q, S1C, S2L, S5Q, + C1C, C1P, C2C, C2P, C3Q, D1C, D1P, D2C, D2P, D3Q, L1C, L1P, L2C, + L2P, L3Q, S1C, S1P, S2C, S2P, S3Q, + C1C, C5I, D1C, D5I, L1C, L5I, S1C, S5I", + Some("2020-06-25T00:00:00 GPST"), + Some("2020-06-25T23:59:30 GPST"), + evenly_spaced_time_frame!( + "2020-06-25T00:00:00 GPST", + "2020-06-25T23:59:30 GPST", + "30 s" + ), + ); + /* * Header tb */ @@ -1163,7 +1137,7 @@ mod test { .collect(); expected.sort(); assert_eq!(sorted, expected); - } else if *k == Constellation::Geo { + } else if *k == Constellation::SBAS { let mut sorted = v.clone(); sorted.sort(); let mut expected: Vec = "C1C C5I D1C D5I L1C L5I S1C S5I" @@ -1178,7 +1152,7 @@ mod test { } assert_eq!(header.glo_channels.len(), 23); - let mut keys: Vec = header.glo_channels.keys().map(|k| *k).collect(); + let mut keys: Vec = header.glo_channels.keys().copied().collect(); keys.sort(); assert_eq!( vec![ @@ -1208,7 +1182,7 @@ mod test { ], keys ); - let mut values: Vec = header.glo_channels.values().map(|k| *k).collect(); + let mut values: Vec = header.glo_channels.values().copied().collect(); values.sort(); assert_eq!( vec![ @@ -1224,8 +1198,23 @@ mod test { let rnx = Rinex::from_file("../test_resources/CRNX/V3/MOJN00DNK_R_20201770000_01D_30S_MO.crx.gz") .unwrap(); + test_observation_rinex( + &rnx, + "3.5", + Some("MIXED"), + "GPS, GLO, GAL, BDS, QZSS, IRNSS, EGNOS, SDCM, GAGAN, BDSBAS", + "C05, C07, C10, C12, C19, C20, C23, C32, C34, C37, E01, E03, E05, E09, E13, E15, E24, E31, G05, G07, G08, G09, G13, G15, G27, G30, I02, I04, I06, R01, R02, R08, R09, R10, R11, R17, R18, R19, S23, S25, S26, S27, S36", + "C2I, C6I, C7I, D2I, D6I, D7I, L2I, L6I, L7I, S2I, S6I, S7I, C1C, C5Q, C6C, C7Q, C8Q, D1C, D5Q, D6C, D7Q, D8Q, L1C, L5Q, L6C, L7Q, L8Q, S1C, S5Q, S6C, S7Q, S8Q, C1C, C1W, C2L, C2W, C5Q, D1C, D2L, D2W, D5Q, L1C, L2L, L2W, L5Q, S1C, S1W, S2L, S2W, S5Q, C5A, D5A, L5A, S5A, C1C, C2L, C5Q, D1C, D2L, D5Q, L1C, L2L, L5Q, S1C, S2L, S5Q, C1C, C1P, C2C, C2P, C3Q, D1C, D1P, D2C, D2P, D3Q, L1C, L1P, L2C, L2P, L3Q, S1C, S1P, S2C, S2P, S3Q, C1C, C5I, D1C, D5I, L1C, L5I, S1C, S5I", + Some("2020-06-25T00:00:00 GPST"), + Some("2020-06-25T23:59:30 GPST"), + evenly_spaced_time_frame!( + "2020-06-25T00:00:00 GPST", + "2020-06-25T23:59:30 GPST", + "30 s" + ) + ); /* - * Test IRNSS vehicles + * Test IRNSS vehicles specificly */ let mut irnss_sv: Vec = rnx .sv() diff --git a/rinex/src/tests/parsing.rs b/rinex/src/tests/parsing.rs index ab863a2ce..88fff808b 100644 --- a/rinex/src/tests/parsing.rs +++ b/rinex/src/tests/parsing.rs @@ -19,7 +19,7 @@ mod test { let entry = entry.unwrap(); let path = entry.path(); let full_path = &path.to_str().unwrap(); - let is_hidden = entry.file_name().to_str().unwrap().starts_with("."); + let is_hidden = entry.file_name().to_str().unwrap().starts_with('.'); if is_hidden { continue; // not a test resource } @@ -35,9 +35,8 @@ mod test { } println!("Parsing \"{}\"", full_path); let rinex = Rinex::from_file(full_path); - assert_eq!( + assert!( rinex.is_ok(), - true, "error parsing \"{}\": {:?}", full_path, rinex.err().unwrap() @@ -54,8 +53,31 @@ mod test { assert!(rinex.epoch().count() > 0); // all files have content assert!(rinex.navigation().count() > 0); // all files have content /* - * Verify interpreted time scale, for all Sv + * For all Epoch: ephemeris selection + * must return given ephemeris */ + for (toc, (_, sv, eph)) in rinex.ephemeris() { + if let Some(ts) = sv.timescale() { + if let Some(toe) = eph.toe(ts) { + let seleph = rinex.sv_ephemeris(*sv, toe); + assert!( + seleph.is_some(), + "ephemeris selection @ toe should always be feasible" + ); + let (seltoe, seleph) = seleph.unwrap(); + assert_eq!(seltoe, toe, "toe should be identical"); + assert!( + (seleph.clock_bias - eph.clock_bias).abs() < 1.0E-6, + "ephemeris selection for t_oc should return exact ephemeris"); + assert!( + (seleph.clock_drift - eph.clock_drift).abs() < 1.0E-6, + "ephemeris selection for t_oc should return exact ephemeris"); + } + } + } + /* + * Verify interpreted time scale, for all Sv + */ //for (e, (_, sv, _)) in rinex.ephemeris() { // /* verify toc correctness */ // match sv.constellation { @@ -165,7 +187,7 @@ mod test { /* * Verify STO logical correctness */ - for (_, (msg, sv, _)) in rinex.system_time_offset() { + for (_, (msg, _sv, _)) in rinex.system_time_offset() { match msg { NavMsgType::LNAV | NavMsgType::FDMA @@ -177,14 +199,39 @@ mod test { } } }, - "OBS" => { + "CRNX" | "OBS" => { assert!(rinex.header.obs.is_some()); + let obs_header = rinex.header.obs.clone().unwrap(); + assert!(rinex.is_observation_rinex()); assert!(rinex.epoch().count() > 0); // all files have content assert!(rinex.observation().count() > 0); // all files have content /* - * test interpreted time scale + * test timescale validity */ + for ((e, _), _) in rinex.observation() { + let ts = e.time_scale; + if let Some(e0) = obs_header.time_of_first_obs { + assert!( + e0.time_scale == ts, + "interpreted wrong timescale: expecting \"{}\", got \"{}\"", + e0.time_scale, + ts + ); + } else { + match rinex.header.constellation { + Some(Constellation::Mixed) | None => {}, // can't test + Some(c) => { + let timescale = c.timescale().unwrap(); + assert!(ts == timescale, + "interpreted wrong timescale: expecting \"{}\", got \"{}\"", + timescale, + ts + ); + }, + } + } + } /* let gf = rinex.observation_gf_combinations(); let nl = rinex.observation_nl_combinations(); @@ -211,11 +258,6 @@ mod test { assert_eq!(wl_combinations, mw_combinations); */ }, - "CRNX" => { - assert!(rinex.header.obs.is_some()); - assert!(rinex.is_observation_rinex()); - assert!(rinex.epoch().count() > 0); // all files have content - }, "MET" => { assert!(rinex.is_meteo_rinex()); assert!(rinex.epoch().count() > 0); // all files have content @@ -243,8 +285,7 @@ mod test { "IONEX" => { assert!(rinex.is_ionex()); assert!(rinex.epoch().count() > 0); // all files have content - let record = rinex.record.as_ionex().unwrap(); - for (e, _) in record { + for e in rinex.epoch() { assert!( e.time_scale == TimeScale::UTC, "wrong {} timescale for a IONEX", diff --git a/rinex/src/tests/production.rs b/rinex/src/tests/production.rs index e5765f83f..51b4b2d89 100644 --- a/rinex/src/tests/production.rs +++ b/rinex/src/tests/production.rs @@ -1,19 +1,19 @@ #[cfg(test)] mod test { - use crate::tests::toolkit::{compare_with_panic, random_name}; + use crate::tests::toolkit::{random_name, test_against_model}; use crate::*; use std::path::Path; fn testbench(path: &str) { // parse this file let rnx = Rinex::from_file(path).unwrap(); // already tested elsewhere let tmp_path = format!("test-{}.rnx", random_name(5)); - assert_eq!(rnx.to_file(&tmp_path).is_ok(), true); // test writer + assert!(rnx.to_file(&tmp_path).is_ok()); // test writer let copy = Rinex::from_file(&tmp_path); - assert_eq!(copy.is_ok(), true); // content should be valid + assert!(copy.is_ok()); // content should be valid let copy = copy.unwrap(); // run comparison if copy != rnx { - compare_with_panic(©, &rnx, path); + test_against_model(©, &rnx, path, 1.0E-6); } println!("production test passed for \"{}\"", path); // remove copy @@ -21,6 +21,7 @@ mod test { } #[test] #[cfg(feature = "flate2")] + #[ignore] fn obs_v2() { let prefix = Path::new(env!("CARGO_MANIFEST_DIR")) .join("..") @@ -28,7 +29,7 @@ mod test { .join("OBS") .join("V2"); // does not work well on very old rinex like V2/KOSG.. - for file in vec![ + for file in [ "AJAC3550.21O", "aopr0010.17o", "barq071q.19o", @@ -41,11 +42,12 @@ mod test { let path = prefix.to_path_buf().join(file); let fullpath = path.to_string_lossy(); - testbench(&fullpath.to_string()); + testbench(fullpath.as_ref()); } } #[test] #[cfg(feature = "flate2")] + #[ignore] fn obs_v3() { let folder = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/OBS/V3/"; for file in std::fs::read_dir(folder).unwrap() { @@ -56,6 +58,7 @@ mod test { } #[test] #[cfg(feature = "flate2")] + //#[ignore] fn meteo_v2() { let folder = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/MET/V2/"; for file in std::fs::read_dir(folder).unwrap() { @@ -87,6 +90,7 @@ mod test { } #[test] #[cfg(feature = "flate2")] + #[ignore] fn nav_v2() { let folder = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/NAV/V2/"; for file in std::fs::read_dir(folder).unwrap() { @@ -97,6 +101,7 @@ mod test { } #[test] #[cfg(feature = "flate2")] + #[ignore] fn nav_v3() { let folder = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/NAV/V3/"; for file in std::fs::read_dir(folder).unwrap() { @@ -105,9 +110,9 @@ mod test { testbench(fp.to_str().unwrap()); } } - /* #[test] #[cfg(feature = "flate2")] + #[ignore] fn nav_v4() { let folder = env!("CARGO_MANIFEST_DIR").to_owned() + "/../test_resources/NAV/V4/"; for file in std::fs::read_dir(folder).unwrap() { @@ -115,5 +120,5 @@ mod test { let fp = fp.path(); testbench(fp.to_str().unwrap()); } - }*/ + } } diff --git a/rinex/src/tests/sampling.rs b/rinex/src/tests/sampling.rs index 74a07384b..afaac0929 100644 --- a/rinex/src/tests/sampling.rs +++ b/rinex/src/tests/sampling.rs @@ -15,15 +15,11 @@ mod sampling { .join("AJAC3550.21O"); let fullpath = path.to_string_lossy(); - let rinex = Rinex::from_file(&fullpath.to_string()); - assert!( - rinex.is_ok(), - "failed to parse \"{}\"", - fullpath.to_string() - ); + let rinex = Rinex::from_file(fullpath.as_ref()); + assert!(rinex.is_ok(), "failed to parse \"{}\"", fullpath); let rinex = rinex.unwrap(); - let expected = vec![(Duration::from_seconds(30.0), 1 as usize)]; + let expected = vec![(Duration::from_seconds(30.0), 1_usize)]; let histogram: Vec<_> = rinex.sampling_histogram().sorted().collect(); diff --git a/rinex/src/tests/toolkit.rs b/rinex/src/tests/toolkit.rs index ec767bfb3..1b8ecadc7 100644 --- a/rinex/src/tests/toolkit.rs +++ b/rinex/src/tests/toolkit.rs @@ -1,5 +1,54 @@ +use crate::navigation::FrameClass; use crate::*; use rand::{distributions::Alphanumeric, Rng}; + +use hifitime::TimeSeries; + +//#[macro_use] +#[macro_export] +macro_rules! erratic_time_frame { + ($csv: expr) => { + TestTimeFrame::Erratic( + $csv.split(",") + .map(|c| Epoch::from_str(c.trim()).unwrap()) + .unique() + .collect::>(), + ) + }; +} + +#[macro_export] +macro_rules! evenly_spaced_time_frame { + ($start: expr, $end: expr, $step: expr) => { + TestTimeFrame::EvenlySpaced(TimeSeries::inclusive( + Epoch::from_str($start.trim()).unwrap(), + Epoch::from_str($end.trim()).unwrap(), + Duration::from_str($step.trim()).unwrap(), + )) + }; +} + +#[derive(Debug, Clone)] +pub enum TestTimeFrame { + Erratic(Vec), + EvenlySpaced(TimeSeries), +} + +impl TestTimeFrame { + pub fn evenly_spaced(&self) -> Option { + match self { + Self::EvenlySpaced(ts) => Some(ts.clone()), + _ => None, + } + } + pub fn erratic(&self) -> Option> { + match self { + Self::Erratic(ts) => Some(ts.clone()), + _ => None, + } + } +} + /* * Tool to generate random names when we need to produce a file */ @@ -10,18 +59,159 @@ pub fn random_name(size: usize) -> String { .map(char::from) .collect() } + +/* + * Creates list of observables + */ +pub fn build_observables(observable_csv: &str) -> Vec { + observable_csv + .split(',') + .map(|c| { + let c = c.trim(); + if let Ok(observ) = Observable::from_str(c) { + observ + } else { + panic!("invalid observable in csv"); + } + }) + .collect::>() + .into_iter() + .unique() + .collect() +} + +use std::str::FromStr; + +/* + * Build GNSS list + */ +pub fn build_gnss_csv(gnss_csv: &str) -> Vec { + gnss_csv + .split(',') + .map(|c| Constellation::from_str(c.trim()).unwrap()) + .collect::>() + .into_iter() + .unique() + .collect() +} + +/* + * Test method to compare one RINEX against GNSS content + */ +pub fn test_gnss_csv(dut: &Rinex, gnss_csv: &str) { + let gnss = build_gnss_csv(gnss_csv); + let dut_gnss: Vec = dut.constellation().collect(); + for g in &gnss { + assert!( + dut_gnss.contains(g), + "dut does not contain constellation \"{}\"", + g + ); + } + for g in &dut_gnss { + assert!( + gnss.contains(g), + "dut should not contain constellation \"{:X}\"", + g + ); + } +} + +/* + * Compares one RINEX against SV total content + */ +pub fn test_sv_csv(dut: &Rinex, sv_csv: &str) { + let sv: Vec = sv_csv + .split(',') + .map(|c| Sv::from_str(c.trim()).unwrap()) + .collect::>() + .into_iter() + .unique() + .collect(); + + let dut_sv: Vec = dut.sv().collect(); + for v in &sv { + assert!(dut_sv.contains(v), "dut does not contain vehicle \"{}\"", v); + } + for v in &sv { + assert!(sv.contains(v), "dut should not contain vehicle \"{}\"", v); + } +} + +/* + * Compares one RINEX against given epoch content + */ +pub fn test_time_frame(dut: &Rinex, tf: TestTimeFrame) { + let mut dut_epochs = dut.epoch(); + let _epochs: Vec = Vec::new(); + if let Some(mut serie) = tf.evenly_spaced() { + for e in serie { + assert_eq!( + Some(e), + dut_epochs.next(), + "dut does not contain epoch {}", + e + ); + } + for e in dut_epochs.by_ref() { + panic!("dut should not contain epoch {}", e); + } + } else if let Some(serie) = tf.erratic() { + for e in serie { + assert!( + dut_epochs.any(|epoch| e == epoch), + "dut does not contain epoch {}", + e + ); + } + for e in dut_epochs { + panic!("dut should not contain epoch {}", e); + } + } +} + +/* + * Tests provided vehicles per epoch + * This is METEO + OBS compatible + */ +pub fn test_observables_csv(dut: &Rinex, observables_csv: &str) { + let observ = build_observables(observables_csv); + let dut_observ: Vec<&Observable> = dut.observable().collect(); + for o in &observ { + assert!( + dut_observ.contains(&o), + "dut does not contain observable {}", + o + ); + } + for o in &dut_observ { + assert!( + dut_observ.contains(o), + "dut should not contain observable {}", + o + ); + } +} + /* * OBS RINEX thorough comparison */ -fn observation_comparison(dut: &Rinex, model: &Rinex, filename: &str) { - let rec_dut = dut - .record - .as_obs() - .expect("failed to unwrap as observation rinex record"); +fn observation_against_model(dut: &Rinex, model: &Rinex, filename: &str, epsilon: f64) { + let rec_dut = dut.record.as_obs().expect("failed to unwrap rinex record"); let rec_model = model .record .as_obs() - .expect("failed to unwrap as observation rinex record"); + .expect("failed to unwrap rinex record"); + /* + * 1: make sure constellations are identical + */ + let dut_constell: Vec<_> = dut.constellation().collect(); + let expected_constell: Vec<_> = model.constellation().collect(); + assert_eq!( + dut_constell, expected_constell, + "mismatch for \"{}\"", + filename + ); for (e_model, (clk_offset_model, vehicles_model)) in rec_model.iter() { if let Some((clk_offset_dut, vehicles_dut)) = rec_dut.get(e_model) { @@ -35,7 +225,7 @@ fn observation_comparison(dut: &Rinex, model: &Rinex, filename: &str) { for (code_model, obs_model) in observables_model { if let Some(obs_dut) = observables_dut.get(code_model) { assert!( - (obs_model.obs - obs_dut.obs).abs() < 1.0E-6, + (obs_model.obs - obs_dut.obs).abs() < epsilon, "\"{}\" - {:?} - {:?} - \"{}\" expecting {} got {}", filename, e_model, @@ -123,15 +313,15 @@ fn observation_comparison(dut: &Rinex, model: &Rinex, filename: &str) { /* * CLOCK Rinex thorough comparison */ -fn clocks_comparison(dut: &Rinex, model: &Rinex, filename: &str) { +fn clocks_against_model(dut: &Rinex, model: &Rinex, filename: &str, _epsilon: f64) { let rec_dut = dut .record .as_clock() - .expect("failed to unwrap as clock rinex record"); + .expect("failed to unwrap rinex record"); let rec_model = model .record .as_clock() - .expect("failed to unwrap as clock rinex record"); + .expect("failed to unwrap rinex record"); for (e_model, model_types) in rec_model.iter() { if let Some(dut_types) = rec_dut.get(e_model) { for (model_data, _model_systems) in model_types.iter() { @@ -149,18 +339,80 @@ fn clocks_comparison(dut: &Rinex, model: &Rinex, filename: &str) { } } +/* + * Navigation RINEX thorough comparison + */ +fn navigation_against_model(dut: &Rinex, model: &Rinex, filename: &str, _epsilon: f64) { + let rec_dut = dut.record.as_nav().expect("failed to unwrap rinex record"); + let rec_model = model + .record + .as_nav() + .expect("failed to unwrap rinex record"); + for (e_model, model_frames) in rec_model.iter() { + if let Some(dut_frames) = rec_dut.get(e_model) { + println!("{:?}", dut_frames); + for model_frame in model_frames { + let mut frametype = FrameClass::default(); + if model_frame.as_eph().is_some() { + frametype = FrameClass::Ephemeris; + } else if model_frame.as_sto().is_some() { + frametype = FrameClass::SystemTimeOffset; + } else if model_frame.as_eop().is_some() { + frametype = FrameClass::EarthOrientation; + } else if model_frame.as_ion().is_some() { + frametype = FrameClass::IonosphericModel; + } + if !dut_frames.contains(model_frame) { + panic!( + "\"{}\" - @{} missing {} frame {:?}", + filename, e_model, frametype, model_frame + ); + //assert_eq!( + // observation_model, observation_dut, + // "\"{}\" - {:?} - faulty \"{}\" observation - expecting {} - got {}", + // filename, e_model, code_model, observation_model, observation_dut + //); + } + } + } else { + panic!("\"{}\" - missing epoch {:?}", filename, e_model); + } + } + + //for (e_dut, obscodes_dut) in rec_dut.iter() { + // if let Some(obscodes_model) = rec_model.get(e_dut) { + // for (code_dut, observation_dut) in obscodes_dut.iter() { + // if let Some(observation_model) = obscodes_model.get(code_dut) { + // assert_eq!( + // observation_model, observation_dut, + // "\"{}\" - {:?} - faulty \"{}\" observation - expecting {} - got {}", + // filename, e_dut, code_dut, observation_model, observation_dut + // ); + // } else { + // panic!( + // "\"{}\" - {:?} parsed \"{}\" unexpectedly", + // filename, e_dut, code_dut + // ); + // } + // } + // } else { + // panic!("\"{}\" - parsed {:?} unexpectedly", filename, e_dut); + // } + //} +} + /* * Meteo RINEX thorough comparison */ -fn meteo_comparison(dut: &Rinex, model: &Rinex, filename: &str) { +fn meteo_against_model(dut: &Rinex, model: &Rinex, filename: &str, _epsilon: f64) { let rec_dut = dut .record .as_meteo() - .expect("failed to unwrap as meteo rinex record"); + .expect("failed to unwrap rinex record"); let rec_model = model .record .as_meteo() - .expect("failed to unwrap as meteo rinex record"); + .expect("failed to unwrap rinex record"); for (e_model, obscodes_model) in rec_model.iter() { if let Some(obscodes_dut) = rec_dut.get(e_model) { for (code_model, observation_model) in obscodes_model.iter() { @@ -208,12 +460,230 @@ fn meteo_comparison(dut: &Rinex, model: &Rinex, filename: &str) { * Compares "dut" Device Under Test to given Model, * panics on unexpected content with detailed explanations. */ -pub fn compare_with_panic(dut: &Rinex, model: &Rinex, filename: &str) { +pub fn test_against_model(dut: &Rinex, model: &Rinex, filename: &str, epsilon: f64) { if dut.is_observation_rinex() { - observation_comparison(&dut, &model, filename); + observation_against_model(dut, model, filename, epsilon); } else if dut.is_meteo_rinex() { - meteo_comparison(&dut, &model, filename); + meteo_against_model(dut, model, filename, epsilon); } else if dut.is_clocks_rinex() { - clocks_comparison(&dut, &model, filename); + clocks_against_model(dut, model, filename, epsilon); + } else if dut.is_navigation_rinex() { + navigation_against_model(dut, model, filename, epsilon); + } +} + +/* + * Any parsed RINEX should go through this test + */ +pub fn test_rinex(dut: &Rinex, version: &str, constellation: Option<&str>) { + let version = Version::from_str(version).unwrap(); + assert!( + dut.header.version == version, + "parsed wrong version {}, expecting \"{}\"", + dut.header.version, + version + ); + + let constellation = constellation.map(|s| Constellation::from_str(s.trim()).unwrap()); + assert!( + dut.header.constellation == constellation, + "bad gnss description: {:?}, expecting {:?}", + dut.header.constellation, + constellation + ); +} + +/* + * Any parsed METEO RINEX should go through this test + */ +pub fn test_meteo_rinex( + dut: &Rinex, + version: &str, + observables_csv: &str, + time_frame: TestTimeFrame, +) { + test_rinex(dut, version, None); + assert!(dut.is_meteo_rinex(), "should be declared as METEO RINEX"); + test_observables_csv(dut, observables_csv); + test_time_frame(dut, time_frame); + /* + * Header specific fields + */ + assert!( + dut.header.obs.is_none(), + "should not contain specific OBS fields" + ); + assert!( + dut.header.meteo.is_some(), + "should contain specific METEO fields" + ); + assert!( + dut.header.ionex.is_none(), + "should not contain specific IONEX fields" + ); + assert!( + dut.header.clocks.is_none(), + "should not contain specific CLOCK fields" + ); + + let _header = dut.header.meteo.as_ref().unwrap(); +} + +/* + * Any parsed NAVIGATION RINEX should go through this test + */ +pub fn test_navigation_rinex(dut: &Rinex, version: &str, constellation: Option<&str>) { + test_rinex(dut, version, constellation); + assert!(dut.is_navigation_rinex(), "should be declared as NAV RINEX"); + /* + * Header specific fields + */ + assert!( + dut.header.obs.is_none(), + "should not contain specific OBS fields" + ); + assert!( + dut.header.meteo.is_none(), + "should not contain specific METEO fields" + ); + assert!( + dut.header.ionex.is_none(), + "should not contain specific IONEX fields" + ); + assert!( + dut.header.clocks.is_none(), + "should not contain specific CLOCK fields" + ); +} + +/* + * Any parsed CLOCK RINEX should go through this test + */ +pub fn test_clock_rinex(dut: &Rinex, version: &str, constellation: Option<&str>) { + test_rinex(dut, version, constellation); + assert!(dut.is_clocks_rinex(), "should be declared as CLK RINEX"); + /* + * Header specific fields + */ + assert!( + dut.header.obs.is_none(), + "should not contain specific OBS fields" + ); + assert!( + dut.header.meteo.is_none(), + "should not contain specific METEO fields" + ); + assert!( + dut.header.ionex.is_none(), + "should not contain specific IONEX fields" + ); + assert!( + dut.header.clocks.is_some(), + "should contain specific CLOCK fields" + ); +} + +/* + * Any parsed IONEX should go through this test + */ +pub fn test_ionex(dut: &Rinex, version: &str, constellation: Option<&str>) { + test_rinex(dut, version, constellation); + assert!(dut.is_ionex(), "should be declared as IONEX"); + /* + * Header specific fields + */ + assert!( + dut.header.obs.is_none(), + "should not contain specific OBS fields" + ); + assert!( + dut.header.meteo.is_none(), + "should not contain specific METEO fields" + ); + assert!( + dut.header.ionex.is_some(), + "should contain specific IONEX fields" + ); + assert!( + dut.header.clocks.is_none(), + "should not contain specific CLOCK fields" + ); +} + +/* + * Any parsed OBSERVATION RINEX should go through this test + */ +pub fn test_observation_rinex( + dut: &Rinex, + version: &str, + constellation: Option<&str>, + gnss_csv: &str, + sv_csv: &str, + observ_csv: &str, + time_of_first_obs: Option<&str>, + time_of_last_obs: Option<&str>, + time_frame: TestTimeFrame, + //observ_gnss_json: &str, +) { + test_rinex(dut, version, constellation); + assert!( + dut.is_observation_rinex(), + "should be declared as OBS RINEX" + ); + + assert!( + dut.record.as_obs().is_some(), + "observation record unwrapping" + ); + test_sv_csv(dut, sv_csv); + test_gnss_csv(dut, gnss_csv); + test_time_frame(dut, time_frame); + test_observables_csv(dut, observ_csv); + /* + * Specific header field testing + */ + assert!( + dut.header.obs.is_some(), + "missing observation specific header fields" + ); + assert!( + dut.header.meteo.is_none(), + "should not contain specific METEO fields" + ); + assert!( + dut.header.ionex.is_none(), + "should not contain specific IONEX fields" + ); + assert!( + dut.header.clocks.is_none(), + "should not contain specific CLOCK fields" + ); + + let header = dut.header.obs.as_ref().unwrap(); + //for (constell, observables) in observables { + // assert!(header_obs.codes.get(&constell).is_some(), "observation rinex specific header missing observables for constellation {}", constell); + // let values = header_obs.codes.get(&constell).unwrap(); + // for o in &observables { + // assert!(values.contains(&o), "observation rinex specific {} header is missing {} observable", constell, o); + // } + // for o in values { + // assert!(values.contains(&o), "observation rinex specific {} header should not contain {} observable", constell, o); + // } + //} + if let Some(time_of_first_obs) = time_of_first_obs { + assert_eq!( + Some(Epoch::from_str(time_of_first_obs).unwrap()), + header.time_of_first_obs, + "obs header is missing time of first obs \"{}\"", + time_of_first_obs + ); + } + if let Some(time_of_last_obs) = time_of_last_obs { + assert_eq!( + Some(Epoch::from_str(time_of_last_obs).unwrap()), + header.time_of_last_obs, + "obs header is missing time of last obs \"{}\"", + time_of_last_obs + ); } } diff --git a/rinex/src/types.rs b/rinex/src/types.rs index 1222e94ed..42dd7c869 100644 --- a/rinex/src/types.rs +++ b/rinex/src/types.rs @@ -62,9 +62,7 @@ impl Type { impl std::str::FromStr for Type { type Err = ParsingError; fn from_str(s: &str) -> Result { - if s.eq("NAVIGATION DATA") { - Ok(Self::NavigationData) - } else if s.contains("NAV DATA") { + if s.eq("NAVIGATION DATA") || s.contains("NAV DATA") { Ok(Self::NavigationData) } else if s.eq("OBSERVATION DATA") { Ok(Self::ObservationData) diff --git a/rinex/src/version.rs b/rinex/src/version.rs index 58e276a0d..8bc4f8663 100644 --- a/rinex/src/version.rs +++ b/rinex/src/version.rs @@ -80,25 +80,25 @@ impl std::ops::SubAssign for Version { } } -impl Into<(u8, u8)> for Version { - fn into(self) -> (u8, u8) { - (self.major, self.minor) +impl From for (u8, u8) { + fn from(v: Version) -> Self { + (v.major, v.minor) } } impl std::str::FromStr for Version { type Err = ParsingError; fn from_str(s: &str) -> Result { - match s.contains(".") { + match s.contains('.') { true => { - let digits: Vec<&str> = s.split(".").collect(); + let mut digits = s.split('.'); Ok(Self { - major: u8::from_str_radix(digits.get(0).unwrap(), 10)?, - minor: u8::from_str_radix(digits.get(1).unwrap(), 10)?, + major: digits.next().unwrap().parse::()?, + minor: digits.next().unwrap().parse::()?, }) }, false => Ok(Self { - major: u8::from_str_radix(s, 10)?, + major: s.parse::()?, minor: 0, }), } @@ -133,44 +133,44 @@ mod test { assert_eq!(version.minor, SUPPORTED_VERSION.minor); let version = Version::from_str("1"); - assert_eq!(version.is_ok(), true); + assert!(version.is_ok()); let version = version.unwrap(); assert_eq!(version.major, 1); assert_eq!(version.minor, 0); let version = Version::from_str("1.2"); - assert_eq!(version.is_ok(), true); + assert!(version.is_ok()); let version = version.unwrap(); assert_eq!(version.major, 1); assert_eq!(version.minor, 2); let version = Version::from_str("3.02"); - assert_eq!(version.is_ok(), true); + assert!(version.is_ok()); let version = version.unwrap(); assert_eq!(version.major, 3); assert_eq!(version.minor, 2); let version = Version::from_str("a.b"); - assert_eq!(version.is_err(), true); + assert!(version.is_err()); } #[test] fn supported_version() { let version = Version::default(); - assert_eq!(version.is_supported(), true); + assert!(version.is_supported()); let version = SUPPORTED_VERSION; - assert_eq!(version.is_supported(), true); + assert!(version.is_supported()); } #[test] fn non_supported_version() { let version = Version::new(5, 0); - assert_eq!(version.is_supported(), false); + assert!(!version.is_supported()); } #[test] fn version_comparison() { let v_a = Version::from_str("1.2").unwrap(); let v_b = Version::from_str("3.02").unwrap(); - assert_eq!(v_b > v_a, true); - assert_eq!(v_b == v_a, false); + assert!(v_b > v_a); + assert!(v_b != v_a); } #[test] fn version_arithmetics() { diff --git a/rnx2crx/Cargo.toml b/rnx2crx/Cargo.toml index d18919331..73e5a90ca 100644 --- a/rnx2crx/Cargo.toml +++ b/rnx2crx/Cargo.toml @@ -15,4 +15,4 @@ readme = "README.md" chrono = "0.4" thiserror = "1" clap = { version = "4", features = ["derive", "color"] } -rinex = { path = "../rinex", version = "=0.14.0", features = ["serde"] } +rinex = { path = "../rinex", version = "=0.14.1", features = ["serde"] } diff --git a/rnx2crx/src/cli.rs b/rnx2crx/src/cli.rs index 109272405..4ba86b768 100644 --- a/rnx2crx/src/cli.rs +++ b/rnx2crx/src/cli.rs @@ -62,7 +62,7 @@ impl Cli { } } pub fn input_path(&self) -> &str { - &self.matches.get_one::("filepath").unwrap() + self.matches.get_one::("filepath").unwrap() } pub fn output_path(&self) -> Option<&String> { self.matches.get_one::("output") @@ -75,16 +75,14 @@ impl Cli { } pub fn date(&self) -> Option { if let Some(s) = self.matches.get_one::("date") { - let items: Vec<&str> = s.split("-").collect(); + let items: Vec<&str> = s.split('-').collect(); if items.len() != 3 { println!("failed to parse \"yyyy-mm-dd\""); return None; - } else { - if let Ok(y) = i32::from_str_radix(items[0], 10) { - if let Ok(m) = u8::from_str_radix(items[1], 10) { - if let Ok(d) = u8::from_str_radix(items[2], 10) { - return Some(Epoch::from_gregorian_utc_at_midnight(y, m, d)); - } + } else if let Ok(y) = i32::from_str_radix(items[0], 10) { + if let Ok(m) = u8::from_str_radix(items[1], 10) { + if let Ok(d) = u8::from_str_radix(items[2], 10) { + return Some(Epoch::from_gregorian_utc_at_midnight(y, m, d)); } } } @@ -93,16 +91,14 @@ impl Cli { } pub fn time(&self) -> Option<(u8, u8, u8)> { if let Some(s) = self.matches.get_one::("time") { - let items: Vec<&str> = s.split(":").collect(); + let items: Vec<&str> = s.split(':').collect(); if items.len() != 3 { println!("failed to parse \"hh:mm:ss\""); return None; - } else { - if let Ok(h) = u8::from_str_radix(items[0], 10) { - if let Ok(m) = u8::from_str_radix(items[1], 10) { - if let Ok(s) = u8::from_str_radix(items[2], 10) { - return Some((h, m, s)); - } + } else if let Ok(h) = u8::from_str_radix(items[0], 10) { + if let Ok(m) = u8::from_str_radix(items[1], 10) { + if let Ok(s) = u8::from_str_radix(items[2], 10) { + return Some((h, m, s)); } } } diff --git a/rnx2crx/src/main.rs b/rnx2crx/src/main.rs index 11dd02128..ba45915ce 100644 --- a/rnx2crx/src/main.rs +++ b/rnx2crx/src/main.rs @@ -32,11 +32,9 @@ fn main() -> Result<(), Error> { crx.date = Epoch::from_gregorian_utc(y, m, d, hh, mm, ss, 0); } } - } else { - if let Some(obs) = &mut rinex.header.obs { - if let Some(crx) = &mut obs.crinex { - crx.date = Epoch::from_gregorian_utc_at_midnight(y, m, d); - } + } else if let Some(obs) = &mut rinex.header.obs { + if let Some(crx) = &mut obs.crinex { + crx.date = Epoch::from_gregorian_utc_at_midnight(y, m, d); } } } else if let Some((hh, mm, ss)) = cli.time() { @@ -54,9 +52,9 @@ fn main() -> Result<(), Error> { Some(path) => path.clone(), _ => { // deduce from input - match input_path.strip_suffix("o") { + match input_path.strip_suffix('o') { Some(prefix) => prefix.to_owned() + "d", - _ => match input_path.strip_suffix("O") { + _ => match input_path.strip_suffix('O') { Some(prefix) => prefix.to_owned() + "D", _ => match input_path.strip_suffix("rnx") { Some(prefix) => prefix.to_owned() + "crx", diff --git a/sinex/Cargo.toml b/sinex/Cargo.toml index cdbbfab4c..3820bf0cc 100644 --- a/sinex/Cargo.toml +++ b/sinex/Cargo.toml @@ -20,4 +20,4 @@ chrono = "0.4" thiserror = "1" strum = { version = "0.25", features = ["derive"] } strum_macros = "0.25" -rinex = { path = "../rinex", version = "=0.14.0", features = ["serde"] } +rinex = { path = "../rinex", version = "=0.14.1", features = ["serde"] } diff --git a/sinex/src/bias/description.rs b/sinex/src/bias/description.rs index d2ae333c0..27e0d7012 100644 --- a/sinex/src/bias/description.rs +++ b/sinex/src/bias/description.rs @@ -5,7 +5,7 @@ use rinex::constellation::Constellation; use std::collections::HashMap; //use crate::datetime::{parse_datetime, ParseDateTimeError}; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Default)] pub struct Description { /// Observation Sampling: sampling interval in seconds pub sampling: Option, @@ -28,80 +28,66 @@ pub struct Description { pub sat_clock_ref: HashMap>, } -impl Default for Description { - fn default() -> Self { - Self { - sampling: None, - spacing: None, - method: None, - bias_mode: bias::header::BiasMode::default(), - system: bias::TimeSystem::default(), - rcvr_clock_ref: None, - sat_clock_ref: HashMap::new(), - } - } -} - impl Description { pub fn with_sampling(&self, sampling: u32) -> Self { Self { sampling: Some(sampling), - spacing: self.spacing.clone(), + spacing: self.spacing, method: self.method.clone(), bias_mode: self.bias_mode.clone(), system: self.system.clone(), - rcvr_clock_ref: self.rcvr_clock_ref.clone(), + rcvr_clock_ref: self.rcvr_clock_ref, sat_clock_ref: self.sat_clock_ref.clone(), } } pub fn with_spacing(&self, spacing: u32) -> Self { Self { - sampling: self.sampling.clone(), + sampling: self.sampling, spacing: Some(spacing), method: self.method.clone(), bias_mode: self.bias_mode.clone(), system: self.system.clone(), - rcvr_clock_ref: self.rcvr_clock_ref.clone(), + rcvr_clock_ref: self.rcvr_clock_ref, sat_clock_ref: self.sat_clock_ref.clone(), } } pub fn with_method(&self, method: bias::DeterminationMethod) -> Self { Self { - sampling: self.sampling.clone(), - spacing: self.spacing.clone(), + sampling: self.sampling, + spacing: self.spacing, method: Some(method), bias_mode: self.bias_mode.clone(), system: self.system.clone(), - rcvr_clock_ref: self.rcvr_clock_ref.clone(), + rcvr_clock_ref: self.rcvr_clock_ref, sat_clock_ref: self.sat_clock_ref.clone(), } } pub fn with_bias_mode(&self, mode: bias::header::BiasMode) -> Self { Self { - sampling: self.sampling.clone(), - spacing: self.spacing.clone(), + sampling: self.sampling, + spacing: self.spacing, method: self.method.clone(), bias_mode: mode, system: self.system.clone(), - rcvr_clock_ref: self.rcvr_clock_ref.clone(), + rcvr_clock_ref: self.rcvr_clock_ref, sat_clock_ref: self.sat_clock_ref.clone(), } } pub fn with_time_system(&self, system: bias::TimeSystem) -> Self { Self { - sampling: self.sampling.clone(), - spacing: self.spacing.clone(), + sampling: self.sampling, + spacing: self.spacing, method: self.method.clone(), bias_mode: self.bias_mode.clone(), system, - rcvr_clock_ref: self.rcvr_clock_ref.clone(), + rcvr_clock_ref: self.rcvr_clock_ref, sat_clock_ref: self.sat_clock_ref.clone(), } } pub fn with_rcvr_clock_ref(&self, clock_ref: Constellation) -> Self { Self { - sampling: self.sampling.clone(), - spacing: self.spacing.clone(), + sampling: self.sampling, + spacing: self.spacing, method: self.method.clone(), bias_mode: self.bias_mode.clone(), system: self.system.clone(), @@ -111,12 +97,12 @@ impl Description { } pub fn with_sat_clock_ref(&self, c: Constellation, observable: &str) -> Self { Self { - sampling: self.sampling.clone(), - spacing: self.spacing.clone(), + sampling: self.sampling, + spacing: self.spacing, method: self.method.clone(), bias_mode: self.bias_mode.clone(), system: self.system.clone(), - rcvr_clock_ref: self.rcvr_clock_ref.clone(), + rcvr_clock_ref: self.rcvr_clock_ref, sat_clock_ref: { let mut map = self.sat_clock_ref.clone(); if let Some(codes) = map.get_mut(&c) { diff --git a/sinex/src/bias/header.rs b/sinex/src/bias/header.rs index 015dd30d5..af27281af 100644 --- a/sinex/src/bias/header.rs +++ b/sinex/src/bias/header.rs @@ -138,7 +138,7 @@ mod test { fn test_header() { let content = "%=BIA 1.00 PF2 2011:180:59736 PF2 2011:113:86385 2011:114:86385 R 00000024"; let header = Header::from_str(content); - assert_eq!(header.is_ok(), true); + assert!(header.is_ok()); let header = header.unwrap(); assert_eq!(header.version, "1.00"); assert_eq!(header.creator_code, "PF2"); @@ -147,7 +147,7 @@ mod test { assert_eq!(header.length, 24); let content = "%=BIA 1.00 COD 2016:327:30548 IGS 2016:296:00000 2016:333:00000 A 00000194"; let header = Header::from_str(content); - assert_eq!(header.is_ok(), true); + assert!(header.is_ok()); let header = header.unwrap(); assert_eq!(header.version, "1.00"); assert_eq!(header.creator_code, "COD"); diff --git a/sinex/src/bias/mod.rs b/sinex/src/bias/mod.rs index f8d3fb84c..def065061 100644 --- a/sinex/src/bias/mod.rs +++ b/sinex/src/bias/mod.rs @@ -30,12 +30,10 @@ impl std::str::FromStr for TimeSystem { Ok(Self::UTC) } else if content.eq("TAI") { Ok(Self::TAI) + } else if let Ok(c) = Constellation::from_str(content) { + Ok(Self::GNSS(c)) } else { - if let Ok(c) = Constellation::from_str(content) { - Ok(Self::GNSS(c)) - } else { - Err(TimeSystemError::UnknownSystem(content.to_string())) - } + Err(TimeSystemError::UnknownSystem(content.to_string())) } } } @@ -160,7 +158,7 @@ impl std::str::FromStr for Solution { svn: svn.trim().to_string(), prn: prn.trim().to_string(), station: { - if station.trim().len() > 0 { + if !station.trim().is_empty() { Some(station.trim().to_string()) } else { None @@ -170,7 +168,7 @@ impl std::str::FromStr for Solution { start_time: parse_datetime(start_time.trim())?, end_time: parse_datetime(end_time.trim())?, obs: { - if obs2.trim().len() > 0 { + if !obs2.trim().is_empty() { (obs1.trim().to_string(), Some(obs2.trim().to_string())) } else { (obs1.trim().to_string(), None) @@ -200,14 +198,14 @@ mod tests { #[test] fn test_determination_methods() { let method = DeterminationMethod::from_str("COMBINED_ANALYSIS"); - assert_eq!(method.is_ok(), true); + assert!(method.is_ok()); assert_eq!(method.unwrap(), DeterminationMethod::CombinedAnalysis); } #[test] fn test_solution_parser() { let solution = Solution::from_str( "ISB G G GIEN C1W C2W 2011:113:86385 2011:115:00285 ns 0.000000000000000E+00 .000000E+00"); - assert_eq!(solution.is_ok(), true); + assert!(solution.is_ok()); let solution = solution.unwrap(); assert_eq!(solution.btype, BiasType::ISB); assert_eq!(solution.svn, "G"); @@ -221,7 +219,7 @@ mod tests { assert_eq!(solution.stddev, 0.0); let solution = Solution::from_str( "ISB E E GOUS C1C C7Q 2011:113:86385 2011:115:00285 ns -.101593337222667E+03 .259439E+02"); - assert_eq!(solution.is_ok(), true); + assert!(solution.is_ok()); let solution = solution.unwrap(); assert_eq!(solution.btype, BiasType::ISB); assert_eq!(solution.svn, "E"); @@ -235,7 +233,7 @@ mod tests { assert!((solution.stddev - 0.259439E+02) < 1E-6); let solution = Solution::from_str( "OSB G063 G01 C1C 2016:296:00000 2016:333:00000 ns 10.2472 0.0062"); - assert_eq!(solution.is_ok(), true); + assert!(solution.is_ok()); let solution = solution.unwrap(); assert_eq!(solution.btype, BiasType::OSB); assert_eq!(solution.svn, "G063"); @@ -249,7 +247,7 @@ mod tests { fn test_bia_v1_example1() { let file = env!("CARGO_MANIFEST_DIR").to_owned() + "/data/BIA/V1/example-1a.bia"; let sinex = Sinex::from_file(&file); - assert_eq!(sinex.is_ok(), true); + assert!(sinex.is_ok()); let sinex = sinex.unwrap(); let reference = &sinex.reference; assert_eq!( @@ -287,7 +285,7 @@ mod tests { let description = &sinex.description; let description = description.bias_description(); - assert_eq!(description.is_some(), true); + assert!(description.is_some()); let description = description.unwrap(); assert_eq!(description.sampling, Some(300)); assert_eq!(description.spacing, Some(86400)); @@ -301,7 +299,7 @@ mod tests { assert_eq!(description.sat_clock_ref.len(), 2); let solutions = sinex.record.bias_solutions(); - assert_eq!(solutions.is_some(), true); + assert!(solutions.is_some()); let solutions = solutions.unwrap(); assert_eq!(solutions.len(), 50); } @@ -309,7 +307,7 @@ mod tests { fn test_bia_v1_example1b() { let file = env!("CARGO_MANIFEST_DIR").to_owned() + "/data/BIA/V1/example-1b.bia"; let sinex = Sinex::from_file(&file); - assert_eq!(sinex.is_ok(), true); + assert!(sinex.is_ok()); let sinex = sinex.unwrap(); assert_eq!(sinex.acknowledgments.len(), 2); assert_eq!( @@ -322,7 +320,7 @@ mod tests { let description = &sinex.description; let description = description.bias_description(); - assert_eq!(description.is_some(), true); + assert!(description.is_some()); let description = description.unwrap(); assert_eq!(description.sampling, Some(300)); assert_eq!(description.spacing, Some(86400)); @@ -336,12 +334,12 @@ mod tests { assert_eq!(description.sat_clock_ref.len(), 2); let solutions = sinex.record.bias_solutions(); - assert_eq!(solutions.is_some(), true); + assert!(solutions.is_some()); let solutions = solutions.unwrap(); assert_eq!(solutions.len(), 50); for sol in solutions.iter() { let obs = &sol.obs; - assert_eq!(obs.1.is_some(), true); // all came with OBS1+OBS2 + assert!(obs.1.is_some()); // all came with OBS1+OBS2 } } } diff --git a/sinex/src/datetime.rs b/sinex/src/datetime.rs index bca130dfc..cb0e145f0 100644 --- a/sinex/src/datetime.rs +++ b/sinex/src/datetime.rs @@ -11,7 +11,7 @@ pub enum ParseDateTimeError { pub fn parse_datetime(content: &str) -> Result { let ym = &content[0..8]; // "YYYY:DDD" - let dt = chrono::NaiveDate::parse_from_str(&ym, "%Y:%j")?; + let dt = chrono::NaiveDate::parse_from_str(ym, "%Y:%j")?; let secs = &content[9..]; let secs = f32::from_str(secs)?; let h = secs / 3600.0; @@ -26,8 +26,8 @@ mod test { #[test] fn test_parsing() { let datetime = parse_datetime("2022:021:20823"); - assert_eq!(datetime.is_ok(), true); + assert!(datetime.is_ok()); let datetime = parse_datetime("2022:009:00000"); - assert_eq!(datetime.is_ok(), true); + assert!(datetime.is_ok()); } } diff --git a/sinex/src/lib.rs b/sinex/src/lib.rs index 09434acda..8403a9b15 100644 --- a/sinex/src/lib.rs +++ b/sinex/src/lib.rs @@ -18,11 +18,11 @@ use header::{is_valid_header, Header}; use reference::Reference; fn is_comment(line: &str) -> bool { - line.starts_with("*") + line.starts_with('*') } fn section_start(line: &str) -> Option { - if line.starts_with("+") { + if line.starts_with('+') { Some(line[1..].to_string()) } else { None @@ -30,7 +30,7 @@ fn section_start(line: &str) -> Option { } fn section_end(line: &str) -> Option { - if line.starts_with("-") { + if line.starts_with('-') { Some(line[1..].to_string()) } else { None diff --git a/sinex/src/receiver.rs b/sinex/src/receiver.rs index 56febb816..584651fa4 100644 --- a/sinex/src/receiver.rs +++ b/sinex/src/receiver.rs @@ -66,7 +66,7 @@ mod tests { let rcvr = Receiver::from_str( "MAO0 G @MP0 2015:276:00000 2015:276:86399 JAVAD TRE-G3TH DELTA 3.6.4", ); - assert_eq!(rcvr.is_ok(), true); + assert!(rcvr.is_ok()); let rcvr = rcvr.unwrap(); assert_eq!(rcvr.station, "MAO0"); assert_eq!(rcvr.group, "@MP0"); diff --git a/sinex/tests/parser.rs b/sinex/tests/parser.rs index 03ebd1921..6ca1e02d8 100644 --- a/sinex/tests/parser.rs +++ b/sinex/tests/parser.rs @@ -15,7 +15,7 @@ mod test { let entry = entry.unwrap(); let path = entry.path(); let full_path = &path.to_str().unwrap(); - let is_hidden = entry.file_name().to_str().unwrap().starts_with("."); + let is_hidden = entry.file_name().to_str().unwrap().starts_with('.'); println!("Parsing file: \"{}\"", full_path); if !is_hidden { // PARSER diff --git a/sp3/Cargo.toml b/sp3/Cargo.toml index 795d7ecc5..8bd2cf6e0 100644 --- a/sp3/Cargo.toml +++ b/sp3/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp3" -version = "1.0.4" +version = "1.0.5" license = "MIT OR Apache-2.0" authors = ["Guillaume W. Bres "] description = "IGS SP3 file parser" @@ -24,7 +24,7 @@ rustdoc-args = ["--cfg", "docrs", "--generate-link-to-definition"] [dependencies] thiserror = "1" hifitime = "3.8.4" -rinex = { path = "../rinex", version = "=0.14.0", features = ["serde"] } +rinex = { path = "../rinex", version = "=0.14.1", features = ["serde"] } serde = { version = "1.0", optional = true, default-features = false, features = ["derive"] } flate2 = { version = "1.0.24", optional = true, default-features = false, features = ["zlib"] } diff --git a/sp3/src/lib.rs b/sp3/src/lib.rs index feea8d77b..eeea03ac9 100644 --- a/sp3/src/lib.rs +++ b/sp3/src/lib.rs @@ -275,7 +275,7 @@ fn parse_epoch(content: &str, time_scale: TimeScale) -> Result 4 { + comments.push(line[3..].to_string()); + } continue; } if end_of_file(line) { diff --git a/sp3/src/tests/interpolation.rs b/sp3/src/tests/interpolation.rs index b1c843b53..fe8e1991e 100644 --- a/sp3/src/tests/interpolation.rs +++ b/sp3/src/tests/interpolation.rs @@ -2,10 +2,10 @@ #[cfg(test)] mod test { use crate::prelude::*; - use rinex::prelude::Sv; - use rinex::sv; + //use rinex::prelude::Sv; + //use rinex::sv; use std::path::PathBuf; - use std::str::FromStr; + //use std::str::FromStr; /* * Theoretical maximal error of a Lagrangian interpolation * over a given Dataset for specified interpolation order @@ -43,7 +43,7 @@ mod test { let total_epochs = sp3.epoch().count(); //TODO: replace with max_error() - for (order, max_error) in vec![(7, 1E-1_f64), (9, 1.0E-2_64), (11, 0.5E-3_f64)] { + for (order, max_error) in [(7, 1E-1_f64), (9, 1.0E-2_64), (11, 0.5E-3_f64)] { let tmin = first_epoch + (order / 2) * dt; let tmax = last_epoch - (order / 2) * dt; println!("running Interp({}) testbench..", order); diff --git a/sp3/src/tests/parser_3c.rs b/sp3/src/tests/parser_3c.rs index 48873aebb..e35d915bc 100644 --- a/sp3/src/tests/parser_3c.rs +++ b/sp3/src/tests/parser_3c.rs @@ -66,7 +66,7 @@ mod test { } } - for (index, (epoch, sv, clock)) in sp3.sv_clock().enumerate() {} + //for (index, (epoch, sv, clock)) in sp3.sv_clock().enumerate() {} /* * Test file comments diff --git a/sp3/src/tests/parser_3d.rs b/sp3/src/tests/parser_3d.rs index 2571e3281..e9e3752ef 100644 --- a/sp3/src/tests/parser_3d.rs +++ b/sp3/src/tests/parser_3d.rs @@ -79,7 +79,6 @@ mod test { } } - let mut clk: Vec<_> = sp3.sv_clock().collect(); for (epoch, sv, clock) in sp3.sv_clock() { assert_eq!(epoch, Epoch::from_str("2019-10-27T00:00:00 GPST").unwrap()); if sv == sv!("C01") { diff --git a/sp3/src/tests/test_pool.rs b/sp3/src/tests/test_pool.rs index acc1382fc..6db870d07 100644 --- a/sp3/src/tests/test_pool.rs +++ b/sp3/src/tests/test_pool.rs @@ -11,7 +11,7 @@ mod test { .join("test_resources") .join("SP3"); - for file in vec![ + for file in [ "EMR0OPSULT_20232391800_02D_15M_ORB.SP3.gz", "ESA0OPSULT_20232320600_02D_15M_ORB.SP3.gz", "COD0MGXFIN_20230500000_01D_05M_ORB.SP3.gz", @@ -36,7 +36,7 @@ mod test { .join("test_resources") .join("SP3"); - for file in vec![ + for file in [ "co108870.sp3", "em108871.sp3", //"emr08874.sp3", diff --git a/sp3/src/version.rs b/sp3/src/version.rs index 2538edd65..fc9f0829f 100644 --- a/sp3/src/version.rs +++ b/sp3/src/version.rs @@ -87,15 +87,13 @@ mod test { use std::str::FromStr; #[test] fn version() { - for (desc, expected) in vec![("c", Version::C), ("d", Version::D)] { - assert!( - Version::from_str(desc).is_ok(), - "failed to parse Version from \"{}\"", - desc - ); + for (desc, expected) in [("c", Version::C), ("d", Version::D)] { + let version = Version::from_str(desc); + assert!(version.is_ok(), "failed to parse Version from \"{}\"", desc); + assert_eq!(version.unwrap(), expected); } - for (vers, expected) in vec![(Version::C, 3), (Version::D, 4)] { + for (vers, expected) in [(Version::C, 3), (Version::D, 4)] { let version: u8 = vers.into(); assert_eq!(version, expected, "convertion to integer failed"); } diff --git a/tools/clippy.sh b/tools/clippy.sh new file mode 100755 index 000000000..66d659fd4 --- /dev/null +++ b/tools/clippy.sh @@ -0,0 +1,5 @@ +#!/bin/sh +cargo clippy \ + --fix \ + --allow-dirty \ + -- -Dclippy::perf diff --git a/tools/release.py b/tools/release.py new file mode 100755 index 000000000..b3f5ba2d7 --- /dev/null +++ b/tools/release.py @@ -0,0 +1,58 @@ +#! /usr/bin/env python3 + +import os +import tomli +import tomli_w + +def parse_toml(path): + with open(path, "r") as fd: + content = fd.read() + tomli_dict = tomli.loads(content) + return tomli_dict + + +def parse_pool(): + tomls = [] + for subdir in os.listdir("."): + if os.path.isdir(subdir): + target = subdir + "/Cargo.toml" + if os.path.exists(target): + tomls.append(target) + + content = {} + for toml in tomls: + key = toml.split("/")[0] # dir name + content[key] = parse_toml(toml) + return content + +def update_pool(content): + for subdir in os.listdir("."): + if os.path.isdir(subdir): + target = subdir + "/Cargo.toml" + if os.path.exists(target): + with open(target, "w") as fd: + fd.write(tomli_w.dumps(content[subdir])) + +def replace_local_referencing(content): + latest = {} + for pkg in content: + # latest uploaded version + latest[pkg] = content[pkg]["package"]["version"] + print(latest) + for pkg in content: + # replace local paths + dependencies = list(content[pkg]["dependencies"].keys()) + for localpkg in latest: + if localpkg in dependencies: + content[pkg]["dependencies"][localpkg].pop("path", None) + content[pkg]["dependencies"][localpkg]["version"] = latest[localpkg] + # print(content[pkg]["dependencies"][localpkg]) + + +def main(release=None): + content = parse_pool() + replace_local_referencing(content) + update_pool(content) + +if __name__ == "__main__": + main() diff --git a/ublox-rnx/Cargo.toml b/ublox-rnx/Cargo.toml index 935f410ee..0e6b9e867 100644 --- a/ublox-rnx/Cargo.toml +++ b/ublox-rnx/Cargo.toml @@ -12,10 +12,13 @@ edition = "2021" readme = "README.md" [dependencies] -chrono = "0.4" +log = "0.4" +pretty_env_logger = "0.5" +chrono = "0.4.30" serde = "1.0" +thiserror = "1" serde_json = "1.0" serialport = "4.2.0" ublox = "0.4.4" -rinex = { path = "../rinex", version = "=0.14.0", features = ["serde"] } +rinex = { path = "../rinex", version = "=0.14.1", features = ["serde", "nav", "obs"] } clap = { version = "3.2.22", features = ["yaml"] } diff --git a/ublox-rnx/src/main.rs b/ublox-rnx/src/main.rs index 6c4a2ff0f..c3a8cab59 100644 --- a/ublox-rnx/src/main.rs +++ b/ublox-rnx/src/main.rs @@ -3,19 +3,45 @@ //! Homepage: use clap::load_yaml; use clap::App; -//use std::str::FromStr; +use std::str::FromStr; -use rinex::*; -//use rinex::sv::Sv; +use thiserror::Error; + +use rinex::navigation::{IonMessage, KbModel, KbRegionCode}; +use rinex::observation::{LliFlags, ObservationData}; +use rinex::prelude::EpochFlag; use rinex::prelude::*; -//:use rinex::observation::record::ObservationData; +use rinex::sv; extern crate ublox; -use ublox::*; -use ublox::{CfgPrtUart, UartPortId}; +use ublox::{ + CfgMsgAllPorts, CfgMsgAllPortsBuilder, CfgPrtUart, CfgPrtUartBuilder, DataBits, InProtoMask, + OutProtoMask, PacketRef, Parity, StopBits, UartMode, UartPortId, +}; +use ublox::{GpsFix, RecStatFlags}; +use ublox::{NavSat, NavTimeUtcFlags}; +use ublox::{NavStatusFlags, NavStatusFlags2}; + +use log::{debug, error, info, trace, warn}; mod device; +#[derive(Debug, Clone, Error)] +pub enum Error { + #[error("unknown constellation #{0}")] + UnknownConstellationId(u8), +} + +fn identify_constellation(id: u8) -> Result { + match id { + 0 => Ok(Constellation::GPS), + 1 => Ok(Constellation::Galileo), + 2 => Ok(Constellation::Glonass), + 3 => Ok(Constellation::BeiDou), + _ => Err(Error::UnknownConstellationId(id)), + } +} + pub fn main() -> Result<(), Box> { let yaml = load_yaml!("app.yml"); let app = App::from_yaml(yaml); @@ -31,7 +57,7 @@ pub fn main() -> Result<(), Box> { // open device let port = serialport::new(port, baud) .open() - .expect(&format!("failed to open serial port \"{}\"", port)); + .unwrap_or_else(|_| panic!("failed to open serial port \"{}\"", port)); let mut device = device::Device::new(port); // Enable UBX protocol on all ports @@ -52,6 +78,13 @@ pub fn main() -> Result<(), Box> { )?; device.wait_for_ack::().unwrap(); + /* + * HEADER <=> Configuration + */ + //CfgNav5 : model, dynamics.. + //CfgNav5X : min_svs, aiding, wkn, ppp.. + //AidIni + /* NEED UBX CRATE UPDATE!! device.write_all( &CfgPrtUartBuilder { @@ -121,39 +154,193 @@ pub fn main() -> Result<(), Box> { */ // Create header section - let _header = header::Header::basic_obs(); + let mut _nav_header = Header::basic_nav(); + let mut _obs_header = Header::basic_obs(); + // let mut clk_header = Header::basic_clk(); + + //TODO header CLI customization - //TODO header customization + // current work structures + let mut itow = 0_u32; + let mut epoch = Epoch::default(); + let mut epoch_flag = EpochFlag::default(); - let mut _epoch = Epoch::default(); // current epoch + // observation + let mut _observable = Observable::default(); + let mut lli: Option = None; + let mut obs_data = ObservationData::default(); + + let mut uptime = Duration::default(); + + let mut fix_type = GpsFix::NoFix; // current fix status + let mut fix_flags = NavStatusFlags::empty(); // current fix flag + let mut nav_status = NavStatusFlags2::Inactive; loop { // main loop let _ = device.update(|packet| { match packet { + /* + * Configuration frames: + * should be depiceted by HEADER section + */ + //PacketRef::CfgRate(pkt) => { + // //TODO EPOCH INTERVAL + // let gps_rate = pkt.measure_rate_ms(); + // //TODO EPOCH INTERVAL + // let nav_rate = pkt.nav_rate(); + // //TODO reference time + // let time = pkt.time_ref(); + //}, + PacketRef::CfgNav5(pkt) => { + // Dynamic model + let _dyn_model = pkt.dyn_model(); + }, + PacketRef::RxmRawx(pkt) => { + let _leap_s = pkt.leap_s(); + if pkt.rec_stat().intersects(RecStatFlags::CLK_RESET) { + // notify reset event + if let Some(ref mut lli) = lli { + *lli |= LliFlags::LOCK_LOSS; + } else { + lli = Some(LliFlags::LOCK_LOSS); + } + epoch_flag = EpochFlag::CycleSlip; + } + obs_data.lli = lli; + }, + PacketRef::MonHw(_pkt) => { + //let jamming = pkt.jam_ind(); //TODO + //antenna problem: + // pkt.a_status(); + // pkt.a_power(); + }, + PacketRef::MonGnss(_pkt) => { + //pkt.supported(); // GNSS + //pkt.default(); // GNSS + //pkt.enabled(); //GNSS + }, + PacketRef::MonVer(pkt) => { + //UBX revision + pkt.software_version(); + pkt.hardware_version(); + }, + /* + * NAVIGATION + */ PacketRef::NavSat(pkt) => { for sv in pkt.svs() { - let _gnss_id = sv.gnss_id(); - let _sv_id = sv.sv_id(); - let _elev = sv.elev(); - let _azim = sv.azim(); - let _pr_res = sv.pr_res(); - let _flags = sv.flags(); - //if flags.sv_used() { - //} - //flags.health(); - //flags.quality_ind(); - //flags.differential_correction_available(); - //flags.ephemeris_available(); + let gnss = identify_constellation(sv.gnss_id()); + if gnss.is_ok() { + let _elev = sv.elev(); + let _azim = sv.azim(); + let _pr_res = sv.pr_res(); + let _flags = sv.flags(); + + let _sv = Sv { + constellation: gnss.unwrap(), + prn: sv.sv_id(), + }; + + // flags.sv_used() + //flags.health(); + //flags.quality_ind(); + //flags.differential_correction_available(); + //flags.ephemeris_available(); + } + } + }, + PacketRef::NavTimeUTC(pkt) => { + if pkt.valid().intersects(NavTimeUtcFlags::VALID_UTC) { + // leap seconds already known + let e = Epoch::maybe_from_gregorian( + pkt.year().into(), + pkt.month(), + pkt.day(), + pkt.hour(), + pkt.min(), + pkt.sec(), + pkt.nanos() as u32, + TimeScale::UTC, + ); + if e.is_ok() { + epoch = e.unwrap(); + } } }, - /* NEED UBX CRATE UPDATE !! + PacketRef::NavStatus(pkt) => { + itow = pkt.itow(); + fix_type = pkt.fix_type(); + fix_flags = pkt.flags(); + nav_status = pkt.flags2(); + uptime = Duration::from_milliseconds(pkt.uptime_ms() as f64); + trace!("uptime: {}", uptime); + }, PacketRef::NavEoe(pkt) => { - // End of epoch notification - let _itow = pkt.itow(); - // ==> push into file + itow = pkt.itow(); + // reset Epoch + lli = None; + epoch_flag = EpochFlag::default(); + }, + /* + * NAVIGATION : EPHEMERIS + */ + PacketRef::MgaGpsEph(pkt) => { + let _sv = sv!(&format!("G{}", pkt.sv_id())); + //nav_record.insert(epoch, sv); + }, + PacketRef::MgaGloEph(pkt) => { + let _sv = sv!(&format!("R{}", pkt.sv_id())); + //nav_record.insert(epoch, sv); + }, + /* + * NAVIGATION: IONOSPHERIC MODELS + */ + PacketRef::MgaGpsIono(pkt) => { + let kbmodel = KbModel { + alpha: (pkt.alpha0(), pkt.alpha1(), pkt.alpha2(), pkt.alpha3()), + beta: (pkt.beta0(), pkt.beta1(), pkt.beta2(), pkt.beta3()), + region: KbRegionCode::default(), // TODO, + }; + let _iono = IonMessage::KlobucharModel(kbmodel); + }, + /* + * OBSERVATION: Receiver Clock + */ + PacketRef::NavClock(pkt) => { + let _bias = pkt.clk_b(); + let _drift = pkt.clk_d(); + // pkt.t_acc(); // phase accuracy + // pkt.f_acc(); // frequency accuracy + }, + /* + * Errors, Warnings + */ + PacketRef::InfTest(pkt) => { + if let Some(msg) = pkt.message() { + trace!("{}", msg); + } + }, + PacketRef::InfDebug(pkt) => { + if let Some(msg) = pkt.message() { + debug!("{}", msg); + } + }, + PacketRef::InfNotice(pkt) => { + if let Some(msg) = pkt.message() { + info!("{}", msg); + } + }, + PacketRef::InfError(pkt) => { + if let Some(msg) = pkt.message() { + error!("{}", msg); + } + }, + PacketRef::InfWarning(pkt) => { + if let Some(msg) = pkt.message() { + warn!("{}", msg); + } }, - */ _ => {}, } });