From 1151f5472afc37c4c7b1f7d1563903de5a4824ef Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Thu, 20 Oct 2022 18:11:29 -0600 Subject: [PATCH 01/48] Add exhaustive CSPICE test on de438s Use the dev-env-setup.sh script to install CSPICE on Linux Exhaustive tests show some errors to be very large (0.1 meters), and I'm not sure why Signed-off-by: Christopher Rabotin --- .cargo/config.toml | 2 + .github/workflows/tests.yml | 3 + .gitignore | 3 +- Cargo.toml | 16 ++- README.md | 3 +- data/earth_latest_high_prec.bpc | Bin 0 -> 4388864 bytes data/earth_old_high_prec.bpc | 3 - dev-env-setup.sh | 6 + src/asn1/ephemeris.rs | 10 +- src/asn1/lookuptable.rs | 2 +- src/cli/inspect.rs | 3 +- src/context/append.rs | 4 +- src/errors.rs | 16 +-- src/lib.rs | 2 +- src/math/interpolation/chebyshev.rs | 6 +- src/naif/daf.rs | 175 +++++++++++++++++-------- src/naif/mod.rs | 10 +- src/naif/spk/datatype.rs | 2 +- src/naif/spk/mod.rs | 22 ++-- src/naif/spk/segment.rs | 8 +- src/spline.rs | 6 +- tests/ephemerides/translation_verif.rs | 151 +++++++++++++++++++++ tests/naif.rs | 18 +-- 23 files changed, 353 insertions(+), 118 deletions(-) create mode 100644 .cargo/config.toml create mode 100644 data/earth_latest_high_prec.bpc delete mode 100644 data/earth_old_high_prec.bpc create mode 100644 dev-env-setup.sh diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 00000000..f55e73ad --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[env] +CSPICE_DIR = {value = "./cspice/", relative = true} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 656a5a55..ef74a54c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -25,6 +25,9 @@ jobs: toolchain: stable override: true + - name: Install CSPICE + run: sh dev-env-setup.sh + - name: Run cargo check uses: actions-rs/cargo@v1 with: diff --git a/.gitignore b/.gitignore index e40ab75d..0057295b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /target Cargo.lock -*.anis* \ No newline at end of file +*.anis* +cspice \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index d5515b99..5237b84b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,12 +11,12 @@ keywords = ["attitude","navigation","instrument", "spacecraft", "ephemeris"] categories = ["science", "simulation"] readme = "README.md" license = "MPL-2.0" +exclude = ["cspice"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -# hifitime = {version = "3.4.0", features = ["asn1der"]} -hifitime = {git = "https://github.com/nyx-space/hifitime", rev= "042599948499086ea4e854727eac885f6cab5d89"} # TODO: Switch to 3.4.1 when published. +hifitime = {version = "3.5.0", features = ["asn1der"]} memmap2 = "0.5.7" crc32fast = "1.3.0" der = {version = "0.6.0", features = ["derive", "alloc", "real"]} @@ -24,7 +24,15 @@ clap = {version = "3.1", features = ["derive"]} thiserror = "1.0" log = "0.4" pretty_env_logger = "0.4" -tabled = "0.8" +tabled = "0.10" const_format = "0.2" nalgebra = "0.31" -approx = "0.5.1" \ No newline at end of file +approx = "0.5.1" + +[dev-dependencies] +rust-spice = "0.7.3" +rstats = "1" + +[features] +default = ["std"] +std = [] \ No newline at end of file diff --git a/README.md b/README.md index f65db3bc..0b05f081 100644 --- a/README.md +++ b/README.md @@ -38,4 +38,5 @@ Solar System barycenter # Development ## Requirements 1. `rustc` version `1.64` or higher (required for the 2021 edition): https://rust-lang.org/ (TODO: Set a minimum compatible rust version) -2. `git` \ No newline at end of file +2. `git` +1. `rust-spice` is used for exhaustive testing of the SPICE interoperability. It requires the cspice library. \ No newline at end of file diff --git a/data/earth_latest_high_prec.bpc b/data/earth_latest_high_prec.bpc new file mode 100644 index 0000000000000000000000000000000000000000..5e201963ebe9abdd9aecc1d027112cd4f73479a4 GIT binary patch literal 4388864 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

}~y~^xV-A;BCO;ZWq#5jwWQ+Ul-1=-o#fme4ZwI zGQG!waU!N?ZfXmXjDjCN=pFU{^@WoDJERc@upj)yAIKWtw4MZ&>(7NGjF6ulT9D70j%!N04m6~3f-B!z{ynSYySaXx5YMLIT~ z_enIKOL^8fgmjL45cyGz&x67GG<(tCX2g5px`NwfQJ=g32e8lY-MZjifCDYH17C_D zuD++ukU0o(zRUX7!Tp$*t|gd9plCPffb|n0IZSFQdBAVtEtegNpN%7w)V` zVDT(5ID+^J?srFAXT; zZpaxE)R*N4!#lT_f28sX37?ZzQhb$Y2$()mn;}4aM;Y+@vp0Lt_j~#Nz7Bpq#ICQ1 z>Dj1mqL5_+4O>QZ;lNEJbWsRwDl^ToKaUr@UoH2*6L0`|YfrBMyW#nLPU-<40KZ=DseK4= zShm`1=YH^~o3!LxhJ!`jrU#+@b6z~x2fh$InmU)QGs#$ue9LsA$(1_xSw3(#+2yoU z#PU@OkEfMBG|sDhDV|n)lbu<-&%_;j(qDV@DesONA$UCW_WsQ+Z-mm8g=xqKC5msZ z3>bC}#y7rfX;=l;uPVZf!=PUmtbYo1BcSc$G0zb6>+|cno`{FAh+I{yCxZtI`m#?C zsd~m&%O#2krwdn5KGN}}cx#+YehPJ=e30rzb{*$^C2INlc!Prg@(x^>q%ATlE{~Vc z@4~^v@%c0D6xF1nw0d=ET@vlnc-Pj4Y($T&olh-LY-l~u1EU*B( z*J&AhqaIKA-IJ~B#vF_zo#-{<4%t~$O#b`J=V$sXCV!6!BVH>HBRo_rpugK5#PKnM z-e*0Zhql%d1x?i(ia3CM62(cO$&il*x?U46Mt^$t8h;ph*Qb2be(TNP(5C?EwuVdzk zYQUv=*wjTL9OrIR00*!yC1;N75#-ycH7{6RxKyGQiulOX)Aa`4uv3vpQD;2xV-Mwp zO>gh8ab9ClO#C`>DcL18m;5?(2JygpFNX7mS8klw{+-L=^9TYJR?o?P8Y7a8c~S2H zIFM|Jw4UX%AI7<&eRI!Z_#ANNxO5uCTmP@N8*sg`Lv&4c3DgtT#bYg5Ua(jyYl!;b ztCbJw#N%h)vGLEetz-J*v;J-tPw&P>iU2<)ic@*tPcL2K|A{(;kIb=zUmw1I-AR?k z0nTr;`A54B^Cg9)wj=&D3B$TIo<zb((#0vu2h99(~^Y z>BRj9hGLbskCel>pBoMHHGqd7n?Hr3&XxDqWAn;d?&_l;Kj+wOK0@)3`2ZHreEXCf z2Hg@;_4y~xC!V&NxHb)V;Jo(3^_Um#n)gpzg8AZ{gcZvRuB(n3qJ448d`TZX@Odx5 z0kxh|NAnmjcZ*PW{f0i8EWWh){q2|SsBS5;CHvE@NzW9Uk)K_3$?qDn^t0a}(av!R zsqZ$u6*jCroryRY?Yl^`_{n(~=YVd?^HCqgff z8}UflNI}8Us*I@-T{t-TbW`(Lzyaui>*ohu0zN1UEOfX4@&3tW@^`i$>6e~w2IBQW z!mAXVkJ)qm;zG3F{jmw-gMf!sqnOTB%O`zMAb*eYyH7ETx47@C39rTm^r_*-^_V-o zkBSTNLI&^e@W+DVfX^$h86{{{+kK4kg0JdSxHtPot=EdWcSXQkwOjgqOM~Zkn^+Gx zfcu)>1Q{*GI%Y$lEyIDvc`GBdZ(nWz%^yVnea~<@e>Ke`?JU^C;`!53t`pDlz9%OJ zP(IcFW6pHgm%hYn_Ao_q{vg_)&g1+yBkDcw45eG2d`UNFrP^Wl0 zXTrRFRY%BXyDGf*yP@jS2eu!n&q&7wV0VV@!jYbc*Vv(NMp~fkyFY>WV2{lmX5X$2 zg@nhRQN*8{+(;id_vLmdkbmv0xL-$;p9@rpM@kiGJjBNeHWw}W8yMS#gE2;8s}TpV zPP6>+^U8AQd$9eY%0-Cxb-z}$RYKk6eW=IJ42ZV{_ksZjzy}FO&xJu=Zk8J%Wa|sZ zjAAvAcY~jm(fY!wtM@4H`to_@w^3yOIew3bvl8)WtR9~y7{~1$L;iG9qxTXFBs|&G zmx*1DU4ZohwDD^&6gvWWRl4%@P287OJu4(S9r)^#?&!6wZoKZ$v=nesTTpGs<~_%a z_-zFK*Ob~Bq73gBSNY-H2j-`#E2(b0E|Yks;Nv4HyP z$qm2({O?9bbVJd;O>akgA|CRxlhrXV$Gx_rb?1s-cNpJ%i7BLUc3mkzoX9Hr5%0!4 zE`#xa{UwG17Wg7X;)z3pC=aOpyXU5r-pk)i;MFmF#_9uIIJl-X3DUd45$ zDAS{vcyHsYBb7~9FMK+3IhCBl+DMr*H)L%4+km#kkJod2VLjGQ>fSu}u)#H&*z- z80~&g1vo%I&24FB@ocb#=D%n6Ph$Mj)Xeij8lOi@6jC0joIrNpfPOL<_#d_D=l3J% z{pvr`zQ98RMeVs;-rLE&7xs8KCK7S5FLmYYUUB6RN7EaSP1n_?T+80JQ+^=2aZC%6-@EyYk|YN>*HOPulz0eITnLeWLJ~~>A!+mgogqA zev8jD$&Y$`Uq|%6z8JkI{-6%iGQ3i}C%+2^f)1^}#ef6gE3u7z@t*G(uW{omz|I|u zkKD!m2eu&w%Q9iUOKxWR6}CUobLiG^;ETA<8ZCwc!;$`@Q9r~8V7(FTKXSN%*%<)y z2TVuzkEZ9_@qI?UJgIK@;6-)rbax(4eBaa|Yx?=gNaBMUO~J4;Rof5;N-+i3{(GN> zI1Qb?2j`Wm>a8xLj&0Lw^+tV=82xNJ>pOGdn|=_++giQLCh&db)M0*1A2dkx_>aX+ zX+j;ttGZG$=c5S1-!fC;se7_C-mMxm{!*h!*TkyxxKkoKYX^|u8(Yh^>{%ExAnmjN|J}!D}eaGj7qmb__qya^78pxKW(yMt(ayo$3fNE6O9Xl1yhr z$!duHELk!z`*If!+J`DVK^#CIfiG*W;5p2ns&yADARov{{VuBnd+tVT5FP`3EZu8x zg6RV%BaOw(PM}WNIT_nfa`({x}TUH6`x3aU>%;!_~?6K zB;f(}A)?;}lF!Om-k0e#XZEI6(0XHDC-w1~(u3isWYjO~wPg zCHf*>6sxW8vw4mBWWG=J?J|1qutntGi`=i;^9diueE<3YA9@c}&c9dwos%CdsxMRy zt9;yrgD2h_&LR#Pqc$Bp^XnqmF*oMU6y$-To25svZVY*G;rB7DcWgFoV&|D+WlI-> zj#M1m<2l}^DHa`QsRcOc(DbsU{YaBXKV)&iw20EKd{xMybv5>y6zzGzV_8uez@MaBz}zCQOIW}4~O)_`9$mN zCbO03$4|pL0#PrzXj&Jo8~vHZ?|S(<_MCE;6gK{mc1wt7&pA>)(iMu3 z=bF7aF4|1#`#s~y|4(?oaJkp!tUg~LFEE&={wL$~2calo23u!>eTf%FL3}|!y4zod z;kxtCpM8d9BJbaOvWJ~>y(m609C<=I<(3EPgYc7`notLIXj(T*B3_!EJsMaXrEBy3 ziPxh^AB0&lo)C-*BAs$3P=vao(smB<73@brJ=9^(&tZ9M(%;JqL>XUduRd()!a-a^ z&rO7bqj`U~p`99zbL%TH|9e!%;-{Lj^O@t2w`5)#`m_B=M*?gk(7x<5#c&}7{K2t7 z+Kdmh{5h}GBYW>DNnnNj>_^ZO)vj^jV8bABF7IIwHw{nmSn z7HLmif;tiEt9ws$4uCFb`=K!z_amim4=hIga^+LX8$8$MouVrqh4z(yyTi`4?Mj<% zhIzO2xD1;|N=L~HCTk+;l24D;^N4cA4PXy4-Ch$M`s z$IeyZ{n7m^8ts}kq-2mMSL)HBFh^ke|UWLH6(oJ@N-!)14uWNh*SQMQx>hCxF#Cw##OS< zEE@+L0KQN8-Y~uh>tEFF;?gL(!(z|}X+pFgg7O`+R$IuL$$8#0%a(QGPh-ztd*q=WE97d%Lj)lxGXaQl9OhLO2f* zC*3fvkElvDcaHJ-X5p~>tSHopuuQxEM|lN4UskCJ^RCvRvwp{br#k<0Ytfbwb2LW=K^Q55eZ763{he?`rv{OQflhsF7m zpKrR5z1nsZU)L>3PsWTDOkSeCzW4Ah9Q^V&y=q{;ujXb!Tl#i-OZ*| zf7N7&_D}udX9Gt&bXN_g=Ilf#9>ms{{n;)}rbt@~P zxL(8W>B;8%JAY0lov7+axOSaHd^MlncVnqT_zk|y?+wrt?CpJQEzT#x`q!r0P6wgB z9(>qkIPORKQ7+z;34E&7JU1Tuq2xJ!ShEW3s&}(V2*kQ!$;}q?aCL%lJdfi;XKa%%^$ol9}$+H z)6M#$Q16H9W|}{+`O_k-1YNLX@Am5#!9Sn=*8Mz&gDH<$&7$wy+$bL>P8MMK z8+=)Xc=wf!Xn0}$6D8d)99-#k(*j~3V9zh)F`bICi1mpa;X83rvZ@usJk`pk_ zo!3@D9}F1(!JW4wQHLMOv1aF76U8HRSYEguFNM4jHFE3|HV^RRbPIynYQbq`1m8A--}kq_}V3_gR>$5HGm>rhck^GJ7N zd=xHQ_JyrC%I19g_1~pR;463I+I-ZDJs+(~J&yX|Ryp*+fY0}1bR*EO^{cHtFn?`0 z*P?~_BBnu45_zq|{_;c0TdxYpKBs7^!{FXtHjm&pmGbRszE4rfj_j1->-dWV#25F> zDK70Q%09KPF)_C7!of%B!4-vo1K=->B|q@|g3C?sKGl$)vW9n;#reeaiG4y&!uSRR zx!p*{xVpb<#uA+8m|Lm9&NFQ&pEM5r9CIL$&O4`ld&2V4wb{J?K~pr-IgN_5Dc<@! z(|eq9ApCaY`;)SSB8CT(aTIU9?R;M#^ds|@Y<2@2eAS%Twq{v6#QU4GIhQ85UJeDNg?h?{{09gnR&b zQhtIX_NA;+GE8QDb?t0SvjD#}KTb9$B3}i@oQ^=dE~YAZ0FLd_dlYDcKG*ae)mIY! z4la7#^@#Z`ZC3%=slS%_S2BAJ@zx1v8t1Ft^s}KmSvabTn={MzxQDY z^1&#DHc!NZQ{REQfS<~ax7Jc@9!bC3Gv>$izC~o$hYcds4GkMDh*wkjzNy!qgwNyd z6nEdI6aR{AMex@d;ZJp`4pNgBl&U-KKpZH=*o>QOnF01acXK;m2;)8WTQulcSPu!E zF1Zi+sBOljHDF&;++XcL(33egU-<|Tznbpq3&*l5O^ZJJ0-_*B9x*jyXzm>TT{6h1bV*mD^J?47+)&KizBfd0! zZ<-&Dm5N3jEEZS~Uf3rS{A8-MeJl1?K3OgAoCWg-Woh4Tq#_>ON_MVAKblnkX8Y^c z+>*0|?|sK9KTyQD3pw|;jp;k%^R*0aH#Qz1KO01lpQ8Wu_f;T%@>eH34pJk0)C{M5 zXC*`N+3|tj=lIKf&+F6CV`qL6&L60nK=X-Lr@xx=Rwx_=>WiVo<=C|Qe~K8RzxR?{aej#BIkh*yI*5?@9ADMP#jPvQGc zbiIhD#(7cvb#rI=PQQTfSILm0eA`n`6kM>uVa=v491MF`-FXIZ0PCWQ0#&e|>M^&k z*Dgc6Ro(isANgQgsO0)npmSu6M;oy|SpjE%FNN1^IQs$*^5`-e$#!2#0l8&)yPUn}hlH>6O)%$P?Ez zH!9+1=|;D9rVlY2Xy%v(J1#bF&`tZ{r(t zR>$?#5-e{09Qpm#C*eHZ8(R=NXIDdS3vDvxh_!Fk9$9WXc^VhFu_!ap1Q#~NY_Z|J`M*7gj zjd-BVn*Qz#@9)$6oz@`~+sr4l>l{x^?ZUxC+m4lp0~qhZ9&;{{@7-7>6q0`A!|91QL?MGyTO^=%&A$0Fb71>?)K^M&NU zvzy4D+D=se{s8*%F_w7siOSTvBh^B%-FUrywb>dgeMDH7SjsqVZ zK4GJXeRUhZty+im%%bg1E~&t)StF~&qp|*OzHnd;&T}o(d1}e(+GtBfGSKC>< z*o~q-+v1{w?0Kb67ZYBGa6ULIMf|l!p7i#pfA>bn2-y6hoEXJl+!1p|TTb821K)OP zR?Yt`Y%r{1`xD`DL5mhtLtf3yJ=G1*1r#{_s>FUXCQn`A9uCL@7Z)F00{NohdaoJo z_?a=Ke4GXTe~*Xv0UhLAa@p!B!)L!fyf4nXXySvc`2zI2?A`#Xzr^N{?zZ+NKi_qy zzk4)^^vh!***)4wAf^9U{8UaC4vzk+kVYK9`Kya9u%8xiIbvyJ4fyxOa9>+oXHeKU z>GA1u(BBVt*0THFKPvWJ4slp}bc>89(=ndKdid|`+>HnarJG)`Ji5!8_gfF$M0RfA zeOg}ddqp?%c|_ysBAkB^Yne=Zt766ZS6jg5$2$55vW`~VL>$06Sp0_MEQ=hwqPC?k z3n1Q=&t4sR62|wXsq7%+gOc~h1EYagJ7?Wo$nNP<7(B@ecrN&uikKq9L&5YfET8_p zL-#X<96dxl>+CBl0&)*c_Z6vzKgng+X{ zNp6&dF2-4^w>aV8e$+Ge{6&dpn4hAZVn}CS@uED@GN0_+IG^-GQwaGjWe(*vO*fVY zJO1^}QMVC2kBIfFs_Mc)*dM>M`G5nMKd$gRcd;A}PlwN$e+B&LGpua@_TBHCJbz~n z;2>ky)9p#XZ&7Qfr7UNBpbGc3!T8r?j~dT#ko-sz{yj9VeDs2Fs#i#H)VxuI^+a=m zKiO$9mGo6K-;biidA8k<#y?htbWeD9;)G6kq-I>Aiya{i1tEkZw=up!FU@8PU5wQFU78Ey9p< zxomymt7hokFLN)W{&OjHxd1xl$*F<8PoaIUOD^p}9az|LbSZxS@zHxX%&*g)948#4 zr1iF7`S$HI_I$PEGxYg&J^3|!HpRDm4iR=p2?K6dp}))cwc>a)8mVXg9`TvxmX8O2TWr3bVZ*Z zz5?yHezXqnAx!-txr1;Jv`!N1isl5vM)o|LA%y}KCnGjfyesqlw88x-k16)#d7y*# zdC2yq{PCne)jJDh2{(#^1a)6Gy+<6BD6UyjTAT&r|I5L}rvUJ9AzjBl8}gE~dE!cT z-+S;0_4SZ{72lugVE4VJ#mHL2d)XxzSd75;h@5BI!SJ=;<~q|&!9CMhUg&(x=Mzn) z3fLbkovj?fP3u+ra;eGF(BW`4#vVhOp&P{tzUrDS{T!#6!Pw`PVj5po19(srqv3b+zp6~11 zp0oHkG~*1}d4TIgYY(#XKYijSxL*{kfTb*X^7jip(&JZ*$&ZJ|5q>t06l`jHKDh0_ zE*vBe-e!q7fc6#iktbvWm8ie&wzYKspw?@CzjI-X2;L7mJ&sc-_tEQ9IA8u+27SA$??5J!JYM)&>9d#ny%k*N1YYo_U z^X0`Iw|Men%4@0Do^MRSbbNr6QeY&sy|N6p| zl(qqg1Msib;KSu$hkcZP<5lou@0SJ<7s1};Qu8eHpx#<)|Fa?yb=IoH!7D+h#U0UZ zcSk(@QnJ@CNBrtP@5Ay!Q%fU@XIrlVs&oA|Qyh8m`vqT^i`cqM|4B6d?KbrDbRqHB z00YX;`Xh*!qof6|j4!Ao4q*LmP`ci6@ZY6JMGwxPpR)f8J_U7aX@LXmp9CE?bMu4s zz++KnA?s#?zVW^D>4r7NTdUnR1+>%h?$EEyA4{XD@A|3qGe!t)V z3(CW$CKP|Ex}+Dz{F_HACLDOmi;TkWjq&N#D(tan(p1C&gvY}j7ixfyj*nV9wjAs0 zUlVShMtv2&yYC*XZwp(xFK75{Q*}fC{r1V#WAg@Pmm~o1c8%g&UogAM_U5zkt!day ze(TH6gGB@rF64qK9|Q+5oa@hUr#K4b^P`QtuV%ZwXmo_h4dr27IJi^T=V>0`0A$o; z!N3cUU;V!8dtZaR9~P=+aS?Ru(yw}ndF4>=syA&&WaIokc_s3|o&E*x=;z#PC-s>= z*u0N$@NC*k#+#>X3rMfjY$3hsU`+Yo*bL&+u$g49E8n-=-I@Hn(~9uz+@1J1#6%!t zI_e_k1^Y%*wfUyU0DoIbA09XZyy}v^_xmZx`^A$@Qn24^qQ)wN4Tz8Jk@mAuZ!7AI zvw`2s9vW$^0C5>tIcwur#*dQj*Vyy-k4UF{WWR{)>V?-p0e?;5_cEGDliywWy&EaR z2q(V=Q+*NIpLCjC57EP9zmMgUTZNx3yci!q|A4Xkw68$kvKrWQLxg;_;`f3az;X17 zD8jeXMIDUm4%M z27WfF?$+lb@NW5sWA7Ob%7m7Q_#PkrlgImo1TM*8?tqt^xo-#JeMy?WMizbG-^0S$ zo|ghJKS#p8fa3dhEa6}d@0YrOpJ$ABQ~4PDpTOxCu7l{Ul5#Qv9hK5Pp1L znZtO-RjQ8@B(ABxt+o?zAUn?o`2hCI{YX1-1$g%R`puyth?h?(4ZU+M;BhixiMz2r z%=2kqj&W2o_oOS+v71B3Lp>qsnX4j!yj!XE`vuGIS*7{JLp~cRzRt}h|Nfjqe0nC3 z^uYAlq-%b-lFm9miTpg&jQ&1hg5YLr{3a*sE*yNBSTF{00P~5zwP3#t)QP34&etK1 z^nOPiz5w>-S)CE)V;nVReBA@z`wnl)hypx|<)taRqaIVwTxWpx2akW<8+Zd6=Ja~S z{Opu@hU^N8A-<9iCVrLorQfG{@cimb_GV8KvAUvFkK;g&^q7>X$Sp5*Al8j=OZT|a z=uF60L%prXBMy`YwkhS5!~D|p3mwT|=eQl~+cv=Wo;jzk2e5dO?6g5XKK^<2aO4G@ z@D1OXKTd>SWzX^5mdgbzbU}9!_~}^hykof*Fz@Z!F?~0V^D?u= zE6}dXR&Bz5DF|xl#qz?J6^$&e$4KOpol%2Q+)e(x+9)f>j6A!GGCI#=!x za)$E2Wa>ZUdv+%IQ-klf*W`70h6Rhuj68i7mjbvi1Zi2aL5y&3s4l8Ex;+Bt6QO?5 zcAs|){G*h6=vzL-P34m6oE*r%68%>s;XGINcQL1pfa7{C+vot~g-ai2PDDO<=hJIA z^45XH-@h^3RY_cB{9f`Yop|SCDCvW^zclX#`*;{GPw;-4aGyF`FU=Lu->n-*?^oW9 z?B1s;`s^_==+mG!Vd2z-m575IwZA;y#$3fXNo(C+26?rA%WkDS^smO{?z_>x_%R<= zV7`4LBjbwtCH}pZKE_v1i&b33-}USvTC(`P+1k)990*w>jd~~bcNy`)IAgj; zIn{d$#rfzNl+SuQkp4SqOT22%`#-vyQ@-87_a`mrPq?v@7ezMq4RHk=z`5q;ot|0n z+?hY!^7BClw8kGa&jtJqbq~_Ud&KIJ2cOtz0pT*Lk8S|Ye+Q2!pNMvy5Z@vX?`Nmd zG3z_yBjchgEIxWnKf-t_-6Wj&s?34>7^qEt{iH+o4&?h(hbq(0rF>uWlh!hZm&F4G zZMnhnZk}zz|NK2;5C<@C^l+%eHON~*!Pg|pAkK0^Lgwc|Uj039US0ym(eYeAc0Xp# zu@V>fyN>T4WA)K~9UsYF7;kZFhrMJx5LA@M>Z$0=7<#^D0L>q?@^za8cLA##UptW> z6@)bYi%bYV{rG)NUsOeQ`AI2B>$`BUCqro%;^1ibnrX^Is>%VUqu>6l#eC3o<&($) z)|=!c&CWm^W%Unww;S{8;Z3@$k#EgAd$D^MetbA%i1uryWlJz#cqe>KaeN}5;%U-0 z!sRwK(tTUJ*n7q3^M27jUXty6Hzis&O^gD}V zQ}-)O|K)x@LiOsP1(a8Jj-~k8&inh8>QWvUq)vQbHi-UC@U)EaL-s%#mnn*(r-ltb z&+Tgyem=C7-QPIc_w0zH$=ASd8}u@lod+E3`tQrRJjkmTQ~!8jKaa}y1D~$MIJ*6F zmJ9l?@y$DZ%)8NIXL}+q#GFrf$^18VNFL>@qFC~4f)VkijW_xAk|)L6WGB*v`s&HO!wB#b(`*m-b)ns>4!>r0$Slhzy|sIr z2zeq^PACFiv1>eOEkgci=x$FsVK2`QYG$18_d+aGO%M`R?iNGg9-V)86Vg_b6o>G(VQMP!WDTfBRD;c5B##c{lOz5Oxp4&~M_C(7u`tFNQHY&%gb__%wY? z4f9(=WQGX&*SdEYJ-@#_;j#K}8N?;DK$IYUEBZz8-&{}iLB~gPKy{Str{6SxP$Mp| z&u%*qqtY&{wfZq1aR72U(zoV1=)d{{iK9y)j+Q@249v&)*>`h$JdSs4(z__c=}z6P z&Zr}LJt#G>Kzz+Q+XMJ6$IjLD74wt(>Rht#$5x7WYg6K-_3p$6d5$8COT|n_`hMFq z!s!xY`hFNc=V~)abRm4-$;TJFaPa+ojyU1~^4O%PVHW_m?~ZJIS_k@I#nI%;=i#$t zkkGjRdBEW1?gXqC&NVcyK|9awPjkWd2$|c{n2rCb-#t->`I^mt!+1*z?sY|6*on4_ z@b_^qEhyhUGZQhKnp%@Sj5p)s&G!LC$rFF1_M?9%t|16EIp&7-0`NgjLoAc)ALU9`vP?hiLd2uhe351khKKmHSByW0F3u4_9_h$>6DweW{?v!^rjZ5ZgH(R5v70IV+-gGp zZTYuOI-dUivWjST-lSgb_quT4bN<5KY`_8RJ6qK{qzwGEMt9-dn_%aW?;9k~1AjI3 z?8q)a|5?W=Bw(IB+aqi(>X_v9sxHV|cULSn#(DAZH}iWUUK)2lc*D$`*)xxL$Zi@NeJ2VA4UUGJ=#>+XHd_pfSozpa3|qZ+zL` z@k&vHCpw>`n*>6;PZ)?STxS-%Ix-v&*Q=EA>L)3e%z zhqu2nr@XNK%%@wm5GQW)y>6C(A3d%_NSy)vdb%qI$Dt0Ks@A*;b?nu98PhR8Jc-+A zi1}i{sI>0L8zqWjuNe-`PCQL~P!&r$>WV+b**q8WUz;=WuaXtdZ@PrzVd@lrisKmW zb7~X>K`m_olFeN>_~5$B32^|^LA$jdodZA33=ZZ*U%2_3e)^N1aU05XZMrwqI z;Y=9eAk>5Mz&ShO-Bx}N@jPp?@3k?F`#fQxYbT)I^y--iARQLzod(7 zcf@mWZ`aq%e}_6xiGU6?pJZ+$|BW&tzK8u&jBk&OXZk_1Mwj_N>Zm#4!^eo?F++iH zu~$Q2tb16bBDUuL>kGRq2g)H1pns-;+KCe2{Xj3*F}J`@^Jh1+&jB9u*R7da2s%7k zuzNy$Irz2lfZsagvymglIwLRCRgN+N-pjFz9oGZ#(%kCW#P~AnWe(#7!Ln`4eqTF2 z|9xl<^M7L}?+bm#kKXGUUq6-M`k`K)^2aq(QB;*M3vmFGb|%_yar`^ehB%)FJ`j(2 zRGJTQ^zrqAnJKT8)`rA1@?I(NQyM{}Q54;W@ zW#f3vcro$)C4a) zH8sRRRfpx%h7&hH|2?pX-gy?{{_6arX=h;kYbIw_@5FKb)l#z>{O;@dW0Mp5vB7q< z5yqEe-gapuX~DcIy08?QCTSEsoV3&Zrxz=ckvv`t3NymA1@uL9=jzZ z{&;UCkPLT_n=rTw2X$Mvyg3Ot5J(#D&k0Ao9&%qi>lXO0FnNH?Ip76(o#K>2h3H*+$d}kuzE^#n(R1B{Yv#WdXPQ3wq%cr zDd8j6fcQ*i41M1+kd05cfcG7cRTN#3`gt00VBZ*V~GU*cIt1Hr(ly^6T z(6}Dwx>adB*`+j&c=eB_0Q>+Wq(XnE_V2vSW$N#j(nplg*;ctW;)_r^ZJP?>0Q}%u zD_IBeb0+oB?_$7XPwA4^XDk4Z8$<)}URt}SUv$Ay8850b+JEp>(HCK+^m28?0UY}Y+`YIC z`E;jEXffb%U(7r00^l*7%^d-FZ=3TF>$ElH@R;r@L#APVooI8#$O7x^6ZPHD&zdfF zZ`kwlH=bm9KU!@k#fhyC!>{J1d1Pn5AeKKAN6Z#r{*!#p@4XuCO!?VgjehSrQIz*N z7`|z6K#| z|6f1Xb|=7#WQx7j1eSM~zY#~Axz zpJx)&6qqJ zzRw`rfb5;b`{`+_lK&4#P<}J*PQ0foFVYTGNVEU(MVR7yp6LU9{WAH$vH@H~exr=k(BeUikT z0M|JhiKiwYUpVh}5y!fxa%;m|7U!QHWfLDc>>@kG?P-29N15;`CdT!4JKvAgo8qxU znt0D-An}Im0KsjCW3q??*v)_JiX!R)9ZB&uC&5o^JPYn%U;DHhikISnk2agkD2xTZ zXnsFnun)XP!`PZ0lhN+b$GWnJXW46Wf3v(g`*kJLQ`^*!iCEkx&73D14*+iPpmfvo?9&Ic?q{G)TSgfG{}g|tWt?~vLYGLB(zI!$R?DKO=c=1WG26J?(=+q`RDz-L(h56 zeVyyN?)$k1^1;p8qj46#x8eFfqZg`_Kz=4w%U&;XS4D=!sGA+;?d?g zgoCXvgaao#dcSEJj|YB#tgLZ74rF*9nDDzqdw#sk+yXj;AMbLAM&y zti}`p4xFq*^^>cCzmyZ?wqbs2EsSTQ&pH|uY=ii8$%-9}c~&0w?k}sO#ric&cg}9e zV)4~i2T&c=P9wdVq)7Rl!tbZ8%&)`FmL~ofBtdZ(y&-?#-dyFMQ7~n2c!%)sl^P?` zg}Y;>zP=5<;Emkv&|(}VBhx$|K z7+UDmFULVKNb9~{M7?Ua$9ON9Z8Bp1P-(O{^9LV~HnTX3YH}%#FNu_2MgANnxq-y{>vV|UIy6OC zrv+B3tWL`nh7`QYto|cWzZL4qYug?Lz9_q7sA&zsst2VJs zg1QQ|+`VF(Dg3?Y$L{R>DD{K4Z7}Y*^N(ebccYJbcQGDsOg_*2;=nIi#8)5r{osX~ z9M)yXf&cbLk~ePO(Y)Z985S-=}*5;P!^5edRMgeLWl6^!vYR*urKYB<#ydV zsE;;p_cKM{V>+L91mb$Uq#+R!+fl!k^+?(bdQot2L!vGEZQExK2ByFdy8HeAvA^H4 z|1I%UYBuW^tZIyBaR=OTX7`cg!k=s5WlH=o*MRp`GSrUG7s^P#KTZXzC2{t3sG0|GQ(j3_(>*WGjIO-nZTn316gr;4Co_S4UDbRzgc-?SAs zwn6-jcS9Dt4d!`eLN?*xrbZXb%iku#fztOZ#tZhI2^8O6 zd-5?UBk1~OCOm)2@^wFqaPfB>)tS2q{l0#f=%%Ll{wF!zI0(y?jmicbz&x+i#n&sL zu7fXkO}Yd6vnhC)w;(%!~H1Zj5uHc2+Q_`>505+kFzn=ltKe*I>Gz#tXFW9nN=l5gVk8 zd=TAQ@=JdQj?3EG_lNc40Rgv`?EP9)4e`kJ`4A5}95k?U%y#4h)rw8C(2sdN+iHt( zYxo5X0=$%GglYd{IMAAQj=ff{%x3jw@g#uS71k}F&*?a4M0KRfk27!66*1b{u0}X0 z7)X90sUO|PGez#r6;903_Pg-@76U!vgAZSdPS(NoPa6(}ehm!2nkW859F*718yy3@ z-%Eqj56Ac)Uf*VoytUrtj{)**^pWqKtd5Kg-%&kWJx1}EBoGhy^8Kp~CZtn_{JDZQ zQ-}uy-)Wx?Lv3mYv46ASA#&JoKLBvE*PD zwdeIj5#mJQo;%gsFn*qoo+ah=Fh~9LlUjWI1IUMkjiAq^CyL&NwI4$qte4ApmpvQD zWvxO|yN&@)1?P9^V88Z8VM1{nw6lEgYsk$hqc-?#dR@@0URy>6dQ z`^VbRVDMR{Lx*azsXc8LP`xkb`?sn8t!I*=Jih2b`L1u~_d$7Mg8e!#IER7xqWGTN zh`Qk2xe4EeEo-XBBM#&Wo^Rj$t`2y1M!01d&g1x4-f4vUf3EsHP#Mo7P12bZ9FFZj z^2A0f$bZe0Dmz2Ov7D{w4+r>2OO1ZV>OFGTQHF=2{qa;c8(o3!zzBr#^SGSrOqkyd z5how%Hi+sinO~=0rO4-VfGD(JwoCtpZXBEt#dshNpuh0&W>^{IaoeoQqj%6B>Z@uN z!fSG*ZBQB3d!AXJ7_6sz&qlC$pz5EOS_3aCd$Kz9z_*Qo!<=0t2aXOAAd^8QD|6g8U;^!%|5c><|3fGF4c3@oIX~kcU zLfvfjm0gPCork*Om&Zb$6AO=>VK~SyOmqW0b9EOd*a1%nMxDGXjqyMG@b@3PuJSGs z>$koU0_MP|Ej8eqYVWs-h8xr^-mze;2y8 z)s99ScqPSdQyWmxI#7Q4bc34W5oZp|N(a zA@;``&#$KEVOMXyWBx^YXC~>w#CXzCJO26jFl*xdv;4W!HaesSqCtGSYtZ*G!zk}& z>fE%Cy$Y0?yKx{I|Ml51zyXYVdq>SG0o-zT*F8iW)Q!Aii_b^fjk(-1^nbq(ypP6L zmuCAds0Zmb=2qx;5BJhGVf}>8O@CNDU76BC`I&T##pn;M zRtdIa90kuLVu5d?JD(-HqQ4nCX009chb8szO&^GOc=A_;eE4$zDt5gR{~Y3>06)r? zKfe#%U`_=0*A&*1BOMrFKt4xNi|(U#G~+)m_H7m8h54hnQq=^%m2y9XKQ`A4KpcpP z6<@n$SC2e8V)_|2Zz_IO3HtAvCs`w+;6BP%*^1*o?rw4U4m*IWHBwmO@oU9(cc?;-r zz~vv3)A4@pt%@*Ve6X?iZx(OA@D_&GJpq{%?~x?(<0JUgM;8FHcby>`Dvn$3Xm2gHPGS znt~3bImfc+;zw^?utR*rpDC9@ebZ9%5X1gZ(#I2(R4*Ahl((sKMSvTtrbI)I@vVlC z@?6J17x$P#ajK7}IKzgJ?zwl-dM0fJ(X={2+(Y*t!b63l{@w)~te3mo*0Q!9`2I-f zLFod>UxH)XC*0pF?S$ljNaWL(8-9jkeXTY%utYpKsi+#Ezs=m#`h)%bI*(?C((nW^h#XojP3pBnxsAA*LJUDe~h!lF`UL{&Z$>0{q#GV!{WR0-iLT=wlm?N zP@Q;d);PlLV1B*WIdQ^+^ABqO<%0<47V_L*)6?5b_x}*yPuTkbaj=}rQeStt9{7H# zzP8(Oz@cAYgK8=G0_m5{UnB6f&Qm#}8rtjWqXARVCm2^PG6LTtCU#~u&9CntM|?2% zAg#M{AHe%WJx|JSKXCSrCnV1YsdeLEqhH9E zqkscwjI}SC3LsAw-)_xsfO;ELqT7BP^j9H!+dR@xn77fDn&i}>_ zTB;b|O3QO@1BSgp9DEm?vb2NsY%ss;Y|Yw3kjF9J+*CXVORaZL*=WdfxyH;cnx7E;l=joTB~G{<-e0uub@hVGXFr4^PL{tw9PCS*_^RI({Tg~dmaEvd^*ggXLV}@?8%n_&eZsi(59qQ^T4eMZd%)Q(!0{u{kmOCh7 zJas;vea;#2`(t(T`{#ahrZ_tI^K6dUQv8Mg&F2uKI!vF+C4VR#6>idvgPVu5&msM-9yByu&+I9PgrNeeD&Hu%C~1AwfhAA{H_bL==Wac)W1;S&pnc| zXhj)V*_ICsqHE7@8$tQBjAN=Oek6SvK`hopiD6gCOeW;B1^E}fg zGrXrg>@lugRwi%|PE;%}bk&Fu#q%9)4x*-EZ`J#_!h`9}ppaRgb0+KRxy) zJsa&u`qt=2{xHywzIWxnH9_MZx%rfg4Pki9~?$|lp2dP)# zuYv~bw+tN8nFG9Uzwy+qa%|@=-^$HcSL2+uBatVfOCOn`F0^gl#UY-X3LbrB?foRA zmGr$WgYvjCh2opb=NXs`cwm{?oEdg(impFU%Uwq?OM!g7cFno`tN;fzrm5eHSj z_D8_yO&WVzP0=5OUsN_WMZBIe{lauBLFYa5r-SO#S-XF{kWAO#Z7E{>V5`mR0gS)n zKW~1%YQ44y|Bm3vSjvBi8P%sUC(>IYeYYT>8wb54m)Ri>VEj<$@~-0$PulFh^$i%u zrq2Vj!OyIl_~>6b_Gc18EH`34)o0IQeBhosM2LJa$m=GDJ_qFe3)A=1>{f=)C-e7H zohT=ZK%XTW|M2@euJL9#=VbZkrcYdnzrI)zKTGiAi<$g+nObI|0TUKYAskGz&&oLs z_)GUctGy5E{jt~LI(&Y!?1=e|aNvXV$-maeVf)`$I?fjJ?Wfmg2Ixhm(;1_lhy&;2 zvf`jCoaFo`g)F|k$+?uzf!@SJVeV8nKK#7uBvX1HGlklHiwd=a!fSedb4Y>u5#Acy zV#k)d^*KL<${m)B4*~*WpZRFs0iON#{IJ?FxPE{8YoAJ4KW4(CFo-i&;kAh2z_TjK z1oJzj$=#Uo)u+p!Sv`dNyl3s%ym2q%shv^$cw*;#UI#ph7m|2?V9d`~@5`?j-3aH| z0MNpAD)aiL&-FcVX42*L-8i_IT+p5gIDr1_x}e7e;J1Q*KK#^x`XxG`b`1J89(`IS zR8)gLJ@J1KRt@=m=Cm#nb;B(Ji#EeXZ?Y*1pmn$;7j& z{5X;$zy4|-zYj)|A&o=#;?LpH96@#0p+$VROkX4yV_%8>V7=VX%`JYXAx|o<*93ck zUyE+c`GNkR&&lRno1mV~`RzUt2l%k+H{rJx`YpXV#xoG7(+{UeApc&St1Hg*_v`f2 zEWVg8xm5QuuA~p&`E^Um6Ue^~6p+7p&+qT`U@*luXO^zQ+z)Yh%aHE6Q;BB?&Pn-r%*jv^y6O@n2x}aL{*G`oBmWG zJ$Rip=N`8O#yw5$#(`vu@+!mu^uziji{W_JzyKNPyHIcODV^q-!2cO%SIn${`>@jW zS+W*!U?sjc66-0i`GXX=Cl0A=txwVDOL~#7m?3=QJ^< zgwKoo`WiPA;)_g8!b5Z)x^G)Wp4T)vVbmXG#6fiHu1SrXPh56zK4cCA5jYV z3;LPRcLU;aLf*qT%wxJv{WPpAueP8W`1w=umtu&A-aX;DKIU1lKdEx>uq(~nDLeKm^P*h z?ib#(>)v+VB|`rgs*pnMoaj#R>3a}A^>(0qfuBO%Zq?@J^9<9YysB6dt^*`R1ry}n zeLL2T16B2lca8uK;IG?!-&6?tdiTq9?Yj`?&fbcFhk^IwHtNBAYq)XqnR2VEA$?y5 z7Dob3YNal()W>{=uXQ&?d^9>8cmIh)=^)sh)i1QGRv#al6r8982g7 zR}sps!VrFaTSsRV`+P2skFQqT+=AKpIDT+6MEk@w`9jeDv8$ii?gXE3wQPq;Da5zu z-g(z`5JzmQuS7ih8>iCBshCfVnv@x!7haCSon3gH2Tp#Z3wvUYv;4gf<`J(;IZ&L^ z{Jd0c6&429GDgI7IByX71i=q}9n%+j{;{Yp`JKZuqL$SCSH(kr2~&Sw{((4vb{@25 zE8<|4*7i?$9_rw-Ki*|9J|oz0(0nEGmiUFiTQI)O>tm)M9?YjcFvfmFjr#2O3`R4??}Y%$s<)0)3*)ubR+m_`JV%eI&NO z;w{N3tgh;#O;I-#L=T&pPYjyX#{8G_z8!o!r!XArezm1M*V|J3_sxj6rW=yZJ>t%@d!eyv`4C`DE?Dk4T95jUmEvp$<1a&@T-A(r$kjIk&=JQIS&Q-5I%32N2Yby5i zpAe7wdpqX1Ir7ynYtanQXSss9wSVw>mrrjJ$Im-tR^+le&zhG<`JG}(`c=u-&n|Ns zulZ_9e7sVRcsQNk4_rl(?(?TCwab@rqA^KM`vXgV2`A+5V&g~`I(q8d$-4vXo4>hF zayrEK@YA)(GSsE5`^K(-It#v)skw#a@29;k@CBToEM@{ckr{Hc;VrA1Yho=_=aW)c zKV^1QGVwvpPg=KBTSdGtu0(h?P^38RmG{1l0NYps~7gLsbE zUS-LU*;zz_{JFnf(-@o(j{%k#gj4JJ%ylfLoexIIYcR`%tp9;L+G{Pj!tyesV|^%v~N2iM<$`Wp60d1xBo;QeE( z>@uvM1yfs>A#aubu-yWD(XrRFk2dzlE~ZZ~VY;x#Ke(1ad3>2n_}s&< zzaKx9>gEN%&zKtjTtv%)^1GIQ4zhDB;Z^dviE5ktZ=*NeI5_d3eDfi|0rb1CUDZ7W zI=|}t>-@W>z*F}(&D;b0^l8-M&lOltzE$^^ARqLw85D)_yM6vW3FE!~0{T1HpUN2g zip806sf~EjGLCdAGKJdzl@a-?nfy5xUUI}!qm)T^Yg8%!cU8%k8z~X)Ek=mu@0I$2 z{-9jpfG92z&vmYT_;5iS;8YmsnOO?HX6f7*$>k8=#url2@!)d<99CRq{qVT1F%H-- zGYV?^hS&cjUM>#00uKIOCgb^%i!}dJERSE`-s(Vg4iv}yLd_UfmyNoksjgTH<{_iOy6nJ&M(aWFRg^^=2u1Mu4w!E18?mj^m;)!l`9 zx?(eADDL0$*0O#$&Rdj>+q5$XeZqi?I#Gxd$Iz7;$iHfn#tKo_ocESLXL*b4Xru9i z!`rAGrBkWiW;zodb)4wEiZkKB%bNJB%#hEoG~pm@BE{co#7TO2df|ERu>RKD)fmTN zl-D1A9}PH-IneV8n+?o& zx$Q018w-uYelwtn1x5o!Sf6O3f(6%jDXCI}l z1Q5SMuSLnk2R+1}GCa;nAYI706V2jue4b48@@*XHsm)}P>%||rXCvyep1fif}0TeOfKO11BTZ?r4JNe1nuwU)4GHB%zZk2 z{)?ZltYAsJUt&c1+pNaN|Bcr@0kw~WF4q$Hs>us*psTxnblvn)Q}BZ_r-b2vQ=Nrt z-j^az<^Rp|M_ni?d=ZavZ58QhgZ{R*%0v+kqO@AE9zp|u(0uUP&1tNjbVub=9y_!M ze*qR0m-rM8?UurF9cu5D>ZA|cNUE!%b`$o!zZBuO??};D>Dp;s7k&#p<@cXP9Ke3i ztN%`J!2XoR=Px*)Yx$3eVda=VwRaIdfMaRnW5>1tJ^}*1d{Tn=Lnhv-Hi7#J2q-*v zpVfE#nHI`VW(4wClEnHHs(Xj&?0t>@44y|v()*iMj7JLk3}-r68?V8!acS6)1$_s1 zT~U;gKYBpKxNaPH>~9-}IDj~>F1EsRHY6in^tgxl3)!|H3V6%<=(@m4;IjhvZ;hVF zuP+Y4x^le#A=aZY-vyJRgv{soAFXHCHE{eu^^+4u`3&4a@zhGt=eGaplsw^LxD1cy zKm552Rs8(r9<2W%Cf1*mt}Zv42RLYRPMaR<8(L&d4Qd329Upf+iZeX ztq}*k9v&#(0{Qh!EH^C2xC}xLv-2z7wx47D1;@yHBe0$(&wg)$@h1&*t7Cff;av;y zrOO(|qo04K5FY>X{oDX|(g(4*#9#7`JT3)f%=e9&XI+im9xIxP-eR9S{!&3uAGA0WNm#R~f`@ z*1zMzYRpIZ-is_h_d`EW{_K{qddl$M!FZxEbEpXC*Q5>S&%<;d!hbHyF?*=X&;NmS zOqAbte*B}dYFf-#t@(fhPBQq6^B0^qsd*&>&gFykD=(*yD?=Y^k|E`c{@~Mg%>>lf zAPujTQKE|i|P)!2r5FY3Z*vkA%rcFNO&z|ouG|eI&IM46n6>LmA zm8?tsiPHbpgS?}4@#jX6&J9rG=ETqMebx4l@Z6Qu?T7<)ufSQNSq)h4%^?LVA&$0v zDemPEx7R1FE<5C1g)I-ZU|z4ZjF3h=KOG^%vHI$By@u&#sYEOBQRO14mzBxn4-EKo zk)2&gujHn4a2>cq0bh5$2;Uj}dJ8WlYM0IWoaOk{7f(8L;~+~opbBvS|NGpFwrJ2X zt3^d)?tyN>Lh>O_z+crFXO2{&pACw)9gqEjs3Qj%4kYu1?O5;2%x??92g5(VV~m%c zrFN2Ld0(qZ!!Hx8HuLtqeNN3`)T~<_Q``|eZ`uN%}ChUIR^5e^q#-hUJ-UWyQ z$wuQ}6+?@`ALRBwpuIcY7EWyu1rj(_=fQ3Ls{!meYKlYJKt8IxPPcn zzSj<+{Dv){ahU_-xS_#HidX!)aiAEO8pq?{%5C{*@T)PW->Kg-g|OC#>|O%#X^bi> zt3*BURGVmy@nx?)6$SNJU?r3ghx<}^qx7D1;f-<;tE1i}9|*7K{3*Y8QV7R0%_)z* zJZ`hJMT}OZN7C=bdhmRwMEBiCgZdp!6GR$SZs!mOr?9g2-lu{8$o>V zT*Y8f1LCkmYC*L4V?_#1XGy$A>xK=C@6k$&aqk#33W^SI&HV|?cKxeiw( zKc*|eO;@@TgE){Y2#(3gsfr-|o=9ZQc)8uyw?@%4L-> zzn9i1I^sB3`A>g#e%K=uX9-ixn_vI!j5ih6<`X_$v?)$s{v3g$PKSTabbB(z zTk+q%2X%yl{ffkE2Q;{b`q@6;>0^$S{O1I^E*&{CWk&UdVjuV}xY zJ_W45>vQIF45vkh>KTtNnAu7=GY@0&3_6uUdaE>teCG*#7q>_NQ|$))qZtdh7c11L=S7Xy#Xa_U<6PTBAq&nN~si zAD~TfP2+XAQ5C8b>MwQ#{l1a!mqqvHY-Vac!TthlFZicUANjzc$7J&;;Df~rpDrr{ z|Mf)k*qVi)7h9v{ zN{p|IX@EGT+CvPI(a(JRm0gbgvHT%|1;7(NMe~P6qON&W4pKp$4HYiskT05I^&T)B zNG@+>d|$tV&Sgs9mdgC2Ae}#Np?o2|HwmJ88{9#&^!Eo^TN7 zJrRAlbdP~%h@XPZYnvEPnOyony81kp#j*2TGP@sz1Ag>+FNkpR&yW1WIDVgHT_uNfTf>z@C3gs?ajS$e?)S|1Y30PNo z>l)eq9P9Q@b;NoL?>Xcv*3*r@{t}FL&)hrA>dez2pLj=I$m*-tJRhnzD;MJ1S$3pn zKh3DV%mnoP){(>mo&5f~PvBfU+aUtg=bggbV$Ed4fn0&|F!iJcz+sH1AaW=4UwZjY zIbM$XfAD_6LdI7q!z0l@Oey}t#^rtlt|otwEc=38?}L3Sujf35K1AGt%z*AQr3KD>4uVh@F zc@OL9o{iXk=qHpsP<@5_y>XkCe+yiJ8`|n(fE;^q}OP+MMSXFf9 z#-+W$V@op(@|jOeFp^ycdRFvew|pe#_feCp z7UFZ7ZzzYlAz17Eit%a6>{eFiF&~l%clB}9{sWfbZNNJ0CCpETUF6SUnZ1DhzotbF zbU#b^b*`>%q%XZ(xjrr9r@OxF#=%u}nH&272ax>yn@&;H@SJ&-r^h{rW0l^e69=nd znn`d}Qzf=@{D!-spv!_St8Ozscr)(qWQ_m!lYVCSDmlrunbpm!2fR=GokG69-%ir8 z%|4W`^w|_=jR*16WM^u38GgU7rY`=uvjNqkmnC<(Wwass16^G!#j!7oQ9q|Y?YE

SA9%Q};pPfXvo&m8?%XAtND_HWF-{bu+}Tp+>nZ2y4fDQExS zePY>c!re&z9OMEss{2YqsyDL<74#3eL-U}gK3 z`KSn=R?6QAdcJi1;|_{5&Y#-fH;{Zwv#*Htw|je0U5)+!`Y`%k8;@%hC(%Ro2ZtB^ z=*B@$Wi?~O0krcbG0kAmsjHt0z3xGK=hRym9Ra?-yL1om0r2TWr7NqEC+1AQ!^RI< zl3(a!ovkX8GDBXdop7_2;o!;>-X|8OQu_|sMSLV!#KCJ_=j3j zKDkj;cVDMbo_(D-|KS(fsoywJ?c-`(4`e^e^4U&k=N@z886QaX511Kd3UM47v@-$w zW!nFAEU}+s`_s}9;}8DywhOOUSIp}|rp9s7h5PwbC)tiH{><&J9O9P?C3`;wZ$aC6WG);lMTJ<2v+LFREalN_aIboMMc5&iW{42D}Fy zp3k3H`w81Wu=f1Cav$;O;3U4?`Ta(EETlS{?nB?tcO$=G$L}}uQ;+iRXHWWe$wjnz z#=$mk;DhgiyJzpcD?xt{Dt31dwC~gH*H)EP1Am=a^9}d+jN9n2kM$P>XM0*E3HZWm>E`7S5K!=e?plbKe(d9$H%W@ zQ5#18Z_;>C`t2G)Roh=-{qI=|5eK@uXQNaP;B%&Bmos~0fmh5!zrenzTV zXG0zv2GqS_{RNE_!A8{8+gA7Sxq~2mYPKo%&$pM#nt^^aX2$<%XZ2L}n*70)+JxTWoEDz2A}u;E-7=$XZ_DGCe+4|*%H z`6uUwZ=~@=h1H)KAFK^+WqkSe!yd+`60xa-&)^_xS33{Vh0571-wHGM{anHaQ~fPh zro7)YCw!Mp73Hj4>gh4E8waEPS9PQT4xrx^esg9TQde% z`w^a_Rp|fO=~6#Ci~%|28R=3^m96F5k3*!#Yb^-0vH!pWi{P z%$FK0Kgh0Mx%j_%X`f6mOfR7=<=01(bRwWP#d%SO^4Uw8c&^TcaPe^*x4w8p=`yWu z91Li?yd7}>^HObw?K_70Rl69*kwEwR_`y7O;Mu9a?=U_H*ytIFb@WX4S`_NWoX~le z$h&JpCC%`DqPN4kOpJfg%MYyXWBX+i4n32}Uu*LHge-4r-vT#^KVlk>19|3;lPvgk z#Sf+tt{rSea%N3y{23p7I4`rL1lsdw%%5*KU*g;1FTQ1v=keBOUA97<{n&UUial=> ztefnN`5!*Sh>a^7TwNfEICwU1kp%iQtFcGQS^doT!1o(10*Ifks!{$PI+0E_+Y_%j zPG!C)q?ZoqKy54Sk5$93-?uUl4USzf!RdFGaGddgv5153f^Stu+tD8+RW&*u2ONA| z~af+>w=RugoB>ed|izZ;r%vAPNVy1G8Zkl``Pc0Q8y0O%viG!aRBor z{fD2)K|ed?l0M?#^6`;pPC=b}Z<0Mo6UdyEG58uJZD@*Y$up``VH6wj<)ua52sS;ibu9)E8%ltf=*9mpe zt(ld&0f2)xXT@DASBfEz;hzK6WkUWG9=N#T^94`8rH0!;7d~I#6Ow@b<+fR&3+ln1 zF)EJL5O>%2OHwSqt34zT$E~L;Dj5#`M)5c}IGcEPnmffOWllUW#DMC_LzD3AFogMG z-LL%!r>e?ypDpT~zKUvNG51gSr(ACc;sA~VI$FJ^0d&hD?`RS32c7uwLtHubYu0*M zvvGqJlD#4^&h_)%EKx6%$9mH91@{j>7=OODZDsZJO8*Gq(1Tykq%fM=)!atJ_-lg$ ztHYXOIu!Q_YtoBM6RNM5X7sx@6_LZY%Y$O3b>qNfUxgjwU^!=dHE?Sl;I*|YMe!cA zv$AF2KenEspIuHR@@l+l##Z=V*UK@B>B0`NCsx20FuUcU5Pg`}v0k05-Ik>D;|CLt zlCO%|MLa(`gm8S(pLn8;A5U1x@4NiQh}s?YFJyZBZU*^-gRpPHso@!jgE7&KO5X<* zLp#fx%6~cvajnl>YFY+)RPj436AL)q>ucnefPQ@ImoaXL&)Zc!nLmhA>l}!B<|}SN zbj@hso;oAVbrFh;Y@)Yp>;tbtY-kFA#x-3Qyr!A=lqV)V)fYCq(|*9 z%lE?s6X^a#t|EQ817~HOx^eKmE<*)z0Q)5V`FJ@G>glKD^PcDrRxaynSX2#<`MnRv zR^s@;hO?U6u$~kKC9-j(=#9~AU&2m73C%;18P-K{uK2*}`I%zG!G(^y0~|by00%NH@{U>1&b{}x z!8{bGx31bpahSh{cXb#Jj$GI}6Fx8au<1FQkMu;CDucS~cvzEs;;GhZ7S|oaeB${w zZ>oDm7s|7$I<>FfV8UgecG7{D5_DgK`F)&*$rD~w;4CuCndmJ98F@uk`8yPyw`mRc^t{r-GnZv|9V1Ac`GMcYvicAZ(y z{K0r%WjoY`N0Qrw$QPNGo&Q+=3LR*E;_QkXhDYfG{JuE59EevF=Tg4+y3%_EE8c%k zBz?Q0PIyQbau7Z2%x5VoOga^XIQT9&WT1K-&uy%<8k>;~dZlpYR4?=gtv4f~zX*Ef z*}Fd*KM*c`IScy>sdI|ieC0>G4-LXPbZC?#pSXJIIo5u?wepESqZd%U?BV+j$Nrml zIEv~@XDA1JQq$4Q@1N+*&qwijN&8O)ysz5ZxpZrL4>7a6Gs&{Z2jFAHmuoasL;ul6 z>r5f&LRYmM%u56QOy00F2I@>VUc83QOH=E7XN`Jc@}<=T{exJQ?O)~-Gg?~M^-o?p zMtbx+h4ND3Pwguqt=yVWCy4j4>@bAXK`jyLf zAr9cOljkI4gFaau>pFiI`Y&C2;=42@yDih4`xX#iJ#-^IJ>o)o7CoKk0segV5;YEW zCP_(1|8Jfp_sw$Ec*H?t=94jv5xDMMQ=_;k2XtvwV%f`5@TpxFP3)7PKY1YO?lU$| zwQ!xb2gWryE!qKn?6IGjvP>5&zlk&64dBkR>qhpZaU=t8ABsA==84 z>MYEJboc3a%4=g|72GaN92!TweNT(Cw1EAwRm9BpwtO2wx?r=RMiPDE7>B;M@cGz+ zH!J0E{=pTI{-*`8pq#&Dz`Oax&G; zCl$(L4ZlB<)f@6vYpv*WC0*j%3EK49*Mj1|G>-ckI_6r*vThvMIz1VMIDlEOz1K`Q zW(w<_=La0ZdFy>vgk30wI=k^kFogL7KZWD*hy$Ntx@;aw=toPM_m`w5M4!{zt3e#v z2YljJT9=mz&+(Xlxs=TFt|{fq+=KF3=}6y?no7JI!}o)g$I|cC@%tQ~7K)nZ7Tm-B z0-Wm`a|X_F4G37;6*e{x@af(sPlWq?hK?D&CD|07FDRcl9gleID;YBzaqzQh7MriU z#XWa0`op;VC*trs$;SCkH7u@C*?Gk4QobCZwZO{Vo$6}~-|v>0O!YT<9PvWUC3?Pe zN`ZKJgF5NNoQd2@b+L+BR$^xR&o3K?IJnSZKmK3q9l*iuc`5K*L|1p}Wu1>@z_($` z!yRHlFG3=`Vct5#`)1=MJ5#Ku-MeW0!q_=t=x-IGVct6CHEvEWUC*C?-gv{2a9htm zzuWIg_4AS+mkZ(Oej?0?$E=kJ4^ND^r>PyQ&BMBJu>8DC)E>aWa_+j>`lFe^`$Zf2 zMBIgVPP;z*f%7{;2h4t7fqd{JOFI$k=+}8!_I%-yXA_Ovzwa=`{-fa0841Kml3pXf zuI=b?;-&ulJk_Zl6px1))%hlVUc{=Y^nR%!-G_xL&kqvBdu!FW#houI5C`7{J^wT- zc;8D;)U&<)R2^78hn|7nH}|aD|N{?JX0YaUT;P?37#&R z5E2*BZ=sl3j{%1?2nQxv3AgV+zw3ps&)*WLFEvN;%ebB?ytBC|4*kKYQ;W7>e*csR zXJ8$@u?#XnpF4cHwm9;H*R&NhZ~fltJc`dHiLQ6gn&Qaf&p9;KBOVBIqxlinrW3yX z6{zmQdUMQoJ%HzSMK{LXjOxb0ajj?fb^{Jze$Vs>#iM}N%vWmy?m`~Rb}iFp?eEfl zrUL7o^R7$+KVH7}0<3F8o!wjQ1UOHsF+6LE`t02Icn?-*#=F}%xR12q*N#(r=I*3; zqe9r{X@?h3d~du-@4mVcUNrP6&Qk{TdFTwn$6FUJJwm=e>H<7QcAVL(7=*0FV!m*Kki?9`E?%Ydi8oO4SrLw)L@Fe(A_>U|v6wL$y5+g0g+`Th80 zGR<2*+)o1idF=udTF~A4*q!Ojl_DoJty87d2ORhyeWQf<&oEu=|ZCi@j;5=NycZvG5q`kn5T+-QFCc7`Cge> z#HX)jK>0$$#F|jM7rd%szniH?_xHwJ*~#2==_G>4@4TcD-*(w4O=& z9KWB;MK8MULwkyM5C0r=h#~R97)APi$_Uc4e_9MrA zoz{(m(|uoW-vu~;{UcPK2cCd9AIxmf!Tk@U-cQIsQw`4@t`7380N!6U(qd5x=5g_= ze1?NHQE=`g*#~-oPva!#Olu?E`gV%)Qx#A39_G!DV+0VM=g$=(-fJh! z;C+`A<7un0{5pcSPK1vmuA=w5rwD@p2Y}0FiPQMJv3PFL<&%)7&3(m{P#0ouI7;sX zKCpJY|1l2vO0-gJKGdOAqkaNg=UP_(Xc)$qSG$P(!CbA&%s&rs&ZD{sSxR*+ZcI3J zGvENV9Re+V;sZrZK5l;9P{&I;|96u-eg0fYba{J0Z>3veW~+UjdLa&AU1Q*~?YQ1~ z|EVnB3gp>0&uz-E?ysNvhUeRes(VXqL0&lc?Xi<7G`s7_hsK~ERzCi9J<#8jkNNbT z@u_ND0c+1`a}$U!9j8+JCpuAH&&?p+nkPneKhc=iTV8+XTC=)rU2ei{8SJ1Lat?*-_tBK|puBpuRw2%Hbw`mOsCiH8LB!6Z*EaC;$YO`X0~5i`=dk7=wmZ84jVJSIJ2rJ;JY#N->LWPx+8Q?vb^}L zN+upSJDcL;`2DIs4=( z)=qXdxS!irheSH3KKDv1hvQ*c#iz+f4dvH2X8I7Hs_^GS+_I*8YVh-tId#IhF2A2Z%YWnN z23*ookFa3Cftc9OSUuYk;H&17)@x5goegU@yjBA3?YeB=qg{~4X~Cfz<3Qh5JuZLk zjrC-*dGHLx@rY815$GQ}LzTo4&mrpCR~i45_0OX?)mISy!k*E&NByjbr{H-Q>mUA` zLOL*PIQ?FK6!D0@7Q5eo%E_XQ^^Hm~gT&1qgvs4N9KfmP>z7F^eBp z)|^9i^F){8ROaVTuCyXPGn1wM4U8wl--oTfH3_d@bVV~=e{YYe=*EHfw%)mj1K=xZ z3AqaJSK{v^VZStJ??rQFo&_ApFP?p&9OA8gy{I%5Kew0Aj6_~b+|&zNZ>h6Blnva@Ch7HEOU);urHTi+-!r^nG(c7Q_sK`YT#*mP*C`pJ{?1NV)f?&$HoAxX(h#>Qdrq-BX?Vo1V>uQ? zy#IM7#VbCY@_NyXeBwo85%xD*efV+FEF;pr8P+1x&^rCW7rSwA-}T2H!~x9jxo#d+ z32}VLnY|kKOWSe7&+r`7(`lKLG3C(StJa8uccN}h8rro5d23s2;!Mo5bf^sn{KiS{ zT+k1{Z~CH4`(z#eTS$4^kxb)Q)+QW$9VYkPmEulur0?CVDbF)a3BMMq9K&zZf9Ii1 z5`8_9xqS)Xpj@G2iqC)|h%f7V#9chk;K-?@1tryBQ)c)@?J@Q>g#KQMA!AhFG z$OErax7veG3t0WC=P3NVWX@$V#s~i-uQOhiNzWmiHhVMv&oKxjo-&z7@p;Z9{d#Fd zybv>v`oFc4>37YRtev>sHr(5!vWiwWakKMEXY&vT`_kOyBOcd7{`|i$y(9wP@@?eS zh*F4C>c^rgoL^ZmtA23=_80zry6lQ|_TKZk5%Ps#lp~#+KIdIC^9KVPPqX^E-Z!4= zBJ|Wk&D9_{y|yZ^3v^pS78V@i$saaL8)~4~!&P zoh|8XVR&2|P)xey6i0EMoI`n)4P4R?@%PiwMgA7{cVhl=rxWR*xT|Qgo?JcR z0Q}+WPajW1|2rhndI_Fy6195Q#1g>kAc30GUhrW*mM$reg}N7MZ>{x({CDg=B(z80 ztsK`r3VHYC^rN)Da=?%4EWcSpb6MW}cCR3O+Ncw+I`HSQ81U!K_SUDoAK>Rlv_7PG zEBN)>HRDAGvsZT>SS@b$C+tWL;^0Du#JA>S^`Kj4f^J``HvKMGx$CZVDd5q!r1$(( z$Y1P@59Ul4(t|_YApXWz#_4Q-Wxp_~zHnd8<+H1s*?4>J4TV%6((xRYxpVntdft&` zMeVL-L;c+K9O2Z=ocPL6M#St`CjXplo+>w}XhW*T!)_eBIQh>PaR7N+bls~G+F7Nm zxCid5+urw$>-lPUj`wwzB=ZLj33a>Rb7$9E2igA0Q-Ah$$A06}F%>4r3rUlt`XfG^ z1vM?K?su*!X7MSz@#`Dw7f}6d;nxMgJT=sl=s5mdJb5AM^KW^oFUg4_{Cnl|j5&ut zh9!uDHs{)TQx#7G-tMGo_rd-4P5S=&R$P6d!(iyTF=?O|zilf+V-b%JyMp}?r-SW& z*`eQE>G^sz#=o~~y%_3mw14Fdh69J?x$HV?f2^T+uGmxF;%5;Ld~_ndIKkJ~Jy{X! z*Y@Mjag*ftiJvh|bTMzfgVSDdv(VyK`G^BCv5WQxme)hSYT3WG8)tzprDHY>#CdfF zCyw{n2{@hNw_zybgBuoOXQD1Nh;! zY;WCxc>G6|zBvzkYcWjmDn8%;y}QTu-B5>ON+%XGU62pD=8kz@W3<==`8Uj}vp@1~ z$HniLB1$A@AxFr+M8-Cv|cLw*}pPEtrH4XfY&y6k(w$FCaK$!*A(C*c%PuRil zqSxKL{&LbSHz(53cK-ap)BL`f)e3}5g#lD|nK`sy zLvtU7r-0qE+@(LcWfGO*W>x zJ0ZUkCUf7hb9ufjzB3czZ@T_o&IowJOFHFrKlr|;^gON-#U8A)fO7_0FrV796FsV-UfVB>rt=qaUP^)P z)z&7f^1AS?g#2lBBDLrKsT|xEtdzIsd5xpIKI3^3Z!SBG%Fe6r}Ib)6LA zfRl_osB+{KILx75h6gw*om|2Je&m%VsG0u;@!X;UKE&2J5{Os6b(yQ=z#tRD5OsQQ3{60h4 zwjATBnf(6XmHc^4Ck^TMH+2ZFsw&(~*?;Lbe|F3k`d`3yc3fbL=d>84EdRR)^>y$-adsYyxZ2Fw)zI!z7q1v2FEm=*7+{KZf1vR_ ztCu~&rKAgq$;4NEeJIa9|D8*3N_97PGU2&Hf#QwsNBO>@MmU0b6{_l*jeLJWaNzbS z&@UT9n>V<>_L~L6%!;dFo{wV4!Tr#_p6)|awj(cG&-3y}e{l4+lpXqm{>Cd6;s13s zD?I_!4Yc-DN6{`meoBSo>Rjq4hOfy$Skv*jkqMZEMGszxwxGwOoxLNAMp5=&xa)otAOrF(M!!~|JQtQqGU%F^zI+dW0i90T_8}mBo zY*aYBmXDfZ>dyL&Yc?37e*L`Q+MoGv)idvye;yNAOmWrHK6C+Y{)Er!*_1Ch&w|w% zoRiGrU876<`d5zf|Ct{Lg>`PFI`?d6_lWra`h~Kgb)R?1G-=@Z zOcO1Sr(Xd5J@@7D2OPK6Rm(5gi*+`A-o*%v^J=)fC+M#~k-D~0$zuaWv&1iYnT^nFD-@YTRY&c--TLOHTiECBpj=EoDKZJ`~k zeC~ZyME{avzJzeFZqsdsGaJ8bhKC$qex2CIxl~v0oJ1_2x>khO2!0&tt~}{S0Kfm# zBt62hjWKsMK4jI1F%o8tfeqsMp|dySeHHckHbmf`hbS_#vI@DE9(LudJY59DWYj0esd5+3Ky;Oj_? z!|}X;75shd&|>#3`NKlAeMLl8h3j2_^K08`PU_L#gcg?}}zc=PM+aKC%k0IMHDM0UTGvTnIoa%dO z9Ph7Ws6SZDpUbp}_vO0!9P^RE!;nsZZ%v5L23V30&YULtcr3Aw{K3KV>W^@Llp9rJ7%-jJvwW7Uoe5%zsrV$|L0sD%kKxi-hkS@grA4TDG@H_>JpB78Hg5@)m_@` zD`Do*=gd*Wfn;NASc735;83WX-SYy}S$O8C&|=8*-7y9~5C>s8yNfqtdk?weFdKDi zTj*K?$bZ<~%a;a#-W6EAz4Vsx>57t4hR^!y?SzB3X4L-UZA9RM;eju|57sX`;<07? zK6F?4`IL%g^gDZ7Zp99Fw@#&Q9HcJEPDC8Q{JsZTSt1zk>K*?js2*@xz5A5YCGaWY zeopNr;B&k#T0Pqbc$W0zdPQKr!9d*C3w^jzX$bqCb=fB(ox zMtdTW(UwXoJ-HehilQ_m?U2%ptf>=XGA^b>7c=(0v_{BfoAMPw(H=5`LGC^U+W0E4VB%co*WJJ+8FzzfUbt z7b5n@Y^wvi$|f|7#`!3pyY}zjjk?Nb*VMK6dQfJtC)($^b%ZhITdi!~FvhdFQJt)A zsrEg~_%v+)HnJ}_g!0VEkMOGNMLOV!EBU#|gxy#6V*%rn_VfIF&p3E4byBDACY@d! zjIwPsL>#~{o2ci{ixB6?&}(qcHwtE;dq+>!hQ(X62lfJd}BOC|2)B8v4h`)mV zx1aS?mY=PkZHW&O9fdbdgX@<84rI$LNA>A{66%7Z;LOx>z^C_H{jQ#bIDeb?=H@=Y zp@Zy#i+J99>6kHvi%@@g4pX;7KaV>7XAJy1=Zeu~f0#cfoV>~WBQDQ8S&XqejYPtPP`%Q!7-Zs>`S~X8N^xN5I8|STP}kg*Q3HU@i~s#1k+GF|HNQr>KSHri%QcNEhl)Pg0Xax`sme;0}KTn5~J@b87J@)$MN&P|p|Mk22 zq=#XiGPC=Y4e{GRn3o^v*A)&pfcXY%&(z_(-<#`0ex3s!k~eN!b`tcK>ipFC`R2e+ za{Fd)1YY==Y&w_iGoilVq%GogTXeD->agsmWBxE4YLB|b;(6MAKl8KT)k+Tetno-6 z!l#RXaN%W4b_9-=gqy`V3cP7Y&2~Mbj2!HS`s{S3VYjIH>E1 z{Z!G?41S6=_d8Y({?XN$7g7%S{$WUsY!19{taf=U!@=)i8S|0Ho*c88g83%ZZ6t|0 z+-u&km#psJ;wtDmPW*ZA!bOxxJ9$52tL;~=J z_}M=Xy+QvNMD2QE40vxXQc;&ieP&~#^@{nqQu+eLUniZ$HPS+fzk=L&9+<=2$SGS9 zZ^1cu$cH_fjL6=6{@l+|ww%`bgH$QeC0KX6FPhjgJ7)|X%j~n-@teh$%e%#Rv!J>}2=~+4u_u=2S2M~x zJq7an1bNDT^?Q}@d+l*n{C8o4wh`+c2q`O|uBmH>7j_zxzl~7Uo_+Tx^ zUL3?;e0dacFe>?>z%;cEbk>Nyhg6Xdst>)ZX#l=*8L8vW=C7L>er7oMZ(YV(%qwTD z0}Bx!i)8$anZ1{br4h%@+6A4=-jK%^2(OP)g{=QmT0s4Iff>VzmxKx7ceOFut2LSB zrHDY6@Sr}1?hDRy95rC}U&KLEW4_0UZO1{UuC6^0hUe4kl=+^+^)}nG#mox8za>}t z1#f`7%R3rcwgh?g!>;o-SZA$YZ6AyFWrTeH#r)J)?KT^qd0Jgeb`FXr|33GmeD883 zdp=qaFGL&gc=%51MbkCteqK%{oKG;}X2wnu{VgskP}sh57U_e^x7kRrXUi|7#_a)oB$#G>U4?w5xJG;d)Q#5pHQq*u*MV)yQdO82$1c8Ld2(~d zIp){HLpBrcl;=_YNb~!wx7v`MOKr(-*M{=CR*m>z-#F3>5tF$-`Ww!jaqGo_i-=`0 z;y}aeU(Ktz^?<{Po3?LlL4HqfopS~3m>8_nRgQM<>U$^;ar#~L)f(W7xEHfvo(I^i zX8L#v*5B5pvNHI->`B8;#_QKURFXYsczv*RHr1>1j&vW#`F)o2`1$HRziE8tnl|}W zW-{G}+!W#d+Ncvzj1P|Aa&bHcewtSrp;TGbTJ&tqVb2qo_vzzG3gG=_g`Mw{ffr;$ zb~=Y(-5Q%=VuL#OqK?Ek(hBjCVJPTKi0@YHd+ zMKex6?A%=KB3=kQc0=DI68B+GYifDVaPZ9a z^bGXpY=h0?;Pdc5aScD2-=YWI5n`SHrbX-TPV25De;HelpKD*6F&;aiNOs6ZwfS)zjSc~Vmm2SGt+?)R~6ggi2;eSG7xIh=p>&+O?5 z;9W15wz|Dl@cR}H=i-r9#oB_sF^?QR1x-dAm#KG3F@5m(RR_btmup_yi-W|}<(Y_sx}M!P zids>}nD?0|-3+f!g1-7)MLQ2{8BmV)Tpr#hALAe9ov<3>Q0p}6@xh@5Rm{(=RU62jHg!JUo}|ai`27VA@%vO7e53vJ_Va!3CVqZs(+pu< z!5SsPf&Sw!PKN=nCi5OS387EvV2`N{IUV&xs?m#K$}giM!;#t|Qg!oFu1h*zo{tN)ucSpBf^7)>~k zk|KN?G!afF4Isa-lotAr8hBVbTvVWY|Fj9>AYS&TwPMzF$osiF>g^i<2YYsxM4tdV z*F2W+&c*nD7$+5vyyfLScp>8BnArM#kN!z zVi!{0z`i~Vw;EH0%>H00(&1aph%YWVP+b$V=7bqybsjOjIEW439ZULPaCG#JdZ?cv z8VgD6(?D18I|LdQJGfq}P|4^Xrn2-7H`Q`E|xE}-m98+Jc7aKJ7jF8uQEUjgk zpX2wwVD)|ZpenL+XBv$go{A>_ZV8}zoa9aSV?3M3wIt~@6>GYmAI?l4RjhE~&K~`8 z7wZDZC_BT0xR1bx1)JK0kmu^LZWE7#j!D%ss4IlJE2pfrED7(!-eWNC3oO28Nv<{e za}gIX9{H>wEb<4_Baa&Hu-`8YEn;!~oD)wtILz+@K2VD4SGpM8hv#7O?^zZ8duoJ_ zHZ{U^C+w@Lzxs21hNxirl4=fd0Djso{^lCsVCpWP3y6cMQi}(jfP5P8FzZb&=$rmc zvcYjx@V#*fxeGD=!g^0b&^gK1KW0f|KOT4U<#XmA;l>LrkKDSqG5>@}uMh&hi#}?E zQ+}QCBY(Zu;NwsG04DFSV&4mY<3xR!)I8yV6HmfluIt5tbz+SL;sBn1Zks-^9_$*r$E?oaz;G7}iwSntvSpbbtEb z;5@)-N@D!Qm5^uQSC0(yK|WY$dEdYse%;ieQyS}S+rjdD(y5E&$EnFexIY+yHY5KYb*KDk=I5osvKhv|75wwO)%+?xv`<*_H57S3Fn@;? z=G!kxxe54w*Cpfc45yCE@3Oe||69QFTsJS4biqhx%CEKjIW~1#q-W0X&zlp6kls;M zqwnp}AY5x|av9^c-`2P*Do}JA?~FKj>+BM*Sa=okdT5U3+ABCdH{!ABam=@huqS!I zx9TCHYAf+|*nS5e$Ul|4WBm-k|2?JGbYu|UX>UcIGdo@NDXmw(T}O4O$${+6^C7;^ z^&vZr_<5amhQwb}`SmNa=Tbb%T)CCqDUH8(_2NM4YU)bF0j$rj7<&oF40WW%*ZB7D+fT3Z@%-$J<$AM&rtjJP&;4*PY(<6B>(!rO^0+YN72? z4Dk>OuLdO$v0Q=%BRQ_`X`a`e2O3$uD>#+Mlrt6075DPB!>o^>Xky5vhdHOhlz;t8wr*4dx>GM8?A>S4)*=ULNORxWf3BY$1 z-h0KrF@Bw`b&uu8+lK`#t`7SXDDG(vlsD#cDBojd5}*Ar;o!cZ<$q7-ufVtg{GLj( z!F1x~VV1%blWoVQDfSbjm}f6Q9F*CNTl>=maiDkgoYhtEpXJj0+A_p}t^bpK;I~q( zDQz(r?|aKzeL&ZAWh@QWNB{2(zA1zHrqy~vJJVCohF39Ozm}Oq{j693UH<~lNA@#? zfP2`I&7SNj39@-jIjw@VK3oNdzQ zIrHC?s*8-TmhZ_R9(bL=LEH=szC{U{PH0|2y#II}<<}4+!bgWE)row6;@^(}ob~MK zKM)774%4f3-yyIw_v@^|)u3MrUxaxc0e{~Ap>1Cbb>Zj3JulZm-bt*xwRjoYcdFw9 z+s|v3zp*;tBPdA6?kmHALexE0PnSs+2(ez=Y*7Y; z54y|7G*&eR`x)zFioRG6s>j@$#CRb?MHcN3U%UAk;{&^uLb`797KYdUPhzPab?|<4 zb))>xb0*z#Vlu@&+nL>;^C^CQjkddRvh&b;`_A;@K&NAQ<5u7Uh_i*x!#Z=o->Z>| zS3%F*^nK^ih&p9bT*5K%x9OB^?FZ+pdoO zZL`VjVROg*w0f*4~x!NQ~bX;|;(6vz{dJ!$D(;%Ulb> z@p((`^ziJRU*`7{WDVV9Pjx{=IdmZ6;MvNLeXk)7GQ?jUfxc@<%e~-yc;D-da=;42 zLq$I~Uvu!IYRZgBm}iKItk9by_u~VMa1%+?VIQY9Lp`?c5 zY_p7T`Zt_->&$ZEfj=R{`>y=FkMC3H{c&ETC(HxL&l>}UolV;emNPz3U%cb{Vc^w7 zQ`ZeRul|#-TI!)Hc&_{NZd)l4t=HUHvKp1Xm{+K z7hhPu44c}@>ifqpdBj_jSCJn(IN}9G8G6mvC4Xw`65o1i5WXLcX7?GsT884_@zLz; zF$diPtNRJ`>kk+bAIzF|z~M5)+ic;C`PV?-+N{0#_Aum|@}v5a$*&R*}u!TIwYa)<+{Uy)*OE}O%=#Kkg;8{l=w zH7EHd@U#8Y`OZh7z6taPcoagu$?A5T#`CF*`V9>BN4{_vx_%Pkp**Bj9_k5fq$YUA z@_l{Z8j5rDCgQI<5mbNo%%}e5>Ri$T`4&R>XJGhX;#t9Tmaif=?8*OTaGv6;yL(pv z4mk0P%lGs_Kd#q1S6^KP$94Ww+;I@>)I2LS0{8J~Z+xhlfPVBn=@E|gYV*Zm)1j`Z zoZfAsfjaThJn1jYFAZU>45!2F^VnA!-3oNDyFYY&uwIOemoXOej6Xg;jov@ z8-Cr*ZVTcIC28{CHAk|q)tmeZ>jt`yr#-c}*NcNWMt)yY0SC|@zK@=L1$0V$k6jGn zVZ@{bVNIyBc6d!Xg0C6-(h8BUhBe$KLI4=Z7k7z8S=pBv@-c_+ekUje(%)}p?Ij~X-5#k*k~5yu%$+HzBTMeoG` z4xs9Mym-G9{Nxnk`L7!IYIxT3U8R7>RTX3Bmw=yJ*7xnd7VJsL=O?+(=)K`hfA(DqN-oGZ+7owdieZEB_zx^?3^#{K5ns`@(aPY@df%!S6=P}2^ z?O8)Q<^BeW?__>`qq!T^D_ee^<+jQ6cdRzmkA7Cf6RQ0F;YVh23*Q&*iv=8Lcx8>$ zcwYi|Q{4=$3*ayRZNu&Z5N}(t2U#V6kB_haU0w}(Yx#`(72&80a_+2V=ZHNSeN6-E zMO&Rf&fWaJiMry1U$p@o zTnB~*{#A}R>ol_Jc|XD4fCoQr0S+QKzfkqFbyYdpE9G7~UWdB1-6rr(Dd^mBJFZMA z0Q-cxKc_}vT`2A_@MF5*=RqCRH#Rn5a)6&Qo0zbN45#<|Rx@1wC|bwzIw8o1aNzcb zo`1r+e3UmTO*}4d+Y!GyDbj0&Hp6|_^2uEN$Ej02yLxdDo3-Z);sD})!^!a~@abFc zS!?SdpCTL{%QizEsm=9zcd!bEiPCDm7XnXsjk~584gL;aCma?4d@SzfBRY}UtG!nN z`M7aJ+ango&n-2S&kNU4-URrPpELRM=e@f5ea0lnK4%4rf4DNQ6Xl36EI^lCS^WfY z0QqCu@Cu(N>7PsYse$;%?lIWCAM}aDd$l_y;6L3!r_HO74>BrWF+Lc2Qr{eT_qeCD zCgS^J>9uZFpNhEqOz*8flf(Q}UB8<0TyZ+#VAKS{Z@Va~!(I|EX&swXH|?{Z+Ly&c zM8NmAF9&j+krQph`}G$H6nA_>9Egb6`i3^uLOzK$r)OU`hjR@^W?wx3c0OtT7+ipU zv)mjWiS;XUX|NyaSdEX%w2^P;`t2tid<%WR`18$|i%iGH`fOx*c4y6U!lgTZzK!@o zssjNg#A63lDF59o2?wuSiMJ}fg=Lb`Z(jEF;$W1*$S%YIY?qxd<---o7x4hQ1RPgX zd~;_}GvGKoaZ`0Eytb9KPsIK_dH9z}>^u(JNc#ZP1yKV_b?|#ie_t!Get|1~$att> zc`elgr7+4H34f{w_m;8x926Nqy89@PNU={~AvBg}L-s@cvBJ2Nu{X)>)x+{nSn168QUy_syw{pE>&plwTtKNl%7oQJpX};Fd`B zl|~%kexH^GI6r+*=g?C%kY`iItyo(O{nf&*;Mx1JUl7>+w-WNItzOhF0{tlGAI|30 zFK;`f3I2EfzE$@l%X`Ty_nH6vr)0DK&^Tlr@zGCyU+oW;gi8;O{F*tIKCf1yc&yi_ zJgYFKx?o@;^qO1Oe8;B0;QsZS15qD%r8y1T@v|Cm7@Pi9zY+5MLY~rYqA%-pk)-dEdT*`UUlzBL@_d%b!{nsBFw2S=@Sb+2Pq!8$M}79do^S|+L?b z@UG&XD|1@Fzso%nN0h+p>0{q(im)G8|IaHN?HxS7BY?$U#7v_K@KF)6QxW+>e4|e* z!)LQ;t&r)fYl)Qa_o4`=f4q6#ci~V^G`{8MQBKsOcs%3Bo1~nHmlK`2udPGxVc!Vr zZJw?gvvTq=sAM|^6`vryr=Y?i5VE>}V7da8gQ@57xG-kY2G+qn! zt#9>*w~Ti(r?jy;RWM)|vorSBTFNUm1Il}W3gNIrjQqbuhU`n1V|CA_MuzSyWfA;&bs>8v zI1*opb5yso?CJf*v&i3pp2E55OY&t^dvPGLdDrDFtS+pLY?Nz&en$Ld!upF4=a*OP zcDF!2MSTzbSOk8)^C|sZ5!Qo)LqCLJUS&U$48%S{#Jqh1>cv*4tBMdGI8ego9;^SC z%WKJRweb{p34ULDAO75(A`{BL=E=lo4qC()#{Bu1>iwvmw2tK7Pd^!tIDq}f{tS=Y z19r@d`aYo+{G^`I?T!2I-zc2?en0SlM89cYmgDQMy)_ZYSM5^MrhtCnJX3tMFwZ0= zg>^AM9t>||d^LT_PFCM%I<2GY-!LJ2AfF%}+1W!)3D3jE6F$QEy7gIu>^q=OI5=w{ zoVMA=^X-xTg3qdxMq)A`g6yJ2f{@FRs9M#ByN_n`iaIRv}9p=BT@70V4+~U_zoQp$=M*}^`&KQ1Q@*&P- zr?D>C_isAk<%=Qv_pMu|2+fWQX60-4;^3C`a2Lb@F z93*YLPzd+&WXJ*KVze(@R4NqtAY{+evT6@~3<->A$552_I7(DZknWkzOdUqkiGcT$Z;Y>8`^2_vS4{9KiY-qlub(0k7ef z>t`V!v^gGe&Ievndc%!A0Qr^~kd=>p?Z)Sp|3!dqu-Urm!DPfk;M^iD#4lG?|Aygo zVoe+C3p=|rSYH3}TuC?xUqCv>&4u-A>W8e!-uelY|8w~L_u+gw_3*+=3GY#-~h&HBL?qnfcmAD+*N(Sys0ti`*VpK zRnQc#)mmKud1pMT+Nv1sys&?42;!jYP*@=72Utk{eJtp;v|1NV2|u@4x$ZX8SJDb~ zLN*TcB8uvj`#i$!k6DD*bW3_aT$k+ck|7>5FeD!9n9Bdn38k+)9YGwxwBx#dm3v{F zrNMXJ@>+=hk28j`d0?kZ)OzOwnD36KEuzf99J4->k!aVLuwX;P!O_=`w2*hp10`Rx z-@W&yjp49o$acnC2`|@DALDIIb{32m!uO$r>qGfh`;7Vq^|!QNp7&om@BOYQ;b6Ha z*Ztp%J6Xy1Teor@svKZ>3_ z=np)WR;XsKhWWNBT0?>HY)r>Z##dVBYKRZ+Eu#7g`?$h=C5I^ZP~Ld)=U|%feFDr| zMV>B7;&qrGzfXekJWk@{+k@b2XL6)x_4Grz>k$GLz;2jvq;uPy&J$+ zNeODmyW-g)N=zU8v$@6m_RoyRf$|E% z;qD-^zyCC*&s35v2-hQ~6Mp~WpDRt)79zgNY{Uo$<+7a2GCu>W|;c2(YibYNcT$;`G$z@9a5Pg^Y|g%d=U_I$6A> zB_FW(3$nH|KW2LH&vOUPr#u_$Ms-V{pD*)_pRe{xi+JFzCGjns6VLF{f2OcoQ`w-O z^Z>!S_31-MC&o@lIC>U%Gcr-^bQ9ErU-MQs>5LSo`J#Nm-ISRmc&K0s%H<&%1#Wfs;HC$~u@#h?Vo`#Get8dO%CKDdQMEJa#O#GXt zMm#%OnXhk}+;@pOH%t3o99$keWdh;=)_b&V4tSxsHA6$WNwgs7~2L zQofy;M>tLA*R7SSu)ItjY)1Ka+m85IeKzIUPDgJ3!V4b|2k=<_nX$`Wz-dlHL_O*Q zFEHYS%fil| zF&H37J26oNaRB@J>8m_F4SrgE?D_j9;IWv8{xN$X-f{a{pBDm-AFZ3{8i+W!D*3}7 zaO~{Vv`Q84WB;-w1<1eTF1d}(EH9j*YFK`;GvlwA*gD2%U0ev+ zmtaTvFYCpzKH`Zh#a+gp^h<{x{avm}b)ksYX?E7an@UXR?XM?fx-pdBS0vV&a1+U&tFAeddwao0 zXR+%5!4l!QPdJVQ`+=+e>2nJ5WPR}VG0hO?>2DKdvH=egD;4_{f!+O|RxS6h0-0sB zdqjXa@VxbTSryE)3&+Z-E@WK1&hp{@^BQ(N-+duuPuDc^Z;%t^`5{xn>!~T^?|dzW z7jA_G;o8KSzW39VyFPnax#z-O9F+X`L5Mg2Kd$Nb@EYWqdgYVya`0ncm6yq=4~kSf zFYE^XZ%bPQ&vl_Le04WweXeD~5Vp@m__&iJvHm8{>sA6jfq5v;ud_HWO0FYZRxhWz zupb7Ypbtt`^AKX%#jSE-I-=Ivo<9GrPj$HOSi>n6R@^4Z#rswQ4q&x`vvwfv zi)Q^Vb5I@dt@O@wn|C7bj#}~?&yQ#|khKT_eb9HDFf$VSGVQUiw876kyQ52q4@Stf zvwq=O&I2Lpmt$K}DbF7!5`Ru~r97MFOt{syVR#AB)ghc1Yf}FeAP_QqnDFO`X-nbvCw7634R-vlT7>zfv8WK|eRqDl zY#M<6PmSP)WBr$(EdiLp6X86LYY*Rc58=f;p7nh})egS;sIIWy=!Y^|yON?Eh} zOVhI;yll26-Sf^yczT(&Z|CA(9K5tCKZrPh@ovo-x%fP+&)xX#C%_)tv*r74Kz#Fz z(?;zA-Wt+R_9x?m7t@T`e2IF6i9uk0P|(Hw%7FK{OdAzt;)5qw*!48_(Z2RJlOqTZ z^A=HEmF3UJ^qNGtR!}3Hs@yeW;|UJK={~C`Q2u#naw9c6UE%--Fh6R~thbq9XUN^t znswmc?y0i{JE|b>lJAZ#MP0CUTHqqg`z4(xB0+zJ_ZYp_Ks-BLxkvh-xcCXnkK;`b zSRXUu<3`3mSv&aopX;n>6FKqes>Q>Y4 z0RnFC`8LFXcktPi0qZ@IY=zQ#@GSI81w=b)>0eNQe^;Ogk@TcAa zd*u?WuTK?iy^$Br7|jV{^(!u(`0KcXGQqNh~LcAaDkRj!JtvBO~ ziZB;?{{g@MXX1fK2UzqI39IEC1e-pgEm*OLPj={SsyJd(USxrU&PaB;E6R9OD(Q+3I9((>Shsc>Iur^8*BzM0edp z9Mttx@0}+&0^=+e5|L%iVBaM1zHJ#$SDQtWyo#!zK3Zv9nUB1cx-BjM@%vRFRgUTH zX`>ZU|29_1*R%K)EvY5{eB{UDv-xw}xBFARpX7DT0xQzlYbVibIgbOkIV>N254&+2 zk9Al6S<{Py_nOD|BMxBpi0jZfjd1-xW53!R0$xqoJ*ye(g4&B273ru44b6@4`F`4x z`~5wU|CRQH2Z275Ept3&xzUPL@Zbg4>RSClR z>^5nS!`XAY_PMVk(Y{@kJJkRuty|XW=$NBlQ}tR|-I+Q5A>$$Ao^^!Bf_3EQQe9S$ zYlZxCq(pvy6i+1vPwrZ`8T+51!)e^PMvdyk@3BJnO=ryY9}N&lL~1l64mk1IkGjT` z0>2-&DZSSWb>F(;&(Uq56Q9o*xq{)~e%CWM;M1SaZteY93U{sp};{(vK($|3xU^&90+t*6~4?86+p0R#mO#7!Tz*`b|oI?qG-Xk*QyesRQw3hD&2^lqgZ0d+4ALgR}Qc4a7usj-abr{xH)unEVEYCiytYr0ZW4~JFmyh+) z%%1aA(ab;Ii)lX;<5*9^Z|(%DUl*ry*mtTpI#C=}IkCD@I(EL$^FywpTxKs0G}LEo zCw(w$uFH<=VBf&1=Rvq`c+DuC_cu^qsp({F0KA^>m*s`{;FkQ`?2I_L>XjA5@ERdI z81JXmdbcwCJ2+5X;~eAveGmD*F+Y^zxg~<~#?X!G)>}u4_ec}Mt(z+OGg83vRd$;V z@!dLG&i#CyF5&>;-CFd?ZwIRjFY=zc0}hm`3kF41 zfjKuleUt$w74J`a>#(}@TB?P?t=g8a3yLe*bz6?FBOF}h=Nak!GGl#Y+yJuwQh&nf z(BZ^Wg`>&uk4KZeDk{QlW7^K_8Z}U$xaiJ(!~x9v%vku}KFAkI)!|YtzysGdXPrud zx@v2;ARGIIWZ!G@>|7gzwsQffbLY-_Dh7BlnE5bR5pf*1YuZ_c12_L#s`Fbs84i9H zJ5l}&;P=%X!jHQ&@auC&4&3yB-xWcK1Fy7OYS+$R z13OcG)Y;~MUitm2 z{>%Ha82bg_pMaLH_#8RqVMl5m zmGbPqvV9%sHElZK!AzIzzO60PnP?xaeXth?_hJqWM;wT^-rlWNjq{NlmZty70De-i z+xHLq1r^JUzhbIj{^HNmktK-N@^?Ee(9SPo%7_mdj{e4YcV0ZLj6BgEH|Y??S&Z~e z@^u%w{=PtVA3;Gw$*MrK>XaHM)j|J6#2JRnoC@jvK_|{fIs`ZOY#LC z*m(ZewmRT}k0KSV(ZEaVW{4kU`e2!Ppgq_zP-*zcDAYAFiXR4JU0CpV70vfL9aznD zUuyV6hBt{gf8tHCwNzK7`2DJ3AA443FYx;d=qOQN1J9YUPww*2qx<~H&$ll#?INw%zjE zzBkd2v%hsN0ez6xd2U4s@>O|py&>?0Y^2r6Ak@3g+8;i!y!Jn*jQ5e9t&_)i^XAlg z%4>ZA^?|!RiBD5z@O)s(^8vp;f1?J+{5#2*c-Wfc7A(?PxnpX7d$ z@qu2{L*lFTo-A+9sjVYE;0BWa)c(@^&lownkM)v-PZ?334_@&Gw$uIty5A}k|wI!4}d6P~ zJo5cA{2k^=-CDo__}d_UV-EAv&8egl8{P(T7~hx+kqp0&3_LmXyAqt^3UyrF>k~g; zIs20t`+JNX@q&QI_X}s?zp$?@mQ}qt5K9iyK^(w5v}OIxaNR=oiQDUO-R-L2@qh!! zd$ZDd8?T53nyQbBkcSb^9qlj`ZA{`hqro z94USd?^g@LM}jozg;o5yF|VztPJiIn_j}rK-K#|xBMyL%GG?Z`0zajQly1Utq}riN zx~u>fZJ`~T+YYwETsa+QBiDsBf7f{>*%2UYjnW>;Ng-j@H0i>&WouoWGiX1 zep@>;fpk@yK3)HSG2s;UMZ@oN_QQ!^V?Wcnw&cNt=Vm1#)-c(^&A(m>qftdB7Pd~O?}QG{yfi6L&Eppal{MO*2Dvr{JQPY zGlg%qHLh;C(u)J1yqw&PfCE^s;5JqM3ibm(uNtoaKGH1T0(AlIzx2q^1z>k=M|lL( ziS|Vo#$)_b`yLKrc%50*&hp&)s517yL7k)0S-#|rswX?w%pg1O`0;f?h4`ySlypv} z9A6K{(EF#y^EesHaGtHCD%9w?6o@#0aA+iXapq+E@u&sVrG|-_e0WsCrlU*NG@Jae4u1a zd^DMV?kLo!`gMZeXXcnP#tC)?(jiGL#2=E^|96&Iyphy$okYd0;8 z27YaCZP#mo*Rlgj2iUoiq8E-7VScHnJ{=4FWODG^>jCKJo>>#0VI4?oile^KWBgX8 zpZ*r}ed8#9s#iz<_gsS?|6I+_qdUl-<2piyboqOJe^s$r^zRxSxm#t0TJvxB;$Zwu zS82onJik4*cGVT^2mYFJDG=X1e;)n5fq31WzAysyO;kV_!$FG39aGe~61NWoVZY;b zbq`w~)Ze9)^uhT7g;c-H>xn;)@z3-1yvZ(@kIL#t_PI*NTP^&4wGkY>e@;O8m0(Ww zFJ_8RM}8Ws3(zN89v|du4$td`i2)8k&m8qM4}(0L|N3ERDe~F4XL6P>PB$Xpm?G;J zeCLks2e@hXoD@Oh2UfGrGMo*a_YmtvoNSyeyN+f?636)L6u&MwVlL^|r*;?@oAv>E zgpx8@LI0s_ElPtroDaP22q0 zGVoiy?3sf_Sl7ab6d1$%9@igSVdF?MrrrF6`D`?Qg(Bj-_O3}jv*Sa1Er_>q>T6==uR1nqmvoW2a!uyohUj!nf0&gr@YCom9CU`@cbFZDdADeaCTp5W31@? zagLOCcV-EL)?7G(IuQtZ)a&bkpkvw%M?>ETd|I3~G8XKvla?wj#k%x9YTGRE@1McC z@=>T?d=IKg;(e8;M(UWO{y6uymeo?Ou2D=!S#MZHIF#Yz4}BT(N5xqFd6$M9 z<5zCLB*Li(uY0sDiHDUfI8V*Cj@ZFsf=h?Xf1*w-vpM)re#8#ot8s;M$F)Gc-TQMx z%*ra*1f+5Oe%3dxdsk@*pAW1IZ(!pG7E8STBA@@OidAHJwl?4h^UGBq!hwYQLc(RP zH(mD>zkhxCbi(Hj1LCPLejl~0k7gLBN4soDKcvYBOWx1g82P#v2l-}pwul2*e|OR< z{u#QT3APZ`xzo+`TrrF;+npQ?4RMrVI6_3BWeB6q`7$iX|*~FIV`s# zmHhsn<9)b4dPe2gH$uHl6*)8yaA4{BCb159sbtHVLfqf=d+n(#TpyCWyJVaz;5Xsv z=fSLRRA~y4N1R@%_NQ^Ap%1UII8FyXV0Jx<=UBWK#Sl&p1`r;d{g`fO)SL(K1AQ=u z-(NLq67>s%`16EpX}q?5^Bk_vZ~H(k9Wgv4kOV#O+ip`h&)@{pQ)Tn+O}_@I?6 zZ`MCs$8=Yna5>X6u(=fBHee#dLwTqZ@fVy6kGiPDFqq*zd3dmJ+puwy|9cp~y=AA|EO&htX*h0K97S5RD^@$1IN@$2jo9LS%}DuiEK{(KIYhsNq} zsvF_^vy0HtZDA>mD?3-tO!o!8TwP_DPzU_KH&|$p4E^ldu@ak0!OvdBVojd#c}tK| zpD66Rg73~BfjnV$)KQ1onY`l$yIu@O`ao}PG~-kAnMuT}wO*uK7xR5todff?!89Wd zaqhfZjr2~wfN&(7L40RyBOGNQQTuq7n85H~IU7fUX}uN$xdOOvQP6i6GuA~hM;$n4wJ>UGN7YB9+^9Lagni@x} zePPfDIx6Jw#CZpRSLIxxp-l@M8t!BLbWMw_^0q`x$w|nkPH;7N+=T$lK^Xg{llV88jB>mvRkB?4XNI00k zK&T$&Z66PO0QI#rw`2|I0zLIX@pVwY!t|mZZAPAY{$y1t@PzZ~jF~=Ax5g{p_#Vmp zxyfiWzVEZvQV0Dko~wL^`NJJ>0CuB7`LfKK48myq;NY4%cKwD#eq7m@&wJOEls8|3883?%d(q!FrW3yR^5;!L9zs2bN3)*n zcUnJta48Y*!w?6so_*qt+AYAR65EDE;CQ0g;7v)}AfHTwH-_SVIkK%yrnvq#VfoOv zk${u3vz2qlA`ZeU^>h%gt>rzfEWg#{AF}v*Z&}N5>fS#Q^DaAE%!%@Ru^H=w+U<22 zUW)XFlAR9vRNwBKQXW1sBOKV92*30ns&BDfOmJ_YP9u#YotdDYe$ZT2*Ulp0c{B8d zK0Tubrvr~w{(c;X;|JILf8BBie6CJkkrM#p9^nPU3}n#me{;+fp?<)G6v^GX3H4zAh6(B==;yDl3JXC$ zWd9lN&E_9;P8mq+S0v}~gU@m-zr1Fvk^L+A{dPx8;m-O+2Y)FS6XbrhyMs93#GQPrHykzRQVzRpzk>6T zv|=?EZ3mo=Txq!&#}B>?@!jYJb}x^%PYyskBa8;J`Ra~Y6PQli8+pAR^CfHF)f$FB z)7=7AzjisSV16Baiq|ur`E@PQ*2H5kMlye=RJxPDqbR>_4|Nq9Zd?6Udt@&T&OV&~ zA{lT1%dPFJu3kfZFg*+Q$!jh0`JH|W`^HQS!OmS!FSNvRrAx5RR;niYB41_q%m@NJ zi@PQKQ)YbN%PAvYsFbK*W&NVc2mZP9pg78(J37>-ZS$l4?1KmChj;w^t~fRN-WOXQ zKhA`QB+y}T`gW)fV0^Csq(@m$m!@-nEpQxZ%v#ZtJHYO`YUydEc>M{h9xZ~p(K!6s z)azf_`cZ@D{hl(M?hzrKcy9g{(k~ZdDgP(&^X9VMg@F4qo2mTz zCJja6r?qB;>lJon?`7Wq+hM-&A<2{b?}`c3o$q!a4h#&|i~E-xH=h%`V6ESQW{7wH zB&`ZOuWwpuyesw#m+F0`e4roeR?rG(edCjlwTke0kI`FcHlFzTa^D7wtKQvk>K6`t zUc;_G={W7%Qr>SV^P>Rp0D0S$vBr_-5&%+yerxfNRLDyVWsg{j6jr#Ya82MFw*ed@j@OPM; zE_=S98>{F*ak(DcIJ<-_Z|?B-bkVAzg0oENx=CBu{TagW>w8GUTN13^O3yL>}8fc^98?Ny|cV`eKh0;-Ecltp3+*+y`Uu%u|!kfIbxO$Vs^Yb;l7p@S0;)de~uua<%)2(};E-l}!+YfbO znV{BWH^lkx_5b?e{utp>LsD^{w2y;6?2SY`RF9dU2l>_>mvcrNKNp6)f6jjYV8fP4pD=}~{d?~AZej&OX!jCiZSiu$p2*20rJb`=a( z8YCEgVLICfBRQn@W<$U!bFYQz?ejcwKGK0&*|_W~afK0Lh3dF2QzP=nd4J$5kv@+t z**w+RTm4iZ&y4dNpDG}Ze|lfKj(Id*Kc94B!pB6$t7a$sSY0ZvU&`uL2keUj_Z$Al z!G_`E^b!|V5B6H$cA3`nq{K zp5MA(>@b`!1>*_zuOss?zEcleV)ND$V>5#RCvk>;KLQaaEsgqP%;8ny<6|Ynb656< z8|?ZQ#p{G%Kg_h^&xMd&MZECeQpz(CU*i2#Yr@M)OR5w7-6=0$c~f1}_vYR`Ow7P> zWmxb2YT3#?RmojjOgdn`GR!~e*sv`J#}8EBy*L2ZxBhhfVmQ<*`_r|FZ2dyQu``oE zuh;fh$YApmbv+-yVEKG>)dS-F<69X1f@dUAd`B-J`?k-bI&uDg^JPUT?h85MscZbY zZE-v5Gc;!ijh0OnRG9+5_G^^F@xM2vwZ#Hl3_}WtaVNX@X6Ps1{ zh9M3DyQB&Op|1IlcF@522j51oC|8B}k6tE!UIFy5!NZX%Ey!1^MOgMJAeVcK<=dkpwSi4eEO2iL$OsFo%Sdjf2Ex3H`+PC3eg9PvL?GzCQw!Zy!I^-(MbI$oMe%`Mc z@@&-pF7-iUsucR8-uY=Q+y$YIx*#ZzX@ZiAP!CUb}L}NaJqk=n;iK2 zkcj-SbR||7Vry_N zfQc!?H@9Ru)nPe)UTdTq)#H$PLeZ$FpKx6p>>Kb%?NfFYC*D47-QilummOJ3!}kGx zM~Zye&DOExYZtS52btS#BhgO#tOi5WiJ3Eu*u3?$&nsTDc&a!)VAnsmeFx*ERGU?F z{a^ez_jLYTOq+>h?|5mdXFdjWAI(#V2l6=Ll~5CI_?>{gYHJ1wQvdtK);kAvrry?i zanAhfB6rbgx0;~;o;E&VVLs%U?gtLW>wpJ#)c7ujJnHo8dd1eYbuUd@iav-77O%coccYo;eho4at>58FN9 z=ZT(mf${-pCSuL(uK18o}f zy^F!#pf#7uLNU+Ab#7sNpmMikJl0)qu#XbciR;zxQocCwedCF>miga;-5alSpjZ?!mo4oWO1oa!=F1^EEF5#J9x5eExzm!{Mre`?2`$cMW0HoH0W z0OXUs-#3}%pbI(<)lOjJ2OGO*8ZoX*{^%ao+jYS{zq%K<9;}6WMz*Rf{wYNwr^?(@I+oxRlPsfuQoH0aX5}7{cVN< z`uW6fpW6(lMujyDrzxXWGyj$*&!awe$A5HQkQYZdwjR&yQySnXg!ol>j}$N*g_lod z_z!um$L$PtKl(SQ7Y72Fk0OWz;M-#J4-Js_-!^|8SB-o$Gp{c`XR00?A72dhD{4xK zQ8Cv4Wfw0l1OK-ht?&!Pd0cHfOhOz1wN^ttznshbc7u>Pa()R);{Usa&>BGd=z;{|O6 zkY|Ix*Gxk`7~fxP%L>48^4WxbZ2X|%@%<^-@3h9X&^p(Sk#CuQj(4zm3GJFgcQOB2 z)W(y)q-@B}PDip+Y#QNXiYnEG?r}_CBzH_9zDncyV4N8@r*6R0O*MlA=j)a;eGo5u z?qPGD(0o+?i*=1YP2k6aM{Zri_-}72+)@a7*JH^&)li6kU+bnkf9Tg_jaSExN57gr zAIa*1wf2uYm`6WrM%6G~Vmu~-;(2x%y?*5PpAF&nqYdP7nrF}aIApn_5cMPX!k%=E zr>Su5R^9n25xqFbZ%;e29&iBrD@zRsxB_^!EmN9Y13J)im``mB^fea#KW^Z%xp=y8aqH(pgym zTxQrT@^j;(N~~vT>um@RE&M!{lf-A)&U1t*1)56OFBFG6`Yl!61NnY#e703B=oH&N zGX09ck4vtcmN)=>w6VgVPb}I!-|rb)_dc@JpPiH2bZD0r@}0=e2k%%uoj%$o1idRe z>&Z^WSD6piamLOmmVM7z zTa)Qs-_qGa%+ny?*F{JB4U%8gi-SwU%fb)`vSl&3`<`3@y=5zZ*uED0cx!Linijxi zXLY(3oT~E5t z%avaHSyR64H6j11AE{*i?9t~SEZ`b*7N4>hTG!nr#R-QdJvoUu0A2N;yL)aGd~3sJ z)mrf9fP;_pk*5N`WIe(Cr*1ycTC)=Ee(>si1m;!VsUA~||NXb#TFkz6=RPn#ms#D$ z`0C&FEDrVJWX}Y$FPiFV`>ipgW8oZ8tS7SGO7wR~C!IUGcPQcDt|IY5-Eg7fI{7>A z`iTpcb}6!XX(A${A3VBTZ62SgcX86oM!><`!J{lnfX6n)elbU#I9YpMOgQjBbVk5z zw*SH5tN^yZj8}Y(Jo@>3NMb98etn`t{X%oUwJd*9;rR@X8#KC)WcDwIa|WT0w(*Uh z!R)eVvSRhGD1Q)(f9D2kA&WIADqC9My6 ztz1jIUKGLfxcJRj4sNH*c`SeKpo1sz#1j+3b+;AO+j3W)KRgM~uiZI!?u-$RBjsfK z9yObW`x1}%wD5Ng#`~IZ0q&cqo-cK1Kj8TFdi`&4z!Qs7re#DxT@$HKO)^9M+SXr1 z3vl9WT-)@K@zQVIHs%+-wB0Pvj&&q3fA)N_WB5p0uSoTv;WN!so~uHB9H~WkxIU5R z1OA-PqvM5Vue#{wj~5rD2)6&iaU}89tNEYnYs}03kEt(@$LjmOH>5!dg-WHUkRmhT z>Op3iBSn#tG*OXMlA$D#Xwaadgd~v+c~lyxR77tL8Z;`J)1c|M_u2RJ_3NMK)kEEV z_g;IgbQW!`p7ew{5)d9%;kA_x|8Qc^zfO z>X0sjq!K+%2;lRrP;7e_6+&Btw!1{aK2I{k?OR2so zj`aNz{`qKy8mmL9$~3~aFTamwBfp=Aqy-o9Fn=@R0NxLDw=>L!>;6<-*>Vy5bcVav z#$50SIYWr|6SdTwd|~ED;)N`ArYq_{j7i6)n6vx!)idKR?R&Y#-A+V^}(8#^7k3gKy_x8+MiTG5J{4^i=>SU(V zWEOXXn*!n?;i$(0rbCUlFEE_S=Wk+pa#En@iQaW?tlx7h`Tb+Ej3~bGV$26AS?f}K zdqxtzIbCl2pe;ix_xIx9_R2_Q!~yIJpL%EZHR$)b7B9oEK))qtZq2*}c)c=myzB|! zgQ$0-U6?M6UDmT2b!$w_Qrai$l9o2huc|EVj})QsnEKeZmiXOvGu1y!K)i69-_Nn! znSSq{KL2wKj_JcLOCi+Ht>PBVi*?)C3SZtcN`)nEf#R_(kB?r|DWS zUWEAsQF+5$_`I;<<+TmiM>W+3Y@aO4H}TWJpXsf7mZAZCp*~7|=V#V8wHNL&JT4MD zNP2&ee-844KPPUP4e{9)9m27vD93pCo;LA-^;F^oM^nN}yb-ryrBOwn5J`b-^h36v zs-9lhkJZJOKo35?G#HBeBYpfe|85?{7xCAi9QSo99-}&K70ioE_fr$j$39%Lx0vP`ky`J`paIo_7FyxKY0!Mm|bA4DX=~Gt%<*V77`f4h_ zt~2L<`_k%Cyh3xPgPo@>Xxz{8Te)7M)0{k)3%6*As%KJhYJwL>w`EAs7I!ctN$04KP}&TLY%LkaAZH# z_W}8s9@zluqg(tr2Km$Zx(}l~yBQI0{KxBWmo0st59@;a&i{FKo20<7PD2!ZVv((V zg-aIhPy6NB%*!{R-?N1lAM=6F;?DMqKT-qh?K?+~SdDQ@?Mj%ByddZ&I)(ATtXuNn zAG+103)>i9?JB>(@_6Oc7OH!qHtQc_SPzcApgqx=?!&{0^ljcu#&_IhdVfE!f`5;! z+?o6Cq_@1WxEBW!qyBx{1US&s%aK|159bp%6gV%h13cE>k?O+zm2caLE;$J}F4hZu zoQ-{zKKNP$;`Q?5&w=14Yvrrbb#T0+buMxk>ad%g$5Y0iUl&~@yk_w0{+_QU{yh*# z{UhbY^D2KnSGY0Zc%n1)pP2{MV}m>Ab+I{?A1_4M_2B-lYWfmZ=nu@t{XU)#I4C$i z{VcwRdus1}tr&>g<*P4(o1$vF_@t!Zro$|@UKyN` z_V}19*yqbWuDSuAgTKW7DS)_ITVA^0KAH^`J+D`r!}Ij@!)MGlhrDL(Rno43Jpa0| zRlWw&Y5eZiBi28+{4Q`I&)MsY;qyut19>1GY|Mxf&4x&{EA1_Q8|J8ZB zb5EBJ80CAe7YDzSa%vF=`22Hm{Z;H2qwQYxpih(H2c3T*TdK`O2T2hW4%UJVZJ%!Rr}pJZ8mPa z?I4eN&bq1jgvI3-dY+AM>TXZ5y~a3x*{m__`t&4%$u zMY^rfGk<#g)J3}f@KoYWA9@ZF z^xsnI_xkySXAyhCL7@eG#(Ps{+?)DFLguD>-q)wy#G&i z-wC*`&CSVLc>cl>8_%Vi;CtntLxMxG-()maSOU*+`wqKJgnHNpxR!S_-}JP!mEpAh z&k@$ovPN_cqIYTlhvT21!*i+LO8kC4W)sNYJaHr)o8n1%w&2%Ye}MDG=AE2!>!YOL zrP472nm?$ykT<>#^io3b?Fz2%7}=~KbrN)Kny%uD!@y@YGw;PkKzzd0(vJdAS4Uo% ztAlzg?LJ5zd12LvsZUw{CK#M&x;ZBWU%q+P7~76UlA)Ljwd^Xn4CG3wJ|`Rm{h6Mpx-)BydIXz@C* z7`|`YvS9){k7fPc#cR#x0WIDF^Ae}QOx0i5GH}M(sF@tR`5-zK@QaqR43D3@k z)L*G0q`UIQG_J|9qCBhF5dXqCH`r$C)n>wahxKdmJeCS2F2;NB3GgjXrY(WBepsxahjHgF|SMADIOU6R|lgIWUy#CpPbC@+bNm>-S4qt*ozx zL>^|>slOFNxSKqi>R)6-Ix)qJ_@Rm4M^$+e<@3-~%J&P7@M~-;ys%_SbIg!|g17a4 z>|CCsq52scVV*XOi|+^x#Pe9Jmbnkba|XS&wQ~=HkEuGU=!WOpG<}rWAAo)ILH4f> z>a9@soE+kybl#Dt9NOmL{Vy;atP@Kn9`KsUbj#b^kLCw_JV>96r?cPBs`4aVojiwd zGQo@R0MGXhG;Evj??EpPn&+(#L>$2TOtMOEYXO&!c8-019eA~I*cgun@F{oudc7}3 z-YWKebOiNl_hms8@P%z!=d<~6A5mw9*yuwawnrIHB^*e1()0aMWBBu#-malMId7mm zk6S_U3Fp$^CuvZ8ZSI6`J%0{(r!{B6eDb%m{kb`Qf6wE&zHqL4xaNlf;LXL!zLpm- zzSF|ElYrCJ%kxukKIzz+5jn9K-^0?o?3^zBSyfiZ2lIy{vvay~pILur_4|F{KUUw7 zLys^YuC2V0=K)&h>DD1b{oWzPbh+J9gYZzv@8fh`k8muiL-)5@O_)sS1%W9+z7AzysgU5vdkr z>cahTx=#b;u;0c7%xq_Mz0)FO`C6zH#rmc^Hj?p@wtom+f4B$bZ?P%qS-3svfVdCq zs{ny3!%5R{AK~V%faau^y*Q8>`1Ha?zyZ*ueVc2oIVWkW5q{(b=)oC>$ftOIquz+n zu+!L2+50k%m_vJZ^_5zOyruRmV?OFeiro`^rUzG_$m2Xhkfi@}rlU^}@#i;YCQ-dd zx)Cqv^ZO=N8w$~{Cv-}X?ur;-_2E6jX+ruG5Fe~J72Xk>u@Z3r+tEAt-pq&kTgNZ> zdmi-jUg^w5MTmoM8m31fpG!rY_2PiX^3JDttUx^c+3P+Xd|1v{8&$>!Jug0eXL%U` z=e6N={9f`n*s_7;Tj?S{-|eYR^^Y3QctdhnU;aL1==0K8!fD^}#2b55gv+Wg%zZU; zpdjT#P$25UL|;Gk2%l@}bmMtEL4hxjXfI=4c~c$31%UL3sae{T%oKvsW*Wi7Y@Y9-eC{7;g(9qD>^PF98-1G}V;1Ad# zG>LfWx*PMonXqpc)CabR;GZj+OeWlB4J953)unh{jj1jZjD!;y2vKbG&s#;5NC2O+pL+uSo*P4_lzpWo=AFs)yh?n1tr~7hOB|N-R z;WT6wG&0u=6kMNpiQ(Xz`r+?sBG;kM$E(DvUW5Fu(_0Zy41J{a$fyF(@%&-aFL5oz zolTsO@xpZ@&hWxS{=Bxl zfZaXEp}w!Qe{|QNKlz$As2K3q_4(3PobQwxk!~LkyxRnC4=qPNm^mp5-!HD65$CD~ zb?9u0^8CsEUzdWrjOQnr7L4(rgSl!W`6L%gD~)7U=161(OO1^*)=68-8K>xY_2)hy27kL!duJ}G+^&iYJx zc?jv*U=Qjac#eR6LTMMj&sf7urn`BWGZ{|8<9vjcPA}RtCF1|@{e=S-DJqDAeVG$K z2m4-vzS%pd;QCF#sqvbfE3U(Mz$at;%M$Q8*FA?8;J&~)*+Rz+nE#(g_XmJ4Z#Qw= zZ;1G)5U-F!Jj=ZmdC7QGW7>J*t68-EFKY5UhHKj+D(pVG)t~aumj+PYONS6%$H@^7 zw@Oi-ZN-Gw~K?W*|c*7xI2_Wws%-DQ0|I4y_OUt2qht|xCvx_?ZC`hKby;e)H? zpNoFt_gDVIPb7#EE;9a_z0dDj|F>$OV9)XzcE0mEIYZGvj~mcO!@EaW)I;B^<^Gs? z8tPwMubq*FpUpDuQJ@>r){E5qAN4oR{IiKWZ`A|^Z64hC^%~^!giEz=Da7Y+^r;`7hohcdED{a<<~Hk!6Yl>Q zbalFl5$b`{9$z`+-JD|omyA#Qm7b?@_^jCh7HS^GKzyE4%fc~prWYG}Jv+=?7=Zpu8VfiM` z*VL-)pzB7`eu;U5_;tN6;hYNmxvd4$*KsBET)OVHKZ{!!#E;v@yK-{LJB+OrdvOqP z{v_&7TzGs9g<~u=6_ZR#BL-w|?e#uWe%6LGlXf204Eb`cn%`f<# zlBMx&IX_QtpiK2Yu0VJm-G_c(q?-0!pD7}Yxp~Sd@b5suweHK)P!~AK4Tl_WHo$e) z-~8@h2fVdAY_VYp`hxvB(FgI<@ z^xeV0>=1WHrLa89&mPaBk;hlzmt3FQD=XP&pLyAs$Lp%2>E}!)wYd@?3 zzfWwVFWpDC7gztRd_Ur#J!*VyyG#-2{uJ4b?bW~wN0L5PorXGpTpv3o8}jM%xOBm0 z_&)Q@`5{XY4}Dja+QNP5eVLFy0Y6JqzW!o$o~GKu@LJ({jNxs`$8h2w$FUU875?1! zbF^e#1r=dgs*RyW%y3%#X-Hd zXB6Tfp;J`N?&KxF>w}vmoA7-$>%Yra)I+{sdv`UQf$yWnuDO|opOad~;{1K8*hX7_ z)UO?qZ;aXefu-6|KX@ENdELLBJ{PVaJWurFn64#A((g^@&lT#= z&*$aN7vk-3V*cE+=~JDE4?M@*a4QCXqT7B>P!0M&H2lHX65z4$u_r6>e2b@RZ@t_M z-|HRF3S;YOD-t<7)ZKYiY7iKzTo6NqB$AueY3OEOh=fy0y+iN}%Dhjm;ya*4kgX<8TYEe>fp<$yLzR zGrPCSmja(YT~}v$pa!0YrB2$r0ezRvoF{&89| z?rfX~_Yu{yJa{Vdgz>U-L-2k=yE9%>AK$K~xOCGPo<&5A$Oo9uq`uqF@B0_pmwe+7 z{yhhOXLf(7pIsQNx$6!>BjJ`5^ao*_Qje(bX^5*vhvCpz&`f=-n#=gVt%*P9`=4^AUf zUNSvezWyA;>ubYw;-j{uRA=8sY&@VI=1uV(=HI`1?#1vfp&LlNwVn1skZ|+oss_IK zuxffQ4%VCJ3`QJ4U(GuB`vT}wp2s5NCh%FunkGBcLEleNRxT_v2Rxaj&OeC#^vmsb z4D!|MwL|8?eb{a)`!to+zszk2;<+<(NC)#(ds?aq4`(yTzrguCsL!35ODW#GdBn4F z>g@hnVIL=)hYB+1&nf*7K>RU!p3r2C?lzoPZq0d7k|vJtUv??@RbUIKk) zH{9~|Veltkb5^x&L0z>tFeL==kkBM&WsmW>zSA2I^#~REU;e}LcB1nR!{y)9<8+;+ z%c-v>!+GdPR0giZ0}(pJud4j{T}9S}+b##nZ_EGA5whYYTI6I-PLLAF-MGFAbph6& zHM{S>4LIEOR(tLh=(EF7ZqG`wzJ?FG_hG*`hu@1voUZx1$rtWJeTUjjBfz)h_cym> z@IJaD2ft!`J~F9_^~Ik{=?sU;17K?oxWP#yXdm-{Bl9WF5?RtQ*iR4sKVNBOf5J=K z0>-;ea)DgVr1J;=IrrkgEn4TqdZr6arYV1FfcKM%r|oEh`n!ay6y^wv!07O{IhMN3F28@qeT{RlC$)12VL)974=hX3ez>)Pkt1i zwh6;YYoG?}LthsS>Ms+1U#!gGJU+ge(R|}SGyNacYj7S(u1N2%hDAvYr0Mz&Iegz{ zpU-z|^s)bLW=F8|ZstYLPDCC!`F7J{#DSXsb$ht4D6^?2$1#5(v-mITlb!Z=SRA%l zx#a>fl(5c+&L?bqOEBaqNB?oPN>yv%CMdzc#-vZGtwhZyLgCnM}1Oxl)1;GY=;r z4!)`1onxfb2=SdeAb0yR_@_NJ!yM0m{%_miXSomi=u7mvjo@oCPv>5pgMBnk)Xf;< zp7eOO4D$yHN9p_+u@B`8r&8$&EU#^wRuJF+n?rFfvnPCNPoQ|e*|Yk0#<@|xm0c+R z@V;oW<1WW-KD{__&VM)waj-A5^4Qc>)sUx=as8g-etDzLY7f4OI_oFC{Vep;xbrQ| z`!S!J=0|VBI0sfP^<#0y_caBai^PO@$YQ^7S*CAT9`_BZBpldn=72wJ+pmXH|IFq0 z<#^^oyzo?q^mYxu-avB>@yDY%#M@iFxNrV>n^yr2f`ZO|Xjeu)s7R9atOPtv68n9u z6#6Kp(^(AXxnyhhwIo8HwH>Oz5sdLW{^#g`dA|03%sAAqiWU9-F<Wrlwfr9 zv@FCyYtD_>ks*!X4-!XPnO%l)Lzd>T;xoXvSHk-xWa>fdb4qlo4W zhJz*3Z%Cv5_V|o{&G6Z%Th8+I{?KNYm;0YXNq0TxQN1OcDc{dI%4>=Z#kt;#cx|se z<#n;AFk;D)p9%|laj+)wW9B-*0qi?=#%xy=j=Rja>D&PymSQ5d{0hXO{JOIHEQ|-7 z-fn|)6M@fO1mD_(^|amykYSbL{t(lY3-ovOL((< ztGCIKp83k~pQ2Rn%wdF=C?$SgNs)NYQcfs+Ik;^l;NYA3<&JIFPDB3wNKM;Q0damOm> zaSm{jdA}`!_{oFT`vpaeBfSzIEo3_J_zPcee&5eEqbcsiW2p`oM+w~;7i^#YR!U%D zbhVIhpzPLsx)J(kuB}=ACFnDkfKr*V8rVfDdi|}vzzZjSczNOePU^P9r_M$`E!}QB z7324Q+CG?lu3Pw;)%Big1;fMMgK6ZmFS${ChWzu% zdGhBWJ@(+{ZL>I@y}TC(Z-V=YA`amB;{1z|m4MrlL82S)!1Wa$sWn}OdY}3Cc1}6! zLdfIk`w+MNOh(0`ZXNTuItTH(PxOl^(*rGE8T1jUDbL=py#07v$@o5C+%Cpv4IP1$ z&)7f?`V^?gjr1UjKbIrJi}>y4Tt8lSr z<-iA>c@cBYKpu^Mbr|FOxRa(hoZVUjy!GH%@FLV-@qtE;I4<{kETzKq>w8}j)D02w zW_lmD-{?FRPwAlu%2$)85PvQL=Vh~edK)kuNf@Wb>QIsOqZ;lzN-lc1kolcT{{45M zs!;sCtK0X1g9MjeSe21Kc#)w_uhZRCBSLlxQ)xp0H1pDog?-FUzOh8c`yd~ zDyPqSAIQJtFymuWk;h8g#Rr2vr`BG&{F>!uyj?l_6j4qSvg`k+On&>W4aMu_NqyG9 zua{Bu6vF@4n)8+Bm2!SK2-yuTHs|b544bL7wigHMTGlR&0vy2eu6%=`mB3q%jgqe4 z0p5}*$~C+Uc)c-@J6{eyrp~ZpVN&-jli;rWOOcSL8#PQ*cL zPX7$;KBs{PX4l--FNb<7USC{t2J$<2kFGbK``ljDt&)WG*O^-pg!3CB<#~>%SC1wp zC?lU0wmXTyzgJ2yu%!L6?Dg`Pf9cm}4b}N6y)T|RWHR+zpsbMfQ`88;!^26Wvr_zf zZNK>UA8)A%`#7b`7HAF<{JyDELH;1}c@)PB(q z>X7~x9jAHk5srkDVnyOD>uEyW8}G!b;(BqQX|?a=TEGG9H~8(_luGd1g|>w<&A1W3^wX(W#Od1?V{u=y)Yv=s%s@|qf=Vw9X8s`h*;}Ru zF7apS`W4$q|F1-4$1KvM9(sT6z$hSei>xoI2zjJ;22BB_E3X^j}z1ULHGZsH> zi?@p)pLIth-ex{aqbrZq^||&c(l2{{e(o4QZ=9@7dHp+@aN5$J^s4p+?XNpwAb&qY zxct5{SA1Ot3A!v*$`J>4?RgR@8=9d0w`P?5xd{2Gzp+s1EcDU${HCJa5U243g9)1u zzlC>xc%%PHycuDFIR213RSL$(L9aBAb}(Kl_;iNluV+RQ`94*iUuV;M36gvG`9MZ5$K?>FX z@_cfw^fFGL5~sTbBqP?M~4ORnheLy5x=__eIkqx^{!Ol^SbKJu1951 zPxqw5j%C18=9dz;@5eePPkEUHI0U zwQ`|!*dRf|j%THagE0y7ZiQ4dLH*Sa$t}AGb>3Iyv*aw`^W)sI?p-wy@85R+O^|oF zlnr{`*k?0#HJc!g=LR|t1ipY__V*4J*PNzO#tW+?whEc9#?gE48Pn!de76LIkA7wp zR}}vq-XAx@!PE)FWB)k`B?j)B+qAbA2Y+syR6ra+-ADL;MjSLeUY*hm@jaFo^Q}dn z)$z8b0{YF(`i06K^Z{Pd+Ht6_PZx*HV)_+(kYl=_c2mk6c`PiplU;YqX4+5Fw=IL} zeSR+0-!OpqR?matYZs%s|8St+Tfx6yc;Aa-I<4*@EIF(of#b$5H@TT6&kzT4PKPwg zpq?pegLjkx4&THy9oYwY%=X;OZ37+)*qpqdokt&*aM#HkaC<1_@))LDJ-^8xd@a7o z>b+C1fPBc%Wi-h=1{1>N3UT^*B)?ALjuGR#)NB*-J%^2i%qJ|=<|0E+e7LxC zkicr~!eYdMWUHfR?Z+nbiN4z=8Qo*^Gv&Hx&cb-C>yEO?E~vBhm;8O3U_6#%=eNuY z^J_YJvMKr-&)-WVvENc}3Er^lU)*+vT`&1tnvnS>MOTjT>S9-lCxTxeSExmOmuN`w zf3cxBRo%!R+*Rh@YlKSq<@Dm<_8QZsNWcMX$F;?HN)`0gT;G4!njya$164~dfC`3+ek{{ygGIo&}_ zT5$&AIDYCxV;ST*wO@07Cg$^a!H#X9zaySD-Vdw+{BC}sHNzb8_N!;N684+?eFIVC zxuO#@8rZl&AtImU&E(E%;?vZb6bFnK5Z4LY`cqyHOlISYZg}s8;q!+9VT_7}pc2 zeKRq?ep_Nq0VfR&n?eRKKRYAq4da2KO(hghX)^VD!a~x`U?<9-2LImm2xIy^M?Lzv zmp$e2vJS;9qb_W9u&L@e*^2{_u>Z0U2VHJ^Bhm&`0Uwwhu7C!N_|HK?=GJ& zQo!lP71IWvMLx*7d}1&7z+_{Ur^pBGzHRdC{fc3x@iS0&r#mbe4fT-Rvn)sybfa6{ zA@PO~zL)De{sik6r-B6(XR8_Y*?9-*yLx^d&$ua+-+X>O{RM0Ky*U0omjH9_>!x>C zRR0?!81SHm;UFj|d5whM9pIt#5DBC6&`;;SFE%NMygtnj%E$fx+8Yn_iA6m-^y{)G z>euCycZd&uMD|DBu>J6iaBwcUgvFU0vxD+hsY7{6<@fDc1?|lA%7}3C*@STF&ad;i zz`s{KYmD$>$f)4e6}>pH+WR6BaRBvR@ZP7=TtuWp(`i}@)VZtQY-d~tx=Uf^Zia*B z^ONx0#P*z9_v0Y{odeWMW`f^o4IG+p4*w4BEO`Lag-5Z31KF#kOs~8@(0(HgZB~R! z5jV>Bb1TAYgM^Uv-7k7yw|%xf@z)>+ri-0A*21op;+izC+%aZ!5zZ%`8$I<&3CwG* zy|KUn=ebHlDvs@eJbRQLot%vMa}jZ5>nG=)|8EBJM2wxzD2!k6zdeKlg<01bE)|qc zaG1c4=Yxq4%9V+)D$FRpHd(@FxCVWe@j9T)?~@T^Onzd74)@My*U0sd_H>f+5GD{Cv`6 zd#)hqv%JWqUL4%KBJRcW!EBqp6_7{MUn-F;5TDAv>pJIwpPcsXYN^EMGj@Zr)3L9f z#`KQ|K1-edtK3Z4Y>SBERs^&E1QEfZrcU>6y@%sxXZ`Ph1 zjx&OCC-M2_*CV{;&r$XCBz)w!asReBiz5!ece^~>Sqk{P`E0yw3FzpM{EAIyq2C<0 z%|5Uje5&d_`OxGV(6Mzlq5=@7CvS~%#(pcm*P#f!+?unYR+Pmpa=D)ASLTU)rdt8e zX6K3<so<^yzgN`55QLq@%_B`&DD6l1@D~W%v%A;4MVHj;iPP_keZb z=>_$dw%zQ-!AjFO4a5QX@94S@=(mn+pIq1ie05~%s#`+H=c*_TsVdO@w(qtVcVfJ= zM(D;v{H@zcu6r=NUe}z)_#nf&AH%~}iFd4@U0qHyT#l1UBR);1{dDqHq)V0*)#yZBE=dTwqJm!joQoldo z_tnjO0b7{EpI3b-ugiy1A8s8>bw4?lc=?bb=~|n#Fh)AJo--XR@PBZ%0de47VY0pJ z`yIG`miV(-=djNnbiOQy>$jbpXpjbYOkS6?CDt5t%5{#qJK(wV;=+AqHEe5@if#mUkj_gh?AVg3Gavxq)JG~YWHx+7Y(qlFXEfC z;raKFH}zSR293u)c+q`r^Cy02^r!r`%ohH>zv(278)2PHXVJ(q@P~_1oI{HNk9wP9 zpX0oDm+gkE48ZY-aOKy?2YRZp&*mXcHBRn!#`p@Gx3hgZB%Jz)VLx`diPo{}|9pIc z>Ccj#frNuADm1QHX-x4|{h@V~n)<9BZjBuA!lG&P`^!wIKl|u#VdLi*ee@kH7}HPt z8R9^$Nc3&sgl53!Uaz>}Re;wNtHfcrFJa2z(q%g^j|KBj#$x|OWO%dl5Ow_Sn4xc| zQd`ysa9*Jlc=avoi-+@y39q*^NH-%FP`^K(Pk$HEI@In+J<@@z9+dxPejmd7vxMk} zir{>Jptq~X>^(i`!l5o)R9OWY=xf;-4=F9Vnh_{Jim49qOC$9)trY57L7U{yfZEqX`Fl zrU_jo9dByA>&3yLi4}bj2hd0VjyB@?hgPqPr`&}&s(nvaSJuEeb0Z$*R$-p&59{nO zhxop4%!^0eYCNyt#(2TuCE;NH2zLHWl-Yl@|B(900*WJQGu8WJ6xI3hGOD|s8;xT` zoT=U(^GWaS2hr~zSV;Z&U>=tesB|g}aA4Q2)TQWG26_B7?q2#y=$9SO{+gEKI7Ro( z@twe{1B2$w+z$9CI$_o9i}hZ&O40@L-=37OqX2wY+a2O8hH-O-NtcE2eUyIw3F6b6 z3(5bVb}ZkHKI@dxS2kV{-#6O@cta#~i6z5<^z<-_ zvvNi!tMBkt1#JA<(|;T3(e6crgPC+bPwFct(gCL#q`SxX`4}H}`u*b;lxJy9I8{S= zUDfwq97vTY%#R>luvzsp8+>hDcE0^xtg}#cKE}IC^UAF%bKs}F_lr^xuSKqP@rc(a z5n8UOU-C!$3lJZvI{n0vFM^zF$scH277<@<+{OEYnXLaB`nVHbq0dm}d{;~*9@cVZ z_Zd~_&U7Wnncsgv$6k2sYinmH;GoNG`rs9}&H!(&m3Z?01n^R#TFKmU$lu|_#=Jv%kBzz5g}56rm>{kCMTTAy-^=X1d4Dy;uVg)hm7SJPw9<8i+0 zvioLdn6JsqJTyiCc<)yK`&kt4qc&giJ>%8q%L-VX+t#L0zGnIo9_wtV&x-nRjAuV- zlkUPe4Rr>%lI9I^%y^vW!COf?(-8---h1?&u2RU~iqgsM1<+4JGqTsCF2t1t6yZ7W zj(uA5wqw7!CtmbH|MG2KpbO&kkU`T>@DG`l2{B?Azg)wrT9%iKPK6YQ1g+cY+&Y2k zKG8x5c!F1~CsAHiqzI?gT9kKH1Iq6R1In+DHaBnau!-lM4;H-gPcuOr=;;me{=Byt z_~=vqjnTNi@8mqS$_mugwZ~F%{=2MUkwzTyS->n&C-^z1vSk;CalbzqNzcRFlRBBt z`*JalT`$`>jriS#qrOTOB_FtCD%E}7c!nD}Ra5H23FdS^n}*Wg4GcM{kemNCN%i93 z%VeX@)qn%=OY~RKI)2>H2$9Nq3zVlP+k?7BW5!G3MZYLAg!oKAt;M zf5Lmw3?EzhdC(d5oYy$%8pJ_+RPa8t?JELW^ua>C11OT*IhLwF0p0UkmVB6f?QWc0pg&`O>staPBZk8h}w+S zQW!5xI+WI2Q3JRfG4n$r#Mkt2+_X64E4k^`4(32BanH|k;D6vCjK_ajp1z#zWY_=o z{ut#+H<{`=l-Gs-_~-aTCsJMuEQM@5JI;vu?z{`(x!Zv7Tw*Eg-kKBdH>?*2)#YjC zhy&2cF$(`30RFGfeZTT9^3jFmW@n(@2g`S9o z>y=nefO$@6U-ggW<(BGu!fAINi}&MzUF2UT^XCn(wdVVOBKdAB{#;jod#c0M8FZiU z-VNZ-t>UkRP@^EnAN|3;%>2L4j7lKBvmO78k3&7Rso_BA%Nb92P^qP_I$A!0H`-=>)ruv3Cgdd%h3h;I}F1K#T_c zJ@0ch^RWf$lusr8JMw9_<;MZil>ExUqp_7q2+{bnHJ~zFmox?ttNiW%g`CRZ#DFJcvvgDUt4aA-N+mZaikH9~y zj>^;DGoHM^|2WfqW8p4EGVuZem}~Ej>H#L{PX4p+CMs>(@r?r z?~5yr7m94}I&FS^8u0ga^zEu+!0%dq)-~n8QVR#$sUC5!Yd37Oxd~25z;m}WnaIspEbhltE@t3F) z-N$Qr_V0ph_;bJOo|?&8?8$4klNOxoUZ;;ZxYv$UClq$UT4{=a8 z=a~@mn8ls(kHh*KOTV*$KCH+U>tOyM$n#qd>ysI`J6T=FTm~-{lT%N9;+>3+TKV0n*2cQRe;ZL%G zHwPEr$V42R@IJ8eG{n1T_xjoA&=-8W`XK>*_X1Ia1k{D9UE^%o{DIb7whxtDjm0mf zUp5i%i3i3WqdGfhklu@1lK)!A^T8|u<+F7t=~;?4@h|L~$>O)1M&CQb_&mtp4d)Nq zqwGc;8-?!!886J3dKB=GJ0R(vc| z*!qYKadl#-&kcg{)l9ec+~)m(I6wX_)FI#cmR~28Jd}9q;sp8}txx>h*NAv}4S$aA zEASBwMi!exqy++VU*;2Gu)gbgV>9@Y{7wb2V#r_Ey8PjlkU!zPHDlw!f2qn14v#~g zI+$Z(jr#C(Ykzapjnov;pNv;Gz3F7U)Lfdw@}ZxcPVqT=kna-b&vS+Ml(7BXhV#!G z_Un@0g7G)gyJ7tMdNVD!({CoEh#2+a;Q8JI;)ny-e{%JY$w#4IzSqqtMO`rGF7_>k zI(xo9yYiel{O?sC$Hrrv77uI_khdP18CxU2_J6TV0Qpbo-1O-O%gdt7_pH7SbNF*z zpQmw12a;;D$;TX;L44JuP5f0il>F9AeZs{aQ{sgOrqqYC4Y(Kk52)aLVv+63D~(r6 z;JVy3IGYyoxNm}HCyp1M>Xz#vUm3{mH%zI4csJjB?S}f5DC}`zJW!f65b&ZjA>n~o z4fcz5VkL{?%c4TMet&=B`w%C(ZqhK~-;N=a$EgFT{*oeuSGPCS)PVodKGzu^&7`Kz zt~5@T7EJp&L>2j9ot)R-+t!@5}BexEzc#xE1ncL)(DwF{joUoQOqSjut?Hx1Ps@t71p zpA;*g@AaqBeMQ50g9Cn>CR_C4pwBhSmX&}57^Va)JC6G!HhNvZei!ri;D8D4<1=ii zT>LroFFIwOY@9pN-7^7oH%rFZ3h~hSGeTgFymS57H&(y!!|xgYbaWr4dfV-!bnWye zJlOKX#nymIP7HqT`%P5#nFlX$JazL4;(#~twHG7tx?IeQcPmE&_pamQ`2&lIfp zT)XjCIn;TDjPdvch(G4nd%F}IFTRa-a)tO?lXvxXMf`?l_Zwi2-SXwR80wkt`G03w ze5OxN5FWLI2@fCqD30^|^ScmbA?v4hH6hctnyKU)+RTY(rOe3xDH-4%{oe9xeXc40=^MVP;bS@PEhhCi6<^5HC@qHvkL54UApM&UsEaSM#3XE?~m}mcJ2oJNP)}Q~qH6AM-D1 zTGVGhr!xGs_t=x)33Vpj&2^;wkFerk3yvMc2lqq16`g_l%WCfWodvuws9qhOkHIpC zJvJlb%%RVGbZ4fZ{;&JBWCr5kK&F%{;#mB2Mqi9mKD3kOX9`}NVLJ6_Ya#gpSoeVP z={wMY=Uo-@+182_XXZfq{_#heF9_{4V?I_%l=`!*4_8_zTzl}gv>^X?fezuI-rZ2T z1#s9L`bmK227NqkWnT$6)iO{Fhz8zOIG_`}}2LjySIKx%8Rw`Y1Ev z1K;4i46j-hNrZ!vV2ZEJpM1+&2h!aoyuXR#-y2i*p|~v_NuN9Ih0E;o_T+f=;vnB5 zF9LA@+pkpEHtq#~@NMg{*LM+*;pWGV18$4+?qr-p-l`La_waznN{;#`FkcX(I1PMc z=GK&r0_5FVW$rTv`OZl!eNW?-jr*yNA9y}UvZngNxEApvS0qREkNQ~6`YltG;io-H zhWgW1p6)YY2>0%_yb|I7-cwMNhk0dq&+6Hod_14$(}$peuqds&zhI9%uJb$6(mp!{ z{rHOeb`Ho_Ll#QALO<%QI;GkNalFL)9X((0$te+{US%&Yr20F}A-z{}r+n@oL4W`9 zhxXO><)1TH^EwtjoN&8Cf%HU0MmXhVTD!|9X~7Vos1@P>^k7WM2*km2y)h-nfRA*B z8aY=&{xV#zsICKD*zoz^0p=6qdy>o$r+?rzeeAQK6T*+IzlFM8ERI!vdsv(Y_NGvu z_YWZdm*-6JpW@Fu8`h8d&X%LP!+TlSr|Q!U>3*#Ah2D#!t)~R^;$VB>ut|sm;K{=m zxFm>EcJt}ZyO6&tx5wN&3j8}M_}uPu7~hzZp;3r~oy+DY)Ihl#xdo>1^Ui=bF#?=d zXlRlB$oPCf#e3#+y8b>I&t5O z@v!9U>ct1;=8{jm_fPS48Th>QV>B%HLY%UzdZa24rw@&lqM@JeZ#VNxK^|Bnr)G=# z_3)I8t2v&O0g3M*O;xG(*yb|KVX6zt3Nb8TG$}3FDPePLKHHz6zI8m>9pi$@{via!Dz03W3O`(=eV^$wJE#keab z=KMvxnOS`zU6{YWkc}5sh@YgsS*J=ky*Q3|sX#z@_-`Wl7*Bc9wO}2(uQP`9eS-n@ zrHnRrR^BCgwxWz+<=>@Yqzl2KR-;-VK3^@{_`~L7680;IxmLn>w@2$@-fGab?sTt1 zY#u4`_-O+ipU?Z?V9xwYThtqd!@)LPtWTup?O=J)PTEd9^nNbo5%xDg9u6HnUC72+ zSNZ1*F?4QYPM$aE*1_p?e?P5+6Z18W*hKW=AkA>MDdGVB{lqV@e?%Bpb@=nkyBOzH zTiYza!=YFPUg@LZ#HwXtDfG*mvvC~D~ z3evMTM<2;u*zl6|f$WejR^~sFyICEVRPSMY+uFI3;?)c$ez@#G`T*;D*?d>^Leh^E zf5Pj!g@o$@Z*J%{5tlnLy*LOS6?iBVZ~%JUZ}Q*_7`HklC_TmTLcq?lxV^x?OCxmv z2T=c!C-RmfIftY@u$xif30k#@q+r%c$R11^c1RZ=VId5 z<@|fjUyTSKb~aRpT7F(c+lTTU;YIpk>&)G}Iea|fV1iSL2)+-LlYSh|c?LiJy$|yT z9ZO9r!oc4YY40aKIB275ioe(O4sd`vaJBg>#`odZ7kbWgSR{w#bKa^#mS;}ik^0@) ziTXWq9P!gjHR6l?6DW_W{JtpQUzmQ?{Wim=A|f$g%+_}-vK(Y4BM<~`&qN%INq8Rl zbVv*6s)`G@VK?}fPZgnn1ITB24=;T=%A*>e?;YC0-yQ$`_S@Er14aGr z?<)WYa9PcB`gk6marMPk^am18obK!d+?GvBN;?Pfw?{l!w+Q*aQEXlU!>dneNCJN@dk`5 zDZlzcvs*LX;`0S~U&U0}<_!2mmjs{jIBtPW1N&6~pC(;;tGNX7xaZI#?-amsyMysf zedOJD5rf%t{Wisl5A3>;U1G>%lE-%+WH`ONr;z!Y?&T0&8}V?T$m>7hB$!NRNGA* z4#ND!I_IS~@8Y=YyUordh^KJgfy8q-9_{NA}(;)C@Wgx4Q7gbzy@iaTg5@s|lFgudu>yJtoGb=ivaPuraQZMwE_ z^8oKb$OmCuP3Ow(rC7&Bd(LctPt9+mMbIBKtglfD1e|W3DlsDk`{~W%p_&-q^5%YQ zyr4Hn;uXu!#1}NLoFhf^^pC6x={j{YsDB1|5zqG5C4TT%q<%8$L-7}=kj}RA^B(1D z92@U!RTg?5ZybHWPew4&#O?&*K(h7z@|z+pz^7McwarTeUC0&@u|i$wo_^GDF7Vmh zs!!>0*k}8ELdKvz3>a)|jy%zsZch6%JX7eR>n)98K2Se?C*^C0A>mYH9Q$5w`Bc&i zM}3az)KXKbL!b?>Z}vRDsta$c$IS{q+>3)1u@+^^86Py=|9$-+_^uHT=bpa{x|R88 zbLmF()vBk~viXCyLna=GgQ{ot35>Uzvxma(yVYmFd?FIojwM%_KE(qLK%Zf&orQ$Y z3H*L(x8_ja9iB=3pU$tN+@L~yXJSEdzP2HL^RuDe_Fz^!BYsV{6j(!;;0UNAl!daKGb1$ZLpmhtVe7+*}vFBcp)>g9^x$N1`p-lyk{ z5*i7t-%17*G9FX9=0JYLl7Ejzhu;T&@*v7<3#|JG{ga%eL;Yr@L%bj{iSWBxNf@#= zbaUo%8A1HwPKJXnw}uaiUz&k0wKi^)+h7jM4~<<6Dp9YT^^dwio_$`cCC0%xLgd1Q z{_J_^qV+JJh<$Z`H?5NyHoS{?XqGLD!)bpq_1EeJl%K2ox#?=Agx{8FgcD;6irb7| zPvK%mczF!xf7|)=6+O|5gK@WKOhz2Qw1xie!UKTALF*C<+5AD(KRCx3wr^W=Kalyv zxPWjY)Y+6R#tGPGsXLRqQAa-}%o70b!596HGki*I=KaBXTf(s`j{{Xt#uusXPUK(I zMXBG4O$e{Et%=9FYzXI}|Jw)5m}`jrZj9pvyY`^xgE!(j<*0qFVm{zcW>-IaS`I#} zGv8O7gL->3&L5Y8yzBdYp*Z3o>+MrEuUsqIS&9Ge)0BEKhU1Da3)uA<0}F|-`j4f4 zud$`RTEeeCkyWHRd;Xzu?TK&IY@W_;Ao0K(8S1-jgSk8Z{dl=@ql{o!g?&Eq0W6&8 z5P#N;d{yfS=Q!`n)Ty^t#`y!e|I!l-P+#wHk#T?zw~Eg#U$9SB#tk&b`;#-bJjQgj zvriY*Q-2QgC!SMMsLmbpNIz{|`Eji*)!ECC_&>yo^`-Cg85G~7k<^FkV!|WAQ_dup z_2OXo!kDUMfCI=+=(I2UpuaB34cUDc@>{gV^gEs#mG1G{_8dM3d+a`e!|$`}RoHXq zC^IEd;JK)yoU;JOJFS6nWvoB$xX^qeY!At?{&C45JXiDkCvMQAyjP5*e!5HNk5*(& zBfaR$@3*_poN!aCC%h$ym&W;nBHL@)qipc`LiZFwjwkSGWnyxDIr7nY=M~ey7g)@R z?Zf=RgXb{=F~45A7ufU0DD{PPERQ**Vyxf($gE-gKV@Vg@y``i!k>r-k4H7aXNVm6 zLEC)V|KP6-@t2|^)gzc6H)P8RXPq%NaoQmxD9>KN`~mDwe1G=MX6zr$BG>tV%l6IL z{VE~Pda#8;e;53s$SBd9(J()gm3Tmn@j;Gbv?unFy1679H-=koRY2dM^2Stv_gU0xc7t6f zbLxBYB^nVN@>F1wG*%h=XtH z_q4XzvghI3i?c(4Z?6~iD`dK$*uEX(4{psMf|16@B5z4&leO+kZvT55+Yx7mg5MYisLB1gGY1B4{ehc zjuE{RJK>0oV2`6@Hu6Cj=WgkHwi)}#Fvem%qft4z@L|^ zqCs(284-UdPZ6%pdnkSMdM^&D50s5W9KiVCeVR!o;Pgvye863d^LyXFTcOS_TE*h$ zaGanU^2s0lS#;Ki_!_8gnZQ>C`QUOtbs9HDJ-Lf`uDznduS1ECBRxBkMtrc|g8Z$O z8S!q;WFd|-+7; zuKn$!l?R)l@3{)WJ>0)*WuoM@3gm-J?F#dNZ%Z5f4A{J~Z))pU)QOu*k8w=b21>WE zKDv?H$v$h(Y+~^YTb@e&QqfNH-ADQH;vW-=J5E6Tb8kBF!z&5uJ55u<(+*SN-1^hP zDR+BukUZ4y)l$F#m!ER+=V>967*ZJ6Zk6jh3%s%%;V(U<%=**?;m&Y zxp~m5esL2~m&5Fa2;hG7^actZv+EVTc}IACAIq*A{yu~1Ix>LbT*U7KA8bW_u~e4& z>OH?7!Y=;3Oc{IP>vxvI7hhj#;QLHB8~SX1__73iOP$9z$9UkO_5O+><$%*y1E2O? z0{P3cuuNk(=&JKHK%V+oWY75Eide}<%;R-~6*Qk1wf7*yL0Ahve^A5k*QlaLdTYj? zv-OEZC$2nXb=>LS$@r?L zat*6*;)-1~p1Qf5a5y)Z{NhD^9QoXl#y{!&^9Nx7>DwJoArmxt7tXe0%aU_XdU3FD zu0r2IC)1R^c2TP+TPGa*&1x45QK%8yC8KqU|b6lToUk*QS`1Ip+JdP_{?ftbu zH`2P*KYspd9)F%-^#5==l5jkX ze=a^sN67Fogx`<-?KokNr0S&8%`ksZCB?=I6MerNxVxko^eHJwxn&pV)!{{3HdbK2 zKN!+~DfW;5!{4#kXJ5+(X(8W++;ZX2|EPPtZfAV@*Q}HA&@kmhA@b+Nm;8F9-EPEF zf%epAb>C^f9vgmN-Fy7H?^pc3{K5Qwm9C0H?f!E|*uL$>LDJKWn-K@_{Ht+)6FyHc z>>oB5`5=j)d6&lg&s)4C1K>4cM1ejO$3;{iIPl+ek~+vN-;p3wV8`#rS|=kyyi z9S{c-eSe7^{96irbEcrf9N(wN_-rty9OFwkIxQUZ%vd>JYdhxicUmD^KO1EK#2Ndo z`>a$C`sk)3+G4;bw(TV^@|ez_YAT?9nGf$HAu|2_82`3To3eh5iq{dIt++QY>4l6yUwleA@qu#rPPb;%r}V}n`)c5MJLmn_3oH;DeMLpKiA3->nb^aye!~VlN+2_Zu9ju=}%B50#IsM5e7W2;$Ivf~I z+6x4vBggpjlgIPxLNh;@A-;UArVAC-_3Q3@?ZrVwRhBjBLc^8p6kPYYLub*u7RckD z{UapV{-hGC-K#KVJOLJL(g~-Q-($ z5FTJF@oIFpA_5Jn`#^n)TahDwbBm+;d+_I^rcNP#XprMh)>}M6e*pWD9-I+&26$<5 zp@ea|`O(my9X(&pA|F)@dxz(T9T_p}TQc_3&iL(C|BtBaj;s0o;*pt(l#!7JmDS$5 zx7$ubS{jnHgiweyC@N$m4H{@DGLojzO~XtfE1Qf^Hf8fW=Q*G6ufOiA+pT+^bKd8D z-p})Sp7X%(dDoTmXCY1^c1Qii|DQThg7&2u+Z`o6dVxFlp2zWM+HdNsFVEe3X*H4R zYUxClmu(-o{t|XGNFOdYKzumpJxmbnz55d4pgr<;aI7}&R}R*HXucoj z<>xy?l}{pH6)*3z3i-5ASjo;eM(73UB2WDGd1B0TVx`X;#+S>#(Ydzg(=*6l0Xyi` zj5|*?Q-|#M4g zV-Wwn;&0F6dFQ^h?^YE6U;X@9H0m_)n%GpiXA!8wucYhXJr_=+_v|-<@u?cWpJIYK z!72Fk2hyXT-?I8JbW;Z9*QiwDt!g{cD+$v`4=m%>y^ab9*STg4_n{5~;u8&B8sCx$ z!mm0iI*5YTLZ-C=~I71rMq zZ#@_ePFgMQ!{&?4Pw4eWMk%YmJpqTwU#)6bH(;gDi}-4Y5#c278|_n8RHyOnH6(vm zaOVTs^@tzf+;&r^`*Y&~Qi7xpd5;kX6B5=u+%^>T!K=!adwJ-;pOGKgdFQqTw^oDB zO|ZPOg`Ic4Ibo>*>VsORJ;t@DYs<#IV|Hb4?qvKwt}~VC<_*)i^+a**UR1yV)2V4( z->!nmWS<##-|JPbuUdg4`TZ~Wb>UOR&cTWQKgW_0l@o$E0RR1b@e})ul)gEbf#;nU z#D<2PNaro{mEM?oStC=Um6j=CZy>o}IV(pwoha`WAd*`K+J$R*1S` zNzERL;{*-|ZH~kfO&au?WX$PVOE$iSN=|o~a_1fE3|W0_-libb64P6Q^Tw9u(3-^| z6_76_b(20}--}ScLEDfI!p#Fttp`4f7&?6kJ7Lsu-bU zGirgaM6cMg{s&zH)IPHDM_P6=KUyx@&FZevNp9Zg4oBwD!kr4F6Fyi9F%Cf`24o+E z6~3p$`VDta@mg-3TtiEEXH(VnaG72lxcXmiS`0XdlDT@uyg&AHi+k!lAN!#s)z`i} z2!7snc0KgLfUy4AuwosqA1wdgg7;vldha!6`wj+JZ06H^LH~;o>wNddw+s*EvALAr zZ?+L0&Uleu;W-)Ny+lQueLmp}*AH?mcmKvdu3xk~H;?~f#ycLF{Rr0+d14bLcAP55 zb?=w?hqD2HRjTeTReab_ThMP=9N@qs^RLo2%)3J-W_EyMu^9gvc3w>JpGJRN2RkSq zM}2W_3d>pip4J_vx)kR}e$-PZe)7=g=4T4TXYQlubML29UO_(`^h5F;4fqOhKxub#RA^=zp# zoLhkR-&XZC23~_stofgqeIa8yc?id*oNU5lS~AszPJN1VoEFm!p@kei4ONIw)42Tz zBRRf}{a%AA%xSa|@9e>C>-tRS#liT!sp5zO*q^-Msx9)B<<8#vBDX_Le+OiG{ksn?EvVBjWkJa*-(?{2l8&gO51r>fipA`6EZ_E!mluLv=MGjmOpr z5`!rIqnz2e#C99d&j-1C=1REzRr=1vzn>h5@A_E^@2+;pMI6BS%b(wK${=sdH%Yo; z|M%sqEM%)7ul@*R{$L+B<2Sw!w_@H`Hy?07`|e1tVEvKop7&$@MW&Rw^kF!@VqVGS zFW+|@CLXon&W|4yFh1-0G??^Bg*^S7r^$o=o7`|rhw4VQ7V&@_baY2tuNlefZ?k;t zWdkXJ@auIs#DQ4b#dXgkurJP)s+pa5uas@e170=aaqaNnbvRF$eCiMDm*(?CU4ZXf z-xAIM{|5yfQu@O3DB{5z7VnFj_fdTPx08-a<<8SQgZ|z~a3}Q$C(~_6NB*-Q{7&G` ziRswzfN!+5*INh=UG$r_eR3}j`Wcm)Edm_CajLWD;5;_$ix`>v^d{)6$|NZP-j5l( z=Bm^w)M0PmeTl>MgN5gUS)VK^sqsvQHBI}#LmhU~E3b$7?GQA80so5#e&vzhT)F#L zyllv>gIr&IIERV)QbtXm=D}`UpP@jmzt=Q#!b812FXTx0E835wXe@7k0`T}Qb;hz> z&;|ST);y|2-5q6@8V`ImWclROt>{nJMtI%~_>@hY z&y*6Vw<;+k4rEHoMUNQY0KQx~IkBr4@?3u;U!)rOR;M^37I-Xe^X02?eBjXwdRt5( z4-=x!t!DcsLhBm7GTuL!{)YK!)v{dTr|~-|-nu%(13Vq719AWDQ{|K0xemm?KWzv< zs@!vjt5bx#UK!jUt<#GG^O)-!f&mARM`O=JpIYc2;B#~DP2g99YOy7Fuk%-p;wIb& zs=A@Wc_Z@i*iuc_Cu>6JP7BO8d7n%k#G|bsYu@?Xb{)xk*U_rY);JW=>=hu2Be2jDO9>QSYjQ{R-{&dCG+ zmM_oWhd5|l;-QiVJf-vQl?CI2Ol4~)#KDi7H|*KGaYm~c{GF45`FHA@r=xI+*>`$L zF~w8Si~J0INtym%&7Buj`@r4HB}smtK8}a{=X7@heeUWQvh&g~p^K}{&}c6yLB$R+ zCBy;TpFZI4-&Vlk4< zXy?g{c|B}?a%RFC@}J^frn7x!r7<0zeD%M6IL^dJ|7>U+8=V=?iR|+gGXFiCPde)W zw=VL)nHM#1=;j0bUL0h-k9@iiZ~*sX9u14Cf;hj~{%_t*up>+=!nPFbv_AN61KS6> zQ@J!A=QDcNzgR!jzKwq^k=Jzmtaw=8LZ$!yVDpt*CS5GvO&jPQw2wh4gv+woR4*dO zQv5Tgad?*H@~wyNISL;`_|=dn{gW&w{Hdk!k>-stQvxzdAg`_LLxuV9y)$;o%&!E# zx-Gu;^d{gd4Y3zJNtjo&X2dx2A^)EqiL=MLHfC3`IP$>#x=SL6=gjcErx{OXA1Efi zRO0$AT;T5UJ*7zeP|{w*__Sam%g=(*Y7~boHS({HDmR}W!_yi5GQw?%lwiEQ)M&&( zR_1tt;r1$FD8x7aT>Pxv)|F>JUIYkROt&7v0K_PO?f5$Z6f z^LM{7zqmmkP2|_77jlUom!=ROwE7YL4o#r<-AI6;S;WxX|B)8}I^D zUg~Ph?8QOIyp$lqLFn<+i+CZ?r+I+&&`;H_p!kJt)H4EAP%aA{Cu_EyjbTPvI1 z9tXP)OwBOD{)rtygRJ8DkUm*&_2W=yH!j*{Squ5(yFA4R?Jv<={)6%3)%MrSZ80Yb znP1aH6NRh}!M=4iU+Bl(H?Dfi80TqS3tWVV^GpQ~!ndIx>6>|OtiH$$a1hS2KJ)yH zOD_(*v=n6!2e8~aeQ9Dj2yfFh7m(ux2so@t#?<9-|~n{Ca&h;rOEm z>4bDoio-V-;Gn%2s2jY)VaCJ@wlzWt+Hlm>Fh-k5lqI{e>wh);_&B*rRju zQ4rt&&IO(}RmXmGF=4w--vE2xCw8Wl^WilrD39SFv-9p|_cenoYx8);l zCm0#yI8?n1=w5>i)lQ}to6`!}IP5D^Dc&L6J+wnCDZbFphv9Z6*C)Kpo$%`8PUG0b z_06d>74CmhwyLFR|L+#W>Fddw zbFeOSPKjoH_e<7mN&&u|Jo>1MpufegjjUt5I(^6?;>}lHRJV$`{#^rj^!{qDFWM7X z%0F)n!u3#2r+w07d?NNuMfm8cfpz;{DZ#lbpMK-|!DR2}cDvMC`B|AibpQ06037D5 zH7%(G|Ml0N+?)t`R&YtCDHiMR%!9h@{CM-y4nsDddAa{L^Us&zui2~Tf(*#GT6y`I&DRyDeZBQwyI@vh8DPqITy13nG&fcKhYUoH3iaf=nj zJ=22tw%(ZVk_h`1PyJqfxF%7q$OmD(6~~7Cxek1E%u)0m?x(A%Jm-)5t(ELT z2W&>2=yNfd-M^r)E^%fp;9e(bD$Mc==-h~oHT8}Y&BiGE6jV^HhsJj$M|)XrUM^%R{Z6P88A+sSfvs5^SPP(hSk|a zXAe{S@9tppvo1{s;$0n0;s@x#!*sbMw{ADag2rcKMDzKFlZY4K{A;l6=PQVVFy4jL zvhLXbplO;-$sypOV>vsAR6w1*u3)<*8SL8jpw)T{^8SdJZ62tWe2v+pa7 z_zi!$_8*J4b9_C^>sucWvDcj2E2(ZBok{s)WkdDKU;ycrbW`Gidv-$PKW_&I`Z?8_ z;!$P9)0_9PIQ6WQAaY&WP{hGor<@Hx&t2!k`No#K$K~+-8y;1Rz;k)Y7Zdch!23$o zJub1xTgvK}Y%%^#G3tis-{$I^e=Of4w!LEZgpV&~_O!0qLf>bkLvan!Bb*euQv7?I zg$%!atvLVNQ$BsxqI$+jt9{W1AS@1T;;W*0TcCtRD7lVh)z`T>22G4JBzB54e4e`Om!}Pr# z+;iu`VB#$e7vi&NTpx^%sZ_Tzx%1m$vnU=NcJw)8bK&-Y?;(f-5s_#U={+al`*)|7 zd?|+S75q3?TMoP>uiIziPKdwq7ll`wA>Rsk?&Y3PFPvmV-E3Lidj3k9<(YDyf6Px^ z&J7HosnLhnysYEU3TAhKH@DAU!;p0MU=_l{PwrkpS6h1DZ6^60c!KFQ87xCU5 z*QErT<9Le12k+0DZN3hA+omo2dIi*jK#e=+a9w=g%e#R|V7JJUA0uKh&n*3h*dtC~ zUb$v~`avW(MFjPucBAMkhPRsHBIYOA!@Ee&PFYDfJUEwhLt9S`vtt$4htkE1^Q#Bp zq=~!droS8SQO6sb)th^9@H+J4y+FVL`~r1iOY_|^b0bec{r|f7_Ov6w zM>fZnFD-}pIbU*waY`+$du)9b&2Vt|*=;Yh@7M44ndnddrPpN8ZpYK>{<80pxZlWd z_H|4l&AatA87`L052k$gbt1mE;_h{y?nw1HZ4U8l>m16neNHrvU1q}4$fFuo?NWj< zPhIo~2OG{xSX~D{Ub^jb3h#?}Ci;Z+gVi2%Jb5d|Uu9tKdVC#m!Nvh~K}g>K1IWir z*_GaX7!KNxcktkS@8$J}DgWPXqCC07t;cQfB)^WeCVSMJ$=_*1>HRK88c&-o#Y5dx zcwsF$FZ9z$t_3`# z8orOkI`-+rPIf-TIAAp4U_+)Tt}i4w+PxOCL|Icpb^dV@`R$Jp{d|nO7tvOY_;!IN z)we*dzmvZu`TsGuPfZc}X^G$Qqx)PniU))4ZY#*0@n+UhKJd~6-_hkzXLnCn{4xb_ z-1#hf=w`IxOsc$R0p|MnM6_9K7E-KPDj^X#eKUgh>J#>}StI%!AscAL5IxN^pU?R$H1 z@bJmO%K=O$E_taac^2&4wPyX;R`BC1yUCHKfLA|#-L;_-@v8So5qUSrySXqHU$5FJ zI04_O{*FFqi1T3HN6mgXkLWu8`W3^$$E(K}E`RPyp?rC^l=41wKIyDYuJp5q0r9^$ zcOJTRCXF+TTNkyRDNMR;E`>ON`kL@@S}AJq^72+&=s22w- zey>wS90Ubr{EVDj2ll1L)Ly}ReZSnD@4@cz%XU?&1bdSn7aiM)x*+vuAT|=xJPP*^=;qM!^*t{Zsy3O^U(nuvcLY6aqCIdLd`GpMMlJ zm&S3_o%rLnrEt%NcnQS8Tc=^_*H)JRUhhAtTUrA1+P{-8hm`?ex&6&lNd?}|QT)x@ z1bA>#U2)Cng7T~#V1J2hSKoDrhnvyHtS@Oo9|e8HYg&tzD8s>Cf7+K++C_E2 zzGf%okJcixqr`;#DrrnQrP-awbV3ey57v>nq$3u3ki7-AybVESB86qWILMH^5$_K; zfai)ga)Ro>zWajAsOz;*2i}#a;yz_%{euk^P=EJ@ZP7}>`Z|*@8H;-Hij|2ot{+Gq zt~Ee^d)uV;hq?j_&7)tj`c<_01m%zSMv7-^0KGc+k-z_&Z>_T@Ki>5cvh}dRK7vE3aK>LaBZx+|hVHcP#xDERh87@tID1Wwkk-vWFl0Qqi^Gn+; zNUzw0rBn8sY3BPA_uVLjPIe4z| zytGYOSuL#B=XC4tL>!EG+Zl~{|I$|53Gz^^THaC*U)x5{>W4V)7Atwd{5R{=QD%>$ z>Q3^{t`O3ma}3-Y0sWDh3xAaZUc-4Qa=XyKeV4pghp#<14O}q(^=?i2 z$h*y^!U2d6v9WzR7*DNAEu}cx?jZlUdQiTHnG&xV*wHx7aQ7Vyo=rN!%ZBXb8&dtv z{8A$}H&k>j-~if0)cmn1hI|^oKX`2^;`3B-*a@^F&h1(n*nclTvL^xZDt43OG+*$) z)5vjZ*68Qr4})aUZsn(DzgS)eZn?kp_T5CMh5AWZT>96iR&^gzz0tr6q}xg_IT1 z1GBI0--$eW|Al)r=G)iWe5YFQ#S$S|0a9`%h-+ykK^Gw=SXht8OEF7P(U$ zZT?2<-S*sijF%hP9pp@PVkftca)=?-TURw9|H8S!HaB{4U~x9JYXRZFto=)`6czLKTj4d3nyJRx@6rosxwAtJbx zBa8JS{7ltPA?n)M>X#tv;3A0!`Gm(jFY?>H`IKL4xc=nk8dT3_+E87H%4wT0hS9(btlK3woeymAiW0Q&pw+aA@7{C@22!_&Z5!C#bMeHr?;v@8%!LH`w) zH%6hI2knM9qyNGi77z|Ho%=H!$bEm#{AZJNg5o$hQV6^T|2mj-K~W(2>#;Q9LVhm! zF~^tkO2?0QxY32`M}@0UwIi$g=EGhb+&z}M6LA1-CdZ8UBCLh`A)@>GUd8%*aojh= zLESX@w|B#7d&(wlfq#FUpcKG7x$aFCU08h7B} zLC||EV;`%X037hNAD$`&f3?pQUP-To{mN=QY3$#mwC4OLU*w6g15B+j-(uCY$3Q-+ z<|t_XWd7SV zXS&$%mKT&wk_rZWutePvaRB+0miy=m*w@M*y6z0v*IsIof%|BLVxJeKfbNoe?yDPx z`e0hjTIX8$KR^6?bkL6%>+AcY-+2u!&w2R&PdS!R{MSZOeu(){J-Rr7{1oj<^`J9| zbi>z0#9QXvx%0TW^m_{nq11q|!1=Fwad4tE&mM6A>s(>JmO_aC>GPwjTEHGz&zKXn zfYT&d&03t7sSZ*NO+~$}o+%Q8dbW98t}E8x9ljoVsKewEeFg!KBy_nQc|m+I@C3!z zaTnnA6MCgK44A-xkdyMlZ)cjDw4uzQRFU+VKb_)8#B{)J7@U4 z*qR&bby!{aJ8uB;g_vl^Glqk;S;t5poKK~=4~wFF-@K6g7@3z7`lw~_@sq| zhw6n?*M55QeonHM?)ub=gQ9)c#vl%$UX@Myf_8R3$sXPU{B?3d>4LLR*VK1K&nknw z@6eHWl3EM(YFw8?H0rH|?J{m?e@Jk%F2li;Z-bz&v=vl{zF@lQ=A;v3PkajbYwR-O z+aPGyqd=BYccrMCtoMt8rpSm=&am#SQ z7ylq@!~wA5)xJlYK=1h}-E69XdN7RFc%>BTQ(qn4j9rM2ZPUK5MI0+MySv~#LGs2w zZN>-uHv_=`(2sD|GsdTtekCmav0qXso=suoUms)gE9h6$mj!AI$!~j?5nk>G6JGWO z(YX4U@LpJsuV4MU7Y8Fv+`sq&4&eNC`5;*##98yDL|8NAefi%J{}2a`MrWQf9kwdR zG_4l=sr)`K3gc}T8Rdq28~V;t7x^tg%V#jw4X2$qpEG_RbCRnI-{Z;Nk|(s^=)4t& zhY1w#o7_45f3}o|TDFAigXWZX)mpsffH#j22aVmMEtIz$0)MSC@N_7HJm2JcNB=l{ zKi?_GVmI(q*8b4Kjfhu+kurXWgRKpxEfA;s?)8jC` FzYEdM2FWJoAJ43O%9q6} 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�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 D*$AeMZmaW&dqT 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%0D^`pTtkrJn6aZh%nz+#>6Z#99XMdF=9~=l97!?C? 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�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%0D-)rs?Yl18CF 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≤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�hW!^{d0B+;Y&*^j$uE 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�RGL`e16M*@Uv*^UU6#{S1}{(86VV4 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

k~BaNG#{(yq-= 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%0A}jiXov4kI$9_lbr=-jGjc}edzm5 z4uo&mht1+CNSFOv^PsOt_22}z13o=CNORk&PdMQ2jj2q>dMo$7Gv34TVuaOD+-EI+ zuQjg(>PM-hN~1vJv-T;!*}XhcXFsW;er)K@r2CnyhJ0bqH_~fn{(AQ9ILrUV6Ay6s zUg8V=i06g;`HQ2TWWTN>`7_;F1bCB*DYhaUsPgL~t;XE?`tOe@FNk?>Dk^}yWa*Z* z^#IuQ@ZukF)QQKOUfl};d^mb)o!y4{VYk_39n8C$CEa=&5NAVP{$%GGSA8`2%j~#y zqL9VSvfi2O`Pt?!6gQ7diO;T^kv=>)gLH1Z5&2iDQys(5dXqNU?LLX@eawlje17sd zVbBPH%Mj1Ahyyr>Id0d)JAlXk4(7l)JUD+dOuqdL#@XVPhW^M`CcbOJ&`$S-H%A%=syihIb;4*uSfQ+^zao4ZzwZzBr*iFY6H^I;Ml z>MXw8`SmeH7t!K%4_-BG?!m#;#g}Ce2T<2EeZQ0rc(rJD6Vw6ki_U%8o(}o<*5E8( zyqBk{eXn9L>RFkI>03}As80U41b8{v?2Mg?2H->Sw#`?Tmp)u?VsR}}D_K)~O`-d>C56VM+Xt?oyll$%H7(ZVij-9|5C@8iZYq8DV!ynf`G;m4 z0-b$Me*2Rm)T=iycj5UU$CP)W+c0k(nYmdH^`S?vOAH4_e`obZ`~8-S{bl1R>qC7h zt2grd)(7zG^eOzhxBq&|OG%c*|H`H;-ngq~WWVlm8V?oz-q*bXZfWzmu`Uxv2v+(V zG919YOkpeU-3GqO^d9u^B=G*KcwCfO|pyueDT z%4hc6Bct9iza3h?m&HlHyacAhjK7+bPMsG?IPjo4H%4(O!%MZAK?7k^$e#+&rd zItNZsYR_5~zaAW%Ns1bPIDmb9VUHyJ=-MkP-{9OySDuI{IW{ZuDxozr+2`0ClB zwHZagOYy_HCZcZnH`!5b8^)FQ9=LY_c%kp?K!$_btV4ZR-VNRHhvla}lg=>Q&A-5} zH@51tdZMw5BfA%>lfHhaLp(KLG5LEDzn-vQp$NxI@*#iDanD?Co6dF(&AB54vTIgW zA|J%GHkJfL-iErS!Pa$2I^-o4JBA5C6G{F^K!zWR^W z)g%L)MDni|yWq!TvU-QJfN%e$dfmcr@{X#wDs~>y1`l9`o&Srnuc;Dz-LO2+e!T7)F zfjy1uArsOuF3X4qj>{7+Cn*yyhD>Ac*IFu1_06;q?C-RFl@&cHn&&)GeT1OMdUFlw zgM&}g=ii1niMGwi$N)Y%^C`px`-3N)$xjYJJ{7L848^?LZ(S${_!cjp^n~ezf)jDy zSUx)9O*k;nIL7L$rnWfZDR;h)QzyT^6tJA>iL?~Dzp?3sAL)Z;WBUL4d_TG;_MBX1 zKh38BJvfkSZ9I)QzG5LFu zE%{$jhw!r1l6b>Zm5bfDRwfm20J^Z#r5E<+xMOP-kN0wYu)VBU1o3A6^vN1LhuxA| zlp6!zOG)&~H$uBR?lkIZfaT{#i}+bzI@x%qTrXwurec`R;yhW^gW_h83gNLg z-Gf&J|AxO8)B4nq;>%i<=`(9nE#f&16?&hkOGJ{HCz5^|jS!?p7&j0fB#lpgPz!$A zD;6*~3+BJNezi+tzc;C~YwejnH0 zDGUdh2llaiAon7g##!2({5v{?>|Cb8{-5wK-}hjEBg2PuoImA@L?zK2*GuK|f_iY! zUG3?BIDq-izaiy?5a(jfD+b<0{tQn%lneTxwZy`Q&EJo!eb4H}Q-4N;V_q=z=vsz4 z=XKOnW&EtVHnxpDzYFejMZHs1%g-aK`!YS&_%M+C_JlvDo##vXAljAkY_u2Sk6H^m z%ERJryxnU>!E$Hsp8y;rRMn?!hdwQ^zcc@{Fd6*2Y*Y8|Lcl?J&|rt?N|?QPx6w8R zOD(&-JQODZ`mV=Si|la{%#Dl|02&JKxvu^AZs= zD0(^lzxX-CZ(B48xBDc?&iEzV=_T_TZm%C9n5q2eJ>mf5RN(61TEMGoY@=f~__wZQ zS3?ob!-NhR#MTw0>JNrsevld)B>?-4$7!oBLLDhJ+TsWE+cn!a3n*cWV*4Sg$EHQnxT*z`pI>ie?| z`fn-e23Uu7nd2p$SduI}Fq2aMe-({Vn^)QJ62 zci=Fc8ArL0?)k;{fu3(8nqKyG+_bPB9Fz;^-r4{-fNk?`jb-KF$EPZN9^VFBW)}Ww zEC4&djWRuZ2FLlN(cx&UyHZQOhJsFOJG|i)o2MBzOlvXb-&Vb;znLFf9o{m#re$Rl z4@?iGJby8my@%IAPl`KdH{yp(A>}n#-+}nmYy8aL<93;!w;v7XZ_X{(J_a~|dCy5} zVg3N_-#F{^J{96!_f?`L;-L1)t{`@w@74HyTfyJfnSWx8(Qd)aQXS;oVd7SU(f^jy zoPV?DjqQDb;cs6-3i-{8_*SCKnfbq8C4Ya(d?yjklStRv5k79()3_&^)A$Uddz@;` zR*5!0EO}?SXM|w$)x%PVg9@qjGRgM0zz)B>XKPMX!m*_Zcjp(O|E{@pMq(Y2?z1Zx z`O4|VEG_t6@lCX+66$cS|AclHN0TaF6Ho5VAs!Oj#>Ttfwg}P(OT5Uh*ZFn1VVen` zE+)id;>##cuh$`e@39k23C`Q?6W)V^=oL=m5eLwxTs9@G0{nMu`vBo>7;pQm!v2Mj z4>qSR2{;3KQTD07=~lEeC^R+{@<#2v^T|5MXV*4#FT(dp`*`m+%U^dUykolQ(iJ)< zLdw{oS$RDBu8bxhU}z z;NZ@>q@Jub4)bApQqiOb+E26=u{elJXX)? z{bu#3>45WWymhYAdQ<%rPnPeC=Wb- z)!qC+3-j5{S#nCKztYOf+8N%|*1usm{j8ZKLLKI3aX^H5Lo_Rn@Hmj~KNaswcE!g~ zy`8m6gIBx>@5Y{@4)j_@Zdtv<$ zSmVuj!)*rL8z7NL>t$}r8!0XuH;{gr zVMjQ)xQ1)J>Un9%nGu4iUfI%=7d&Ncx8H>E9{7B>LjlB*L;AVmLcnoT&>2BA>H}Y+ z+92e!Q%Nq`m>0eeexeBaM@;P4(RSvq*=4VZPpglxylK=G&-fr_VI1+jwX2Bb|5N;V zuwjlAcfa^PK5uA0Yi;eb3n&vLhj@r4^qv+xI_I=!E@&o&TDmL%Ph=F*Ml{YRAL0*gf{!16~1~gRDT!j7>UijL{aQdzO zHTkb7nex{LzAlj2LU`C3L+_;*N_c7J&$WCDVEI~@vYFx#`V>K4mn>*?6-mT&H6ac{ zB**B~)?~x;KiRH3pN9UO|JCxe2JA~T%zhe+`b%`DJR0+BMuw>=)(Mh(tF;jaNty45 zg8zk09m*X{$N1bh&*FJvelqcE73tOM=Y{lqfiioK)~&S9Q!$IbpMJ0f`8iXGaJrPg z$LWm%H+lK{8BJ9q1mfO{Cn63&zeM$$bQ9(^olbG?WWO+=wI2mhaHU9e>*iYJ}4M=ocKS;hT=&+l;Lr_AAc^uDUx&+^r>Y$ zy2et(_~12fztErf*U*g{TmAHlFscU!Wzq#Yhy%EVwc~FCp1-^BMi!Z|bmQZa$^R+3_Z`ko7wY5amO7omhA3#5ePq)Of!OksVnyTsG zU-OjmF9kT>gU1}f^X~0M5`Ng9Qud`(vnj?~S5UMz;`Q+I@54Z^$GF7}rv8+>4K6Z& zo;{L6{5zfQ!|N0yec~3uuj?P>{kV~@!xq|*zJ+_g;W^d`KP(x)B&eB)`bfVFzIcCx z;7x4%P{e^Zm-uMl#T&qzHUp(+6+(O!9aj^u^H`ypo3~;r7|7FY5&;< zitru{X^TJpW^uD3rIFbgc{GFJS4wLW#fLKAUup*5&+)$v#IIM)$-mO5YEWpnlRh|Z zPI;jL_OrzwbgYQ(!GWjGxp&rp1K5Wcm_8Ku&FxKnR(1>U_#kW37+k;kn=~o72>n>? z)wB(GO)*ukI~e`BBtuUh;;{8w+8rh2wc6en|1y7!`u2u&KtwjHU$P|*6W@*vAU^vY zPPpFUO?gYsmvAiWNj#V7Ms^Q!B|pz`;PS(q-yseXs-E9fmd}Q`8F_n9PCC{BZfV;J zG+&?mDF&glT>9?;2;(Ht$ud563SI`hQS`qTH7ni-F zlf_T_GU_L=>CZ_KypM6m(f#Bf*q;V@u1!{B6Y;30G1X&REh%5Yy;lqe-?ixb{f?AB zoZUquRvJGY6w`x)W5bj)2nR3Z6E2?tyiPl*WqqsCq@rtx#=bL{cW2lyDZ;v@&S@K4 z*Z=kFL@@G}{*d?j$P@inZ&gB^RAl%4$NW1i?hUi!*&BXdIgVd%oa{yUKqi>IPermF zy-y>r2bZlRybf`t?_Vq={Chiaea>%|!MYLFy^182azMxQc`iLQ1N`{%bH=y=uw$l1 zM*kgvgO&kBpQFHjDWxBO%rM>#SafP(yp6g$eK_We7bz#(nZLf8o@e7&`a7NRR$&N# zj%kq}<^M~Y2+tEdDE?p2z1o_(PQ2Y#go{ZIqz@`gxSW91ZQgAo1ixad+Ykqkj}kN| z+<^MqXWv=zBCs#^e(Z$u%Ut-9Mf6=~yZc z_hv)<1T9R{g7=W}6IBjJo!FLj_ZNF!Z}Ur(Fa463Julk)Dc(l=k-qKNK>oAf_b(gs z_t3gIa~PKuC-sQOe%e#MJGMlWYkOguVgHeWhNoA4APyu8#x9AuSp#+TfmdmfMZl+~ z&CxSXgC3M9y*Ymy`c>uSAl84Z^U-!awC}-77X`)#W+i`E+-!Du$?CoTHXfz;nsJcD zOTAAd)dk1mL@e&}LzsUf-fbm4ah>irFh3eWzvmsraPK!UiW~B_?q-dY(BGJQm}*kWfH;gA->6s{Pt=y#ecRY`Fp23v)B5IJiV7E zzYaBiIQPYDumR!#x|{`v_?!Z~)=rtDoe4V2R=h|xAN0YdAt{@80zTHSxnL6oeojz4 zFn%rS1GDiqT97xyXI+ySfqwRze}QoDw(Amy`f;{Z3LDqJ$S~rex2wqRp)M>hH+HRM zxJf?BuYX)HWBlRui|;=nG$EWzuNL+9UB6<+*pY&*g6dAhK|)oSN_bQa@P7R8uaRb0-zvWa^zR6MJ?gzK#+ul^i zeh7_&bF3K-wrC#ENB#0b&_@B|ET;4PUpD?LrZzHMnklETIE(mufPIRAuEzC)e)0Tz z!dEZifsG-ozN{_qCq9;@``~Lo^7qg#vg7*OsGnIC--Cm)$lK*szz49OYq3TL){X6I zf4Xh}@6UXn5?KQF@5#(nE5y3%;GVDSJo((g!-Fv1MxGBbM13Q9QlO~8bn|q+|CC!J z%TwcTq?1m00`oxFA2G#;`7wB)AH~^pZ^Ct$JAHoQ`+@87`Ih7F>vC8p3R~5BF^T1c z+`#*9^1)7X&)2)MV4UZi>$E-v{2KPD{SM-w^XU!f&j9|Z8aKlnar(H|ElmydukUll z2aEiA{bKp+;F3#>Cl4$>L45U}8pYcwzE5h)TKab=+Zh+xR!F1q&U>%&o5l+ zPyQbT{k7EGu0B*5DL5_T$L14FDptnNeRdu7wuwg_p3~OK%DA2narUfpf9-bQv4qeq zUH*{Q+6reXvwKZ;PtIA0yw#?({~xn!bl+F(dG)7Gkj}p1%j|Be+)RF}qjS-c{g+W* zDBecj7wR#5TQA`6H-R!9=Ox5E?YKVE+h?Wj=)r-~kPsEb0W5DQ+&Tp(mZjPX-1ptU zx?tqdUnQt#7w-Ig8t~xdz9J?b^~-#p%s{4N*3B})cq={sQvvmknC5?C_=o(A;uzdn>_lMPs0S>NLKiR$YSZ$LjwaEGk*MQzcENAW8U0}en= zZ&8?ud@yV5M8$02sbL@eTk-&pYQ9YYy8*wtb?;*%5vP$2r_4d8S7gS1aQR3{4y|MQz{2O|^$XyqaQ6X|Z@}m0 zigoKsfwxkZ%yl@8y!v)tuN}x&qY9M+QI8FIlWv6eKT1ngz&z}=yz2t(mB8XquBDIm?boC0Zz+&L2LktH~ z?5{`Vfxo_dIC(xB#^2RytXCey)#+UQ0SS$gUm%?yo;26a0hPg_0_lJF zHCW%I+Z30=_&V&^_^1H+|46LI4)o*4U$+8K&%B=?z5@9|I(UTwelJ-7IAG(a!Pg5P zGbz7!Cs01vYE5x>*MsmGXiDz`4n~Fxw6YzOAZ1K5~{fQ z3s&KMeajz9&dmY;>P6gZ%Z0jd)ZVSz5-Rl@pX`44IRbIIY^J{j`uFnEhGobLp2kl{ zqMtic`?RsVF!j?V7H48BQ;F|mW;0xl-^Jg%Gl%apWwVa#D>NZL-{8+Zi7zL7eB$SG zIt1JbPm3@1ZX*T%3U?WiK6vBW=U_GD&DhD4-ecbewKJ7Qr+{~3(k9M{!+aGs=7FCE zy#0&HbOXp6X=3MYvhyrSQcB$nhl@AAWVm}BoJKh4+DZJGrA_hO(0GCQ|DHd4ud3rZ zqzmTqeFb)^5*{R+=;tZkqE3%laR(B5a3F2|PX=)S>rDGsNLE5UaP)Zflp64tUBgoe z?0=DYsnfUsd3Bk>iyfE`E}Cu(K)oy87P0@lZrgfGM*^?_EJrl5o;%DGe(p{HU5>Ea2^=2zw`uPw^;<*w5w>Y?; zy?W?KLG;P3D-Z|JHu$t<&_i035*l_r&=^5#Zo_z}{2W(Vw;sa1SjUuQ+|< zK|bb%p+78lBHtE`7Y{%@T-NMdf#W}7;e~}5cY3$udjX%o3{L@_cfG5|-81B5)D2Om?S3-9eb>3n z{G!sGLiS11J)Lsn`TZN51L?z{4HQp5Eh$d~@$+?;`2CK7gZNT$`wXwtc#G~JKZISka_YfPG8exd}V3mZP zJj)BqCW&EQ6YsO{1;cC1y>wQGeZ7&uKD}}*M5xCUceoNh+YIS*E`P2#+J?rxjK4p| z+?n2IhfvhkcFb2Lu?Gis|0C+Em2H_s@CXy%*1%*=yFU*=O(B>f&wYfP+~! z^Lkgztw!GLxV`c+@cW&P?k8pFza_nv#TfTH7q`b_UKqV5ANz!NsGUpJM|=!bbXkD>s=h)2U)<;Qm>s4)oDXywrh_^z0iKl(IeNG46 zgc7R)9-PM-3m0m$`5;`l7r`*j30Y0V-MK3-)*i;6zc7$o*IUO zk##=>kUx^NVqZ$4e6B>^be*w{o@W`iUa@zx5csh|rkLx4U=R#m0D-IG z$nO=I(||Z=YOD|NR?h)_V(B|mh`PXQ++wv8khk8?FM6^E{5LT-qBIiXP9&^)juqmx zBm0~H@hpm2e8@Gr>4T zcl)bR{#wlKcgPhG?mJC{PWeTT~nr1@_|{j%=jE?wro-`nS5y>K{BN)+Rdzpe5K#r2spRfa^P>ek(I|Q3gO0H3>nl#z!+S1;sKt8_2Zqiw2Nt0J9-mqo zhq_DEbp*pfP25dgh{K#ce_Iq$Z!79|iZI<3fBO;Roi4R}hTr2gJ2~8`(EW3`^O7${ z5^hTd2w_}gqGPzeuT}Vz0H|S}6nD$#^51GU-Bmcyhl2sO-;W^?RHWkLn`>0@ow zqDxTUjFNl^=Pm%9?wItX5aa5R>6--PvptCcLC6cqHdzM9Yo9xu<|9s$E(eQY9E$kq zJz{<~FroK1ezSLwT{hf2XuvM2W309jZlk$*g|QKo7p@0WK2Z)OoP6>X&KhH%i#RZ@ zkhVEadj`}gcaJSs5M*w44^3W$17Xg{I%#KmJ50E~oQYAZYa5~1$n(}YG73p&YQ~I5nA?XPdeTuK8E9g0b zwE54&Cyd(MGFspuP@RG}@aJcHXFJpb4g-x<;oJpmBeO601lrf%F97=v$qU~W2ckY0 zId`C54e)%7*my;j7X-gWQ0J!m*F0c2yd9cDyp+3w_+O8k=l;dL&#&P2F?^09KW?2u zyqm_ILnq0-zcuvXzZtM=ZA5Ax4tCE7^+X)NdQ=NV_i~8ml^$0*8o-XsS%LSk&-$q* zSC>K!7 z1BNHlb0~4^rcTF@Uw3ULzHr(`@eg(*zwqM2>3OYz$HWxs5eM+^yU9l8*5vxlou;?8 zPy>w{++vbal`=Sun^*og4b-(GmcJ3!mC zW3(WtY64q_0@JQ3+a&8Dp0a~)J;A=pMZNoEPt-tt?h|k{4(%GBXBmiblp3V12l$ST ztFD_1^<`L!WV|TwotxYErbmo#E}TBa;zHP#K=y3dL2>>ggz<&^Z0=mtQB*&OD+e(B zBeO`KJ!iK}B;lfMgYfOKlWRJkmuObrT2^E|=8FL1S43dQU6Ta-t6CRtr1jyXq;TzG z#0mKS)nesx80WN=rZEjQFhBloWhXn|v#RPb>NT5zqDqN~gNod|jhNpOJ^mUXp2wvg zoQK~hO%Uq`yy(Y&)AWedmC4ShD8C&DBzq0Gb4hbuDgU-`{n%GJFn&q$G$&nTWkEb` zqDwftVk|817fVH)AEDE7MpZ0KfOg`Xw{=`%phLanX{^6)^=E;7r z!hGSb(aHAbi4;HL0S_954Epnt-AB`_p7BMpYbxPXlI!c_OMUINEa;p+MOR10BLl{B zeO!*%kX@_SQ6Bln?L)MO^W9F444eCDw4i9|y>ZAF&@bh(&c!<5vxA}5@9@0eU3NNo z$5H3LA9XGc^V*@ap8_<%uL?J<^)UVno%_v2-i@*d6NNbVBA=W3fZ*kFOoa|d7V1dL4|e<|MD+9glY+YRAe*ya4`DcMlr+z%qP?e za>{`ZOaeB{Xn_2?cKfuRa>Vm;dAkDC3QAV z_$JcrV-W{XulJ~G=7FDjQl_~VLOe-t>XyR&c?#z8PRYP`L3<8&Z2>;v2Y0-&!g#Z@ zbJoE6-C|iDkKr`$%STqHuS~hf?ss5h78_5?skB}$XznJ)8;?=~8J>;y`4JCCdXhg+ zc`_V18gb|7jd3HKms;{4O{gs%*iTY$@Qc?Z#6eQ+fVdcsI>4!6M99~3zy|}&)D|2^ z-aYZGlIaJBS%(79PHCmpdWes6x6&0b-X6t{AsspOTpwUK_X3AQdto5Whw9i;+7K%a$7$aryr>4$EoMAVTvKR*ScotX~?v;70{ooR}Q>o12>#L)lZ z<*y%-AFHy7SEpG4kQw3exau^lkD>fBHewP)}d%w29bXG!OiPf`w$Ms&^or#DsKO7oE?i- z`KPx07b5Dfo=QpzHk)YAKpf1nvA5D4RtNY0-hF>e8N|u*F&i%CW8Mh*(9Zav=#y>$ z>hO$zo_fH;GRNWvDWJ~GF&iMt;%lJteac@M8KhU9bNhi5qiMW#B3PZ_)gDK26uf{w zzYs=#g>!KLcS=grHnaQsAU{ea)OvH1M}KJuK+t1VPFK;M2=AGZaPZWzg}zpC=0ya;_3F|CPQa2DQcN;AcIrs(cj zYs5$8!+nIoWBwo?9M(} z!_xiJJ~Do7NvxwdgSr>-k+h3DM?_#pdFi1ntKVAd%*j6GX*Aw&&NlqJGSPuk>GK|K zvU98~oZ)e3cI7llL4e~BWyC>=_Wf$Tv$deVF00s>mjQm?j}0@+N4(znJ1-vVg+L>b z0MxnFAFk-3{ToJQ&Z)sXJ7hxI`yD}gE7zO+E9ygf zVUZKVNB7(y#?KXQoQ`O6;xD{EH%;nr9}c4YSN<{u9Kbx-eD~&Rh?k0G3;Ne%JoUUO zsX)GxAMyP-##Ly-j3l)4K;G&=%(FccHya{Pbf2o8i~g258{H4!j}jYp0Jw|-I4m7WvM)nnsx%a*@#eA}`Vz=1zM!!V;M z5AZlvxnE!r*!T63!mVS#M`8u{-Xy~~m$psz*^Ih;@UnWw2eKL;*!faMD>q7EoXJh& zePsXsyeQHKvOx!F+Vs(`Scso%3IABJ9zr|8`H6UGWAK(DWub?;2kAY5k^kz>?}eeCeTK-{0H2A}8w=DiZ#C?`Ers}QJrUBw{B-Af1Iw#t zhNr-%Iev%Scd+_!+z#sRG)^XfaQM-k{11KEvHs}p{ z`1gsAP{A>0d&SW{94t^!sWAZ@bcC&NJmGKw@|WBSb>%v!f8N?RD^!A?J+7&|%SWBn zu)ZM)>oqq`p8((ud0tJ6A@acCa03POx5%hx{Xk#Bi|XqSm_IA0pCTTOiKB4`dl5Ho zZa$ozb>*X;XkEtn)!&i)-C;$~JIt2wGr@#^!0MXcUcdp&Bh0?DCKv2DYZ5!B7<9qg zfA&4OkY7J;w^+Fs##yK5nnoD%>de!|Ht@ZTb^gJn7;m56K9)lJ8-MY8SUl}Au4ng; zIhn!ydGm%F#gU{PQ3xW3;P9Kju$?Ts0lGZClDePkYJ)Xat`PVUT8^!x&>R&4Hawp@t($pQ~ zXE|DbA+O>goHgC<$B^tk9E>@;{*N)>0M`H6i`~Bfd@yps)r+;DS0Y>;bSjY#u6KFn zYXDBYR9~>X5OPZ_0LRY`-K$7p`x+v2ZpyXAM2QZUdipJ zyfm0QH~YFa`E4pU-&i9cT#6VG&;C##eLj5+;h<$CJ@269{I(UAH8LKOf-yJtuSXm} zKgGYs$_xi7YoRWO@n8FSGuFMae_XT@Fpkdej`q_4eCmFEtB*Vz8oGEE^1TPePdy?Lk)5=Q(>0zOVU zD_Q7|dTaZvH-;Lh`&#GDVb={J{qZ^F>q8!}c-l7RH1n_A(G=pZ=5UI${3we1p`_2n zUAca+N!&i^B$!{s0;J7{c)7%lKdElh1jIqzm$4Z?%8!73#*a1y6hj=je>IoFK2K|x zefQW4I9$0@d=6Vzm#4PP2J^urlMvP~zDw{|3UDqWlDzZ-8#kph^!~xKIfLO(?Ylqm z!8=Fd0V{p-r=1a>dKcsOpvG00nrj}}@dV4bkGc99?2d1&Ae1I%anOMB%J$E|1W z#nA83o6Xx8FTRXDMR;pZX1w5c!kOag$ri$GSqS;}N(lM4AE&?0E~LNv=||tsH4#oL zzWt&ow+{!C&DtW2SYDXs6E@`n=&1aok&iE;J>mPpD#6c}A9ZZOb;CVXw}mzWI|O@|k1Hj@c|PD4*|#e4I3UQXAC=TKVL^XdjBVh2d1!C_0hd>A@6dzs<@2 zd;IA0I(-^{&-IiC_bwO4-u`<8aRBohIp1y^g#2|~Z)60nXTKYFsSx|ViCnl6wiocR z%`NRj2*%a@X=yeZ@Ep#1-Agne|L9!#E`>Nfe#7)V8_y9Tb$qmU;k;D3Z;}~29_U0L zW3uNG*MDr=T2@brC)yL9uj$bD8)%)g%;Yu1d+QAO&SMOY-`p)Jm>q6pi#UMw*7hP! z7ht@%PI7W6hdSra%UfBw$eRo8gA&khVi#+DF^*d7#u?z}UUN+e2MZ>P!E^cXe`?)h z_LV=)C4W4yra1o|M1J1HXZ4wlvlroVjT(Lai`$O}^$zf0iMFc`=`9CmzN~+u)!$=% zI56nC`^*q<0DSu1OsNL)L89&SO&7tQWA{HE#JtcMH+xtfUQemZ?Ll4e_xevitPe-8 z9cqMp79ZJfHtL;{8$bIYU(|-LZ6!YMETD1UsZQ}D$*r%Nzmd=8oeH^g%4NB8c4w}q z&u??<#U{Jb^F`VSub4&pqfUhU<))sP4!k*dZNsi&&@Dqe|E$W3N>%M1`;oOEBJ|ZKg>xeXzLr9r0^mJ>vnLr73jZS=@f0L>;OVhANZ)a=3NZ zI$R%>qsz$O7v*VOW~dOJbLIGn5=BD`Gb9B@(o5Jnm8Ql!wg&w#z<5W^{t;0Q{+01d zQ_F??lrpU*GXeAemnE}&F`g=~mQ=!bFH7y4DeK^Rx?&Xa*fO=++ z?92Zk&I>;LmbnPyX`nOv0_w!$IlURj0MCw#>ecbQ$8_0I$NW$q3<;iNgz=^wxOW!T zKYqsy`y)QYW8M-Dn%_|W!j6<}6fd(k5F%y9w>9J@CN> z@%d!h>?+S#=XJ571Q79>xHBN6S@&WA2nO5j_9_&=$$sa989d4C)D+lUc zKjozB38=qgMdCJ~jI0dfS;PkiI`1+&BzjL0-W($d$9(Sn!bfw` z-{3D6Uq76wE|{%GJZ8=#yLUP8884VQ3n%>Ow<_y+9}XtO%Z*1IzP#0T!iH14hQ39t8bNS79NAsAb%Fg4eip>b%d@$ZxITTwnfyBBXP=G>M06UsSU)I8lxGuB4^9 zMZfumN|U5uUhbM{hy&ouA&XbmK)htFm8&awD2Dlsnv@D^MEJJVJgwp9Y3H4ZQu zgLPT@Emz{oy$Q@m053oK%lKP5#N+NpU`m z>tkvaL-}>wQo^-k6y=L?+&Y&3xb?1!tSK(@{e=T1zm24MWzCbiKaN7&+o|u0!})`= zVTwnyz|OY~GwU%g#8~ov2cey5GsfD2Ziv3o{!<0{Y+q0!>4RXMH_VT&36~h(p7h+o zcxULgXl9S>@KDAR8z8<=w>xhNBwW5+&vZ`drVT7UD<(QIz1~yCowt3%Quy@azkd=> zBn5fig{)r+%xer?Tq)Fm{(tx8LSG`lP3gA{*}%6Qld?Y~AWm)VmU*Lplf};(Fr5Aj zoz8G@@wpiC7|%)a7OPvH%sxfZ~ z>r4UZ7gra09+?58&suE>A64>%Be!+@sNd(EP#;8hk9)doRW{@=VM$I9&L6xF+RM*^ z>(?=Ja@c&LpmK8%);lXw?%3e`kxI&D*5~VrpMo^}-52>$)^CK!KQG1W+5NU8bA99O zxjsX^P83&WR>WJe7UV|(oGXU{L(hcl-nWLXkp@&>YHIP7ix;cBelIDI7$-Ro`2gN4 zjV@6ZLf#S`{5=_QuIvCrg(b45cwm0y$A8XJGZ{W*Nw&Bqo^n$<1x(;!bK3*k1EuG{;t?V zIC98`iLZ+LaPWHax3P!=*f(geHl!Nz`}o|ss^NXz4eJG1Z++`%LpI!J@k>dkV&I{RlgpnU1svL3 zZ`!sO@oP9~IO7A0Ux#g2JlPFZK|5mxiAb|Jd-mcr!>M#z9oco^0NI(jh{aV@o-4x% zKZILfx5Exwcb?<5Ai~8{uCMqrXa4Y}6MI!p_Tj*E zwh=Rsf4gPN>HUIv*KLaDu?3{_COJ~PAK?10hq;hHUA%;-e=6*3$j(OE?O=l;6Qv^&z+Ol zXij)(Sx&lL!-(wf)S}N1tl-J$jz&-2S!!+Ju{eW%RpBEgF|h z6=Cs$(D^~KJi*|Xa@JHY$bOw2{2%bu@6M`um=|`YZ~J}}##!r1_S^*I0U3z_p2)W~ z*PHY){&KFg$su1Db&jR^#I=<-S=`)gE+C#<>dJJA(g!!@PxJfRC|-^V7|-#fxxRW& zy(kW$FCjB{vOndu9!LHlv&j(;Pxs+qW170D9^e3$Cl@^Mya0CQMV{Bh{VsEK&1O~t z4~$dynURfgbvNx;5|00Rw^lFAzY+$e?7j1xYSZbU*KCsBpQiPT+6i}fc5MbF1Q?q@gAI~ zr;7V7<}dbbJp%T<+x~sYUZ~HV*JnKrglmqRyaLM$xr#THLFeQg%{n86`t0Y{4PA`S zC)(FDKA0?(LcF_*`l$I8a{1q2EydTBWrXK4Es96E1?1O1ONobvP9@yNEE4MMS#v~x zAy3ed_JqA>YHFMq)Y?`BeEFq(6c5+^4Q~0DceDoj*h z;ht^SD~I{ZCTFM^`dwV<`Yq<4xV1$>)O!OOb`W1l2GIStI#QfT8j~OI>(lo-*6jI` z26E?K9Q33(w09KtANQbFp|lSN{jEyVbO8r2Z|`{A{{q%EVT%t`Lp`vvPHZsN3%aS1 z%~@z~%I_`gJ(J23L$4aJ+d=XmTaTo>t!J7B)(I{Flo!VM-eGmiws(aTHxrYIZ_T*= z+S%N?G)w-*KP~>hXppKFT=X^(`|-it(+<*e*7X8!hV?U%uFS zfb8fPD+Ijw3Ab>4>UP>voSAcZO~sU+XA`F%$Lmu5lQJXy@MAguh-rUG`Q=QAEU-t1HGk z3sKKEs`v}V9;d92INOJVvR^+s)&dT|-uHh7BM#2`Sp51A@VMIl((?)&{}Xi~S)dc- z<1=(vUT7az>4`X)pB80^x?$X8g=zRZe!K;}Z@d`ROm-%4{Z{{F2wA?r9Ys8e;ydnG?i#r%Q(R zYn%4x-rKBn;Ilk@om;2aYs&J2;v0^~=IIh&$#eaJrI!oU_V3>zYRVHld~eF$FTnZ; z{Y8b9FwPmzCGV9X57eI=gnZEWY2Uec^y~ZL9UdAmT5Zj%^+ET9r3~3V73yd^@-eGZNd+#*qzWjX@Z&!D)&-s71()ga-LgVfk zLb!MqOt`T2C%d1~a~Z8z&yRl66^HsjymgpQ{Fmb&3H7*z>DSK=$#&< z4^8R4mm>6=VdJjIoildQLWneN1p8w#?0931`Ac0(bj}9x1oa0pv=9f-PtPstX$6eu zH<`5XvKm-ddGz_rBWTB6NzHf-_b2W2__A7)P9moKC|`_>3y1rf1S_(Q(oT0lh~4w5WB zFGn0eo#Nb+jPppTvpZ_4z~1n)Zwwh9^xUsHivAQilEl_4YyL`IkGy3+WFkA){${?H z9Oj4gtlzZX$zeqc%kv={ipg(HJ1D+WrjpLRvV-E^4;mPuVavlw=ZZTLpRM8gF&8-! zPHy@NUkvfn#`yzyZ*!z$`CiCN{^NHJDgysa)N-~v1o!{3`cGyu=tH@myL1Au{+2i~ z-x~1YrZs)668d>q>PH^xuv&}fFWLRJNz@bWa(B>uuTcNT0e`rCkDj)K!+qR*!ducW zsw231?G4vgagZhXSzb$c`&Dv!!cLxGcu6R?|FJ}`Go}Lk=bkyo0QsOn(0JxB@`BvI zAuKNx>27w%xUUOL(qnnSxJ4G8&q%evHECaZ9t(HAs7x*o=M!hyEPF39 zb06fTJFyeb7h;^Rllqtmb|_xh7nTfmX$ema4M3dwS^cy^yHrzNE!2Sjp8V}15A~yY z$Er@|m%8#gmfyQh?PGdWwTzo@d2d7fdclf)FYmX8@UX|2{JdI?{2#;B6Q;B1`3A2P ze$z>O=$6V8s7Hpgb?Y$yGVs8n3c#VdSkBZk$Y=N4%~l*nUM*X5o9%aU+XY)~00;d- zP4&R<+FN-yWf`xYauUTl$InQU^1`Y`r&xSnJC#E5ag^qZ1~_kH{_|?&&e2}7nfzC| zjr`XcNP6o@FzMR8n}xln)XJp(>%)PvwO=XXAlL6ubQrPNStS);pFQ0In z978xP*+Bjr!|ls*cOl;D<<5_&Sx0rwEw2Cl)HS4Ub*=diTdIl>2M|}kw2D%|4#T?V zafpM$k^O=)VVo!440B=oV8!oV^2fYzWk@UA_cpODZz0+r;E}*X`$as&I+;G%`0*ke z=Ut~$sP4+)_9=*ZG5Zfc^CUbhc4o9CJmo~sG1i{dL$x(lj8}M&7x4MrGEMjs8cs+G zj`IXd7aOsCEa2CMqqob!zTbx``j;W!U)H>Os0Q?6Z^0>sgTLdRxM4iqb)KPzaTc<0 zmn_;Db@~(Se{|f^!u+;)S1$P@G@S5g>P$N81~)&m(T~scLSitpU#8uU_;+nE;khD+ zz8_{H{J8PU9QW!z9Q+>cvJG*tx}z#=iZq_ja6MXP3%+lPz0~@r9P|Nip>F#T)LS>I z7AC^?-Ny#Sdf<3V6yG5nY;B(kdaV{(FAyJiTiqhOniNpp<;Rm9HWI{B+M9&yVT*DgVJf61b01#d~c&*2~e~9Qj|*-~5d@fOVgRnvn;9S6{ZC+=hLVK4c0z z47y zogd_H(tYKQvHM-FOrW@q;r4+IjG(x`phR`UVeXvTuiW`31HH)pSa%`j#V_+Cgzr^P zWmO3KaM1o_l_}x?wqxr_8sog@?a_;WRe(Q_x8IVkfV?~I*Fe=Hs1Hn=j1rNrdd>`G zI5-*jneB_0>2;cl^_%vlyz$v(GW$_G!kQXWp{_SNj$LVg$F=EBi;AvSl^1-iFG5QAq50T+tf|*VXbeQ4~ z@z!`T74ic3afX`cLik;`?4r|5Cw7K?e8KFyGQE}$I4`+8GM;#SxD#FXOrtu-*^A+& zb%GrGo%VKaJ)q_i;(bE||K>Z>8cjPzBPW(ITYVZ zLP_5$Z=?Gsg-~4OM3cYwaqE77S5dc@TnZC1eYnG&;_%fHVfSy(G2-X@aIk&-+{uUo z=xe{RSFHl;!q=7Y6<~*g*65|E4-WT}J#ZM~Juo;T5#liVx?_?%=7q7_$I(2}n;}z? zFZh2)_CsE)81d=`!|O$vQxwlPoXKxIf8x`{8`*OyZMLAgaV*zYt8F>?eY-2+ziJBU z2L}gXmiN`uhyypb;3=JQ8IVV3hBmYoq8~e7T+D#+em7$Jf3o&nqEN~{CH*?|RbBPz&6JAxU z$=@R_>A6fz2rqk0$?j#k!hnHS3$8!l3El;D%3{3$uZ@Q8-HA9j86dy34D9>)0>{#PR>5Q7p@FFk8MK>c=lfLt4mh z3r_P{-Dev@}_5^`C%ouPpe0k^1=g0;xn6}e6?LF@`wW%Pg`f- zgD}p6*C>bdKq z%glbk{8J9|2N*B!&&5%kWJFT@L>iJm53DB~^cV}_zBzuo9O=21aqE{|EGgfr7!W?7 zo)}*e)S27O6HFPZ#nvOiJd)aJ@-`7d%qnNPm(i;C;qLYxWD2>yn8!@ z^p>$UJ=f(4q<8$5@?Y*~7c0KlhlBo2!Yzmc&;>r?x;Sr;$$R;%9OC-py%~BH;ODTe zmzxeD@6Qd`m5B34`u7jIp+85xk!JG;vg7n1F@m4Ay%0m3z{a)~vMZ>F{FD^M^mv7| z8R?o=oIeK&2rkv4;rOud4Q&TOznoDyHL?iq z8x!BwmJa?>U!j|x41Rv{ELqkM?Z}UsWsUgFjDIy>19-0A#b>Nv%1`G;Iyc~l6TNp< zIG99yFmpZe)uAK}JV<^5tW$8J2JmIBK`?(Rnd4hxc zhAu%qfcclpN8g@<``>=txV8-ax9rT2gQx=~6Z^&E`0p8V-UW4bnc_}8roW#zPp(0K zey|s1y33)inT>a#CGC6fk%=W8pzcF~4EwG^PuXzfe ztv(p?x3&)l%aq0XAr9bu&7+QSLKxr5pX<}`y;$cu8)e+@tSXf^_z>!>Yz@amzhyA5$=sbx`x`&bzsCI5Y@AR2 z8oi0)ePIOgQ^RKB&oZtL^jQyv8>PA2yq6?*Zi|=>{oU0~{Ptn%-W$~S;h?>Dp|>{R z0Q#leP^hSZ`&)c<2E7Pfa+&g;0q&pnR)|!4y~`% zQ{Z>n9l14PEdLf>X=Zk*Hk>5gH8Ozsy?P_XQPoVs?-5tR#h|$?Uw1p&3Xy*K;4tdb6K^UPe|Eg9l0N_?%oFUDJX z;w>w{aYa?QGsD5jS;yG?L2Jpt=WN`XKi9E1ejvA-<)=GATc|#;;rf%RaDE+VO5t6}qCDrp%`49|ARf7HC`>sy@x^=@DZ$lqy~c=x%{={Yuief;9L+8j8^z|8^@>b0 zKqrK~+E^Ti_GJ&B?t*?aZkVoDgSc9AUIulV(i=X_Co2AJWbtv?sF-*vYL^hgu0*>! zgz7O@2a2Qr{0I+QT#!!ugmCUB^XHe1f3IaIg`Z~(72 zzQ|rY5B}A9{JkHpr`$L$=^^$*xp}Q=eI~?P>-I}s37{X64hITdF~5zs-Ng8yVQbzL z4ZwHz&TzuP(v%i9p5YE9iZM`QVV1 z#(b=Q?H)Sv;O}aKjxTu5{CPaNmf>yS*nNb@WZHkHb=Z^gQz)%7QB~vKH@2)H9w@RT z`)_kPM~ZtddJE1~y%S?3K2J*URV&j9aRBp3vxZDM2XS=i(aGo7KS}AF>nPN@+5tU& zahR_Hi$6LepVqfM)&(AR>--xn1NEA`&AtyJh!dIUD~-gD*#+#r<1(U1ugvAs=Ofnh zQTL>$D+-a9OM*5KPrR`w|NizOzT06#I64s`e2{Ye{-;ZQIG9#vCx$qHWhMDZ9p_=3 zZ|t3(kMkXu76uoTqb@j_J0lbQ=sh4W0p@LUc>7{pG2Z4^%CWwBVfD6CFwcoBhyIE< zEudc1$Z+{RB$x1biJKR?6hZu;?@#{xvx)3_>rUe?#_`5?2g=trTp!jd3t{eqa3$h{ z<~@(kBm=Lyu3eLc^9KfTvK47yr^d;d6Y=xtC;Uqrkgq%(%&bsnr92$PaG-BLkq10i za=GQiGsdrb)Gji|}NC!o%ek@j{){x=K!qL2B&afTD&KzW2%4eHzYhs}%+_=`_azMmIGc7^E@ zKWuTPylkn=3KpcQS-3KJcLA??+)!(@g z^6Kv9Ior~JkB$wO62<-pO2_`DY`|+mq5{Lg?=G?Vi08`}hwzwv18WEe4GvE{4J}Af2Fx~QvY%1JL+i@4lZlb-`i;NA1QS!3k{_N$1ixBARoXw zW!-^+c+SPmm77yoKegMxbJH=N3c?4+VI8A0{RG2-RknvN`d9JC3>oAFwLUgZOUA3cj+QMK9J1aIRF!NSmF2*EhYBW)x~bT9u2}Ndug=9bfx? z55{}sT$2sRyYsuoTA|&tSI^JG{2(eZmDLMjmK&e3d>>**eK0ztcCt9x=pMuFZ(c$3 zMLjpU_4AoD|6zKI*7tRubEM~K@gQ7(;pP`EISI%28@qYLeHUHbI*I@eyk43fOoN2Z%@(=ch-PW>pEbqi#pMKdDA3(4(;St5u8`>3m@Oe z;zR8w*C(qyg#07tNc%+m) zzwrwZ2ThIf$zl_#U>tAqCNyCGx5kjmE6O479{v`!@gU~0^#9E`BB{RX%~Jo@p! z6zd~i4Tg#l4rG2&U;YD;jVzAkN((6O<}V{VI!BX^?e-+ylEUrFJK#*;yBYEkPi_Ob z`dDB<@i}sx(DQJ}0^Gj<^U1?Mhv9kevu;a2C;&gUXpN9egZvQrQ2y>7h^LeX2M4kJ z71uOmX3%ACwxSA8jz2~yz)+Gu}h@Wx| z$UebZx_Yjm&quGI{5y3e@xmGn;k$1`-}wee3G_NF6_F2Mx;XXg=Th*a%rF(pa}ej9 zue0W-V_v=5Q5TDGWEHi>8Ti6z@Xr~#SkK5cyG&wr&Dcm0mTxblUSs*)S>hP+XAz(L zXu#)>(h9~Lj@G#QdaDEHpSDrfgTiKRA-)hCbkz003wXqKeq7gefmIDreM;7ps za6hhXxm?jX;QhZn*JSZMlf3ZX%7bW6E$>e}>X)-loi126E?eoxa3C?Rdospdde&)C zh*Q|E?%Krgx}k>a%OC7dI_0x8I- zY(`r#{%G~%<`vJF@V5?_tFUIfl;GH-tnr8gh%1MPC#8VX59VK0&*Aufh#J6f5Rj9` zaPaBI9A~tz@$TET%zx)pCL!M%1Oj&5>fHHw_uLq- z@zS}bHGn; zDl*0KJyXht2DyWX*R7h+ha31HzUHP2@_{hXOdolxXXdTRke{QwHO~_czAtEE^@)yC z0gZc|57~1-z~V5>bQ$r)%!P#ScvY&qg60v=HZCBXl+K|%(lA^2r__Bk_RWKJh-G^$ z_P{v*`S%d|aKrv9*Ui^bfv-%O#uu{vRzr=;7!Ir#AG1WeEsSO7p?%l0b0nF67Xcrj zzB<@(k;YX&p6;7xO8m2KHRUbfE97N9tV?FPeaRZKD@mR3+iyA9cYg`Rn>wGrb$Oii z)D$T}#jtrJ5C@=Jq<20qh5I+`&yz#{J__C2iSI|;3RY7e?w%Fn84iAj-d)T5>a}zd z`k7~LMDH7ith~nJ;@Tc={$TMo8vk3CWKXXF*_01pb$1Yd>YtTXDRrRdqc+78C z&tG&wf1aMaTpw_rq~(5ZGUKmRLQ#xE@x^DF**t;c=pu^i#XIT#pSkzA75?PkzuY-3 zkZ1AlT1~ipOvX;c4;7a5Jhj&RglV&N5eIO;Bf{Ji@Yksg)2*?;=S0_iXHp?aY_#_FE!OyQ)UaWBDN^LlW(GG|{AUi5HBe^++dgCbB#_ZlNpb(o9pr zfy`(c=g?JThm|Dp?1g2-2L?kK-o;NY=3^WfwTbap_4~g4SFV&`^0axwhz~{;T<$Fe zJT6!kS*6&Xty8ng;D@L$B+=>;r{l-4>P&xcATAn}3E|NDM<)Az^i=pVITnLvrCS?CCd$OZKhxCDpImN%n za^f`wW5Ua0bz#ZQ%#(M{NeRloPvs#FU|#vZ6aCNPc<1dMbq@SCuKh|y8t{TmX^}%L z@|3gRHz$m<{ZVJuqF>X~+9#r3Y^_lh(ZKl7es+cU$btHB%dZY5|Cp|4`L{%47sbsZ zTF>JpyOR(1gZK7E#22Ez#B&e*$lgOxcb?6PiMZK^18KEk@`wZ2XERGOq5}LkM-ckx z9OS9&6PtU>K*u;*Kj_8xdHlOKOXJbc`#MTp5Um3~%7UCFc1BKx}E(LC~IE)P6&YX%kfc+F9p`*{jIE!6R8*vVKs$Ni)hJH*BG>gS}*Z%#7;o#ih!)q~) zQXYMq$m)fC(o{DZTXFipCr`+D^MflNhgs${#|vM%I`KWXt_#jnhvyd&>E-&U8M%;s z+qnJZ?l$}jAvS+*-0H)@@CBc*XaNpjeR5m!{wl~@Gh~$k2hiVZfYgsN@L$h@9e*+q zuj_9A$N0eAyTOI&Zo^snz!yfU&95eFfd4yUDu@pf7c>jef2KvnG~S1~zE0VJ>~o%& z1L*=AH^S#KGd`OSN#yztY}OaD`u7UA{$tB3eyP`oB&-*{$`_4&y8&?^*DlP%yx@J( z{aC8TW}aQ@qcqG5s@Kn_`d~Z_nz@bX#5MgU%|jf#o0G`SYtfpwlI9QG_R%_&qu=5P zcl)^c&eszu?&WL<4=3l79tbp{Jm9QMembWh7lVSiW8xiPI$f_ZV`Y<(i+ ztNoIaXTiSa;ZG#bAwFkR)iHgrxyvRN@#|SH!RiH7_2RW?xA{rSNr)G}N1zWdFPzeC zVmeXmZV}~!b&15Eh1|Td7q_pmiR+71!p$?^j-b4J)06UpJh!g(kFT&seN3S2ojx2q z+Pqo^aRBp1HGJ1 zegM@8>+MMYxOnp;OMgDW_s(yP#%?k`l?Hw~`03|$JfES{PWnJ9@YV3_wmdwqB`7as zzfTS5?{&@xnLap`sx%Mlp0^p07l3C5Jj!~;^5^a?)L;3l%|7A-Ygv|WdoK784yJH< z=`fdnL(K@+v9^>4mK(5tC&%8L{B5tz?-y}myF-_hplpJcCh`HizuOl3u@rdg;^n=d z6Cuxze+qm6?)m;XC>HCEi#;O9E)xC`3*e&Q~D(CgynGixTJ zUaXb9BZ|+bRClA1)zg;ek5it~Hzm7H+0uB!x@4@A8XLKFehD-$+Hs3}|J-dveqClt zmHsXmZ}IJIR5uQeoQyiih%Yb3^2ME9O+t+C zKXJvRudi()y`{8)>>ADW>qy|v$EsV&c&~O6caHH~0n6V;ZQOf3Z&iNIYx^L?0qEJu ztGjVMs^iNng+jo=<%#_#q(Z#6S=PK@e9$01n$-(@yJ2izS@}wlq6Uutj)Bx?dtZOT zfy{?mhDYyLyZIP@os+rsaU)fTzlyo{M{kx<+^^E5cnemiJl3*;#y^rarp`1B~eNI6ul?3U>T+ zyR`2}we{gZ-u1b^0B`{P=Nx*D3W0Bz`;0nt7I^7WNoZoZ2I$u{<3=++7<+ba0`lsb z6|>p=!Ml^P28a{gWVy+}d!PrD#hCq;Qk*^*TtIvj%AF@6EjB&jc@>S zR+v|eb~uo|JXNZ994+}%?#Qsb0PE|!UsT3}A72l)b}WSP_51eq`~eNDPSTgWc zkM7;$Y(Mt9?Q5-&FY3~?74bQS#LQvqRQX0d9Za`sEURTaki0F4#@%)`=@K~`hGTx7 z8S%p;ZvUvP0qJxrZr=OiDjF9hu0Eft$#?wAFMT^+T5$5*amEMeuY+A@Ag?Cw?#*O* zffwDKio8%XXexWpWO69V3H8gLh&{R(hgxUSCPIGuBJX}y1oKAp^LyHCfjINlD`~5x~j31lPz6@{x>!vJ? zQmav?Sgf9R7J0wt(KTFe{b*Keb~^G?&X=bNi0A5oEzZdQaz{5B;OC{&jb$KDySZ(* z6GJ}!qWa|u?dc*uO@1r2uN&|T5 z!t1khA#Z#+?&L=MSfmu`98!gfTGB7jHv;|LeVX!=mZ=l_JpI^ms&j(4a}rNz(DRJq z&VdeJO!;@-D#{bP7V=lmIWqdv9BIL)>Z5Ew6U@&JFWq(q;(n^sx;r>O7yH~OIu-r5 z@ude_e;}ST*9rAk`Qb;psK3Nr?@YjWixz|T3ost7CT5peJayUR()b5(`~4r0{&jgFYOT43~6A96(*8WFzw*^40yb zH%fu`i(XF~!q%yFv@cG_aaI*sz|QTlp1;!>^H)(`ivfP#xp0{b@Upy(dbJqV?MCwU z+&Yw}C4A&#k(@-*)vq_wxDMj_`K;#75wPI$**ACM-4R?rtri#35s%#X)9>3H!@3c4 z_s#ni+u{B#GYy)N4+IV~|L%uzo*rZ1j_Xu^dQ|@Bg?R4y^MLJND5_dFm)SY-IKzR~ zsjv>_&ue~lY`lMn@1Z(uB&Sactce%ya(#4Lb;$muYe+BL(jfe*EQe77pgvo`Xa8ro zhHz|tqT3O5X@S1X%*Ch=Kpzg3o_z-Vmm~72 zr^0-;KC$~u=>+79?vbz_3IE-Z<=2>fb}RBJUczHYm!xv@^m8~pc$s^DAMZxEFt_3C z@*q2Zs*%2}H02lH*|bRfQ6CN-J3kwOIDq-CM4K?|n`d@$@1|0SC({>B%htUYqYB-A@4Vnh1D-@~?qtgAxA^HBX$#9ITsi9Zdv zJ`;yGl5R<}BRk*ukZ#D(rRRh5S6F;5SVVZ%aTLy)d-^=iBf+|k>VVhVApdM#qW=Tm zJC95EIwkHl=d%dz4EDy?T#7{KF1$L>LE`ky?Ztu z?e`lJN$V3sOs_EAXa2jG;yTlf{FS|d&v>9!pT<3z+o$rvo5p=K*I#CU4f*vpw?46? zKffStVWIWoJ{+9YKX*j~Z~(fn>fdMV18rtAVOD7k=$0c9u84zli33_`sAm!lkFos= zSJsy~Vcy6SgZ0W-Ck(Hjh&rLs<_qP8!N0Dt`}R&KrZ`%&iTo96%kjJkJ;%>ge0*-D z$C{3=a!S-E0^(^-wibQD&JpT!}H)_J?%a%*Bv#Rd0#*7k;cCJAxaAt?uY!P zzTrYaGJIZAsGIGH{+3tNv__uFyg5t(i#Iv$MYpFDHwrIDSqpm|`c4B`N0 z+2^d^dm8FmzRO=nwtqo6SMvboExG%X*g93io3k9ze+pTL7!FFK4G9N{wxZ0xUv6EZ z`*-CDk#8#w`;y;E$C7`Ra(y3Ha_0x#_M`aXE75aI_9dM3I+EY>tc3YC@1_(#>BGT^ z7hQ)D2k?F|(WwR3QCbw5x1RyMGH>ASU9A7X&$?DNU$;x@20N$A@0*(w`tyDAl~|XNpf-w@aCVl6O@ZIpw6kAaVG`%b#vmyx@6EVH*2QN^F+Ry z{><4L;xJ6PDxLL%&(jcP{ZPWv*R-?oj{a85{Fpf{p6+X`K{#AuN&a4FO?ltZh~j?+ zcb>%=U5ZOB?p(jk+&UF)ZGKkUR>?WO(t(A$OG-Q#;1X=-fJ%2RtEV@-lL&? zKk!+4z1@mr^M?uR=p()(0b9?DquF>!5;1 zP`|XW=hw*2hyp%-ZuBOK^D~^|jQ{I$r|*@x`mxD@bbz-8{cg4;Jx}cniqG{X{O3{| zmu4^=IG_Gdh3C>A`}NAH2=04MTOuR{c=e)$BlJIjdg1Hf%j*%3Uyr0P9C*)Gn}c|L zJ6BE$`9k}_)OMEN8~)WYKaLogKzI#TptxCNCuDhls4eq*t&b`3nkd)z#LAF#%t!mZT`Fq^VRxCNelLU_8yHmfPTOB!$+P5zWN<@9Qq%C-}*If-;es`h1Vu_ zF3;nq*$&9Jt~H<7y7l8)`QsQKnnFYY->~8F#brMJ^LI>-6F*G|CI5_fr2l^DMRs)i z&~r?8AsnwVqIf#Z&D$^M>h@38!mJlg!wft6aPa7;f3#+;8(>%Xh;wz*`%` zU3)7uV1CZ{gG4Iw>a$XlB((2h>=Q@CL&d}}$_qF0CNMp7d;#@C>5#b2{P@S>1jWB! zH0Apr&ctsf-1&{t)|6M}JvqKzL%QLtGd<^2Wg*K8|0C+V<9d9*{|gNnp(rFJk(H5% zyc$TPwD-`KB<++ak(5%}k&*0ZlB7E=J9}h>?2l|RGTy&)u5*2Vz5jT>9$t5KpZi?T z^E}V%y07b;L^qLL?&w&=0kkzcpFSkL4(e#WTw8n;@Y&@Tpp*r?aH0OzfDFXJn}P1j z(cf1q?m2_~ovY0sj)!6|6-T)w{3-G^dcPK(MXohW9+^+Cu%!l!fs`A3=W zk2H&>{2-Y?{%hv@!tIvP_h0#W9Q(x-f5ooC?n5Ku3!io4;8M#sN6rVQKTkRdI8Am_ zkgotd%x=k;eG2(t(YoRsh&M~;*duAE3rwzU_JHfr(@zw$dML?3SBB|<-?jE+QN49- z`?JhX&#xY3@mA8Zh4N`EUoT8cBz&Ca{lQ!LeoM(^q!VPLDF4~}()z-jP+^YekPyTH z+}74$GS<(vdr~ij_0}5{OV4G(IM+2#fVv0}XI1VW{Lr7Wb2M1p{cE=ujz^vIztM*W zBQLvr8u^%w-+#r;443g+L)d-oV^_2IDP9%Cc*(=bop=DwHL(0&ZO8mCyOZxnxne=j zv7Og_g}R#SfBo4|RXD_;>&HcY&b2(~LvER#nAo0ayVOr24vbH=WT72Bw)bOwIEI}X z;tqJ0Id~{{NgeP)_>x>jHeZYdk(}~^&ihKY3Sz_PNp7+hrpB92nYYA4`Vu^<91J$*Dl7MXZb0(pp5aE{5f~Z zyAOlOpE;|@{wFS!4}S7_POcg8gAT91U8qYu0lMbOR2LP*0mN0R#fwbfrCaY!J&u8Y z%Wk)9&ICUu+pGy>I7rIQ^Q!~gjt}x-^%Liw{yYxz?51(8gF*Me`uCK_%%6pSn;B2_ zxlZ$ieD5`cyNzz-=VC9$55}Mu;JI6il%0uxr}O>E->iw>9$E-^ImmU1aG_DIEUjXQ z!S*-z)sPP$zsm0qFN6D^3wgQpB;LP#Y+_a&{Cs7+c`D-b@WumV}9rB>U*4U(*nSsU4bA z5C?1I`)gcvDTDQ_d22Rq#q)xe_0?8c__<|tVk+vY4HNyBG96Glz?|V!ZiXWB;|D9M zvwiE{Ir5|WF^Z?x5tOff@$+AraWw9Oc^zn}iFCa)mg2}wi*P)V*9+En7Ug_1d!GHO z8wcVN--{6kP`}6a_Pf(y-?nMh2g`w1$D~eu!20sEd%VYWnsBFS)6>z;2fKf|BMx?_ zNm`=5>1=QsriX5HzDafSj7u*w9?Bh6O#FU`>Wx%u&Sm`DYM3A}zniF1J~LTI{M%tl z<50}c$@}s5Q!&A!aSj>-5C>5AH@~hR3+C6E-pU`aAIpjJf5v3O{Z+JGDzP6+fKvPaRzmuuT&fuJNNbwgF^@ESY2IskGscXdKt_c+rBD6 z-F>hx#zHv@b=HcTr&IMnUmjLcXMB*Gqi2q~rm}X5BHCY~F^%e}R&2gRd8_Xsf$=~? zCarThETnu8vXS(79`D!qHHdgiZVmbO<9hb~#J4#_V0i)ROJr6{JHCG1jf2DAb@dSk zU}yYnK>!>KoR{QQ4m$AZHz`vh-oOdxCEPZUB4sqB%ETYC8{aJcsvL%kc@T+O4 z9>kx#mUyo^ypR9t^OUFT`T550)`Ux&P~urjzTfOSUpLgTqUW>W=g2ZlhzEM{eAj=z zaL!IV3)c^z&rzRV%9()EO}$^uDgi&{W`1~*0r{bR;Qa>~ur4d4SDal2_KVr|?dOVo zaPZ*>mKW}-%_SVDB(^aeX!dAk_V9;}1DU-Jg{0Sn^m?_^^B-!uC! ztFP>@RPLq+K$Baxnf2kwcg|73IBV_UM0K`1m!4%f$SpiT_D%IC|FrOZNX-#6?oly> zht1}s56XERoL7-_{Ztg;b@pT-J*MfZ&i}e`@U3u2%^b=L{i+w8f&0HT$df>Qa6-ar zK@H~pGbcsapaUzjY+}+8&qk5U-BAY&Oo8MREnZ@A}_ufCXn-M7ZNVm`>X)YCxT8nN%t5cG5O>9$8K-&c)2%kul==q=2? zt|hDJ{vEEwXC<=;$I5&^gu+Dfw=u8xcX1T)gJ3|PKZXgF7s{tzl~gb&*#F!GaRB>J z{3AD&fDYI{plCrg@Tg|_WsOW+hqLS%vK4t?@tr-cxZe2IN791XxBC4M#Bpck6RN9w z{`Pqm=K}*uDG&TeBmb?X{*4;FR#RL--CPzo7vcoAp7AP-cq+<~KGni0pL}u?w)C1+ z^RS~E2d=}^l63(Gz*{N#lJ#)^XZ}}o$}rw@)%VvRPTRhvW}$A?zFEQa!Q0-~mZBb; zpRmP}`B^$y5p+;dP=jkPwl3ZlO!EcH-iOIQpVtsym2kUKy%v&t9X9K@SSj$qy>C(Px9Pz;!q*@3Gttjs)3>ww z42}nmxT1bN^WoW8z=@^esDndbzNws$vf>fbTN|g*x^kQmts_kdrggcv15^ioHJls5 z_kXQ3eHovs!ntjnA6HuP^@T+%*myir_h9zlnCc@kdzzGWP(i`KRCOLZ-w5yTR6}Zx zfuDYzUm1e)F%Rdp53%l_<;`LHwxT{5S3k*B5Aa!YSkVIWs^A($eIiC5>j5}#>|B^k zbz45Y-A8<6ZOHOOYiKm(``2_HQ)|R}^7lh;(zOK|H13LK#2?Vx67CC-bQd;X_&Ryg z`)(Y(N*nQaHsAp2t?$%+!}g&ld+sU)fA%k3^1KG|+P`pq7UDs6*nPGy+)jJtQpD|- zvP#yUDf;R(MdS^!PwBmw-nETCOZ;WQ_bbn|qxgChNj&w!k90yu2-%zBLF0aj_xC>H zNcuO;hjeeawP0oQtQ~bCoC6RaJ~9%<^KRlxol?{V<{$TM1HC=L^LQ}US}8GPn;S|I_t&)jzd>|j=6;Qoo$;>_U`u~ zobESfING()o$R++Nbx3udYXw#KE-J$7+lhhWA#)4M>E!bKMMDcYp^M<1|B$nLX?+* zep+Jnmhr*!LC`M*?Q;`Z)WK)mrU^svQ>^no_3858(@6Kdx?eyYR&t(jXZbIR;y;ep znTlH@LjKD?8B9FtA5OgRO^fnxjyKN}P@guXWdFJk-8eY2_f9I}0M_j_g(tNT&t3{! zf0tlfzb}|@8gbBW_$L#1ONgqIW_2be?GRgv&#^u5gC*#nlJh<9D=?iXIZ*=g3Mlue zW)|lG?|5CD-TZvzk5I}B$0O;vGTq33ddzb{)(FyVbt!5%)#=#C1*FFdzIKwqPvc`1^22 z1{~lE@C75SkC_MU$?2xRT;foX!u)-r?siuLp>5yu@6n z-_WjbUty=Zl*nn8f~j-;V0Z^ur2w>Ko&-qKx9jJCt~`2c5gfU*th~qGvqKw}x8aFa(Jz zc)m>@NW7uzPI)ieTNH1xeE9W`-8lF*ta$D*!)NE8F=<;Jinx=)ncT;gbr6!&f`f z*?L%K?RwHH5$lPs+&DkftR{cwgixLc3n9JJ!TZ1m1&FFTvz!Y62he{hv~yJ$;vmK; zqZIsf^_KOhZF=zB#kTh|!9Ja|DaU*;Z%vt==Z0}6_VVu-v`^0@RRQ@Te?rPbhDXWH zb8H;79r+qhE@=W*{J$!4G(S4=X}Fdta`>+OPh*HqYLfw~~v z{SK{jeAwF)^IBTt$#aa)*LjySy_$9_iTnuOX9NBuR>XepeH`Umr3k{sNnY=9+(ya= zr})17)60ce`O(`{KX>EcfqCQ@!~yW=8SglDeqrW7;}WpPGt+DTX^8W#@5ik(A@1@$ ztQ;91^b7dl3VK~eHc-zBc_8acZw2H97vR}h{p?Fp}0{C&=5Tl!wwU355MctKxh1%rXTzOeVs z;E%}<8j69B#;j6zJ%w>(G5hp3#Hrr)J861=FU`MU&WKl?2elTUdtjoeI2eCUd0t3Q z=2!8abUwe(`vBo!L%az6tdSK>{MsBv_P*rjuLtnwD3K5`y%@mH?>7e1@0l(Tt-beH zGW1I~4%U9$r;Ip&bB*h*F5~-!OUXlJOTZo_@kjShqfQAN_&EdTjaF?jSiiU^-Pha| z;xYQ0{t7F^@gv2QA?WAo%;OS_*E***GyW2GmJ?nDuCK)dDZgd<5Du=xx(lw4HZLU{ z!@3B=wS)uVV2=*}eJjDzd1N!<0M?bK7wk>~-dS<1-%Fg2-Hi%LOb0!l-B)ZvRvm1Q zavF2n8}-49$e~LyFQmHurw;aO6+L{TfVw8ypz%J_e`{BsV>;xL=6aT=LcawQ|En1i z9^2;8{SS*sFBZ)pzKGDKyfI#r^xCp1G(INk!t_{&s+TJi3^v>hW$zb&E`L>L6@wjR z7iOiN0>5=VZF0xDZbLIx^hw8jB`NpZ3GH)MenmRb_OLwqS6=aXPmI6(`|leVUwXus zlK&n;6@SzLLtQA&Q{sppF0G<}%f`~D&mywZim%f)^YdAK+(pp^`7zC3yK!)1cBdlZ z0P5AQewSR0ah@&Lat!_GHc+Y-m?t^8BQXQl5tNJbwqgEvjy&K}2k{@fCD97MZ_!s6 zg3qDlbzK57RJIzj`>0bIp%A_;VeyHl)8JCsEwRFQ$AJ zG@1OII-lZe<75Hzk65$5AZJs3tu98vV14`AkvMOJ;q(u7D+W8H{&%^G<%M;}#jviM za_O(p>8J~ahnP44juVO|iCJQt1({k>odzG7Uf_S3*3d(IUSrAiL2M%7p?*EtaWRH? zOw$N{8gzk`6bTa6GFEk?uBM26uMjpr!S~f3pAwa8B@K{K^{C1rpmF zjsaeOr4OE33vqs9OVh{<(Bmt5PA+GBCci|+1?M*>J{2$=m@X_IjJ(llbVdUCt|g}K zEQ=5G7QR0*hM%|lH-r4D6+wAJRh#0!XOIYaFrh<({=JCj;m;x#2kqZIMLjzQ{z82K z`zGDzJj3;(Y^B4q%kh}z~&*J{#)3eMTP3g_VKjD0TjIS%@gD!rap{F%npTC6S|2fwWixv=WRQP`7 z9)_aQA#c9qrYab?hJ`bI0RH^3=KB%w&)kzM+fG6JXdc_W2kUics(I_CBTl!?u6D${ zAYCnI$@0PXJ9N&X?qg5Jv;TI}e4%o3G5KeA7~ygg>6Enbye@p`T;j9m-Xg}UlLAPG z-|-+^Nb&u@s||#((XxKazIWr`n0&`s!~v`yWT)J$1)M%E-hS*T^1<&F?zMnZi7m^k zwxJI2O24uV_4Wr%e`mzAYf_Ds9{ij}w8~)i*>+!o<=@=wCN|De7RQK}hVgUx&-l6K z=c8y|xYUR6sWy^yLJ_Y&pfQ;6U1v+YQQcne#lS2bQ8;7OvT&k+0@e87Q*+n`e4Yz&xgO;w-Zx8R}88 z^_QE|MZnX(zKT>=y=#&;-QUENzAtvA_{v)(Fuw5R^_Sgw9q2$yQH78DnBZLs1`(<2 z*n9!#@xv1rb}qYzMDH5Rn;%XYu=96c<80GeUTq%d2=fV%|FX%Jb;zgHVRFd3MfVkZ zA&wJPylY~3{Sb7N<_XzJEY8vl_<4j_sH4yHWGK(0{JrgUUZ=2}zkgKVac8R~3Vw63 zt@=kd4g&tVE+;-nNy_PS263Qv{#|h$9KY2_&!`2Rt@HP(InK*86Jp@}2zV)H?pY_~ zgM`yB{v$FpZ~>{QyleL!SX~9tRKPnl^B2JbsWabA$}W8o}n&cX;pU^Mun^G+$8_BItfKyubHy zey(|uHTk_SuitXSjPlh>-d{?5Aw3twqrp?%6(*$$22WRMv-(KD13$(dIt=-<@6^#V zYk&tzrrR{90UjUieHWCD^Bn2)Gza8`c2#pr#HnoNy+KTG@AmD5I32b2eHELJ|;j@tUO-@`%c-Rs|{?D)`-ZJx}yz5{Jg&MxV4bHW`ae0}YY^ha_+4l(J&dbep>@o@xqZsWzCFATPqPo{nn$4m z<~y;tL9~9P$JaM{yORHJ1Q4$caHIKci@zu!NdKa9S2qr1oWJ-Z4&Z&w#!uPxkXKC| z?Te29?;gMI^Q0EX_eMe^ckkWK1Qh!@6mVC9%FrsPv7#Ed*bKVe*N9`z>FgqK5BrM zgyH&t1LRq|+`BBl&be`p_;z6o>8rJ?$e%qHQXXiWK{{~BJi_NtP4-;TVRLA{lRlQ7 zWAY3dpSPm~jpCCEf3GVT^s67|jW_^*Y*ddvgnqOuSc~g3%Hks$wxWJH9Fxs(FlO8t zd&Gg0OaSGDTJ1r=cL^PF%X*>x(fh8|)BV;S6_^e*;r)PgxURY%MB`h_*BK4?y3FH9 zdXD2k0_x48qqJULU9w8Fe0rDOvESV|ko&CgVkY1KPN$9&pl=`WSj>RQM_`<-rQb>k z$XmBE3Q^CT&pti@-|LEw47}h7Ix_$Bu0htA7qpT(OuVsjF5%#yttj`M{&vIx>;wN{q8Sf12I2lJaMYcsZ=I?i~MJL1!PwTBwor?tOW5#um=u~MsmxV0H{ zj`>N_eG~Ch;}fc9VCzPDYk?>E*UFaWX~j;&!_dbSf4@TWhFm=PcMG8g@qJ|N_7 zyMlp3;Y8NI5qPO`mBbD~xbDHiF_Y!IbRW z4t3vt9zXu?Pd5%Uhn`!GIDm1DYU?xr)dtymoTrhpyzpCq3T zeBgZn&hvh`I-dOc0$N{4aS;VPOVvPq0Ph$6Epm$joGvp~?_&DkZO|UYtez^kWrW$L zgXkai=DWDxtM%WG$y+gR6%=1jM;@3xBhnt%3B-kB%R0=jBgYP6ytQyoFSdS=-@Bg0 z$N9xaxQ?=>^>?>$@>9if7I*T2GX%yL$@6L4->>4jRz!R-_y6jrsfxU6SBx}hw=T=NQi~A>a zZr+Pv`#%+opNv9YvnX&H%KU7*kn+O4-51z> zshB?}-1(D^`gN>V4|~)v+m^quM866~Z36-4T3Y(*5~wTWm93~>$m`4s%Ja2+f1h+5 z@#p`XNGG&7(7$I{5pSK1C;vfTCdOZbUFhdtm2CCC%=_|#q7DLH zFV9nutiw1`+dp?J%zIj%{et)A;Mdu2Q|*y=?=5{~jd;xpn=uG~E~vv$3a`r~&a5Z? z$|+;!ho_zpBBEP7gq88eHQ%vZ3^#0Sm40MMW)o6@H7?bcLe^tgzJf*zX$Y| z3kEyQ)Q&7J*MqoH+_N|t_|wrStS%dIICp)SJJ@&Q)0wmGXkWqb8db&zYRy9tzw$nJ zZZkhVyK$b`qgF!m>*OT?G;ax;M{(uxwwC!VPLK2M_c?&G#!eS)dM=sUbp7~b!iDdJ z+DU(w zLLR8xeQ*Hg4c|CZ35-7trHC3D=X*y4OjFVG`S~gvAF_8$48@HKuOFeihWP54Gx@Jw znLalJ({tT-6gf-p*)qRJHxAa+)UHMxz7H=;UU!bMOR@mI1J@xzlq!tH!sH>IziNLM{3aTnkK;@p4TfC#`_@Z_FB<-n`{ z6SvMzf_U0=b@or>1KA;(vhIk7{k=OG4gxaORgr%aYvhJ8K3LmyoALiCI3L3D{}bwK z6nB~LJDcUk^h3fmZHn_?ONuAQ@x-t5cz=`KYLxGs`F^Bj%EIofWxM5PC>qGgcJX?u z^~bK4?nB;ku)T@?LTe_6(U(Bnr>OgUVK{`|8vx-~HpJTqAqxq?@k#v z?7J0WugdC6r0!Um1p3CsGP!gc#!*50GdAziH7&G4o)CNfp+DlG=v9RT@^DMQ&l=*# z)?$hyhd>%nS6+{>(VXz`EtZ}~Yd-0(ySy)63qOz7oA)UmvQ%W7J~;AquWlUN(7ej{ z0CeHNx9{=XyY{P+f_=bCW87v-oIySqdC@!>_(1l(LmcCSMKzmkFn>(_l*ahLMLIwh z^P6ws1Zlh#$xa@a ze|Jc{P)3{%46GW)^6v2T8!RuR48JI12A-V9cx#(;IQxEA0`KSgfzFA9i+KHKNh87q z?EgnOVEIjto+H$T_@j8HV79mKjdS*j1|fONCeS)k%Nc`rd%;eflGgBAh_9CD`q7(# z&x9oZ7fc^)7;~Sk!$c@Nwqkkp*1x_m@6m8EoF<9(ca%p~vH0lv$oD6nOcG&!D-oiI zj~v$!Ph8~veE-GM_cH@2uI$3d|MBz4-dtCamCf~cI+EQuh=o^d$Olk|Y~V$h--4f0 z!&{0_&xrqWJcIKAy*|B@z#fUM-j$i?Uv=peYaH*}s^@L=P!DXi?a%Z<MpxDa!u)EkE0+PfCVyz)N7~o* zOV%2Bw((kPAN;wJA=@Nz-VT*GPqFxjntX!hvzEOWd_~b=#9ssXK4qBK;5m=k)}v6w0qEB~Ro71g9{-N2>QMxKRE&|{ zcLx1I)2JWto|e|lP120l+&`ZYF#XHeR1p3m zwvfG0cZS(@JXSzINB6a%>pdeWzRK(v-^#BGrk{(jr+D>PAv$aRH34w|=iHxH>_`T@ z>ZF+HV4aZ*F(%a;5syD!{*Up2O1Ya8%qQC0XCL)I-hEdxUJ3J;`ioJ+@%!jwiZ|Hb z4}3!N#yz7q5H6*BSX_Mqe=$cp^K&8#d0)&ibLlzs%_#oQ%%*&7yMT0WuSr3Ca_^_S-f$ooqU>*79Z%cmYnmYBEZ_-R=qU$p#p zPKJFdtdqnzESe&!W#+h=m(e({*g$wV%=@_R4kw;nz|UL$_9q?llGpV++Y#$mrff>24fcit=+r96&u)?E%XK;LY%u{loTx4p6go{B%YSaJhKE(M_OhKb`R% zz|P?Wmz}jlK6p1w)t2#=?uR~bJxH|nq%_8%vcx-q;ySOK#`oqX@}IaCjcZaA;|rHG zzOQ2)uN&Vrj^;x{1L!$U=o24w`G}4c47-o>1sKQ3hG{7f*IONC_*bBwj*vRC0rJB2 z{|>3<)`4HeBo!QiR}V$qZ}q_O_lbEj40YJqFYd!x-dgW|oyE)DBNx~@oV3mcvTv{s zhKUBMl#e0`{1@p6p4Cm8cHVoII*}xSD9IK@Q@}Kby zUJpT+*LfS}NzZlMj(EY%Md)|&-yp;R*tvGi=`ElKP0mlszCGkPb7q zr*Ymth;;04T3jEe9kYuTn4Vb>OZw|%sL0s+bkn*%-8i`P_Syq& zz(ITTM&qpQ^?*l{14E_vKwST9%r&hCeVBG?-B8B6)0al!eji`Sybb0USKl^f*y3|U zAF+^Td@#ViH_LB#3@Zq?ugL!BDH|ytJE{}^>c-K0EQ;sVDqbHrh}TzzK1~=GMT*YE zgIWQ?s>uJ@;5rgijjB=9OoIHCpsn0i0rxKyKkv65{Izq}k?pzgz38ISJUhT^T&401 zPd)f6Dtc!XFuzsl_fW!dXn&S?nZ@(#S(hk|B|Ml;_&PM4#y5)R|2p2!eK+sdx@@k% z=9#zod4OPDHa^jh77%}lw1wmQ+PC*Qs%YRK{)fF^fZ=S}5WExhN$BP`*cUNhA}1&w z<6iH<1%`vSwy#YY9==?%M*sRwHI!s_KA0+nJeDwFKQ!Ke2N|GLM)~LzKc{ez_hGrq z=M9;0BE)%`FRvRA9?YIgYeFRP7u2n1*XOSm&DV&Sb-iyl4w_yJjvySosJ04eKwiIa zOnevQr*~B`5%q{iCzto}h}V`c@O~f65nFuO40Vj2`dM413;q`;rHA9Dkk}jI6bsay zV!GtSkV@k9>J2n6YjdLb|I5$Sk#j` z+^S8zYW||FR?*^hbIhalECX?hk~Wh@11^&Y8hS~_LmbMByA%W>(&#GzT>** z9`7$?%XOqzj9~a~N~vo9ZXDbledXVD;De@4ofl)J8qtrZs@rxzTwfcTysIAbR_DCa z>%pI|RFvSoF4#3#?cQSKwQV-PZILe;Qx8e#p+CAV5+7(ktzdllxK}0d&5!o_>sXHI#J7o~sL3zKc%g`)NA9&Otnhx$t@(MZCU~ zinpLw)-gI%wi^ezMk8Vo2XGE#T*Qn<%=;Hrit{1fy_+lQnLY?QxiJpLTlQ0O?`*X5 zz?27z5ZCEPHSL%#kddYRQ@Tc^b6XCTGoE}Vcarla^xb2UU_Hh87I(6HAwMr-#rsIr zETiXKZAJQWiaX)rJ=CSzJ~S0^0Cp^~g1WhBjTb-1hhV+hv=29S#Q^UuVsD zZ)8;m=f`60PBK2&R2L(MdCPVABPD#kYKQW3Y&>Nqv=C1vJ2QLorf;G+`>~YiDU+rU zrXNbI__|Sn|No!IFdZbp_W@S%I?$?11t;%6Dd~?D4NM0rtw9`sPBE{F!+tTDku5?U z;5S|DJ42{H^4>4qKH-aMci2Wsn*dm#>>YUgY9 zR}GN&yW-lsb0OaQD9b#oN8Y#9EMJHI4vd1jK7d>KYN>^|P7pbLfgR=zndfjG6Z6io zfijHO78f07IF-IqL3~xRo_ICwTP@44bHYfs{M07<^jA{c1u1fV@Fo5mpiOwN@DM#5 zQz}XOR9oKdkk{;zphKkDcku?6Ozl`|Nj9JV|Wj=kkYB-}ggs zjtFt3EMYIgyzV>8S#+RC|LO9NiUt=(riCL8fY)4ny|W?SXNUIrP=|b99jFll`XG5) z;_^(iOL3FT0`%{&kE?9pdzsb&hT_P#mU^$G@Ot&XUllB`mrmmP;20nGZ~T4pG=IYD zNKb+BS^NsZ!Sw&@lkPyg4C~^MW?)B#sW3~&W5AF>-8iThhV0S;9E?m@oS`|g0ph4V z_gUX;z~w+ItIm3i_nlANV)Q`wPFP}s?{ynHrx-6l92gt>*)hD%brOeoY-xEtS_X7F zG$b5W%IsO~TTbIU#gOto)Ez<`m5j6^-oLkkcx*K9tG(HazMnIfaQ@qc@PAZSa6fwH z2I2tjKS26A)*n5)E_D~yF>mR55xE-hxbpkx)I1n}`AxY&=E%E}2j6?@f!__@+!=s) zuKd}9`Wk2rY-Tu3zi^TH_u9o^y04x+&BJzaoid;Iw`yI?;_5u~i(q=daxwA7Uw6Xs zOkV#n$4O*wt2u6-*ieJ4-5q|E7tW7J(#?c8*<3$f`3(9k*hDHC{5Urz4eI%TzqdaQ znh*YUS$ch|4e~@#9x?_*N`JzrX2GPJS%cq4*jZP2<{XLF2Eqn&u0s z%gD}2{_O8)Jd&fhyUy#aU$hZs{29J!nOrvxayCafAP%6v;D(X?a6eLGp3%(=;9c#M zaJdFtA1E66Dhm0_eo>fUCE6`9hpr zIUQSC3F8|&Mx+-3|K4_{_B8hE=^WL0!4&ZLsZer=7xL7fNj+sT58v46GlIpNrB5UK z`vER3gv(jHuB!`Q-=1mD`0LU0AoAy4TZ;R=e&o-sye`r!PnJ)rpIS0q+fK$&} zrFTpp*neqWg!y4w*&Ht%|Axf(eHbtF+%baXtwfmy7AM|4T8OWrR5a_e7~ILRI<0hiR_1S1BiFyYF>v*&=J_r2U`eMzoa&Istz@HaBPP$@qzK|2en)E zV7fAVY}y%&lP~tO!s|f4*e2g)It16SEdTc8=`1_9>B_v;z^&M6YSvnaU!pWvm}UcQX);`F(OEqvT<9m%#dyzj1M|I z6LA1_X=^vu)Z#kV@VjlP@afh$)}{gdx5s~Y7{vW2-D8)TKKQn{j{)-ku?xTK5GU2W zHvVF~b^n(P`aj=s|6#^o6I73reWyLyb&UXCchcU3&u7&s&WsF6uZ1hn&ll?u@3u=4 zuDzy-R{fj*0dW8#ITRra7#4_4oc!nA|+s+GfSMkr$+_{P(^kqgkD`WoI0 z2Zci;X?-K|D&atXejVY|<}%|0O&PwPso+iH>A~k$E3GMSO*A3ftVLi+Lk$jNK2$2bXK5(f?xgSBlv9DM(gOUKnUd{AskD?3l&-?z|1B{FXAF z@tMni^SD2k5pK5`()xjNm}t^M)7Q=l-8g8T_}^T_0hpnF_G2yj@q2}NGT_y+ec)=w z2ku6{gHR8SvVr&ez++v7hPrit|6NvN?J=*V6>RKeI_a!RAHWM-YSG6XUq@OZK zceT!Qq=pANKkwpo*T>WQC*!jVDZgxT6v zkN#PMG=1a);LYeBQ#S(+ytKYRoe|)JxqZj2LcMx#x<(ex6UJJJ%|bh^JoIca?*^$J z`zoN08uL~feh)UPUD?j;l3rXUAV2sXFd@G+7}0%=RcQWD$m@4`Eu%a&pZ9^cCxyjPjW3;h_g$69=K&$)&+ItDb5gJX zej`%D!dAJPl zSRn7WIUnz$KC+VF$D^Y+-T>qN6hxJ#sw3#9fAe_B}-))4r zkDT2(z8>?g)YrqyF)x&@w8}#NhTm1NAtLb5ah(Lp+t{m|tkngLzD-)Er;b<-OlJvV9(%Ij+-?|A+cyvi;V+ zZ-;(has29SAEpn2p6?QH{_}i8HStlforuM~^#=0mE8f>tk*|Zpc^fvLd=?-}w*P_qKP1GLA#XU(ns?FBc2yeS~S^z#Er$5 z_S+D~*Oq&o**a%zwx1CYyO+7_&bxZY5B z&;r-(Wz?Sdd4o>bC4Fu^ke43L;+KqB7HA{xQecxQ^_+%y=x{kk{K7>_GZ-5wEvC-HrUMVny>bOFN1~S6*+u z!GfN{)R=H1W+J*~H$bAZ-wFMMHQ(9#0r=@-fkG7MD}$4oq4mf|pQdkT^&=$nk1`x2 z&Kx%mb-STr?!qXCnRSIq-8e{&jSoW{Kv@>I9^V_$j@TrXfVzD_ zseRiAH6ji|+zqWTk1d}rxAc6VBP4$ z9+^1M2c5sYKOM)s`XETo4E$*DFm&p6Kdfg0Xd11v(zTd2`5&8GEGudH1n{?zlD;ft~EqweS(LLVx z*?N*t)wMIzc>XE<_u1nTkPqPg5gk94LtfHO)P(b5@Cz%>LcI&vKQpoQQ5IX*i0M#9 z|30ykutVM8+aKz^q94a}_C}ohzOvlQ{5T=*1o_WDmGB4eNm(8~A40n2DBoY(5X^Ai z`EC{2Ka!uf`9=F{qF=y1e5Eg1Uq^J~;GN$1A5#GbaE{GEI;;uD+0#&U8tQK^dF@7w zcZm;XSPxBYlr`A`1eKK5G}6~!uVaW{5bKtiz3DM zRV}i+LxFIiXelrp$oHb_fyRUj`M1)#5~h<|_ClD{8MqvtqpLHu@_=dH9wG%h`-5l$rLiN&f7g$nlG&(RG@`?QU>uEmGS!Z)BRWj0W`9?% zj|}ELm$Wr$Y+SRIE6Gp)Vrbl_uf}nJ6H;sF``M8ccfoEn{8RghI!1_psrNO+L0z60l#pJ$#bIa<-QU}S7Q92H^2 zyB3=X5A#DP->r%#zb+4A@!4@JM%eMy!U1sre$34m(}VHVd}co91m@2r6D!Ri-(Jmq zmA)NxgUiS9#@KKA)rW_P-pu|3QjhWPbj~dpS%v#-JO3d38&BpLLxNalSO>6XP6 z#Fu69l%G_2efqX&ikH|x8t33(%2Tz`m=6KhK`bt-zw`49_2Wdt_AMKkqtcCo*r}#} zrvMHhe~na^YeHTh5!h=T@a)sVV*VbK=5g*x}2fR^_ zcly|WVEQhhk#I2ZeF5X0ImTDe{XrsezMi?6@1I_1PWiRB0pa)We6sJm4(SOaJ%Npn z@id12{DCux-|kHi{r9kAX3^J1eTAJ1HX$Ft{l&eGqu$DT+3P) z*^KwY4yobz=dKR5V|n$B=pnnGwT%qv16bd}I2&46L3rp=A^kdaKG_N9nb~tZ^QHKz z;rkXpn^J!5!RvKMx)Xo>wh*IXH0jwjruJvz39iuYIB>{AS(6D-2 zqaOIZsPKa?^1;UUF1d)?=U4Vl!F;f5)*%PBjx=h>8)l#QkbaEUbgHs3A9vjFI7zxs zjO!|IUJrci42t)j9+W30OeQ?<=JlL(#!{T#;dSLTMhWAZ?>s~tz_3butdD|q1J6Sh zVJBdm=Ps?dj{WB^R^0yIcJR0Sy1UDC(Ec~WTf8yej9$(7iT=thkW{Hd*nOK%^}oM* z@P4_))ED6K`*jpg(6<$T?vauQjr;F;%GN`FDy3=S_4VPq?HHd98}N$Z z!0xCF%X{Hl3z&cUdsI=L3gquOI~R!9x{HsMh{e-BD|(-3%lD@>hY((FI1t}v1re{^ zwG_!uY?GO#){TRQ1r-*E19;25_08S}U^{mMJNlvMEf(#Gs86QTan>%r%ZPb=%I47FoQOAaUFUDIK_$fCod2}}p z1j%Eg5C>3aWYmu5^`K`C*((3QbGYvxo@{PJo#IryEfl`jI3wE4_I)MqS}Fn^nK1li zhXb=SMfE$&3kh@j;dA=>9^B7xc<>w7iEv-0XNs)I?m1QzXNJ75#mR+)*pf2Ua=D=7O|23D#?nHf%^6OAQFzC~PbFOLcKpnW-ZITh> zi=h_^C4B%7miK-&N+1syWKK}Q=WrQ5{}jXL%G4{Q6T^K3wr)}BL3W4+()eC+B!Avh zB7cH?EbeN@5N~9g3BW%k#*X93UKL}}m0b&m4K=!`|8s*TtA7BvtG_of4RENJG()F> z@u|kwU_FqJa}ADWqkmmo-p$5*8uqr$j;$Z;o$!stje5Hb(_hsGcCzs;ui`l9ZAar- zrcLn^%l9oyMUx%Vc;AgB!NeDxy(k`wdXnFVM+p6oTYZ11-i?E!D}}y<1JyzEm(-)) zk8=8o?@3o*zxuEd@|a7Xm`#z$SNGaZ<)V(fE>mxa-~W)6a712+mKpS$#YwbvKa9JC z30ftL_bW?}Q@;NiOYwD(*FTsPO7?&BA$(NweG)T0D6YPHlMXZIeM*o`ylZ6`0A|?La>ZuQx8jyztC-gpVHBqi*IQQwMtKX4f1Q z=I8!qXPB-o|Hg3;9m2-{(}Yztt|1m=M~~SQ|3l^xPHt+EU$5v8p5-SJZp5b&-<}&S z5^|jEMDCaMQ+^n+`pOXZ4=!0@AEEwwzGm#b{?WtP;ecP$_QTCgA4uLxD~{j_p?9Wj~j zvy8N%c#n*t=Wwwj+**fHJRYzkou(fs2=@nXL>xdKu>AKf9OC`dxd)dqFHDd>)^9c7 zH#mP~#10(q=-@;%%xC?tPbVBKKiD66VyL&33bW56qmhkg|KnE~9wungzTUpjmk01( zt(?x^i#a%u-}dl&-<`a_oIK~V(~AfXDyGB_s`G_bPxpBDHCOc8lm6MFPK5X5+A9UD z*W>!;v1bFu{h-euR%1S!;@igfAZ7fsxfnl#6Z_jUoftCYFB|7%g+46Kjt?Y#Xed)j zx_Lk{#nD6F@9R%rCImxo7cN65{MvpD&>p+iJ=ca$kMSqU_pIOn<3eCVlW}&mqEVWi^fGF5Vx)e=WuTya=)j-bW*jv}AdGm(%?H{&YY3xguWw z;HIZ2%xQu<;sE&m@%FnbfLDJH|NY_w#!Kk)9&5ml>k9L8cA!o?nX*!5ZHUfhMa5qCikweed{nkbUySx2k@tLG&ZuK4#LFfL!TJ* zTg&b5*%)UXU#A(>!Kd!^arVrX!0FIIne;bacf0kd_JkJ8}I+yNdW= zZO{FLgG(pKe;H}??>#oeYl9MrN8J_@4yxnGpE*{Pk4>ZKc{bWoUJ*h?c_a3}L45$@ zY-N7h0mlDB>aTw%0FTL?i=@{JB>9K%Qja8uoa!|i49KOvM zd3gFZLwoRZhvh?O+TT^XnC+Vos~@t5@{d&|#fSb@ihny^53MqZa9B8o@o(ag#8Kms4P>uG7(GYnTFTFLLG;|JkwVpomuegbftIKGL7Y?- zuO3+iIJNb#$&7vF-e%gv=+`As({pyB( zLE2Jx!~w*M!u+fqF#hhbDTQp_IPjO=dW@f5x5l$RcqPYYn;<^7)HvI-`PP_4y_jGB znDs$Fmy9i|W^wZ^w4Czj!*mhDpR^0%b^K<5@q_0winm-ISFk?A{0r}OQD>B_iXi{j zMv25W|C}2-u^R_ZCye?%8E~*YfB6B?QpBslkp#0nfY-d-ILjvF|2Da>jmT%llNaV; zTpj;1*jx|nzEzp$h&XAl=#pYMs2SOx<+lq^jsxaH#_J7FQaqPtk$;~$QoJ2XBHi$b z*XM}g^=Nk3P`-V;hOXD!6F!>41;eec)c88mEZs$mAP<$#C^xDC-dd}1Qz{(2IOG%xPlN%i$QwVeqsGwg*v>F;)Z|9VqDKq@c*aRBab z%zCsF{PtF3`6;FkEN?Z%>w%qiy2jWCFU=}vqbcZ{_6+G5d*s{p@qZOnIYhHSsa@tqh#7ychOk0Y0*wkuwlU-030P|+<_XM)5GLSxpQeFE` zupWZb;aA)Edi@e>inCHr;)O*1K5C(>kpDU}^@_XJDRva1+`6bSupddTgLLl-|n5qrINa^()&Z2wk#)nnNac zPi~#Y#rjMEz2p64)FO8^zUT4@#_TQ zfk+4Xy|wD14TTo3atH?(bB7y2K8SkfzNHFyzpE(ODgokcdt$3u0qVit&zzm``@0QK ze9({Y6iuNe3-oh6eO09n|Ni?~*BI~o8FQ88uk%-eNPodTX~wtT_`bBS0mQp-jupRG z^YkHqmzfcsr@K=ey7GN%7LKAqZ?{P!Wbf#!)tDzD4gg=9^NtikeCR1T|E~f0|HQ}X zoAkhs3p=;uARf+3+_OL)5I=K~aPZr-H^ag9Cw&+%d|gNNv8IlxBplSl5x>gw_sDZY zi3k2_QC!_zCNMur@p+ddKSwxl3i(^lUHExRW8bnV-8gUw>#sq1A+_owI5aU=U+|1TQ{X?yZ_7eD8uU?prm|F9z)Z~*aQ zoO)|H@TvWxk0n*$r>}a_0g0Fw7Me#EAis8|ese)T_x{(@7kMkrLqZvF5*-%!fz}Vk zTHRoIa@^{xq!VqpeSTUL-xuey@jnFhq#%93!Po^1FUB9dDgJgF32fcz1=ovd^BG_G z{&NszZ8ys=SGuczI7~Z}>w|317&S<=&Uti3>9p#RKfc}k~QAzRRno9op!0QXaek06t8qNG1Yc}79WD_nh zo{;e*{*tgJI}gkgb>==FdTMGn4%9QWPG|xj!1`92Tu3v+{o1dSG9l zlX|JZ13K^bKg|PwcZ_o}v}1X9j5(_p-!b?00La&!8uIG0c-`{nY=QaL<;^LIe^*|o zIAX1Ud?)sf*X_vT=dy3P5dZJ;q3e5W>A7@xpVxW|QBBEBEyMxzi%I@@DjNKx{9^Zw zDzIa6+))9~z3vRLFDyWu{u}sWDb5q7{TuI#{yeX~O$G50Qlp~E{5*KrEr!p+b=Qdx ze$%?aKi33`qs9M^sOt{I^6%an8d4e>+LBTUkx)Gk*?aGm5oHral#$Rj5|K2hG{`1- zRK~ZGLQA_eL}{lze&>A7{r0< z;YDID>4o=yD`?!|wxdAMGAKiLeuw(vg%SG^2hd;0-I{$Ac}Q;5lzPBSrVY`yv$Ybkq-Gjij*QA`iIQ$!gb+>{isIvL_uDS&#+%Ce3lKj^`&KZ*CD zep$s@Hja}l7esaS)sx5KbygvL_~uUETiOXeIprpcDD~qY=F(#o!~yv3QSGN1Ar8rt z2G36bU-fpCv^GGTexL6SO94Dfben(Qhqx`5NMZ9!5rwN9`S_f>AI35sXr3&F-#e@C zbZAs@$qUm$EJ@Lh(^;Cb0xO3LpLj+QHJ#VH14uGAv zWvL}Vod>xGzpezF4pWd`uoLk2>#m6)2cBOr%YLgnd@tobQr#Q%SL>zQEY#n=XY(Wx zC&7Ei++okZwy=%y>4(hiOoy5)H&VU9{ZJ^kA``iLSYSMp`Ry#Eee=2f9@C;pN9|0g{R6o9 z8l`oVM_6yq_{-Lb`3#HQ8+q?%I0!p0?#F@Wlk4Xe0uJDYk0*MOjfh*d+sdcm`4f|j z9yRa*e<_--c+Ps)vM)o}I?(;f8IH&Y9wkAJ*q^X#;)|oNNN$!8WBTx_mF^E&;Z{XB zed9oJKXjyg3AlY0gOqtJzu{be?4~O5m?766a$ZV2#<%4e)*fg_9Kbm(y%pbgLOsc} zP5533^&WVoXY+2<-{>=~IjFPO=Kl4-xI_#Ly)mCVZr+!|{JK>xkYx2{E7HOE%KK_7 zt9!wnXy&VG!nyTO! z_tfYAn8)}4^0#Qus}ptL7ynhL)#LMpoI(_@_j#L1*pR<+D^o~6>fyzj;Rda!PAr|E@NBrKQ)U9 zzr8Tu^L$)Xp>jVC&ehE@MI0z8NnNga*Z}z&^Se2r2%f)3d*SN_ zZ2jNcDf^tE9fEfajbr!8D1C$VHRz`UXNxi3{l;rxd|GwAl6bYjjOx5>A@S}%FT!t? z7UkK%jqq}H5xrkCw@$ESJmJ{eiq|x|eirJ&Jm(k_$y2F-&nq|o{;32X@ZF=*F9qTr zFyPxWrVG3D0#{*tM+Q51V?A9dw39~N`aWAp651oV-t6REmJfNIR@T0!bT<(`FI!Q) z_|v|HpKwnr0mYp9vrk+}zr2ko|0nH8cMbH&Hyp9#MMlrPD{KYpBrck#A|Jp!?lRqB zr-29Lw#VqyV}8yrkj8rqij-P~GofGO9er`RBjO-N!onW;zf1aY z(7p4>Pg%eLtm`thdyo5_$BeD=DF$8GdG7BwHm>|GK$P8g(=H{Og>^5Ve}>(IX5O6T zi0{$$&37W}FIHKJF@4zC+{E&G^#Z30PeTMa&XnNk%<3*O-+*xHEJ1NESV8gDf2Mt~ z*=kgO7GLO|v`!^K$j;z=#DREGc;d=%+$TJF)$xCo$XmZZ=Cb?4-i!Un0e=1P?(7>c z&;z^KoBf$joEh|b4z~Z#NBV?=SiyaUH^cF5tUp~|yoJ@jr&}1c?_gERtKAf8cUwuy zfAVKK@8I49^0UD&=-y%9(WGmgw`+ASpT3sm_CVcM?crv^!BD+MsUjSgIVEdZk3Rfj z*s3(pt-P<^lQPi<-i)2?j6Bw!y~ZANO~$#wb3Ed=)1+RMkAA^=NIk1(_rVqPoX|J{ z(|y?h22-B#TFTdIPG7HZ_g$#bJ}sdZPvU`n-2Df09R;uawt1VY_TymqfVr0u2hfep zIoy2_>t=uYwi4*KD2TKRH=-`AGz!OkjZ!{^8d=!Rmp25sVfzQBlsK|DCk~SU{8&_r zgb^QvXV5+MqN3Fl-(hR2vo)RqtjE4!JJQ(;+Jt963*!GF8pIQNhQtG|OUVzd(dKQ< z)0v6=M(5#A@^h{-0yKv920FC&?gR z>1H@dg3rmyTAT2Y;oys78>_3DFI%V|xMvgLV3-26^LS_SyYh1>-i6lmy{Ie?+bem# z8S$~O9PvV#zM%VCdxLD?L-h-leQOa1ux~sidvY+S+oeJ33o;Q8 zLi40uF@GAoP4=vwf{qUdk(%u5?t`wy+DAie5#C0z<~rFddFzYXVrGhfqc zLHs1l>DOwGUwcD{M>g6BUdU@dJgnA_g9BOJ<%k2Aw^K@-#QL{)Rvsz^oHkAO9M=f# z-Bq~y6I-WjGsuSFKtUsgokKR*^Rgr2Bufd-C1m+c&59{+^ zi_c5@aqug(h~WU%aoAVgx&U#G{v=XZhPuFeGNTdnS9Ns2MmE3ny2UFCaILqi=duSM z-p6GA14qR32h;m>&dBov=)kaetDZ8@w>zuuw-mlJ) z$9&IaZeQ$BdwL(fub^k|*pY|>u>S{!9Krp9D?e2XtpYw8vrj2m9RHTp4Js;!dfHvsIj<3M`@Hve7V_$Auiz{kkGU-J$&(L$=j)=Ej!>6*i2#68+gxX)_rq60byzz2wl-wyK!J`)~d zf0E(gWcRIwnBSvwBP1Cw3=QmL{IpWEjq;Yfjr1tpi}08`lj^;I>u)XL?wK3K?Ypd1 zCR_x;{$>oYVll&&_k2U1^RKCeof%KmFAjLl&Od;4-!($tO6zzcmu}pNVf#a@u65w~ zC}pdL+GQgDyM-Ei!1o=?CKj@D?9*HSOhFt6^QVpEqmCvNU19!7tf-RmqvS_8c;ZOy zJ7op&ZX0)xcA`J=?JpO~ds-;r;ea!>hq|5MK~xwogV&D(#X06#qzhA|H#ygXK0Tf& zUtR$?eLK}%0sVnQeO4Ho*AJSpJ_~SdaXMVW3-r1E&(=4NeE4_uN_iTmbH5_S^x;Pt zjni$EIm^TGF}(w^l&?+P`0Wu-&KGd!P7LAhySQ&e@lUZPofx%(`!o{-URm6_2XFw- zdoWrt7I^AH)Q3e?fLH#+sl)aG{$iVkm>d8c8`o=%59Gt=%gi%)PJ+eLMH%vdlX~f` zagud7PIq?iGsa8PVhINgA;~PiQx9yU_Wfi-JXU2(c#Y)vAl8(8!e33|t<$=schmUf zeH*2(F@mSn=OwL8V>9me@=Wy;?SZ{jU^ zZu~&akK&%mt)u(s!Mm$2U-pXMkAu60PwWu~`N4(PHk7gb3n5EeE1{lVW+y2&;y991 z`I8*fuU}2;@Z2QvIq&3He=N?qi{U`^{d=0f>D(`d{2P4jIL+%j!}&<8p40t#=pV9v zD3JcAa`!j7FDE{Od%KV>L^=lW*m#1N5BUQr8PY-6ADvfJCZ7g4fX%*++Ld@-Q$uR1 zeiizcq5o-T0shX8dr6_ygE=kQvu_)JqLUMaY*E-KWERmFtv@< z(cZ5duPO&o{Rp`IcAL3*TQgJY*Oc)Im-;%C_gPD*{bSWB?t==vk3Nw(gYG?5uN}E! zH~Is(KPo7?yBu(M8T831lMn5GWt8J8V0}(M$DMEP%8f6a;QGP5 zQM@~YUdyOy^y9!R-tGMYzyXX_WSDn0!Z?u2nUO=Qq29KZ+5irqe(pG%=3@JrZU!7c zyUtBFS&cr%A+y^NKgV2pD2cwIQ@BtJ`<2OQCuqEOXh9Y6zIr6_myrqaZD!y?rmQMadzw6OUQ;iYr6h0 zK7hOs+`2y)+y6mckvH;I!r+ia7+-t)CN_@r^Jnl2EW6-Rr#6Pul6%PljC){u1pBOS z(4n~Z8xcNNDia@ja`y)5FCu)K^NH6&7ZQ(Xs0xOdr@y|ovQxcDxatt%0Q`=?XlNz0 z^G~ljzyUlbM*8}Gfi2*`g^UneMg(U1xRi?Pev_ z5!`5de?&h4vmT0{NtjhsHL;l>YAx%*dka_7HUtflvQYtOrRDL;4nihdlV)h%C* zIDpo>c_OU|cy*`FDATjRM;cE%7B*rWzs6oX2>QS7=UDIukl)1RL2H075}Z=OAHe6S z2Q{-0&*I)q)L-}}*UotBxz}0Zuh9X71K}{LpIh9$vv0U{sh>Ezw@Oa>glxWMG>vB}W>qOIGVsvw^YT6WF*!T)XTS)|K!L8^RB2|MSJ_N+3t={MMX4i)Fd` zGvMN0Ksec>C75YpU9zvMQ~mwkhEs?Gm|yTJSX>3|{H)|ye0?48>(lA84j>M~&f8`p zPLJ;P^+w+kbPfCg@~7o|NrnR-8R7$nrLD}5URJLpKbjv(c>%x8_;ch&>JL`N39w(3 zR~<;7&i;hg7C-v^cieng!dgMwj+NpMHT!WOtoOWqKHvcUd*`kfG(me;M6cXa1H5$i z(G{si@H3yCM(jI;x;kpAM;3hFcWcLPAFQ{>OK-Aqq&e~jq)`7NM`w!FVcynD-k^Ga zTg7Aj>>*(ShTq*Ta0DL7} zvo0O-XTUS{X?7b65eG2Md0@1AHRSK_g0+!&KBaNre`|9A2U03M2ALS&)kh(#5uaDz zd2E%QrjVi##B8<18Cj{(LuLHsgbf>SBm%Sg&`J{HbX<`IYs%seM;O(!bwqAl<)1 z`-|V4TFZE^<1=@^kT*AOTF$Ne(DW9F|86ot9Kboc+Qwb`pw7*VUoEeK{;h0A$ckL( z4+!lknSB6wck1w`pVxxV70eRa!Om^im-=1_@f%!gEeY+=(h?Z@iq(73z*goDyf&r@ zP#5Zln^QX*b9{fBTgToxo&2uzYQp#UMXWvxU>`Z^VdN@qKVGC0&vhYOH~Qt7y5+3_ z#}Nl`zvv&SIK1C`^l4rY&Np^BEvdxwmU#!e)Ue;6bjI9&4aTScc8fjM+t4-bv+(Ci z@A5_A{b1f^_D#kE%1y=WbKUWMnB`#JV-wNUSgw#a5u|!Kpem^$%%6na{!-OHa&By;Q4=YbV3dS-$s3u zn~1v5BHUIS3VhLWuV9NeANpm#=aw!8-H_RN%Y)4~en{2pX8Jn%IE^DcFx$iUDRs;i z0gf*T1#$anuG6|SiwWF0IXAd*nkPDh=ZUU__e?F~x1Dx^b58OaKO|Myph%`?Hg zn7Qq)8i>#6ZK78_*2|Cm8xBESv3&swnV@gg?+l%NkPkf5;#q&e^U^vg)Qdhv-~;4^ zkgyxXr`i=1pXzpo-#+Ixgv&l|eXqzy(u3gX6wlOf`d%PT{Y(SyzS{bK%P(~#uWQro z$3gyr=9P#87 zKgswYw0H0v<`a)@5kuba4(z(g>gQ4#*Kc&NrS|_7PCWYFhj7uro%6@@Bz~B{-Ag{v zh43KZ$V0ufD1d!sWk0eI2Qa^I(_vmNpC>XUa5$`t;EAmMWoUB<^1HpRdhh|Pw=Ja+ zVVKAL8WG-nNN2BHf-?Gpb2avoSa$`(XZP^1-Y%^tpD6h^mFf)ox9oY<14-}U+;_k` z?1Y#=x&ZgeBA>LJ9zc3G$cpO+NznVi{-$4#YhxP*yij*9Y-9VKy}kdtJ#f!CsH5U7 z$@bV^us-HF<1p~8UdGc|Y+O0`v5PO_H*9@4|M$V9zjZ;x3x?djAs24{c)Nq3X}{qcN&S8t#E4#f)aTV1GtpXPP6{ov8BT zIfxJ596tGj38J?czsA3*B>r++N1u_p?0u@OVkvKWJ+;^#O1udAe!B|cdCOYTUlC2p z^Y{Rsbpih+;sA8uK;$=u1JU)c{s8Wkb29iz{^i7*9PAfBa;)SINSb)8U`e^mnlSs(z)gd#FJ_4#J(Y-hiZHzfn^3{6*j=yHzh0 z@jP9v+RD4g2d(!;$mb)kYW@{v{e>kllY>ydtX@RZI8yz~xy&DKRitrc^{_jPho;V| zBE7PSCmhG~DQ^p1xOUg0`s=o&_Zg*0zrWsy^tf|5z0ZAZLEhh-3D{o%KRCDVW-jp2 zuAxR(5eH6{z6FONj}`aS+H;`pViokH*P~u-S!cz@kz&nERge#!&s8Np*yQ_$`Kh&! zTAA*Ac(<3uH&KQg=laEszkbss{yMdk;{L&nC!digT{xgZc!-lCzDrQ#8D710*;eeO zy5t=THqQjdQ1gXr@ZJTxzEEWxM{0`MvE>Nr{;u1<*#3o<<6HfaN4w0;XdLO~D{0WZ zyx@YPqU>{_@GZtqzyERT5BxV0A1(Ezd}XX5ow&iBQ)+4{z;TDHtN*Jncgp8sZNhg( zh~T``g*%Og{Wyr&vhW7t0QTeSd|Zh8oloD&zkUJmYHw)LgzHodL%#gX2cAeCU){&n zC$*?{yRa-lvNSOIdL-7Z#?DH%j);*`BoOs!{K`w-u|2n zCR_^5q53jhMtOTWgU5htpiKNUd@{XHvYY_lyVG$zeg9|JJRB`XCya|&Kb(iWCeu1b48K=eAa{@H>6-ghEPaA;>BRS2odxJ0ykUPM%im9B0qTi}6}O)S z&Xr-jtQ*RFocMHos>fx4f{}Z58c-Ktu~?O4X%6V?`74()aR0*Xy~jqQZq3Y2&d$L+ ztFC#?a4>U_EL(pd{#jNH^`f%})+b_|3KefzeY{oW)+dH$kzP5)5bsudP`&Zpc&s0h zZ9{Q(+mcSym{I&NUygoG=7K)`osp5i)cMW3?x|hsRdTz$5C<@CH){4*yyr&mK*boG zXL^2T`@cMh|B|?GJI*)BDBQXci17`#ox}J*D);PM{JC>&6s=SJ@$wGC!GI1LKUkNN zO6_ayNp&O6?H4q%XZhx>4BqrO>#S1!+4@A)v;HB7gV(oJ*!nchT_y9;@8(H= z8C8ckKKHDH@#ccL)l~OW^eEmTfyDnXzlb>Rn8Mw^!Vl)Lf1l&dF^*e9KGDFE-gh*d z!+d?zY{UUvQ?TC8aX-X$>WbbbT!$i--E%n)>g{fAMHJJ8iIwdUsH=aZ#xq^$4VttR z@}IYL*hn_t=-ll4j`6_g2egkR)G(d#z?dWJh<~#rB`g zz;We-@b5wBUzEc~kuHo1mqFcClJFK~eo@B!HpAa-*Gj@`wx59M|E;y`J)A!!Ql7?g z=PBl|B_3;BN9}$$kbX~W9@UknF0V4^gUVUcejL1P*?bgn0NdHq{sUcrdHk!TXX+up zLpArsH$eY!&QknkP`a0$6dfqlhnebNFeieHx7&t}8rKQ)ketksNk<>6{xZBVqzF2Dh-N4%Ko zlFf(tgyc^ixK8!M_G#PlfrrX2k9EvJoh_AZ+5q26NICrRLVXqYp3KgFEqd~U&4;Cz z?tRbdCDx*q+BYYi#Ut#>-7}uV-3Os>MRB@w`>ZlddBERL5hkoYJ8Sd=3?JdT^d5IL zd5fkE{T@00mHN#-EnnmV*e__}HTxpOXLaBG72Egzcj3;X$oC(oA7Xq^J|#OC{Z-rC zK0B#5>HN4E$bBIEd!f9Ts!*Opk3z|9iOoj?3IBe`XsfuGj$L zw;Bi1y}$l~a-~y+BIf-#7+$n=GvdIqx~Rsd>S7(tGtQB5!TqhbwNuvMex?u6DJu&w z&J2%4cCP)?*;mgM)0Mu$=U{^Qp3lsS;jN^<9Ejx`XJeDjiW zw&=&f;yJJM5C<@?zv}{wcU^0#wVE=l5&XdywFbim#N}oK{t5WGapaclyZc=e7gQFKpI0#PZl(nM9vGA?*80 zI-xw|=Q2ZX-$H>O^9kEGyD>c|__vDm?yUpG9q1-#iVpcOQng$CUCY8v$OqY3^9F5q z!|@}Lilt>(XFOH$dB>rhHNQDKGaQWl`XmH&!&%Kll^M7NPn-S#FtJl!B*|0lp$!0K{s1h44a%&bDo zejJRNar4t$#s}9A>B=|2ILGX*%7u;KS8JZQ%xwVvpZczC)Je$ibp0Q43#ROOZWQB%8!zv(`U$k;_PH*LC7s&Hoqu#Mk?PEiTmO4LmgQ9@ z$BFdWV*~lJl@7!YH$!=Hb;e%X00+>Yu^FV01M!vidX25by4euYg!hua=+$du``&do z?B9raT>5J_I|t+F`>A~3i|Q_oeA@54VCzSwTZbfCS-xT?X0ZJHQCQD-S9P)*@zWA5 z;;joDUR9P7FV8n4T}WKaV?H-Phu$wjL6G5H`m3X^Tm6`)+g8K@_`T!9zvH?N{?iL- zxQ{q?X-M~R(EqY+GZZr5Jw)DA`{-v=9Q-IA(^*e%s;}wM9%<+hYJhxhTHW*TB;-+b(5^q3h=(!tHDMU1>9j}hQ;rjFFnOKh^3pGBm_Lp6Ao$AVIKjWjaS-zwX3l|gql1v#7*C)(mzaJc> zN8<+DW>Wr3S8#Zl!9#zXw`Cd6+q%f-h)$1s;p(Yrhyyr%YjJ!k)>r=2kf4j;!{1CZ zJX*kqU-!E-Favq@yY=8uXen`;-@A+)CdA2?u7O_gQ_2wUkqTMZt#QSm=Hf z`KO)S_)&r})lUz1Uce=89nvNn;@228#&mou!o4IR@IkfcVNQk;@ae zu5RdN8dquwBAy!0t+RS)NBnioi+60O#m~dG{W#cVpXZM_fcp=vBpe$dpKdc!4*v%{ zu<%c zA?`hQf8&T<0<_tBFa0TR6S(=CFkjODUTz=eJrDMGoi)yc_ch!(SuwT(|J0C-M23Sc zuQnRwL4I_`Z_LDVbq}t3-dX^BRMI+OGCL>hhwH)^#A)v1->Wc>6~hBHkPq(gWtdOY zj4}Vr@aZv{&e7ate1Phxbt%PHq(b>~@uU8$j~xBmcooGpTZw-EzAN#S-(u1=X?vb! z$g=UORbw2J8;bVP?*F0o6t!XJCzb_g_IQ$h#xb$)$-tu9r6wFh!BR!Z5 z)5wUI$6WtmiZ}7Gn};Cp>WJXacKtZmA~x#2G{b>HO}I!S@>6@E#wEz#%WV0$dZ@S0 z+eS<+gnE)o*lL%F@qTd+Uyt!ERy@Pb*?!(+vIy`aB=l?CNahp6vY(P(HB}IwPS{KF z?$xBc?TF^^Y|P#-vYfj&F_7!0`*HUo`EdJ&@_hu-Yi#Tg2jWF5FKjS73OL*tQtVj) zpZivi3ps)9Tr=Q7Hu{tNuCFmzZ+8@~t>VM`tbKA<1KJ_M$V+r4#<#}$>1T$w)<4%+ z-8@=*i1F<@d%DlnSe(vN6nd;d^)|th@*km0xUJNux>}|{-+x;{ICq~X2v@s5aM1nN z>ed+r>4*dU&gSArwoUN-y$Q}g@jTUAo2OKqgt)601p4m9Ix}j{3B&lm-aTrIyzp7I zP9A@r1wA{|kGxpz$J9UBSW0z&CxxEd5kPfcZ9sVKu_Zk23?-iZ$epu2GnDwO-bjGH zqv(v8;85~^FSQ-|aWF*epcUc()>XfgGHC!_66sTXbP05S{@yPZY#br>>Fq-BFYTq` zGnp>rEf5X|d?*>6iemd+zxx#|!uXZChK^)DF>Tuu=C_kdx%J9b9;9QRV#x>Gh-G@L zv@DeB{~0$94&z?f?-1|e_BV|1COjnv@IL<>AA~r_&a#k;`+E%HbM4WZT>*It*VP<% z5}up1`{h17XIox4+dUTZr>c^>3Vqm^^BOBqm)+mIn1TMLY3KYeJghU1OV?Rl`Ap1V zaXr`BLVo+-3aWQFXBqh!t^=jdH13?mJ98<1OE;>o$6x6_r;QE*w_L-zYi@7U3v-?_ zpP29_ZrlspjCB~-?X~M|QCGJssw&|3 z^-b9#h+`T5$VbedM(nJheu2a$dal+MmS?@gR^)RE*HWFyTM=HKx{;qr9moE@dI`4< z*wdVMz$(ru!?7O+V?)Yb%my65`6oN_m()XDKmFqtdl~X90_Pjl^TEFs_Z}=lUC@tz z!uGSg_?{n*K0RTBD#O7fEg81%OKEDFDC2`w9#0wX)}E^%TsCpzu2t>=^l2S4BB`!& z42frBIs7IVQ2eFbIaS8oeK%UGdB0qP&m#`txtU8P3IK-(r=;C3hd8pg{=9e+;x4wH zXPjLJ<45fe+HpOz>g!CeRlp14#baw$Adj_0#m>OG^EN#Hh1D~E*)^6Yqpvy4mwbSA zCrG0r@rIO7rzPa8<`_}kX)94)J2c4;1TUm^`QJUyqH}rTku#?3d-X=$#iu*mJ)>R{L+VrI?-C==?<2 zzDF!CD^8aafA+4VJk96sX)=iocIFx73)XGf}o~4=;k>%GrBp!x`W;VROff4D1(ts4|a0 zU(j3f){c+%>Q|K_)|*WlSBHZT zZslnh2f8LK)hxXVIu?*8Fpdc?1n z?U`QmZ51P3E3qVAsPC&~{T_Q`;*U3@s2wDAdH=*EgggR!)u-k?Vdtp|34L%KFL4R{ z;pN_up2!Ez@Ao}D4e>wJU4Awl;!OCFZMq)$V3+9^8^BBby4x~~5GO51?+(X$>l

RPsO^fFCIQTYnzv#_Dg--7CPS&F1pi7lD^-+#2PJq5a+Wr|Yx(7hL=YvilrI zu0F!<<DoJPU(4SK)L+cBCcMD?-i+rI%?0ys)C4Z*>s8g;Elt;VeOb=URy#;#@meg){?Z?6Q zJO6YL2e6*c?3G;|=vc?`w+YRVU;lfLtZ?4(7Ei6980y_`Z2l*9zw-^p^BWMaJE!V1 zKDeLXu7vN=aXXIANwRi&2LH+nKG0T9d3?Bqy$7$r8%9rYG=)kVcz1yT5IqnI$_PM?A9lE8~G>5p;i}RMR2WuE)-=BmXi^}1SixjRxzfo{|%?P}|@u@=dj1u5Anb$>o**%^)&mwUAJ|TWrr!Bt6pjjS^!Jomv zUY7{|o^wafGs0mQcVFA`MB-K9HI!HX#q@6%FT#iK5*lwv!zao+! zYSlr!es9lB!_Ng9Y`?L52-P$*9R41En4V|A`G7UDRCka3$hThCrh3X-MR^p_BtCXs zNw}$1XMQtlr#&xle9Csgz<25s+qUzQit^568C#Kf#k$?QK(zDmqyt_J?5o6`?;9$!IZ5ctlto1 z_JXyye^nXbc5x2nvuGrzQwfCMr`F`RL}LU@7tV9OH-KAbwb_z*Lu0L=Os-Kh0dN58 zQ!Cz&&4+eYNs^Jnd%oj(ho35{gLysEIWYeL^B}e!X7Lbz*LKrh5A@rrH@vh_7dBku zPs6$sGL-(#o`2du>3=b%`k!V(by%oN?c%OQ zc%H7w+dX7(Q{uLF>W%l8m?Iy+xz%;L30DAr(toa8tb_ap9b7rR81pv$);e~d>xj&^ z5!la4^*F@t`OehhDKTGA;5H0#?0hNU8OzUh1v+P2Vs0ko5zhNZ+5ag<=MjqMa^o;x z!>GOQMG}6`hEaUmg_tkOi}d5|eA78C#-kqx34S9QqyPu74ke+ZfbDmFF~qM0^x#WL ze#8aHXX5TX-%1d#`n_%GSnor&Ux`BAQtTGBMSZJ&7_5wS_GZg85om{&mhZ7I*z-*d zDp)?n@-iuorQEv1-O=Q`&pMHx30X(^UTH!;MlzUq!k|Jw9qI zSp4PjCiBtn)s2@+v-4EJSMmHuH-rCsW@)ch2X!*;`-qLjzz3@L7fZ1Fog)R&8_*Yg z?^$Y%c~1IyN(p&3ukXW9ct7!?gO3OYzEWkBpGlciM=6}I-plO+Y;dQ#xw3}K6fX9_PwxOV9gKUm+UTj!ABwbockVmG;hy*_ ztggoF&!zn7SrI=~a6b0AGqvw*?*5a(HpCOJo#^*8%?KB(ttsyk`n-iv2RkNbzE@AL zeIJZ`0JNVY$ZiIIV1Br%Pylfb)J<(I#=On_TAK#(N8Y;ieFN6d&ZZky7+<=7uM!{Y zDMxoGAL7=tNa>{Ze|?79GbWMxG0lOD4{GAlh^N+uG2ha4DUtXsfLo7rJdD#dCyJjR zBS;Lj8$Qdc9|tqap9y9$e-P{RZym0yUi@dmk!w)z^7rg6oCiE?oL^8>3O^SQmmQgo z{hMnkof}c#T!WU`V7&f`noF1-WQ-Wjc(-xFOBR>i(^6{xF?%_k=jK5K>v^o-^>`WK z0Q&7fZ*b87pYl19TbJ*`r=S1lA<$pE!#);p0K@Pa-SNlxFg`b-%B2*Z-~D#9Suy&8 zh7Tjzxc9U^*cT7upN9)O-O*?5{dh_T$2Gb~=S^XFeY*Px%U|WFW`?uk@O;*u6NSSC ztkBK!pJHX;rHmy(il zS0OKlepN{dz$e5V8#ucJa3Hw1&npe<-8(ua5_NU%&qyoO-M_m2it`I`8Jzb4-t*x`{F1u{?@$>ry4v$v+r!>z931sIKyzcw1D)#)NwJ z<3RSs)-i|!$XDv#L%5z+dC>^%>%dFj)PGJp5BUuA**Lrm@ErW7@7Ny1K|*lgCLHGw zoNc#8{hB)WI9nIqmwR#;;<}~x(F>NR?+)b@@A}QetNXcgUB|4Ve#1pC8V8G7Nj&Sp z-2*?sp1zN>C4X@Z?#q2Q-zo-hP(A&q^7~&nj#QTUU@+pK_Ize;aoty$7MVf&@O=9` z%_VS;F3j%_S4eUP96KkC9j^;@2%Y|!Qvfd=&nrIvV0`suN;AX54bMCl-|OgDYR_F- zgvU4Bx{k|JD1JD<6yL99)oh9z&Vgfjhw(-BbA4;U$Y*B~?JYm3pLnGdi#UM!+W`s< zS0R7J^RMl!g?3gws1uIo4he0#J2VY+*E`ZcC<^_{yk-e2jKA$m!(!wKamABEzy}BO z?*I3U@l~8n8TC_!aQlG&L=sM$xclvfx)Bd&L{mI-f+;?=Sn}=1jOg#HBLs23TD~-{ z?#ID5w}tMKfCGTRptSjTu3N}4iO%bQ!vS}rgX*B}ni4cU%CLPiN>uhB?@RUk*o1hU z-(zEq`nyMBk_x^@)||&f;qN;mckZBlq*vXGiH8z)QC;6(Mfu%jPWtwp^EF2`1&kl= zaQDj1Tt@n_kGn6kYO%oOU(~f|zyZvE$-G{B3Z82w_d2Hpc&XT1vbPxYb-;XK2^{Ad zP`}1B0dQ=W+bijgJ~8Z0v@Y^l^oTW+5yv_a8-B9<<J5-+65 zcvMbyHN}-7&2X(M$L-5)o=*J3#Zd1Tur%rxdigtdB6H_D)PbXW3f?~*JY6fmWbEed*qc_`=`7RhWx`Z8_%Az z{M~XtMZT23i`sPvcb?3)FydVUZlB##5Bj}6ck*E)SCQ^5<>pJ&JO$C`lYA%m^y464 zj8olAzyYlD)EuaW>!vQcr-!uy9&7%LJ|_S_epY>abs73EH@Qn`n9s^T(b4D=#~$sp zLL7Xa5vzi{EAu*dDC(Q|SFtXp3z_>%sBRR~I3H+8`7ZY*o*1A^_*m~j_13YN$HsG{ zok{NoEvCPlVJjHoxv&~>0H^!Ua9>*p`HPtLYC#F;|L2o)R7#-z$7oN<+>7xEZkjWn+FmYpLONOpDd5*LoZW&r#T#CaPx~=78GC49O9*g+_?=; z=J4=6om-_SzHzh2=NL~WJsCNTcdueVi`2aj>RP=b?7VfDXL8;3u%!;tG=8GqIcVou zwfiTQLR{@lQA<;iPxmeQ6@_~Bqn2k0`M0PR+oQ~U!TF8C_`UP1&=)LklZO}6bLONo zTvp#-P56vSp#1%^ru?OHKKr*h;l)0X;{33Neh!6o{Z0B}=LY&v z-!wv3kLi`Tz6AUHYxj$_f5qU-jIT0h=Ck}N2uE<^8uJJrw;d?{;|qD9+tU*Ua{Fzr zPb1$Z&F#178cO^;Q%6wqqFQO&)Q{@f1AjT7F3fX2fAFc}HOx=Gb#@K#(c_WbUZtQ5 zvDqc9DX6cne8M&&e&yD;T44S%wO%SC-)_GxA}>#JyXiGcCdYeUk@Q~tzX zN!)#G8dK@#R&D~sPx28j%Aag7@$XmeUf0h)f(X4oHfR0%abWRv{goL^7cBB~g9Ms zH`QpMKk)WmV$ZiY1NhV$9jaUmcvvx}^=b*^aj@Ia*mTJEpv$ZL5C^=`{%tGykiWF% zB0c1Tv#}|YusuFFb^T)ady(@WYw!55qbv?#XLqWXN!&2K7_0?dY?!Q17Yt)>M=tPJIWu zq+lKWC;53J)|afPjYS>m?JJul3gOP8Q96VmKb`6q0#q|A{Zzj_-@mwtyS8hct zwY#n>@z{NCK2mHw;TO)$VfhW>s0iMeucwhF~1Ls;rxBzvAZ!o{=GcO3E{wAFI z)W!7OCbfjx+iyGZKyDzldz2o1YB|&QeR|{v)^PisVO$3LOPx!Nc_`N+;p#la?^_cQ z2c41H`WH;jfWGz|2w!~$c(XvUZbB*Wtw-0Bo;^7Ke7&2*b)_~+F)eax@# zrMDC7AnyfkPQMwSzB~UPtM}O#jtT(ZLPA~Z1x%N;x&6*p?Ww*VsnGW;ENI+LR*~A_ zlL6IZGj~p`ytZIr>U|fhypQT*1a8WR0~psBmuhq!c*;4wde&K}_h!4jgUk5fxB8-6 zlA+GBuGt1`!tc!#ADH9kj4LOWAm8TMd>@4Q4;JLTVEM2}C>AhXn#SFaJH?sD0@$#Q z_-GP${xBU@bQv%rG>9?sbeZC$&c9;%&H^9& z+i|L~4fMa&FKBlSe2R&dj;(;7chqcYO#vP5{1zuZ=GK4S3gczw zEXqY30M6{=J8^v8$n!ZjS zbR#nVklaL!Gj>e=Z>H~2woR;F9!2E|FyA~6H{vaxGvUz9km7v7-P_it#op@;IY;mauJ_s>eXH$l8t+{b` zH~Oq|PhM@p_;T7D7!Lj&`LP7QpZ-N_5W_>R_Y3x%QwPZ>md)Qn?P(^>;&dOBLi}{x zoyH3f@237jUJT{+VLa)t#vE#o)tdytdlps|2KD10?1}kg!~t9@x=8PQ73gQOhFx+C$u*f>n!QLz6IhnY8{F{iBF%W)G6*&Dm<6D zd7V?|e^NK?t(b~9fOx*<=(N_&b3W6RlvxFF8YN6Uh4UgG%=BLF!g@M&J}?^VY|!Z{ zGyJqtTCak7QE>LqK&A^lvR%xNoV|67`MvH7nLKzeI09fPwQnIeZY1nQy!t+l^a0)i z+XXIOBi%X*<1qMl5y89wyKdQk!TmUhzj5&Ebie^jdq?GtsH%$+=WpyXZHG82Hd{WZ zhJ1EQ1zxK_{d#D)DH(Avh2P2ez#*i<9Q!w$3a2f_{!U-nu$_4dYd;Tu{*h0B0Xe-C&go(6dgf2j2{i4T6u{>xNn0M59dQAl)N{OCCn63kt4Hm#s&9olI%zZOdL_iU-0y}^IpTBDv==+EosW(95skho z(W$@`b+t+Viwf$7ap(MjsBhIdOI|U)`ZMt~HdZ7Q+JVnF`;!|?X4+< zZ|m8FV@oSmtrl)NM6Yx{9fd1vNz!~wjY{{AnO(BAuwOx}q&xNX(> zs|t8QW5KKGl~_-4y>`2?y|wpGi^KS@{vFG3AQ1Ifiufp!`8p7P@6Ca&-Hdl9UOG+r z+P9nd;4C+96Qsa=dUE|N`rccNaH=S zAA(Oodw+T>YElO6oV&*=C>3}&wehs&R^+L@tH(HDf5B%;sX-mY8}Hg9j(#z#d)Z&+ zJ7xzqFkQ`0J|;jOiOfHsS<6#v&LKG22=uXmK@G8D(6GHYd^cQ1M7bJm^Cq=Ya+>m zV@!|_v>cT1o^syy51s=UA1sLMVtE<$;v^SeBI%GNcfZPJXR7xyW2&F)YpCw@xN)Ta zxP5JDc1%Y)BV`1upSVmq655Z0gvydk!hwAI_?1=Q1FPq(Yix)9!1a}bW>rDH??#BM zsYIVOO-o}J>T6euRUF3oy799q>f7d*1xt}HoNL7g;`c%qmUc6~(#SeS?bsbmdb$gS zXz+h0x&4^$yh&fBIbU1mMD=$ym~=tGLcrQ%xi9aQ#Rut4fCK$b!wX}=PV?b3%!>V+ zPeOYSUDvv+4BFQqz8d@s_{Hqh!&?ErLfxyy9Z|pbO9>fb`%B1+!CiykI(U(P8SmWE zyU5!2hV)U=-><*s)%B}x9;6*-t61VTM*NwOO&vy}{ zFQ3%&vK%IpKk!&AFm3}q_~mGzRsnn3a@xKw#s@B|j*w1n+eq=83#0s*ts

xy^hwOOI}UpgpJ$ETZ85Ke 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⋘uAfWM&zI)@V|{1Z!(+xVKKM9I0e>#v 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


K~Fw&1n!nu~I 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�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

l@sthtvF2NiTbCk_1?$T&UDz`? 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�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沦$zN;k;S$ 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∾ME`xekyV6~` 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%0D0EOMC*AK;L)N| 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 z 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⁣3Ij&;K7+_ugFYi5!$z*XFk=H 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

P+194-sIE7G)RmI~s$Nb6Puvv2UKHda56 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

  • erSZUM+ZT!Qt2C^96{96`QZdf_`|m8u~zE{Ysdh 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
  • HEKW_|;40J>Fg#K#n4;02iz<;VxyCk#E! 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 { impl<'a> Encode for Ephemeris<'a> { fn encoded_len(&self) -> der::Result { Utf8StringRef::new(self.name)?.encoded_len()? - + self.ref_epoch.to_asn1(TimeSystem::TDB).encoded_len()? + + self.ref_epoch.encoded_len()? + self.backward.encoded_len()? + self.parent_ephemeris_hash.encoded_len()? + self.orientation_hash.encoded_len()? @@ -49,7 +49,7 @@ impl<'a> Encode for Ephemeris<'a> { fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { Utf8StringRef::new(self.name)?.encode(encoder)?; - self.ref_epoch.to_asn1(TimeSystem::TDB).encode(encoder)?; + self.ref_epoch.encode(encoder)?; self.backward.encode(encoder)?; self.parent_ephemeris_hash.encode(encoder)?; self.orientation_hash.encode(encoder)?; @@ -63,11 +63,11 @@ impl<'a> Encode for Ephemeris<'a> { impl<'a> Decode<'a> for Ephemeris<'a> { fn decode>(decoder: &mut R) -> der::Result { let name: Utf8StringRef = decoder.decode()?; - let ref_epoch_asn1: Asn1Epoch = decoder.decode()?; + let ref_epoch: Epoch = decoder.decode()?; Ok(Self { name: name.as_str(), - ref_epoch: ref_epoch_asn1.into(), + ref_epoch, backward: decoder.decode()?, parent_ephemeris_hash: decoder.decode()?, orientation_hash: decoder.decode()?, diff --git a/src/asn1/lookuptable.rs b/src/asn1/lookuptable.rs index bb4b29f2..0335198a 100644 --- a/src/asn1/lookuptable.rs +++ b/src/asn1/lookuptable.rs @@ -45,7 +45,7 @@ impl LookUpTable { None => { error!("lookup table contain {hash:x} ({hash}) but it does not have an entry for it"); // TODO: Change to integrity error - Err(AniseError::IndexingError) + Err(AniseError::MalformedData(idx)) } }; } diff --git a/src/cli/inspect.rs b/src/cli/inspect.rs index 60bc8735..177b6742 100644 --- a/src/cli/inspect.rs +++ b/src/cli/inspect.rs @@ -69,7 +69,8 @@ impl<'a> Display for AniseContext<'a> { interpolation_kind: orientation.interpolation_kind, }); } - let tbl = Table::new(rows).with(Style::rounded()); + let mut tbl = Table::new(rows); + tbl.with(Style::rounded()); write!(f, "{}", tbl) } } diff --git a/src/context/append.rs b/src/context/append.rs index 3b981c37..0f5b9ea0 100644 --- a/src/context/append.rs +++ b/src/context/append.rs @@ -57,7 +57,7 @@ impl<'a> AniseContext<'a> { // Check that we can add one item if self.ephemeris_lut.indexes.len() == MAX_TRAJECTORIES { error!("[append] cannnot append ephemeris, look up table is full"); - return Err(AniseError::IndexingError); + return Err(AniseError::MaxTreeDepth); } self.ephemeris_lut @@ -116,7 +116,7 @@ impl<'a> AniseContext<'a> { // Check that we can add one item if self.orientation_lut.indexes.len() == MAX_TRAJECTORIES { // We're full! - return Err(AniseError::IndexingError); + return Err(AniseError::MaxTreeDepth); } self.orientation_lut diff --git a/src/errors.rs b/src/errors.rs index a03f6c62..63c5d074 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -8,7 +8,7 @@ * Documentation: https://nyxspace.com/ */ -use hifitime::{Epoch, TimeSystem}; +use hifitime::Epoch; use crate::asn1::semver::Semver; use crate::der::Error as Asn1Error; @@ -22,16 +22,16 @@ use std::io::ErrorKind as IOErrorKind; pub enum AniseError { /// Raised for an error in reading or writing the file(s) IOError(IOErrorKind), - /// Raised if an IO error occured but its representation is not simple (and therefore not an std::io::ErrorKind). + /// Raised if an IO error occurred but its representation is not simple (and therefore not an std::io::ErrorKind). IOUnknownError, /// Raise if a division by zero was to occur DivisionByZero, /// Raised when requesting the value of a parameter but it does not have any representation (typically the coefficients are an empty array) ParameterNotSpecified, - /// For some reason weird reason (malformed file?), data that was expected to be in an array wasn't. - IndexingError, + /// The byte stream is missing data that is required to parse. + MalformedData(usize), /// If the NAIF file cannot be read or isn't supported - NAIFParseError(String), + DAFParserError(String), InvalidTimeSystem, /// Raised if the checksum of the encoded data does not match the stored data. IntegrityError(IntegrityErrorKind), @@ -111,8 +111,8 @@ impl fmt::Display for AniseError { Self::IOUnknownError => write!(f, "ANISE error: IOUnknownError"), Self::DivisionByZero => write!(f, "ANISE error: DivisionByZero"), Self::ParameterNotSpecified => write!(f, "ANISE error: ParameterNotSpecified"), - Self::IndexingError => write!(f, "ANISE error: IndexingError"), - Self::NAIFParseError(reason) => { + Self::MalformedData(byte) => write!(f, "ANISE error: Malformed data: could not read up to byte {byte}."), + Self::DAFParserError(reason) => { write!(f, "ANISE error: invalid NAIF DAF file: {}", reason) } Self::InvalidTimeSystem => write!(f, "ANISE error: invalid time system"), @@ -150,7 +150,7 @@ impl fmt::Display for AniseError { ), Self::MissingInterpolationData(e) => write!( f, - "ANISE error: No interpolation as epoch {}", e.as_gregorian_str(TimeSystem::ET) + "ANISE error: No interpolation as epoch {e:e}" ), } } diff --git a/src/lib.rs b/src/lib.rs index 9998ba02..0e71aed0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -29,7 +29,7 @@ pub mod prelude { pub use crate::asn1::units::*; pub use crate::errors::AniseError; pub use crate::math::Aberration; - pub use hifitime::{Epoch, TimeSystem, TimeUnits}; + pub use hifitime::{Epoch, TimeScale, TimeUnits}; pub use std::fs::File; } diff --git a/src/math/interpolation/chebyshev.rs b/src/math/interpolation/chebyshev.rs index 585095a5..b0fa82db 100644 --- a/src/math/interpolation/chebyshev.rs +++ b/src/math/interpolation/chebyshev.rs @@ -33,18 +33,18 @@ pub(crate) fn cheby_eval( match splines.metadata.evenness { Evenness::Even { duration_ns } => { let window_duration_s: f64 = - ((duration_ns as f64) * DurationUnit::Nanosecond).in_seconds(); + ((duration_ns as f64) * DurationUnit::Nanosecond).to_seconds(); let radius_s = window_duration_s / 2.0; let ephem_start_delta = eval_epoch - start_epoch; - let ephem_start_delta_s = ephem_start_delta.in_seconds(); + let ephem_start_delta_s = ephem_start_delta.to_seconds(); if ephem_start_delta_s < 0.0 { return Err(AniseError::MissingInterpolationData(eval_epoch)); } // In seconds - let eval_epoch_et_s = eval_epoch.as_et_seconds(); + let eval_epoch_et_s = eval_epoch.to_et_seconds(); let spline_idx_f = (ephem_start_delta_s / window_duration_s).round(); // Round seems to work let midpoint = splines.fetch(spline_idx_f as usize, 0, Field::MidPoint)?; diff --git a/src/naif/daf.rs b/src/naif/daf.rs index 787eb494..b8be4871 100644 --- a/src/naif/daf.rs +++ b/src/naif/daf.rs @@ -8,18 +8,14 @@ * Documentation: https://nyxspace.com/ */ +pub(crate) use super::Endian; use crate::{parse_bytes_as, prelude::AniseError, DBL_SIZE}; use core::convert::TryInto; +use log::{debug, error, info}; pub(crate) const RCRD_LEN: usize = 1024; pub(crate) const INT_SIZE: usize = 4; -#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] -pub enum Endianness { - Little, - Big, -} - #[derive(Debug)] pub struct DAF<'a> { pub idword: &'a str, @@ -33,47 +29,67 @@ pub struct DAF<'a> { /// The record number of the final summary record in the file. pub bwrd: usize, pub freeaddr: usize, - pub endianness: Endianness, + pub endianness: Endian, pub bytes: &'a [u8], } impl<'a> DAF<'a> { /// From https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/daf.html#Structure pub fn parse(bytes: &'a [u8]) -> Result { - let locidw = std::str::from_utf8(&bytes[0..8]).map_err(|_| { - AniseError::NAIFParseError("Could not parse header (first 8 bytes)".to_owned()) - })?; - - let daftype: Vec<&str> = locidw.split('/').collect(); - if daftype.len() != 2 { - return Err(AniseError::NAIFParseError(format!( - "Malformed header string: `{}`", - locidw - ))); - } else if daftype[1].trim() == "PCK" { - println!("Good luck on the PCK debugging"); - } else if daftype[1].trim() != "SPK" { - return Err(AniseError::NAIFParseError(format!( - "Cannot parse a NAIF DAF of type: `{}`", - locidw - ))); - } else if daftype[0].trim() != "DAF" { - return Err(AniseError::NAIFParseError(format!( - "Cannot parse file whose identifier is not DAF: `{}`", + let locidw = core::str::from_utf8(bytes.get(0..8).ok_or(AniseError::MalformedData(8))?) + .map_err(|_| { + AniseError::DAFParserError("Could not parse header (first 8 bytes)".to_owned()) + })?; + + if !locidw.contains('/') { + return Err(AniseError::DAFParserError(format!( + "Cannot parse file whose identifier is: `{}`", locidw ))); } + let daftype_it = locidw.split('/'); + for (idx, content) in daftype_it.enumerate() { + if idx == 0 && content != "DAF" { + return Err(AniseError::DAFParserError(format!( + "Cannot parse file whose identifier is not DAF: `{}`", + locidw + ))); + } else if idx == 1 { + match content.trim() { + "SPK" => { + debug!("Parsing DAF as SPK"); + } + "PCK" => { + info!("Parsing DAF as PCF (good luck)"); + } + _ => { + error!("DAF of type {content} is not yet supported"); + return Err(AniseError::DAFParserError(format!( + "Cannot parse SPICE data of type `{}`", + locidw + ))); + } + } + } else if idx > 1 { + return Err(AniseError::DAFParserError(format!( + "Malformed header string: `{}`", + locidw + ))); + } + } + // We need to figure out if this file is big or little endian before we can convert some byte arrays into integer - let str_endianness = std::str::from_utf8(&bytes[88..96]) - .map_err(|_| AniseError::NAIFParseError("Could not parse endianness".to_owned()))?; + let str_endianness = + core::str::from_utf8(bytes.get(88..96).ok_or(AniseError::MalformedData(96))?) + .map_err(|_| AniseError::DAFParserError("Could not parse endianness".to_owned()))?; let endianness = if str_endianness == "LTL-IEEE" { - Endianness::Little + Endian::Little } else if str_endianness == "BIG-IEEE" { - Endianness::Big + Endian::Big } else { - return Err(AniseError::NAIFParseError(format!( + return Err(AniseError::DAFParserError(format!( "Could not understand endianness: `{}`", str_endianness ))); @@ -81,14 +97,44 @@ impl<'a> DAF<'a> { // Note that we parse as u32 to make sure that it's a 32-bit integer. The docs don't specify if it's signed or not, // but it works in either case (I guess that the sign bit is still present but set to zero?) - let nd = parse_bytes_as!(u32, &bytes[8..8 + INT_SIZE], endianness) as usize; - let ni = parse_bytes_as!(u32, &bytes[12..12 + INT_SIZE], endianness) as usize; - let fwrd = parse_bytes_as!(u32, &bytes[76..76 + INT_SIZE], endianness) as usize; - let bwrd = parse_bytes_as!(u32, &bytes[80..80 + INT_SIZE], endianness) as usize; - let freeaddr = parse_bytes_as!(u32, &bytes[84..84 + INT_SIZE], endianness) as usize; + let nd = parse_bytes_as!( + u32, + bytes + .get(8..8 + INT_SIZE) + .ok_or(AniseError::MalformedData(8 + INT_SIZE))?, + endianness + ) as usize; + let ni = parse_bytes_as!( + u32, + bytes + .get(12..12 + INT_SIZE) + .ok_or(AniseError::MalformedData(12 + INT_SIZE))?, + endianness + ) as usize; + let fwrd = parse_bytes_as!( + u32, + bytes + .get(76..76 + INT_SIZE) + .ok_or(AniseError::MalformedData(76 + INT_SIZE))?, + endianness + ) as usize; + let bwrd = parse_bytes_as!( + u32, + bytes + .get(80..80 + INT_SIZE) + .ok_or(AniseError::MalformedData(80 + INT_SIZE))?, + endianness + ) as usize; + let freeaddr = parse_bytes_as!( + u32, + bytes + .get(84..84 + INT_SIZE) + .ok_or(AniseError::MalformedData(84 + INT_SIZE))?, + endianness + ) as usize; - let locifn = std::str::from_utf8(&bytes[16..76]) - .map_err(|_| AniseError::NAIFParseError("Could not parse locifn".to_owned()))?; + let locifn = core::str::from_utf8(bytes.get(16..76).ok_or(AniseError::MalformedData(79))?) + .map_err(|_| AniseError::DAFParserError("Could not parse locifn".to_owned()))?; Ok(Self { idword: locidw.trim(), @@ -103,14 +149,19 @@ impl<'a> DAF<'a> { }) } - pub fn comments(&self) -> String { + pub fn comments(&self) -> Result { let mut rslt = String::new(); // FWRD has the initial record of the summary. So we assume that all records between the second record and that one are comments for rid in 1..self.fwrd { - match std::str::from_utf8(&self.bytes[rid * RCRD_LEN..(rid + 1) * RCRD_LEN]) { + // match core::str::from_utf8(&self.bytes[rid * RCRD_LEN..(rid + 1) * RCRD_LEN]) { + match core::str::from_utf8( + self.bytes + .get(rid * RCRD_LEN..(rid + 1) * RCRD_LEN) + .ok_or(AniseError::MalformedData(0))?, + ) { Ok(s) => rslt += s.replace("\u{0}\u{0}", " ").replace('\u{0}', "\n").trim(), Err(e) => { - let valid_s = std::str::from_utf8( + let valid_s = core::str::from_utf8( &self.bytes[rid * RCRD_LEN..(rid * RCRD_LEN + e.valid_up_to())], ) .unwrap(); @@ -122,11 +173,11 @@ impl<'a> DAF<'a> { } } - rslt + Ok(rslt) } /// The summaries are needed to decode the rest of the file - pub fn summaries(&self) -> Vec<(&'a str, Vec, Vec)> { + pub fn summaries(&self) -> Result, Vec)>, AniseError> { // Each summary need to be read in bytes of 8*nd then 4*self.ni let mut record_num = self.fwrd; let mut rtn = Vec::new(); @@ -134,25 +185,35 @@ impl<'a> DAF<'a> { if record_num == 0 { break; } - let record = self.record(record_num); + let record = self.record(record_num)?; // Note that the segment control data are stored as f64 but need to be converted to usize - let next_record = parse_bytes_as!(f64, &record[0..DBL_SIZE], self.endianness) as usize; - // let prev_record = - // parse_bytes_as!(f64, &record[8..8 + DBL_SIZE], self.endianness) as usize; - let nsummaries = - parse_bytes_as!(f64, &record[16..16 + DBL_SIZE], self.endianness) as usize; + let next_record = parse_bytes_as!( + f64, + record + .get(0..DBL_SIZE) + .ok_or(AniseError::MalformedData(DBL_SIZE))?, + self.endianness + ) as usize; + + let nsummaries = parse_bytes_as!( + f64, + record + .get(16..16 + DBL_SIZE) + .ok_or(AniseError::MalformedData(16 + DBL_SIZE))?, + self.endianness + ) as usize; // Parse the data of the summary. - let name_record = self.record(record_num + 1); + let name_record = self.record(record_num + 1)?; let length = DBL_SIZE * self.nd + INT_SIZE * self.ni; for i in (0..nsummaries * length).step_by(length) { let j = 3 * DBL_SIZE + i; - let name = std::str::from_utf8(&name_record[i..i + length]).unwrap(); + let name = core::str::from_utf8(&name_record[i..i + length]).unwrap(); if name.starts_with(' ') { println!("WARNING: Parsing might be wrong because the first character of the name summary is a space: `{}`", name); println!( "Full name data: `{}`", - std::str::from_utf8(&name_record[..1000]).unwrap() + core::str::from_utf8(&name_record[..1000]).unwrap() ); } let summary_data = &record[j..j + length]; @@ -173,13 +234,15 @@ impl<'a> DAF<'a> { record_num = next_record; } - rtn + Ok(rtn) } /// Records are indexed from one!! - fn record(&self, num: usize) -> &'a [u8] { + fn record(&self, num: usize) -> Result<&'a [u8], AniseError> { let start_idx = num * RCRD_LEN - RCRD_LEN; - &self.bytes[start_idx..start_idx + RCRD_LEN] + self.bytes + .get(start_idx..start_idx + RCRD_LEN) + .ok_or(AniseError::MalformedData(start_idx + RCRD_LEN)) } /// Returns the 64-bit float at the provided address diff --git a/src/naif/mod.rs b/src/naif/mod.rs index 61d58d34..3f037bf2 100644 --- a/src/naif/mod.rs +++ b/src/naif/mod.rs @@ -17,8 +17,14 @@ macro_rules! parse_bytes_as { let (int_bytes, _) = $input.split_at(std::mem::size_of::<$type>()); match $order { - Endianness::Little => $type::from_le_bytes(int_bytes.try_into().unwrap()), - Endianness::Big => $type::from_be_bytes(int_bytes.try_into().unwrap()), + Endian::Little => $type::from_le_bytes(int_bytes.try_into().unwrap()), + Endian::Big => $type::from_be_bytes(int_bytes.try_into().unwrap()), } }}; } + +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +pub enum Endian { + Little, + Big, +} diff --git a/src/naif/spk/datatype.rs b/src/naif/spk/datatype.rs index 525d2985..73576f3b 100644 --- a/src/naif/spk/datatype.rs +++ b/src/naif/spk/datatype.rs @@ -80,7 +80,7 @@ impl TryFrom for DataType { 19 => Ok(Self::ESOCPiecewiseInterpolation), 20 => Ok(Self::ChebyshevVelocityOnly), 21 => Ok(Self::ExtendedModifiedDifferenceArrays), - _ => Err(AniseError::NAIFParseError(format!( + _ => Err(AniseError::DAFParserError(format!( "unknown data type {}", data_type ))), diff --git a/src/naif/spk/mod.rs b/src/naif/spk/mod.rs index 590d8ca9..7e0a5ca1 100644 --- a/src/naif/spk/mod.rs +++ b/src/naif/spk/mod.rs @@ -13,7 +13,7 @@ extern crate der; use self::datatype::DataType; use self::segment::{Record, SegMetaData, Segment}; -use super::daf::{Endianness, DAF}; +use super::daf::{Endian, DAF}; use crate::asn1::common::InterpolationKind; use crate::asn1::context::AniseContext; use crate::asn1::ephemeris::Ephemeris; @@ -52,7 +52,7 @@ impl<'a> SPK<'a> { } if seg.data_type != DataType::ChebyshevPositionOnly { - return Err(AniseError::NAIFParseError( + return Err(AniseError::DAFParserError( "Only cheby supported".to_string(), )); } @@ -89,7 +89,7 @@ impl<'a> SPK<'a> { }, )); } - Err(AniseError::NAIFParseError(format!( + Err(AniseError::DAFParserError(format!( "Could not find segment {}", seg_target_id ))) @@ -110,13 +110,13 @@ impl<'a> SPK<'a> { let rcrd_mid_point = parse_bytes_as!( f64, &self.daf.bytes[r_dbl_idx..DBL_SIZE + r_dbl_idx], - Endianness::Little + Endian::Little ); r_dbl_idx += DBL_SIZE; let rcrd_radius_s = parse_bytes_as!( f64, &self.daf.bytes[r_dbl_idx..DBL_SIZE + r_dbl_idx], - Endianness::Little + Endian::Little ); r_dbl_idx += DBL_SIZE; @@ -128,7 +128,7 @@ impl<'a> SPK<'a> { parse_bytes_as!( f64, raw_x_coeffs[DBL_SIZE * item..DBL_SIZE * (item + 1)], - Endianness::Little + Endian::Little ) }) .collect::<_>(); @@ -139,7 +139,7 @@ impl<'a> SPK<'a> { parse_bytes_as!( f64, raw_y_coeffs[DBL_SIZE * item..DBL_SIZE * (item + 1)], - Endianness::Little + Endian::Little ) }) .collect::<_>(); @@ -150,7 +150,7 @@ impl<'a> SPK<'a> { parse_bytes_as!( f64, raw_z_coeffs[DBL_SIZE * item..DBL_SIZE * (item + 1)], - Endianness::Little + Endian::Little ) }) .collect::<_>(); @@ -431,10 +431,10 @@ impl<'a> TryInto> for &'a DAF<'a> { }; // Convert the summaries into segments - for seg_data in self.summaries() { + for seg_data in self.summaries()? { let (name, f64_data, int_data) = seg_data; if f64_data.len() != 2 { - return Err(AniseError::NAIFParseError(format!( + return Err(AniseError::DAFParserError(format!( "SPK should have exactly two f64 data, found {}", f64_data.len() ))); @@ -444,7 +444,7 @@ impl<'a> TryInto> for &'a DAF<'a> { let end_epoch = Epoch::from_et_seconds(f64_data[1]); if int_data.len() != 6 { - return Err(AniseError::NAIFParseError(format!( + return Err(AniseError::DAFParserError(format!( "SPK should have exactly five int data, found {}", int_data.len() ))); diff --git a/src/naif/spk/segment.rs b/src/naif/spk/segment.rs index 4e763e1f..51e9520f 100644 --- a/src/naif/spk/segment.rs +++ b/src/naif/spk/segment.rs @@ -60,7 +60,7 @@ impl<'a> Segment<'a> { 7 => Ok("Uranus"), 8 => Ok("Neptune"), 9 => Ok("Pluto"), - _ => Err(AniseError::NAIFParseError(format!( + _ => Err(AniseError::DAFParserError(format!( "Human name unknown for {id}" ))), } @@ -80,7 +80,7 @@ impl<'a> Segment<'a> { 8 => Ok("Neptune Barycenter"), 9 => Ok("Pluto Barycenter"), 10 => Ok("Sun"), - _ => Err(AniseError::NAIFParseError(format!( + _ => Err(AniseError::DAFParserError(format!( "Human name unknown for barycenter {id}" ))), } @@ -170,9 +170,9 @@ impl<'a> fmt::Display for Segment<'a> { self.frame_id, self.data_type, self.start_epoch, - self.start_epoch.as_et_duration().in_seconds(), + self.start_epoch.to_et_duration().to_seconds(), self.end_epoch, - self.end_epoch.as_et_duration().in_seconds(), + self.end_epoch.to_et_duration().to_seconds(), self.start_idx, self.end_idx ) diff --git a/src/spline.rs b/src/spline.rs index 0adaec68..bbe9494c 100644 --- a/src/spline.rs +++ b/src/spline.rs @@ -17,7 +17,7 @@ use crate::{ spline::{Field, Splines}, }, errors::{AniseError, IntegrityErrorKind, InternalErrorKind}, - naif::daf::Endianness, + naif::daf::Endian, parse_bytes_as, DBL_SIZE, }; @@ -45,13 +45,13 @@ impl<'a> Splines<'a> { // Safely fetch this coefficient, returning an error if we're out of bounds. match self.data.get(offset..offset + DBL_SIZE) { - Some(ptr) => Ok(parse_bytes_as!(f64, ptr, Endianness::Big)), + Some(ptr) => Ok(parse_bytes_as!(f64, ptr, Endian::Big)), None => { error!( "[fetch] could not fetch {}-th {:?} in spline {}", coeff_idx, field, spline_idx ); - Err(AniseError::IndexingError) + Err(AniseError::MalformedData(offset + DBL_SIZE)) } } } diff --git a/tests/ephemerides/translation_verif.rs b/tests/ephemerides/translation_verif.rs index a9bc5117..b8b76da6 100644 --- a/tests/ephemerides/translation_verif.rs +++ b/tests/ephemerides/translation_verif.rs @@ -268,3 +268,154 @@ fn de438s_translation_verif_emb2luna() { vel_expct_km_s + vel ); } + +#[test] +#[ignore] +#[cfg(feature = "std")] +fn exhaustive_de438s_translation() { + use anise::frame::Frame; + use hifitime::{TimeSeries, TimeUnits}; + use log::info; + use rstats::{Median, Stats}; + + const FAIL_POS_KM: f64 = 1e4; + const FAIL_VEL_KM_S: f64 = 1e1; + + if pretty_env_logger::try_init().is_err() { + println!("could not init env_logger"); + } + + // This test will load the BSP both in rust-spice and ANISE and make sure that we get the same data all the time. + use spice; + spice::furnsh("data/de438s.bsp"); + + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::from_bytes(&buf); + + for (idx1, ephem1) in ctx.ephemeris_data.iter().enumerate() { + let j2000_ephem1 = Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx1).unwrap()); + + for (idx2, ephem2) in ctx.ephemeris_data.iter().enumerate() { + if ephem1 == ephem2 { + continue; + } + + let j2000_ephem2 = + Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx2).unwrap()); + + // Query the ephemeris data for a bunch of different times. + let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { + ephem2.start_epoch() + } else { + ephem1.start_epoch() + }; + + let end_epoch = if ephem1.end_epoch() < ephem2.end_epoch() { + ephem1.end_epoch() + } else { + ephem2.end_epoch() + }; + + // Query at ten thousand items + let time_step = ((end_epoch - start_epoch).to_seconds() / 1_000.0).seconds(); + + let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); + info!("Query {} -> {} with {time_it}", j2000_ephem1, j2000_ephem2); + + let mut pos_err = [ + Vec::::with_capacity(1_000), + Vec::::with_capacity(1_000), + Vec::::with_capacity(1_000), + ]; + let mut vel_err = [ + Vec::::with_capacity(1_000), + Vec::::with_capacity(1_000), + Vec::::with_capacity(1_000), + ]; + + for epoch in time_it { + match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { + Ok((pos, vel, _)) => { + // Perform the same query in SPICE + let (state, _) = spice::spkezr( + match ephem1.name { + "Luna" => "Moon", + _ => ephem1.name, + }, + epoch.to_et_seconds(), + "J2000", + "NONE", + match ephem2.name { + "Luna" => "Moon", + _ => ephem2.name, + }, + ); + + // Check component by component instead of rebuilding a Vector3 from the SPICE data + for i in 0..6 { + if i < 3 { + let err = (pos[i] - state[i]).abs(); + pos_err[i].push(err); + + assert!( + relative_eq!(pos[i], state[i], epsilon = FAIL_POS_KM), + "{epoch:E}\npos[{i}] = {}\nexp = {}\nerr = {:e}", + pos[i], + state[i], + err + ); + } else { + let err = (vel[i - 3] - state[i]).abs(); + vel_err[i - 3].push(err); + + assert!( + relative_eq!(vel[i - 3], state[i], epsilon = FAIL_VEL_KM_S), + "{epoch:E}vel[{i}] = {}\nexp = {}\nerr = {:e}", + vel[i - 3], + state[i], + err + ); + } + } + } + Err(e) => { + panic!("At epoch {epoch:E}: {e}"); + } + }; + } + + for i in 0..6 { + let meanstd = if i < 3 { + pos_err[i].ameanstd().unwrap() + } else { + vel_err[i - 3].ameanstd().unwrap() + }; + + let med = if i < 3 { + pos_err[i].medinfo() + } else { + vel_err[i - 3].medinfo() + }; + + info!( + "Error on {}: mean = {:e}\tdev = {:e}\tlow q = {:e}\tmed = {:e}\tup q = {:e}", + match i { + 0 => "X", + 1 => "Y", + 2 => "Z", + 3 => "VX", + 4 => "VY", + 5 => "VZ", + _ => unreachable!(), + }, + meanstd.centre, + meanstd.dispersion, + med.lq, + med.median, + med.uq + ); + } + } + } +} diff --git a/tests/naif.rs b/tests/naif.rs index 5c50d4ef..2fa12a37 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -14,10 +14,7 @@ use anise::{ asn1::context::AniseContext, asn1::spline::{Evenness, Field, StateKind}, file_mmap, - naif::{ - daf::{Endianness, DAF}, - spk::SPK, - }, + naif::{daf::DAF, spk::SPK, Endian}, prelude::*, }; @@ -40,8 +37,8 @@ fn test_spk_load() { assert_eq!(de421.internal_filename, "NIO2SPK"); assert_eq!(de421.fwrd, 4); assert_eq!(de421.bwrd, 4); - assert_eq!(de421.endianness, Endianness::Little); - assert_eq!(de421.comments().len(), 1379); + assert_eq!(de421.endianness, Endian::Little); + assert_eq!(de421.comments().unwrap().len(), 1379); // Convert to SPK let spk: SPK = (&de421).try_into().unwrap(); println!("{}", spk); @@ -114,7 +111,7 @@ fn test_spk_load() { match splines.metadata.evenness { Evenness::Even { duration_ns } => { assert_eq!( - (duration_ns as i64).nanoseconds().in_seconds(), + (duration_ns as i64).nanoseconds().to_seconds(), meta.interval_length_s, "incorrect interval duration" ); @@ -145,7 +142,6 @@ fn test_spk_load() { } } -#[ignore] #[test] fn test_binary_pck_load() { if pretty_env_logger::try_init().is_err() { @@ -153,10 +149,10 @@ fn test_binary_pck_load() { } // Using the DE421 as demo because the correct data is in the DAF documentation - let filename = "data/earth_old_high_prec.bpc"; + let filename = "data/earth_latest_high_prec.bpc"; let bytes = file_mmap!(filename).unwrap(); let high_prec = DAF::parse(&bytes).unwrap(); - println!("{}", high_prec.comments()); - high_prec.summaries(); + println!("{}", high_prec.comments().unwrap()); + high_prec.summaries().unwrap(); } From e4d260c6ea1b4af3ad57e5f85369bb73bd15fea0 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 21 Oct 2022 17:55:00 -0600 Subject: [PATCH 02/48] Add an exhaustive test using Greg's rust-spice Lots of refactoring that helps me understand where things live Two important tasks coming up: 1. Add a Cartesian State type 2. Copy the Orbit type from Nyx 3. Change the SPICE reading to not use any allocation so that an ANISE structure can be built and used without creating a file. Signed-off-by: Christopher Rabotin --- .gitignore | 6 +- Cargo.toml | 19 +- analysis/requirements.txt | 8 + benches/crit_ephemerides.rs | 57 ++ benches/iai_ephemerides.rs | 52 ++ src/asn1/metadata.rs | 21 +- src/asn1/units.rs | 2 +- src/{ => astro}/frame.rs | 6 +- .../geodetic_frame.rs} | 36 +- src/astro/mod.rs | 22 + src/astro/orbit.rs | 1 + src/bin/anise/main.rs | 1 - src/cli/inspect.rs | 13 +- src/constants.rs | 35 +- src/context/load.rs | 2 + src/context/mod.rs | 2 - src/ephemerides/mod.rs | 58 ++ .../query_ephem.rs => ephemerides/paths.rs} | 241 +------- .../translate_to_parent.rs} | 13 +- src/ephemerides/translations.rs | 243 ++++++++ src/ephemeris.rs | 105 ---- src/errors.rs | 11 +- src/lib.rs | 10 +- src/math/interpolation/chebyshev.rs | 4 +- src/math/interpolation/mod.rs | 2 + src/math/mod.rs | 7 - src/naif/daf.rs | 23 +- src/naif/mod.rs | 1 + src/naif/spk/mod.rs | 21 +- src/naif/summaries.rs | 12 + src/spline.rs | 2 - tests/ephemerides/mod.rs | 2 +- tests/ephemerides/parent_translation_verif.rs | 2 - tests/ephemerides/paths.rs | 4 +- tests/ephemerides/translation.rs | 568 ++++++++++++++++++ tests/ephemerides/translation_verif.rs | 421 ------------- tests/naif.rs | 8 +- 37 files changed, 1164 insertions(+), 877 deletions(-) create mode 100644 analysis/requirements.txt create mode 100644 benches/crit_ephemerides.rs create mode 100644 benches/iai_ephemerides.rs rename src/{ => astro}/frame.rs (97%) rename src/{framedetail.rs => astro/geodetic_frame.rs} (76%) create mode 100644 src/astro/mod.rs create mode 100644 src/astro/orbit.rs create mode 100644 src/ephemerides/mod.rs rename src/{context/query_ephem.rs => ephemerides/paths.rs} (53%) rename src/{context/interp_ephem.rs => ephemerides/translate_to_parent.rs} (93%) create mode 100644 src/ephemerides/translations.rs delete mode 100644 src/ephemeris.rs create mode 100644 src/naif/summaries.rs create mode 100644 tests/ephemerides/translation.rs delete mode 100644 tests/ephemerides/translation_verif.rs diff --git a/.gitignore b/.gitignore index 0057295b..74cf9f1f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ /target Cargo.lock *.anis* -cspice \ No newline at end of file +cspice +*.parquet +*.svg +perf.data* +analysis/.venv \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 5237b84b..6dd1c529 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,8 +31,23 @@ approx = "0.5.1" [dev-dependencies] rust-spice = "0.7.3" -rstats = "1" +online-statistics = "0.2.6" +parquet = "25.0.0" +arrow = "25.0.0" +criterion = "0.3" +iai = "0.1" [features] default = ["std"] -std = [] \ No newline at end of file +std = [] + +[profile.bench] +debug = true + +[[bench]] +name = "iai_ephemerides" +harness = false + +[[bench]] +name = "crit_ephemerides" +harness = false \ No newline at end of file diff --git a/analysis/requirements.txt b/analysis/requirements.txt new file mode 100644 index 00000000..b59440bc --- /dev/null +++ b/analysis/requirements.txt @@ -0,0 +1,8 @@ +numpy==1.23.4 +pandas==1.5.1 +plotly==5.10.0 +polars==0.14.21 +python-dateutil==2.8.2 +pytz==2022.5 +six==1.16.0 +tenacity==8.1.0 diff --git a/benches/crit_ephemerides.rs b/benches/crit_ephemerides.rs new file mode 100644 index 00000000..8a9958fe --- /dev/null +++ b/benches/crit_ephemerides.rs @@ -0,0 +1,57 @@ +use anise::{ + constants::frames::{EARTH_J2000, LUNA_J2000}, + file_mmap, + prelude::*, +}; +use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use hifitime::prelude::*; +use spice; + +const NUM_QUERIES_PER_PAIR: f64 = 100.0; + +fn benchmark_single_hop_spice(time_it: TimeSeries) { + for epoch in time_it { + black_box(spice::spkezr( + "EARTH", + epoch.to_et_seconds(), + "J2000", + "NONE", + "MOON", + )); + } +} + +fn benchmark_single_hop_anise(ctx: &AniseContext, time_it: TimeSeries) { + for epoch in time_it { + black_box( + ctx.translate_from_to_km_s_geometric(EARTH_J2000, LUNA_J2000, epoch) + .unwrap(), + ); + } +} + +pub fn criterion_benchmark(c: &mut Criterion) { + let start_epoch = Epoch::from_gregorian_at_noon(1900, 1, 1, TimeScale::ET); + let end_epoch = Epoch::from_gregorian_at_noon(2099, 1, 1, TimeScale::ET); + let time_step = ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); + let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); + + // Load ANISE data + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::from_bytes(&buf); + + // Load SPICE data + spice::furnsh("data/de438s.bsp"); + + c.bench_function("ANISE ephemerides single hop", |b| { + b.iter(|| benchmark_single_hop_anise(&ctx, time_it.clone())) + }); + + c.bench_function("SPICE ephemerides single hop", |b| { + b.iter(|| benchmark_single_hop_spice(time_it.clone())) + }); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/benches/iai_ephemerides.rs b/benches/iai_ephemerides.rs new file mode 100644 index 00000000..a32cfdfc --- /dev/null +++ b/benches/iai_ephemerides.rs @@ -0,0 +1,52 @@ +use anise::{ + constants::frames::{EARTH_J2000, LUNA_J2000}, + file_mmap, + prelude::*, +}; +use hifitime::prelude::*; +use iai::black_box; +use spice; + +const NUM_QUERIES_PER_PAIR: f64 = 100.0; + +fn benchmark_single_hop_spice() { + let start_epoch = Epoch::from_gregorian_at_noon(1900, 1, 1, TimeScale::ET); + let end_epoch = Epoch::from_gregorian_at_noon(2099, 1, 1, TimeScale::ET); + let time_step = ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); + let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); + + // SPICE load + spice::furnsh("data/de438s.bsp"); + + for epoch in time_it { + black_box(spice::spkezr( + "EARTH", + epoch.to_et_seconds(), + "J2000", + "NONE", + "MOON", + )); + } + + spice::unload("data/de438s.bsp"); +} + +fn benchmark_single_hop_anise() { + let start_epoch = Epoch::from_gregorian_at_noon(1900, 1, 1, TimeScale::ET); + let end_epoch = Epoch::from_gregorian_at_noon(2099, 1, 1, TimeScale::ET); + let time_step = ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); + let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); + + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::from_bytes(&buf); + + for epoch in time_it { + black_box( + ctx.translate_from_to_km_s_geometric(EARTH_J2000, LUNA_J2000, epoch) + .unwrap(), + ); + } +} + +iai::main!(benchmark_single_hop_spice, benchmark_single_hop_anise); diff --git a/src/asn1/metadata.rs b/src/asn1/metadata.rs index 8a133c5e..def4dcec 100644 --- a/src/asn1/metadata.rs +++ b/src/asn1/metadata.rs @@ -38,19 +38,15 @@ impl Default for Metadata<'_> { impl<'a> Encode for Metadata<'a> { fn encoded_len(&self) -> der::Result { - let (centuries, nanoseconds) = self.creation_date.to_tai_parts(); self.anise_version.encoded_len()? - + centuries.encoded_len()? - + nanoseconds.encoded_len()? + + self.creation_date.encoded_len()? + Utf8StringRef::new(self.originator)?.encoded_len()? + Utf8StringRef::new(self.metadata_uri)?.encoded_len()? } fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { - let (centuries, nanoseconds) = self.creation_date.to_tai_parts(); self.anise_version.encode(encoder)?; - centuries.encode(encoder)?; - nanoseconds.encode(encoder)?; + self.creation_date.encode(encoder)?; Utf8StringRef::new(self.originator)?.encode(encoder)?; Utf8StringRef::new(self.metadata_uri)?.encode(encoder) } @@ -58,16 +54,11 @@ impl<'a> Encode for Metadata<'a> { impl<'a> Decode<'a> for Metadata<'a> { fn decode>(decoder: &mut R) -> der::Result { - let anise_version = decoder.decode()?; - let centuries = decoder.decode()?; - let nanoseconds = decoder.decode()?; - let originator: Utf8StringRef<'a> = decoder.decode()?; - let metadata_uri: Utf8StringRef<'a> = decoder.decode()?; Ok(Self { - anise_version, - originator: originator.as_str(), - creation_date: Epoch::from_tai_parts(centuries, nanoseconds), - metadata_uri: metadata_uri.as_str(), + anise_version: decoder.decode()?, + creation_date: decoder.decode()?, + originator: decoder.decode::>()?.as_str(), + metadata_uri: decoder.decode::>()?.as_str(), }) } } diff --git a/src/asn1/units.rs b/src/asn1/units.rs index b8b9ee3c..340a04e6 100644 --- a/src/asn1/units.rs +++ b/src/asn1/units.rs @@ -27,7 +27,7 @@ impl DistanceUnit { /// Returns the conversion factor of this distance unit to meters. /// E.g. To convert Self::Kilometers into Self::Meters, multiply by 1e-3. #[must_use] - pub const fn in_meters(&self) -> f64 { + pub const fn to_meters(&self) -> f64 { match self { Self::Micrometer => 1e6, Self::Millimeter => 1e3, diff --git a/src/frame.rs b/src/astro/frame.rs similarity index 97% rename from src/frame.rs rename to src/astro/frame.rs index 97473dff..311d34f4 100644 --- a/src/frame.rs +++ b/src/astro/frame.rs @@ -16,12 +16,12 @@ use crate::HashType; /// A Frame uniquely defined by its ephemeris center and orientation. Refer to FrameDetail for frames combined with parameters. #[derive(Copy, Clone, Debug, PartialEq, Eq)] -pub struct Frame { +pub struct RefFrame { pub ephemeris_hash: HashType, pub orientation_hash: HashType, } -impl Frame { +impl RefFrame { /// Constructs a new frame given its ephemeris and orientations hashes. pub const fn from_ephem_orient(ephemeris_hash: HashType, orientation_hash: HashType) -> Self { Self { @@ -71,7 +71,7 @@ impl Frame { } } -impl Display for Frame { +impl Display for RefFrame { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { let body_name = match hash_celestial_name(self.ephemeris_hash) { Some(name) => name.to_string(), diff --git a/src/framedetail.rs b/src/astro/geodetic_frame.rs similarity index 76% rename from src/framedetail.rs rename to src/astro/geodetic_frame.rs index eff595c0..615c38fc 100644 --- a/src/framedetail.rs +++ b/src/astro/geodetic_frame.rs @@ -10,7 +10,7 @@ use std::fmt::{Display, Formatter}; -use crate::frame::Frame; +use crate::astro::RefFrame; use crate::HashType; /// A Frame uniquely defined by its ephemeris center and orientation. @@ -20,24 +20,18 @@ use crate::HashType; /// 2. If a frame defines an equatorial radius, a semi major radius, and a flattening ratio, then /// is considered a geoid. #[derive(Copy, Clone, Debug, PartialEq)] -pub struct FrameDetail { - pub frame: Frame, - pub mu_km3s: Option, +pub struct GeodeticRefFrame { + pub frame: RefFrame, + pub mu_km3s: f64, pub equatorial_radius: Option, pub semi_major_radius: Option, pub flattening: Option, } -impl FrameDetail { - /// Returns whether this frame is a celestial frame - pub const fn is_celestial(&self) -> bool { - self.mu_km3s.is_some() - } - +impl GeodeticRefFrame { /// Returns whether this frame is a geoid frame pub const fn is_geoid(&self) -> bool { - self.is_celestial() - && self.equatorial_radius.is_some() + self.equatorial_radius.is_some() && self.semi_major_radius.is_some() && self.flattening.is_some() } @@ -59,32 +53,30 @@ impl FrameDetail { } } -impl Display for FrameDetail { +impl Display for GeodeticRefFrame { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { write!(f, "{}", self.frame)?; - if self.is_celestial() { - write!(f, " (μ = {} km3/s", self.mu_km3s.unwrap())?; - } + write!(f, " (μ = {} km3/s", self.mu_km3s)?; + if self.is_geoid() { write!( f, - ", eq. radius = {} km, sm axis = {} km, f = {})", + ", eq. radius = {} km, sm axis = {} km, f = {}", self.equatorial_radius.unwrap(), self.semi_major_radius.unwrap(), self.flattening.unwrap() - ) - } else { - write!(f, ")") + )?; } + write!(f, ")") } } #[allow(clippy::from_over_into)] -impl Into for FrameDetail { +impl Into for GeodeticRefFrame { /// Lossy operation to convert FrameDetail into a Frame. /// /// This will cause the LOSS of the constants stored in the frame detail. - fn into(self) -> Frame { + fn into(self) -> RefFrame { self.frame } } diff --git a/src/astro/mod.rs b/src/astro/mod.rs new file mode 100644 index 00000000..b8d32be9 --- /dev/null +++ b/src/astro/mod.rs @@ -0,0 +1,22 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +/// Defines the aberration corrections to the state of the target body to account for one-way light time and stellar aberration. +/// **WARNING:** This enum is a placeholder until [https://github.com/anise-toolkit/anise.rs/issues/26] is implemented. +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub enum Aberration { + None, +} + +pub mod frame; +pub mod geodetic_frame; + +pub use frame::RefFrame; +pub use geodetic_frame::GeodeticRefFrame; diff --git a/src/astro/orbit.rs b/src/astro/orbit.rs new file mode 100644 index 00000000..4429fda5 --- /dev/null +++ b/src/astro/orbit.rs @@ -0,0 +1 @@ +// TODO -- Grab from Nyx diff --git a/src/bin/anise/main.rs b/src/bin/anise/main.rs index 52d89b72..e48d09a5 100644 --- a/src/bin/anise/main.rs +++ b/src/bin/anise/main.rs @@ -61,7 +61,6 @@ fn main() -> Result<(), CliErrors> { match file_mmap!(file) { Ok(bytes) => { let context = AniseContext::try_from_bytes(&bytes)?; - context.check_integrity()?; println!("{}", context); Ok(()) } diff --git a/src/cli/inspect.rs b/src/cli/inspect.rs index 177b6742..c15b7d80 100644 --- a/src/cli/inspect.rs +++ b/src/cli/inspect.rs @@ -1,5 +1,4 @@ use crc32fast::hash; -use hifitime::Epoch; use std::fmt::{Display, Error as FmtError, Formatter}; use tabled::{Style, Table, Tabled}; @@ -12,8 +11,8 @@ struct Row<'a> { name: &'a str, data_kind: &'a str, hash: HashType, - start_epoch: Epoch, - end_epoch: Epoch, + start_epoch: String, + end_epoch: String, interpolation_kind: InterpolationKind, } @@ -53,8 +52,8 @@ impl<'a> Display for AniseContext<'a> { name: ephem.name, data_kind: "Ephemeris", hash: hash(ephem.name.as_bytes()), - start_epoch: ephem.start_epoch(), - end_epoch: ephem.end_epoch(), + start_epoch: format!("{:?}", ephem.start_epoch()), + end_epoch: format!("{:?}", ephem.end_epoch()), interpolation_kind: ephem.interpolation_kind, }); } @@ -64,8 +63,8 @@ impl<'a> Display for AniseContext<'a> { name: orientation.name, data_kind: "Orientation", hash: hash(orientation.name.as_bytes()), - start_epoch: orientation.start_epoch(), - end_epoch: orientation.end_epoch(), + start_epoch: format!("{:?}", orientation.start_epoch()), + end_epoch: format!("{:?}", orientation.end_epoch()), interpolation_kind: orientation.interpolation_kind, }); } diff --git a/src/constants.rs b/src/constants.rs index 6ee32e9f..4622dd87 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -72,22 +72,27 @@ pub mod orientations { } pub mod frames { - use crate::frame::Frame; + use crate::astro::RefFrame; use super::{celestial_objects::*, orientations::J2000}; - pub const SSB_J2000: Frame = Frame::from_ephem_orient(SOLAR_SYSTEM_BARYCENTER, J2000); - pub const MERCURY_J2000: Frame = Frame::from_ephem_orient(MERCURY, J2000); - pub const VENUS_J2000: Frame = Frame::from_ephem_orient(VENUS, J2000); - pub const EARTH_MOON_BARYCENTER_J2000: Frame = - Frame::from_ephem_orient(EARTH_MOON_BARYCENTER, J2000); - pub const MARS_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(MARS_BARYCENTER, J2000); - pub const JUPITER_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(JUPITER_BARYCENTER, J2000); - pub const SATURN_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(SATURN_BARYCENTER, J2000); - pub const URANUS_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(URANUS_BARYCENTER, J2000); - pub const NEPTUNE_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(NEPTUNE_BARYCENTER, J2000); - pub const PLUTO_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(PLUTO_BARYCENTER, J2000); - pub const SUN_J2000: Frame = Frame::from_ephem_orient(SUN, J2000); - pub const LUNA_J2000: Frame = Frame::from_ephem_orient(LUNA, J2000); - pub const EARTH_J2000: Frame = Frame::from_ephem_orient(EARTH, J2000); + pub const SSB_J2000: RefFrame = RefFrame::from_ephem_orient(SOLAR_SYSTEM_BARYCENTER, J2000); + pub const MERCURY_J2000: RefFrame = RefFrame::from_ephem_orient(MERCURY, J2000); + pub const VENUS_J2000: RefFrame = RefFrame::from_ephem_orient(VENUS, J2000); + pub const EARTH_MOON_BARYCENTER_J2000: RefFrame = + RefFrame::from_ephem_orient(EARTH_MOON_BARYCENTER, J2000); + pub const MARS_BARYCENTER_J2000: RefFrame = RefFrame::from_ephem_orient(MARS_BARYCENTER, J2000); + pub const JUPITER_BARYCENTER_J2000: RefFrame = + RefFrame::from_ephem_orient(JUPITER_BARYCENTER, J2000); + pub const SATURN_BARYCENTER_J2000: RefFrame = + RefFrame::from_ephem_orient(SATURN_BARYCENTER, J2000); + pub const URANUS_BARYCENTER_J2000: RefFrame = + RefFrame::from_ephem_orient(URANUS_BARYCENTER, J2000); + pub const NEPTUNE_BARYCENTER_J2000: RefFrame = + RefFrame::from_ephem_orient(NEPTUNE_BARYCENTER, J2000); + pub const PLUTO_BARYCENTER_J2000: RefFrame = + RefFrame::from_ephem_orient(PLUTO_BARYCENTER, J2000); + pub const SUN_J2000: RefFrame = RefFrame::from_ephem_orient(SUN, J2000); + pub const LUNA_J2000: RefFrame = RefFrame::from_ephem_orient(LUNA, J2000); + pub const EARTH_J2000: RefFrame = RefFrame::from_ephem_orient(EARTH, J2000); } diff --git a/src/context/load.rs b/src/context/load.rs index 6af0a13f..d26db2d2 100644 --- a/src/context/load.rs +++ b/src/context/load.rs @@ -23,6 +23,8 @@ impl<'a> AniseContext<'a> { match Self::from_der(bytes) { Ok(ctx) => { trace!("[try_from_bytes] loaded context successfully"); + // Check the full integrity on load of the file. + ctx.check_integrity()?; Ok(ctx) } Err(e) => { diff --git a/src/context/mod.rs b/src/context/mod.rs index e94da4a5..34d0ada8 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -10,9 +10,7 @@ pub mod append; pub mod integrity; -pub mod interp_ephem; pub mod load; pub mod merge; -pub mod query_ephem; pub mod rename; pub mod save; diff --git a/src/ephemerides/mod.rs b/src/ephemerides/mod.rs new file mode 100644 index 00000000..a8878fa3 --- /dev/null +++ b/src/ephemerides/mod.rs @@ -0,0 +1,58 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use hifitime::{Epoch, TimeUnits}; + +use crate::asn1::{ephemeris::Ephemeris, spline::Evenness}; + +pub mod paths; +pub mod translations; +pub mod translate_to_parent; + +impl<'a> Ephemeris<'a> { + /// Returns the first epoch in the data, which will be the chronological "end" epoch if the ephemeris is generated backward + fn first_epoch(&self) -> Epoch { + self.ref_epoch + } + + /// Returns the last epoch in the data, which will be the chronological "start" epoch if the ephemeris is generated backward + fn last_epoch(&self) -> Epoch { + match self.splines.metadata.evenness { + Evenness::Even { duration_ns } => { + // Grab the number of splines + self.ref_epoch + ((self.splines.len() as f64) * (duration_ns as i64).nanoseconds()) + } + Evenness::Uneven { indexes: _ } => { + todo!() + } + } + } + + /// Returns the starting epoch of this ephemeris. It is guaranteed that start_epoch <= end_epoch. + /// + /// # Note + /// + If the ephemeris is stored in chronological order, then the start epoch is the same as the first epoch. + /// + If the ephemeris is stored in anti-chronological order, then the start epoch is the last epoch. + pub fn start_epoch(&self) -> Epoch { + if self.first_epoch() > self.last_epoch() { + self.last_epoch() + } else { + self.first_epoch() + } + } + + pub fn end_epoch(&self) -> Epoch { + if self.first_epoch() > self.last_epoch() { + self.first_epoch() + } else { + self.last_epoch() + } + } +} diff --git a/src/context/query_ephem.rs b/src/ephemerides/paths.rs similarity index 53% rename from src/context/query_ephem.rs rename to src/ephemerides/paths.rs index 24137128..f0b1e82c 100644 --- a/src/context/query_ephem.rs +++ b/src/ephemerides/paths.rs @@ -10,16 +10,13 @@ use log::{error, trace}; -use crate::asn1::units::*; use crate::constants::orientations::J2000; use crate::errors::InternalErrorKind; -use crate::hifitime::Epoch; -use crate::math::{Aberration, Vector3}; use crate::HashType; use crate::{ asn1::{context::AniseContext, ephemeris::Ephemeris}, + astro::RefFrame, errors::{AniseError, IntegrityErrorKind}, - frame::Frame, }; /// **Limitation:** no translation or rotation may have more than 8 nodes. @@ -48,8 +45,11 @@ impl<'a> AniseContext<'a> { error!("at least one ephemeris hierarchy takes root in hash {} but {}'s parent is {}", common_parent_hash, child.name, child.parent_ephemeris_hash); return Err(AniseError::IntegrityError( IntegrityErrorKind::DisjointRoots { - from_frame: Frame::from_ephem_orient(common_parent_hash, J2000), - to_frame: Frame::from_ephem_orient( + from_frame: RefFrame::from_ephem_orient( + common_parent_hash, + J2000, + ), + to_frame: RefFrame::from_ephem_orient( child.parent_ephemeris_hash, J2000, ), @@ -68,7 +68,6 @@ impl<'a> AniseContext<'a> { }; } } - // return Ok(common_parent_hash); Err(AniseError::MaxTreeDepth) } @@ -99,7 +98,7 @@ impl<'a> AniseContext<'a> { /// Try to construct the path from the source frame all the way to the root ephemeris of this context. pub fn ephemeris_path_to_root( &self, - source: &Frame, + source: &RefFrame, ) -> Result<(usize, [Option; MAX_TREE_DEPTH]), AniseError> { // Build a tree, set a fixed depth to avoid allocations let mut of_path = [None; MAX_TREE_DEPTH]; @@ -157,8 +156,8 @@ impl<'a> AniseContext<'a> { /// the ephemeris up to the root. pub fn common_ephemeris_path( &self, - from_frame: Frame, - to_frame: Frame, + from_frame: RefFrame, + to_frame: RefFrame, ) -> Result<(usize, [Option; MAX_TREE_DEPTH], HashType), AniseError> { // TODO: Consider returning a structure that has explicit fields -- see how I use it first if from_frame == to_frame { @@ -212,7 +211,6 @@ impl<'a> AniseContext<'a> { // This is where the paths branch meet, so the root is the parent of the current item. // Recall that the path is _from_ the source to the root of the context, so we're walking them // backward until we find "where" the paths branched out. - trace!("common path: {common_path:?}"); return Ok((items, common_path, to_obj.unwrap())); } else { common_path[items] = Some(from_obj.unwrap()); @@ -225,225 +223,4 @@ impl<'a> AniseContext<'a> { Err(AniseError::IntegrityError(IntegrityErrorKind::DataMissing)) } } - - /// Returns the position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`. - /// - /// **WARNING:** This function only performs the translation and no rotation whatsoever. Use the `transform_from_to` function instead to include rotations. - /// - /// Note: this function performs a recursion of no more than twice the [MAX_TREE_DEPTH]. - pub fn translate_from_to( - &self, - from_frame: Frame, - to_frame: Frame, - epoch: Epoch, - ab_corr: Aberration, - distance_unit: DistanceUnit, - time_unit: TimeUnit, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { - if from_frame == to_frame { - // Both frames match, return this frame's hash (i.e. no need to go higher up). - return Ok((Vector3::zeros(), Vector3::zeros(), Vector3::zeros())); - } - - let (node_count, path, common_node) = self.common_ephemeris_path(to_frame, from_frame)?; - - // The fwrd variables are the states from the `from frame` to the common node - let (mut pos_fwrd, mut vel_fwrd, mut acc_fwrd, mut frame_fwrd) = - if from_frame.ephem_origin_hash_match(common_node) { - ( - Vector3::zeros(), - Vector3::zeros(), - Vector3::zeros(), - from_frame, - ) - } else { - self.translate_to_parent(from_frame, epoch, ab_corr, distance_unit, time_unit)? - }; - - // The bwrd variables are the states from the `to frame` back to the common node - let (mut pos_bwrd, mut vel_bwrd, mut acc_bwrd, mut frame_bwrd) = - if to_frame.ephem_origin_hash_match(common_node) { - ( - Vector3::zeros(), - Vector3::zeros(), - Vector3::zeros(), - to_frame, - ) - } else { - self.translate_to_parent(to_frame, epoch, ab_corr, distance_unit, time_unit)? - }; - - for cur_node_hash in path.iter().take(node_count) { - if !frame_fwrd.ephem_origin_hash_match(common_node) { - let (cur_pos_fwrd, cur_vel_fwrd, cur_acc_fwrd, cur_frame_fwrd) = - self.translate_to_parent(frame_fwrd, epoch, ab_corr, distance_unit, time_unit)?; - - pos_fwrd += cur_pos_fwrd; - vel_fwrd += cur_vel_fwrd; - acc_fwrd += cur_acc_fwrd; - frame_fwrd = cur_frame_fwrd; - } - - if !frame_bwrd.ephem_origin_hash_match(common_node) { - let (cur_pos_bwrd, cur_vel_bwrd, cur_acc_bwrd, cur_frame_bwrd) = - self.translate_to_parent(frame_bwrd, epoch, ab_corr, distance_unit, time_unit)?; - - pos_bwrd += cur_pos_bwrd; - vel_bwrd += cur_vel_bwrd; - acc_bwrd += cur_acc_bwrd; - frame_bwrd = cur_frame_bwrd; - } - - // We know this exist, so we can safely unwrap it - if cur_node_hash.unwrap() == common_node { - break; - } - } - - Ok(( - pos_fwrd - pos_bwrd, - vel_fwrd - vel_bwrd, - acc_fwrd - acc_bwrd, - )) - } - - /// Returns the position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in km, the velocity in km/s, and the acceleration in km/s^2. - pub fn translate_from_to_km_s( - &self, - from_frame: Frame, - to_frame: Frame, - epoch: Epoch, - ab_corr: Aberration, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { - self.translate_from_to( - from_frame, - to_frame, - epoch, - ab_corr, - DistanceUnit::Kilometer, - TimeUnit::Second, - ) - } - - /// Returns the position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in m, the velocity in m/s, and the acceleration in m/s^2. - pub fn translate_from_to_m_s( - &self, - from_frame: Frame, - to_frame: Frame, - epoch: Epoch, - ab_corr: Aberration, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { - self.translate_from_to( - from_frame, - to_frame, - epoch, - ab_corr, - DistanceUnit::Meter, - TimeUnit::Second, - ) - } - - /// Returns the geometric position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in km, the velocity in km/s, and the acceleration in km/s^2. - pub fn translate_from_to_km_s_geometric( - &self, - from_frame: Frame, - to_frame: Frame, - epoch: Epoch, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { - self.translate_from_to( - from_frame, - to_frame, - epoch, - Aberration::None, - DistanceUnit::Kilometer, - TimeUnit::Second, - ) - } - - /// Returns the geometric position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in m, the velocity in m/s, and the acceleration in m/s^2. - pub fn translate_from_to_m_s_geometric( - &self, - from_frame: Frame, - to_frame: Frame, - epoch: Epoch, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { - self.translate_from_to( - from_frame, - to_frame, - epoch, - Aberration::None, - DistanceUnit::Meter, - TimeUnit::Second, - ) - } - - /// Try to construct the path from the source frame all the way to the root ephemeris of this context. - pub fn translate_to_root( - &self, - source: Frame, - epoch: Epoch, - ab_corr: Aberration, - distance_unit: DistanceUnit, - time_unit: TimeUnit, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { - // Build a tree, set a fixed depth to avoid allocations - let mut prev_ephem_hash = source.ephemeris_hash; - - let mut pos = Vector3::zeros(); - let mut vel = Vector3::zeros(); - let mut acc = Vector3::zeros(); - - for _ in 0..MAX_TREE_DEPTH { - let idx = self.ephemeris_lut.index_for_hash(&prev_ephem_hash)?; - let parent_ephem = self.try_ephemeris_data(idx.into())?; - let parent_hash = parent_ephem.parent_ephemeris_hash; - - let (this_pos, this_vel, this_accel, _) = - self.translate_to_parent(source, epoch, ab_corr, distance_unit, time_unit)?; - - pos += this_pos; - vel += this_vel; - acc += this_accel; - - if parent_hash == self.try_find_context_root()? { - return Ok((pos, vel, acc)); - } else if let Err(e) = self.ephemeris_lut.index_for_hash(&parent_hash) { - if e == AniseError::ItemNotFound { - // We have reached the root of this ephemeris and it has no parent. - error!("{parent_hash} has no parent in this context"); - return Ok((pos, vel, acc)); - } - } - prev_ephem_hash = parent_hash; - } - Err(AniseError::MaxTreeDepth) - } - - /// Translates a state with its origin (`to_frame`) and given its units (distance_unit, time_unit), returns that state with respect to the requested frame - /// - /// **WARNING:** This function only performs the translation and no rotation _whatsoever_. Use the `transform_state_to` function instead to include rotations. - #[allow(clippy::too_many_arguments)] - pub fn translate_state_to( - &self, - position: Vector3, - velocity: Vector3, - from_frame: Frame, - to_frame: Frame, - epoch: Epoch, - ab_corr: Aberration, - distance_unit: DistanceUnit, - time_unit: TimeUnit, - ) -> Result<(Vector3, Vector3), AniseError> { - // Compute the frame translation - let (frame_pos, frame_vel, _) = self.translate_from_to( - from_frame, - to_frame, - epoch, - ab_corr, - distance_unit, - time_unit, - )?; - - Ok((position + frame_pos, velocity + frame_vel)) - } } diff --git a/src/context/interp_ephem.rs b/src/ephemerides/translate_to_parent.rs similarity index 93% rename from src/context/interp_ephem.rs rename to src/ephemerides/translate_to_parent.rs index 0a8de43f..8ff8eaa2 100644 --- a/src/context/interp_ephem.rs +++ b/src/ephemerides/translate_to_parent.rs @@ -13,10 +13,11 @@ use log::trace; use crate::asn1::common::InterpolationKind; use crate::asn1::spline::Field; use crate::asn1::units::*; +use crate::astro::Aberration; use crate::hifitime::Epoch; use crate::math::interpolation::chebyshev::cheby_eval; -use crate::math::{Aberration, Vector3}; -use crate::{asn1::context::AniseContext, errors::AniseError, frame::Frame}; +use crate::math::Vector3; +use crate::{asn1::context::AniseContext, astro::RefFrame, errors::AniseError}; impl<'a> AniseContext<'a> { /// Returns the position vector and velocity vector of the `source` with respect to its parent in the ephemeris at the provided epoch, @@ -32,12 +33,12 @@ impl<'a> AniseContext<'a> { /// **WARNING:** This function only performs the translation and no rotation whatsoever. Use the `transform_to_parent_from` function instead to include rotations. pub fn translate_to_parent( &self, - source: Frame, + source: RefFrame, epoch: Epoch, _ab_corr: Aberration, distance_unit: DistanceUnit, time_unit: TimeUnit, - ) -> Result<(Vector3, Vector3, Vector3, Frame), AniseError> { + ) -> Result<(Vector3, Vector3, Vector3, RefFrame), AniseError> { // TODO: Create a CartesianState struct which can be "upgraded" to an Orbit if the frame is of the correct type? // I guess this is what the `Orbit` struct in Nyx does. // First, let's get a reference to the ephemeris given the frame. @@ -50,7 +51,7 @@ impl<'a> AniseContext<'a> { let new_frame = source.with_ephem(ephem.parent_ephemeris_hash); - trace!("query {source} wrt to {} @ {}", new_frame, epoch); + trace!("query {source} wrt to {new_frame} @ {epoch:E}"); // Perform a translation with position and velocity; let mut pos = Vector3::zeros(); @@ -103,7 +104,7 @@ impl<'a> AniseContext<'a> { } // Convert the units based on the storage units. - let dist_unit_factor = ephem.distance_unit.from_meters() * distance_unit.in_meters(); + let dist_unit_factor = ephem.distance_unit.from_meters() * distance_unit.to_meters(); let time_unit_factor = ephem.time_unit.from_seconds() * time_unit.in_seconds(); Ok(( diff --git a/src/ephemerides/translations.rs b/src/ephemerides/translations.rs new file mode 100644 index 00000000..11b8ed14 --- /dev/null +++ b/src/ephemerides/translations.rs @@ -0,0 +1,243 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use log::error; + +use crate::asn1::units::*; +use crate::astro::Aberration; +use crate::hifitime::Epoch; +use crate::math::Vector3; +use crate::{asn1::context::AniseContext, astro::RefFrame, errors::AniseError}; + +/// **Limitation:** no translation or rotation may have more than 8 nodes. +pub const MAX_TREE_DEPTH: usize = 8; + +impl<'a> AniseContext<'a> { + /// Returns the position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`. + /// + /// **WARNING:** This function only performs the translation and no rotation whatsoever. Use the `transform_from_to` function instead to include rotations. + /// + /// Note: this function performs a recursion of no more than twice the [MAX_TREE_DEPTH]. + pub fn translate_from_to( + &self, + from_frame: RefFrame, + to_frame: RefFrame, + epoch: Epoch, + ab_corr: Aberration, + distance_unit: DistanceUnit, + time_unit: TimeUnit, + ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + if from_frame == to_frame { + // Both frames match, return this frame's hash (i.e. no need to go higher up). + return Ok((Vector3::zeros(), Vector3::zeros(), Vector3::zeros())); + } + + let (node_count, path, common_node) = self.common_ephemeris_path(to_frame, from_frame)?; + + // The fwrd variables are the states from the `from frame` to the common node + let (mut pos_fwrd, mut vel_fwrd, mut acc_fwrd, mut frame_fwrd) = + if from_frame.ephem_origin_hash_match(common_node) { + ( + Vector3::zeros(), + Vector3::zeros(), + Vector3::zeros(), + from_frame, + ) + } else { + self.translate_to_parent(from_frame, epoch, ab_corr, distance_unit, time_unit)? + }; + + // The bwrd variables are the states from the `to frame` back to the common node + let (mut pos_bwrd, mut vel_bwrd, mut acc_bwrd, mut frame_bwrd) = + if to_frame.ephem_origin_hash_match(common_node) { + ( + Vector3::zeros(), + Vector3::zeros(), + Vector3::zeros(), + to_frame, + ) + } else { + self.translate_to_parent(to_frame, epoch, ab_corr, distance_unit, time_unit)? + }; + + for cur_node_hash in path.iter().take(node_count) { + if !frame_fwrd.ephem_origin_hash_match(common_node) { + let (cur_pos_fwrd, cur_vel_fwrd, cur_acc_fwrd, cur_frame_fwrd) = + self.translate_to_parent(frame_fwrd, epoch, ab_corr, distance_unit, time_unit)?; + + pos_fwrd += cur_pos_fwrd; + vel_fwrd += cur_vel_fwrd; + acc_fwrd += cur_acc_fwrd; + frame_fwrd = cur_frame_fwrd; + } + + if !frame_bwrd.ephem_origin_hash_match(common_node) { + let (cur_pos_bwrd, cur_vel_bwrd, cur_acc_bwrd, cur_frame_bwrd) = + self.translate_to_parent(frame_bwrd, epoch, ab_corr, distance_unit, time_unit)?; + + pos_bwrd += cur_pos_bwrd; + vel_bwrd += cur_vel_bwrd; + acc_bwrd += cur_acc_bwrd; + frame_bwrd = cur_frame_bwrd; + } + + // We know this exist, so we can safely unwrap it + if cur_node_hash.unwrap() == common_node { + break; + } + } + + Ok(( + pos_fwrd - pos_bwrd, + vel_fwrd - vel_bwrd, + acc_fwrd - acc_bwrd, + )) + } + + /// Returns the position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in km, the velocity in km/s, and the acceleration in km/s^2. + pub fn translate_from_to_km_s( + &self, + from_frame: RefFrame, + to_frame: RefFrame, + epoch: Epoch, + ab_corr: Aberration, + ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + self.translate_from_to( + from_frame, + to_frame, + epoch, + ab_corr, + DistanceUnit::Kilometer, + TimeUnit::Second, + ) + } + + /// Returns the position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in m, the velocity in m/s, and the acceleration in m/s^2. + pub fn translate_from_to_m_s( + &self, + from_frame: RefFrame, + to_frame: RefFrame, + epoch: Epoch, + ab_corr: Aberration, + ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + self.translate_from_to( + from_frame, + to_frame, + epoch, + ab_corr, + DistanceUnit::Meter, + TimeUnit::Second, + ) + } + + /// Returns the geometric position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in km, the velocity in km/s, and the acceleration in km/s^2. + pub fn translate_from_to_km_s_geometric( + &self, + from_frame: RefFrame, + to_frame: RefFrame, + epoch: Epoch, + ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + self.translate_from_to( + from_frame, + to_frame, + epoch, + Aberration::None, + DistanceUnit::Kilometer, + TimeUnit::Second, + ) + } + + /// Returns the geometric position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in m, the velocity in m/s, and the acceleration in m/s^2. + pub fn translate_from_to_m_s_geometric( + &self, + from_frame: RefFrame, + to_frame: RefFrame, + epoch: Epoch, + ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + self.translate_from_to( + from_frame, + to_frame, + epoch, + Aberration::None, + DistanceUnit::Meter, + TimeUnit::Second, + ) + } + + /// Try to construct the path from the source frame all the way to the root ephemeris of this context. + pub fn translate_to_root( + &self, + source: RefFrame, + epoch: Epoch, + ab_corr: Aberration, + distance_unit: DistanceUnit, + time_unit: TimeUnit, + ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + // Build a tree, set a fixed depth to avoid allocations + let mut prev_ephem_hash = source.ephemeris_hash; + + let mut pos = Vector3::zeros(); + let mut vel = Vector3::zeros(); + let mut acc = Vector3::zeros(); + + for _ in 0..MAX_TREE_DEPTH { + let idx = self.ephemeris_lut.index_for_hash(&prev_ephem_hash)?; + let parent_ephem = self.try_ephemeris_data(idx.into())?; + let parent_hash = parent_ephem.parent_ephemeris_hash; + + let (this_pos, this_vel, this_accel, _) = + self.translate_to_parent(source, epoch, ab_corr, distance_unit, time_unit)?; + + pos += this_pos; + vel += this_vel; + acc += this_accel; + + if parent_hash == self.try_find_context_root()? { + return Ok((pos, vel, acc)); + } else if let Err(e) = self.ephemeris_lut.index_for_hash(&parent_hash) { + if e == AniseError::ItemNotFound { + // We have reached the root of this ephemeris and it has no parent. + error!("{parent_hash} has no parent in this context"); + return Ok((pos, vel, acc)); + } + } + prev_ephem_hash = parent_hash; + } + Err(AniseError::MaxTreeDepth) + } + + /// Translates a state with its origin (`to_frame`) and given its units (distance_unit, time_unit), returns that state with respect to the requested frame + /// + /// **WARNING:** This function only performs the translation and no rotation _whatsoever_. Use the `transform_state_to` function instead to include rotations. + #[allow(clippy::too_many_arguments)] + pub fn translate_state_to( + &self, + position: Vector3, + velocity: Vector3, + from_frame: RefFrame, + to_frame: RefFrame, + epoch: Epoch, + ab_corr: Aberration, + distance_unit: DistanceUnit, + time_unit: TimeUnit, + ) -> Result<(Vector3, Vector3), AniseError> { + // Compute the frame translation + let (frame_pos, frame_vel, _) = self.translate_from_to( + from_frame, + to_frame, + epoch, + ab_corr, + distance_unit, + time_unit, + )?; + + Ok((position + frame_pos, velocity + frame_vel)) + } +} diff --git a/src/ephemeris.rs b/src/ephemeris.rs deleted file mode 100644 index 741b32ef..00000000 --- a/src/ephemeris.rs +++ /dev/null @@ -1,105 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use hifitime::{Epoch, TimeUnits}; - -use crate::{ - asn1::{common::InterpolationKind, ephemeris::Ephemeris, spline::Evenness}, - errors::{AniseError, InternalErrorKind}, -}; - -impl<'a> Ephemeris<'a> { - /// Returns the first epoch in the data, which will be the chronological "end" epoch if the ephemeris is generated backward - fn first_epoch(&self) -> Epoch { - self.ref_epoch - } - - /// Returns the last epoch in the data, which will be the chronological "start" epoch if the ephemeris is generated backward - fn last_epoch(&self) -> Epoch { - match self.splines.metadata.evenness { - Evenness::Even { duration_ns } => { - // Grab the number of splines - self.ref_epoch + ((self.splines.len() as f64) * (duration_ns as i64).nanoseconds()) - } - Evenness::Uneven { indexes: _ } => { - todo!() - } - } - } - - /// Returns the starting epoch of this ephemeris. It is guaranteed that start_epoch <= end_epoch. - /// - /// # Note - /// + If the ephemeris is stored in chronological order, then the start epoch is the same as the first epoch. - /// + If the ephemeris is stored in anti-chronological order, then the start epoch is the last epoch. - pub fn start_epoch(&self) -> Epoch { - if self.first_epoch() > self.last_epoch() { - self.last_epoch() - } else { - self.first_epoch() - } - } - - pub fn end_epoch(&self) -> Epoch { - if self.first_epoch() > self.last_epoch() { - self.first_epoch() - } else { - self.last_epoch() - } - } - - /// Evaluate this ephemeris at the requested epoch and returns the position only. - pub fn pos(&self, req_epoch: Epoch) -> Result<[f64; 3], AniseError> { - let orbit = self.posvel(req_epoch)?; - Ok([orbit[0], orbit[1], orbit[2]]) - } - - /// Evaluate this ephemeris at the requested epoch and returns the velocity only. - pub fn vel(&self, req_epoch: Epoch) -> Result<[f64; 3], AniseError> { - let orbit = self.posvel(req_epoch)?; - Ok([orbit[3], orbit[4], orbit[5]]) - } - - /// Evaluate this ephemeris at the requested epoch and returns an orbit structure. - pub fn posvel(&self, _req_epoch: Epoch) -> Result<[f64; 6], AniseError> { - if self.interpolation_kind != InterpolationKind::ChebyshevSeries { - return Err(InternalErrorKind::InterpolationNotSupported.into()); - } - todo!() - // match self.splines.kind { - // SplineSpacing::Uneven { .. } => { - // Err(InternalErrorKind::InterpolationNotSupported.into()) - // } - // SplineSpacing::Even { window_duration_s } => { - // // Compute the offset compared to the reference epoch of this ephemeris. - // let offset_s = if self.backward { - // (req_epoch.epoch - self.ref_epoch.epoch).in_seconds() - // } else { - // (self.ref_epoch.epoch - req_epoch.epoch).in_seconds() - // }; - - // // The index for a fixed window is simply the rounded division. - // let index = if self.backward { - // (offset_s / window_duration_s).ceil() - // } else { - // (offset_s / window_duration_s).floor() - // }; - - // // Then let the spline compute the state. - // self.splines.posvel_at( - // index as usize, - // offset_s, - // window_duration_s, - // self.interpolation_kind, - // ) - // } - // } - } -} diff --git a/src/errors.rs b/src/errors.rs index 63c5d074..64f85601 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -11,9 +11,9 @@ use hifitime::Epoch; use crate::asn1::semver::Semver; +use crate::astro::RefFrame; use crate::der::Error as Asn1Error; use crate::der::Error as DerError; -use crate::frame::Frame; use core::convert::From; use core::fmt; use std::io::ErrorKind as IOErrorKind; @@ -52,8 +52,8 @@ pub enum AniseError { FileExists, /// Raised if a transformation is requested but the frames have no common origin DisjointFrames { - from_frame: Frame, - to_frame: Frame, + from_frame: RefFrame, + to_frame: RefFrame, }, /// Raised if the ephemeris or orientation is deeper to the context origin than this library supports MaxTreeDepth, @@ -83,7 +83,10 @@ pub enum IntegrityErrorKind { /// The lookup table is broken somehow LookupTable, /// Raised if a transformation is requested but the frames have no common origin - DisjointRoots { from_frame: Frame, to_frame: Frame }, + DisjointRoots { + from_frame: RefFrame, + to_frame: RefFrame, + }, } impl From for AniseError { diff --git a/src/lib.rs b/src/lib.rs index 0e71aed0..ec5cd0ae 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,26 +17,24 @@ pub use hifitime::Epoch; pub mod constants; pub mod context; -pub mod ephemeris; +pub mod ephemerides; pub mod errors; -pub mod frame; -pub mod framedetail; pub mod math; pub mod spline; pub mod prelude { pub use crate::asn1::context::AniseContext; pub use crate::asn1::units::*; + pub use crate::astro::Aberration; pub use crate::errors::AniseError; - pub use crate::math::Aberration; pub use hifitime::{Epoch, TimeScale, TimeUnits}; pub use std::fs::File; } pub mod asn1; -pub mod naif; - +pub mod astro; pub mod cli; +pub mod naif; /// Defines the number of bytes in a double (prevents magic numbers) pub(crate) const DBL_SIZE: usize = 8; diff --git a/src/math/interpolation/chebyshev.rs b/src/math/interpolation/chebyshev.rs index b0fa82db..36198cb4 100644 --- a/src/math/interpolation/chebyshev.rs +++ b/src/math/interpolation/chebyshev.rs @@ -8,8 +8,6 @@ * Documentation: https://nyxspace.com/ */ -// TODO: Consider making a trait for these - use hifitime::{Epoch, Unit as DurationUnit}; use crate::{ @@ -45,7 +43,7 @@ pub(crate) fn cheby_eval( // In seconds let eval_epoch_et_s = eval_epoch.to_et_seconds(); - let spline_idx_f = (ephem_start_delta_s / window_duration_s).round(); // Round seems to work + let spline_idx_f = (ephem_start_delta_s / window_duration_s).round(); let midpoint = splines.fetch(spline_idx_f as usize, 0, Field::MidPoint)?; diff --git a/src/math/interpolation/mod.rs b/src/math/interpolation/mod.rs index 585580e8..9cee84ea 100644 --- a/src/math/interpolation/mod.rs +++ b/src/math/interpolation/mod.rs @@ -8,4 +8,6 @@ * Documentation: https://nyxspace.com/ */ +// TODO: Consider making a trait for all interpolation schemes. + pub mod chebyshev; diff --git a/src/math/mod.rs b/src/math/mod.rs index 1e3b8f5c..7081e10b 100644 --- a/src/math/mod.rs +++ b/src/math/mod.rs @@ -14,10 +14,3 @@ extern crate nalgebra; pub type Vector3 = nalgebra::Vector3; pub mod interpolation; - -/// Defines the aberration corrections to the state of the target body to account for one-way light time and stellar aberration. -/// **WARNING:** This enum is a placeholder until [https://github.com/anise-toolkit/anise.rs/issues/26] is implemented. -#[derive(Copy, Clone, Debug, PartialEq, Eq)] -pub enum Aberration { - None, -} diff --git a/src/naif/daf.rs b/src/naif/daf.rs index b8be4871..4bf91248 100644 --- a/src/naif/daf.rs +++ b/src/naif/daf.rs @@ -11,7 +11,7 @@ pub(crate) use super::Endian; use crate::{parse_bytes_as, prelude::AniseError, DBL_SIZE}; use core::convert::TryInto; -use log::{debug, error, info}; +use log::{debug, error, info, warn}; pub(crate) const RCRD_LEN: usize = 1024; pub(crate) const INT_SIZE: usize = 4; @@ -53,7 +53,7 @@ impl<'a> DAF<'a> { if idx == 0 && content != "DAF" { return Err(AniseError::DAFParserError(format!( "Cannot parse file whose identifier is not DAF: `{}`", - locidw + locidw, ))); } else if idx == 1 { match content.trim() { @@ -153,11 +153,10 @@ impl<'a> DAF<'a> { let mut rslt = String::new(); // FWRD has the initial record of the summary. So we assume that all records between the second record and that one are comments for rid in 1..self.fwrd { - // match core::str::from_utf8(&self.bytes[rid * RCRD_LEN..(rid + 1) * RCRD_LEN]) { match core::str::from_utf8( self.bytes .get(rid * RCRD_LEN..(rid + 1) * RCRD_LEN) - .ok_or(AniseError::MalformedData(0))?, + .ok_or(AniseError::MalformedData((rid + 1) * RCRD_LEN))?, ) { Ok(s) => rslt += s.replace("\u{0}\u{0}", " ").replace('\u{0}', "\n").trim(), Err(e) => { @@ -208,7 +207,21 @@ impl<'a> DAF<'a> { let length = DBL_SIZE * self.nd + INT_SIZE * self.ni; for i in (0..nsummaries * length).step_by(length) { let j = 3 * DBL_SIZE + i; - let name = core::str::from_utf8(&name_record[i..i + length]).unwrap(); + let name = if name_record.is_empty() { + warn!("name record is empty! Using `UNNAMED SPACECRAFT` instead"); + "UNNAMED SPACECRAFT" + } else { + match core::str::from_utf8(&name_record[i..i + length]) { + Ok(name) => name, + Err(e) => { + warn!( + "malformed name record: `{e}` from {:?}! Using `UNNAMED SPACECRAFT` instead", + &name_record[i..i + length] + ); + "UNNAMED SPACECRAFT" + } + } + }; if name.starts_with(' ') { println!("WARNING: Parsing might be wrong because the first character of the name summary is a space: `{}`", name); println!( diff --git a/src/naif/mod.rs b/src/naif/mod.rs index 3f037bf2..38ee5864 100644 --- a/src/naif/mod.rs +++ b/src/naif/mod.rs @@ -10,6 +10,7 @@ pub mod daf; pub mod spk; +pub mod summaries; #[macro_export] macro_rules! parse_bytes_as { diff --git a/src/naif/spk/mod.rs b/src/naif/spk/mod.rs index 7e0a5ca1..b14153c0 100644 --- a/src/naif/spk/mod.rs +++ b/src/naif/spk/mod.rs @@ -51,10 +51,13 @@ impl<'a> SPK<'a> { continue; } - if seg.data_type != DataType::ChebyshevPositionOnly { - return Err(AniseError::DAFParserError( - "Only cheby supported".to_string(), - )); + if seg.data_type != DataType::ChebyshevPositionOnly + && seg.data_type != DataType::ChebyshevPositionVelocity + { + return Err(AniseError::DAFParserError(format!( + "{:?} not yet supported", + seg.data_type + ))); } // For type 2, the config data is at the very end of the record @@ -110,13 +113,13 @@ impl<'a> SPK<'a> { let rcrd_mid_point = parse_bytes_as!( f64, &self.daf.bytes[r_dbl_idx..DBL_SIZE + r_dbl_idx], - Endian::Little + self.daf.endianness ); r_dbl_idx += DBL_SIZE; let rcrd_radius_s = parse_bytes_as!( f64, &self.daf.bytes[r_dbl_idx..DBL_SIZE + r_dbl_idx], - Endian::Little + self.daf.endianness ); r_dbl_idx += DBL_SIZE; @@ -128,7 +131,7 @@ impl<'a> SPK<'a> { parse_bytes_as!( f64, raw_x_coeffs[DBL_SIZE * item..DBL_SIZE * (item + 1)], - Endian::Little + self.daf.endianness ) }) .collect::<_>(); @@ -139,7 +142,7 @@ impl<'a> SPK<'a> { parse_bytes_as!( f64, raw_y_coeffs[DBL_SIZE * item..DBL_SIZE * (item + 1)], - Endian::Little + self.daf.endianness ) }) .collect::<_>(); @@ -150,7 +153,7 @@ impl<'a> SPK<'a> { parse_bytes_as!( f64, raw_z_coeffs[DBL_SIZE * item..DBL_SIZE * (item + 1)], - Endian::Little + self.daf.endianness ) }) .collect::<_>(); diff --git a/src/naif/summaries.rs b/src/naif/summaries.rs new file mode 100644 index 00000000..7282df90 --- /dev/null +++ b/src/naif/summaries.rs @@ -0,0 +1,12 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +// TODO: Implement an iterator on the summaries. +pub struct Summary; diff --git a/src/spline.rs b/src/spline.rs index bbe9494c..56d717d7 100644 --- a/src/spline.rs +++ b/src/spline.rs @@ -37,8 +37,6 @@ impl<'a> Splines<'a> { coeff_idx: usize, field: Field, ) -> Result { - self.check_integrity()?; - // Compute the index in bytes at which the data starts let offset = self.metadata.spline_offset(spline_idx) + self.metadata.field_offset(field, coeff_idx)?; diff --git a/tests/ephemerides/mod.rs b/tests/ephemerides/mod.rs index a445e9cb..3c9104ac 100644 --- a/tests/ephemerides/mod.rs +++ b/tests/ephemerides/mod.rs @@ -10,4 +10,4 @@ mod parent_translation_verif; mod paths; -mod translation_verif; +mod translation; diff --git a/tests/ephemerides/parent_translation_verif.rs b/tests/ephemerides/parent_translation_verif.rs index f3b5e160..423e830f 100644 --- a/tests/ephemerides/parent_translation_verif.rs +++ b/tests/ephemerides/parent_translation_verif.rs @@ -17,8 +17,6 @@ use anise::prelude::*; #[test] fn de438s_parent_translation_verif() { - // TODO: _Greatly_ expand this test case. - if pretty_env_logger::try_init().is_err() { println!("could not init env_logger"); } diff --git a/tests/ephemerides/paths.rs b/tests/ephemerides/paths.rs index dc9b2196..81942beb 100644 --- a/tests/ephemerides/paths.rs +++ b/tests/ephemerides/paths.rs @@ -10,10 +10,10 @@ use core::f64::EPSILON; +use anise::astro::RefFrame; use anise::constants::celestial_objects::{EARTH_MOON_BARYCENTER, SOLAR_SYSTEM_BARYCENTER}; use anise::constants::frames::*; use anise::constants::orientations::J2000; -use anise::frame::Frame; use anise::prelude::*; use anise::{file_mmap, prelude::AniseContext}; @@ -45,7 +45,7 @@ fn zero_translations() { // For all of the frames in this context, let's make sure that the translation between the same frames is always zero. for ephemeris_hash in ctx.ephemeris_lut.hashes.iter() { // Build a J2000 oriented frame with this ephemeris center - let this_frame_j2k = Frame::from_ephem_orient(*ephemeris_hash, J2000); + let this_frame_j2k = RefFrame::from_ephem_orient(*ephemeris_hash, J2000); // Check that the common root between the same frame is that frame's hash. let root_ephem = ctx diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs new file mode 100644 index 00000000..52b818c5 --- /dev/null +++ b/tests/ephemerides/translation.rs @@ -0,0 +1,568 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use core::f64::EPSILON; + +use anise::constants::frames::{EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, VENUS_J2000}; +use anise::file_mmap; +use anise::math::Vector3; +use anise::prelude::*; + +// For the Earth Moon Barycenter to Luna, there velocity error is up to 3e-14 km/s, or 3e-11 m/s, or 13 picometers per second. +const VELOCITY_EPSILON_KM_S: f64 = 1e-13; + +#[test] +fn de438s_translation_verif_venus2emb() { + if pretty_env_logger::try_init().is_err() { + println!("could not init env_logger"); + } + + // "Load" the file via a memory map (avoids allocations) + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx: AniseContext = (&buf).try_into().unwrap(); + + let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); + + /* + Python code: + >>> import spiceypy as sp + >>> sp.furnsh('data/de438s.bsp') + >>> sp.furnsh('../../hifitime/naif0012.txt') + >>> et = sp.utc2et('2002 FEB 07 00:00:00') + >>> ['{:.16e}'.format(x) for x in sp.spkez(2, et, "J2000", "NONE", 3)[0]] + ['2.0504464298094124e+08', '-1.3595802361226091e+08', '-6.5722791535179183e+07', '3.7012086122583923e+01', '4.8685441396743641e+01', '2.0519128283382937e+01'] + */ + + dbg!(ctx + .common_ephemeris_path(VENUS_J2000, EARTH_MOON_BARYCENTER_J2000) + .unwrap()); + + let (pos, vel, _) = ctx + .translate_from_to( + VENUS_J2000, + EARTH_MOON_BARYCENTER_J2000, + epoch, + Aberration::None, + DistanceUnit::Kilometer, + TimeUnit::Second, + ) + .unwrap(); + + let pos_expct_km = Vector3::new( + 2.0504464298094124e+08, + -1.3595802361226091e+08, + -6.5722791535179183e+07, + ); + + let vel_expct_km_s = Vector3::new( + 3.7012086122583923e+01, + 4.8685441396743641e+01, + 2.0519128283382937e+01, + ); + + // We expect exactly the same output as SPICE to machine precision. + assert!( + relative_eq!(pos, pos_expct_km, epsilon = EPSILON), + "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", + pos_expct_km - pos + ); + + assert!( + relative_eq!(vel, vel_expct_km_s, epsilon = EPSILON), + "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", + vel_expct_km_s - vel + ); + + // Test the opposite translation + let (pos, vel, _) = ctx + .translate_from_to_km_s_geometric(EARTH_MOON_BARYCENTER_J2000, VENUS_J2000, epoch) + .unwrap(); + + // We expect exactly the same output as SPICE to machine precision. + assert!( + relative_eq!(pos, -pos_expct_km, epsilon = EPSILON), + "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", + pos_expct_km + pos + ); + + assert!( + relative_eq!(vel, -vel_expct_km_s, epsilon = EPSILON), + "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", + vel_expct_km_s + vel + ); +} + +#[test] +fn de438s_translation_verif_venus2luna() { + if pretty_env_logger::try_init().is_err() { + println!("could not init env_logger"); + } + + // "Load" the file via a memory map (avoids allocations) + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx: AniseContext = (&buf).try_into().unwrap(); + + let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); + + // Venus to Earth Moon + + /* + Python code: + >>> import spiceypy as sp + >>> sp.furnsh('data/de438s.bsp') + >>> sp.furnsh('../../hifitime/naif0012.txt') + >>> et = sp.utc2et('2002 FEB 07 00:00:00') + >>> ['{:.16e}'.format(x) for x in sp.spkez(2, et, "J2000", "NONE", 3)[0]] + ['2.0512621957198492e+08', '-1.3561254792311624e+08', '-6.5578399676164642e+07', '3.6051374278187268e+01', '4.8889024622166957e+01', '2.0702933800840963e+01'] + >>> ['{:.16e}'.format(x) for x in sp.spkez(3, et, "J2000", "NONE", 301)[0]] + ['8.1576591043659311e+04', '3.4547568914467981e+05', '1.4439185901453768e+05', '-9.6071184439665624e-01', '2.0358322542331578e-01', '1.8380551745802590e-01'] + */ + + let (pos, vel, _) = ctx + .translate_from_to( + VENUS_J2000, + LUNA_J2000, + epoch, + Aberration::None, + DistanceUnit::Kilometer, + TimeUnit::Second, + ) + .unwrap(); + + let pos_expct_km = Vector3::new( + 2.0512621957198492e+08, + -1.3561254792311624e+08, + -6.5578399676164642e+07, + ); + + let vel_expct_km_s = Vector3::new( + 3.6051374278187268e+01, + 4.8889024622166957e+01, + 2.0702933800840963e+01, + ); + + // We expect exactly the same output as SPICE to machine precision. + assert!( + relative_eq!(pos, pos_expct_km, epsilon = EPSILON), + "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", + pos_expct_km - pos + ); + + assert!( + relative_eq!(vel, vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), + "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", + vel_expct_km_s - vel + ); + + // Test the opposite translation + let (pos, vel, _) = ctx + .translate_from_to_km_s_geometric(LUNA_J2000, VENUS_J2000, epoch) + .unwrap(); + + // We expect exactly the same output as SPICE to machine precision. + assert!( + relative_eq!(pos, -pos_expct_km, epsilon = EPSILON), + "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", + pos_expct_km + pos + ); + + assert!( + relative_eq!(vel, -vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), + "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", + vel_expct_km_s + vel + ); +} + +#[test] +fn de438s_translation_verif_emb2luna() { + if pretty_env_logger::try_init().is_err() { + println!("could not init env_logger"); + } + + // "Load" the file via a memory map (avoids allocations) + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx: AniseContext = (&buf).try_into().unwrap(); + + let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); + + // Earth Moon Barycenter to Earth Moon + + /* + Python code: + >>> import spiceypy as sp + >>> sp.furnsh('data/de438s.bsp') + >>> sp.furnsh('../../hifitime/naif0012.txt') + >>> et = sp.utc2et('2002 FEB 07 00:00:00') + >>> ['{:.16e}'.format(x) for x in sp.spkez(3, et, "J2000", "NONE", 301)[0]] # Target = 3; Obs = 301 + ['8.1576591043659311e+04', '3.4547568914467981e+05', '1.4439185901453768e+05', '-9.6071184439665624e-01', '2.0358322542331578e-01', '1.8380551745802590e-01'] + */ + + let (pos, vel, _) = ctx + .translate_from_to( + EARTH_MOON_BARYCENTER_J2000, + LUNA_J2000, + epoch, + Aberration::None, + DistanceUnit::Kilometer, + TimeUnit::Second, + ) + .unwrap(); + + let pos_expct_km = Vector3::new( + 8.1576591043659311e+04, + 3.4547568914467981e+05, + 1.4439185901453768e+05, + ); + + let vel_expct_km_s = Vector3::new( + -9.6071184439665624e-01, + 2.0358322542331578e-01, + 1.8380551745802590e-01, + ); + + // We expect exactly the same output as SPICE to machine precision. + assert!( + relative_eq!(pos, pos_expct_km, epsilon = EPSILON), + "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", + pos_expct_km - pos + ); + + assert!( + relative_eq!(vel, vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), + "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", + vel_expct_km_s - vel + ); + + // Try the opposite + let (pos, vel, _) = ctx + .translate_from_to( + LUNA_J2000, + EARTH_MOON_BARYCENTER_J2000, + epoch, + Aberration::None, + DistanceUnit::Kilometer, + TimeUnit::Second, + ) + .unwrap(); + + // We expect exactly the same output as SPICE to machine precision. + assert!( + relative_eq!(pos, -pos_expct_km, epsilon = EPSILON), + "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", + pos_expct_km + pos + ); + + assert!( + relative_eq!(vel, -vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), + "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", + vel_expct_km_s + vel + ); +} + +#[test] +#[ignore] +#[cfg(feature = "std")] +fn validate_jplde_translation() { + use anise::astro::RefFrame; + use arrow::array::{ArrayRef, Float64Array, StringArray, UInt8Array}; + use arrow::datatypes::{DataType, Field, Schema}; + use arrow::record_batch::RecordBatch; + use hifitime::{TimeSeries, TimeUnits}; + use log::info; + use online_statistics::maximum::Max; + use online_statistics::mean::Mean; + use online_statistics::minimum::Min; + use online_statistics::quantile::Quantile; + use online_statistics::stats::Univariate; + use parquet::arrow::arrow_writer::ArrowWriter; + use parquet::file::properties::WriterProperties; + use spice; + use std::fs::File; + use std::sync::Arc; + + // If the error is larger than this, we should fail immediately. + const FAIL_POS_KM: f64 = 1e2; + const FAIL_VEL_KM_S: f64 = 1e-1; + // Number of queries we should do per pair of ephemerides + const NUM_QUERIES_PER_PAIR: f64 = 1_000.0; + + if pretty_env_logger::try_init().is_err() { + println!("could not init env_logger"); + } + + // Output parquet file + + // Build the schema + let schema = Schema::new(vec![ + Field::new("DE file", DataType::Utf8, false), + Field::new("source frame", DataType::Utf8, false), + Field::new("destination frame", DataType::Utf8, false), + Field::new("# hops", DataType::UInt8, false), + Field::new("component", DataType::Utf8, false), + Field::new("mean err", DataType::Float64, false), + Field::new("min err", DataType::Float64, false), + Field::new("q25 err", DataType::Float64, false), + Field::new("q50 err", DataType::Float64, false), + Field::new("q75 err", DataType::Float64, false), + Field::new("max err", DataType::Float64, false), + ]); + + let file = File::create("target/validation-test-results.parquet").unwrap(); + + // Default writer properties + let props = WriterProperties::builder().build(); + + let mut writer = ArrowWriter::try_new(file, Arc::new(schema), Some(props)).unwrap(); + + for de_name in &["de438s", "de440"] { + // SPICE load + spice::furnsh(&format!("data/{de_name}.bsp")); + + // ANISE load + let path = format!("./data/{de_name}.anise"); + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::from_bytes(&buf); + + for (idx1, ephem1) in ctx.ephemeris_data.iter().enumerate() { + let j2000_ephem1 = + RefFrame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx1).unwrap()); + + for (idx2, ephem2) in ctx.ephemeris_data.iter().enumerate() { + if ephem1 == ephem2 { + continue; + } + + let j2000_ephem2 = + RefFrame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx2).unwrap()); + + // Query the ephemeris data for a bunch of different times. + let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { + ephem2.start_epoch() + } else { + ephem1.start_epoch() + }; + + let end_epoch = if ephem1.end_epoch() < ephem2.end_epoch() { + ephem1.end_epoch() + } else { + ephem2.end_epoch() + }; + + let time_step = + ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); + + let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); + + let mut maxes = [ + Max::new(), + Max::new(), + Max::new(), + Max::new(), + Max::new(), + Max::new(), + ]; + + let mut mins = [ + Min::new(), + Min::new(), + Min::new(), + Min::new(), + Min::new(), + Min::new(), + ]; + + let mut means = [ + Mean::new(), + Mean::new(), + Mean::new(), + Mean::new(), + Mean::new(), + Mean::new(), + ]; + + let mut meds = [ + Quantile::default(), + Quantile::default(), + Quantile::default(), + Quantile::default(), + Quantile::default(), + Quantile::default(), + ]; + + let mut q25s = [ + Quantile::new(0.25).unwrap(), + Quantile::new(0.25).unwrap(), + Quantile::new(0.25).unwrap(), + Quantile::new(0.25).unwrap(), + Quantile::new(0.25).unwrap(), + Quantile::new(0.25).unwrap(), + ]; + + let mut q75s = [ + Quantile::new(0.75).unwrap(), + Quantile::new(0.75).unwrap(), + Quantile::new(0.75).unwrap(), + Quantile::new(0.75).unwrap(), + Quantile::new(0.75).unwrap(), + Quantile::new(0.75).unwrap(), + ]; + + let component = ["X", "Y", "Z", "VX", "VY", "VZ"]; + + for epoch in time_it { + match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { + Ok((pos, vel, _)) => { + // Perform the same query in SPICE + let (state, _) = spice::spkezr( + match ephem1.name { + "Luna" => "Moon", + _ => ephem1.name, + }, + epoch.to_et_seconds(), + "J2000", + "NONE", + match ephem2.name { + "Luna" => "Moon", + _ => ephem2.name, + }, + ); + + // Check component by component instead of rebuilding a Vector3 from the SPICE data + for i in 0..6 { + let (anise_value, max_err) = if i < 3 { + (pos[i], FAIL_POS_KM) + } else { + (vel[i - 3], FAIL_VEL_KM_S) + }; + + // We don't look at the absolute error here, that's for the stats to show any skewness + let err = anise_value - state[i]; + + if !relative_eq!(anise_value, state[i], epsilon = max_err) { + // Always save the parquet file + writer.close().unwrap(); + + panic!( + "{epoch:E}\t{}got = {:.16}\texp = {:.16}\terr = {:.16}", + component[i], anise_value, state[i], err + ); + } + + // Update statistics + mins[i].update(err); + maxes[i].update(err); + q25s[i].update(err); + q75s[i].update(err); + meds[i].update(err); + means[i].update(err); + } + } + Err(e) => { + // Always save the parquet file + writer.close().unwrap(); + panic!("At epoch {epoch:E}: {e}"); + } + }; + } + + let mut batch_de_name = Vec::with_capacity(6); + let mut batch_src_frm = Vec::with_capacity(6); + let mut batch_dest_frm = Vec::with_capacity(6); + let mut batch_comp = Vec::with_capacity(6); + let mut batch_hops = Vec::with_capacity(6); + let mut batch_mean = Vec::with_capacity(6); + let mut batch_min = Vec::with_capacity(6); + let mut batch_max = Vec::with_capacity(6); + let mut batch_q25 = Vec::with_capacity(6); + let mut batch_q50 = Vec::with_capacity(6); + let mut batch_q75 = Vec::with_capacity(6); + + for i in 0..6 { + batch_de_name.push(de_name.clone()); + batch_src_frm.push(j2000_ephem1.to_string()); + batch_dest_frm.push(j2000_ephem2.to_string()); + batch_comp.push(component[i]); + batch_hops.push( + ctx.common_ephemeris_path(j2000_ephem1, j2000_ephem2) + .unwrap() + .0 as u8, + ); + batch_mean.push(means[i].get()); + batch_min.push(mins[i].get()); + batch_max.push(maxes[i].get()); + batch_q50.push(meds[i].get()); + batch_q25.push(q25s[i].get()); + batch_q75.push(q75s[i].get()); + } + + writer + .write( + &RecordBatch::try_from_iter(vec![ + ( + "DE file", + Arc::new(StringArray::from(batch_de_name)) as ArrayRef, + ), + ( + "source frame", + Arc::new(StringArray::from(batch_src_frm)) as ArrayRef, + ), + ( + "destination frame", + Arc::new(StringArray::from(batch_dest_frm)) as ArrayRef, + ), + ("# hops", Arc::new(UInt8Array::from(batch_hops)) as ArrayRef), + ( + "component", + Arc::new(StringArray::from(batch_comp)) as ArrayRef, + ), + ( + "mean err", + Arc::new(Float64Array::from(batch_mean)) as ArrayRef, + ), + ( + "min err", + Arc::new(Float64Array::from(batch_min)) as ArrayRef, + ), + ( + "q25 err", + Arc::new(Float64Array::from(batch_q25)) as ArrayRef, + ), + ( + "q50 err", + Arc::new(Float64Array::from(batch_q50)) as ArrayRef, + ), + ( + "q75 err", + Arc::new(Float64Array::from(batch_q75)) as ArrayRef, + ), + ( + "max err", + Arc::new(Float64Array::from(batch_max)) as ArrayRef, + ), + ]) + .unwrap(), + ) + .unwrap(); + + // Regularly flush to not lose data + writer.flush().unwrap(); + } + + info!("[{de_name}] done with {} ", j2000_ephem1); + } + // Unload SPICE (note that this is not needed for ANISE because it falls out of scope) + spice::unload(&format!("data/{de_name}.bsp")); + } + // Always save the parquet file + writer.close().unwrap(); +} diff --git a/tests/ephemerides/translation_verif.rs b/tests/ephemerides/translation_verif.rs deleted file mode 100644 index b8b76da6..00000000 --- a/tests/ephemerides/translation_verif.rs +++ /dev/null @@ -1,421 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use core::f64::EPSILON; - -use anise::constants::frames::{EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, VENUS_J2000}; -use anise::file_mmap; -use anise::math::Vector3; -use anise::prelude::*; - -// For the Earth Moon Barycenter to Luna, there velocity error is up to 3e-14 km/s, or 3e-11 m/s, or 13 picometers per second. -const VELOCITY_EPSILON_KM_S: f64 = 1e-13; - -#[test] -fn de438s_translation_verif_venus2emb() { - if pretty_env_logger::try_init().is_err() { - println!("could not init env_logger"); - } - - // "Load" the file via a memory map (avoids allocations) - let path = "./data/de438s.anise"; - let buf = file_mmap!(path).unwrap(); - let ctx: AniseContext = (&buf).try_into().unwrap(); - - let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); - - /* - Python code: - >>> import spiceypy as sp - >>> sp.furnsh('data/de438s.bsp') - >>> sp.furnsh('../../hifitime/naif0012.txt') - >>> et = sp.utc2et('2002 FEB 07 00:00:00') - >>> ['{:.16e}'.format(x) for x in sp.spkez(2, et, "J2000", "NONE", 3)[0]] - ['2.0504464298094124e+08', '-1.3595802361226091e+08', '-6.5722791535179183e+07', '3.7012086122583923e+01', '4.8685441396743641e+01', '2.0519128283382937e+01'] - */ - - dbg!(ctx - .common_ephemeris_path(VENUS_J2000, EARTH_MOON_BARYCENTER_J2000) - .unwrap()); - - let (pos, vel, _) = ctx - .translate_from_to( - VENUS_J2000, - EARTH_MOON_BARYCENTER_J2000, - epoch, - Aberration::None, - DistanceUnit::Kilometer, - TimeUnit::Second, - ) - .unwrap(); - - let pos_expct_km = Vector3::new( - 2.0504464298094124e+08, - -1.3595802361226091e+08, - -6.5722791535179183e+07, - ); - - let vel_expct_km_s = Vector3::new( - 3.7012086122583923e+01, - 4.8685441396743641e+01, - 2.0519128283382937e+01, - ); - - // We expect exactly the same output as SPICE to machine precision. - assert!( - relative_eq!(pos, pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km - pos - ); - - assert!( - relative_eq!(vel, vel_expct_km_s, epsilon = EPSILON), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s - vel - ); - - // Test the opposite translation - let (pos, vel, _) = ctx - .translate_from_to_km_s_geometric(EARTH_MOON_BARYCENTER_J2000, VENUS_J2000, epoch) - .unwrap(); - - // We expect exactly the same output as SPICE to machine precision. - assert!( - relative_eq!(pos, -pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km + pos - ); - - assert!( - relative_eq!(vel, -vel_expct_km_s, epsilon = EPSILON), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s + vel - ); -} - -#[test] -fn de438s_translation_verif_venus2luna() { - if pretty_env_logger::try_init().is_err() { - println!("could not init env_logger"); - } - - // "Load" the file via a memory map (avoids allocations) - let path = "./data/de438s.anise"; - let buf = file_mmap!(path).unwrap(); - let ctx: AniseContext = (&buf).try_into().unwrap(); - - let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); - - // Venus to Earth Moon - - /* - Python code: - >>> import spiceypy as sp - >>> sp.furnsh('data/de438s.bsp') - >>> sp.furnsh('../../hifitime/naif0012.txt') - >>> et = sp.utc2et('2002 FEB 07 00:00:00') - >>> ['{:.16e}'.format(x) for x in sp.spkez(2, et, "J2000", "NONE", 3)[0]] - ['2.0512621957198492e+08', '-1.3561254792311624e+08', '-6.5578399676164642e+07', '3.6051374278187268e+01', '4.8889024622166957e+01', '2.0702933800840963e+01'] - >>> ['{:.16e}'.format(x) for x in sp.spkez(3, et, "J2000", "NONE", 301)[0]] - ['8.1576591043659311e+04', '3.4547568914467981e+05', '1.4439185901453768e+05', '-9.6071184439665624e-01', '2.0358322542331578e-01', '1.8380551745802590e-01'] - */ - - let (pos, vel, _) = ctx - .translate_from_to( - VENUS_J2000, - LUNA_J2000, - epoch, - Aberration::None, - DistanceUnit::Kilometer, - TimeUnit::Second, - ) - .unwrap(); - - let pos_expct_km = Vector3::new( - 2.0512621957198492e+08, - -1.3561254792311624e+08, - -6.5578399676164642e+07, - ); - - let vel_expct_km_s = Vector3::new( - 3.6051374278187268e+01, - 4.8889024622166957e+01, - 2.0702933800840963e+01, - ); - - // We expect exactly the same output as SPICE to machine precision. - assert!( - relative_eq!(pos, pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km - pos - ); - - assert!( - relative_eq!(vel, vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s - vel - ); - - // Test the opposite translation - let (pos, vel, _) = ctx - .translate_from_to_km_s_geometric(LUNA_J2000, VENUS_J2000, epoch) - .unwrap(); - - // We expect exactly the same output as SPICE to machine precision. - assert!( - relative_eq!(pos, -pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km + pos - ); - - assert!( - relative_eq!(vel, -vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s + vel - ); -} - -#[test] -fn de438s_translation_verif_emb2luna() { - if pretty_env_logger::try_init().is_err() { - println!("could not init env_logger"); - } - - // "Load" the file via a memory map (avoids allocations) - let path = "./data/de438s.anise"; - let buf = file_mmap!(path).unwrap(); - let ctx: AniseContext = (&buf).try_into().unwrap(); - - let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); - - // Earth Moon Barycenter to Earth Moon - - /* - Python code: - >>> import spiceypy as sp - >>> sp.furnsh('data/de438s.bsp') - >>> sp.furnsh('../../hifitime/naif0012.txt') - >>> et = sp.utc2et('2002 FEB 07 00:00:00') - >>> ['{:.16e}'.format(x) for x in sp.spkez(3, et, "J2000", "NONE", 301)[0]] # Target = 3; Obs = 301 - ['8.1576591043659311e+04', '3.4547568914467981e+05', '1.4439185901453768e+05', '-9.6071184439665624e-01', '2.0358322542331578e-01', '1.8380551745802590e-01'] - */ - - let (pos, vel, _) = ctx - .translate_from_to( - EARTH_MOON_BARYCENTER_J2000, - LUNA_J2000, - epoch, - Aberration::None, - DistanceUnit::Kilometer, - TimeUnit::Second, - ) - .unwrap(); - - let pos_expct_km = Vector3::new( - 8.1576591043659311e+04, - 3.4547568914467981e+05, - 1.4439185901453768e+05, - ); - - let vel_expct_km_s = Vector3::new( - -9.6071184439665624e-01, - 2.0358322542331578e-01, - 1.8380551745802590e-01, - ); - - // We expect exactly the same output as SPICE to machine precision. - assert!( - relative_eq!(pos, pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km - pos - ); - - assert!( - relative_eq!(vel, vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s - vel - ); - - // Try the opposite - let (pos, vel, _) = ctx - .translate_from_to( - LUNA_J2000, - EARTH_MOON_BARYCENTER_J2000, - epoch, - Aberration::None, - DistanceUnit::Kilometer, - TimeUnit::Second, - ) - .unwrap(); - - // We expect exactly the same output as SPICE to machine precision. - assert!( - relative_eq!(pos, -pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km + pos - ); - - assert!( - relative_eq!(vel, -vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s + vel - ); -} - -#[test] -#[ignore] -#[cfg(feature = "std")] -fn exhaustive_de438s_translation() { - use anise::frame::Frame; - use hifitime::{TimeSeries, TimeUnits}; - use log::info; - use rstats::{Median, Stats}; - - const FAIL_POS_KM: f64 = 1e4; - const FAIL_VEL_KM_S: f64 = 1e1; - - if pretty_env_logger::try_init().is_err() { - println!("could not init env_logger"); - } - - // This test will load the BSP both in rust-spice and ANISE and make sure that we get the same data all the time. - use spice; - spice::furnsh("data/de438s.bsp"); - - let path = "./data/de438s.anise"; - let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::from_bytes(&buf); - - for (idx1, ephem1) in ctx.ephemeris_data.iter().enumerate() { - let j2000_ephem1 = Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx1).unwrap()); - - for (idx2, ephem2) in ctx.ephemeris_data.iter().enumerate() { - if ephem1 == ephem2 { - continue; - } - - let j2000_ephem2 = - Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx2).unwrap()); - - // Query the ephemeris data for a bunch of different times. - let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { - ephem2.start_epoch() - } else { - ephem1.start_epoch() - }; - - let end_epoch = if ephem1.end_epoch() < ephem2.end_epoch() { - ephem1.end_epoch() - } else { - ephem2.end_epoch() - }; - - // Query at ten thousand items - let time_step = ((end_epoch - start_epoch).to_seconds() / 1_000.0).seconds(); - - let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); - info!("Query {} -> {} with {time_it}", j2000_ephem1, j2000_ephem2); - - let mut pos_err = [ - Vec::::with_capacity(1_000), - Vec::::with_capacity(1_000), - Vec::::with_capacity(1_000), - ]; - let mut vel_err = [ - Vec::::with_capacity(1_000), - Vec::::with_capacity(1_000), - Vec::::with_capacity(1_000), - ]; - - for epoch in time_it { - match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { - Ok((pos, vel, _)) => { - // Perform the same query in SPICE - let (state, _) = spice::spkezr( - match ephem1.name { - "Luna" => "Moon", - _ => ephem1.name, - }, - epoch.to_et_seconds(), - "J2000", - "NONE", - match ephem2.name { - "Luna" => "Moon", - _ => ephem2.name, - }, - ); - - // Check component by component instead of rebuilding a Vector3 from the SPICE data - for i in 0..6 { - if i < 3 { - let err = (pos[i] - state[i]).abs(); - pos_err[i].push(err); - - assert!( - relative_eq!(pos[i], state[i], epsilon = FAIL_POS_KM), - "{epoch:E}\npos[{i}] = {}\nexp = {}\nerr = {:e}", - pos[i], - state[i], - err - ); - } else { - let err = (vel[i - 3] - state[i]).abs(); - vel_err[i - 3].push(err); - - assert!( - relative_eq!(vel[i - 3], state[i], epsilon = FAIL_VEL_KM_S), - "{epoch:E}vel[{i}] = {}\nexp = {}\nerr = {:e}", - vel[i - 3], - state[i], - err - ); - } - } - } - Err(e) => { - panic!("At epoch {epoch:E}: {e}"); - } - }; - } - - for i in 0..6 { - let meanstd = if i < 3 { - pos_err[i].ameanstd().unwrap() - } else { - vel_err[i - 3].ameanstd().unwrap() - }; - - let med = if i < 3 { - pos_err[i].medinfo() - } else { - vel_err[i - 3].medinfo() - }; - - info!( - "Error on {}: mean = {:e}\tdev = {:e}\tlow q = {:e}\tmed = {:e}\tup q = {:e}", - match i { - 0 => "X", - 1 => "Y", - 2 => "Z", - 3 => "VX", - 4 => "VY", - 5 => "VZ", - _ => unreachable!(), - }, - meanstd.centre, - meanstd.dispersion, - med.lq, - med.median, - med.uq - ); - } - } - } -} diff --git a/tests/naif.rs b/tests/naif.rs index 2fa12a37..3d44dcd6 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -65,20 +65,21 @@ fn test_spk_load() { spk.copy_segments(301).unwrap(); // Build the ANISE file - let filename_anis = "de421.anise"; + let filename_anis = "target/de421.anise"; spk.to_anise(bsp_path, filename_anis, true, true).unwrap(); // Load this ANISE file and make sure that it matches the original DE421 data. let bytes = file_mmap!(filename_anis).unwrap(); let ctx = AniseContext::from_bytes(&bytes); + // Ignore the three empty ones assert_eq!( ctx.ephemeris_lut.hashes.len(), - spk.segments.len(), + spk.segments.len() - 3, "Incorrect number of ephem in map" ); assert_eq!( ctx.ephemeris_lut.indexes.len(), - spk.segments.len(), + spk.segments.len() - 3, "Incorrect number of ephem in map" ); @@ -93,6 +94,7 @@ fn test_spk_load() { for (eidx, ephem) in ctx.ephemeris_data.iter().enumerate() { let splt = ephem.name.split("#").collect::>(); + dbg!(&splt); let seg_target_id = str::parse::(splt[1]).unwrap(); // Fetch the SPK segment let (seg, meta, all_seg_data) = spk.copy_segments(seg_target_id).unwrap(); From f9c8bfd39cc52d3d07e0afb43dae820962400e95 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Thu, 27 Oct 2022 21:13:13 -0600 Subject: [PATCH 03/48] Testing out different designs for frames Signed-off-by: Christopher Rabotin --- Cargo.toml | 1 + src/astro/celestial_frame.rs | 20 ++++++ src/astro/frame.rs | 26 ++++++-- src/astro/geodetic_frame.rs | 87 +++++++++++++++++--------- src/astro/mod.rs | 6 +- src/constants.rs | 35 +++++------ src/ephemerides/paths.rs | 15 ++--- src/ephemerides/translate_to_parent.rs | 6 +- src/ephemerides/translations.rs | 28 ++++----- src/errors.rs | 11 ++-- tests/ephemerides/paths.rs | 4 +- tests/ephemerides/translation.rs | 6 +- 12 files changed, 153 insertions(+), 92 deletions(-) create mode 100644 src/astro/celestial_frame.rs diff --git a/Cargo.toml b/Cargo.toml index 6dd1c529..36fe85b1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ tabled = "0.10" const_format = "0.2" nalgebra = "0.31" approx = "0.5.1" +uom = {version = "0.33.0", features = ["autoconvert", "f64", "si"]} [dev-dependencies] rust-spice = "0.7.3" diff --git a/src/astro/celestial_frame.rs b/src/astro/celestial_frame.rs new file mode 100644 index 00000000..283bc5e8 --- /dev/null +++ b/src/astro/celestial_frame.rs @@ -0,0 +1,20 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use super::FrameTrait; +use uom::si::f64::*; + +pub type GravityParam = VolumeRate; + +/// Defines a Celestial Frame kind, which is a Frame that also defines a standard gravitational parameter +pub trait CelestialFrameTrait: FrameTrait { + /// Returns the standard gravitational parameter of this frame + fn mu(&self) -> GravityParam; +} diff --git a/src/astro/frame.rs b/src/astro/frame.rs index 311d34f4..b81cf1d7 100644 --- a/src/astro/frame.rs +++ b/src/astro/frame.rs @@ -8,20 +8,38 @@ * Documentation: https://nyxspace.com/ */ -use std::fmt::{Display, Formatter}; +use core::fmt::{Debug, Display, Formatter}; use crate::constants::celestial_objects::hash_celestial_name; use crate::constants::orientations::{hash_orientation_name, J2000}; use crate::HashType; +/// Defines a Frame kind, allows for compile time checking of operations. +pub trait FrameTrait: Copy + Debug + PartialEq { + /// Returns the ephemeris hash of this frame. + fn ephemeris_hash(&self) -> HashType; + /// Returns the orientation hash of this frame. + fn orientation_hash(&self) -> HashType; +} + /// A Frame uniquely defined by its ephemeris center and orientation. Refer to FrameDetail for frames combined with parameters. #[derive(Copy, Clone, Debug, PartialEq, Eq)] -pub struct RefFrame { +pub struct Frame { pub ephemeris_hash: HashType, pub orientation_hash: HashType, } -impl RefFrame { +impl FrameTrait for Frame { + fn ephemeris_hash(&self) -> HashType { + self.ephemeris_hash + } + + fn orientation_hash(&self) -> HashType { + self.orientation_hash + } +} + +impl Frame { /// Constructs a new frame given its ephemeris and orientations hashes. pub const fn from_ephem_orient(ephemeris_hash: HashType, orientation_hash: HashType) -> Self { Self { @@ -71,7 +89,7 @@ impl RefFrame { } } -impl Display for RefFrame { +impl Display for Frame { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { let body_name = match hash_celestial_name(self.ephemeris_hash) { Some(name) => name.to_string(), diff --git a/src/astro/geodetic_frame.rs b/src/astro/geodetic_frame.rs index 615c38fc..d29a72bf 100644 --- a/src/astro/geodetic_frame.rs +++ b/src/astro/geodetic_frame.rs @@ -8,10 +8,21 @@ * Documentation: https://nyxspace.com/ */ -use std::fmt::{Display, Formatter}; - -use crate::astro::RefFrame; +use super::{celestial_frame::GravityParam, CelestialFrameTrait, FrameTrait}; +use crate::astro::Frame; use crate::HashType; +use core::fmt::{Display, Formatter}; +use uom::si::{f64::*, length::kilometer, volume_rate::cubic_kilometer_per_second}; + +/// Defines a Celestial Frame kind, which is a Frame that also defines a standard gravitational parameter +trait GeodeticFrameTrait: CelestialFrameTrait { + /// Equatorial radius in kilometers + fn equatorial_radius(&self) -> Length; + /// Semi major radius in kilometers + fn semi_major_radius(&self) -> Length; + /// Flattening coefficient (unit less) + fn flattening(&self) -> f64; +} /// A Frame uniquely defined by its ephemeris center and orientation. /// @@ -20,22 +31,15 @@ use crate::HashType; /// 2. If a frame defines an equatorial radius, a semi major radius, and a flattening ratio, then /// is considered a geoid. #[derive(Copy, Clone, Debug, PartialEq)] -pub struct GeodeticRefFrame { - pub frame: RefFrame, +pub struct GeodeticFrame { + pub frame: Frame, pub mu_km3s: f64, - pub equatorial_radius: Option, - pub semi_major_radius: Option, - pub flattening: Option, + pub equatorial_radius_km: f64, + pub semi_major_radius_km: f64, + pub flattening: f64, } -impl GeodeticRefFrame { - /// Returns whether this frame is a geoid frame - pub const fn is_geoid(&self) -> bool { - self.equatorial_radius.is_some() - && self.semi_major_radius.is_some() - && self.flattening.is_some() - } - +impl GeodeticFrame { pub const fn ephem_origin_hash_match(&self, other_hash: HashType) -> bool { self.frame.ephem_origin_hash_match(other_hash) } @@ -53,30 +57,57 @@ impl GeodeticRefFrame { } } -impl Display for GeodeticRefFrame { +impl FrameTrait for GeodeticFrame { + fn ephemeris_hash(&self) -> HashType { + self.frame.ephemeris_hash + } + + fn orientation_hash(&self) -> HashType { + self.frame.orientation_hash + } +} + +impl CelestialFrameTrait for GeodeticFrame { + fn mu(&self) -> GravityParam { + GravityParam::new::(self.mu_km3s) + } +} + +impl GeodeticFrameTrait for GeodeticFrame { + fn equatorial_radius(&self) -> Length { + Length::new::(self.equatorial_radius_km) + } + + fn semi_major_radius(&self) -> Length { + Length::new::(self.semi_major_radius_km) + } + + fn flattening(&self) -> f64 { + todo!() + } +} + +impl Display for GeodeticFrame { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { write!(f, "{}", self.frame)?; write!(f, " (μ = {} km3/s", self.mu_km3s)?; - if self.is_geoid() { - write!( - f, - ", eq. radius = {} km, sm axis = {} km, f = {}", - self.equatorial_radius.unwrap(), - self.semi_major_radius.unwrap(), - self.flattening.unwrap() - )?; - } + write!( + f, + ", eq. radius = {} km, sm axis = {} km, f = {}", + self.equatorial_radius_km, self.semi_major_radius_km, self.flattening + )?; + write!(f, ")") } } #[allow(clippy::from_over_into)] -impl Into for GeodeticRefFrame { +impl Into for GeodeticFrame { /// Lossy operation to convert FrameDetail into a Frame. /// /// This will cause the LOSS of the constants stored in the frame detail. - fn into(self) -> RefFrame { + fn into(self) -> Frame { self.frame } } diff --git a/src/astro/mod.rs b/src/astro/mod.rs index b8d32be9..9736bdbe 100644 --- a/src/astro/mod.rs +++ b/src/astro/mod.rs @@ -15,8 +15,10 @@ pub enum Aberration { None, } +pub mod celestial_frame; pub mod frame; pub mod geodetic_frame; -pub use frame::RefFrame; -pub use geodetic_frame::GeodeticRefFrame; +pub use celestial_frame::CelestialFrameTrait; +pub use frame::{Frame, FrameTrait}; +pub use geodetic_frame::GeodeticFrame; diff --git a/src/constants.rs b/src/constants.rs index 4622dd87..3080ca11 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -72,27 +72,22 @@ pub mod orientations { } pub mod frames { - use crate::astro::RefFrame; + use crate::astro::Frame; use super::{celestial_objects::*, orientations::J2000}; - pub const SSB_J2000: RefFrame = RefFrame::from_ephem_orient(SOLAR_SYSTEM_BARYCENTER, J2000); - pub const MERCURY_J2000: RefFrame = RefFrame::from_ephem_orient(MERCURY, J2000); - pub const VENUS_J2000: RefFrame = RefFrame::from_ephem_orient(VENUS, J2000); - pub const EARTH_MOON_BARYCENTER_J2000: RefFrame = - RefFrame::from_ephem_orient(EARTH_MOON_BARYCENTER, J2000); - pub const MARS_BARYCENTER_J2000: RefFrame = RefFrame::from_ephem_orient(MARS_BARYCENTER, J2000); - pub const JUPITER_BARYCENTER_J2000: RefFrame = - RefFrame::from_ephem_orient(JUPITER_BARYCENTER, J2000); - pub const SATURN_BARYCENTER_J2000: RefFrame = - RefFrame::from_ephem_orient(SATURN_BARYCENTER, J2000); - pub const URANUS_BARYCENTER_J2000: RefFrame = - RefFrame::from_ephem_orient(URANUS_BARYCENTER, J2000); - pub const NEPTUNE_BARYCENTER_J2000: RefFrame = - RefFrame::from_ephem_orient(NEPTUNE_BARYCENTER, J2000); - pub const PLUTO_BARYCENTER_J2000: RefFrame = - RefFrame::from_ephem_orient(PLUTO_BARYCENTER, J2000); - pub const SUN_J2000: RefFrame = RefFrame::from_ephem_orient(SUN, J2000); - pub const LUNA_J2000: RefFrame = RefFrame::from_ephem_orient(LUNA, J2000); - pub const EARTH_J2000: RefFrame = RefFrame::from_ephem_orient(EARTH, J2000); + pub const SSB_J2000: Frame = Frame::from_ephem_orient(SOLAR_SYSTEM_BARYCENTER, J2000); + pub const MERCURY_J2000: Frame = Frame::from_ephem_orient(MERCURY, J2000); + pub const VENUS_J2000: Frame = Frame::from_ephem_orient(VENUS, J2000); + pub const EARTH_MOON_BARYCENTER_J2000: Frame = + Frame::from_ephem_orient(EARTH_MOON_BARYCENTER, J2000); + pub const MARS_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(MARS_BARYCENTER, J2000); + pub const JUPITER_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(JUPITER_BARYCENTER, J2000); + pub const SATURN_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(SATURN_BARYCENTER, J2000); + pub const URANUS_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(URANUS_BARYCENTER, J2000); + pub const NEPTUNE_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(NEPTUNE_BARYCENTER, J2000); + pub const PLUTO_BARYCENTER_J2000: Frame = Frame::from_ephem_orient(PLUTO_BARYCENTER, J2000); + pub const SUN_J2000: Frame = Frame::from_ephem_orient(SUN, J2000); + pub const LUNA_J2000: Frame = Frame::from_ephem_orient(LUNA, J2000); + pub const EARTH_J2000: Frame = Frame::from_ephem_orient(EARTH, J2000); } diff --git a/src/ephemerides/paths.rs b/src/ephemerides/paths.rs index f0b1e82c..1aa58d7d 100644 --- a/src/ephemerides/paths.rs +++ b/src/ephemerides/paths.rs @@ -15,7 +15,7 @@ use crate::errors::InternalErrorKind; use crate::HashType; use crate::{ asn1::{context::AniseContext, ephemeris::Ephemeris}, - astro::RefFrame, + astro::Frame, errors::{AniseError, IntegrityErrorKind}, }; @@ -45,11 +45,8 @@ impl<'a> AniseContext<'a> { error!("at least one ephemeris hierarchy takes root in hash {} but {}'s parent is {}", common_parent_hash, child.name, child.parent_ephemeris_hash); return Err(AniseError::IntegrityError( IntegrityErrorKind::DisjointRoots { - from_frame: RefFrame::from_ephem_orient( - common_parent_hash, - J2000, - ), - to_frame: RefFrame::from_ephem_orient( + from_frame: Frame::from_ephem_orient(common_parent_hash, J2000), + to_frame: Frame::from_ephem_orient( child.parent_ephemeris_hash, J2000, ), @@ -98,7 +95,7 @@ impl<'a> AniseContext<'a> { /// Try to construct the path from the source frame all the way to the root ephemeris of this context. pub fn ephemeris_path_to_root( &self, - source: &RefFrame, + source: &Frame, ) -> Result<(usize, [Option; MAX_TREE_DEPTH]), AniseError> { // Build a tree, set a fixed depth to avoid allocations let mut of_path = [None; MAX_TREE_DEPTH]; @@ -156,8 +153,8 @@ impl<'a> AniseContext<'a> { /// the ephemeris up to the root. pub fn common_ephemeris_path( &self, - from_frame: RefFrame, - to_frame: RefFrame, + from_frame: Frame, + to_frame: Frame, ) -> Result<(usize, [Option; MAX_TREE_DEPTH], HashType), AniseError> { // TODO: Consider returning a structure that has explicit fields -- see how I use it first if from_frame == to_frame { diff --git a/src/ephemerides/translate_to_parent.rs b/src/ephemerides/translate_to_parent.rs index 8ff8eaa2..ea30cf5f 100644 --- a/src/ephemerides/translate_to_parent.rs +++ b/src/ephemerides/translate_to_parent.rs @@ -17,7 +17,7 @@ use crate::astro::Aberration; use crate::hifitime::Epoch; use crate::math::interpolation::chebyshev::cheby_eval; use crate::math::Vector3; -use crate::{asn1::context::AniseContext, astro::RefFrame, errors::AniseError}; +use crate::{asn1::context::AniseContext, astro::Frame, errors::AniseError}; impl<'a> AniseContext<'a> { /// Returns the position vector and velocity vector of the `source` with respect to its parent in the ephemeris at the provided epoch, @@ -33,12 +33,12 @@ impl<'a> AniseContext<'a> { /// **WARNING:** This function only performs the translation and no rotation whatsoever. Use the `transform_to_parent_from` function instead to include rotations. pub fn translate_to_parent( &self, - source: RefFrame, + source: Frame, epoch: Epoch, _ab_corr: Aberration, distance_unit: DistanceUnit, time_unit: TimeUnit, - ) -> Result<(Vector3, Vector3, Vector3, RefFrame), AniseError> { + ) -> Result<(Vector3, Vector3, Vector3, Frame), AniseError> { // TODO: Create a CartesianState struct which can be "upgraded" to an Orbit if the frame is of the correct type? // I guess this is what the `Orbit` struct in Nyx does. // First, let's get a reference to the ephemeris given the frame. diff --git a/src/ephemerides/translations.rs b/src/ephemerides/translations.rs index 11b8ed14..d201f84d 100644 --- a/src/ephemerides/translations.rs +++ b/src/ephemerides/translations.rs @@ -14,7 +14,7 @@ use crate::asn1::units::*; use crate::astro::Aberration; use crate::hifitime::Epoch; use crate::math::Vector3; -use crate::{asn1::context::AniseContext, astro::RefFrame, errors::AniseError}; +use crate::{asn1::context::AniseContext, astro::Frame, errors::AniseError}; /// **Limitation:** no translation or rotation may have more than 8 nodes. pub const MAX_TREE_DEPTH: usize = 8; @@ -27,8 +27,8 @@ impl<'a> AniseContext<'a> { /// Note: this function performs a recursion of no more than twice the [MAX_TREE_DEPTH]. pub fn translate_from_to( &self, - from_frame: RefFrame, - to_frame: RefFrame, + from_frame: Frame, + to_frame: Frame, epoch: Epoch, ab_corr: Aberration, distance_unit: DistanceUnit, @@ -104,8 +104,8 @@ impl<'a> AniseContext<'a> { /// Returns the position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in km, the velocity in km/s, and the acceleration in km/s^2. pub fn translate_from_to_km_s( &self, - from_frame: RefFrame, - to_frame: RefFrame, + from_frame: Frame, + to_frame: Frame, epoch: Epoch, ab_corr: Aberration, ) -> Result<(Vector3, Vector3, Vector3), AniseError> { @@ -122,8 +122,8 @@ impl<'a> AniseContext<'a> { /// Returns the position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in m, the velocity in m/s, and the acceleration in m/s^2. pub fn translate_from_to_m_s( &self, - from_frame: RefFrame, - to_frame: RefFrame, + from_frame: Frame, + to_frame: Frame, epoch: Epoch, ab_corr: Aberration, ) -> Result<(Vector3, Vector3, Vector3), AniseError> { @@ -140,8 +140,8 @@ impl<'a> AniseContext<'a> { /// Returns the geometric position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in km, the velocity in km/s, and the acceleration in km/s^2. pub fn translate_from_to_km_s_geometric( &self, - from_frame: RefFrame, - to_frame: RefFrame, + from_frame: Frame, + to_frame: Frame, epoch: Epoch, ) -> Result<(Vector3, Vector3, Vector3), AniseError> { self.translate_from_to( @@ -157,8 +157,8 @@ impl<'a> AniseContext<'a> { /// Returns the geometric position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in m, the velocity in m/s, and the acceleration in m/s^2. pub fn translate_from_to_m_s_geometric( &self, - from_frame: RefFrame, - to_frame: RefFrame, + from_frame: Frame, + to_frame: Frame, epoch: Epoch, ) -> Result<(Vector3, Vector3, Vector3), AniseError> { self.translate_from_to( @@ -174,7 +174,7 @@ impl<'a> AniseContext<'a> { /// Try to construct the path from the source frame all the way to the root ephemeris of this context. pub fn translate_to_root( &self, - source: RefFrame, + source: Frame, epoch: Epoch, ab_corr: Aberration, distance_unit: DistanceUnit, @@ -221,8 +221,8 @@ impl<'a> AniseContext<'a> { &self, position: Vector3, velocity: Vector3, - from_frame: RefFrame, - to_frame: RefFrame, + from_frame: Frame, + to_frame: Frame, epoch: Epoch, ab_corr: Aberration, distance_unit: DistanceUnit, diff --git a/src/errors.rs b/src/errors.rs index 64f85601..b7588dfb 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -11,7 +11,7 @@ use hifitime::Epoch; use crate::asn1::semver::Semver; -use crate::astro::RefFrame; +use crate::astro::Frame; use crate::der::Error as Asn1Error; use crate::der::Error as DerError; use core::convert::From; @@ -52,8 +52,8 @@ pub enum AniseError { FileExists, /// Raised if a transformation is requested but the frames have no common origin DisjointFrames { - from_frame: RefFrame, - to_frame: RefFrame, + from_frame: Frame, + to_frame: Frame, }, /// Raised if the ephemeris or orientation is deeper to the context origin than this library supports MaxTreeDepth, @@ -83,10 +83,7 @@ pub enum IntegrityErrorKind { /// The lookup table is broken somehow LookupTable, /// Raised if a transformation is requested but the frames have no common origin - DisjointRoots { - from_frame: RefFrame, - to_frame: RefFrame, - }, + DisjointRoots { from_frame: Frame, to_frame: Frame }, } impl From for AniseError { diff --git a/tests/ephemerides/paths.rs b/tests/ephemerides/paths.rs index 81942beb..ee7c09d2 100644 --- a/tests/ephemerides/paths.rs +++ b/tests/ephemerides/paths.rs @@ -10,7 +10,7 @@ use core::f64::EPSILON; -use anise::astro::RefFrame; +use anise::astro::Frame; use anise::constants::celestial_objects::{EARTH_MOON_BARYCENTER, SOLAR_SYSTEM_BARYCENTER}; use anise::constants::frames::*; use anise::constants::orientations::J2000; @@ -45,7 +45,7 @@ fn zero_translations() { // For all of the frames in this context, let's make sure that the translation between the same frames is always zero. for ephemeris_hash in ctx.ephemeris_lut.hashes.iter() { // Build a J2000 oriented frame with this ephemeris center - let this_frame_j2k = RefFrame::from_ephem_orient(*ephemeris_hash, J2000); + let this_frame_j2k = Frame::from_ephem_orient(*ephemeris_hash, J2000); // Check that the common root between the same frame is that frame's hash. let root_ephem = ctx diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 52b818c5..b30bfd59 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -273,7 +273,7 @@ fn de438s_translation_verif_emb2luna() { #[ignore] #[cfg(feature = "std")] fn validate_jplde_translation() { - use anise::astro::RefFrame; + use anise::astro::Frame; use arrow::array::{ArrayRef, Float64Array, StringArray, UInt8Array}; use arrow::datatypes::{DataType, Field, Schema}; use arrow::record_batch::RecordBatch; @@ -335,7 +335,7 @@ fn validate_jplde_translation() { for (idx1, ephem1) in ctx.ephemeris_data.iter().enumerate() { let j2000_ephem1 = - RefFrame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx1).unwrap()); + Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx1).unwrap()); for (idx2, ephem2) in ctx.ephemeris_data.iter().enumerate() { if ephem1 == ephem2 { @@ -343,7 +343,7 @@ fn validate_jplde_translation() { } let j2000_ephem2 = - RefFrame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx2).unwrap()); + Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx2).unwrap()); // Query the ephemeris data for a bunch of different times. let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { From e1628922aa108de2f2c63534c072e8283b03d1ab Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Thu, 3 Nov 2022 18:23:06 -0600 Subject: [PATCH 04/48] Add Cartesian state computation, orbit, and geodetic orbit Signed-off-by: Christopher Rabotin --- src/astro/celestial_frame.rs | 39 +- src/astro/frame.rs | 36 +- src/astro/geodetic_frame.rs | 68 ++-- src/astro/mod.rs | 4 +- src/astro/orbit.rs | 653 ++++++++++++++++++++++++++++++- src/astro/orbit_geodetic.rs | 145 +++++++ src/ephemerides/translations.rs | 48 ++- src/errors.rs | 38 +- src/math/angles.rs | 38 ++ src/math/cartesian.rs | 209 ++++++++++ src/math/mod.rs | 26 +- tests/ephemerides/paths.rs | 8 +- tests/ephemerides/translation.rs | 126 +++--- 13 files changed, 1288 insertions(+), 150 deletions(-) create mode 100644 src/astro/orbit_geodetic.rs create mode 100644 src/math/angles.rs create mode 100644 src/math/cartesian.rs diff --git a/src/astro/celestial_frame.rs b/src/astro/celestial_frame.rs index 283bc5e8..6d602abe 100644 --- a/src/astro/celestial_frame.rs +++ b/src/astro/celestial_frame.rs @@ -8,13 +8,42 @@ * Documentation: https://nyxspace.com/ */ -use super::FrameTrait; -use uom::si::f64::*; +use crate::HashType; -pub type GravityParam = VolumeRate; +use super::{Frame, FrameTrait}; +use core::fmt::{Display, Formatter}; /// Defines a Celestial Frame kind, which is a Frame that also defines a standard gravitational parameter pub trait CelestialFrameTrait: FrameTrait { - /// Returns the standard gravitational parameter of this frame - fn mu(&self) -> GravityParam; + /// Returns the standard gravitational parameter of this frame (consider switching to UOM for this) + fn mu_km3_s2(&self) -> f64; +} + +/// A CelestialFrame is a frame whose equatorial and semi major radii are defined. +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct CelestialFrame { + pub frame: Frame, + pub mu_km3_s2: f64, +} + +impl FrameTrait for CelestialFrame { + fn ephemeris_hash(&self) -> HashType { + self.frame.ephemeris_hash() + } + + fn orientation_hash(&self) -> HashType { + self.frame.orientation_hash() + } +} + +impl CelestialFrameTrait for CelestialFrame { + fn mu_km3_s2(&self) -> f64 { + self.mu_km3_s2 + } +} + +impl Display for CelestialFrame { + fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { + write!(f, "{} (μ = {} km3/s)", self.frame, self.mu_km3_s2()) + } } diff --git a/src/astro/frame.rs b/src/astro/frame.rs index b81cf1d7..65c925fe 100644 --- a/src/astro/frame.rs +++ b/src/astro/frame.rs @@ -20,6 +20,22 @@ pub trait FrameTrait: Copy + Debug + PartialEq { fn ephemeris_hash(&self) -> HashType; /// Returns the orientation hash of this frame. fn orientation_hash(&self) -> HashType; + /// Returns true if the ephemeris origin is equal to the provided hash + fn ephem_origin_hash_match(&self, other_hash: HashType) -> bool { + self.ephemeris_hash() == other_hash + } + /// Returns true if the orientation origin is equal to the provided hash + fn orient_origin_hash_match(&self, other_hash: HashType) -> bool { + self.orientation_hash() == other_hash + } + /// Returns true if the ephemeris origin is equal to the provided frame + fn ephem_origin_match(&self, other: Self) -> bool { + self.ephem_origin_hash_match(other.ephemeris_hash()) + } + /// Returns true if the orientation origin is equal to the provided frame + fn orient_origin_match(&self, other: Self) -> bool { + self.orient_origin_hash_match(other.orientation_hash()) + } } /// A Frame uniquely defined by its ephemeris center and orientation. Refer to FrameDetail for frames combined with parameters. @@ -52,26 +68,6 @@ impl Frame { Self::from_ephem_orient(ephemeris_hash, J2000) } - /// Returns true if the ephemeris origin is equal to the provided hash - pub const fn ephem_origin_hash_match(&self, other_hash: HashType) -> bool { - self.ephemeris_hash == other_hash - } - - /// Returns true if the orientation origin is equal to the provided hash - pub const fn orient_origin_hash_match(&self, other_hash: HashType) -> bool { - self.orientation_hash == other_hash - } - - /// Returns true if the ephemeris origin is equal to the provided frame - pub const fn ephem_origin_match(&self, other: Self) -> bool { - self.ephemeris_hash == other.ephemeris_hash - } - - /// Returns true if the orientation origin is equal to the provided frame - pub const fn orient_origin_match(&self, other: Self) -> bool { - self.orientation_hash == other.orientation_hash - } - /// Returns a copy of this Frame whose ephemeris hash is set to the provided hash pub const fn with_ephem(&self, new_ephem_hash: HashType) -> Self { Self { diff --git a/src/astro/geodetic_frame.rs b/src/astro/geodetic_frame.rs index d29a72bf..1c4773a7 100644 --- a/src/astro/geodetic_frame.rs +++ b/src/astro/geodetic_frame.rs @@ -8,89 +8,71 @@ * Documentation: https://nyxspace.com/ */ -use super::{celestial_frame::GravityParam, CelestialFrameTrait, FrameTrait}; +use super::{celestial_frame::CelestialFrame, CelestialFrameTrait, FrameTrait}; use crate::astro::Frame; use crate::HashType; use core::fmt::{Display, Formatter}; -use uom::si::{f64::*, length::kilometer, volume_rate::cubic_kilometer_per_second}; /// Defines a Celestial Frame kind, which is a Frame that also defines a standard gravitational parameter -trait GeodeticFrameTrait: CelestialFrameTrait { +pub trait GeodeticFrameTrait: CelestialFrameTrait { /// Equatorial radius in kilometers - fn equatorial_radius(&self) -> Length; + fn equatorial_radius_km(&self) -> f64; /// Semi major radius in kilometers - fn semi_major_radius(&self) -> Length; + fn semi_major_radius_km(&self) -> f64; /// Flattening coefficient (unit less) fn flattening(&self) -> f64; + /// Returns true if this is a body fixed frame + fn is_body_fixed(&self) -> bool; } -/// A Frame uniquely defined by its ephemeris center and orientation. -/// -/// # Notes -/// 1. If a frame defines a gravity parameter μ (mu), then it it considered a celestial object. -/// 2. If a frame defines an equatorial radius, a semi major radius, and a flattening ratio, then -/// is considered a geoid. +/// A GeodeticFrame is a Celestial Frame whose equatorial and semi major radii are defined. #[derive(Copy, Clone, Debug, PartialEq)] pub struct GeodeticFrame { - pub frame: Frame, - pub mu_km3s: f64, + pub celestial_frame: CelestialFrame, pub equatorial_radius_km: f64, pub semi_major_radius_km: f64, pub flattening: f64, -} - -impl GeodeticFrame { - pub const fn ephem_origin_hash_match(&self, other_hash: HashType) -> bool { - self.frame.ephem_origin_hash_match(other_hash) - } - - pub const fn orient_origin_hash_match(&self, other_hash: HashType) -> bool { - self.frame.orient_origin_hash_match(other_hash) - } - - pub const fn ephem_origin_match(&self, other: Self) -> bool { - self.frame.ephem_origin_match(other.frame) - } - - pub const fn orient_origin_match(&self, other: Self) -> bool { - self.frame.orient_origin_match(other.frame) - } + pub is_body_fixed: bool, } impl FrameTrait for GeodeticFrame { fn ephemeris_hash(&self) -> HashType { - self.frame.ephemeris_hash + self.celestial_frame.ephemeris_hash() } fn orientation_hash(&self) -> HashType { - self.frame.orientation_hash + self.celestial_frame.orientation_hash() } } impl CelestialFrameTrait for GeodeticFrame { - fn mu(&self) -> GravityParam { - GravityParam::new::(self.mu_km3s) + fn mu_km3_s2(&self) -> f64 { + self.celestial_frame.mu_km3_s2() } } impl GeodeticFrameTrait for GeodeticFrame { - fn equatorial_radius(&self) -> Length { - Length::new::(self.equatorial_radius_km) + fn equatorial_radius_km(&self) -> f64 { + self.equatorial_radius_km } - fn semi_major_radius(&self) -> Length { - Length::new::(self.semi_major_radius_km) + fn semi_major_radius_km(&self) -> f64 { + self.semi_major_radius_km } fn flattening(&self) -> f64 { - todo!() + self.flattening + } + + fn is_body_fixed(&self) -> bool { + self.is_body_fixed } } impl Display for GeodeticFrame { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { - write!(f, "{}", self.frame)?; - write!(f, " (μ = {} km3/s", self.mu_km3s)?; + write!(f, "{}", self.celestial_frame.frame)?; + write!(f, " (μ = {} km3/s", self.mu_km3_s2())?; write!( f, @@ -108,6 +90,6 @@ impl Into for GeodeticFrame { /// /// This will cause the LOSS of the constants stored in the frame detail. fn into(self) -> Frame { - self.frame + self.celestial_frame.frame } } diff --git a/src/astro/mod.rs b/src/astro/mod.rs index 9736bdbe..8de73df1 100644 --- a/src/astro/mod.rs +++ b/src/astro/mod.rs @@ -18,7 +18,9 @@ pub enum Aberration { pub mod celestial_frame; pub mod frame; pub mod geodetic_frame; +pub mod orbit; +pub mod orbit_geodetic; pub use celestial_frame::CelestialFrameTrait; pub use frame::{Frame, FrameTrait}; -pub use geodetic_frame::GeodeticFrame; +pub use geodetic_frame::{GeodeticFrame, GeodeticFrameTrait}; diff --git a/src/astro/orbit.rs b/src/astro/orbit.rs index 4429fda5..bdb8e1cd 100644 --- a/src/astro/orbit.rs +++ b/src/astro/orbit.rs @@ -1 +1,652 @@ -// TODO -- Grab from Nyx +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ +use super::CelestialFrameTrait; +use crate::{ + errors::PhysicsErrorKind, + math::{ + angles::{between_0_360, between_pm_180}, + cartesian::Cartesian, + Vector3, Vector6, + }, +}; +use core::f64::consts::PI; +use core::f64::EPSILON; +use hifitime::{Duration, Epoch, TimeUnits}; +use log::{error, info, warn}; + +/// If an orbit has an eccentricity below the following value, it is considered circular (only affects warning messages) +pub const ECC_EPSILON: f64 = 1e-11; + +impl Cartesian { + /// Creates a new Orbit around the provided Celestial or Geoid frame from the Keplerian orbital elements. + /// + /// **Units:** km, none, degrees, degrees, degrees, degrees + /// + /// WARNING: This function will panic if the singularities in the conversion are expected. + /// NOTE: The state is defined in Cartesian coordinates as they are non-singular. This causes rounding + /// errors when creating a state from its Keplerian orbital elements (cf. the state tests). + /// One should expect these errors to be on the order of 1e-12. + pub fn keplerian( + sma: f64, + ecc: f64, + inc: f64, + raan: f64, + aop: f64, + ta: f64, + epoch: Epoch, + frame: F, + ) -> Result { + if frame.mu_km3_s2().abs() < EPSILON { + warn!( + "GM is near zero ({}): expect math errors in Keplerian to Cartesian conversion", + frame.mu_km3_s2() + ); + } + // Algorithm from GMAT's StateConversionUtil::KeplerianToCartesian + let ecc = if ecc < 0.0 { + warn!("eccentricity cannot be negative: sign of eccentricity changed"); + ecc * -1.0 + } else { + ecc + }; + let sma = if ecc > 1.0 && sma > 0.0 { + warn!("eccentricity > 1 (hyperbolic) BUT SMA > 0 (elliptical): sign of SMA changed"); + sma * -1.0 + } else if ecc < 1.0 && sma < 0.0 { + warn!("eccentricity < 1 (elliptical) BUT SMA < 0 (hyperbolic): sign of SMA changed"); + sma * -1.0 + } else { + sma + }; + if (sma * (1.0 - ecc)).abs() < 1e-3 { + // GMAT errors below one meter. Let's warn for below that, but not panic, might be useful for landing scenarios? + warn!("radius of periapsis is less than one meter"); + } + if (1.0 - ecc).abs() < EPSILON { + panic!("parabolic orbits have ill-defined Keplerian orbital elements"); + } + if ecc > 1.0 { + let ta = between_0_360(ta); + if ta > (PI - (1.0 / ecc).acos()).to_degrees() { + panic!( + "true anomaly value ({}) physically impossible for a hyperbolic orbit", + ta + ); + } + } + if (1.0 + ecc * ta.to_radians().cos()).is_infinite() { + panic!("radius of orbit is infinite"); + } + // Done with all the warnings and errors supported by GMAT + // The conversion algorithm itself comes from GMAT's StateConversionUtil::ComputeKeplToCart + // NOTE: GMAT supports mean anomaly instead of true anomaly, but only for backward compatibility reasons + // so it isn't supported here. + let inc = inc.to_radians(); + let raan = raan.to_radians(); + let aop = aop.to_radians(); + let ta = ta.to_radians(); + let p = sma * (1.0 - ecc.powi(2)); + + if p.abs() < EPSILON { + // TODO: Switch this to an error + panic!("Semilatus rectum ~= 0.0: parabolic orbit"); + } + + // NOTE: At this point GMAT computes 1+ecc**2 and checks whether it's very small. + // It then reports that the radius may be too large. We've effectively already done + // this check above (and panicked if needed), so it isn't repeated here. + let radius = p / (1.0 + ecc * ta.cos()); + let (sin_aop_ta, cos_aop_ta) = (aop + ta).sin_cos(); + let (sin_inc, cos_inc) = inc.sin_cos(); + let (sin_raan, cos_raan) = raan.sin_cos(); + let (sin_aop, cos_aop) = aop.sin_cos(); + let x = radius * (cos_aop_ta * cos_raan - cos_inc * sin_aop_ta * sin_raan); + let y = radius * (cos_aop_ta * sin_raan + cos_inc * sin_aop_ta * cos_raan); + let z = radius * sin_aop_ta * sin_inc; + let sqrt_gm_p = (frame.mu_km3_s2() / p).sqrt(); + let cos_ta_ecc = ta.cos() + ecc; + let sin_ta = ta.sin(); + + let vx = sqrt_gm_p * cos_ta_ecc * (-sin_aop * cos_raan - cos_inc * sin_raan * cos_aop) + - sqrt_gm_p * sin_ta * (cos_aop * cos_raan - cos_inc * sin_raan * sin_aop); + let vy = sqrt_gm_p * cos_ta_ecc * (-sin_aop * sin_raan + cos_inc * cos_raan * cos_aop) + - sqrt_gm_p * sin_ta * (cos_aop * sin_raan + cos_inc * cos_raan * sin_aop); + let vz = sqrt_gm_p * (cos_ta_ecc * sin_inc * cos_aop - sin_ta * sin_inc * sin_aop); + + Ok(Self { + radius_km: Vector3::new(x, y, z), + velocity_km_s: Vector3::new(vx, vy, vz), + acceleration_km_s2: None, + epoch, + frame, + }) + } + + /// Creates a new Orbit from the provided radii of apoapsis and periapsis, in kilometers + pub fn keplerian_apsis_radii( + r_a: f64, + r_p: f64, + inc: f64, + raan: f64, + aop: f64, + ta: f64, + dt: Epoch, + frame: F, + ) -> Result { + let sma = (r_a + r_p) / 2.0; + let ecc = r_a / sma - 1.0; + Self::keplerian(sma, ecc, inc, raan, aop, ta, dt, frame) + } + + /// Creates a new Orbit around the provided frame from the borrowed state vector + /// + /// The state vector **must** be sma, ecc, inc, raan, aop, ta. This function is a shortcut to `cartesian` + /// and as such it has the same unit requirements. + pub fn keplerian_vec( + state: &Vector6, + epoch: Epoch, + frame: F, + ) -> Result { + Self::keplerian( + state[0], state[1], state[2], state[3], state[4], state[5], epoch, frame, + ) + } + + /// Returns this state as a Keplerian Vector6 in [km, none, degrees, degrees, degrees, degrees] + /// + /// Note that the time is **not** returned in the vector. + pub fn to_keplerian_vec(self) -> Vector6 { + Vector6::new( + self.sma_km(), + self.ecc(), + self.inc_deg(), + self.raan_deg(), + self.aop_deg(), + self.ta_deg(), + ) + } + + /// Returns the orbital momentum vector + pub fn hvec(&self) -> Vector3 { + self.radius_km.cross(&self.velocity_km_s) + } + + /// Returns the orbital momentum value on the X axis + pub fn hx(&self) -> f64 { + self.hvec()[0] + } + + /// Returns the orbital momentum value on the Y axis + pub fn hy(&self) -> f64 { + self.hvec()[1] + } + + /// Returns the orbital momentum value on the Z axis + pub fn hz(&self) -> f64 { + self.hvec()[2] + } + + /// Returns the norm of the orbital momentum + pub fn hmag(&self) -> f64 { + self.hvec().norm() + } + + /// Returns the specific mechanical energy in km^2/s^2 + pub fn energy(&self) -> f64 { + self.vmag_km_s().powi(2) / 2.0 - self.frame.mu_km3_s2() / self.rmag_km() + } + + /// Returns the semi-major axis in km + pub fn sma_km(&self) -> f64 { + -self.frame.mu_km3_s2() / (2.0 * self.energy()) + } + + /// Mutates this orbit to change the SMA + pub fn set_sma(&mut self, new_sma_km: f64) { + let me = Self::keplerian( + new_sma_km, + self.ecc(), + self.inc_deg(), + self.raan_deg(), + self.aop_deg(), + self.ta_deg(), + self.epoch, + self.frame, + ); + + *self = me.unwrap(); + } + + /// Returns a copy of the state with a new SMA + pub fn with_sma(self, new_sma_km: f64) -> Self { + let mut me = self; + me.set_sma(new_sma_km); + me + } + + /// Returns a copy of the state with a provided SMA added to the current one + pub fn add_sma(self, delta_sma: f64) -> Self { + let mut me = self; + me.set_sma(me.sma_km() + delta_sma); + me + } + + /// Returns the period in seconds + pub fn period(&self) -> Duration { + 2.0 * PI + * (self.sma_km().powi(3) / self.frame.mu_km3_s2()) + .sqrt() + .seconds() + } + + /// Returns the eccentricity vector (no unit) + pub fn evec(&self) -> Vector3 { + let r = self.radius_km; + let v = self.velocity_km_s; + ((v.norm().powi(2) - self.frame.mu_km3_s2() / r.norm()) * r - (r.dot(&v)) * v) + / self.frame.mu_km3_s2() + } + + /// Returns the eccentricity (no unit) + pub fn ecc(&self) -> f64 { + self.evec().norm() + } + + /// Mutates this orbit to change the ECC + pub fn set_ecc(&mut self, new_ecc: f64) { + let me = Self::keplerian( + self.sma_km(), + new_ecc, + self.inc_deg(), + self.raan_deg(), + self.aop_deg(), + self.ta_deg(), + self.epoch, + self.frame, + ); + + *self = me.unwrap(); + } + + /// Returns a copy of the state with a new ECC + pub fn with_ecc(self, new_ecc: f64) -> Self { + let mut me = self; + me.set_ecc(new_ecc); + me + } + + /// Returns a copy of the state with a provided ECC added to the current one + pub fn add_ecc(self, delta_ecc: f64) -> Self { + let mut me = self; + me.set_ecc(me.ecc() + delta_ecc); + me + } + + /// Returns the inclination in degrees + pub fn inc_deg(&self) -> f64 { + (self.hvec()[2] / self.hmag()).acos().to_degrees() + } + + /// Mutates this orbit to change the INC + pub fn set_inc_deg(&mut self, new_inc_deg: f64) { + let me = Self::keplerian( + self.sma_km(), + self.ecc(), + new_inc_deg, + self.raan_deg(), + self.aop_deg(), + self.ta_deg(), + self.epoch, + self.frame, + ); + + *self = me.unwrap(); + } + + /// Returns a copy of the state with a new INC + pub fn with_inc_deg(self, new_inc_deg: f64) -> Self { + let mut me = self; + me.set_inc_deg(new_inc_deg); + me + } + + /// Returns a copy of the state with a provided INC added to the current one + pub fn add_inc_deg(self, delta_inc_deg: f64) -> Self { + let mut me = self; + me.set_inc_deg(me.inc_deg() + delta_inc_deg); + me + } + + /// Returns the argument of periapsis in degrees + pub fn aop_deg(&self) -> f64 { + let n = Vector3::new(0.0, 0.0, 1.0).cross(&self.hvec()); + let cos_aop = n.dot(&self.evec()) / (n.norm() * self.ecc()); + let aop = cos_aop.acos(); + if aop.is_nan() { + if cos_aop > 1.0 { + 180.0 + } else { + 0.0 + } + } else if self.evec()[2] < 0.0 { + (2.0 * PI - aop).to_degrees() + } else { + aop.to_degrees() + } + } + + /// Mutates this orbit to change the AOP + pub fn set_aop_deg(&mut self, new_aop_deg: f64) { + let me = Self::keplerian( + self.sma_km(), + self.ecc(), + self.inc_deg(), + self.raan_deg(), + new_aop_deg, + self.ta_deg(), + self.epoch, + self.frame, + ); + + *self = me.unwrap(); + } + + /// Returns a copy of the state with a new AOP + pub fn with_aop_deg(self, new_aop_deg: f64) -> Self { + let mut me = self; + me.set_aop_deg(new_aop_deg); + me + } + + /// Returns a copy of the state with a provided AOP added to the current one + pub fn add_aop_deg(self, delta_aop_deg: f64) -> Self { + let mut me = self; + me.set_aop_deg(me.aop_deg() + delta_aop_deg); + me + } + + /// Returns the right ascension of ther ascending node in degrees + pub fn raan_deg(&self) -> f64 { + let n = Vector3::new(0.0, 0.0, 1.0).cross(&self.hvec()); + let cos_raan = n[0] / n.norm(); + let raan = cos_raan.acos(); + if raan.is_nan() { + if cos_raan > 1.0 { + 180.0 + } else { + 0.0 + } + } else if n[1] < 0.0 { + (2.0 * PI - raan).to_degrees() + } else { + raan.to_degrees() + } + } + + /// Mutates this orbit to change the RAAN + pub fn set_raan_deg(&mut self, new_raan_deg: f64) { + let me = Self::keplerian( + self.sma_km(), + self.ecc(), + self.inc_deg(), + new_raan_deg, + self.aop_deg(), + self.ta_deg(), + self.epoch, + self.frame, + ); + + *self = me.unwrap(); + } + + /// Returns a copy of the state with a new RAAN + pub fn with_raan_deg(self, new_raan_deg: f64) -> Self { + let mut me = self; + me.set_raan_deg(new_raan_deg); + me + } + + /// Returns a copy of the state with a provided RAAN added to the current one + pub fn add_raan_deg(self, delta_raan_deg: f64) -> Self { + let mut me = self; + me.set_raan_deg(me.raan_deg() + delta_raan_deg); + me + } + + /// Returns the true anomaly in degrees between 0 and 360.0 + /// + /// NOTE: This function will emit a warning stating that the TA should be avoided if in a very near circular orbit + /// Code from https://github.com/ChristopherRabotin/GMAT/blob/80bde040e12946a61dae90d9fc3538f16df34190/src/gmatutil/util/StateConversionUtil.cpp#L6835 + /// + /// LIMITATION: For an orbit whose true anomaly is (very nearly) 0.0 or 180.0, this function may return either 0.0 or 180.0 with a very small time increment. + /// This is due to the precision of the cosine calculation: if the arccosine calculation is out of bounds, the sign of the cosine of the true anomaly is used + /// to determine whether the true anomaly should be 0.0 or 180.0. **In other words**, there is an ambiguity in the computation in the true anomaly exactly at 180.0 and 0.0. + pub fn ta_deg(&self) -> f64 { + if self.ecc() < ECC_EPSILON { + warn!( + "true anomaly ill-defined for circular orbit (e = {})", + self.ecc() + ); + } + let cos_nu = self.evec().dot(&self.radius_km) / (self.ecc() * self.rmag_km()); + // If we're close the valid bounds, let's just do a sign check and return the true anomaly + let ta = cos_nu.acos(); + if ta.is_nan() { + if cos_nu > 1.0 { + 180.0 + } else { + 0.0 + } + } else if self.radius_km.dot(&self.velocity_km_s) < 0.0 { + (2.0 * PI - ta).to_degrees() + } else { + ta.to_degrees() + } + } + + /// Mutates this orbit to change the TA + pub fn set_ta_deg(&mut self, new_ta_deg: f64) { + let me = Self::keplerian( + self.sma_km(), + self.ecc(), + self.inc_deg(), + self.raan_deg(), + self.aop_deg(), + new_ta_deg, + self.epoch, + self.frame, + ); + + *self = me.unwrap(); + } + + /// Returns a copy of the state with a new TA + pub fn with_ta_deg(self, new_ta_deg: f64) -> Self { + let mut me = self; + me.set_ta_deg(new_ta_deg); + me + } + + /// Returns a copy of the state with a provided TA added to the current one + pub fn add_ta_deg(self, delta_ta_deg: f64) -> Self { + let mut me = self; + me.set_ta_deg(me.ta_deg() + delta_ta_deg); + me + } + + /// Returns a copy of this state with the provided apoasis and periapsis + pub fn with_apoapsis_periapsis_km( + self, + new_ra_km: f64, + new_rp_km: f64, + ) -> Result { + Self::keplerian_apsis_radii( + new_ra_km, + new_rp_km, + self.inc_deg(), + self.raan_deg(), + self.aop_deg(), + self.ta_deg(), + self.epoch, + self.frame, + ) + } + + /// Returns a copy of this state with the provided apoasis and periapsis added to the current values + pub fn add_apoapsis_periapsis_km( + self, + delta_ra_km: f64, + delta_rp_km: f64, + ) -> Result { + Self::keplerian_apsis_radii( + self.apoapsis_km() + delta_ra_km, + self.periapsis_km() + delta_rp_km, + self.inc_deg(), + self.raan_deg(), + self.aop_deg(), + self.ta_deg(), + self.epoch, + self.frame, + ) + } + + /// Returns the true longitude in degrees + pub fn tlong_deg(&self) -> f64 { + // Angles already in degrees + between_0_360(self.aop_deg() + self.raan_deg() + self.ta_deg()) + } + + /// Returns the argument of latitude in degrees + /// + /// NOTE: If the orbit is near circular, the AoL will be computed from the true longitude + /// instead of relying on the ill-defined true anomaly. + pub fn aol_deg(&self) -> f64 { + between_0_360(if self.ecc() < ECC_EPSILON { + self.tlong_deg() - self.raan_deg() + } else { + self.aop_deg() + self.ta_deg() + }) + } + + /// Returns the radius of periapsis (or perigee around Earth), in kilometers. + pub fn periapsis_km(&self) -> f64 { + self.sma_km() * (1.0 - self.ecc()) + } + + /// Returns the radius of apoapsis (or apogee around Earth), in kilometers. + pub fn apoapsis_km(&self) -> f64 { + self.sma_km() * (1.0 + self.ecc()) + } + + /// Returns the eccentric anomaly in degrees + /// + /// This is a conversion from GMAT's StateConversionUtil::TrueToEccentricAnomaly + pub fn ea_deg(&self) -> f64 { + let (sin_ta, cos_ta) = self.ta_deg().to_radians().sin_cos(); + let ecc_cos_ta = self.ecc() * cos_ta; + let sin_ea = ((1.0 - self.ecc().powi(2)).sqrt() * sin_ta) / (1.0 + ecc_cos_ta); + let cos_ea = (self.ecc() + cos_ta) / (1.0 + ecc_cos_ta); + // The atan2 function is a bit confusing: https://doc.rust-lang.org/std/primitive.f64.html#method.atan2 . + sin_ea.atan2(cos_ea).to_degrees() + } + + /// Returns the flight path angle in degrees + pub fn fpa_deg(&self) -> f64 { + let nu = self.ta_deg().to_radians(); + let ecc = self.ecc(); + let denom = (1.0 + 2.0 * ecc * nu.cos() + ecc.powi(2)).sqrt(); + let sin_fpa = ecc * nu.sin() / denom; + let cos_fpa = 1.0 + ecc * nu.cos() / denom; + sin_fpa.atan2(cos_fpa).to_degrees() + } + + /// Returns the mean anomaly in degrees + /// + /// This is a conversion from GMAT's StateConversionUtil::TrueToMeanAnomaly + pub fn ma_deg(&self) -> f64 { + if self.ecc().abs() < ECC_EPSILON { + error!("parabolic orbit: setting mean anomaly to 0.0"); + 0.0 + } else if self.ecc() < 1.0 { + between_0_360( + (self.ea_deg().to_radians() - self.ecc() * self.ea_deg().to_radians().sin()) + .to_degrees(), + ) + } else { + info!("computing the hyperbolic anomaly"); + // From GMAT's TrueToHyperbolicAnomaly + ((self.ta_deg().to_radians().sin() * (self.ecc().powi(2) - 1.0)).sqrt() + / (1.0 + self.ecc() * self.ta_deg().to_radians().cos())) + .asinh() + .to_degrees() + } + } + + /// Returns the semi parameter (or semilatus rectum) + pub fn semi_parameter_km(&self) -> f64 { + self.sma_km() * (1.0 - self.ecc().powi(2)) + } + + /// Returns whether this state satisfies the requirement to compute the Mean Brouwer Short orbital + /// element set. + /// + /// This is a conversion from GMAT's StateConversionUtil::CartesianToBrouwerMeanShort. + /// The details are at the log level `info`. + /// NOTE: Mean Brouwer Short are only defined around Earth. However, `nyx` does *not* check the + /// main celestial body around which the state is defined (GMAT does perform this verification). + pub fn is_brouwer_short_valid(&self) -> bool { + if self.inc_deg() > 180.0 { + info!("Brouwer Mean Short only applicable for inclinations less than 180.0"); + false + } else if self.ecc() >= 1.0 || self.ecc() < 0.0 { + info!("Brouwer Mean Short only applicable for elliptical orbits"); + false + } else if self.periapsis_km() < 3000.0 { + // NOTE: GMAT emits a warning if the periagee is less than the Earth radius, but we do not do that here. + info!("Brouwer Mean Short only applicable for if perigee is greater than 3000 km"); + false + } else { + true + } + } + + /// Returns the right ascension of this orbit in degrees + pub fn right_ascension_deg(&self) -> f64 { + between_0_360((self.radius_km.y.atan2(self.radius_km.x)).to_degrees()) + } + + /// Returns the declination of this orbit in degrees + pub fn declination_deg(&self) -> f64 { + between_pm_180((self.radius_km.z / self.rmag_km()).asin().to_degrees()) + } + + /// Returns the semi minor axis in km, includes code for a hyperbolic orbit + pub fn semi_minor_axis_km(&self) -> f64 { + if self.ecc() <= 1.0 { + ((self.sma_km() * self.ecc()).powi(2) - self.sma_km().powi(2)).sqrt() + } else { + self.hmag().powi(2) / (self.frame.mu_km3_s2() * (self.ecc().powi(2) - 1.0).sqrt()) + } + } + + /// Returns the velocity declination of this orbit in degrees + pub fn velocity_declination_deg(&self) -> f64 { + between_pm_180( + (self.velocity_km_s.z / self.vmag_km_s()) + .asin() + .to_degrees(), + ) + } + + /// Returns the $C_3$ of this orbit in km^2/s^2 + pub fn c3_km2_s2(&self) -> f64 { + -self.frame.mu_km3_s2() / self.sma_km() + } +} diff --git a/src/astro/orbit_geodetic.rs b/src/astro/orbit_geodetic.rs new file mode 100644 index 00000000..3416bc4e --- /dev/null +++ b/src/astro/orbit_geodetic.rs @@ -0,0 +1,145 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use super::GeodeticFrameTrait; +use crate::{ + errors::PhysicsErrorKind, + math::{ + angles::{between_0_360, between_pm_180}, + cartesian::Cartesian, + }, +}; +use hifitime::Epoch; +use log::{error, warn}; + +impl Cartesian { + /// Creates a new Orbit from the provided semi-major axis altitude in kilometers + pub fn keplerian_altitude( + sma_altitude: f64, + ecc: f64, + inc: f64, + raan: f64, + aop: f64, + ta: f64, + dt: Epoch, + frame: F, + ) -> Result { + Self::keplerian( + sma_altitude + frame.equatorial_radius_km(), + ecc, + inc, + raan, + aop, + ta, + dt, + frame, + ) + } + + /// Creates a new Orbit from the provided altitudes of apoapsis and periapsis, in kilometers + pub fn keplerian_apsis_altitude( + a_a: f64, + a_p: f64, + inc: f64, + raan: f64, + aop: f64, + ta: f64, + dt: Epoch, + frame: F, + ) -> Result { + Self::keplerian_apsis_radii( + a_a + frame.equatorial_radius_km(), + a_p + frame.equatorial_radius_km(), + inc, + raan, + aop, + ta, + dt, + frame, + ) + } + + /// Returns the SMA altitude in km + pub fn sma_altitude(&self) -> f64 { + self.sma_km() - self.frame.equatorial_radius_km() + } + + /// Returns the altitude of periapsis (or perigee around Earth), in kilometers. + pub fn periapsis_altitude(&self) -> f64 { + self.periapsis_km() - self.frame.equatorial_radius_km() + } + + /// Returns the altitude of apoapsis (or apogee around Earth), in kilometers. + pub fn apoapsis_altitude(&self) -> f64 { + self.apoapsis_km() - self.frame.equatorial_radius_km() + } + + /// Returns the geodetic longitude (λ) in degrees. Value is between 0 and 360 degrees. + /// + /// Although the reference is not Vallado, the math from Vallado proves to be equivalent. + /// Reference: G. Xu and Y. Xu, "GPS", DOI 10.1007/978-3-662-50367-6_2, 2016 + pub fn geodetic_longitude(&self) -> f64 { + between_0_360(self.radius_km.y.atan2(self.radius_km.x).to_degrees()) + } + + /// Returns the geodetic latitude (φ) in degrees. Value is between -180 and +180 degrees. + /// + /// Reference: Vallado, 4th Ed., Algorithm 12 page 172. + pub fn geodetic_latitude(&self) -> f64 { + if !self.frame.is_body_fixed() { + warn!("computation of geodetic latitude must be done in a body fixed frame and {:?} is not one!", self.frame); + } + let eps = 1e-12; + let max_attempts = 20; + let mut attempt_no = 0; + let r_delta = (self.radius_km.x.powi(2) + self.radius_km.y.powi(2)).sqrt(); + let mut latitude = (self.radius_km.z / self.rmag_km()).asin(); + let e2 = self.frame.flattening() * (2.0 - self.frame.flattening()); + loop { + attempt_no += 1; + let c_earth = + self.frame.semi_major_radius_km() / ((1.0 - e2 * (latitude).sin().powi(2)).sqrt()); + let new_latitude = (self.radius_km.z + c_earth * e2 * (latitude).sin()).atan2(r_delta); + if (latitude - new_latitude).abs() < eps { + return between_pm_180(new_latitude.to_degrees()); + } else if attempt_no >= max_attempts { + error!( + "geodetic latitude failed to converge -- error = {}", + (latitude - new_latitude).abs() + ); + return between_pm_180(new_latitude.to_degrees()); + } + latitude = new_latitude; + } + } + + /// Returns the geodetic height in km. + /// + /// Reference: Vallado, 4th Ed., Algorithm 12 page 172. + pub fn geodetic_height(&self) -> f64 { + if !self.frame.is_body_fixed() { + warn!("Computation of geodetic height must be done in a body fixed frame and {:?} is not one!", self.frame); + } + let e2 = self.frame.flattening() * (2.0 - self.frame.flattening()); + let latitude = self.geodetic_latitude().to_radians(); + let sin_lat = latitude.sin(); + if (latitude - 1.0).abs() < 0.1 { + // We are near poles, let's use another formulation. + let s_earth = (self.frame.semi_major_radius_km() + * (1.0 - self.frame.flattening()).powi(2)) + / ((1.0 - e2 * sin_lat.powi(2)).sqrt()); + self.radius_km.z / latitude.sin() - s_earth + } else { + let c_earth = self.frame.semi_major_radius_km() / ((1.0 - e2 * sin_lat.powi(2)).sqrt()); + let r_delta = (self.radius_km.x.powi(2) + self.radius_km.y.powi(2)).sqrt(); + r_delta / latitude.cos() - c_earth + } + } +} diff --git a/src/ephemerides/translations.rs b/src/ephemerides/translations.rs index d201f84d..4eafe2cb 100644 --- a/src/ephemerides/translations.rs +++ b/src/ephemerides/translations.rs @@ -13,8 +13,13 @@ use log::error; use crate::asn1::units::*; use crate::astro::Aberration; use crate::hifitime::Epoch; +use crate::math::cartesian::CartesianState; use crate::math::Vector3; -use crate::{asn1::context::AniseContext, astro::Frame, errors::AniseError}; +use crate::{ + asn1::context::AniseContext, + astro::{Frame, FrameTrait}, + errors::AniseError, +}; /// **Limitation:** no translation or rotation may have more than 8 nodes. pub const MAX_TREE_DEPTH: usize = 8; @@ -33,10 +38,10 @@ impl<'a> AniseContext<'a> { ab_corr: Aberration, distance_unit: DistanceUnit, time_unit: TimeUnit, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + ) -> Result { if from_frame == to_frame { // Both frames match, return this frame's hash (i.e. no need to go higher up). - return Ok((Vector3::zeros(), Vector3::zeros(), Vector3::zeros())); + return Ok(CartesianState::zero(from_frame)); } let (node_count, path, common_node) = self.common_ephemeris_path(to_frame, from_frame)?; @@ -94,11 +99,13 @@ impl<'a> AniseContext<'a> { } } - Ok(( - pos_fwrd - pos_bwrd, - vel_fwrd - vel_bwrd, - acc_fwrd - acc_bwrd, - )) + Ok(CartesianState { + radius_km: pos_fwrd - pos_bwrd, + velocity_km_s: vel_fwrd - vel_bwrd, + acceleration_km_s2: Some(acc_fwrd - acc_bwrd), + epoch, + frame: to_frame, + }) } /// Returns the position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`, where the distance is in km, the velocity in km/s, and the acceleration in km/s^2. @@ -108,7 +115,7 @@ impl<'a> AniseContext<'a> { to_frame: Frame, epoch: Epoch, ab_corr: Aberration, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + ) -> Result { self.translate_from_to( from_frame, to_frame, @@ -126,7 +133,7 @@ impl<'a> AniseContext<'a> { to_frame: Frame, epoch: Epoch, ab_corr: Aberration, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + ) -> Result { self.translate_from_to( from_frame, to_frame, @@ -143,7 +150,7 @@ impl<'a> AniseContext<'a> { from_frame: Frame, to_frame: Frame, epoch: Epoch, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + ) -> Result { self.translate_from_to( from_frame, to_frame, @@ -160,7 +167,7 @@ impl<'a> AniseContext<'a> { from_frame: Frame, to_frame: Frame, epoch: Epoch, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { + ) -> Result { self.translate_from_to( from_frame, to_frame, @@ -227,9 +234,9 @@ impl<'a> AniseContext<'a> { ab_corr: Aberration, distance_unit: DistanceUnit, time_unit: TimeUnit, - ) -> Result<(Vector3, Vector3), AniseError> { + ) -> Result { // Compute the frame translation - let (frame_pos, frame_vel, _) = self.translate_from_to( + let frame_state = self.translate_from_to( from_frame, to_frame, epoch, @@ -238,6 +245,17 @@ impl<'a> AniseContext<'a> { time_unit, )?; - Ok((position + frame_pos, velocity + frame_vel)) + let dist_unit_factor = DistanceUnit::Kilometer.from_meters() * distance_unit.to_meters(); + let time_unit_factor = time_unit.in_seconds(); + + let input_state = CartesianState { + radius_km: position * dist_unit_factor, + velocity_km_s: velocity * dist_unit_factor / time_unit_factor, + acceleration_km_s2: None, + epoch, + frame: from_frame, + }; + + input_state + frame_state } } diff --git a/src/errors.rs b/src/errors.rs index b7588dfb..6603fa19 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -24,8 +24,8 @@ pub enum AniseError { IOError(IOErrorKind), /// Raised if an IO error occurred but its representation is not simple (and therefore not an std::io::ErrorKind). IOUnknownError, - /// Raise if a division by zero was to occur - DivisionByZero, + /// Math error + MathError(MathErrorKind), /// Raised when requesting the value of a parameter but it does not have any representation (typically the coefficients are an empty array) ParameterNotSpecified, /// The byte stream is missing data that is required to parse. @@ -59,9 +59,11 @@ pub enum AniseError { MaxTreeDepth, /// Raised if there is no interpolation data for the requested epoch, i.e. ephemeris/orientation starts after or ends before the requested epoch MissingInterpolationData(Epoch), + /// Raised if a computation is physically wrong + PhysicsError(PhysicsErrorKind), } -#[derive(Clone, PartialEq, Eq, Debug)] +#[derive(Copy, Clone, PartialEq, Eq, Debug)] pub enum InternalErrorKind { /// Appending to the lookup table failed LUTAppendFailure, @@ -72,7 +74,7 @@ pub enum InternalErrorKind { Generic, } -#[derive(Clone, PartialEq, Eq, Debug)] +#[derive(Copy, Clone, PartialEq, Eq, Debug)] pub enum IntegrityErrorKind { /// Data checksum differs from expected checksum ChecksumInvalid { expected: u32, computed: u32 }, @@ -86,6 +88,16 @@ pub enum IntegrityErrorKind { DisjointRoots { from_frame: Frame, to_frame: Frame }, } +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum MathErrorKind { + DivisionByZero, + StateEpochsDiffer, + StateFramesDiffer, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum PhysicsErrorKind {} + impl From for AniseError { fn from(e: IOErrorKind) -> Self { Self::IOError(e) @@ -104,23 +116,28 @@ impl From for InternalErrorKind { } } +impl From for AniseError { + fn from(e: MathErrorKind) -> Self { + Self::MathError(e) + } +} + impl fmt::Display for AniseError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { match self { - Self::IOError(e) => write!(f, "ANISE error: IOError: {:?}", e), + Self::IOError(e) => write!(f, "ANISE error: IOError: {e:?}"), Self::IOUnknownError => write!(f, "ANISE error: IOUnknownError"), - Self::DivisionByZero => write!(f, "ANISE error: DivisionByZero"), + Self::MathError(e) => write!(f, "ANISE error: MathError: {e:?}"), Self::ParameterNotSpecified => write!(f, "ANISE error: ParameterNotSpecified"), Self::MalformedData(byte) => write!(f, "ANISE error: Malformed data: could not read up to byte {byte}."), Self::DAFParserError(reason) => { write!(f, "ANISE error: invalid NAIF DAF file: {}", reason) } Self::InvalidTimeSystem => write!(f, "ANISE error: invalid time system"), - Self::IntegrityError(e) => write!(f, "ANISE error: data integrity error: {:?}", e), + Self::IntegrityError(e) => write!(f, "ANISE error: data integrity error: {e:?}"), Self::DecodingError(err) => write!( f, - "ANISE error: bytes could not be decoded into a valid ANISE file - {}", - err + "ANISE error: bytes could not be decoded into a valid ANISE file - {err}" ), Self::ItemNotFound => write!(f, "ANISE error: requested item not found in context"), Self::IncompatibleVersion { got, exp } => write!( @@ -129,7 +146,7 @@ impl fmt::Display for AniseError { got.major, got.minor, got.patch, exp.major, exp.minor, exp.patch ), Self::InternalError(e) => { - write!(f, "ANISE internal error: {:?} -- please report a bug", e) + write!(f, "ANISE internal error: {e:?} -- please report a bug") } Self::NoInterpolationData => write!( f, @@ -152,6 +169,7 @@ impl fmt::Display for AniseError { f, "ANISE error: No interpolation as epoch {e:e}" ), + Self::PhysicsError(e) => write!(f, "ANISE error: Physics error: {e:?}") } } } diff --git a/src/math/angles.rs b/src/math/angles.rs new file mode 100644 index 00000000..eb7b08cb --- /dev/null +++ b/src/math/angles.rs @@ -0,0 +1,38 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +/// Returns the provided angle bounded between 0.0 and 360.0 +pub fn between_0_360(angle: f64) -> f64 { + let mut bounded = angle; + while bounded > 360.0 { + bounded -= 360.0; + } + while bounded < 0.0 { + bounded += 360.0; + } + bounded +} + +/// Returns the provided angle bounded between -180.0 and +180.0 +pub fn between_pm_180(angle: f64) -> f64 { + between_pm_x(angle, 180.0) +} + +/// Returns the provided angle bounded between -x and +x +pub fn between_pm_x(angle: f64, x: f64) -> f64 { + let mut bounded = angle; + while bounded > x { + bounded -= 2.0 * x; + } + while bounded < -x { + bounded += 2.0 * x; + } + bounded +} diff --git a/src/math/cartesian.rs b/src/math/cartesian.rs new file mode 100644 index 00000000..b64e8319 --- /dev/null +++ b/src/math/cartesian.rs @@ -0,0 +1,209 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use core::ops::Add; + +use super::{perpv, Vector3}; +use crate::{ + astro::{Frame, FrameTrait}, + prelude::AniseError, +}; +use hifitime::Epoch; +use nalgebra::Vector6; + +/// Defines a Cartesian state in a given frame at a given epoch in a given time scale. +/// +/// Unless noted otherwise, algorithms are from GMAT 2016a [StateConversionUtil.cpp](https://github.com/ChristopherRabotin/GMAT/blob/37201a6290e7f7b941bc98ee973a527a5857104b/src/base/util/StateConversionUtil.cpp). +/// Regardless of the constructor used, this struct stores all the state information in Cartesian coordinates +/// as these are always non singular. +/// _Note:_ although not yet supported, this struct may change once True of Date or other nutation frames +/// are added to the toolkit. +#[derive(Copy, Clone, Debug)] +pub struct Cartesian { + /// Position radius in kilometers + pub radius_km: Vector3, + /// Velocity in kilometers per second + pub velocity_km_s: Vector3, + /// Acceleration in kilometers per second squared + pub acceleration_km_s2: Option, + /// Epoch with time scale at which this is valid. + pub epoch: Epoch, + /// Frame in which this Cartesian state lives. + pub frame: F, +} + +pub type CartesianState = Cartesian; + +impl Cartesian { + pub fn zero(frame: F) -> Self { + Self { + radius_km: Vector3::zeros(), + velocity_km_s: Vector3::zeros(), + acceleration_km_s2: None, + epoch: Epoch::from_tdb_seconds(0.0), + frame, + } + } + + pub fn zero_as_epoch(epoch: Epoch, frame: F) -> Self { + Self { + radius_km: Vector3::zeros(), + velocity_km_s: Vector3::zeros(), + acceleration_km_s2: None, + epoch, + frame, + } + } + + /// Creates a new Cartesian state in the provided frame at the provided Epoch, and does not set its acceleration. + /// + /// **Units:** km, km, km, km/s, km/s, km/s + pub fn cartesian( + x_km: f64, + y_km: f64, + z_km: f64, + vx_km_s: f64, + vy_km_s: f64, + vz_km_s: f64, + epoch: Epoch, + frame: F, + ) -> Self { + Self { + radius_km: Vector3::new(x_km, y_km, z_km), + velocity_km_s: Vector3::new(vx_km_s, vy_km_s, vz_km_s), + acceleration_km_s2: None, + epoch, + frame, + } + } + + /// Creates a new Cartesian in the provided frame at the provided Epoch in time with 0.0 velocity. + /// + /// **Units:** km, km, km + pub fn from_position(x_km: f64, y_km: f64, z_km: f64, epoch: Epoch, frame: F) -> Self { + Self::cartesian(x_km, y_km, z_km, 0.0, 0.0, 0.0, epoch, frame) + } + + /// Creates a new Cartesian around in the provided frame from the borrowed state vector + /// + /// The state vector **must** be x, y, z, vx, vy, vz. This function is a shortcut to `cartesian` + /// and as such it has the same unit requirements. + /// + /// **Units:** position data must be in kilometers, velocity data must be in kilometers per second. + pub fn from_cartesian_pos_vel(pos_vel: Vector6, epoch: Epoch, frame: F) -> Self { + Self::cartesian( + pos_vel[0], pos_vel[1], pos_vel[2], pos_vel[3], pos_vel[4], pos_vel[5], epoch, frame, + ) + } + + /// Returns the magnitude of the radius vector in km + pub fn rmag_km(&self) -> f64 { + self.radius_km.norm() + } + + /// Returns the magnitude of the velocity vector in km/s + pub fn vmag_km_s(&self) -> f64 { + self.velocity_km_s.norm() + } + + /// Returns the magnitude of the acceleration vector in km/s^2 + pub fn amag_km_s2(&self) -> Option { + match self.acceleration_km_s2 { + Some(accel) => Some(accel.norm()), + None => None, + } + } + + /// Returns a copy of the state with a new radius + pub fn with_radius_km(self, new_radius_km: Vector3) -> Self { + let mut me = self; + me.radius_km = new_radius_km; + me + } + + /// Returns a copy of the state with a new radius + pub fn with_velocity_km_s(self, new_velocity_km_s: Vector3) -> Self { + let mut me = self; + me.velocity_km_s = new_velocity_km_s; + me + } + + /// Returns this state as a Cartesian Vector6 in [km, km, km, km/s, km/s, km/s] + /// + /// Note that the time is **not** returned in the vector. + pub fn to_cartesian_pos_vel(self) -> Vector6 { + Vector6::from_iterator( + self.radius_km + .iter() + .chain(self.velocity_km_s.iter()) + .cloned(), + ) + } + + /// Returns the distance in kilometers between this state and another state. + /// Will **panic** is the frames are different + pub fn distance_to(&self, other: &Self) -> f64 { + assert_eq!( + self.frame, other.frame, + "cannot compute the distance between two states in different frames" + ); + self.distance_to_point_km(&other.radius_km) + } + + /// Returns the distance in kilometers between this state and a point assumed to be in the same frame. + pub fn distance_to_point_km(&self, other_km: &Vector3) -> f64 { + (self.radius_km - other_km).norm() + } + + /// Returns the unit vector in the direction of the state radius + pub fn r_hat(&self) -> Vector3 { + self.radius_km / self.rmag_km() + } + + /// Returns the unit vector in the direction of the state velocity + pub fn v_hat(&self) -> Vector3 { + perpv(&self.velocity_km_s, &self.r_hat()) / self.rmag_km() + } +} + +impl Add for Cartesian { + type Output = Result, AniseError>; + + /// Adds one state to another. This will return an error if the epochs or frames are different. + fn add(self, other: Cartesian) -> Self::Output { + if self.epoch != other.epoch { + return Err(AniseError::MathError( + crate::errors::MathErrorKind::StateEpochsDiffer, + )); + } else if self.frame != other.frame { + return Err(AniseError::MathError( + crate::errors::MathErrorKind::StateFramesDiffer, + )); + } + + Ok(Cartesian:: { + radius_km: self.radius_km + other.radius_km, + velocity_km_s: self.velocity_km_s + other.velocity_km_s, + acceleration_km_s2: if self.acceleration_km_s2.is_some() + && other.acceleration_km_s2.is_some() + { + Some(self.acceleration_km_s2.unwrap() + other.acceleration_km_s2.unwrap()) + } else if self.acceleration_km_s2.is_some() { + self.acceleration_km_s2 + } else if other.acceleration_km_s2.is_some() { + other.acceleration_km_s2 + } else { + None + }, + epoch: self.epoch, + frame: self.frame, + }) + } +} diff --git a/src/math/mod.rs b/src/math/mod.rs index 7081e10b..625abf6d 100644 --- a/src/math/mod.rs +++ b/src/math/mod.rs @@ -8,9 +8,31 @@ * Documentation: https://nyxspace.com/ */ -extern crate nalgebra; - // Vector3 is nalgebra's Vector3 with a 64-bit floating point representation. pub type Vector3 = nalgebra::Vector3; +pub type Vector6 = nalgebra::Vector6; +pub mod angles; +pub mod cartesian; pub mod interpolation; + +/// Returns the projection of a onto b +pub fn projv(a: &Vector3, b: &Vector3) -> Vector3 { + b * a.dot(b) / b.dot(b) +} + +/// Returns the components of vector a orthogonal to b +pub fn perpv(a: &Vector3, b: &Vector3) -> Vector3 { + let big_a = a[0].abs().max(a[1].abs().max(a[2].abs())); + let big_b = b[0].abs().max(b[1].abs().max(b[2].abs())); + if big_a < f64::EPSILON { + Vector3::zeros() + } else if big_b < f64::EPSILON { + *a + } else { + let a_scl = a / big_a; + let b_scl = b / big_b; + let v = projv(&a_scl, &b_scl); + big_a * (a_scl - v) + } +} diff --git a/tests/ephemerides/paths.rs b/tests/ephemerides/paths.rs index ee7c09d2..fefb626b 100644 --- a/tests/ephemerides/paths.rs +++ b/tests/ephemerides/paths.rs @@ -57,7 +57,7 @@ fn zero_translations() { // Check that in these cases, the translation returns a zero vector in position and in velocity. - let (delta_pos, delta_vel, delta_accel) = ctx + let delta_state = ctx .translate_from_to_km_s( this_frame_j2k, this_frame_j2k, @@ -65,9 +65,9 @@ fn zero_translations() { Aberration::None, ) .unwrap(); - assert!(delta_pos.norm() < EPSILON); - assert!(delta_vel.norm() < EPSILON); - assert!(delta_accel.norm() < EPSILON); + assert!(delta_state.rmag_km() < EPSILON); + assert!(delta_state.vmag_km_s() < EPSILON); + assert!(delta_state.acceleration_km_s2.unwrap().norm() < EPSILON); } } diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index b30bfd59..791a8ea3 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -45,7 +45,7 @@ fn de438s_translation_verif_venus2emb() { .common_ephemeris_path(VENUS_J2000, EARTH_MOON_BARYCENTER_J2000) .unwrap()); - let (pos, vel, _) = ctx + let state = ctx .translate_from_to( VENUS_J2000, EARTH_MOON_BARYCENTER_J2000, @@ -70,33 +70,37 @@ fn de438s_translation_verif_venus2emb() { // We expect exactly the same output as SPICE to machine precision. assert!( - relative_eq!(pos, pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km - pos + relative_eq!(state.radius_km, pos_expct_km, epsilon = EPSILON), + "pos = {}\nexp = {pos_expct_km}\nerr = {:e}", + state.radius_km, + pos_expct_km - state.radius_km ); assert!( - relative_eq!(vel, vel_expct_km_s, epsilon = EPSILON), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s - vel + relative_eq!(state.velocity_km_s, vel_expct_km_s, epsilon = EPSILON), + "vel = {}\nexp = {vel_expct_km_s}\nerr = {:e}", + state.velocity_km_s, + vel_expct_km_s - state.velocity_km_s ); // Test the opposite translation - let (pos, vel, _) = ctx + let state = ctx .translate_from_to_km_s_geometric(EARTH_MOON_BARYCENTER_J2000, VENUS_J2000, epoch) .unwrap(); // We expect exactly the same output as SPICE to machine precision. assert!( - relative_eq!(pos, -pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km + pos + relative_eq!(state.radius_km, -pos_expct_km, epsilon = EPSILON), + "pos = {}\nexp = {pos_expct_km}\nerr = {:e}", + state.radius_km, + pos_expct_km + state.radius_km ); assert!( - relative_eq!(vel, -vel_expct_km_s, epsilon = EPSILON), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s + vel + relative_eq!(state.velocity_km_s, -vel_expct_km_s, epsilon = EPSILON), + "vel = {}\nexp = {vel_expct_km_s}\nerr = {:e}", + state.velocity_km_s, + vel_expct_km_s + state.velocity_km_s ); } @@ -127,7 +131,7 @@ fn de438s_translation_verif_venus2luna() { ['8.1576591043659311e+04', '3.4547568914467981e+05', '1.4439185901453768e+05', '-9.6071184439665624e-01', '2.0358322542331578e-01', '1.8380551745802590e-01'] */ - let (pos, vel, _) = ctx + let state = ctx .translate_from_to( VENUS_J2000, LUNA_J2000, @@ -152,33 +156,45 @@ fn de438s_translation_verif_venus2luna() { // We expect exactly the same output as SPICE to machine precision. assert!( - relative_eq!(pos, pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km - pos + relative_eq!(state.radius_km, pos_expct_km, epsilon = EPSILON), + "pos = {}\nexp = {pos_expct_km}\nerr = {:e}", + state.radius_km, + pos_expct_km - state.radius_km ); assert!( - relative_eq!(vel, vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s - vel + relative_eq!( + state.velocity_km_s, + vel_expct_km_s, + epsilon = VELOCITY_EPSILON_KM_S + ), + "vel = {}\nexp = {vel_expct_km_s}\nerr = {:e}", + state.velocity_km_s, + vel_expct_km_s - state.velocity_km_s ); // Test the opposite translation - let (pos, vel, _) = ctx + let state = ctx .translate_from_to_km_s_geometric(LUNA_J2000, VENUS_J2000, epoch) .unwrap(); // We expect exactly the same output as SPICE to machine precision. assert!( - relative_eq!(pos, -pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km + pos + relative_eq!(state.radius_km, -pos_expct_km, epsilon = EPSILON), + "pos = {}\nexp = {pos_expct_km}\nerr = {:e}", + state.radius_km, + pos_expct_km + state.radius_km ); assert!( - relative_eq!(vel, -vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s + vel + relative_eq!( + state.velocity_km_s, + -vel_expct_km_s, + epsilon = VELOCITY_EPSILON_KM_S + ), + "vel = {}\nexp = {vel_expct_km_s}\nerr = {:e}", + state.velocity_km_s, + vel_expct_km_s + state.velocity_km_s ); } @@ -207,7 +223,7 @@ fn de438s_translation_verif_emb2luna() { ['8.1576591043659311e+04', '3.4547568914467981e+05', '1.4439185901453768e+05', '-9.6071184439665624e-01', '2.0358322542331578e-01', '1.8380551745802590e-01'] */ - let (pos, vel, _) = ctx + let state = ctx .translate_from_to( EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, @@ -232,19 +248,25 @@ fn de438s_translation_verif_emb2luna() { // We expect exactly the same output as SPICE to machine precision. assert!( - relative_eq!(pos, pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km - pos + relative_eq!(state.radius_km, pos_expct_km, epsilon = EPSILON), + "pos = {}\nexp = {pos_expct_km}\nerr = {:e}", + state.radius_km, + pos_expct_km - state.radius_km ); assert!( - relative_eq!(vel, vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s - vel + relative_eq!( + state.velocity_km_s, + vel_expct_km_s, + epsilon = VELOCITY_EPSILON_KM_S + ), + "vel = {}\nexp = {vel_expct_km_s}\nerr = {:e}", + state.velocity_km_s, + vel_expct_km_s - state.velocity_km_s ); // Try the opposite - let (pos, vel, _) = ctx + let state = ctx .translate_from_to( LUNA_J2000, EARTH_MOON_BARYCENTER_J2000, @@ -257,15 +279,21 @@ fn de438s_translation_verif_emb2luna() { // We expect exactly the same output as SPICE to machine precision. assert!( - relative_eq!(pos, -pos_expct_km, epsilon = EPSILON), - "pos = {pos}\nexp = {pos_expct_km}\nerr = {:e}", - pos_expct_km + pos + relative_eq!(state.radius_km, -pos_expct_km, epsilon = EPSILON), + "pos = {}\nexp = {pos_expct_km}\nerr = {:e}", + state.radius_km, + pos_expct_km + state.radius_km ); assert!( - relative_eq!(vel, -vel_expct_km_s, epsilon = VELOCITY_EPSILON_KM_S), - "vel = {vel}\nexp = {vel_expct_km_s}\nerr = {:e}", - vel_expct_km_s + vel + relative_eq!( + state.velocity_km_s, + -vel_expct_km_s, + epsilon = VELOCITY_EPSILON_KM_S + ), + "vel = {}\nexp = {vel_expct_km_s}\nerr = {:e}", + state.velocity_km_s, + vel_expct_km_s + state.velocity_km_s ); } @@ -421,9 +449,9 @@ fn validate_jplde_translation() { for epoch in time_it { match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { - Ok((pos, vel, _)) => { + Ok(state) => { // Perform the same query in SPICE - let (state, _) = spice::spkezr( + let (spice_state, _) = spice::spkezr( match ephem1.name { "Luna" => "Moon", _ => ephem1.name, @@ -440,21 +468,21 @@ fn validate_jplde_translation() { // Check component by component instead of rebuilding a Vector3 from the SPICE data for i in 0..6 { let (anise_value, max_err) = if i < 3 { - (pos[i], FAIL_POS_KM) + (state.radius_km[i], FAIL_POS_KM) } else { - (vel[i - 3], FAIL_VEL_KM_S) + (state.velocity_km_s[i - 3], FAIL_VEL_KM_S) }; // We don't look at the absolute error here, that's for the stats to show any skewness - let err = anise_value - state[i]; + let err = anise_value - spice_state[i]; - if !relative_eq!(anise_value, state[i], epsilon = max_err) { + if !relative_eq!(anise_value, spice_state[i], epsilon = max_err) { // Always save the parquet file writer.close().unwrap(); panic!( "{epoch:E}\t{}got = {:.16}\texp = {:.16}\terr = {:.16}", - component[i], anise_value, state[i], err + component[i], anise_value, spice_state[i], err ); } From 974e304ff56d7c0d4d1c50b1ae5232c8273f29b7 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Thu, 3 Nov 2022 22:08:11 -0600 Subject: [PATCH 05/48] Trying to copy the tests from Nyx but I need to add frame data first :-/ Signed-off-by: Christopher Rabotin --- src/astro/orbit.rs | 4 +- src/lib.rs | 9 +- tests/astro/mod.rs | 1 + tests/astro/orbit.rs | 606 +++++++++++++++++++++++++++++++++++++++++++ tests/lib.rs | 1 + 5 files changed, 617 insertions(+), 4 deletions(-) create mode 100644 tests/astro/mod.rs create mode 100644 tests/astro/orbit.rs diff --git a/src/astro/orbit.rs b/src/astro/orbit.rs index bdb8e1cd..1dd50caa 100644 --- a/src/astro/orbit.rs +++ b/src/astro/orbit.rs @@ -7,7 +7,7 @@ * * Documentation: https://nyxspace.com/ */ -use super::CelestialFrameTrait; +use super::{celestial_frame::CelestialFrame, CelestialFrameTrait}; use crate::{ errors::PhysicsErrorKind, math::{ @@ -24,6 +24,8 @@ use log::{error, info, warn}; /// If an orbit has an eccentricity below the following value, it is considered circular (only affects warning messages) pub const ECC_EPSILON: f64 = 1e-11; +pub type Orbit = Cartesian; + impl Cartesian { /// Creates a new Orbit around the provided Celestial or Geoid frame from the Keplerian orbital elements. /// diff --git a/src/lib.rs b/src/lib.rs index ec5cd0ae..77d2983e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,8 +13,6 @@ extern crate der; extern crate hifitime; extern crate log; -pub use hifitime::Epoch; - pub mod constants; pub mod context; pub mod ephemerides; @@ -22,12 +20,17 @@ pub mod errors; pub mod math; pub mod spline; +/// Re-export of hifitime +pub mod time { + pub use hifitime::*; +} + pub mod prelude { pub use crate::asn1::context::AniseContext; pub use crate::asn1::units::*; pub use crate::astro::Aberration; pub use crate::errors::AniseError; - pub use hifitime::{Epoch, TimeScale, TimeUnits}; + pub use crate::time::*; pub use std::fs::File; } diff --git a/tests/astro/mod.rs b/tests/astro/mod.rs new file mode 100644 index 00000000..2d79e173 --- /dev/null +++ b/tests/astro/mod.rs @@ -0,0 +1 @@ +mod orbit; diff --git a/tests/astro/orbit.rs b/tests/astro/orbit.rs new file mode 100644 index 00000000..9e518906 --- /dev/null +++ b/tests/astro/orbit.rs @@ -0,0 +1,606 @@ +extern crate pretty_env_logger as pel; + +use anise::astro::{orbit::Orbit, Frame}; +use anise::time::{Epoch, Unit}; + +macro_rules! f64_eq { + ($x:expr, $val:expr, $msg:expr) => { + assert!( + ($x - $val).abs() < 1e-10, + "{}: {:.2e}", + $msg, + ($x - $val).abs() + ) + }; +} + +#[test] +fn state_def_circ_inc() { + let cosm = Cosm::de438_gmat(); + let eme2k = cosm.frame("EME2000"); + + let dt = Epoch::from_mjd_tai(21_545.0); + let cart = Orbit::cartesian( + -2436.45, -2436.45, 6891.037, 5.088_611, -5.088_611, 0.0, dt, eme2k, + ); + let cart2 = Orbit::cartesian( + -2436.45, + -2436.45, + 6891.037, + 5.088_611, + -5.088_611, + 0.0, + Epoch::from_jde_tai(dt.as_jde_tai_days()), + eme2k, + ); + assert_eq!( + cart, cart2, + "different representations of the datetime are not considered equal" + ); + f64_eq!(cart.x, -2436.45, "x"); + f64_eq!(cart.y, -2436.45, "y"); + f64_eq!(cart.z, 6891.037, "z"); + f64_eq!(cart.vx, 5.088_611, "vx"); + f64_eq!(cart.vy, -5.088_611, "vy"); + f64_eq!(cart.vz, 0.0, "vz"); + f64_eq!(cart.energy(), -25.842_247_282_849_137, "energy"); + assert_eq!( + cart.period(), + 6_740.269_063_643_045 * Unit::Second, + "period" + ); + f64_eq!(cart.hx(), 35_065.806_679_607_005, "HX"); + f64_eq!(cart.hy(), 35_065.806_679_607_005, "HY"); + f64_eq!(cart.hz(), 24_796.292_541_9, "HZ"); + f64_eq!(cart.sma(), 7_712.186_117_895_043, "sma"); + f64_eq!(cart.ecc(), 0.000_999_582_831_432_052_5, "ecc"); + f64_eq!(cart.inc(), 63.434_003_407_751_14, "inc"); + f64_eq!(cart.raan(), 135.0, "raan"); + f64_eq!(cart.aop(), 90.0, "aop"); + f64_eq!(cart.ta(), 0.0, "ta"); + f64_eq!(cart.tlong(), 225.0, "tlong"); + f64_eq!(cart.ea(), 0.0, "ea"); + f64_eq!(cart.ma(), 0.0, "ma"); + f64_eq!(cart.apoapsis(), 7_719.895_086_731_299, "apo"); + f64_eq!(cart.periapsis(), 7_704.477_149_058_786, "peri"); + f64_eq!( + cart.semi_parameter(), + 7_712.178_412_142_147, + "semi parameter" + ); + + let kep = Orbit::keplerian(8_191.93, 1e-6, 12.85, 306.614, 314.19, 99.887_7, dt, eme2k); + f64_eq!(kep.x, 8_057.976_452_202_976, "x"); + f64_eq!(kep.y, -0.196_740_370_290_888_9, "y"); + f64_eq!(kep.z, 1_475.383_214_274_138, "z"); + f64_eq!(kep.vx, -0.166_470_488_584_076_31, "vx"); + f64_eq!(kep.vy, 6.913_868_638_275_646_5, "vy"); + f64_eq!(kep.vz, 0.910_157_981_443_279_1, "vz"); + f64_eq!(kep.sma(), 8_191.929_999_999_999, "sma"); + f64_eq!(kep.ecc(), 1.000_000_000_388_51e-06, "ecc"); + f64_eq!(kep.inc(), 12.849_999_999_999_987, "inc"); + f64_eq!(kep.raan(), 306.614, "raan"); + f64_eq!(kep.aop(), 314.189_999_994_618_1, "aop"); + f64_eq!(kep.ta(), 99.887_700_005_381_9, "ta"); + f64_eq!(kep.energy(), -24.328_848_116_377_95, "energy"); + assert_eq!(kep.period(), 7_378.877_993_957_958 * Unit::Second, "period"); + f64_eq!(kep.hx(), -10_200.784_799_426_574, "HX"); + f64_eq!(kep.hy(), -7_579.639_346_783_497, "HY"); + f64_eq!(kep.hz(), 55_711.757_929_384_25, "HZ"); + f64_eq!(kep.tlong(), 0.691_700_000_000_082_6, "tlong"); + f64_eq!(kep.ea(), 99.887_643_560_656_85, "ea"); + f64_eq!(kep.ma(), 99.887_587_115_926_96, "ma"); + f64_eq!(kep.apoapsis(), 8_191.938_191_930_002, "apo"); + f64_eq!(kep.periapsis(), 8_191.921_808_069_997, "peri"); + f64_eq!( + kep.semi_parameter(), + 8_191.929_999_991_808, + "semi parameter" + ); + + let kep = Orbit::keplerian(8_191.93, 0.2, 12.85, 306.614, 314.19, -99.887_7, dt, eme2k); + f64_eq!(kep.ta(), 260.1123, "ta"); + + // Test that DCMs are valid + let dcm = kep.dcm_from_traj_frame(Frame::VNC).unwrap(); + assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + + let dcm = kep.dcm_from_traj_frame(Frame::RCN).unwrap(); + assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + + let dcm = kep.dcm_from_traj_frame(Frame::RIC).unwrap(); + assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); +} + +#[test] +fn state_def_elliptical() { + let cosm = Cosm::de438_gmat(); + let eme2k = cosm.frame("EME2000"); + + let dt = Epoch::from_mjd_tai(21_545.0); + let cart = Orbit::cartesian( + 5_946.673_548_288_958, + 1_656.154_606_023_661, + 2_259.012_129_598_249, + -3.098_683_050_943_824, + 4.579_534_132_135_011, + 6.246_541_551_539_432, + dt, + eme2k, + ); + f64_eq!(cart.energy(), -25.842_247_282_849_144, "energy"); + assert_eq!( + cart.period(), + 6_740.269_063_643_042_5 * Unit::Second, + "period" + ); + f64_eq!(cart.hx(), 0.015_409_898_034_704_383, "HX"); + f64_eq!(cart.hy(), -44_146.106_010_690_01, "HY"); + f64_eq!(cart.hz(), 32_364.892_694_481_765, "HZ"); + f64_eq!(cart.sma(), 7_712.186_117_895_041, "sma"); + f64_eq!(cart.ecc(), 0.158_999_999_999_999_95, "ecc"); + f64_eq!(cart.inc(), 53.753_69, "inc"); + f64_eq!(cart.raan(), 1.998_632_864_211_17e-05, "raan"); + f64_eq!(cart.aop(), 359.787_880_000_004, "aop"); + f64_eq!(cart.ta(), 25.434_003_407_751_188, "ta"); + f64_eq!(cart.tlong(), 25.221_903_394_083_824, "tlong"); + f64_eq!(cart.ea(), 21.763_052_882_584_79, "ea"); + f64_eq!(cart.ma(), 18.385_336_330_516_39, "ma"); + f64_eq!(cart.apoapsis(), 8_938.423_710_640_353, "apo"); + f64_eq!(cart.periapsis(), 6_485.948_525_149_73, "peri"); + f64_eq!( + cart.semi_parameter(), + 7_517.214_340_648_537, + "semi parameter" + ); + + let kep = Orbit::keplerian( + 8_191.93, 0.024_5, 12.85, 306.614, 314.19, 99.887_7, dt, eme2k, + ); + f64_eq!(kep.x, 8_087.161_618_048_522_5, "x"); + f64_eq!(kep.y, -0.197_452_943_772_520_73, "y"); + f64_eq!(kep.z, 1_480.726_901_246_883, "z"); + f64_eq!(kep.vx, -0.000_168_592_186_843_952_16, "vx"); + f64_eq!(kep.vy, 6.886_845_792_370_852, "vy"); + f64_eq!(kep.vz, 0.936_931_260_302_891_8, "vz"); + f64_eq!(kep.sma(), 8_191.930_000_000_003, "sma"); + f64_eq!(kep.ecc(), 0.024_500_000_000_000_348, "ecc"); + f64_eq!(kep.inc(), 12.850_000_000_000_016, "inc"); + f64_eq!(kep.raan(), 306.614, "raan"); + f64_eq!(kep.aop(), 314.190_000_000_000_4, "aop"); + f64_eq!(kep.ta(), 99.887_699_999_999_58, "ta"); + f64_eq!(kep.energy(), -24.328_848_116_377_94, "energy"); + assert_eq!(kep.period(), 7_378.877_993_957_964 * Unit::Second, "period"); + f64_eq!(kep.hx(), -10_197.722_829_337_885, "HX"); + f64_eq!(kep.hy(), -7_577.364_166_057_776, "HY"); + f64_eq!(kep.hz(), 55_695.034_928_191_49, "HZ"); + f64_eq!(kep.tlong(), 0.691_699_999_999_855_2, "tlong"); + f64_eq!(kep.ea(), 98.501_748_370_880_22, "ea"); + f64_eq!(kep.ma(), 97.113_427_049_323_43, "ma"); + f64_eq!(kep.apoapsis(), 8_392.632_285_000_007, "apo"); + f64_eq!(kep.periapsis(), 7_991.227_715_000_001, "peri"); + f64_eq!( + kep.semi_parameter(), + 8_187.012_794_017_503, + "semi parameter" + ); + + // Test that DCMs are valid + let dcm = kep.dcm_from_traj_frame(Frame::VNC).unwrap(); + assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + + let dcm = kep.dcm_from_traj_frame(Frame::RCN).unwrap(); + assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + + let dcm = kep.dcm_from_traj_frame(Frame::RIC).unwrap(); + assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); +} + +#[test] +fn state_def_circ_eq() { + let cosm = Cosm::de438_gmat(); + let eme2k = cosm.frame("EME2000"); + + let dt = Epoch::from_mjd_tai(21_545.0); + let cart = Orbit::cartesian( + -38_892.724_449_149_02, + 16_830.384_772_891_86, + 0.722_659_929_135_562_2, + -1.218_008_333_846_6, + -2.814_651_172_605_98, + 1.140_294_223_185_661e-5, + dt, + eme2k, + ); + f64_eq!(cart.energy(), -4.702_902_670_552_006, "energy"); + assert_eq!(cart.period(), 86_820.776_152_986_1 * Unit::Second, "period"); + f64_eq!(cart.hx(), 2.225_951_522_241_969_5, "HX"); + f64_eq!(cart.hy(), -0.436_714_326_090_944_6, "HY"); + f64_eq!(cart.hz(), 129_969.001_391_865_75, "HZ"); + f64_eq!(cart.sma(), 42_378.129_999_999_98, "sma"); + f64_eq!(cart.ecc(), 9.999_999_809_555_511e-9, "ecc"); + f64_eq!(cart.inc(), 0.001_000_000_401_564_538_6, "inc"); + f64_eq!(cart.raan(), 78.9, "raan"); + f64_eq!(cart.aop(), 65.399_999_847_186_78, "aop"); + f64_eq!(cart.ta(), 12.300_000_152_813_197, "ta"); + f64_eq!(cart.tlong(), 156.599_999_999_999_97, "tlong"); + f64_eq!(cart.ea(), 12.300_000_030_755_777, "ea"); + f64_eq!(cart.ma(), 12.299_999_908_698_359, "ma"); + f64_eq!(cart.apoapsis(), 42_378.130_423_781_27, "apo"); + f64_eq!(cart.periapsis(), 42_378.129_576_218_69, "peri"); + f64_eq!( + cart.semi_parameter(), + 42_378.129_999_999_976, + "semi parameter" + ); + + let kep = Orbit::keplerian(18191.098, 1e-6, 1e-6, 306.543, 314.32, 98.765, dt, eme2k); + f64_eq!(kep.x, 18_190.717_357_886_37, "x"); + f64_eq!(kep.y, -118.107_162_539_218_69, "y"); + f64_eq!(kep.z, 0.000_253_845_647_633_053_35, "z"); + f64_eq!(kep.vx, 0.030_396_440_130_264_88, "vx"); + f64_eq!(kep.vy, 4.680_909_107_924_576, "vy"); + f64_eq!(kep.vz, 4.907_089_816_726_583e-8, "vz"); + f64_eq!(kep.sma(), 18_191.098_000_000_013, "sma"); + f64_eq!(kep.ecc(), 9.999_999_997_416_087e-7, "ecc"); + f64_eq!(kep.inc(), 1.207_418_269_725_733_3e-6, "inc"); + f64_eq!(kep.raan(), 306.543, "raan"); + f64_eq!(kep.aop(), 314.320_000_025_403_66, "aop"); + f64_eq!(kep.ta(), 98.764_999_974_596_28, "ta"); + f64_eq!(kep.energy(), -10.955_920_349_063_035, "energy"); + assert_eq!( + kep.period(), + 24_417.396_242_570_256 * Unit::Second, + "period" + ); + f64_eq!(kep.hx(), -0.001_194_024_028_558_358_7, "HX"); + f64_eq!(kep.hy(), -0.000_884_918_835_027_750_6, "HY"); + f64_eq!(kep.hz(), 85_152.684_597_507_06, "HZ"); + f64_eq!(kep.tlong(), 359.627_999_999_999_93, "tlong"); + f64_eq!(kep.ea(), 98.764_943_347_932_57, "ea"); + f64_eq!(kep.ma(), 98.764_886_721_264_56, "ma"); + f64_eq!(kep.apoapsis(), 18_191.116_191_098_008, "apo"); + f64_eq!(kep.periapsis(), 18_191.079_808_902_017, "peri"); + f64_eq!( + kep.semi_parameter(), + 18_191.097_999_981_823, + "semi parameter" + ); + + // Test that DCMs are valid + let dcm = kep.dcm_from_traj_frame(Frame::VNC).unwrap(); + assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + + let dcm = kep.dcm_from_traj_frame(Frame::RCN).unwrap(); + assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + + let dcm = kep.dcm_from_traj_frame(Frame::RIC).unwrap(); + assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); +} + +#[test] +fn state_def_equatorial() { + let cosm = Cosm::de438_gmat(); + let eme2k = cosm.frame("EME2000"); + + let dt = Epoch::from_mjd_tai(21_545.0); + let cart = Orbit::cartesian( + -7273.338970882, + 253.990592670, + 0.022164861, + -0.258285289, + -7.396322922, + -0.000645451, + dt, + eme2k, + ); + + f64_eq!(cart.sma(), 7278.136188379306, "sma"); + f64_eq!(cart.ecc(), 4.99846643158263e-05, "ecc"); + f64_eq!(cart.inc(), 0.005000000478594339, "inc"); + f64_eq!(cart.raan(), 360.0, "raan"); + f64_eq!(cart.aop(), 177.9999736473912, "aop"); + f64_eq!(cart.ta(), 2.650826247094554e-05, "ta"); +} + +#[test] +fn state_def_reciprocity() { + let cosm = Cosm::de438_gmat(); + let eme2k = cosm.frame("EME2000"); + + let dt = Epoch::from_mjd_tai(21_545.0); + + assert_eq!( + Orbit::cartesian( + -38_892.724_449_149_02, + 16_830.384_772_891_86, + 0.722_659_929_135_562_2, + -1.218_008_333_846_6, + -2.814_651_172_605_98, + 1.140_294_223_185_661e-5, + dt, + eme2k + ), + Orbit::keplerian( + 42_378.129_999_999_98, + 9.999_999_809_555_511e-9, + 0.001_000_000_401_564_538_6, + 78.9, + 65.399_999_847_186_78, + 12.300_000_152_813_197, + dt, + eme2k + ), + "circ_eq" + ); + + assert_eq!( + Orbit::cartesian( + 5_946.673_548_288_958, + 1_656.154_606_023_661, + 2_259.012_129_598_249, + -3.098_683_050_943_824, + 4.579_534_132_135_011, + 6.246_541_551_539_432, + dt, + eme2k + ), + Orbit::keplerian( + 7_712.186_117_895_041, + 0.158_999_999_999_999_95, + 53.75369, + 1.998_632_864_211_17e-5, + 359.787_880_000_004, + 25.434_003_407_751_188, + dt, + eme2k + ), + "elliptical" + ); + + assert_eq!( + Orbit::cartesian(-2436.45, -2436.45, 6891.037, 5.088_611, -5.088_611, 0.0, dt, eme2k), + Orbit::keplerian( + 7_712.186_117_895_043, + 0.000_999_582_831_432_052_5, + 63.434_003_407_751_14, + 135.0, + 90.0, + 0.0, + dt, + eme2k + ), + "circ_inc" + ); +} + +#[test] +fn geodetic_vallado() { + let cosm = Cosm::de438_gmat(); + let eme2k = cosm.frame("EME2000"); + + dbg!(eme2k.semi_major_radius()); + let dt = Epoch::from_mjd_tai(51_545.0); + // Test case from Vallado, 4th Ed., page 173, Example 3-3 + let ri = 6524.834; + let ri_val = 6_524.833_999_999_999; + let rj = 6862.875; + let rj_val = 6_862.874_999_999_999; + let rk = 6448.296; + let lat = 34.352_495_139_917_26; // Valldo: 34.352496 + let long = 46.446_416_856_789_96; // Vallado 46.4464 + let height = 5_085.219_430_345_17; // Valldo: 5085.22 + let r = Orbit::from_position(ri, rj, rk, dt, eme2k); + f64_eq!(r.geodetic_latitude(), lat, "latitude (φ)"); + f64_eq!(r.geodetic_longitude(), long, "longitude (λ)"); + f64_eq!(r.geodetic_height(), height, "height"); + let r = Orbit::from_geodesic(lat, long, height, dt, eme2k); + f64_eq!(r.x, ri_val, "r_i"); + f64_eq!(r.y, rj_val, "r_j"); + f64_eq!(r.z, rk, "r_k"); + + // Test case from Vallado, 4th Ed., page 173, Example 3-4 + let lat = -7.906_635_7; + let lat_val = -7.906_635_699_999_994_5; + let long = 345.5975; + let height = 56.0e-3; + let height_val = 0.056_000_000_000_494_765; + let ri = 6_119.399_587_411_616; + let rj = -1_571.479_380_333_195; + let rk = -871.561_161_926_003_9; + let r = Orbit::from_geodesic(lat, long, height, dt, eme2k); + f64_eq!(r.x, ri, "r_i"); + f64_eq!(r.y, rj, "r_j"); + f64_eq!(r.z, rk, "r_k"); + let r = Orbit::from_position(ri, rj, rk, dt, eme2k); + f64_eq!(r.geodetic_latitude(), lat_val, "latitude (φ)"); + f64_eq!(r.geodetic_longitude(), long, "longitude (λ)"); + f64_eq!(r.geodetic_height(), height_val, "height"); +} + +#[test] +fn with_init() { + use nyx::utils::{between_0_360, between_pm_180}; + let cosm = Cosm::de438_gmat(); + let eme2k = cosm.frame("EME2000"); + let dt = Epoch::from_gregorian_tai_at_midnight(2021, 3, 4); + let kep = Orbit::keplerian( + 8_191.93, 0.024_5, 12.85, 306.614, 314.19, 99.887_7, dt, eme2k, + ); + for sma_incr in 100..1000 { + let new_sma = kep.sma() + f64::from(sma_incr); + f64_eq!(kep.with_sma(new_sma).sma(), new_sma, "wrong sma"); + } + for ecc_incr in 0..100 { + let new_ecc = kep.ecc() + f64::from(ecc_incr) / 100.0; + let new_state = kep.with_ecc(new_ecc); + f64_eq!( + new_state.ecc(), + new_ecc, + format!("wrong ecc: got {}\twanted {}", new_state.inc(), new_ecc) + ); + } + for angle_incr in 0..360 { + let new_aop = between_0_360(kep.aop() + f64::from(angle_incr)); + let new_state = kep.add_aop(f64::from(angle_incr)); + f64_eq!( + new_state.aop(), + new_aop, + format!("wrong aop: got {}\twanted {}", new_state.aop(), new_aop) + ); + } + for angle_incr in 0..360 { + let new_raan = between_0_360(kep.raan() + f64::from(angle_incr)); + let new_state = kep.add_raan(f64::from(angle_incr)); + f64_eq!( + new_state.raan(), + new_raan, + format!("wrong raan: got {}\twanted {}", new_state.raan(), new_raan) + ); + } + for angle_incr in 0..360 { + let new_ta = between_0_360(kep.ta() + f64::from(angle_incr)); + let new_state = kep.with_ta(new_ta); + f64_eq!( + new_state.ta(), + new_ta, + format!("wrong ta: got {}\twanted {}", new_state.aop(), new_ta) + ); + } + for angle_incr in 0..360 { + // NOTE: Inclination is bounded between 0 and 180, hence the slightly different logic here. + let new_inc = between_pm_180(kep.inc() + f64::from(angle_incr)).abs(); + let new_state = kep.add_inc(f64::from(angle_incr)); + f64_eq!( + new_state.inc(), + new_inc, + format!("wrong inc: got {}\twanted {}", new_state.inc(), new_inc) + ); + } + for apsis_delta in 100..1000 { + let new_ra = kep.apoapsis() + f64::from(apsis_delta); + let new_rp = kep.periapsis() - f64::from(apsis_delta); + let new_orbit = kep.with_apoapsis_periapsis(new_ra, new_rp); + f64_eq!(new_orbit.apoapsis(), new_ra, "wrong ra"); + f64_eq!(new_orbit.periapsis(), new_rp, "wrong rp"); + } +} + +#[test] +fn orbit_dual_test() { + use nyx::cosmic::OrbitDual; + use nyx::md::StateParameter; + let cosm = Cosm::de438_gmat(); + let eme2k = cosm.frame("EME2000"); + + let dt = Epoch::from_mjd_tai(21_545.0); + let cart = Orbit::cartesian( + -2436.45, -2436.45, 6891.037, 5.088_611, -5.088_611, 1.0, dt, eme2k, + ); + + println!("{:x}", cart); + + let cart_dual = OrbitDual::from(cart); + println!("{}", eme2k.gm()); + println!("|v| = {}", cart_dual.vmag()); + println!("|v|^2 = {}", cart_dual.vmag().dual * cart_dual.vmag().dual); + println!("x = {}", cart_dual.x); + println!("y = {}", cart_dual.y); + println!("z = {}", cart_dual.z); + println!("\\xi = {}\n\n", cart_dual.energy()); + + // Now print the table + let params = vec![ + StateParameter::AoL, + StateParameter::AoP, + StateParameter::Apoapsis, + StateParameter::C3, + StateParameter::Declination, + StateParameter::EccentricAnomaly, + StateParameter::Eccentricity, + StateParameter::Energy, + StateParameter::FlightPathAngle, + StateParameter::GeodeticHeight, + StateParameter::GeodeticLatitude, + StateParameter::GeodeticLongitude, + StateParameter::Hmag, + StateParameter::HX, + StateParameter::HY, + StateParameter::HZ, + StateParameter::Inclination, + StateParameter::MeanAnomaly, + StateParameter::Periapsis, + StateParameter::RightAscension, + StateParameter::RAAN, + StateParameter::Rmag, + StateParameter::SemiParameter, + StateParameter::SMA, + StateParameter::TrueLongitude, + StateParameter::Vmag, + StateParameter::X, + StateParameter::Y, + StateParameter::Z, + StateParameter::VX, + StateParameter::VY, + StateParameter::VZ, + ]; + for param in ¶ms { + let dual = cart_dual.partial_for(param).unwrap(); + println!( + "{:?} & {} & {} & {} & {} & {} & {} \\\\", + param, + if dual.wtr_x().abs() > 1e-2 { + "large" + } else if dual.wtr_x().abs() > 0.0 { + "small" + } else { + "none" + }, + if dual.wtr_y().abs() > 1e-2 { + "large" + } else if dual.wtr_y().abs() > 0.0 { + "small" + } else { + "none" + }, + if dual.wtr_z().abs() > 1e-2 { + "large" + } else if dual.wtr_z().abs() > 0.0 { + "small" + } else { + "none" + }, + if dual.wtr_vx().abs() > 1e-2 { + "large" + } else if dual.wtr_vx().abs() > 0.0 { + "small" + } else { + "none" + }, + if dual.wtr_vy().abs() > 1e-2 { + "large" + } else if dual.wtr_vy().abs() > 0.0 { + "small" + } else { + "none" + }, + if dual.wtr_vz().abs() > 1e-2 { + "large" + } else if dual.wtr_vz().abs() > 0.0 { + "small" + } else { + "none" + }, + // dual, + ); + } +} diff --git a/tests/lib.rs b/tests/lib.rs index bd7d8295..1fcc867c 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -10,5 +10,6 @@ #[macro_use] extern crate approx; +mod astro; mod ephemerides; mod frames; From 5f2c2f012e6510a6fd6971fec1c63dde4ea6e8d3 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 4 Nov 2022 17:02:15 -0600 Subject: [PATCH 06/48] Rename asn1 module Signed-off-by: Christopher Rabotin --- src/astro/geodetic_frame.rs | 7 + src/astro/orbit.rs | 96 +++- src/astro/orbit_geodetic.rs | 67 ++- src/cli/inspect.rs | 2 +- src/context/append.rs | 2 +- src/context/integrity.rs | 2 +- src/context/load.rs | 48 +- src/context/merge.rs | 2 +- src/context/rename.rs | 2 +- src/context/save.rs | 2 +- src/ephemerides/mod.rs | 2 +- src/ephemerides/paths.rs | 2 +- src/ephemerides/translate_to_parent.rs | 8 +- src/ephemerides/translations.rs | 4 +- src/errors.rs | 15 +- src/lib.rs | 6 +- src/math/cartesian.rs | 21 + src/math/interpolation/chebyshev.rs | 2 +- src/naif/spk/datatype.rs | 2 +- src/naif/spk/mod.rs | 12 +- src/{asn1 => repr}/common.rs | 0 src/{asn1 => repr}/context.rs | 9 +- src/{asn1 => repr}/ephemeris.rs | 3 +- src/{asn1 => repr}/lookuptable.rs | 0 src/{asn1 => repr}/metadata.rs | 0 src/{asn1 => repr}/mod.rs | 1 + src/repr/planetary_constants.rs | 73 +++ src/{asn1 => repr}/semver.rs | 0 src/repr/spacecraft_constants.rs | 73 +++ src/{asn1 => repr}/spline/covkind.rs | 0 src/{asn1 => repr}/spline/evenness.rs | 0 src/{asn1 => repr}/spline/field.rs | 0 src/{asn1 => repr}/spline/meta.rs | 0 src/{asn1 => repr}/spline/mod.rs | 0 src/{asn1 => repr}/spline/splines.rs | 0 src/{asn1 => repr}/spline/statekind.rs | 0 src/{asn1 => repr}/splinecoeffs.rs | 0 src/{asn1 => repr}/units.rs | 0 src/spline.rs | 2 +- tests/astro/orbit.rs | 506 +++++++----------- tests/ephemerides/parent_translation_verif.rs | 2 +- tests/ephemerides/paths.rs | 4 +- tests/ephemerides/translation.rs | 6 +- tests/naif.rs | 4 +- 44 files changed, 589 insertions(+), 398 deletions(-) rename src/{asn1 => repr}/common.rs (100%) rename src/{asn1 => repr}/context.rs (85%) rename src/{asn1 => repr}/ephemeris.rs (97%) rename src/{asn1 => repr}/lookuptable.rs (100%) rename src/{asn1 => repr}/metadata.rs (100%) rename src/{asn1 => repr}/mod.rs (97%) create mode 100644 src/repr/planetary_constants.rs rename src/{asn1 => repr}/semver.rs (100%) create mode 100644 src/repr/spacecraft_constants.rs rename src/{asn1 => repr}/spline/covkind.rs (100%) rename src/{asn1 => repr}/spline/evenness.rs (100%) rename src/{asn1 => repr}/spline/field.rs (100%) rename src/{asn1 => repr}/spline/meta.rs (100%) rename src/{asn1 => repr}/spline/mod.rs (100%) rename src/{asn1 => repr}/spline/splines.rs (100%) rename src/{asn1 => repr}/spline/statekind.rs (100%) rename src/{asn1 => repr}/splinecoeffs.rs (100%) rename src/{asn1 => repr}/units.rs (100%) diff --git a/src/astro/geodetic_frame.rs b/src/astro/geodetic_frame.rs index 1c4773a7..ba716ede 100644 --- a/src/astro/geodetic_frame.rs +++ b/src/astro/geodetic_frame.rs @@ -23,6 +23,8 @@ pub trait GeodeticFrameTrait: CelestialFrameTrait { fn flattening(&self) -> f64; /// Returns true if this is a body fixed frame fn is_body_fixed(&self) -> bool; + /// Returns the average angular velocity of this frame + fn angular_velocity_deg(&self) -> f64; } /// A GeodeticFrame is a Celestial Frame whose equatorial and semi major radii are defined. @@ -33,6 +35,7 @@ pub struct GeodeticFrame { pub semi_major_radius_km: f64, pub flattening: f64, pub is_body_fixed: bool, + pub angular_velocity_deg: f64, } impl FrameTrait for GeodeticFrame { @@ -67,6 +70,10 @@ impl GeodeticFrameTrait for GeodeticFrame { fn is_body_fixed(&self) -> bool { self.is_body_fixed } + + fn angular_velocity_deg(&self) -> f64 { + self.angular_velocity_deg + } } impl Display for GeodeticFrame { diff --git a/src/astro/orbit.rs b/src/astro/orbit.rs index 1dd50caa..9f6292a3 100644 --- a/src/astro/orbit.rs +++ b/src/astro/orbit.rs @@ -27,15 +27,15 @@ pub const ECC_EPSILON: f64 = 1e-11; pub type Orbit = Cartesian; impl Cartesian { - /// Creates a new Orbit around the provided Celestial or Geoid frame from the Keplerian orbital elements. + /// Attempts to create a new Orbit around the provided Celestial or Geoid frame from the Keplerian orbital elements. /// /// **Units:** km, none, degrees, degrees, degrees, degrees /// - /// WARNING: This function will panic if the singularities in the conversion are expected. + /// WARNING: This function will return an error if the singularities in the conversion are encountered. /// NOTE: The state is defined in Cartesian coordinates as they are non-singular. This causes rounding /// errors when creating a state from its Keplerian orbital elements (cf. the state tests). /// One should expect these errors to be on the order of 1e-12. - pub fn keplerian( + pub fn try_keplerian( sma: f64, ecc: f64, inc: f64, @@ -71,20 +71,23 @@ impl Cartesian { // GMAT errors below one meter. Let's warn for below that, but not panic, might be useful for landing scenarios? warn!("radius of periapsis is less than one meter"); } - if (1.0 - ecc).abs() < EPSILON { - panic!("parabolic orbits have ill-defined Keplerian orbital elements"); + if (1.0 - ecc).abs() < ECC_EPSILON { + error!("parabolic orbits have ill-defined Keplerian orbital elements"); + return Err(PhysicsErrorKind::ParabolicOrbit); } if ecc > 1.0 { let ta = between_0_360(ta); if ta > (PI - (1.0 / ecc).acos()).to_degrees() { - panic!( + error!( "true anomaly value ({}) physically impossible for a hyperbolic orbit", ta ); + return Err(PhysicsErrorKind::InvalidHyperbolicTrueAnomaly(ta)); } } if (1.0 + ecc * ta.to_radians().cos()).is_infinite() { - panic!("radius of orbit is infinite"); + error!("radius of orbit is infinite"); + return Err(PhysicsErrorKind::InfiniteValue); } // Done with all the warnings and errors supported by GMAT // The conversion algorithm itself comes from GMAT's StateConversionUtil::ComputeKeplToCart @@ -97,8 +100,8 @@ impl Cartesian { let p = sma * (1.0 - ecc.powi(2)); if p.abs() < EPSILON { - // TODO: Switch this to an error - panic!("Semilatus rectum ~= 0.0: parabolic orbit"); + error!("Semilatus rectum ~= 0.0: parabolic orbit"); + return Err(PhysicsErrorKind::ParabolicOrbit); } // NOTE: At this point GMAT computes 1+ecc**2 and checks whether it's very small. @@ -131,8 +134,8 @@ impl Cartesian { }) } - /// Creates a new Orbit from the provided radii of apoapsis and periapsis, in kilometers - pub fn keplerian_apsis_radii( + /// Attempts to create a new Orbit from the provided radii of apoapsis and periapsis, in kilometers + pub fn try_keplerian_apsis_radii( r_a: f64, r_p: f64, inc: f64, @@ -144,23 +147,66 @@ impl Cartesian { ) -> Result { let sma = (r_a + r_p) / 2.0; let ecc = r_a / sma - 1.0; - Self::keplerian(sma, ecc, inc, raan, aop, ta, dt, frame) + Self::try_keplerian(sma, ecc, inc, raan, aop, ta, dt, frame) } - /// Creates a new Orbit around the provided frame from the borrowed state vector + /// Attempts to create a new Orbit around the provided frame from the borrowed state vector /// /// The state vector **must** be sma, ecc, inc, raan, aop, ta. This function is a shortcut to `cartesian` /// and as such it has the same unit requirements. - pub fn keplerian_vec( + pub fn try_keplerian_vec( state: &Vector6, epoch: Epoch, frame: F, ) -> Result { - Self::keplerian( + Self::try_keplerian( state[0], state[1], state[2], state[3], state[4], state[5], epoch, frame, ) } + /// Creates (without error checking) a new Orbit around the provided Celestial or Geoid frame from the Keplerian orbital elements. + /// + /// **Units:** km, none, degrees, degrees, degrees, degrees + /// + /// WARNING: This function will panic if the singularities in the conversion are expected. + /// NOTE: The state is defined in Cartesian coordinates as they are non-singular. This causes rounding + /// errors when creating a state from its Keplerian orbital elements (cf. the state tests). + /// One should expect these errors to be on the order of 1e-12. + pub fn keplerian( + sma: f64, + ecc: f64, + inc: f64, + raan: f64, + aop: f64, + ta: f64, + epoch: Epoch, + frame: F, + ) -> Self { + Self::try_keplerian(sma, ecc, inc, raan, aop, ta, epoch, frame).unwrap() + } + + /// Creates a new Orbit from the provided radii of apoapsis and periapsis, in kilometers + pub fn keplerian_apsis_radii( + r_a: f64, + r_p: f64, + inc: f64, + raan: f64, + aop: f64, + ta: f64, + dt: Epoch, + frame: F, + ) -> Self { + Self::try_keplerian_apsis_radii(r_a, r_p, inc, raan, aop, ta, dt, frame).unwrap() + } + + /// Creates a new Orbit around the provided frame from the borrowed state vector + /// + /// The state vector **must** be sma, ecc, inc, raan, aop, ta. This function is a shortcut to `cartesian` + /// and as such it has the same unit requirements. + pub fn keplerian_vec(state: &Vector6, epoch: Epoch, frame: F) -> Self { + Self::try_keplerian_vec(state, epoch, frame).unwrap() + } + /// Returns this state as a Keplerian Vector6 in [km, none, degrees, degrees, degrees, degrees] /// /// Note that the time is **not** returned in the vector. @@ -201,13 +247,13 @@ impl Cartesian { } /// Returns the specific mechanical energy in km^2/s^2 - pub fn energy(&self) -> f64 { + pub fn energy_km2_s2(&self) -> f64 { self.vmag_km_s().powi(2) / 2.0 - self.frame.mu_km3_s2() / self.rmag_km() } /// Returns the semi-major axis in km pub fn sma_km(&self) -> f64 { - -self.frame.mu_km3_s2() / (2.0 * self.energy()) + -self.frame.mu_km3_s2() / (2.0 * self.energy_km2_s2()) } /// Mutates this orbit to change the SMA @@ -223,7 +269,7 @@ impl Cartesian { self.frame, ); - *self = me.unwrap(); + *self = me; } /// Returns a copy of the state with a new SMA @@ -274,7 +320,7 @@ impl Cartesian { self.frame, ); - *self = me.unwrap(); + *self = me; } /// Returns a copy of the state with a new ECC @@ -309,7 +355,7 @@ impl Cartesian { self.frame, ); - *self = me.unwrap(); + *self = me; } /// Returns a copy of the state with a new INC @@ -357,7 +403,7 @@ impl Cartesian { self.frame, ); - *self = me.unwrap(); + *self = me; } /// Returns a copy of the state with a new AOP @@ -405,7 +451,7 @@ impl Cartesian { self.frame, ); - *self = me.unwrap(); + *self = me; } /// Returns a copy of the state with a new RAAN @@ -466,7 +512,7 @@ impl Cartesian { self.frame, ); - *self = me.unwrap(); + *self = me; } /// Returns a copy of the state with a new TA @@ -489,7 +535,7 @@ impl Cartesian { new_ra_km: f64, new_rp_km: f64, ) -> Result { - Self::keplerian_apsis_radii( + Self::try_keplerian_apsis_radii( new_ra_km, new_rp_km, self.inc_deg(), @@ -507,7 +553,7 @@ impl Cartesian { delta_ra_km: f64, delta_rp_km: f64, ) -> Result { - Self::keplerian_apsis_radii( + Self::try_keplerian_apsis_radii( self.apoapsis_km() + delta_ra_km, self.periapsis_km() + delta_rp_km, self.inc_deg(), diff --git a/src/astro/orbit_geodetic.rs b/src/astro/orbit_geodetic.rs index 3416bc4e..2212ae3c 100644 --- a/src/astro/orbit_geodetic.rs +++ b/src/astro/orbit_geodetic.rs @@ -8,20 +8,23 @@ * Documentation: https://nyxspace.com/ */ -use super::GeodeticFrameTrait; +use super::{GeodeticFrame, GeodeticFrameTrait}; use crate::{ errors::PhysicsErrorKind, math::{ angles::{between_0_360, between_pm_180}, cartesian::Cartesian, + Vector3, }, }; use hifitime::Epoch; use log::{error, warn}; +pub type GeodeticOrbit = Cartesian; + impl Cartesian { /// Creates a new Orbit from the provided semi-major axis altitude in kilometers - pub fn keplerian_altitude( + pub fn try_keplerian_altitude( sma_altitude: f64, ecc: f64, inc: f64, @@ -31,7 +34,7 @@ impl Cartesian { dt: Epoch, frame: F, ) -> Result { - Self::keplerian( + Self::try_keplerian( sma_altitude + frame.equatorial_radius_km(), ecc, inc, @@ -44,7 +47,7 @@ impl Cartesian { } /// Creates a new Orbit from the provided altitudes of apoapsis and periapsis, in kilometers - pub fn keplerian_apsis_altitude( + pub fn try_keplerian_apsis_altitude( a_a: f64, a_p: f64, inc: f64, @@ -54,7 +57,7 @@ impl Cartesian { dt: Epoch, frame: F, ) -> Result { - Self::keplerian_apsis_radii( + Self::try_keplerian_apsis_radii( a_a + frame.equatorial_radius_km(), a_p + frame.equatorial_radius_km(), inc, @@ -66,6 +69,60 @@ impl Cartesian { ) } + /// Creates a new Orbit from the geodetic latitude (φ), longitude (λ) and height with respect to the ellipsoid of the frame. + /// + /// **Units:** degrees, degrees, km + /// NOTE: This computation differs from the spherical coordinates because we consider the flattening of body. + /// Reference: G. Xu and Y. Xu, "GPS", DOI 10.1007/978-3-662-50367-6_2, 2016 + /// **WARNING:** This uses the rotational rates known to Nyx. For other objects, use `from_altlatlong` for other celestial bodies. + pub fn from_geodesic(latitude: f64, longitude: f64, height: f64, dt: Epoch, frame: F) -> Self { + Self::from_altlatlong( + latitude, + longitude, + height, + frame.angular_velocity_deg(), + dt, + frame, + ) + } + + /// Creates a new Orbit from the latitude (φ), longitude (λ) and height with respect to the frame's ellipsoid. + /// + /// **Units:** degrees, degrees, km, rad/s + /// NOTE: This computation differs from the spherical coordinates because we consider the flattening of body. + /// Reference: G. Xu and Y. Xu, "GPS", DOI 10.1007/978-3-662-50367-6_2, 2016 + pub fn from_altlatlong( + latitude_deg: f64, + longitude_deg: f64, + height_km: f64, + angular_velocity: f64, + dt: Epoch, + frame: F, + ) -> Self { + let e2 = 2.0 * frame.flattening() - frame.flattening().powi(2); + let (sin_long, cos_long) = longitude_deg.to_radians().sin_cos(); + let (sin_lat, cos_lat) = latitude_deg.to_radians().sin_cos(); + // page 144 + let c_body = frame.semi_major_radius_km() / ((1.0 - e2 * sin_lat.powi(2)).sqrt()); + let s_body = (frame.semi_major_radius_km() * (1.0 - frame.flattening()).powi(2)) + / ((1.0 - e2 * sin_lat.powi(2)).sqrt()); + let ri = (c_body + height_km) * cos_lat * cos_long; + let rj = (c_body + height_km) * cos_lat * sin_long; + let rk = (s_body + height_km) * sin_lat; + let radius = Vector3::new(ri, rj, rk); + let velocity = Vector3::new(0.0, 0.0, angular_velocity).cross(&radius); + Self::cartesian( + radius[0], + radius[1], + radius[2], + velocity[0], + velocity[1], + velocity[2], + dt, + frame, + ) + } + /// Returns the SMA altitude in km pub fn sma_altitude(&self) -> f64 { self.sma_km() - self.frame.equatorial_radius_km() diff --git a/src/cli/inspect.rs b/src/cli/inspect.rs index c15b7d80..573c0453 100644 --- a/src/cli/inspect.rs +++ b/src/cli/inspect.rs @@ -3,7 +3,7 @@ use std::fmt::{Display, Error as FmtError, Formatter}; use tabled::{Style, Table, Tabled}; use crate::HashType; -use crate::{asn1::common::InterpolationKind, prelude::AniseContext}; +use crate::{repr::common::InterpolationKind, prelude::AniseContext}; /// A row is used only to display a context #[derive(Tabled)] diff --git a/src/context/append.rs b/src/context/append.rs index 0f5b9ea0..148e0865 100644 --- a/src/context/append.rs +++ b/src/context/append.rs @@ -11,7 +11,7 @@ use crate::errors::IntegrityErrorKind; use crate::log::{error, trace}; use crate::{ - asn1::{context::AniseContext, ephemeris::Ephemeris, MAX_TRAJECTORIES}, + repr::{context::AniseContext, ephemeris::Ephemeris, MAX_TRAJECTORIES}, errors::{AniseError, InternalErrorKind}, }; use crc32fast::hash; diff --git a/src/context/integrity.rs b/src/context/integrity.rs index 20b51ca5..7e72a601 100644 --- a/src/context/integrity.rs +++ b/src/context/integrity.rs @@ -11,7 +11,7 @@ use log::error; use crate::{ - asn1::context::AniseContext, + repr::context::AniseContext, errors::{AniseError, IntegrityErrorKind}, }; diff --git a/src/context/load.rs b/src/context/load.rs index d26db2d2..9f5e4509 100644 --- a/src/context/load.rs +++ b/src/context/load.rs @@ -8,13 +8,11 @@ * Documentation: https://nyxspace.com/ */ -use memmap2::Mmap; - use crate::der::Decode; use crate::log::{error, trace}; use crate::{ - asn1::{context::AniseContext, semver::Semver, ANISE_VERSION}, errors::AniseError, + repr::{context::AniseContext, semver::Semver, ANISE_VERSION}, }; impl<'a> AniseContext<'a> { @@ -29,23 +27,29 @@ impl<'a> AniseContext<'a> { } Err(e) => { // If we can't load the file, let's try to load the version only to be helpful - match Semver::from_der(&bytes[0..5]) { - Ok(file_version) => { - if file_version == ANISE_VERSION { - error!("[try_from_bytes] context bytes corrupted but ANISE library version match"); + match bytes.get(0..5) { + Some(semver_bytes) => match Semver::from_der(&semver_bytes) { + Ok(file_version) => { + if file_version == ANISE_VERSION { + error!("[try_from_bytes] context bytes corrupted but ANISE library version match"); + Err(AniseError::DecodingError(e)) + } else { + error!( + "[try_from_bytes] context bytes and ANISE library version mismatch" + ); + Err(AniseError::IncompatibleVersion { + got: file_version, + exp: ANISE_VERSION, + }) + } + } + Err(e) => { + error!("[try_from_bytes] context bytes not in ANISE format"); Err(AniseError::DecodingError(e)) - } else { - error!( - "[try_from_bytes] context bytes and ANISE library version mismatch" - ); - Err(AniseError::IncompatibleVersion { - got: file_version, - exp: ANISE_VERSION, - }) } - } - Err(_) => { - error!("[try_from_bytes] context bytes not in ANISE format"); + }, + None => { + error!("[try_from_bytes] context bytes way too short (less than 5 bytes)"); Err(AniseError::DecodingError(e)) } } @@ -59,11 +63,3 @@ impl<'a> AniseContext<'a> { Self::try_from_bytes(buf).unwrap() } } - -impl<'a> TryFrom<&'a Mmap> for AniseContext<'a> { - type Error = AniseError; - - fn try_from(buf: &'a Mmap) -> Result { - Self::try_from_bytes(buf) - } -} diff --git a/src/context/merge.rs b/src/context/merge.rs index 7c452d42..7c0bb493 100644 --- a/src/context/merge.rs +++ b/src/context/merge.rs @@ -9,7 +9,7 @@ */ use crate::log::{info, trace}; -use crate::{asn1::context::AniseContext, errors::AniseError}; +use crate::{repr::context::AniseContext, errors::AniseError}; impl<'a> AniseContext<'a> { /// Clones this context and merges it with the other. diff --git a/src/context/rename.rs b/src/context/rename.rs index ad3750f2..b406c5e8 100644 --- a/src/context/rename.rs +++ b/src/context/rename.rs @@ -8,7 +8,7 @@ * Documentation: https://nyxspace.com/ */ -use crate::asn1::context::AniseContext; +use crate::repr::context::AniseContext; impl<'a> AniseContext<'a> { pub fn rename_ephemeris_traj_mut(&mut self) { diff --git a/src/context/save.rs b/src/context/save.rs index d27760ed..924f70b8 100644 --- a/src/context/save.rs +++ b/src/context/save.rs @@ -9,7 +9,7 @@ */ use crate::{ - asn1::context::AniseContext, + repr::context::AniseContext, errors::{AniseError, InternalErrorKind}, }; use der::Encode; diff --git a/src/ephemerides/mod.rs b/src/ephemerides/mod.rs index a8878fa3..5fed4c98 100644 --- a/src/ephemerides/mod.rs +++ b/src/ephemerides/mod.rs @@ -10,7 +10,7 @@ use hifitime::{Epoch, TimeUnits}; -use crate::asn1::{ephemeris::Ephemeris, spline::Evenness}; +use crate::repr::{ephemeris::Ephemeris, spline::Evenness}; pub mod paths; pub mod translations; diff --git a/src/ephemerides/paths.rs b/src/ephemerides/paths.rs index 1aa58d7d..eb706fc0 100644 --- a/src/ephemerides/paths.rs +++ b/src/ephemerides/paths.rs @@ -14,7 +14,7 @@ use crate::constants::orientations::J2000; use crate::errors::InternalErrorKind; use crate::HashType; use crate::{ - asn1::{context::AniseContext, ephemeris::Ephemeris}, + repr::{context::AniseContext, ephemeris::Ephemeris}, astro::Frame, errors::{AniseError, IntegrityErrorKind}, }; diff --git a/src/ephemerides/translate_to_parent.rs b/src/ephemerides/translate_to_parent.rs index ea30cf5f..2b4a66ec 100644 --- a/src/ephemerides/translate_to_parent.rs +++ b/src/ephemerides/translate_to_parent.rs @@ -10,14 +10,14 @@ use log::trace; -use crate::asn1::common::InterpolationKind; -use crate::asn1::spline::Field; -use crate::asn1::units::*; +use crate::repr::common::InterpolationKind; +use crate::repr::spline::Field; +use crate::repr::units::*; use crate::astro::Aberration; use crate::hifitime::Epoch; use crate::math::interpolation::chebyshev::cheby_eval; use crate::math::Vector3; -use crate::{asn1::context::AniseContext, astro::Frame, errors::AniseError}; +use crate::{repr::context::AniseContext, astro::Frame, errors::AniseError}; impl<'a> AniseContext<'a> { /// Returns the position vector and velocity vector of the `source` with respect to its parent in the ephemeris at the provided epoch, diff --git a/src/ephemerides/translations.rs b/src/ephemerides/translations.rs index 4eafe2cb..d301403d 100644 --- a/src/ephemerides/translations.rs +++ b/src/ephemerides/translations.rs @@ -10,13 +10,13 @@ use log::error; -use crate::asn1::units::*; +use crate::repr::units::*; use crate::astro::Aberration; use crate::hifitime::Epoch; use crate::math::cartesian::CartesianState; use crate::math::Vector3; use crate::{ - asn1::context::AniseContext, + repr::context::AniseContext, astro::{Frame, FrameTrait}, errors::AniseError, }; diff --git a/src/errors.rs b/src/errors.rs index 6603fa19..d81f8672 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -10,7 +10,7 @@ use hifitime::Epoch; -use crate::asn1::semver::Semver; +use crate::repr::semver::Semver; use crate::astro::Frame; use crate::der::Error as Asn1Error; use crate::der::Error as DerError; @@ -18,7 +18,7 @@ use core::convert::From; use core::fmt; use std::io::ErrorKind as IOErrorKind; -#[derive(Clone, PartialEq, Eq, Debug)] +#[derive(Clone, PartialEq, Debug)] pub enum AniseError { /// Raised for an error in reading or writing the file(s) IOError(IOErrorKind), @@ -95,8 +95,15 @@ pub enum MathErrorKind { StateFramesDiffer, } -#[derive(Copy, Clone, PartialEq, Eq, Debug)] -pub enum PhysicsErrorKind {} +#[derive(Copy, Clone, PartialEq, Debug)] +pub enum PhysicsErrorKind { + /// ANISE does not support parabolic orbits because these are not physically real. + ParabolicOrbit, + /// True anomaly of the provided hyperbolic orbit is physically impossible + InvalidHyperbolicTrueAnomaly(f64), + /// Some computation led to a value being infinite, check the error logs + InfiniteValue, +} impl From for AniseError { fn from(e: IOErrorKind) -> Self { diff --git a/src/lib.rs b/src/lib.rs index 77d2983e..908ad84d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,18 +26,18 @@ pub mod time { } pub mod prelude { - pub use crate::asn1::context::AniseContext; - pub use crate::asn1::units::*; pub use crate::astro::Aberration; pub use crate::errors::AniseError; + pub use crate::repr::context::AniseContext; + pub use crate::repr::units::*; pub use crate::time::*; pub use std::fs::File; } -pub mod asn1; pub mod astro; pub mod cli; pub mod naif; +pub mod repr; /// Defines the number of bytes in a double (prevents magic numbers) pub(crate) const DBL_SIZE: usize = 8; diff --git a/src/math/cartesian.rs b/src/math/cartesian.rs index b64e8319..bfe02468 100644 --- a/src/math/cartesian.rs +++ b/src/math/cartesian.rs @@ -171,6 +171,18 @@ impl Cartesian { pub fn v_hat(&self) -> Vector3 { perpv(&self.velocity_km_s, &self.r_hat()) / self.rmag_km() } + + /// Returns whether this orbit and another are equal within the specified radial and velocity absolute tolerances + pub fn eq_within(&self, other: &Self, radial_tol_km: f64, velocity_tol_km_s: f64) -> bool { + self.epoch == other.epoch + && (self.radius_km.x - other.radius_km.x).abs() < radial_tol_km + && (self.radius_km.y - other.radius_km.y).abs() < radial_tol_km + && (self.radius_km.z - other.radius_km.z).abs() < radial_tol_km + && (self.velocity_km_s.x - other.velocity_km_s.x).abs() < velocity_tol_km_s + && (self.velocity_km_s.y - other.velocity_km_s.y).abs() < velocity_tol_km_s + && (self.velocity_km_s.z - other.velocity_km_s.z).abs() < velocity_tol_km_s + && self.frame == other.frame + } } impl Add for Cartesian { @@ -207,3 +219,12 @@ impl Add for Cartesian { }) } } + +impl PartialEq for Cartesian { + /// Two states are equal if their position are equal within one centimeter and their velocities within one centimeter per second. + fn eq(&self, other: &Self) -> bool { + let radial_tol = 1e-5; // centimeter + let velocity_tol = 1e-5; // centimeter per second + self.eq_within(other, radial_tol, velocity_tol) + } +} diff --git a/src/math/interpolation/chebyshev.rs b/src/math/interpolation/chebyshev.rs index 36198cb4..443dcf85 100644 --- a/src/math/interpolation/chebyshev.rs +++ b/src/math/interpolation/chebyshev.rs @@ -11,7 +11,7 @@ use hifitime::{Epoch, Unit as DurationUnit}; use crate::{ - asn1::{ + repr::{ spline::Evenness, spline::{Field, Splines}, }, diff --git a/src/naif/spk/datatype.rs b/src/naif/spk/datatype.rs index 73576f3b..d92dcbdc 100644 --- a/src/naif/spk/datatype.rs +++ b/src/naif/spk/datatype.rs @@ -8,7 +8,7 @@ * Documentation: https://nyxspace.com/ */ -use crate::{asn1::spline::StateKind, prelude::AniseError}; +use crate::{repr::spline::StateKind, prelude::AniseError}; #[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum DataType { diff --git a/src/naif/spk/mod.rs b/src/naif/spk/mod.rs index b14153c0..8c208d83 100644 --- a/src/naif/spk/mod.rs +++ b/src/naif/spk/mod.rs @@ -14,12 +14,12 @@ use self::datatype::DataType; use self::segment::{Record, SegMetaData, Segment}; use super::daf::{Endian, DAF}; -use crate::asn1::common::InterpolationKind; -use crate::asn1::context::AniseContext; -use crate::asn1::ephemeris::Ephemeris; -use crate::asn1::metadata::Metadata; -use crate::asn1::spline::{Evenness, Field, SplineMeta, Splines, StateKind}; -use crate::asn1::units::{DistanceUnit, TimeUnit}; +use crate::repr::common::InterpolationKind; +use crate::repr::context::AniseContext; +use crate::repr::ephemeris::Ephemeris; +use crate::repr::metadata::Metadata; +use crate::repr::spline::{Evenness, Field, SplineMeta, Splines, StateKind}; +use crate::repr::units::{DistanceUnit, TimeUnit}; use crate::constants::orientations::J2000; use crate::errors::InternalErrorKind; use crate::prelude::AniseError; diff --git a/src/asn1/common.rs b/src/repr/common.rs similarity index 100% rename from src/asn1/common.rs rename to src/repr/common.rs diff --git a/src/asn1/context.rs b/src/repr/context.rs similarity index 85% rename from src/asn1/context.rs rename to src/repr/context.rs index 9a99d415..e5bfd9a3 100644 --- a/src/asn1/context.rs +++ b/src/repr/context.rs @@ -9,7 +9,10 @@ */ use der::{asn1::SequenceOf, Decode, Encode, Reader, Writer}; -use super::{ephemeris::Ephemeris, lookuptable::LookUpTable, metadata::Metadata, MAX_TRAJECTORIES}; +use super::{ + ephemeris::Ephemeris, lookuptable::LookUpTable, metadata::Metadata, + spacecraft_constants::SpacecraftConstants, MAX_TRAJECTORIES, +}; /// A Context is the core structure which stores all of the ANISE data. /// All of the data stored in the context can be written to disk and read in the exact same way regardless of the endianness @@ -30,10 +33,14 @@ pub struct AniseContext<'a> { pub ephemeris_lut: LookUpTable, /// Orientation LookUpTable (LUT) stores the mapping between a given orientation's hash and its index in the ephemeris list. pub orientation_lut: LookUpTable, + /// Spacecraft constants LookUpTable (LUT) stores the mapping between a given orientation's hash and its index in the ephemeris list. + pub spacecraft_constant_lut: LookUpTable, /// List of ephemerides in this file, whose index is stored in the LUT. pub ephemeris_data: SequenceOf, MAX_TRAJECTORIES>, // TODO: Add orientation data pub orientation_data: SequenceOf, MAX_TRAJECTORIES>, + /// List of spacecraft constants in this file, whose index is stored in the LUT. + pub spacecraft_constant_data: SequenceOf, MAX_TRAJECTORIES>, } impl<'a> Encode for AniseContext<'a> { diff --git a/src/asn1/ephemeris.rs b/src/repr/ephemeris.rs similarity index 97% rename from src/asn1/ephemeris.rs rename to src/repr/ephemeris.rs index b3f9b292..5480835d 100644 --- a/src/asn1/ephemeris.rs +++ b/src/repr/ephemeris.rs @@ -63,11 +63,10 @@ impl<'a> Encode for Ephemeris<'a> { impl<'a> Decode<'a> for Ephemeris<'a> { fn decode>(decoder: &mut R) -> der::Result { let name: Utf8StringRef = decoder.decode()?; - let ref_epoch: Epoch = decoder.decode()?; Ok(Self { name: name.as_str(), - ref_epoch, + ref_epoch: decoder.decode()?, backward: decoder.decode()?, parent_ephemeris_hash: decoder.decode()?, orientation_hash: decoder.decode()?, diff --git a/src/asn1/lookuptable.rs b/src/repr/lookuptable.rs similarity index 100% rename from src/asn1/lookuptable.rs rename to src/repr/lookuptable.rs diff --git a/src/asn1/metadata.rs b/src/repr/metadata.rs similarity index 100% rename from src/asn1/metadata.rs rename to src/repr/metadata.rs diff --git a/src/asn1/mod.rs b/src/repr/mod.rs similarity index 97% rename from src/asn1/mod.rs rename to src/repr/mod.rs index 97c8ea22..72b2d378 100644 --- a/src/asn1/mod.rs +++ b/src/repr/mod.rs @@ -22,6 +22,7 @@ pub mod metadata; pub mod semver; pub mod spline; // pub mod splinecoeffs; +pub mod spacecraft_constants; pub mod units; use self::semver::Semver; diff --git a/src/repr/planetary_constants.rs b/src/repr/planetary_constants.rs new file mode 100644 index 00000000..f451d28b --- /dev/null +++ b/src/repr/planetary_constants.rs @@ -0,0 +1,73 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ +use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; + +/// Planetary constants can store the same data as the SPICE textual PCK files +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct PlanetaryConstants<'a> { + /// Name is used as the input for the hashing function. + pub name: &'a str, + /// Generic comments field + pub comments: &'a str, + /// Structural mass of the spacecraft in kg + pub dry_mass_kg: Option, + /// Total fuel mass of the spacecraft in kg + pub fuel_mass_kg: Option, + /// Solar radiation pressure area in m^2 + pub srp_area_m2: Option, + /// Solar radiation pressure coefficient of reflectivity (C_r) + pub srp_coeff_reflectivity: Option, + /// Atmospheric drag area in m^2 + pub drag_area_m2: Option, + /// Drag coefficient (C_d) + pub drag_coeff: Option, +} + +impl<'a> Encode for PlanetaryConstants<'a> { + fn encoded_len(&self) -> der::Result { + Utf8StringRef::new(self.name)?.encoded_len()? + + Utf8StringRef::new(self.comments)?.encoded_len()? + + self.dry_mass_kg.encoded_len()? + + self.fuel_mass_kg.encoded_len()? + + self.srp_area_m2.encoded_len()? + + self.srp_coeff_reflectivity.encoded_len()? + + self.drag_area_m2.encoded_len()? + + self.drag_coeff.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + Utf8StringRef::new(self.name)?.encode(encoder)?; + Utf8StringRef::new(self.comments)?.encode(encoder)?; + self.dry_mass_kg.encode(encoder)?; + self.fuel_mass_kg.encode(encoder)?; + self.srp_area_m2.encode(encoder)?; + self.srp_coeff_reflectivity.encode(encoder)?; + self.drag_area_m2.encode(encoder)?; + self.drag_coeff.encode(encoder) + } +} + +impl<'a> Decode<'a> for PlanetaryConstants<'a> { + fn decode>(decoder: &mut R) -> der::Result { + let name: Utf8StringRef = decoder.decode()?; + let comments: Utf8StringRef = decoder.decode()?; + + Ok(Self { + name: name.as_str(), + comments: comments.as_str(), + dry_mass_kg: decoder.decode()?, + fuel_mass_kg: decoder.decode()?, + srp_area_m2: decoder.decode()?, + srp_coeff_reflectivity: decoder.decode()?, + drag_area_m2: decoder.decode()?, + drag_coeff: decoder.decode()?, + }) + } +} diff --git a/src/asn1/semver.rs b/src/repr/semver.rs similarity index 100% rename from src/asn1/semver.rs rename to src/repr/semver.rs diff --git a/src/repr/spacecraft_constants.rs b/src/repr/spacecraft_constants.rs new file mode 100644 index 00000000..76931bc2 --- /dev/null +++ b/src/repr/spacecraft_constants.rs @@ -0,0 +1,73 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ +use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; + +/// Spacecraft constants can store the same data as the CCSDS Orbit Parameter Message (OPM) +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct SpacecraftConstants<'a> { + /// Name is used as the input for the hashing function + pub name: &'a str, + /// Generic comments field + pub comments: &'a str, + /// Structural mass of the spacecraft in kg + pub dry_mass_kg: Option, + /// Total fuel mass of the spacecraft in kg + pub fuel_mass_kg: Option, + /// Solar radiation pressure area in m^2 + pub srp_area_m2: Option, + /// Solar radiation pressure coefficient of reflectivity (C_r) + pub srp_coeff_reflectivity: Option, + /// Atmospheric drag area in m^2 + pub drag_area_m2: Option, + /// Drag coefficient (C_d) + pub drag_coeff: Option, +} + +impl<'a> Encode for SpacecraftConstants<'a> { + fn encoded_len(&self) -> der::Result { + Utf8StringRef::new(self.name)?.encoded_len()? + + Utf8StringRef::new(self.comments)?.encoded_len()? + + self.dry_mass_kg.encoded_len()? + + self.fuel_mass_kg.encoded_len()? + + self.srp_area_m2.encoded_len()? + + self.srp_coeff_reflectivity.encoded_len()? + + self.drag_area_m2.encoded_len()? + + self.drag_coeff.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + Utf8StringRef::new(self.name)?.encode(encoder)?; + Utf8StringRef::new(self.comments)?.encode(encoder)?; + self.dry_mass_kg.encode(encoder)?; + self.fuel_mass_kg.encode(encoder)?; + self.srp_area_m2.encode(encoder)?; + self.srp_coeff_reflectivity.encode(encoder)?; + self.drag_area_m2.encode(encoder)?; + self.drag_coeff.encode(encoder) + } +} + +impl<'a> Decode<'a> for SpacecraftConstants<'a> { + fn decode>(decoder: &mut R) -> der::Result { + let name: Utf8StringRef = decoder.decode()?; + let comments: Utf8StringRef = decoder.decode()?; + + Ok(Self { + name: name.as_str(), + comments: comments.as_str(), + dry_mass_kg: decoder.decode()?, + fuel_mass_kg: decoder.decode()?, + srp_area_m2: decoder.decode()?, + srp_coeff_reflectivity: decoder.decode()?, + drag_area_m2: decoder.decode()?, + drag_coeff: decoder.decode()?, + }) + } +} diff --git a/src/asn1/spline/covkind.rs b/src/repr/spline/covkind.rs similarity index 100% rename from src/asn1/spline/covkind.rs rename to src/repr/spline/covkind.rs diff --git a/src/asn1/spline/evenness.rs b/src/repr/spline/evenness.rs similarity index 100% rename from src/asn1/spline/evenness.rs rename to src/repr/spline/evenness.rs diff --git a/src/asn1/spline/field.rs b/src/repr/spline/field.rs similarity index 100% rename from src/asn1/spline/field.rs rename to src/repr/spline/field.rs diff --git a/src/asn1/spline/meta.rs b/src/repr/spline/meta.rs similarity index 100% rename from src/asn1/spline/meta.rs rename to src/repr/spline/meta.rs diff --git a/src/asn1/spline/mod.rs b/src/repr/spline/mod.rs similarity index 100% rename from src/asn1/spline/mod.rs rename to src/repr/spline/mod.rs diff --git a/src/asn1/spline/splines.rs b/src/repr/spline/splines.rs similarity index 100% rename from src/asn1/spline/splines.rs rename to src/repr/spline/splines.rs diff --git a/src/asn1/spline/statekind.rs b/src/repr/spline/statekind.rs similarity index 100% rename from src/asn1/spline/statekind.rs rename to src/repr/spline/statekind.rs diff --git a/src/asn1/splinecoeffs.rs b/src/repr/splinecoeffs.rs similarity index 100% rename from src/asn1/splinecoeffs.rs rename to src/repr/splinecoeffs.rs diff --git a/src/asn1/units.rs b/src/repr/units.rs similarity index 100% rename from src/asn1/units.rs rename to src/repr/units.rs diff --git a/src/spline.rs b/src/spline.rs index 56d717d7..fc30ba41 100644 --- a/src/spline.rs +++ b/src/spline.rs @@ -12,7 +12,7 @@ use crc32fast::hash; use log::error; use crate::{ - asn1::{ + repr::{ common::InterpolationKind, spline::{Field, Splines}, }, diff --git a/tests/astro/orbit.rs b/tests/astro/orbit.rs index 9e518906..49e5180c 100644 --- a/tests/astro/orbit.rs +++ b/tests/astro/orbit.rs @@ -1,6 +1,10 @@ extern crate pretty_env_logger as pel; -use anise::astro::{orbit::Orbit, Frame}; +use anise::astro::orbit::Orbit; +use anise::astro::orbit_geodetic::GeodeticOrbit; +use anise::file_mmap; +use anise::math::angles::{between_0_360, between_pm_180}; +use anise::prelude::*; use anise::time::{Epoch, Unit}; macro_rules! f64_eq { @@ -16,12 +20,15 @@ macro_rules! f64_eq { #[test] fn state_def_circ_inc() { - let cosm = Cosm::de438_gmat(); + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let eme2k = cosm.frame("EME2000"); - let dt = Epoch::from_mjd_tai(21_545.0); + let epoch = Epoch::from_mjd_tai(21_545.0); let cart = Orbit::cartesian( - -2436.45, -2436.45, 6891.037, 5.088_611, -5.088_611, 0.0, dt, eme2k, + -2436.45, -2436.45, 6891.037, 5.088_611, -5.088_611, 0.0, epoch, eme2k, ); let cart2 = Orbit::cartesian( -2436.45, @@ -30,20 +37,20 @@ fn state_def_circ_inc() { 5.088_611, -5.088_611, 0.0, - Epoch::from_jde_tai(dt.as_jde_tai_days()), + Epoch::from_jde_tai(epoch.to_jde_tai_days()), eme2k, ); assert_eq!( cart, cart2, "different representations of the datetime are not considered equal" ); - f64_eq!(cart.x, -2436.45, "x"); - f64_eq!(cart.y, -2436.45, "y"); - f64_eq!(cart.z, 6891.037, "z"); - f64_eq!(cart.vx, 5.088_611, "vx"); - f64_eq!(cart.vy, -5.088_611, "vy"); - f64_eq!(cart.vz, 0.0, "vz"); - f64_eq!(cart.energy(), -25.842_247_282_849_137, "energy"); + f64_eq!(cart.radius_km.x, -2436.45, "x"); + f64_eq!(cart.radius_km.y, -2436.45, "y"); + f64_eq!(cart.radius_km.z, 6891.037, "z"); + f64_eq!(cart.velocity_km_s.x, 5.088_611, "vx"); + f64_eq!(cart.velocity_km_s.y, -5.088_611, "vy"); + f64_eq!(cart.velocity_km_s.z, 0.0, "vz"); + f64_eq!(cart.energy_km2_s2(), -25.842_247_282_849_137, "energy"); assert_eq!( cart.period(), 6_740.269_063_643_045 * Unit::Second, @@ -52,67 +59,71 @@ fn state_def_circ_inc() { f64_eq!(cart.hx(), 35_065.806_679_607_005, "HX"); f64_eq!(cart.hy(), 35_065.806_679_607_005, "HY"); f64_eq!(cart.hz(), 24_796.292_541_9, "HZ"); - f64_eq!(cart.sma(), 7_712.186_117_895_043, "sma"); + f64_eq!(cart.sma_km(), 7_712.186_117_895_043, "sma"); f64_eq!(cart.ecc(), 0.000_999_582_831_432_052_5, "ecc"); - f64_eq!(cart.inc(), 63.434_003_407_751_14, "inc"); - f64_eq!(cart.raan(), 135.0, "raan"); - f64_eq!(cart.aop(), 90.0, "aop"); - f64_eq!(cart.ta(), 0.0, "ta"); - f64_eq!(cart.tlong(), 225.0, "tlong"); - f64_eq!(cart.ea(), 0.0, "ea"); - f64_eq!(cart.ma(), 0.0, "ma"); - f64_eq!(cart.apoapsis(), 7_719.895_086_731_299, "apo"); - f64_eq!(cart.periapsis(), 7_704.477_149_058_786, "peri"); + f64_eq!(cart.inc_deg(), 63.434_003_407_751_14, "inc"); + f64_eq!(cart.raan_deg(), 135.0, "raan"); + f64_eq!(cart.aop_deg(), 90.0, "aop"); + f64_eq!(cart.ta_deg(), 0.0, "ta"); + f64_eq!(cart.tlong_deg(), 225.0, "tlong"); + f64_eq!(cart.ea_deg(), 0.0, "ea"); + f64_eq!(cart.ma_deg(), 0.0, "ma"); + f64_eq!(cart.apoapsis_km(), 7_719.895_086_731_299, "apo"); + f64_eq!(cart.periapsis_km(), 7_704.477_149_058_786, "peri"); f64_eq!( - cart.semi_parameter(), + cart.semi_parameter_km(), 7_712.178_412_142_147, "semi parameter" ); - let kep = Orbit::keplerian(8_191.93, 1e-6, 12.85, 306.614, 314.19, 99.887_7, dt, eme2k); - f64_eq!(kep.x, 8_057.976_452_202_976, "x"); - f64_eq!(kep.y, -0.196_740_370_290_888_9, "y"); - f64_eq!(kep.z, 1_475.383_214_274_138, "z"); - f64_eq!(kep.vx, -0.166_470_488_584_076_31, "vx"); - f64_eq!(kep.vy, 6.913_868_638_275_646_5, "vy"); - f64_eq!(kep.vz, 0.910_157_981_443_279_1, "vz"); - f64_eq!(kep.sma(), 8_191.929_999_999_999, "sma"); + let kep = Orbit::keplerian( + 8_191.93, 1e-6, 12.85, 306.614, 314.19, 99.887_7, epoch, eme2k, + ); + f64_eq!(kep.radius_km.x, 8_057.976_452_202_976, "x"); + f64_eq!(kep.radius_km.y, -0.196_740_370_290_888_9, "y"); + f64_eq!(kep.radius_km.z, 1_475.383_214_274_138, "z"); + f64_eq!(kep.velocity_km_s.x, -0.166_470_488_584_076_31, "vx"); + f64_eq!(kep.velocity_km_s.y, 6.913_868_638_275_646_5, "vy"); + f64_eq!(kep.velocity_km_s.z, 0.910_157_981_443_279_1, "vz"); + f64_eq!(kep.sma_km(), 8_191.929_999_999_999, "sma"); f64_eq!(kep.ecc(), 1.000_000_000_388_51e-06, "ecc"); - f64_eq!(kep.inc(), 12.849_999_999_999_987, "inc"); - f64_eq!(kep.raan(), 306.614, "raan"); - f64_eq!(kep.aop(), 314.189_999_994_618_1, "aop"); - f64_eq!(kep.ta(), 99.887_700_005_381_9, "ta"); - f64_eq!(kep.energy(), -24.328_848_116_377_95, "energy"); + f64_eq!(kep.inc_deg(), 12.849_999_999_999_987, "inc"); + f64_eq!(kep.raan_deg(), 306.614, "raan"); + f64_eq!(kep.aop_deg(), 314.189_999_994_618_1, "aop"); + f64_eq!(kep.ta_deg(), 99.887_700_005_381_9, "ta"); + f64_eq!(kep.energy_km2_s2(), -24.328_848_116_377_95, "energy"); assert_eq!(kep.period(), 7_378.877_993_957_958 * Unit::Second, "period"); f64_eq!(kep.hx(), -10_200.784_799_426_574, "HX"); f64_eq!(kep.hy(), -7_579.639_346_783_497, "HY"); f64_eq!(kep.hz(), 55_711.757_929_384_25, "HZ"); - f64_eq!(kep.tlong(), 0.691_700_000_000_082_6, "tlong"); - f64_eq!(kep.ea(), 99.887_643_560_656_85, "ea"); - f64_eq!(kep.ma(), 99.887_587_115_926_96, "ma"); - f64_eq!(kep.apoapsis(), 8_191.938_191_930_002, "apo"); - f64_eq!(kep.periapsis(), 8_191.921_808_069_997, "peri"); + f64_eq!(kep.tlong_deg(), 0.691_700_000_000_082_6, "tlong"); + f64_eq!(kep.ea_deg(), 99.887_643_560_656_85, "ea"); + f64_eq!(kep.ma_deg(), 99.887_587_115_926_96, "ma"); + f64_eq!(kep.apoapsis_km(), 8_191.938_191_930_002, "apo"); + f64_eq!(kep.periapsis_km(), 8_191.921_808_069_997, "peri"); f64_eq!( - kep.semi_parameter(), + kep.semi_parameter_km(), 8_191.929_999_991_808, "semi parameter" ); - let kep = Orbit::keplerian(8_191.93, 0.2, 12.85, 306.614, 314.19, -99.887_7, dt, eme2k); - f64_eq!(kep.ta(), 260.1123, "ta"); + let kep = Orbit::keplerian( + 8_191.93, 0.2, 12.85, 306.614, 314.19, -99.887_7, epoch, eme2k, + ); + f64_eq!(kep.ta_deg(), 260.1123, "ta"); - // Test that DCMs are valid - let dcm = kep.dcm_from_traj_frame(Frame::VNC).unwrap(); - assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); - assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + // // Test that DCMs are valid + // let dcm = kep.dcm_from_traj_frame(Frame::VNC).unwrap(); + // assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + // assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); - let dcm = kep.dcm_from_traj_frame(Frame::RCN).unwrap(); - assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); - assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + // let dcm = kep.dcm_from_traj_frame(Frame::RCN).unwrap(); + // assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + // assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); - let dcm = kep.dcm_from_traj_frame(Frame::RIC).unwrap(); - assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); - assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + // let dcm = kep.dcm_from_traj_frame(Frame::RIC).unwrap(); + // assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + // assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); } #[test] @@ -120,7 +131,7 @@ fn state_def_elliptical() { let cosm = Cosm::de438_gmat(); let eme2k = cosm.frame("EME2000"); - let dt = Epoch::from_mjd_tai(21_545.0); + let epoch = Epoch::from_mjd_tai(21_545.0); let cart = Orbit::cartesian( 5_946.673_548_288_958, 1_656.154_606_023_661, @@ -128,10 +139,10 @@ fn state_def_elliptical() { -3.098_683_050_943_824, 4.579_534_132_135_011, 6.246_541_551_539_432, - dt, + epoch, eme2k, ); - f64_eq!(cart.energy(), -25.842_247_282_849_144, "energy"); + f64_eq!(cart.energy_km2_s2(), -25.842_247_282_849_144, "energy"); assert_eq!( cart.period(), 6_740.269_063_643_042_5 * Unit::Second, @@ -140,66 +151,66 @@ fn state_def_elliptical() { f64_eq!(cart.hx(), 0.015_409_898_034_704_383, "HX"); f64_eq!(cart.hy(), -44_146.106_010_690_01, "HY"); f64_eq!(cart.hz(), 32_364.892_694_481_765, "HZ"); - f64_eq!(cart.sma(), 7_712.186_117_895_041, "sma"); + f64_eq!(cart.sma_km(), 7_712.186_117_895_041, "sma"); f64_eq!(cart.ecc(), 0.158_999_999_999_999_95, "ecc"); - f64_eq!(cart.inc(), 53.753_69, "inc"); - f64_eq!(cart.raan(), 1.998_632_864_211_17e-05, "raan"); - f64_eq!(cart.aop(), 359.787_880_000_004, "aop"); - f64_eq!(cart.ta(), 25.434_003_407_751_188, "ta"); - f64_eq!(cart.tlong(), 25.221_903_394_083_824, "tlong"); - f64_eq!(cart.ea(), 21.763_052_882_584_79, "ea"); - f64_eq!(cart.ma(), 18.385_336_330_516_39, "ma"); - f64_eq!(cart.apoapsis(), 8_938.423_710_640_353, "apo"); - f64_eq!(cart.periapsis(), 6_485.948_525_149_73, "peri"); + f64_eq!(cart.inc_deg(), 53.753_69, "inc"); + f64_eq!(cart.raan_deg(), 1.998_632_864_211_17e-05, "raan"); + f64_eq!(cart.aop_deg(), 359.787_880_000_004, "aop"); + f64_eq!(cart.ta_deg(), 25.434_003_407_751_188, "ta"); + f64_eq!(cart.tlong_deg(), 25.221_903_394_083_824, "tlong"); + f64_eq!(cart.ea_deg(), 21.763_052_882_584_79, "ea"); + f64_eq!(cart.ma_deg(), 18.385_336_330_516_39, "ma"); + f64_eq!(cart.apoapsis_km(), 8_938.423_710_640_353, "apo"); + f64_eq!(cart.periapsis_km(), 6_485.948_525_149_73, "peri"); f64_eq!( - cart.semi_parameter(), + cart.semi_parameter_km(), 7_517.214_340_648_537, "semi parameter" ); let kep = Orbit::keplerian( - 8_191.93, 0.024_5, 12.85, 306.614, 314.19, 99.887_7, dt, eme2k, + 8_191.93, 0.024_5, 12.85, 306.614, 314.19, 99.887_7, epoch, eme2k, ); - f64_eq!(kep.x, 8_087.161_618_048_522_5, "x"); - f64_eq!(kep.y, -0.197_452_943_772_520_73, "y"); - f64_eq!(kep.z, 1_480.726_901_246_883, "z"); - f64_eq!(kep.vx, -0.000_168_592_186_843_952_16, "vx"); - f64_eq!(kep.vy, 6.886_845_792_370_852, "vy"); - f64_eq!(kep.vz, 0.936_931_260_302_891_8, "vz"); - f64_eq!(kep.sma(), 8_191.930_000_000_003, "sma"); + f64_eq!(kep.radius_km.x, 8_087.161_618_048_522_5, "x"); + f64_eq!(kep.radius_km.y, -0.197_452_943_772_520_73, "y"); + f64_eq!(kep.radius_km.z, 1_480.726_901_246_883, "z"); + f64_eq!(kep.velocity_km_s.x, -0.000_168_592_186_843_952_16, "vx"); + f64_eq!(kep.velocity_km_s.y, 6.886_845_792_370_852, "vy"); + f64_eq!(kep.velocity_km_s.z, 0.936_931_260_302_891_8, "vz"); + f64_eq!(kep.sma_km(), 8_191.930_000_000_003, "sma"); f64_eq!(kep.ecc(), 0.024_500_000_000_000_348, "ecc"); - f64_eq!(kep.inc(), 12.850_000_000_000_016, "inc"); - f64_eq!(kep.raan(), 306.614, "raan"); - f64_eq!(kep.aop(), 314.190_000_000_000_4, "aop"); - f64_eq!(kep.ta(), 99.887_699_999_999_58, "ta"); - f64_eq!(kep.energy(), -24.328_848_116_377_94, "energy"); + f64_eq!(kep.inc_deg(), 12.850_000_000_000_016, "inc"); + f64_eq!(kep.raan_deg(), 306.614, "raan"); + f64_eq!(kep.aop_deg(), 314.190_000_000_000_4, "aop"); + f64_eq!(kep.ta_deg(), 99.887_699_999_999_58, "ta"); + f64_eq!(kep.energy_km2_s2(), -24.328_848_116_377_94, "energy"); assert_eq!(kep.period(), 7_378.877_993_957_964 * Unit::Second, "period"); f64_eq!(kep.hx(), -10_197.722_829_337_885, "HX"); f64_eq!(kep.hy(), -7_577.364_166_057_776, "HY"); f64_eq!(kep.hz(), 55_695.034_928_191_49, "HZ"); - f64_eq!(kep.tlong(), 0.691_699_999_999_855_2, "tlong"); - f64_eq!(kep.ea(), 98.501_748_370_880_22, "ea"); - f64_eq!(kep.ma(), 97.113_427_049_323_43, "ma"); - f64_eq!(kep.apoapsis(), 8_392.632_285_000_007, "apo"); - f64_eq!(kep.periapsis(), 7_991.227_715_000_001, "peri"); + f64_eq!(kep.tlong_deg(), 0.691_699_999_999_855_2, "tlong"); + f64_eq!(kep.ea_deg(), 98.501_748_370_880_22, "ea"); + f64_eq!(kep.ma_deg(), 97.113_427_049_323_43, "ma"); + f64_eq!(kep.apoapsis_km(), 8_392.632_285_000_007, "apo"); + f64_eq!(kep.periapsis_km(), 7_991.227_715_000_001, "peri"); f64_eq!( - kep.semi_parameter(), + kep.semi_parameter_km(), 8_187.012_794_017_503, "semi parameter" ); // Test that DCMs are valid - let dcm = kep.dcm_from_traj_frame(Frame::VNC).unwrap(); - assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); - assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + // let dcm = kep.dcm_from_traj_frame(Frame::VNC).unwrap(); + // assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + // assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); - let dcm = kep.dcm_from_traj_frame(Frame::RCN).unwrap(); - assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); - assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + // let dcm = kep.dcm_from_traj_frame(Frame::RCN).unwrap(); + // assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + // assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); - let dcm = kep.dcm_from_traj_frame(Frame::RIC).unwrap(); - assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); - assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + // let dcm = kep.dcm_from_traj_frame(Frame::RIC).unwrap(); + // assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + // assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); } #[test] @@ -207,7 +218,7 @@ fn state_def_circ_eq() { let cosm = Cosm::de438_gmat(); let eme2k = cosm.frame("EME2000"); - let dt = Epoch::from_mjd_tai(21_545.0); + let epoch = Epoch::from_mjd_tai(21_545.0); let cart = Orbit::cartesian( -38_892.724_449_149_02, 16_830.384_772_891_86, @@ -215,45 +226,45 @@ fn state_def_circ_eq() { -1.218_008_333_846_6, -2.814_651_172_605_98, 1.140_294_223_185_661e-5, - dt, + epoch, eme2k, ); - f64_eq!(cart.energy(), -4.702_902_670_552_006, "energy"); + f64_eq!(cart.energy_km2_s2(), -4.702_902_670_552_006, "energy"); assert_eq!(cart.period(), 86_820.776_152_986_1 * Unit::Second, "period"); f64_eq!(cart.hx(), 2.225_951_522_241_969_5, "HX"); f64_eq!(cart.hy(), -0.436_714_326_090_944_6, "HY"); f64_eq!(cart.hz(), 129_969.001_391_865_75, "HZ"); - f64_eq!(cart.sma(), 42_378.129_999_999_98, "sma"); + f64_eq!(cart.sma_km(), 42_378.129_999_999_98, "sma"); f64_eq!(cart.ecc(), 9.999_999_809_555_511e-9, "ecc"); - f64_eq!(cart.inc(), 0.001_000_000_401_564_538_6, "inc"); - f64_eq!(cart.raan(), 78.9, "raan"); - f64_eq!(cart.aop(), 65.399_999_847_186_78, "aop"); - f64_eq!(cart.ta(), 12.300_000_152_813_197, "ta"); - f64_eq!(cart.tlong(), 156.599_999_999_999_97, "tlong"); - f64_eq!(cart.ea(), 12.300_000_030_755_777, "ea"); - f64_eq!(cart.ma(), 12.299_999_908_698_359, "ma"); - f64_eq!(cart.apoapsis(), 42_378.130_423_781_27, "apo"); - f64_eq!(cart.periapsis(), 42_378.129_576_218_69, "peri"); + f64_eq!(cart.inc_deg(), 0.001_000_000_401_564_538_6, "inc"); + f64_eq!(cart.raan_deg(), 78.9, "raan"); + f64_eq!(cart.aop_deg(), 65.399_999_847_186_78, "aop"); + f64_eq!(cart.ta_deg(), 12.300_000_152_813_197, "ta"); + f64_eq!(cart.tlong_deg(), 156.599_999_999_999_97, "tlong"); + f64_eq!(cart.ea_deg(), 12.300_000_030_755_777, "ea"); + f64_eq!(cart.ma_deg(), 12.299_999_908_698_359, "ma"); + f64_eq!(cart.apoapsis_km(), 42_378.130_423_781_27, "apo"); + f64_eq!(cart.periapsis_km(), 42_378.129_576_218_69, "peri"); f64_eq!( - cart.semi_parameter(), + cart.semi_parameter_km(), 42_378.129_999_999_976, "semi parameter" ); - let kep = Orbit::keplerian(18191.098, 1e-6, 1e-6, 306.543, 314.32, 98.765, dt, eme2k); - f64_eq!(kep.x, 18_190.717_357_886_37, "x"); - f64_eq!(kep.y, -118.107_162_539_218_69, "y"); - f64_eq!(kep.z, 0.000_253_845_647_633_053_35, "z"); - f64_eq!(kep.vx, 0.030_396_440_130_264_88, "vx"); - f64_eq!(kep.vy, 4.680_909_107_924_576, "vy"); - f64_eq!(kep.vz, 4.907_089_816_726_583e-8, "vz"); - f64_eq!(kep.sma(), 18_191.098_000_000_013, "sma"); + let kep = Orbit::keplerian(18191.098, 1e-6, 1e-6, 306.543, 314.32, 98.765, epoch, eme2k); + f64_eq!(kep.radius_km.x, 18_190.717_357_886_37, "x"); + f64_eq!(kep.radius_km.y, -118.107_162_539_218_69, "y"); + f64_eq!(kep.radius_km.z, 0.000_253_845_647_633_053_35, "z"); + f64_eq!(kep.velocity_km_s.x, 0.030_396_440_130_264_88, "vx"); + f64_eq!(kep.velocity_km_s.y, 4.680_909_107_924_576, "vy"); + f64_eq!(kep.velocity_km_s.z, 4.907_089_816_726_583e-8, "vz"); + f64_eq!(kep.sma_km(), 18_191.098_000_000_013, "sma"); f64_eq!(kep.ecc(), 9.999_999_997_416_087e-7, "ecc"); - f64_eq!(kep.inc(), 1.207_418_269_725_733_3e-6, "inc"); - f64_eq!(kep.raan(), 306.543, "raan"); - f64_eq!(kep.aop(), 314.320_000_025_403_66, "aop"); - f64_eq!(kep.ta(), 98.764_999_974_596_28, "ta"); - f64_eq!(kep.energy(), -10.955_920_349_063_035, "energy"); + f64_eq!(kep.inc_deg(), 1.207_418_269_725_733_3e-6, "inc"); + f64_eq!(kep.raan_deg(), 306.543, "raan"); + f64_eq!(kep.aop_deg(), 314.320_000_025_403_66, "aop"); + f64_eq!(kep.ta_deg(), 98.764_999_974_596_28, "ta"); + f64_eq!(kep.energy_km2_s2(), -10.955_920_349_063_035, "energy"); assert_eq!( kep.period(), 24_417.396_242_570_256 * Unit::Second, @@ -262,29 +273,29 @@ fn state_def_circ_eq() { f64_eq!(kep.hx(), -0.001_194_024_028_558_358_7, "HX"); f64_eq!(kep.hy(), -0.000_884_918_835_027_750_6, "HY"); f64_eq!(kep.hz(), 85_152.684_597_507_06, "HZ"); - f64_eq!(kep.tlong(), 359.627_999_999_999_93, "tlong"); - f64_eq!(kep.ea(), 98.764_943_347_932_57, "ea"); - f64_eq!(kep.ma(), 98.764_886_721_264_56, "ma"); - f64_eq!(kep.apoapsis(), 18_191.116_191_098_008, "apo"); - f64_eq!(kep.periapsis(), 18_191.079_808_902_017, "peri"); + f64_eq!(kep.tlong_deg(), 359.627_999_999_999_93, "tlong"); + f64_eq!(kep.ea_deg(), 98.764_943_347_932_57, "ea"); + f64_eq!(kep.ma_deg(), 98.764_886_721_264_56, "ma"); + f64_eq!(kep.apoapsis_km(), 18_191.116_191_098_008, "apo"); + f64_eq!(kep.periapsis_km(), 18_191.079_808_902_017, "peri"); f64_eq!( - kep.semi_parameter(), + kep.semi_parameter_km(), 18_191.097_999_981_823, "semi parameter" ); // Test that DCMs are valid - let dcm = kep.dcm_from_traj_frame(Frame::VNC).unwrap(); - assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); - assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + // let dcm = kep.dcm_from_traj_frame(Frame::VNC).unwrap(); + // assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + // assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); - let dcm = kep.dcm_from_traj_frame(Frame::RCN).unwrap(); - assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); - assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + // let dcm = kep.dcm_from_traj_frame(Frame::RCN).unwrap(); + // assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + // assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); - let dcm = kep.dcm_from_traj_frame(Frame::RIC).unwrap(); - assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); - assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); + // let dcm = kep.dcm_from_traj_frame(Frame::RIC).unwrap(); + // assert!(((dcm * dcm.transpose()).determinant() - 1.0).abs() < 1e-12); + // assert!(((dcm.transpose() * dcm).determinant() - 1.0).abs() < 1e-12); } #[test] @@ -292,7 +303,7 @@ fn state_def_equatorial() { let cosm = Cosm::de438_gmat(); let eme2k = cosm.frame("EME2000"); - let dt = Epoch::from_mjd_tai(21_545.0); + let epoch = Epoch::from_mjd_tai(21_545.0); let cart = Orbit::cartesian( -7273.338970882, 253.990592670, @@ -300,16 +311,16 @@ fn state_def_equatorial() { -0.258285289, -7.396322922, -0.000645451, - dt, + epoch, eme2k, ); - f64_eq!(cart.sma(), 7278.136188379306, "sma"); + f64_eq!(cart.sma_km(), 7278.136188379306, "sma"); f64_eq!(cart.ecc(), 4.99846643158263e-05, "ecc"); - f64_eq!(cart.inc(), 0.005000000478594339, "inc"); - f64_eq!(cart.raan(), 360.0, "raan"); - f64_eq!(cart.aop(), 177.9999736473912, "aop"); - f64_eq!(cart.ta(), 2.650826247094554e-05, "ta"); + f64_eq!(cart.inc_deg(), 0.005000000478594339, "inc"); + f64_eq!(cart.raan_deg(), 360.0, "raan"); + f64_eq!(cart.aop_deg(), 177.9999736473912, "aop"); + f64_eq!(cart.ta_deg(), 2.650826247094554e-05, "ta"); } #[test] @@ -317,7 +328,7 @@ fn state_def_reciprocity() { let cosm = Cosm::de438_gmat(); let eme2k = cosm.frame("EME2000"); - let dt = Epoch::from_mjd_tai(21_545.0); + let epoch = Epoch::from_mjd_tai(21_545.0); assert_eq!( Orbit::cartesian( @@ -327,7 +338,7 @@ fn state_def_reciprocity() { -1.218_008_333_846_6, -2.814_651_172_605_98, 1.140_294_223_185_661e-5, - dt, + epoch, eme2k ), Orbit::keplerian( @@ -337,7 +348,7 @@ fn state_def_reciprocity() { 78.9, 65.399_999_847_186_78, 12.300_000_152_813_197, - dt, + epoch, eme2k ), "circ_eq" @@ -351,7 +362,7 @@ fn state_def_reciprocity() { -3.098_683_050_943_824, 4.579_534_132_135_011, 6.246_541_551_539_432, - dt, + epoch, eme2k ), Orbit::keplerian( @@ -361,14 +372,14 @@ fn state_def_reciprocity() { 1.998_632_864_211_17e-5, 359.787_880_000_004, 25.434_003_407_751_188, - dt, + epoch, eme2k ), "elliptical" ); assert_eq!( - Orbit::cartesian(-2436.45, -2436.45, 6891.037, 5.088_611, -5.088_611, 0.0, dt, eme2k), + Orbit::cartesian(-2436.45, -2436.45, 6891.037, 5.088_611, -5.088_611, 0.0, epoch, eme2k), Orbit::keplerian( 7_712.186_117_895_043, 0.000_999_582_831_432_052_5, @@ -376,7 +387,7 @@ fn state_def_reciprocity() { 135.0, 90.0, 0.0, - dt, + epoch, eme2k ), "circ_inc" @@ -389,7 +400,7 @@ fn geodetic_vallado() { let eme2k = cosm.frame("EME2000"); dbg!(eme2k.semi_major_radius()); - let dt = Epoch::from_mjd_tai(51_545.0); + let epoch = Epoch::from_mjd_tai(51_545.0); // Test case from Vallado, 4th Ed., page 173, Example 3-3 let ri = 6524.834; let ri_val = 6_524.833_999_999_999; @@ -398,15 +409,15 @@ fn geodetic_vallado() { let rk = 6448.296; let lat = 34.352_495_139_917_26; // Valldo: 34.352496 let long = 46.446_416_856_789_96; // Vallado 46.4464 - let height = 5_085.219_430_345_17; // Valldo: 5085.22 - let r = Orbit::from_position(ri, rj, rk, dt, eme2k); + let height = 5_085.219_430_345_17; // Vallado: 5085.22 + let r = GeodeticOrbit::from_position(ri, rj, rk, epoch, eme2k); f64_eq!(r.geodetic_latitude(), lat, "latitude (φ)"); f64_eq!(r.geodetic_longitude(), long, "longitude (λ)"); f64_eq!(r.geodetic_height(), height, "height"); - let r = Orbit::from_geodesic(lat, long, height, dt, eme2k); - f64_eq!(r.x, ri_val, "r_i"); - f64_eq!(r.y, rj_val, "r_j"); - f64_eq!(r.z, rk, "r_k"); + let r = GeodeticOrbit::from_geodesic(lat, long, height, epoch, eme2k); + f64_eq!(r.radius_km.x, ri_val, "r_i"); + f64_eq!(r.radius_km.y, rj_val, "r_j"); + f64_eq!(r.radius_km.z, rk, "r_k"); // Test case from Vallado, 4th Ed., page 173, Example 3-4 let lat = -7.906_635_7; @@ -417,11 +428,11 @@ fn geodetic_vallado() { let ri = 6_119.399_587_411_616; let rj = -1_571.479_380_333_195; let rk = -871.561_161_926_003_9; - let r = Orbit::from_geodesic(lat, long, height, dt, eme2k); - f64_eq!(r.x, ri, "r_i"); - f64_eq!(r.y, rj, "r_j"); - f64_eq!(r.z, rk, "r_k"); - let r = Orbit::from_position(ri, rj, rk, dt, eme2k); + let r = GeodeticOrbit::from_geodesic(lat, long, height, epoch, eme2k); + f64_eq!(r.radius_km.x, ri, "r_i"); + f64_eq!(r.radius_km.y, rj, "r_j"); + f64_eq!(r.radius_km.z, rk, "r_k"); + let r = GeodeticOrbit::from_position(ri, rj, rk, epoch, eme2k); f64_eq!(r.geodetic_latitude(), lat_val, "latitude (φ)"); f64_eq!(r.geodetic_longitude(), long, "longitude (λ)"); f64_eq!(r.geodetic_height(), height_val, "height"); @@ -429,16 +440,15 @@ fn geodetic_vallado() { #[test] fn with_init() { - use nyx::utils::{between_0_360, between_pm_180}; let cosm = Cosm::de438_gmat(); let eme2k = cosm.frame("EME2000"); - let dt = Epoch::from_gregorian_tai_at_midnight(2021, 3, 4); + let epoch = Epoch::from_gregorian_tai_at_midnight(2021, 3, 4); let kep = Orbit::keplerian( - 8_191.93, 0.024_5, 12.85, 306.614, 314.19, 99.887_7, dt, eme2k, + 8_191.93, 0.024_5, 12.85, 306.614, 314.19, 99.887_7, epoch, eme2k, ); for sma_incr in 100..1000 { - let new_sma = kep.sma() + f64::from(sma_incr); - f64_eq!(kep.with_sma(new_sma).sma(), new_sma, "wrong sma"); + let new_sma = kep.sma_km() + f64::from(sma_incr); + f64_eq!(kep.with_sma(new_sma).sma_km(), new_sma, "wrong sma"); } for ecc_incr in 0..100 { let new_ecc = kep.ecc() + f64::from(ecc_incr) / 100.0; @@ -446,161 +456,55 @@ fn with_init() { f64_eq!( new_state.ecc(), new_ecc, - format!("wrong ecc: got {}\twanted {}", new_state.inc(), new_ecc) + format!("wrong ecc: got {}\twanted {}", new_state.inc_deg(), new_ecc) ); } for angle_incr in 0..360 { - let new_aop = between_0_360(kep.aop() + f64::from(angle_incr)); - let new_state = kep.add_aop(f64::from(angle_incr)); + let new_aop = between_0_360(kep.aop_deg() + f64::from(angle_incr)); + let new_state = kep.add_aop_deg(f64::from(angle_incr)); f64_eq!( - new_state.aop(), + new_state.aop_deg(), new_aop, - format!("wrong aop: got {}\twanted {}", new_state.aop(), new_aop) + format!("wrong aop: got {}\twanted {}", new_state.aop_deg(), new_aop) ); } for angle_incr in 0..360 { - let new_raan = between_0_360(kep.raan() + f64::from(angle_incr)); - let new_state = kep.add_raan(f64::from(angle_incr)); + let new_raan = between_0_360(kep.raan_deg() + f64::from(angle_incr)); + let new_state = kep.add_raan_deg(f64::from(angle_incr)); f64_eq!( - new_state.raan(), + new_state.raan_deg(), new_raan, - format!("wrong raan: got {}\twanted {}", new_state.raan(), new_raan) + format!( + "wrong raan: got {}\twanted {}", + new_state.raan_deg(), + new_raan + ) ); } for angle_incr in 0..360 { - let new_ta = between_0_360(kep.ta() + f64::from(angle_incr)); - let new_state = kep.with_ta(new_ta); + let new_ta = between_0_360(kep.ta_deg() + f64::from(angle_incr)); + let new_state = kep.with_ta_deg(new_ta); f64_eq!( - new_state.ta(), + new_state.ta_deg(), new_ta, - format!("wrong ta: got {}\twanted {}", new_state.aop(), new_ta) + format!("wrong ta: got {}\twanted {}", new_state.aop_deg(), new_ta) ); } for angle_incr in 0..360 { // NOTE: Inclination is bounded between 0 and 180, hence the slightly different logic here. - let new_inc = between_pm_180(kep.inc() + f64::from(angle_incr)).abs(); - let new_state = kep.add_inc(f64::from(angle_incr)); + let new_inc = between_pm_180(kep.inc_deg() + f64::from(angle_incr)).abs(); + let new_state = kep.add_inc_deg(f64::from(angle_incr)); f64_eq!( - new_state.inc(), + new_state.inc_deg(), new_inc, - format!("wrong inc: got {}\twanted {}", new_state.inc(), new_inc) + format!("wrong inc: got {}\twanted {}", new_state.inc_deg(), new_inc) ); } for apsis_delta in 100..1000 { - let new_ra = kep.apoapsis() + f64::from(apsis_delta); - let new_rp = kep.periapsis() - f64::from(apsis_delta); - let new_orbit = kep.with_apoapsis_periapsis(new_ra, new_rp); - f64_eq!(new_orbit.apoapsis(), new_ra, "wrong ra"); - f64_eq!(new_orbit.periapsis(), new_rp, "wrong rp"); - } -} - -#[test] -fn orbit_dual_test() { - use nyx::cosmic::OrbitDual; - use nyx::md::StateParameter; - let cosm = Cosm::de438_gmat(); - let eme2k = cosm.frame("EME2000"); - - let dt = Epoch::from_mjd_tai(21_545.0); - let cart = Orbit::cartesian( - -2436.45, -2436.45, 6891.037, 5.088_611, -5.088_611, 1.0, dt, eme2k, - ); - - println!("{:x}", cart); - - let cart_dual = OrbitDual::from(cart); - println!("{}", eme2k.gm()); - println!("|v| = {}", cart_dual.vmag()); - println!("|v|^2 = {}", cart_dual.vmag().dual * cart_dual.vmag().dual); - println!("x = {}", cart_dual.x); - println!("y = {}", cart_dual.y); - println!("z = {}", cart_dual.z); - println!("\\xi = {}\n\n", cart_dual.energy()); - - // Now print the table - let params = vec![ - StateParameter::AoL, - StateParameter::AoP, - StateParameter::Apoapsis, - StateParameter::C3, - StateParameter::Declination, - StateParameter::EccentricAnomaly, - StateParameter::Eccentricity, - StateParameter::Energy, - StateParameter::FlightPathAngle, - StateParameter::GeodeticHeight, - StateParameter::GeodeticLatitude, - StateParameter::GeodeticLongitude, - StateParameter::Hmag, - StateParameter::HX, - StateParameter::HY, - StateParameter::HZ, - StateParameter::Inclination, - StateParameter::MeanAnomaly, - StateParameter::Periapsis, - StateParameter::RightAscension, - StateParameter::RAAN, - StateParameter::Rmag, - StateParameter::SemiParameter, - StateParameter::SMA, - StateParameter::TrueLongitude, - StateParameter::Vmag, - StateParameter::X, - StateParameter::Y, - StateParameter::Z, - StateParameter::VX, - StateParameter::VY, - StateParameter::VZ, - ]; - for param in ¶ms { - let dual = cart_dual.partial_for(param).unwrap(); - println!( - "{:?} & {} & {} & {} & {} & {} & {} \\\\", - param, - if dual.wtr_x().abs() > 1e-2 { - "large" - } else if dual.wtr_x().abs() > 0.0 { - "small" - } else { - "none" - }, - if dual.wtr_y().abs() > 1e-2 { - "large" - } else if dual.wtr_y().abs() > 0.0 { - "small" - } else { - "none" - }, - if dual.wtr_z().abs() > 1e-2 { - "large" - } else if dual.wtr_z().abs() > 0.0 { - "small" - } else { - "none" - }, - if dual.wtr_vx().abs() > 1e-2 { - "large" - } else if dual.wtr_vx().abs() > 0.0 { - "small" - } else { - "none" - }, - if dual.wtr_vy().abs() > 1e-2 { - "large" - } else if dual.wtr_vy().abs() > 0.0 { - "small" - } else { - "none" - }, - if dual.wtr_vz().abs() > 1e-2 { - "large" - } else if dual.wtr_vz().abs() > 0.0 { - "small" - } else { - "none" - }, - // dual, - ); + let new_ra = kep.apoapsis_km() + f64::from(apsis_delta); + let new_rp = kep.periapsis_km() - f64::from(apsis_delta); + let new_orbit = kep.with_apoapsis_periapsis_km(new_ra, new_rp).unwrap(); + f64_eq!(new_orbit.apoapsis_km(), new_ra, "wrong ra"); + f64_eq!(new_orbit.periapsis_km(), new_rp, "wrong rp"); } } diff --git a/tests/ephemerides/parent_translation_verif.rs b/tests/ephemerides/parent_translation_verif.rs index 423e830f..dfd861d7 100644 --- a/tests/ephemerides/parent_translation_verif.rs +++ b/tests/ephemerides/parent_translation_verif.rs @@ -24,7 +24,7 @@ fn de438s_parent_translation_verif() { // "Load" the file via a memory map (avoids allocations) let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx: AniseContext = (&buf).try_into().unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); diff --git a/tests/ephemerides/paths.rs b/tests/ephemerides/paths.rs index fefb626b..f596ef9e 100644 --- a/tests/ephemerides/paths.rs +++ b/tests/ephemerides/paths.rs @@ -33,7 +33,7 @@ fn zero_translations() { ] { // "Load" the file via a memory map (avoids allocations) let buf = file_mmap!(path).unwrap(); - let ctx: AniseContext = (&buf).try_into().unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); // We know that these ephemerides files has exactly 14 ephemerides. assert_eq!( @@ -90,7 +90,7 @@ fn common_root_verif() { "./data/de440.anise", ] { let buf = file_mmap!(path).unwrap(); - let ctx: AniseContext = (&buf).try_into().unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); // The root of all these files should be the SSB assert_eq!( diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 791a8ea3..c1255f3d 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -27,7 +27,7 @@ fn de438s_translation_verif_venus2emb() { // "Load" the file via a memory map (avoids allocations) let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx: AniseContext = (&buf).try_into().unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); @@ -113,7 +113,7 @@ fn de438s_translation_verif_venus2luna() { // "Load" the file via a memory map (avoids allocations) let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx: AniseContext = (&buf).try_into().unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); @@ -207,7 +207,7 @@ fn de438s_translation_verif_emb2luna() { // "Load" the file via a memory map (avoids allocations) let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx: AniseContext = (&buf).try_into().unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); diff --git a/tests/naif.rs b/tests/naif.rs index 3d44dcd6..9741a9dc 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -11,8 +11,8 @@ use core::convert::TryInto; use anise::{ - asn1::context::AniseContext, - asn1::spline::{Evenness, Field, StateKind}, + repr::context::AniseContext, + repr::spline::{Evenness, Field, StateKind}, file_mmap, naif::{daf::DAF, spk::SPK, Endian}, prelude::*, From 1100917d814953e8dac63f7077be840f92e16c4a Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 4 Nov 2022 18:01:19 -0600 Subject: [PATCH 07/48] Add planetary constants to match text PCK Signed-off-by: Christopher Rabotin --- Cargo.toml | 1 - src/repr/constants/mod.rs | 18 ++++ src/repr/constants/phaseangle.rs | 46 +++++++++ src/repr/constants/planetary.rs | 71 ++++++++++++++ .../spacecraft.rs} | 0 src/repr/constants/triaxialellipsoid.rs | 51 ++++++++++ src/repr/constants/trigangle.rs | 96 +++++++++++++++++++ src/repr/context.rs | 4 +- src/repr/mod.rs | 2 +- src/repr/planetary_constants.rs | 73 -------------- 10 files changed, 285 insertions(+), 77 deletions(-) create mode 100644 src/repr/constants/mod.rs create mode 100644 src/repr/constants/phaseangle.rs create mode 100644 src/repr/constants/planetary.rs rename src/repr/{spacecraft_constants.rs => constants/spacecraft.rs} (100%) create mode 100644 src/repr/constants/triaxialellipsoid.rs create mode 100644 src/repr/constants/trigangle.rs delete mode 100644 src/repr/planetary_constants.rs diff --git a/Cargo.toml b/Cargo.toml index 36fe85b1..6dd1c529 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,6 @@ tabled = "0.10" const_format = "0.2" nalgebra = "0.31" approx = "0.5.1" -uom = {version = "0.33.0", features = ["autoconvert", "f64", "si"]} [dev-dependencies] rust-spice = "0.7.3" diff --git a/src/repr/constants/mod.rs b/src/repr/constants/mod.rs new file mode 100644 index 00000000..4f5bedd5 --- /dev/null +++ b/src/repr/constants/mod.rs @@ -0,0 +1,18 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +mod phaseangle; +mod planetary; +mod spacecraft; +mod triaxialellipsoid; +mod trigangle; + +pub use planetary::*; +pub use spacecraft::*; diff --git a/src/repr/constants/phaseangle.rs b/src/repr/constants/phaseangle.rs new file mode 100644 index 00000000..99df49bb --- /dev/null +++ b/src/repr/constants/phaseangle.rs @@ -0,0 +1,46 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ +use der::{Decode, Encode, Reader, Writer}; + +/// Angle data is represented as a polynomial of an angle, exactly like in SPICE PCK. +/// In fact, the following documentation is basically copied from [the required PCK reading](https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/pck.html). +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct PhaseAngle { + /// The fixed offset of the angular data + pub offset_deg: Option, + /// The rate of change of this angle per T, where T represents then number of centuries since J2000 TDB for right ascension and declination, and days since J2000 TDB for the axis twist. + pub rate_deg: Option, + /// The acceleration of this angle per T (same definition as above). + pub accel_deg: Option, +} + +impl Encode for PhaseAngle { + fn encoded_len(&self) -> der::Result { + self.offset_deg.encoded_len()? + + self.rate_deg.encoded_len()? + + self.accel_deg.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + self.offset_deg.encode(encoder)?; + self.rate_deg.encode(encoder)?; + self.accel_deg.encode(encoder) + } +} + +impl<'a> Decode<'a> for PhaseAngle { + fn decode>(decoder: &mut R) -> der::Result { + Ok(Self { + offset_deg: decoder.decode()?, + rate_deg: decoder.decode()?, + accel_deg: decoder.decode()?, + }) + } +} diff --git a/src/repr/constants/planetary.rs b/src/repr/constants/planetary.rs new file mode 100644 index 00000000..9fdc3a0b --- /dev/null +++ b/src/repr/constants/planetary.rs @@ -0,0 +1,71 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ +use der::{ + asn1::{SequenceOf, Utf8StringRef}, + Decode, Encode, Reader, Writer, +}; + +use super::{phaseangle::PhaseAngle, triaxialellipsoid::TriaxialEllipsoid, trigangle::TrigAngle}; + +pub const MAX_NUT_PREC_ANGLES: usize = 16; + +/// Planetary constants can store the same data as the SPICE textual PCK files +#[derive(Clone, Debug, PartialEq)] +pub struct PlanetaryConstants<'a> { + /// Name is used as the input for the hashing function. + pub name: &'a str, + /// Generic comments field + pub comments: &'a str, + /// The shape is always a tri axial ellipsoid + pub shape: TriaxialEllipsoid, + pub pole_right_ascension: PhaseAngle, + pub pole_declination: PhaseAngle, + pub prime_meridian: PhaseAngle, + pub nut_prec_angles: SequenceOf, +} + +impl<'a> Encode for PlanetaryConstants<'a> { + fn encoded_len(&self) -> der::Result { + Utf8StringRef::new(self.name)?.encoded_len()? + + Utf8StringRef::new(self.comments)?.encoded_len()? + + self.shape.encoded_len()? + + self.pole_right_ascension.encoded_len()? + + self.pole_declination.encoded_len()? + + self.prime_meridian.encoded_len()? + + self.nut_prec_angles.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + Utf8StringRef::new(self.name)?.encode(encoder)?; + Utf8StringRef::new(self.comments)?.encode(encoder)?; + self.shape.encode(encoder)?; + self.pole_right_ascension.encode(encoder)?; + self.pole_declination.encode(encoder)?; + self.prime_meridian.encode(encoder)?; + self.nut_prec_angles.encode(encoder) + } +} + +impl<'a> Decode<'a> for PlanetaryConstants<'a> { + fn decode>(decoder: &mut R) -> der::Result { + let name: Utf8StringRef = decoder.decode()?; + let comments: Utf8StringRef = decoder.decode()?; + + Ok(Self { + name: name.as_str(), + comments: comments.as_str(), + shape: decoder.decode()?, + pole_right_ascension: decoder.decode()?, + pole_declination: decoder.decode()?, + prime_meridian: decoder.decode()?, + nut_prec_angles: decoder.decode()?, + }) + } +} diff --git a/src/repr/spacecraft_constants.rs b/src/repr/constants/spacecraft.rs similarity index 100% rename from src/repr/spacecraft_constants.rs rename to src/repr/constants/spacecraft.rs diff --git a/src/repr/constants/triaxialellipsoid.rs b/src/repr/constants/triaxialellipsoid.rs new file mode 100644 index 00000000..692f9be1 --- /dev/null +++ b/src/repr/constants/triaxialellipsoid.rs @@ -0,0 +1,51 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ +use der::{Decode, Encode, Reader, Writer}; + +/// Only the Triaxial Ellipsoid shape model is currently supported by ANISE. +/// This is directly inspired from SPICE PCK. +/// > For each body, three radii are listed: The first number is +/// > the largest equatorial radius (the length of the semi-axis +/// > containing the prime meridian), the second number is the smaller +/// > equatorial radius, and the third is the polar radius. +/// +/// Example: Radii of the Earth. +/// +/// BODY399_RADII = ( 6378.1366 6378.1366 6356.7519 ) +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct TriaxialEllipsoid { + pub largest_equatorial_radius_km: Option, + pub smallest_equatorial_radius_km: Option, + pub polar_radius_km: Option, +} + +impl Encode for TriaxialEllipsoid { + fn encoded_len(&self) -> der::Result { + self.largest_equatorial_radius_km.encoded_len()? + + self.smallest_equatorial_radius_km.encoded_len()? + + self.polar_radius_km.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + self.largest_equatorial_radius_km.encode(encoder)?; + self.smallest_equatorial_radius_km.encode(encoder)?; + self.polar_radius_km.encode(encoder) + } +} + +impl<'a> Decode<'a> for TriaxialEllipsoid { + fn decode>(decoder: &mut R) -> der::Result { + Ok(Self { + largest_equatorial_radius_km: decoder.decode()?, + smallest_equatorial_radius_km: decoder.decode()?, + polar_radius_km: decoder.decode()?, + }) + } +} diff --git a/src/repr/constants/trigangle.rs b/src/repr/constants/trigangle.rs new file mode 100644 index 00000000..3bc86b58 --- /dev/null +++ b/src/repr/constants/trigangle.rs @@ -0,0 +1,96 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ +use der::{Decode, Encode, Reader, Writer}; + +use super::phaseangle::PhaseAngle; + +/// Trigonometric angle polynomials are used almost exclusively for satellites. +/// This structure enables the PCK level support for this information while also enforcing the correct length. +/// In fact, the following documentation is **copied** from [the required PCK reading](https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/pck.html). +/// +/// Orientation models for natural satellites of planets are a little more complicated; in addition to polynomial terms, the RA, DEC, and W expressions include trigonometric terms. The arguments of the trigonometric terms are linear polynomials. These arguments are sometimes called ``phase angles.'' However, within CSPICE internal documentation, these quantities often are called ``nutation precession angles.'' That terminology is used here. +/// +/// Expressions for the right ascension and declination of the north pole and the location of the prime meridian for any satellite of a given planet are as follows: +/// +/// 2 ____ +/// RA2*t \ +/// RA = RA0 + RA1*t/T + ------ + / a * sin * theta +/// 2 ---- i i +/// T i +/// +/// 2 ____ +/// DEC2*t \ +/// DEC = DEC0 + DEC1*t/T + ------- + / d * cos * theta +/// 2 ---- i i +/// T i +/// +/// 2 ____ +/// W2*t \ +/// W = W0 + W1*t/d + ----- + / w * sin * theta +/// 2 ---- i i +/// d i +/// +/// where +/// +/// d = seconds/day +/// T = seconds/Julian century +/// t = ephemeris time, expressed as seconds past a reference epoch +/// +/// RA0, RA1, DEC0, DEC1, W0, and W1 are constants specific to each satellite. +/// +/// The nutation precession angles +/// +/// theta +/// i +/// +/// are specific to each planet. The coefficients +/// +/// a , d , and w +/// i i i +/// +/// are specific to each satellite. +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct TrigAngle { + /// Right ascension angle factor for this trig polynomial + pub right_ascension_deg: Option, + /// Declination angle factor for this trig polynomial + pub declination_deg: Option, + /// Prime meridian angle factor for this trig polynomial + pub prime_meridian_deg: Option, + /// Nutation and precession phase angle data of each trigonometric polynomial, e.g. J1-J10 and Ja-Je for Jupiter data. + pub nut_prec_angle: PhaseAngle, +} + +impl Encode for TrigAngle { + fn encoded_len(&self) -> der::Result { + self.right_ascension_deg.encoded_len()? + + self.declination_deg.encoded_len()? + + self.prime_meridian_deg.encoded_len()? + + self.nut_prec_angle.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + self.right_ascension_deg.encode(encoder)?; + self.declination_deg.encode(encoder)?; + self.prime_meridian_deg.encode(encoder)?; + self.nut_prec_angle.encode(encoder) + } +} + +impl<'a> Decode<'a> for TrigAngle { + fn decode>(decoder: &mut R) -> der::Result { + Ok(Self { + right_ascension_deg: decoder.decode()?, + declination_deg: decoder.decode()?, + prime_meridian_deg: decoder.decode()?, + nut_prec_angle: decoder.decode()?, + }) + } +} diff --git a/src/repr/context.rs b/src/repr/context.rs index e5bfd9a3..71084bd4 100644 --- a/src/repr/context.rs +++ b/src/repr/context.rs @@ -10,8 +10,8 @@ use der::{asn1::SequenceOf, Decode, Encode, Reader, Writer}; use super::{ - ephemeris::Ephemeris, lookuptable::LookUpTable, metadata::Metadata, - spacecraft_constants::SpacecraftConstants, MAX_TRAJECTORIES, + constants::SpacecraftConstants, ephemeris::Ephemeris, lookuptable::LookUpTable, + metadata::Metadata, MAX_TRAJECTORIES, }; /// A Context is the core structure which stores all of the ANISE data. diff --git a/src/repr/mod.rs b/src/repr/mod.rs index 72b2d378..3541c260 100644 --- a/src/repr/mod.rs +++ b/src/repr/mod.rs @@ -22,7 +22,7 @@ pub mod metadata; pub mod semver; pub mod spline; // pub mod splinecoeffs; -pub mod spacecraft_constants; +pub mod constants; pub mod units; use self::semver::Semver; diff --git a/src/repr/planetary_constants.rs b/src/repr/planetary_constants.rs deleted file mode 100644 index f451d28b..00000000 --- a/src/repr/planetary_constants.rs +++ /dev/null @@ -1,73 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ -use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; - -/// Planetary constants can store the same data as the SPICE textual PCK files -#[derive(Copy, Clone, Debug, PartialEq)] -pub struct PlanetaryConstants<'a> { - /// Name is used as the input for the hashing function. - pub name: &'a str, - /// Generic comments field - pub comments: &'a str, - /// Structural mass of the spacecraft in kg - pub dry_mass_kg: Option, - /// Total fuel mass of the spacecraft in kg - pub fuel_mass_kg: Option, - /// Solar radiation pressure area in m^2 - pub srp_area_m2: Option, - /// Solar radiation pressure coefficient of reflectivity (C_r) - pub srp_coeff_reflectivity: Option, - /// Atmospheric drag area in m^2 - pub drag_area_m2: Option, - /// Drag coefficient (C_d) - pub drag_coeff: Option, -} - -impl<'a> Encode for PlanetaryConstants<'a> { - fn encoded_len(&self) -> der::Result { - Utf8StringRef::new(self.name)?.encoded_len()? - + Utf8StringRef::new(self.comments)?.encoded_len()? - + self.dry_mass_kg.encoded_len()? - + self.fuel_mass_kg.encoded_len()? - + self.srp_area_m2.encoded_len()? - + self.srp_coeff_reflectivity.encoded_len()? - + self.drag_area_m2.encoded_len()? - + self.drag_coeff.encoded_len()? - } - - fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { - Utf8StringRef::new(self.name)?.encode(encoder)?; - Utf8StringRef::new(self.comments)?.encode(encoder)?; - self.dry_mass_kg.encode(encoder)?; - self.fuel_mass_kg.encode(encoder)?; - self.srp_area_m2.encode(encoder)?; - self.srp_coeff_reflectivity.encode(encoder)?; - self.drag_area_m2.encode(encoder)?; - self.drag_coeff.encode(encoder) - } -} - -impl<'a> Decode<'a> for PlanetaryConstants<'a> { - fn decode>(decoder: &mut R) -> der::Result { - let name: Utf8StringRef = decoder.decode()?; - let comments: Utf8StringRef = decoder.decode()?; - - Ok(Self { - name: name.as_str(), - comments: comments.as_str(), - dry_mass_kg: decoder.decode()?, - fuel_mass_kg: decoder.decode()?, - srp_area_m2: decoder.decode()?, - srp_coeff_reflectivity: decoder.decode()?, - drag_area_m2: decoder.decode()?, - drag_coeff: decoder.decode()?, - }) - } -} From 297a6f1428c6698624f29de1ab788b3a77f35b53 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 4 Nov 2022 18:03:59 -0600 Subject: [PATCH 08/48] Rename module again Signed-off-by: Christopher Rabotin --- src/cli/inspect.rs | 2 +- src/context/append.rs | 2 +- src/context/integrity.rs | 2 +- src/context/load.rs | 2 +- src/context/merge.rs | 2 +- src/context/rename.rs | 2 +- src/context/save.rs | 2 +- src/ephemerides/mod.rs | 2 +- src/ephemerides/paths.rs | 2 +- src/ephemerides/translate_to_parent.rs | 8 ++++---- src/ephemerides/translations.rs | 4 ++-- src/errors.rs | 2 +- src/lib.rs | 6 +++--- src/math/interpolation/chebyshev.rs | 2 +- src/naif/spk/datatype.rs | 2 +- src/naif/spk/mod.rs | 12 ++++++------ src/spline.rs | 2 +- src/{repr => structure}/common.rs | 0 src/{repr => structure}/constants/mod.rs | 0 src/{repr => structure}/constants/phaseangle.rs | 0 src/{repr => structure}/constants/planetary.rs | 0 src/{repr => structure}/constants/spacecraft.rs | 0 .../constants/triaxialellipsoid.rs | 0 src/{repr => structure}/constants/trigangle.rs | 0 src/{repr => structure}/context.rs | 0 src/{repr => structure}/ephemeris.rs | 0 src/{repr => structure}/lookuptable.rs | 0 src/{repr => structure}/metadata.rs | 0 src/{repr => structure}/mod.rs | 0 src/{repr => structure}/semver.rs | 0 src/{repr => structure}/spline/covkind.rs | 0 src/{repr => structure}/spline/evenness.rs | 0 src/{repr => structure}/spline/field.rs | 0 src/{repr => structure}/spline/meta.rs | 0 src/{repr => structure}/spline/mod.rs | 0 src/{repr => structure}/spline/splines.rs | 0 src/{repr => structure}/spline/statekind.rs | 0 src/{repr => structure}/splinecoeffs.rs | 0 src/{repr => structure}/units.rs | 0 tests/naif.rs | 4 ++-- 40 files changed, 30 insertions(+), 30 deletions(-) rename src/{repr => structure}/common.rs (100%) rename src/{repr => structure}/constants/mod.rs (100%) rename src/{repr => structure}/constants/phaseangle.rs (100%) rename src/{repr => structure}/constants/planetary.rs (100%) rename src/{repr => structure}/constants/spacecraft.rs (100%) rename src/{repr => structure}/constants/triaxialellipsoid.rs (100%) rename src/{repr => structure}/constants/trigangle.rs (100%) rename src/{repr => structure}/context.rs (100%) rename src/{repr => structure}/ephemeris.rs (100%) rename src/{repr => structure}/lookuptable.rs (100%) rename src/{repr => structure}/metadata.rs (100%) rename src/{repr => structure}/mod.rs (100%) rename src/{repr => structure}/semver.rs (100%) rename src/{repr => structure}/spline/covkind.rs (100%) rename src/{repr => structure}/spline/evenness.rs (100%) rename src/{repr => structure}/spline/field.rs (100%) rename src/{repr => structure}/spline/meta.rs (100%) rename src/{repr => structure}/spline/mod.rs (100%) rename src/{repr => structure}/spline/splines.rs (100%) rename src/{repr => structure}/spline/statekind.rs (100%) rename src/{repr => structure}/splinecoeffs.rs (100%) rename src/{repr => structure}/units.rs (100%) diff --git a/src/cli/inspect.rs b/src/cli/inspect.rs index 573c0453..4f40b697 100644 --- a/src/cli/inspect.rs +++ b/src/cli/inspect.rs @@ -3,7 +3,7 @@ use std::fmt::{Display, Error as FmtError, Formatter}; use tabled::{Style, Table, Tabled}; use crate::HashType; -use crate::{repr::common::InterpolationKind, prelude::AniseContext}; +use crate::{structure::common::InterpolationKind, prelude::AniseContext}; /// A row is used only to display a context #[derive(Tabled)] diff --git a/src/context/append.rs b/src/context/append.rs index 148e0865..4be97f47 100644 --- a/src/context/append.rs +++ b/src/context/append.rs @@ -11,7 +11,7 @@ use crate::errors::IntegrityErrorKind; use crate::log::{error, trace}; use crate::{ - repr::{context::AniseContext, ephemeris::Ephemeris, MAX_TRAJECTORIES}, + structure::{context::AniseContext, ephemeris::Ephemeris, MAX_TRAJECTORIES}, errors::{AniseError, InternalErrorKind}, }; use crc32fast::hash; diff --git a/src/context/integrity.rs b/src/context/integrity.rs index 7e72a601..d4671467 100644 --- a/src/context/integrity.rs +++ b/src/context/integrity.rs @@ -11,7 +11,7 @@ use log::error; use crate::{ - repr::context::AniseContext, + structure::context::AniseContext, errors::{AniseError, IntegrityErrorKind}, }; diff --git a/src/context/load.rs b/src/context/load.rs index 9f5e4509..9bd553ae 100644 --- a/src/context/load.rs +++ b/src/context/load.rs @@ -12,7 +12,7 @@ use crate::der::Decode; use crate::log::{error, trace}; use crate::{ errors::AniseError, - repr::{context::AniseContext, semver::Semver, ANISE_VERSION}, + structure::{context::AniseContext, semver::Semver, ANISE_VERSION}, }; impl<'a> AniseContext<'a> { diff --git a/src/context/merge.rs b/src/context/merge.rs index 7c0bb493..2c76b47d 100644 --- a/src/context/merge.rs +++ b/src/context/merge.rs @@ -9,7 +9,7 @@ */ use crate::log::{info, trace}; -use crate::{repr::context::AniseContext, errors::AniseError}; +use crate::{structure::context::AniseContext, errors::AniseError}; impl<'a> AniseContext<'a> { /// Clones this context and merges it with the other. diff --git a/src/context/rename.rs b/src/context/rename.rs index b406c5e8..4328be4d 100644 --- a/src/context/rename.rs +++ b/src/context/rename.rs @@ -8,7 +8,7 @@ * Documentation: https://nyxspace.com/ */ -use crate::repr::context::AniseContext; +use crate::structure::context::AniseContext; impl<'a> AniseContext<'a> { pub fn rename_ephemeris_traj_mut(&mut self) { diff --git a/src/context/save.rs b/src/context/save.rs index 924f70b8..ca51d533 100644 --- a/src/context/save.rs +++ b/src/context/save.rs @@ -9,7 +9,7 @@ */ use crate::{ - repr::context::AniseContext, + structure::context::AniseContext, errors::{AniseError, InternalErrorKind}, }; use der::Encode; diff --git a/src/ephemerides/mod.rs b/src/ephemerides/mod.rs index 5fed4c98..c1ab8dc3 100644 --- a/src/ephemerides/mod.rs +++ b/src/ephemerides/mod.rs @@ -10,7 +10,7 @@ use hifitime::{Epoch, TimeUnits}; -use crate::repr::{ephemeris::Ephemeris, spline::Evenness}; +use crate::structure::{ephemeris::Ephemeris, spline::Evenness}; pub mod paths; pub mod translations; diff --git a/src/ephemerides/paths.rs b/src/ephemerides/paths.rs index eb706fc0..d2c664fa 100644 --- a/src/ephemerides/paths.rs +++ b/src/ephemerides/paths.rs @@ -14,7 +14,7 @@ use crate::constants::orientations::J2000; use crate::errors::InternalErrorKind; use crate::HashType; use crate::{ - repr::{context::AniseContext, ephemeris::Ephemeris}, + structure::{context::AniseContext, ephemeris::Ephemeris}, astro::Frame, errors::{AniseError, IntegrityErrorKind}, }; diff --git a/src/ephemerides/translate_to_parent.rs b/src/ephemerides/translate_to_parent.rs index 2b4a66ec..97f8c3b0 100644 --- a/src/ephemerides/translate_to_parent.rs +++ b/src/ephemerides/translate_to_parent.rs @@ -10,14 +10,14 @@ use log::trace; -use crate::repr::common::InterpolationKind; -use crate::repr::spline::Field; -use crate::repr::units::*; +use crate::structure::common::InterpolationKind; +use crate::structure::spline::Field; +use crate::structure::units::*; use crate::astro::Aberration; use crate::hifitime::Epoch; use crate::math::interpolation::chebyshev::cheby_eval; use crate::math::Vector3; -use crate::{repr::context::AniseContext, astro::Frame, errors::AniseError}; +use crate::{structure::context::AniseContext, astro::Frame, errors::AniseError}; impl<'a> AniseContext<'a> { /// Returns the position vector and velocity vector of the `source` with respect to its parent in the ephemeris at the provided epoch, diff --git a/src/ephemerides/translations.rs b/src/ephemerides/translations.rs index d301403d..27052462 100644 --- a/src/ephemerides/translations.rs +++ b/src/ephemerides/translations.rs @@ -10,13 +10,13 @@ use log::error; -use crate::repr::units::*; +use crate::structure::units::*; use crate::astro::Aberration; use crate::hifitime::Epoch; use crate::math::cartesian::CartesianState; use crate::math::Vector3; use crate::{ - repr::context::AniseContext, + structure::context::AniseContext, astro::{Frame, FrameTrait}, errors::AniseError, }; diff --git a/src/errors.rs b/src/errors.rs index d81f8672..db187575 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -10,7 +10,7 @@ use hifitime::Epoch; -use crate::repr::semver::Semver; +use crate::structure::semver::Semver; use crate::astro::Frame; use crate::der::Error as Asn1Error; use crate::der::Error as DerError; diff --git a/src/lib.rs b/src/lib.rs index 908ad84d..9b5e3038 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -28,8 +28,8 @@ pub mod time { pub mod prelude { pub use crate::astro::Aberration; pub use crate::errors::AniseError; - pub use crate::repr::context::AniseContext; - pub use crate::repr::units::*; + pub use crate::structure::context::AniseContext; + pub use crate::structure::units::*; pub use crate::time::*; pub use std::fs::File; } @@ -37,7 +37,7 @@ pub mod prelude { pub mod astro; pub mod cli; pub mod naif; -pub mod repr; +pub mod structure; /// Defines the number of bytes in a double (prevents magic numbers) pub(crate) const DBL_SIZE: usize = 8; diff --git a/src/math/interpolation/chebyshev.rs b/src/math/interpolation/chebyshev.rs index 443dcf85..9d8356d8 100644 --- a/src/math/interpolation/chebyshev.rs +++ b/src/math/interpolation/chebyshev.rs @@ -11,7 +11,7 @@ use hifitime::{Epoch, Unit as DurationUnit}; use crate::{ - repr::{ + structure::{ spline::Evenness, spline::{Field, Splines}, }, diff --git a/src/naif/spk/datatype.rs b/src/naif/spk/datatype.rs index d92dcbdc..ff46befc 100644 --- a/src/naif/spk/datatype.rs +++ b/src/naif/spk/datatype.rs @@ -8,7 +8,7 @@ * Documentation: https://nyxspace.com/ */ -use crate::{repr::spline::StateKind, prelude::AniseError}; +use crate::{structure::spline::StateKind, prelude::AniseError}; #[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum DataType { diff --git a/src/naif/spk/mod.rs b/src/naif/spk/mod.rs index 8c208d83..fa41321f 100644 --- a/src/naif/spk/mod.rs +++ b/src/naif/spk/mod.rs @@ -14,12 +14,12 @@ use self::datatype::DataType; use self::segment::{Record, SegMetaData, Segment}; use super::daf::{Endian, DAF}; -use crate::repr::common::InterpolationKind; -use crate::repr::context::AniseContext; -use crate::repr::ephemeris::Ephemeris; -use crate::repr::metadata::Metadata; -use crate::repr::spline::{Evenness, Field, SplineMeta, Splines, StateKind}; -use crate::repr::units::{DistanceUnit, TimeUnit}; +use crate::structure::common::InterpolationKind; +use crate::structure::context::AniseContext; +use crate::structure::ephemeris::Ephemeris; +use crate::structure::metadata::Metadata; +use crate::structure::spline::{Evenness, Field, SplineMeta, Splines, StateKind}; +use crate::structure::units::{DistanceUnit, TimeUnit}; use crate::constants::orientations::J2000; use crate::errors::InternalErrorKind; use crate::prelude::AniseError; diff --git a/src/spline.rs b/src/spline.rs index fc30ba41..02f81a8d 100644 --- a/src/spline.rs +++ b/src/spline.rs @@ -12,7 +12,7 @@ use crc32fast::hash; use log::error; use crate::{ - repr::{ + structure::{ common::InterpolationKind, spline::{Field, Splines}, }, diff --git a/src/repr/common.rs b/src/structure/common.rs similarity index 100% rename from src/repr/common.rs rename to src/structure/common.rs diff --git a/src/repr/constants/mod.rs b/src/structure/constants/mod.rs similarity index 100% rename from src/repr/constants/mod.rs rename to src/structure/constants/mod.rs diff --git a/src/repr/constants/phaseangle.rs b/src/structure/constants/phaseangle.rs similarity index 100% rename from src/repr/constants/phaseangle.rs rename to src/structure/constants/phaseangle.rs diff --git a/src/repr/constants/planetary.rs b/src/structure/constants/planetary.rs similarity index 100% rename from src/repr/constants/planetary.rs rename to src/structure/constants/planetary.rs diff --git a/src/repr/constants/spacecraft.rs b/src/structure/constants/spacecraft.rs similarity index 100% rename from src/repr/constants/spacecraft.rs rename to src/structure/constants/spacecraft.rs diff --git a/src/repr/constants/triaxialellipsoid.rs b/src/structure/constants/triaxialellipsoid.rs similarity index 100% rename from src/repr/constants/triaxialellipsoid.rs rename to src/structure/constants/triaxialellipsoid.rs diff --git a/src/repr/constants/trigangle.rs b/src/structure/constants/trigangle.rs similarity index 100% rename from src/repr/constants/trigangle.rs rename to src/structure/constants/trigangle.rs diff --git a/src/repr/context.rs b/src/structure/context.rs similarity index 100% rename from src/repr/context.rs rename to src/structure/context.rs diff --git a/src/repr/ephemeris.rs b/src/structure/ephemeris.rs similarity index 100% rename from src/repr/ephemeris.rs rename to src/structure/ephemeris.rs diff --git a/src/repr/lookuptable.rs b/src/structure/lookuptable.rs similarity index 100% rename from src/repr/lookuptable.rs rename to src/structure/lookuptable.rs diff --git a/src/repr/metadata.rs b/src/structure/metadata.rs similarity index 100% rename from src/repr/metadata.rs rename to src/structure/metadata.rs diff --git a/src/repr/mod.rs b/src/structure/mod.rs similarity index 100% rename from src/repr/mod.rs rename to src/structure/mod.rs diff --git a/src/repr/semver.rs b/src/structure/semver.rs similarity index 100% rename from src/repr/semver.rs rename to src/structure/semver.rs diff --git a/src/repr/spline/covkind.rs b/src/structure/spline/covkind.rs similarity index 100% rename from src/repr/spline/covkind.rs rename to src/structure/spline/covkind.rs diff --git a/src/repr/spline/evenness.rs b/src/structure/spline/evenness.rs similarity index 100% rename from src/repr/spline/evenness.rs rename to src/structure/spline/evenness.rs diff --git a/src/repr/spline/field.rs b/src/structure/spline/field.rs similarity index 100% rename from src/repr/spline/field.rs rename to src/structure/spline/field.rs diff --git a/src/repr/spline/meta.rs b/src/structure/spline/meta.rs similarity index 100% rename from src/repr/spline/meta.rs rename to src/structure/spline/meta.rs diff --git a/src/repr/spline/mod.rs b/src/structure/spline/mod.rs similarity index 100% rename from src/repr/spline/mod.rs rename to src/structure/spline/mod.rs diff --git a/src/repr/spline/splines.rs b/src/structure/spline/splines.rs similarity index 100% rename from src/repr/spline/splines.rs rename to src/structure/spline/splines.rs diff --git a/src/repr/spline/statekind.rs b/src/structure/spline/statekind.rs similarity index 100% rename from src/repr/spline/statekind.rs rename to src/structure/spline/statekind.rs diff --git a/src/repr/splinecoeffs.rs b/src/structure/splinecoeffs.rs similarity index 100% rename from src/repr/splinecoeffs.rs rename to src/structure/splinecoeffs.rs diff --git a/src/repr/units.rs b/src/structure/units.rs similarity index 100% rename from src/repr/units.rs rename to src/structure/units.rs diff --git a/tests/naif.rs b/tests/naif.rs index 9741a9dc..6e6e1373 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -11,8 +11,8 @@ use core::convert::TryInto; use anise::{ - repr::context::AniseContext, - repr::spline::{Evenness, Field, StateKind}, + structure::context::AniseContext, + structure::spline::{Evenness, Field, StateKind}, file_mmap, naif::{daf::DAF, spk::SPK, Endian}, prelude::*, From e49912486fc9d2db2ad26fd19ecf87d3e31543e2 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 4 Nov 2022 23:06:21 -0600 Subject: [PATCH 09/48] Cleanup orientation Will now write the API to build frames Signed-off-by: Christopher Rabotin --- src/cli/inspect.rs | 19 ++- src/context/append.rs | 8 +- src/context/integrity.rs | 4 +- src/context/merge.rs | 4 +- src/ephemerides/paths.rs | 5 +- src/ephemerides/translate_to_parent.rs | 12 +- src/ephemerides/translations.rs | 20 +-- src/lib.rs | 1 + src/naif/spk/mod.rs | 10 +- src/orientation/mod.rs | 93 ++++++++++++++ src/structure/constants/mod.rs | 10 +- src/structure/constants/planetary.rs | 30 ++--- src/structure/context.rs | 18 ++- src/structure/ephemeris.rs | 11 +- src/structure/mod.rs | 4 +- src/structure/orientation/mod.rs | 50 ++++++++ src/structure/orientation/orient_data.rs | 118 ++++++++++++++++++ src/structure/units.rs | 42 +++---- tests/ephemerides/parent_translation_verif.rs | 4 +- tests/ephemerides/translation.rs | 8 +- 20 files changed, 370 insertions(+), 101 deletions(-) create mode 100644 src/orientation/mod.rs create mode 100644 src/structure/orientation/mod.rs create mode 100644 src/structure/orientation/orient_data.rs diff --git a/src/cli/inspect.rs b/src/cli/inspect.rs index 4f40b697..daeb6af7 100644 --- a/src/cli/inspect.rs +++ b/src/cli/inspect.rs @@ -2,8 +2,9 @@ use crc32fast::hash; use std::fmt::{Display, Error as FmtError, Formatter}; use tabled::{Style, Table, Tabled}; +use crate::prelude::AniseContext; +use crate::structure::orientation::orient_data::OrientationData; use crate::HashType; -use crate::{structure::common::InterpolationKind, prelude::AniseContext}; /// A row is used only to display a context #[derive(Tabled)] @@ -13,7 +14,7 @@ struct Row<'a> { hash: HashType, start_epoch: String, end_epoch: String, - interpolation_kind: InterpolationKind, + interpolation_kind: String, } impl<'a> Display for AniseContext<'a> { @@ -54,7 +55,7 @@ impl<'a> Display for AniseContext<'a> { hash: hash(ephem.name.as_bytes()), start_epoch: format!("{:?}", ephem.start_epoch()), end_epoch: format!("{:?}", ephem.end_epoch()), - interpolation_kind: ephem.interpolation_kind, + interpolation_kind: format!("{}", ephem.interpolation_kind), }); } // Add the orientation data @@ -65,7 +66,17 @@ impl<'a> Display for AniseContext<'a> { hash: hash(orientation.name.as_bytes()), start_epoch: format!("{:?}", orientation.start_epoch()), end_epoch: format!("{:?}", orientation.end_epoch()), - interpolation_kind: orientation.interpolation_kind, + interpolation_kind: match orientation.orientation_data { + OrientationData::PlanetaryConstant { .. } => { + "N/A (planetary constant)".to_string() + } + OrientationData::HighPrecision { + ref_epoch: _, + backward: _, + interpolation_kind, + splines: _, + } => format!("{interpolation_kind}"), + }, }); } let mut tbl = Table::new(rows); diff --git a/src/context/append.rs b/src/context/append.rs index 4be97f47..c0c64f09 100644 --- a/src/context/append.rs +++ b/src/context/append.rs @@ -10,9 +10,10 @@ use crate::errors::IntegrityErrorKind; use crate::log::{error, trace}; +use crate::structure::orientation::Orientation; use crate::{ - structure::{context::AniseContext, ephemeris::Ephemeris, MAX_TRAJECTORIES}, errors::{AniseError, InternalErrorKind}, + structure::{context::AniseContext, ephemeris::Ephemeris, MAX_TRAJECTORIES}, }; use crc32fast::hash; @@ -93,7 +94,10 @@ impl<'a> AniseContext<'a> { /// + If this ephemeris should have been added but there are already too many items compared to what the library supports, /// then this returns an Indexing Error. /// TODO: Change this from ephemeris to Orientation and update visibility - pub(crate) fn append_orientation_mut(&mut self, o: Ephemeris<'a>) -> Result { + pub(crate) fn append_orientation_mut( + &mut self, + o: Orientation<'a>, + ) -> Result { let new_hash = hash(o.name.as_bytes()); if let Ok(self_idx) = self.orientation_lut.index_for_hash(&new_hash) { if self diff --git a/src/context/integrity.rs b/src/context/integrity.rs index d4671467..3d6dd7ca 100644 --- a/src/context/integrity.rs +++ b/src/context/integrity.rs @@ -11,8 +11,8 @@ use log::error; use crate::{ - structure::context::AniseContext, errors::{AniseError, IntegrityErrorKind}, + structure::context::AniseContext, }; impl<'a> AniseContext<'a> { @@ -60,7 +60,7 @@ impl<'a> AniseContext<'a> { AniseError::IntegrityError(IntegrityErrorKind::DataMissing) })?; // Check that the data is valid - data.splines.check_integrity()?; + data.check_integrity()?; // Check that the hashed name is in the LUT and corresponds to this index let lut_idx = self.orientation_lut.index_for_key(data.name).map_err(|_| { error!("[integrity] {} not in orientation lookup table", data.name); diff --git a/src/context/merge.rs b/src/context/merge.rs index 2c76b47d..4bff73f4 100644 --- a/src/context/merge.rs +++ b/src/context/merge.rs @@ -9,7 +9,7 @@ */ use crate::log::{info, trace}; -use crate::{structure::context::AniseContext, errors::AniseError}; +use crate::{errors::AniseError, structure::context::AniseContext}; impl<'a> AniseContext<'a> { /// Clones this context and merges it with the other. @@ -66,7 +66,7 @@ impl<'a> AniseContext<'a> { let data_idx = other.orientation_lut.index_for_hash(new_hash)?.into(); trace!("[merge] fetching orientation idx={data_idx} for hash {new_hash}"); let other_o = other.try_orientation_data(data_idx)?; - if self.append_orientation_mut(*other_o)? { + if self.append_orientation_mut(other_o.clone())? { num_orientation_added += 1; } } diff --git a/src/ephemerides/paths.rs b/src/ephemerides/paths.rs index d2c664fa..b1dca5c0 100644 --- a/src/ephemerides/paths.rs +++ b/src/ephemerides/paths.rs @@ -12,11 +12,12 @@ use log::{error, trace}; use crate::constants::orientations::J2000; use crate::errors::InternalErrorKind; +use crate::structure::orientation::Orientation; use crate::HashType; use crate::{ - structure::{context::AniseContext, ephemeris::Ephemeris}, astro::Frame, errors::{AniseError, IntegrityErrorKind}, + structure::{context::AniseContext, ephemeris::Ephemeris}, }; /// **Limitation:** no translation or rotation may have more than 8 nodes. @@ -86,7 +87,7 @@ impl<'a> AniseContext<'a> { } /// Try to return the orientation for the provided index, or returns an error. - pub fn try_orientation_data(&self, idx: usize) -> Result<&'a Ephemeris, AniseError> { + pub fn try_orientation_data(&self, idx: usize) -> Result<&'a Orientation, AniseError> { self.orientation_data .get(idx) .ok_or(AniseError::IntegrityError(IntegrityErrorKind::LookupTable)) diff --git a/src/ephemerides/translate_to_parent.rs b/src/ephemerides/translate_to_parent.rs index 97f8c3b0..5a35e538 100644 --- a/src/ephemerides/translate_to_parent.rs +++ b/src/ephemerides/translate_to_parent.rs @@ -10,14 +10,14 @@ use log::trace; -use crate::structure::common::InterpolationKind; -use crate::structure::spline::Field; -use crate::structure::units::*; use crate::astro::Aberration; use crate::hifitime::Epoch; use crate::math::interpolation::chebyshev::cheby_eval; use crate::math::Vector3; -use crate::{structure::context::AniseContext, astro::Frame, errors::AniseError}; +use crate::structure::common::InterpolationKind; +use crate::structure::spline::Field; +use crate::structure::units::*; +use crate::{astro::Frame, errors::AniseError, structure::context::AniseContext}; impl<'a> AniseContext<'a> { /// Returns the position vector and velocity vector of the `source` with respect to its parent in the ephemeris at the provided epoch, @@ -36,7 +36,7 @@ impl<'a> AniseContext<'a> { source: Frame, epoch: Epoch, _ab_corr: Aberration, - distance_unit: DistanceUnit, + distance_unit: LengthUnit, time_unit: TimeUnit, ) -> Result<(Vector3, Vector3, Vector3, Frame), AniseError> { // TODO: Create a CartesianState struct which can be "upgraded" to an Orbit if the frame is of the correct type? @@ -104,7 +104,7 @@ impl<'a> AniseContext<'a> { } // Convert the units based on the storage units. - let dist_unit_factor = ephem.distance_unit.from_meters() * distance_unit.to_meters(); + let dist_unit_factor = ephem.length_unit.from_meters() * distance_unit.to_meters(); let time_unit_factor = ephem.time_unit.from_seconds() * time_unit.in_seconds(); Ok(( diff --git a/src/ephemerides/translations.rs b/src/ephemerides/translations.rs index 27052462..7593851e 100644 --- a/src/ephemerides/translations.rs +++ b/src/ephemerides/translations.rs @@ -10,15 +10,15 @@ use log::error; -use crate::structure::units::*; use crate::astro::Aberration; use crate::hifitime::Epoch; use crate::math::cartesian::CartesianState; use crate::math::Vector3; +use crate::structure::units::*; use crate::{ - structure::context::AniseContext, astro::{Frame, FrameTrait}, errors::AniseError, + structure::context::AniseContext, }; /// **Limitation:** no translation or rotation may have more than 8 nodes. @@ -36,7 +36,7 @@ impl<'a> AniseContext<'a> { to_frame: Frame, epoch: Epoch, ab_corr: Aberration, - distance_unit: DistanceUnit, + distance_unit: LengthUnit, time_unit: TimeUnit, ) -> Result { if from_frame == to_frame { @@ -121,7 +121,7 @@ impl<'a> AniseContext<'a> { to_frame, epoch, ab_corr, - DistanceUnit::Kilometer, + LengthUnit::Kilometer, TimeUnit::Second, ) } @@ -139,7 +139,7 @@ impl<'a> AniseContext<'a> { to_frame, epoch, ab_corr, - DistanceUnit::Meter, + LengthUnit::Meter, TimeUnit::Second, ) } @@ -156,7 +156,7 @@ impl<'a> AniseContext<'a> { to_frame, epoch, Aberration::None, - DistanceUnit::Kilometer, + LengthUnit::Kilometer, TimeUnit::Second, ) } @@ -173,7 +173,7 @@ impl<'a> AniseContext<'a> { to_frame, epoch, Aberration::None, - DistanceUnit::Meter, + LengthUnit::Meter, TimeUnit::Second, ) } @@ -184,7 +184,7 @@ impl<'a> AniseContext<'a> { source: Frame, epoch: Epoch, ab_corr: Aberration, - distance_unit: DistanceUnit, + distance_unit: LengthUnit, time_unit: TimeUnit, ) -> Result<(Vector3, Vector3, Vector3), AniseError> { // Build a tree, set a fixed depth to avoid allocations @@ -232,7 +232,7 @@ impl<'a> AniseContext<'a> { to_frame: Frame, epoch: Epoch, ab_corr: Aberration, - distance_unit: DistanceUnit, + distance_unit: LengthUnit, time_unit: TimeUnit, ) -> Result { // Compute the frame translation @@ -245,7 +245,7 @@ impl<'a> AniseContext<'a> { time_unit, )?; - let dist_unit_factor = DistanceUnit::Kilometer.from_meters() * distance_unit.to_meters(); + let dist_unit_factor = LengthUnit::Kilometer.from_meters() * distance_unit.to_meters(); let time_unit_factor = time_unit.in_seconds(); let input_state = CartesianState { diff --git a/src/lib.rs b/src/lib.rs index 9b5e3038..0b6b87a8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -37,6 +37,7 @@ pub mod prelude { pub mod astro; pub mod cli; pub mod naif; +pub mod orientation; pub mod structure; /// Defines the number of bytes in a double (prevents magic numbers) diff --git a/src/naif/spk/mod.rs b/src/naif/spk/mod.rs index fa41321f..c38dd06f 100644 --- a/src/naif/spk/mod.rs +++ b/src/naif/spk/mod.rs @@ -14,15 +14,15 @@ use self::datatype::DataType; use self::segment::{Record, SegMetaData, Segment}; use super::daf::{Endian, DAF}; +use crate::constants::orientations::J2000; +use crate::errors::InternalErrorKind; +use crate::prelude::AniseError; use crate::structure::common::InterpolationKind; use crate::structure::context::AniseContext; use crate::structure::ephemeris::Ephemeris; use crate::structure::metadata::Metadata; use crate::structure::spline::{Evenness, Field, SplineMeta, Splines, StateKind}; -use crate::structure::units::{DistanceUnit, TimeUnit}; -use crate::constants::orientations::J2000; -use crate::errors::InternalErrorKind; -use crate::prelude::AniseError; +use crate::structure::units::{LengthUnit, TimeUnit}; use crate::{file_mmap, parse_bytes_as, DBL_SIZE}; use crc32fast::hash; use der::{Decode, Encode}; @@ -292,7 +292,7 @@ impl<'a> SPK<'a> { interpolation_kind: InterpolationKind::ChebyshevSeries, parent_ephemeris_hash, orientation_hash: J2000, - distance_unit: DistanceUnit::Kilometer, + length_unit: LengthUnit::Kilometer, time_unit: TimeUnit::Second, splines, }; diff --git a/src/orientation/mod.rs b/src/orientation/mod.rs new file mode 100644 index 00000000..da61aa3c --- /dev/null +++ b/src/orientation/mod.rs @@ -0,0 +1,93 @@ +use hifitime::{Duration, Epoch, TimeUnits}; + +use crate::{ + prelude::AniseError, + structure::{ + orientation::{orient_data::OrientationData, Orientation}, + spline::Evenness, + }, +}; + +impl<'a> Orientation<'a> { + pub const fn is_high_precision(&self) -> bool { + matches!(self.orientation_data, OrientationData::HighPrecision { .. }) + } + + pub fn check_integrity(&self) -> Result<(), AniseError> { + match &self.orientation_data { + OrientationData::PlanetaryConstant { .. } => { + // Planetary constant information won't be decodable unless its integrity is valid. + Ok(()) + } + OrientationData::HighPrecision { + ref_epoch: _, + backward: _, + interpolation_kind: _, + splines, + } => splines.check_integrity(), + } + } + + /// Returns the starting epoch of this ephemeris. It is guaranteed that start_epoch <= end_epoch. + /// + /// # Note + /// + If the ephemeris is stored in chronological order, then the start epoch is the same as the first epoch. + /// + If the ephemeris is stored in anti-chronological order, then the start epoch is the last epoch. + pub fn start_epoch(&self) -> Epoch { + if !self.is_high_precision() { + Epoch::from_tdb_duration(Duration::MIN) + } else { + if self.first_epoch() > self.last_epoch() { + self.last_epoch().unwrap() + } else { + self.first_epoch().unwrap() + } + } + } + + pub fn end_epoch(&self) -> Epoch { + if !self.is_high_precision() { + Epoch::from_tdb_duration(Duration::MAX) + } else { + if self.first_epoch() > self.last_epoch() { + self.first_epoch().unwrap() + } else { + self.last_epoch().unwrap() + } + } + } + + /// Returns the first epoch in the data, which will be the chronological "end" epoch if the ephemeris is generated backward + fn first_epoch(&self) -> Option { + match self.orientation_data { + OrientationData::PlanetaryConstant { .. } => None, + OrientationData::HighPrecision { + ref_epoch, + backward: _, + interpolation_kind: _, + splines: _, + } => Some(ref_epoch), + } + } + + /// Returns the last epoch in the data, which will be the chronological "start" epoch if the ephemeris is generated backward + fn last_epoch(&self) -> Option { + match self.orientation_data { + OrientationData::PlanetaryConstant { .. } => None, + OrientationData::HighPrecision { + ref_epoch, + backward: _, + interpolation_kind: _, + splines, + } => match splines.metadata.evenness { + Evenness::Even { duration_ns } => { + // Grab the number of splines + Some(ref_epoch + ((splines.len() as f64) * (duration_ns as i64).nanoseconds())) + } + Evenness::Uneven { indexes: _ } => { + todo!() + } + }, + } + } +} diff --git a/src/structure/constants/mod.rs b/src/structure/constants/mod.rs index 4f5bedd5..b553c17b 100644 --- a/src/structure/constants/mod.rs +++ b/src/structure/constants/mod.rs @@ -8,11 +8,11 @@ * Documentation: https://nyxspace.com/ */ -mod phaseangle; -mod planetary; -mod spacecraft; -mod triaxialellipsoid; -mod trigangle; +pub mod phaseangle; +pub mod planetary; +pub mod spacecraft; +pub mod triaxialellipsoid; +pub mod trigangle; pub use planetary::*; pub use spacecraft::*; diff --git a/src/structure/constants/planetary.rs b/src/structure/constants/planetary.rs index 9fdc3a0b..278e2dc8 100644 --- a/src/structure/constants/planetary.rs +++ b/src/structure/constants/planetary.rs @@ -7,14 +7,9 @@ * * Documentation: https://nyxspace.com/ */ -use der::{ - asn1::{SequenceOf, Utf8StringRef}, - Decode, Encode, Reader, Writer, -}; +use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; -use super::{phaseangle::PhaseAngle, triaxialellipsoid::TriaxialEllipsoid, trigangle::TrigAngle}; - -pub const MAX_NUT_PREC_ANGLES: usize = 16; +use super::triaxialellipsoid::TriaxialEllipsoid; /// Planetary constants can store the same data as the SPICE textual PCK files #[derive(Clone, Debug, PartialEq)] @@ -25,10 +20,8 @@ pub struct PlanetaryConstants<'a> { pub comments: &'a str, /// The shape is always a tri axial ellipsoid pub shape: TriaxialEllipsoid, - pub pole_right_ascension: PhaseAngle, - pub pole_declination: PhaseAngle, - pub prime_meridian: PhaseAngle, - pub nut_prec_angles: SequenceOf, + /// Gravitational parameter (μ) of this planetary object. + pub mu_km3_s2: f64, } impl<'a> Encode for PlanetaryConstants<'a> { @@ -36,20 +29,14 @@ impl<'a> Encode for PlanetaryConstants<'a> { Utf8StringRef::new(self.name)?.encoded_len()? + Utf8StringRef::new(self.comments)?.encoded_len()? + self.shape.encoded_len()? - + self.pole_right_ascension.encoded_len()? - + self.pole_declination.encoded_len()? - + self.prime_meridian.encoded_len()? - + self.nut_prec_angles.encoded_len()? + + self.mu_km3_s2.encoded_len()? } fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { Utf8StringRef::new(self.name)?.encode(encoder)?; Utf8StringRef::new(self.comments)?.encode(encoder)?; self.shape.encode(encoder)?; - self.pole_right_ascension.encode(encoder)?; - self.pole_declination.encode(encoder)?; - self.prime_meridian.encode(encoder)?; - self.nut_prec_angles.encode(encoder) + self.mu_km3_s2.encode(encoder) } } @@ -62,10 +49,7 @@ impl<'a> Decode<'a> for PlanetaryConstants<'a> { name: name.as_str(), comments: comments.as_str(), shape: decoder.decode()?, - pole_right_ascension: decoder.decode()?, - pole_declination: decoder.decode()?, - prime_meridian: decoder.decode()?, - nut_prec_angles: decoder.decode()?, + mu_km3_s2: decoder.decode()?, }) } } diff --git a/src/structure/context.rs b/src/structure/context.rs index 71084bd4..9f870e60 100644 --- a/src/structure/context.rs +++ b/src/structure/context.rs @@ -10,8 +10,12 @@ use der::{asn1::SequenceOf, Decode, Encode, Reader, Writer}; use super::{ - constants::SpacecraftConstants, ephemeris::Ephemeris, lookuptable::LookUpTable, - metadata::Metadata, MAX_TRAJECTORIES, + constants::{PlanetaryConstants, SpacecraftConstants}, + ephemeris::Ephemeris, + lookuptable::LookUpTable, + metadata::Metadata, + orientation::Orientation, + MAX_TRAJECTORIES, }; /// A Context is the core structure which stores all of the ANISE data. @@ -33,14 +37,18 @@ pub struct AniseContext<'a> { pub ephemeris_lut: LookUpTable, /// Orientation LookUpTable (LUT) stores the mapping between a given orientation's hash and its index in the ephemeris list. pub orientation_lut: LookUpTable, - /// Spacecraft constants LookUpTable (LUT) stores the mapping between a given orientation's hash and its index in the ephemeris list. + /// Spacecraft constants LookUpTable (LUT) stores the mapping between a given spacecraft's hash and its index in the ephemeris list. pub spacecraft_constant_lut: LookUpTable, + /// Planetary constants LookUpTable (LUT) stores the mapping between a given planetary data's hash and its index in the ephemeris list. + pub planetary_constant_lut: LookUpTable, /// List of ephemerides in this file, whose index is stored in the LUT. pub ephemeris_data: SequenceOf, MAX_TRAJECTORIES>, - // TODO: Add orientation data - pub orientation_data: SequenceOf, MAX_TRAJECTORIES>, + // Orientation data, both for planetary constant data and high precision orientation data + pub orientation_data: SequenceOf, MAX_TRAJECTORIES>, /// List of spacecraft constants in this file, whose index is stored in the LUT. pub spacecraft_constant_data: SequenceOf, MAX_TRAJECTORIES>, + /// List of spacecraft constants in this file, whose index is stored in the LUT. + pub planetary_constant_data: SequenceOf, MAX_TRAJECTORIES>, } impl<'a> Encode for AniseContext<'a> { diff --git a/src/structure/ephemeris.rs b/src/structure/ephemeris.rs index 5480835d..9fcc196a 100644 --- a/src/structure/ephemeris.rs +++ b/src/structure/ephemeris.rs @@ -15,20 +15,19 @@ use crate::HashType; use super::{ common::InterpolationKind, spline::Splines, - units::{DistanceUnit, TimeUnit}, + units::{LengthUnit, TimeUnit}, }; #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub struct Ephemeris<'a> { pub name: &'a str, - /// All epochs are encoded as high precision TDB durations since J2000 TDB. pub ref_epoch: Epoch, pub backward: bool, pub parent_ephemeris_hash: HashType, pub orientation_hash: HashType, pub interpolation_kind: InterpolationKind, /// Answer the question: What distance unit is the output of the interpolation data for distances? E.g. kilometer (default) - pub distance_unit: DistanceUnit, + pub length_unit: LengthUnit, /// Answer the question: What time is the output of the interpolation data for distances? E.g. second (default), for kilometer per second velocity pub time_unit: TimeUnit, pub splines: Splines<'a>, @@ -42,7 +41,7 @@ impl<'a> Encode for Ephemeris<'a> { + self.parent_ephemeris_hash.encoded_len()? + self.orientation_hash.encoded_len()? + self.interpolation_kind.encoded_len()? - + self.distance_unit.encoded_len()? + + self.length_unit.encoded_len()? + self.time_unit.encoded_len()? + self.splines.encoded_len()? } @@ -54,7 +53,7 @@ impl<'a> Encode for Ephemeris<'a> { self.parent_ephemeris_hash.encode(encoder)?; self.orientation_hash.encode(encoder)?; self.interpolation_kind.encode(encoder)?; - self.distance_unit.encode(encoder)?; + self.length_unit.encode(encoder)?; self.time_unit.encode(encoder)?; self.splines.encode(encoder) } @@ -71,7 +70,7 @@ impl<'a> Decode<'a> for Ephemeris<'a> { parent_ephemeris_hash: decoder.decode()?, orientation_hash: decoder.decode()?, interpolation_kind: decoder.decode()?, - distance_unit: decoder.decode()?, + length_unit: decoder.decode()?, time_unit: decoder.decode()?, splines: decoder.decode()?, }) diff --git a/src/structure/mod.rs b/src/structure/mod.rs index 3541c260..d0ef7c19 100644 --- a/src/structure/mod.rs +++ b/src/structure/mod.rs @@ -15,14 +15,14 @@ extern crate der; extern crate hifitime; pub mod common; +pub mod constants; pub mod context; pub mod ephemeris; pub mod lookuptable; pub mod metadata; +pub mod orientation; pub mod semver; pub mod spline; -// pub mod splinecoeffs; -pub mod constants; pub mod units; use self::semver::Semver; diff --git a/src/structure/orientation/mod.rs b/src/structure/orientation/mod.rs new file mode 100644 index 00000000..b4bb6837 --- /dev/null +++ b/src/structure/orientation/mod.rs @@ -0,0 +1,50 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ +use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; + +use crate::HashType; +pub const MAX_NUT_PREC_ANGLES: usize = 16; + +use self::orient_data::OrientationData; + +pub mod orient_data; + +#[derive(Clone, Debug, PartialEq)] +pub struct Orientation<'a> { + pub name: &'a str, + pub parent_orientation_hash: HashType, + pub orientation_data: OrientationData<'a>, +} + +impl<'a> Encode for Orientation<'a> { + fn encoded_len(&self) -> der::Result { + Utf8StringRef::new(self.name)?.encoded_len()? + + self.parent_orientation_hash.encoded_len()? + + self.orientation_data.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + Utf8StringRef::new(self.name)?.encode(encoder)?; + self.parent_orientation_hash.encode(encoder)?; + self.orientation_data.encode(encoder) + } +} + +impl<'a> Decode<'a> for Orientation<'a> { + fn decode>(decoder: &mut R) -> der::Result { + let name: Utf8StringRef = decoder.decode()?; + + Ok(Self { + name: name.as_str(), + parent_orientation_hash: decoder.decode()?, + orientation_data: decoder.decode()?, + }) + } +} diff --git a/src/structure/orientation/orient_data.rs b/src/structure/orientation/orient_data.rs new file mode 100644 index 00000000..1932535a --- /dev/null +++ b/src/structure/orientation/orient_data.rs @@ -0,0 +1,118 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use der::{asn1::SequenceOf, Decode, Encode, Reader, Writer}; +use hifitime::Epoch; + +pub const MAX_NUT_PREC_ANGLES: usize = 16; + +use crate::structure::{ + common::InterpolationKind, + constants::{phaseangle::PhaseAngle, trigangle::TrigAngle}, + spline::Splines, +}; + +/// ANISE supports two different kinds of orientation data. High precision, with spline based interpolations, and constants right ascension, declination, and prime meridian, typically used for planetary constant data. +#[derive(Clone, Debug, PartialEq)] +pub enum OrientationData<'a> { + PlanetaryConstant { + pole_right_ascension: PhaseAngle, + pole_declination: PhaseAngle, + prime_meridian: PhaseAngle, + nut_prec_angles: SequenceOf, + }, + HighPrecision { + ref_epoch: Epoch, + backward: bool, + interpolation_kind: InterpolationKind, + splines: Splines<'a>, + }, +} + +impl<'a> Encode for OrientationData<'a> { + fn encoded_len(&self) -> der::Result { + match &self { + OrientationData::PlanetaryConstant { + pole_right_ascension, + pole_declination, + prime_meridian, + nut_prec_angles, + } => { + pole_right_ascension.encoded_len()? + + pole_declination.encoded_len()? + + prime_meridian.encoded_len()? + + nut_prec_angles.encoded_len()? + } + OrientationData::HighPrecision { + ref_epoch, + backward, + interpolation_kind, + splines, + } => { + ref_epoch.encoded_len()? + + backward.encoded_len()? + + interpolation_kind.encoded_len()? + + splines.encoded_len()? + } + } + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + match &self { + OrientationData::PlanetaryConstant { + pole_right_ascension, + pole_declination, + prime_meridian, + nut_prec_angles, + } => { + pole_right_ascension.encode(encoder)?; + pole_declination.encode(encoder)?; + prime_meridian.encode(encoder)?; + nut_prec_angles.encode(encoder) + } + OrientationData::HighPrecision { + ref_epoch, + backward, + interpolation_kind, + splines, + } => { + ref_epoch.encode(encoder)?; + backward.encode(encoder)?; + interpolation_kind.encode(encoder)?; + splines.encode(encoder) + } + } + } +} + +impl<'a> Decode<'a> for OrientationData<'a> { + fn decode>(decoder: &mut R) -> der::Result { + // This is encoded as a CHOICE, so let's try to decode the first field as a PhaseAngle, and if it isn't + // we'll try as an Epoch. + + match decoder.decode::() { + Ok(pole_right_ascension) => Ok(Self::PlanetaryConstant { + pole_right_ascension, + pole_declination: decoder.decode()?, + prime_meridian: decoder.decode()?, + nut_prec_angles: decoder.decode()?, + }), + Err(_) => { + // Hopefully this is a high precision orientation, otherwise the error will rise up. + Ok(Self::HighPrecision { + ref_epoch: decoder.decode()?, + backward: decoder.decode()?, + interpolation_kind: decoder.decode()?, + splines: decoder.decode()?, + }) + } + } + } +} diff --git a/src/structure/units.rs b/src/structure/units.rs index 340a04e6..5ab540e3 100644 --- a/src/structure/units.rs +++ b/src/structure/units.rs @@ -15,7 +15,7 @@ pub use hifitime::Unit as TimeUnit; /// Defines the distance units supported by ANISE. This notably allows storing interpolation information from instruments to comets. #[derive(Copy, Clone, Debug, PartialEq, PartialOrd, Eq, Ord)] -pub enum DistanceUnit { +pub enum LengthUnit { Micrometer, Millimeter, Meter, @@ -23,7 +23,7 @@ pub enum DistanceUnit { Megameter, } -impl DistanceUnit { +impl LengthUnit { /// Returns the conversion factor of this distance unit to meters. /// E.g. To convert Self::Kilometers into Self::Meters, multiply by 1e-3. #[must_use] @@ -51,7 +51,7 @@ impl DistanceUnit { } } -impl Display for DistanceUnit { +impl Display for LengthUnit { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::Micrometer => write!(f, "um"), @@ -63,7 +63,7 @@ impl Display for DistanceUnit { } } -impl Default for DistanceUnit { +impl Default for LengthUnit { fn default() -> Self { Self::Kilometer } @@ -71,41 +71,41 @@ impl Default for DistanceUnit { /// Allows conversion of a Distance into a u8 with the following mapping. /// Mapping: Micrometer: 0; Millimeter: 1; Meter: 2; Kilometer: 3; Megameter: 4. -impl From for u8 { - fn from(dist: DistanceUnit) -> Self { +impl From for u8 { + fn from(dist: LengthUnit) -> Self { match dist { - DistanceUnit::Micrometer => 0, - DistanceUnit::Millimeter => 1, - DistanceUnit::Meter => 2, - DistanceUnit::Kilometer => 3, - DistanceUnit::Megameter => 4, + LengthUnit::Micrometer => 0, + LengthUnit::Millimeter => 1, + LengthUnit::Meter => 2, + LengthUnit::Kilometer => 3, + LengthUnit::Megameter => 4, } } } /// Allows conversion of a Distance into a u8 with the following mapping. /// Mapping: Micrometer: 0; Millimeter: 1; Meter: 2; Kilometer: 3; Megameter: 4. -impl From<&DistanceUnit> for u8 { - fn from(dist: &DistanceUnit) -> Self { +impl From<&LengthUnit> for u8 { + fn from(dist: &LengthUnit) -> Self { u8::from(*dist) } } /// Allows conversion of a u8 into a Distance. /// Mapping: 0: Micrometer; 1: Millimeter; 2: Meter; 4: Megameter; 3 or any other value is considered kilometer -impl From for DistanceUnit { +impl From for LengthUnit { fn from(val: u8) -> Self { match val { - 0 => DistanceUnit::Micrometer, - 1 => DistanceUnit::Millimeter, - 2 => DistanceUnit::Meter, - 4 => DistanceUnit::Megameter, - _ => DistanceUnit::Kilometer, + 0 => LengthUnit::Micrometer, + 1 => LengthUnit::Millimeter, + 2 => LengthUnit::Meter, + 4 => LengthUnit::Megameter, + _ => LengthUnit::Kilometer, } } } -impl Encode for DistanceUnit { +impl Encode for LengthUnit { fn encoded_len(&self) -> der::Result { let converted: u8 = self.into(); converted.encoded_len() @@ -117,7 +117,7 @@ impl Encode for DistanceUnit { } } -impl<'a> Decode<'a> for DistanceUnit { +impl<'a> Decode<'a> for LengthUnit { fn decode>(decoder: &mut R) -> der::Result { let converted: u8 = decoder.decode()?; Ok(Self::from(converted)) diff --git a/tests/ephemerides/parent_translation_verif.rs b/tests/ephemerides/parent_translation_verif.rs index dfd861d7..895eaeb3 100644 --- a/tests/ephemerides/parent_translation_verif.rs +++ b/tests/ephemerides/parent_translation_verif.rs @@ -45,7 +45,7 @@ fn de438s_parent_translation_verif() { VENUS_J2000, epoch, Aberration::None, - DistanceUnit::Kilometer, + LengthUnit::Kilometer, TimeUnit::Second, ) .unwrap(); @@ -73,7 +73,7 @@ fn de438s_parent_translation_verif() { VENUS_J2000, epoch, Aberration::None, - DistanceUnit::Megameter, + LengthUnit::Megameter, TimeUnit::Millisecond, ) .unwrap(); diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index c1255f3d..2a56ca84 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -51,7 +51,7 @@ fn de438s_translation_verif_venus2emb() { EARTH_MOON_BARYCENTER_J2000, epoch, Aberration::None, - DistanceUnit::Kilometer, + LengthUnit::Kilometer, TimeUnit::Second, ) .unwrap(); @@ -137,7 +137,7 @@ fn de438s_translation_verif_venus2luna() { LUNA_J2000, epoch, Aberration::None, - DistanceUnit::Kilometer, + LengthUnit::Kilometer, TimeUnit::Second, ) .unwrap(); @@ -229,7 +229,7 @@ fn de438s_translation_verif_emb2luna() { LUNA_J2000, epoch, Aberration::None, - DistanceUnit::Kilometer, + LengthUnit::Kilometer, TimeUnit::Second, ) .unwrap(); @@ -272,7 +272,7 @@ fn de438s_translation_verif_emb2luna() { EARTH_MOON_BARYCENTER_J2000, epoch, Aberration::None, - DistanceUnit::Kilometer, + LengthUnit::Kilometer, TimeUnit::Second, ) .unwrap(); From 7c2b32f0508d944ac0f4ecd6c034637578a4120f Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 4 Nov 2022 23:32:26 -0600 Subject: [PATCH 10/48] Refactor frames and add inertia tensor Signed-off-by: Christopher Rabotin --- src/astro/mod.rs | 7 -- src/astro/orbit.rs | 3 +- src/astro/orbit_geodetic.rs | 2 +- src/constants.rs | 4 +- src/ephemerides/paths.rs | 2 +- src/ephemerides/translate_to_parent.rs | 2 +- src/ephemerides/translations.rs | 2 +- src/errors.rs | 4 +- src/{astro => frames}/celestial_frame.rs | 0 src/{astro => frames}/frame.rs | 0 src/{astro => frames}/geodetic_frame.rs | 3 +- src/frames/mod.rs | 17 +++++ src/lib.rs | 13 ++-- src/math/cartesian.rs | 5 +- src/{orientation => orientations}/mod.rs | 0 src/structure/constants/mod.rs | 2 - src/structure/constants/spacecraft.rs | 66 ++++++++++++++++++- src/structure/orientation/mod.rs | 2 + src/structure/orientation/orient_data.rs | 7 +- .../{constants => orientation}/phaseangle.rs | 0 .../{constants => orientation}/trigangle.rs | 0 tests/ephemerides/paths.rs | 2 +- tests/ephemerides/translation.rs | 2 +- 23 files changed, 106 insertions(+), 39 deletions(-) rename src/{astro => frames}/celestial_frame.rs (100%) rename src/{astro => frames}/frame.rs (100%) rename src/{astro => frames}/geodetic_frame.rs (98%) create mode 100644 src/frames/mod.rs rename src/{orientation => orientations}/mod.rs (100%) rename src/structure/{constants => orientation}/phaseangle.rs (100%) rename src/structure/{constants => orientation}/trigangle.rs (100%) diff --git a/src/astro/mod.rs b/src/astro/mod.rs index 8de73df1..0ef7a0be 100644 --- a/src/astro/mod.rs +++ b/src/astro/mod.rs @@ -15,12 +15,5 @@ pub enum Aberration { None, } -pub mod celestial_frame; -pub mod frame; -pub mod geodetic_frame; pub mod orbit; pub mod orbit_geodetic; - -pub use celestial_frame::CelestialFrameTrait; -pub use frame::{Frame, FrameTrait}; -pub use geodetic_frame::{GeodeticFrame, GeodeticFrameTrait}; diff --git a/src/astro/orbit.rs b/src/astro/orbit.rs index 9f6292a3..3407bb7b 100644 --- a/src/astro/orbit.rs +++ b/src/astro/orbit.rs @@ -7,7 +7,7 @@ * * Documentation: https://nyxspace.com/ */ -use super::{celestial_frame::CelestialFrame, CelestialFrameTrait}; + use crate::{ errors::PhysicsErrorKind, math::{ @@ -15,6 +15,7 @@ use crate::{ cartesian::Cartesian, Vector3, Vector6, }, + prelude::{CelestialFrame, CelestialFrameTrait}, }; use core::f64::consts::PI; use core::f64::EPSILON; diff --git a/src/astro/orbit_geodetic.rs b/src/astro/orbit_geodetic.rs index 2212ae3c..60a97458 100644 --- a/src/astro/orbit_geodetic.rs +++ b/src/astro/orbit_geodetic.rs @@ -8,7 +8,6 @@ * Documentation: https://nyxspace.com/ */ -use super::{GeodeticFrame, GeodeticFrameTrait}; use crate::{ errors::PhysicsErrorKind, math::{ @@ -16,6 +15,7 @@ use crate::{ cartesian::Cartesian, Vector3, }, + prelude::{GeodeticFrame, GeodeticFrameTrait}, }; use hifitime::Epoch; use log::{error, warn}; diff --git a/src/constants.rs b/src/constants.rs index 3080ca11..956baeb9 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -11,7 +11,7 @@ pub mod celestial_objects { use crate::HashType; - /// Source bytes: `Solar System barycenter` + /// Source bytes: `Solar System Barycenter` pub const SOLAR_SYSTEM_BARYCENTER: HashType = 3135540444; /// Source bytes: `Mercury` pub const MERCURY: HashType = 753059387; @@ -72,7 +72,7 @@ pub mod orientations { } pub mod frames { - use crate::astro::Frame; + use crate::prelude::Frame; use super::{celestial_objects::*, orientations::J2000}; diff --git a/src/ephemerides/paths.rs b/src/ephemerides/paths.rs index b1dca5c0..de3edbaf 100644 --- a/src/ephemerides/paths.rs +++ b/src/ephemerides/paths.rs @@ -15,8 +15,8 @@ use crate::errors::InternalErrorKind; use crate::structure::orientation::Orientation; use crate::HashType; use crate::{ - astro::Frame, errors::{AniseError, IntegrityErrorKind}, + frames::Frame, structure::{context::AniseContext, ephemeris::Ephemeris}, }; diff --git a/src/ephemerides/translate_to_parent.rs b/src/ephemerides/translate_to_parent.rs index 5a35e538..6b70c798 100644 --- a/src/ephemerides/translate_to_parent.rs +++ b/src/ephemerides/translate_to_parent.rs @@ -17,7 +17,7 @@ use crate::math::Vector3; use crate::structure::common::InterpolationKind; use crate::structure::spline::Field; use crate::structure::units::*; -use crate::{astro::Frame, errors::AniseError, structure::context::AniseContext}; +use crate::{errors::AniseError, prelude::Frame, structure::context::AniseContext}; impl<'a> AniseContext<'a> { /// Returns the position vector and velocity vector of the `source` with respect to its parent in the ephemeris at the provided epoch, diff --git a/src/ephemerides/translations.rs b/src/ephemerides/translations.rs index 7593851e..42ab2301 100644 --- a/src/ephemerides/translations.rs +++ b/src/ephemerides/translations.rs @@ -16,8 +16,8 @@ use crate::math::cartesian::CartesianState; use crate::math::Vector3; use crate::structure::units::*; use crate::{ - astro::{Frame, FrameTrait}, errors::AniseError, + prelude::{Frame, FrameTrait}, structure::context::AniseContext, }; diff --git a/src/errors.rs b/src/errors.rs index db187575..1d159263 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -10,10 +10,10 @@ use hifitime::Epoch; -use crate::structure::semver::Semver; -use crate::astro::Frame; use crate::der::Error as Asn1Error; use crate::der::Error as DerError; +use crate::prelude::Frame; +use crate::structure::semver::Semver; use core::convert::From; use core::fmt; use std::io::ErrorKind as IOErrorKind; diff --git a/src/astro/celestial_frame.rs b/src/frames/celestial_frame.rs similarity index 100% rename from src/astro/celestial_frame.rs rename to src/frames/celestial_frame.rs diff --git a/src/astro/frame.rs b/src/frames/frame.rs similarity index 100% rename from src/astro/frame.rs rename to src/frames/frame.rs diff --git a/src/astro/geodetic_frame.rs b/src/frames/geodetic_frame.rs similarity index 98% rename from src/astro/geodetic_frame.rs rename to src/frames/geodetic_frame.rs index ba716ede..631c30a5 100644 --- a/src/astro/geodetic_frame.rs +++ b/src/frames/geodetic_frame.rs @@ -8,8 +8,7 @@ * Documentation: https://nyxspace.com/ */ -use super::{celestial_frame::CelestialFrame, CelestialFrameTrait, FrameTrait}; -use crate::astro::Frame; +use super::{celestial_frame::CelestialFrame, CelestialFrameTrait, Frame, FrameTrait}; use crate::HashType; use core::fmt::{Display, Formatter}; diff --git a/src/frames/mod.rs b/src/frames/mod.rs new file mode 100644 index 00000000..976b37a8 --- /dev/null +++ b/src/frames/mod.rs @@ -0,0 +1,17 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +pub mod celestial_frame; +pub mod frame; +pub mod geodetic_frame; + +pub use celestial_frame::{CelestialFrame, CelestialFrameTrait}; +pub use frame::{Frame, FrameTrait}; +pub use geodetic_frame::{GeodeticFrame, GeodeticFrameTrait}; diff --git a/src/lib.rs b/src/lib.rs index 0b6b87a8..ec925a80 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,12 +13,18 @@ extern crate der; extern crate hifitime; extern crate log; +pub mod astro; +pub mod cli; pub mod constants; pub mod context; pub mod ephemerides; pub mod errors; +pub mod frames; pub mod math; +pub mod naif; +pub mod orientations; pub mod spline; +pub mod structure; /// Re-export of hifitime pub mod time { @@ -28,18 +34,13 @@ pub mod time { pub mod prelude { pub use crate::astro::Aberration; pub use crate::errors::AniseError; + pub use crate::frames::*; pub use crate::structure::context::AniseContext; pub use crate::structure::units::*; pub use crate::time::*; pub use std::fs::File; } -pub mod astro; -pub mod cli; -pub mod naif; -pub mod orientation; -pub mod structure; - /// Defines the number of bytes in a double (prevents magic numbers) pub(crate) const DBL_SIZE: usize = 8; diff --git a/src/math/cartesian.rs b/src/math/cartesian.rs index bfe02468..3bb7b9eb 100644 --- a/src/math/cartesian.rs +++ b/src/math/cartesian.rs @@ -11,10 +11,7 @@ use core::ops::Add; use super::{perpv, Vector3}; -use crate::{ - astro::{Frame, FrameTrait}, - prelude::AniseError, -}; +use crate::prelude::{AniseError, Frame, FrameTrait}; use hifitime::Epoch; use nalgebra::Vector6; diff --git a/src/orientation/mod.rs b/src/orientations/mod.rs similarity index 100% rename from src/orientation/mod.rs rename to src/orientations/mod.rs diff --git a/src/structure/constants/mod.rs b/src/structure/constants/mod.rs index b553c17b..0b1f5995 100644 --- a/src/structure/constants/mod.rs +++ b/src/structure/constants/mod.rs @@ -8,11 +8,9 @@ * Documentation: https://nyxspace.com/ */ -pub mod phaseangle; pub mod planetary; pub mod spacecraft; pub mod triaxialellipsoid; -pub mod trigangle; pub use planetary::*; pub use spacecraft::*; diff --git a/src/structure/constants/spacecraft.rs b/src/structure/constants/spacecraft.rs index 76931bc2..9959fbf6 100644 --- a/src/structure/constants/spacecraft.rs +++ b/src/structure/constants/spacecraft.rs @@ -9,7 +9,9 @@ */ use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; -/// Spacecraft constants can store the same data as the CCSDS Orbit Parameter Message (OPM) +use crate::HashType; + +/// Spacecraft constants can store the same spacecraft constant data as the CCSDS Orbit Parameter Message (OPM) and CCSDS Attitude Parameter Messages (APM) #[derive(Copy, Clone, Debug, PartialEq)] pub struct SpacecraftConstants<'a> { /// Name is used as the input for the hashing function @@ -28,6 +30,8 @@ pub struct SpacecraftConstants<'a> { pub drag_area_m2: Option, /// Drag coefficient (C_d) pub drag_coeff: Option, + /// Inertia tensor + pub inertia_tensor: Option, } impl<'a> Encode for SpacecraftConstants<'a> { @@ -40,6 +44,7 @@ impl<'a> Encode for SpacecraftConstants<'a> { + self.srp_coeff_reflectivity.encoded_len()? + self.drag_area_m2.encoded_len()? + self.drag_coeff.encoded_len()? + + self.inertia_tensor.encoded_len()? } fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { @@ -50,7 +55,8 @@ impl<'a> Encode for SpacecraftConstants<'a> { self.srp_area_m2.encode(encoder)?; self.srp_coeff_reflectivity.encode(encoder)?; self.drag_area_m2.encode(encoder)?; - self.drag_coeff.encode(encoder) + self.drag_coeff.encode(encoder)?; + self.inertia_tensor.encode(encoder) } } @@ -68,6 +74,62 @@ impl<'a> Decode<'a> for SpacecraftConstants<'a> { srp_coeff_reflectivity: decoder.decode()?, drag_area_m2: decoder.decode()?, drag_coeff: decoder.decode()?, + inertia_tensor: Some(decoder.decode()?), + }) + } +} + +/// Inertial tensor definition +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct InertiaTensor { + /// Inertia tensor reference frame hash + pub orientation_hash: HashType, + /// Moment of inertia about the 1-axis + pub i_11_kgm2: f64, + /// Moment of inertia about the 2-axis + pub i_22_kgm2: f64, + /// Moment of inertia about the 3-axis + pub i_33_kgm2: f64, + /// Inertia cross product of the 1 and 2 axes + pub i_12_kgm2: f64, + /// Inertia cross product of the 1 and 2 axes + pub i_13_kgm2: f64, + /// Inertia cross product of the 2 and 3 axes + pub i_23_kgm2: f64, +} + +impl<'a> Encode for InertiaTensor { + fn encoded_len(&self) -> der::Result { + self.orientation_hash.encoded_len()? + + self.i_11_kgm2.encoded_len()? + + self.i_22_kgm2.encoded_len()? + + self.i_33_kgm2.encoded_len()? + + self.i_12_kgm2.encoded_len()? + + self.i_13_kgm2.encoded_len()? + + self.i_23_kgm2.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + self.orientation_hash.encode(encoder)?; + self.i_11_kgm2.encode(encoder)?; + self.i_22_kgm2.encode(encoder)?; + self.i_33_kgm2.encode(encoder)?; + self.i_12_kgm2.encode(encoder)?; + self.i_13_kgm2.encode(encoder)?; + self.i_23_kgm2.encode(encoder) + } +} + +impl<'a> Decode<'a> for InertiaTensor { + fn decode>(decoder: &mut R) -> der::Result { + Ok(Self { + orientation_hash: decoder.decode()?, + i_11_kgm2: decoder.decode()?, + i_22_kgm2: decoder.decode()?, + i_33_kgm2: decoder.decode()?, + i_12_kgm2: decoder.decode()?, + i_13_kgm2: decoder.decode()?, + i_23_kgm2: decoder.decode()?, }) } } diff --git a/src/structure/orientation/mod.rs b/src/structure/orientation/mod.rs index b4bb6837..b7232414 100644 --- a/src/structure/orientation/mod.rs +++ b/src/structure/orientation/mod.rs @@ -15,6 +15,8 @@ pub const MAX_NUT_PREC_ANGLES: usize = 16; use self::orient_data::OrientationData; pub mod orient_data; +pub mod phaseangle; +pub mod trigangle; #[derive(Clone, Debug, PartialEq)] pub struct Orientation<'a> { diff --git a/src/structure/orientation/orient_data.rs b/src/structure/orientation/orient_data.rs index 1932535a..4605ec74 100644 --- a/src/structure/orientation/orient_data.rs +++ b/src/structure/orientation/orient_data.rs @@ -13,11 +13,8 @@ use hifitime::Epoch; pub const MAX_NUT_PREC_ANGLES: usize = 16; -use crate::structure::{ - common::InterpolationKind, - constants::{phaseangle::PhaseAngle, trigangle::TrigAngle}, - spline::Splines, -}; +use super::{phaseangle::PhaseAngle, trigangle::TrigAngle}; +use crate::structure::{common::InterpolationKind, spline::Splines}; /// ANISE supports two different kinds of orientation data. High precision, with spline based interpolations, and constants right ascension, declination, and prime meridian, typically used for planetary constant data. #[derive(Clone, Debug, PartialEq)] diff --git a/src/structure/constants/phaseangle.rs b/src/structure/orientation/phaseangle.rs similarity index 100% rename from src/structure/constants/phaseangle.rs rename to src/structure/orientation/phaseangle.rs diff --git a/src/structure/constants/trigangle.rs b/src/structure/orientation/trigangle.rs similarity index 100% rename from src/structure/constants/trigangle.rs rename to src/structure/orientation/trigangle.rs diff --git a/tests/ephemerides/paths.rs b/tests/ephemerides/paths.rs index f596ef9e..f7a4912e 100644 --- a/tests/ephemerides/paths.rs +++ b/tests/ephemerides/paths.rs @@ -10,10 +10,10 @@ use core::f64::EPSILON; -use anise::astro::Frame; use anise::constants::celestial_objects::{EARTH_MOON_BARYCENTER, SOLAR_SYSTEM_BARYCENTER}; use anise::constants::frames::*; use anise::constants::orientations::J2000; +use anise::prelude::Frame; use anise::prelude::*; use anise::{file_mmap, prelude::AniseContext}; diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 2a56ca84..9afa7e5f 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -301,7 +301,7 @@ fn de438s_translation_verif_emb2luna() { #[ignore] #[cfg(feature = "std")] fn validate_jplde_translation() { - use anise::astro::Frame; + use anise::prelude::Frame; use arrow::array::{ArrayRef, Float64Array, StringArray, UInt8Array}; use arrow::datatypes::{DataType, Field, Schema}; use arrow::record_batch::RecordBatch; From 4d0d63d8f6e41b577661dc260d2c684dc68ea44a Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sat, 5 Nov 2022 01:04:39 -0600 Subject: [PATCH 11/48] Well this sucks. The new struct is too big MAX TRAJ seems to be limited to 31 items. That is probably not large enough to be usable. Signed-off-by: Christopher Rabotin --- src/astro/orbit_geodetic.rs | 39 ++---- src/constants.rs | 19 +++ src/frames/celestial_frame.rs | 34 +++++- src/frames/frame.rs | 12 ++ src/frames/geodetic_frame.rs | 81 ++++++++----- src/structure/constants/ellipsoid.rs | 118 +++++++++++++++++++ src/structure/constants/mod.rs | 2 +- src/structure/constants/planetary.rs | 14 +-- src/structure/constants/triaxialellipsoid.rs | 51 -------- src/structure/mod.rs | 2 +- tests/astro/orbit.rs | 65 +++++++--- 11 files changed, 302 insertions(+), 135 deletions(-) create mode 100644 src/structure/constants/ellipsoid.rs delete mode 100644 src/structure/constants/triaxialellipsoid.rs diff --git a/src/astro/orbit_geodetic.rs b/src/astro/orbit_geodetic.rs index 60a97458..06bd78a9 100644 --- a/src/astro/orbit_geodetic.rs +++ b/src/astro/orbit_geodetic.rs @@ -18,7 +18,7 @@ use crate::{ prelude::{GeodeticFrame, GeodeticFrameTrait}, }; use hifitime::Epoch; -use log::{error, warn}; +use log::error; pub type GeodeticOrbit = Cartesian; @@ -35,7 +35,7 @@ impl Cartesian { frame: F, ) -> Result { Self::try_keplerian( - sma_altitude + frame.equatorial_radius_km(), + sma_altitude + frame.mean_equatorial_radius_km(), ecc, inc, raan, @@ -58,8 +58,8 @@ impl Cartesian { frame: F, ) -> Result { Self::try_keplerian_apsis_radii( - a_a + frame.equatorial_radius_km(), - a_p + frame.equatorial_radius_km(), + a_a + frame.mean_equatorial_radius_km(), + a_p + frame.mean_equatorial_radius_km(), inc, raan, aop, @@ -69,24 +69,7 @@ impl Cartesian { ) } - /// Creates a new Orbit from the geodetic latitude (φ), longitude (λ) and height with respect to the ellipsoid of the frame. - /// - /// **Units:** degrees, degrees, km - /// NOTE: This computation differs from the spherical coordinates because we consider the flattening of body. - /// Reference: G. Xu and Y. Xu, "GPS", DOI 10.1007/978-3-662-50367-6_2, 2016 - /// **WARNING:** This uses the rotational rates known to Nyx. For other objects, use `from_altlatlong` for other celestial bodies. - pub fn from_geodesic(latitude: f64, longitude: f64, height: f64, dt: Epoch, frame: F) -> Self { - Self::from_altlatlong( - latitude, - longitude, - height, - frame.angular_velocity_deg(), - dt, - frame, - ) - } - - /// Creates a new Orbit from the latitude (φ), longitude (λ) and height with respect to the frame's ellipsoid. + /// Creates a new Orbit from the latitude (φ), longitude (λ) and height (in km) with respect to the frame's ellipsoid given the angular velocity. /// /// **Units:** degrees, degrees, km, rad/s /// NOTE: This computation differs from the spherical coordinates because we consider the flattening of body. @@ -125,17 +108,17 @@ impl Cartesian { /// Returns the SMA altitude in km pub fn sma_altitude(&self) -> f64 { - self.sma_km() - self.frame.equatorial_radius_km() + self.sma_km() - self.frame.mean_equatorial_radius_km() } /// Returns the altitude of periapsis (or perigee around Earth), in kilometers. pub fn periapsis_altitude(&self) -> f64 { - self.periapsis_km() - self.frame.equatorial_radius_km() + self.periapsis_km() - self.frame.mean_equatorial_radius_km() } /// Returns the altitude of apoapsis (or apogee around Earth), in kilometers. pub fn apoapsis_altitude(&self) -> f64 { - self.apoapsis_km() - self.frame.equatorial_radius_km() + self.apoapsis_km() - self.frame.mean_equatorial_radius_km() } /// Returns the geodetic longitude (λ) in degrees. Value is between 0 and 360 degrees. @@ -150,9 +133,6 @@ impl Cartesian { /// /// Reference: Vallado, 4th Ed., Algorithm 12 page 172. pub fn geodetic_latitude(&self) -> f64 { - if !self.frame.is_body_fixed() { - warn!("computation of geodetic latitude must be done in a body fixed frame and {:?} is not one!", self.frame); - } let eps = 1e-12; let max_attempts = 20; let mut attempt_no = 0; @@ -181,9 +161,6 @@ impl Cartesian { /// /// Reference: Vallado, 4th Ed., Algorithm 12 page 172. pub fn geodetic_height(&self) -> f64 { - if !self.frame.is_body_fixed() { - warn!("Computation of geodetic height must be done in a body fixed frame and {:?} is not one!", self.frame); - } let e2 = self.frame.flattening() * (2.0 - self.frame.flattening()); let latitude = self.geodetic_latitude().to_radians(); let sin_lat = latitude.sin(); diff --git a/src/constants.rs b/src/constants.rs index 956baeb9..70d99d12 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -8,6 +8,12 @@ * Documentation: https://nyxspace.com/ */ +use crate::{ + errors::IntegrityErrorKind, + prelude::{AniseContext, AniseError}, + structure::constants::PlanetaryConstants, +}; + pub mod celestial_objects { use crate::HashType; @@ -91,3 +97,16 @@ pub mod frames { pub const LUNA_J2000: Frame = Frame::from_ephem_orient(LUNA, J2000); pub const EARTH_J2000: Frame = Frame::from_ephem_orient(EARTH, J2000); } + +impl<'a> AniseContext<'a> { + pub fn planetary_constants_from_name( + &self, + name: &'a str, + ) -> Result<&PlanetaryConstants<'a>, AniseError> { + let idx = self.planetary_constant_lut.index_for_key(name)?; + match self.planetary_constant_data.get(idx.into()) { + Some(plnt) => Ok(plnt), + None => Err(AniseError::IntegrityError(IntegrityErrorKind::DataMissing)), + } + } +} diff --git a/src/frames/celestial_frame.rs b/src/frames/celestial_frame.rs index 6d602abe..74b02a27 100644 --- a/src/frames/celestial_frame.rs +++ b/src/frames/celestial_frame.rs @@ -8,7 +8,10 @@ * Documentation: https://nyxspace.com/ */ -use crate::HashType; +use crate::{ + prelude::{AniseContext, AniseError}, + HashType, +}; use super::{Frame, FrameTrait}; use core::fmt::{Display, Formatter}; @@ -47,3 +50,32 @@ impl Display for CelestialFrame { write!(f, "{} (μ = {} km3/s)", self.frame, self.mu_km3_s2()) } } + +impl<'a> AniseContext<'a> { + /// Tries to find the celestial frame data given the ephemeris center name and the orientation name. + /// # Note + /// The ephemeris name MUST match the name of the planetary constant. + /// To load the planetary constants with another name, use `celestial_frame_from` + pub fn celestial_frame( + &self, + ephemeris_name: &'a str, + orientation_name: &'a str, + ) -> Result { + self.celestial_frame_from(ephemeris_name, orientation_name, ephemeris_name) + } + + /// Tries to find the celestial frame data given the ephemeris center name, the orientation name, and the name of the planetary constants + pub fn celestial_frame_from( + &self, + ephemeris_name: &'a str, + orientation_name: &'a str, + planetary_constants_name: &'a str, + ) -> Result { + let constants = self.planetary_constants_from_name(planetary_constants_name)?; + + Ok(CelestialFrame { + frame: Frame::from_ephemeris_orientation_names(ephemeris_name, orientation_name), + mu_km3_s2: constants.mu_km3_s2, + }) + } +} diff --git a/src/frames/frame.rs b/src/frames/frame.rs index 65c925fe..3f93f8b8 100644 --- a/src/frames/frame.rs +++ b/src/frames/frame.rs @@ -10,6 +10,8 @@ use core::fmt::{Debug, Display, Formatter}; +use crc32fast::hash; + use crate::constants::celestial_objects::hash_celestial_name; use crate::constants::orientations::{hash_orientation_name, J2000}; use crate::HashType; @@ -64,6 +66,16 @@ impl Frame { } } + pub fn from_ephemeris_orientation_names<'a>( + ephemeris_name: &'a str, + orientation_name: &'a str, + ) -> Self { + Self { + ephemeris_hash: hash(ephemeris_name.as_bytes()), + orientation_hash: hash(orientation_name.as_bytes()), + } + } + pub const fn from_ephem_j2000(ephemeris_hash: HashType) -> Self { Self::from_ephem_orient(ephemeris_hash, J2000) } diff --git a/src/frames/geodetic_frame.rs b/src/frames/geodetic_frame.rs index 631c30a5..89e62cda 100644 --- a/src/frames/geodetic_frame.rs +++ b/src/frames/geodetic_frame.rs @@ -9,31 +9,31 @@ */ use super::{celestial_frame::CelestialFrame, CelestialFrameTrait, Frame, FrameTrait}; -use crate::HashType; +use crate::{ + prelude::{AniseContext, AniseError}, + structure::constants::ellipsoid::Ellipsoid, + HashType, +}; use core::fmt::{Display, Formatter}; +use log::error; /// Defines a Celestial Frame kind, which is a Frame that also defines a standard gravitational parameter pub trait GeodeticFrameTrait: CelestialFrameTrait { /// Equatorial radius in kilometers - fn equatorial_radius_km(&self) -> f64; + fn mean_equatorial_radius_km(&self) -> f64; /// Semi major radius in kilometers fn semi_major_radius_km(&self) -> f64; /// Flattening coefficient (unit less) fn flattening(&self) -> f64; - /// Returns true if this is a body fixed frame - fn is_body_fixed(&self) -> bool; /// Returns the average angular velocity of this frame - fn angular_velocity_deg(&self) -> f64; + fn angular_velocity_deg_s(&self) -> f64; } /// A GeodeticFrame is a Celestial Frame whose equatorial and semi major radii are defined. #[derive(Copy, Clone, Debug, PartialEq)] pub struct GeodeticFrame { pub celestial_frame: CelestialFrame, - pub equatorial_radius_km: f64, - pub semi_major_radius_km: f64, - pub flattening: f64, - pub is_body_fixed: bool, + pub shape: Ellipsoid, pub angular_velocity_deg: f64, } @@ -54,23 +54,19 @@ impl CelestialFrameTrait for GeodeticFrame { } impl GeodeticFrameTrait for GeodeticFrame { - fn equatorial_radius_km(&self) -> f64 { - self.equatorial_radius_km + fn mean_equatorial_radius_km(&self) -> f64 { + self.shape.mean_equatorial_radius_km() } fn semi_major_radius_km(&self) -> f64 { - self.semi_major_radius_km + self.shape.semi_major_equatorial_radius_km } fn flattening(&self) -> f64 { - self.flattening + self.shape.flattening() } - fn is_body_fixed(&self) -> bool { - self.is_body_fixed - } - - fn angular_velocity_deg(&self) -> f64 { + fn angular_velocity_deg_s(&self) -> f64 { self.angular_velocity_deg } } @@ -78,15 +74,7 @@ impl GeodeticFrameTrait for GeodeticFrame { impl Display for GeodeticFrame { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { write!(f, "{}", self.celestial_frame.frame)?; - write!(f, " (μ = {} km3/s", self.mu_km3_s2())?; - - write!( - f, - ", eq. radius = {} km, sm axis = {} km, f = {}", - self.equatorial_radius_km, self.semi_major_radius_km, self.flattening - )?; - - write!(f, ")") + write!(f, " (μ = {} km3/s, {})", self.mu_km3_s2(), self.shape) } } @@ -99,3 +87,42 @@ impl Into for GeodeticFrame { self.celestial_frame.frame } } + +impl<'a> AniseContext<'a> { + /// Tries to find the geodetic frame data given the ephemeris center name and the orientation name. + /// # Note + /// The ephemeris name MUST match the name of the planetary constant. + /// To load the planetary constants with another name, use `geodetic_frame_from` + pub fn geodetic_frame( + &self, + ephemeris_name: &'a str, + orientation_name: &'a str, + ) -> Result { + self.geodetic_frame_from(ephemeris_name, orientation_name, ephemeris_name) + } + + /// Tries to find the geodetic frame data given the ephemeris center name, the orientation name, and the name of the planetary constants + pub fn geodetic_frame_from( + &self, + ephemeris_name: &'a str, + orientation_name: &'a str, + planetary_constants_name: &'a str, + ) -> Result { + let constants = self.planetary_constants_from_name(planetary_constants_name)?; + + if constants.shape.is_none() { + error!("no shape data associated with {planetary_constants_name}"); + return Err(AniseError::ParameterNotSpecified); + } + + // TODO: Figure out how to specify / where to find the angular velocity. And maybe it shouldn't exist! + Ok(GeodeticFrame { + celestial_frame: CelestialFrame { + frame: Frame::from_ephemeris_orientation_names(ephemeris_name, orientation_name), + mu_km3_s2: constants.mu_km3_s2, + }, + shape: constants.shape.unwrap(), + angular_velocity_deg: 0.0, + }) + } +} diff --git a/src/structure/constants/ellipsoid.rs b/src/structure/constants/ellipsoid.rs new file mode 100644 index 00000000..66ab30da --- /dev/null +++ b/src/structure/constants/ellipsoid.rs @@ -0,0 +1,118 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use core::f64::EPSILON; +use core::fmt::{Display, Formatter}; +use der::{Decode, Encode, Reader, Writer}; +/// Only the tri-axial Ellipsoid shape model is currently supported by ANISE. +/// This is directly inspired from SPICE PCK. +/// > For each body, three radii are listed: The first number is +/// > the largest equatorial radius (the length of the semi-axis +/// > containing the prime meridian), the second number is the smaller +/// > equatorial radius, and the third is the polar radius. +/// +/// Example: Radii of the Earth. +/// +/// BODY399_RADII = ( 6378.1366 6378.1366 6356.7519 ) +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct Ellipsoid { + pub semi_major_equatorial_radius_km: f64, + pub semi_minor_equatorial_radius_km: f64, + pub polar_radius_km: f64, +} + +impl Ellipsoid { + /// Builds an ellipsoid as if it were a sphere + pub fn from_sphere(radius_km: f64) -> Self { + Self { + semi_major_equatorial_radius_km: radius_km, + semi_minor_equatorial_radius_km: radius_km, + polar_radius_km: radius_km, + } + } + + /// Builds an ellipsoid as if it were a spheroid, where only the polar axis has a different radius + pub fn from_spheroid(equatorial_radius_km: f64, polar_radius_km: f64) -> Self { + Self { + semi_major_equatorial_radius_km: equatorial_radius_km, + semi_minor_equatorial_radius_km: equatorial_radius_km, + polar_radius_km, + } + } + + /// Returns the mean equatorial radius in kilometers + pub fn mean_equatorial_radius_km(&self) -> f64 { + (self.semi_major_equatorial_radius_km + self.semi_minor_equatorial_radius_km) / 2.0 + } + + pub fn is_sphere(&self) -> bool { + self.is_spheroid() + && (self.polar_radius_km - self.semi_minor_equatorial_radius_km).abs() < EPSILON + } + + pub fn is_spheroid(&self) -> bool { + (self.semi_major_equatorial_radius_km - self.semi_minor_equatorial_radius_km).abs() + < EPSILON + } + + /// Returns the flattening ratio, computed from the mean equatorial radius and the polar radius + pub fn flattening(&self) -> f64 { + (self.mean_equatorial_radius_km() - self.polar_radius_km) / self.mean_equatorial_radius_km() + } +} + +impl Display for Ellipsoid { + fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { + if self.is_sphere() { + write!(f, "radius = {} km", self.semi_major_equatorial_radius_km) + } else if self.is_spheroid() { + write!( + f, + "eq. radius = {} km, polar radius = {} km, f = {}", + self.semi_major_equatorial_radius_km, + self.polar_radius_km, + self.flattening() + ) + } else { + write!( + f, + "major radius = {} km, minor radius = {} km, polar radius = {} km, f = {}", + self.semi_major_equatorial_radius_km, + self.semi_minor_equatorial_radius_km, + self.polar_radius_km, + self.flattening() + ) + } + } +} + +impl Encode for Ellipsoid { + fn encoded_len(&self) -> der::Result { + self.semi_major_equatorial_radius_km.encoded_len()? + + self.semi_minor_equatorial_radius_km.encoded_len()? + + self.polar_radius_km.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + self.semi_major_equatorial_radius_km.encode(encoder)?; + self.semi_minor_equatorial_radius_km.encode(encoder)?; + self.polar_radius_km.encode(encoder) + } +} + +impl<'a> Decode<'a> for Ellipsoid { + fn decode>(decoder: &mut R) -> der::Result { + Ok(Self { + semi_major_equatorial_radius_km: decoder.decode()?, + semi_minor_equatorial_radius_km: decoder.decode()?, + polar_radius_km: decoder.decode()?, + }) + } +} diff --git a/src/structure/constants/mod.rs b/src/structure/constants/mod.rs index 0b1f5995..283e0ed6 100644 --- a/src/structure/constants/mod.rs +++ b/src/structure/constants/mod.rs @@ -10,7 +10,7 @@ pub mod planetary; pub mod spacecraft; -pub mod triaxialellipsoid; +pub mod ellipsoid; pub use planetary::*; pub use spacecraft::*; diff --git a/src/structure/constants/planetary.rs b/src/structure/constants/planetary.rs index 278e2dc8..fdb8151e 100644 --- a/src/structure/constants/planetary.rs +++ b/src/structure/constants/planetary.rs @@ -9,7 +9,7 @@ */ use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; -use super::triaxialellipsoid::TriaxialEllipsoid; +use super::ellipsoid::Ellipsoid; /// Planetary constants can store the same data as the SPICE textual PCK files #[derive(Clone, Debug, PartialEq)] @@ -18,25 +18,25 @@ pub struct PlanetaryConstants<'a> { pub name: &'a str, /// Generic comments field pub comments: &'a str, - /// The shape is always a tri axial ellipsoid - pub shape: TriaxialEllipsoid, /// Gravitational parameter (μ) of this planetary object. pub mu_km3_s2: f64, + /// The shape is always a tri axial ellipsoid + pub shape: Option, } impl<'a> Encode for PlanetaryConstants<'a> { fn encoded_len(&self) -> der::Result { Utf8StringRef::new(self.name)?.encoded_len()? + Utf8StringRef::new(self.comments)?.encoded_len()? - + self.shape.encoded_len()? + self.mu_km3_s2.encoded_len()? + + self.shape.encoded_len()? } fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { Utf8StringRef::new(self.name)?.encode(encoder)?; Utf8StringRef::new(self.comments)?.encode(encoder)?; - self.shape.encode(encoder)?; - self.mu_km3_s2.encode(encoder) + self.mu_km3_s2.encode(encoder)?; + self.shape.encode(encoder) } } @@ -48,8 +48,8 @@ impl<'a> Decode<'a> for PlanetaryConstants<'a> { Ok(Self { name: name.as_str(), comments: comments.as_str(), - shape: decoder.decode()?, mu_km3_s2: decoder.decode()?, + shape: Some(decoder.decode()?), }) } } diff --git a/src/structure/constants/triaxialellipsoid.rs b/src/structure/constants/triaxialellipsoid.rs deleted file mode 100644 index 692f9be1..00000000 --- a/src/structure/constants/triaxialellipsoid.rs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ -use der::{Decode, Encode, Reader, Writer}; - -/// Only the Triaxial Ellipsoid shape model is currently supported by ANISE. -/// This is directly inspired from SPICE PCK. -/// > For each body, three radii are listed: The first number is -/// > the largest equatorial radius (the length of the semi-axis -/// > containing the prime meridian), the second number is the smaller -/// > equatorial radius, and the third is the polar radius. -/// -/// Example: Radii of the Earth. -/// -/// BODY399_RADII = ( 6378.1366 6378.1366 6356.7519 ) -#[derive(Copy, Clone, Debug, PartialEq)] -pub struct TriaxialEllipsoid { - pub largest_equatorial_radius_km: Option, - pub smallest_equatorial_radius_km: Option, - pub polar_radius_km: Option, -} - -impl Encode for TriaxialEllipsoid { - fn encoded_len(&self) -> der::Result { - self.largest_equatorial_radius_km.encoded_len()? - + self.smallest_equatorial_radius_km.encoded_len()? - + self.polar_radius_km.encoded_len()? - } - - fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { - self.largest_equatorial_radius_km.encode(encoder)?; - self.smallest_equatorial_radius_km.encode(encoder)?; - self.polar_radius_km.encode(encoder) - } -} - -impl<'a> Decode<'a> for TriaxialEllipsoid { - fn decode>(decoder: &mut R) -> der::Result { - Ok(Self { - largest_equatorial_radius_km: decoder.decode()?, - smallest_equatorial_radius_km: decoder.decode()?, - polar_radius_km: decoder.decode()?, - }) - } -} diff --git a/src/structure/mod.rs b/src/structure/mod.rs index d0ef7c19..4de78aee 100644 --- a/src/structure/mod.rs +++ b/src/structure/mod.rs @@ -34,7 +34,7 @@ pub const ANISE_VERSION: Semver = Semver { }; /// The maximum number of trajectories that can be loaded in a single context -pub const MAX_TRAJECTORIES: usize = 128; +pub const MAX_TRAJECTORIES: usize = 31; // The maximum degree supported by ANISE. // Remove this once https://github.com/anise-toolkit/anise.rs/issues/19 is implemented. diff --git a/tests/astro/orbit.rs b/tests/astro/orbit.rs index 49e5180c..463769fc 100644 --- a/tests/astro/orbit.rs +++ b/tests/astro/orbit.rs @@ -24,7 +24,7 @@ fn state_def_circ_inc() { let buf = file_mmap!(path).unwrap(); let ctx = AniseContext::try_from_bytes(&buf).unwrap(); - let eme2k = cosm.frame("EME2000"); + let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); let epoch = Epoch::from_mjd_tai(21_545.0); let cart = Orbit::cartesian( @@ -128,8 +128,11 @@ fn state_def_circ_inc() { #[test] fn state_def_elliptical() { - let cosm = Cosm::de438_gmat(); - let eme2k = cosm.frame("EME2000"); + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + + let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); let epoch = Epoch::from_mjd_tai(21_545.0); let cart = Orbit::cartesian( @@ -215,8 +218,11 @@ fn state_def_elliptical() { #[test] fn state_def_circ_eq() { - let cosm = Cosm::de438_gmat(); - let eme2k = cosm.frame("EME2000"); + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + + let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); let epoch = Epoch::from_mjd_tai(21_545.0); let cart = Orbit::cartesian( @@ -300,8 +306,11 @@ fn state_def_circ_eq() { #[test] fn state_def_equatorial() { - let cosm = Cosm::de438_gmat(); - let eme2k = cosm.frame("EME2000"); + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + + let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); let epoch = Epoch::from_mjd_tai(21_545.0); let cart = Orbit::cartesian( @@ -325,8 +334,11 @@ fn state_def_equatorial() { #[test] fn state_def_reciprocity() { - let cosm = Cosm::de438_gmat(); - let eme2k = cosm.frame("EME2000"); + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + + let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); let epoch = Epoch::from_mjd_tai(21_545.0); @@ -396,10 +408,12 @@ fn state_def_reciprocity() { #[test] fn geodetic_vallado() { - let cosm = Cosm::de438_gmat(); - let eme2k = cosm.frame("EME2000"); + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + + let eme2k = ctx.geodetic_frame("Earth", "J2000").unwrap(); - dbg!(eme2k.semi_major_radius()); let epoch = Epoch::from_mjd_tai(51_545.0); // Test case from Vallado, 4th Ed., page 173, Example 3-3 let ri = 6524.834; @@ -414,7 +428,15 @@ fn geodetic_vallado() { f64_eq!(r.geodetic_latitude(), lat, "latitude (φ)"); f64_eq!(r.geodetic_longitude(), long, "longitude (λ)"); f64_eq!(r.geodetic_height(), height, "height"); - let r = GeodeticOrbit::from_geodesic(lat, long, height, epoch, eme2k); + let mean_earth_angular_velocity_deg_s = 0.004178079012116429; + let r = GeodeticOrbit::from_altlatlong( + lat, + long, + height, + mean_earth_angular_velocity_deg_s, + epoch, + eme2k, + ); f64_eq!(r.radius_km.x, ri_val, "r_i"); f64_eq!(r.radius_km.y, rj_val, "r_j"); f64_eq!(r.radius_km.z, rk, "r_k"); @@ -428,7 +450,14 @@ fn geodetic_vallado() { let ri = 6_119.399_587_411_616; let rj = -1_571.479_380_333_195; let rk = -871.561_161_926_003_9; - let r = GeodeticOrbit::from_geodesic(lat, long, height, epoch, eme2k); + let r = GeodeticOrbit::from_altlatlong( + lat, + long, + height, + mean_earth_angular_velocity_deg_s, + epoch, + eme2k, + ); f64_eq!(r.radius_km.x, ri, "r_i"); f64_eq!(r.radius_km.y, rj, "r_j"); f64_eq!(r.radius_km.z, rk, "r_k"); @@ -440,8 +469,12 @@ fn geodetic_vallado() { #[test] fn with_init() { - let cosm = Cosm::de438_gmat(); - let eme2k = cosm.frame("EME2000"); + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + + let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); + let epoch = Epoch::from_gregorian_tai_at_midnight(2021, 3, 4); let kep = Orbit::keplerian( 8_191.93, 0.024_5, 12.85, 306.614, 314.19, 99.887_7, epoch, eme2k, From 870695faba700bafb6f9a43d45be5ea97ef05c7e Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sat, 5 Nov 2022 11:07:08 -0600 Subject: [PATCH 12/48] Reduced size of structure by changing placement of Option<_>s Signed-off-by: Christopher Rabotin --- src/structure/constants/spacecraft.rs | 130 ++++++++++++++++++------ src/structure/orientation/phaseangle.rs | 8 +- src/structure/orientation/trigangle.rs | 8 +- tests/lib.rs | 62 +++++++++++ 4 files changed, 170 insertions(+), 38 deletions(-) diff --git a/src/structure/constants/spacecraft.rs b/src/structure/constants/spacecraft.rs index 9959fbf6..f7698acc 100644 --- a/src/structure/constants/spacecraft.rs +++ b/src/structure/constants/spacecraft.rs @@ -18,19 +18,13 @@ pub struct SpacecraftConstants<'a> { pub name: &'a str, /// Generic comments field pub comments: &'a str, - /// Structural mass of the spacecraft in kg - pub dry_mass_kg: Option, - /// Total fuel mass of the spacecraft in kg - pub fuel_mass_kg: Option, - /// Solar radiation pressure area in m^2 - pub srp_area_m2: Option, - /// Solar radiation pressure coefficient of reflectivity (C_r) - pub srp_coeff_reflectivity: Option, - /// Atmospheric drag area in m^2 - pub drag_area_m2: Option, - /// Drag coefficient (C_d) - pub drag_coeff: Option, - /// Inertia tensor + /// Mass of the spacecraft in kg + pub mass_kg: Option, + /// Solar radiation pressure data + pub srp_data: Option, + /// Atmospheric drag data + pub drag_data: Option, + // Inertia tensor pub inertia_tensor: Option, } @@ -38,24 +32,18 @@ impl<'a> Encode for SpacecraftConstants<'a> { fn encoded_len(&self) -> der::Result { Utf8StringRef::new(self.name)?.encoded_len()? + Utf8StringRef::new(self.comments)?.encoded_len()? - + self.dry_mass_kg.encoded_len()? - + self.fuel_mass_kg.encoded_len()? - + self.srp_area_m2.encoded_len()? - + self.srp_coeff_reflectivity.encoded_len()? - + self.drag_area_m2.encoded_len()? - + self.drag_coeff.encoded_len()? + + self.mass_kg.encoded_len()? + + self.srp_data.encoded_len()? + + self.drag_data.encoded_len()? + self.inertia_tensor.encoded_len()? } fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { Utf8StringRef::new(self.name)?.encode(encoder)?; Utf8StringRef::new(self.comments)?.encode(encoder)?; - self.dry_mass_kg.encode(encoder)?; - self.fuel_mass_kg.encode(encoder)?; - self.srp_area_m2.encode(encoder)?; - self.srp_coeff_reflectivity.encode(encoder)?; - self.drag_area_m2.encode(encoder)?; - self.drag_coeff.encode(encoder)?; + self.mass_kg.encode(encoder)?; + self.srp_data.encode(encoder)?; + self.drag_data.encode(encoder)?; self.inertia_tensor.encode(encoder) } } @@ -68,13 +56,95 @@ impl<'a> Decode<'a> for SpacecraftConstants<'a> { Ok(Self { name: name.as_str(), comments: comments.as_str(), + mass_kg: Some(decoder.decode()?), + srp_data: Some(decoder.decode()?), + drag_data: Some(decoder.decode()?), + inertia_tensor: Some(decoder.decode()?), + }) + } +} + +/// Defines a spacecraft mass a the sum of the dry (structural) mass and the fuel mass, both in kilogram +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct Mass { + /// Structural mass of the spacecraft in kg + pub dry_mass_kg: f64, + /// Total fuel mass of the spacecraft in kg + pub fuel_mass_kg: f64, +} + +impl Encode for Mass { + fn encoded_len(&self) -> der::Result { + self.dry_mass_kg.encoded_len()? + self.fuel_mass_kg.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + self.dry_mass_kg.encode(encoder)?; + self.fuel_mass_kg.encode(encoder) + } +} + +impl<'a> Decode<'a> for Mass { + fn decode>(decoder: &mut R) -> der::Result { + Ok(Self { dry_mass_kg: decoder.decode()?, fuel_mass_kg: decoder.decode()?, - srp_area_m2: decoder.decode()?, - srp_coeff_reflectivity: decoder.decode()?, - drag_area_m2: decoder.decode()?, - drag_coeff: decoder.decode()?, - inertia_tensor: Some(decoder.decode()?), + }) + } +} + +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct SRPData { + /// Solar radiation pressure area in m^2 + pub area_m2: f64, + /// Solar radiation pressure coefficient of reflectivity (C_r) + pub coeff_reflectivity: f64, +} + +impl<'a> Encode for SRPData { + fn encoded_len(&self) -> der::Result { + self.area_m2.encoded_len()? + self.coeff_reflectivity.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + self.area_m2.encode(encoder)?; + self.coeff_reflectivity.encode(encoder) + } +} + +impl<'a> Decode<'a> for SRPData { + fn decode>(decoder: &mut R) -> der::Result { + Ok(Self { + area_m2: decoder.decode()?, + coeff_reflectivity: decoder.decode()?, + }) + } +} + +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct DragData { + /// Atmospheric drag area in m^2 + pub area_m2: Option, + /// Drag coefficient (C_d) + pub coeff_drag: Option, +} + +impl<'a> Encode for DragData { + fn encoded_len(&self) -> der::Result { + self.area_m2.encoded_len()? + self.coeff_drag.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + self.area_m2.encode(encoder)?; + self.coeff_drag.encode(encoder) + } +} + +impl<'a> Decode<'a> for DragData { + fn decode>(decoder: &mut R) -> der::Result { + Ok(Self { + area_m2: decoder.decode()?, + coeff_drag: decoder.decode()?, }) } } diff --git a/src/structure/orientation/phaseangle.rs b/src/structure/orientation/phaseangle.rs index 99df49bb..3fb127f8 100644 --- a/src/structure/orientation/phaseangle.rs +++ b/src/structure/orientation/phaseangle.rs @@ -11,14 +11,14 @@ use der::{Decode, Encode, Reader, Writer}; /// Angle data is represented as a polynomial of an angle, exactly like in SPICE PCK. /// In fact, the following documentation is basically copied from [the required PCK reading](https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/pck.html). -#[derive(Copy, Clone, Debug, PartialEq)] +#[derive(Copy, Clone, Debug, Default, PartialEq)] pub struct PhaseAngle { /// The fixed offset of the angular data - pub offset_deg: Option, + pub offset_deg: f64, /// The rate of change of this angle per T, where T represents then number of centuries since J2000 TDB for right ascension and declination, and days since J2000 TDB for the axis twist. - pub rate_deg: Option, + pub rate_deg: f64, /// The acceleration of this angle per T (same definition as above). - pub accel_deg: Option, + pub accel_deg: f64, } impl Encode for PhaseAngle { diff --git a/src/structure/orientation/trigangle.rs b/src/structure/orientation/trigangle.rs index 3bc86b58..d64d820e 100644 --- a/src/structure/orientation/trigangle.rs +++ b/src/structure/orientation/trigangle.rs @@ -56,14 +56,14 @@ use super::phaseangle::PhaseAngle; /// i i i /// /// are specific to each satellite. -#[derive(Copy, Clone, Debug, PartialEq)] +#[derive(Copy, Clone, Debug, Default, PartialEq)] pub struct TrigAngle { /// Right ascension angle factor for this trig polynomial - pub right_ascension_deg: Option, + pub right_ascension_deg: f64, /// Declination angle factor for this trig polynomial - pub declination_deg: Option, + pub declination_deg: f64, /// Prime meridian angle factor for this trig polynomial - pub prime_meridian_deg: Option, + pub prime_meridian_deg: f64, /// Nutation and precession phase angle data of each trigonometric polynomial, e.g. J1-J10 and Ja-Je for Jupiter data. pub nut_prec_angle: PhaseAngle, } diff --git a/tests/lib.rs b/tests/lib.rs index 1fcc867c..e9c3b727 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -8,8 +8,70 @@ * Documentation: https://nyxspace.com/ */ +use anise::structure::orientation::{ + orient_data::OrientationData, phaseangle::PhaseAngle, trigangle::TrigAngle, +}; +use der::asn1::SequenceOf; + #[macro_use] extern crate approx; mod astro; mod ephemerides; mod frames; + +#[test] +fn size_test() { + use anise::file_mmap; + use anise::prelude::*; + + let path = "./data/de438s.anise"; + let buf = file_mmap!(path).unwrap(); + let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + + use std::mem::size_of_val; + println!("{}", size_of_val(&ctx)); + println!("{}", size_of_val(&ctx.ephemeris_data)); + println!("{}", size_of_val(&ctx.orientation_data)); + let pa = PhaseAngle { + offset_deg: 0.0, + rate_deg: 0.0, + accel_deg: 0.0, + }; + println!("pa = {}", size_of_val(&pa)); + + let ta = TrigAngle { + right_ascension_deg: 0.0, + declination_deg: 0.0, + prime_meridian_deg: 0.0, + nut_prec_angle: pa, + }; + + println!("ta = {}", size_of_val(&ta)); + + let mut nut_prec_angles = SequenceOf::new(); + nut_prec_angles.add(ta).unwrap(); + + println!("npa = {}", size_of_val(&nut_prec_angles)); + + let pa_od = OrientationData::PlanetaryConstant { + pole_right_ascension: pa, + pole_declination: pa, + prime_meridian: pa, + nut_prec_angles: nut_prec_angles.clone(), + }; + println!("pa_od = {}", size_of_val(&pa_od)); + + struct PlanetaryConstant { + pole_right_ascension: PhaseAngle, + pole_declination: PhaseAngle, + prime_meridian: PhaseAngle, + nut_prec_angles: SequenceOf, + }; + let pa_od2 = PlanetaryConstant { + pole_right_ascension: pa, + pole_declination: pa, + prime_meridian: pa, + nut_prec_angles, + }; + println!("pa_od2 = {}", size_of_val(&pa_od2)); +} From 04b719f76a36d97be31941e4480f2da6a18c1381 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sat, 5 Nov 2022 22:13:26 -0600 Subject: [PATCH 13/48] Productive co-engineering session! MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Chris de Claverie Co-authored-by: Grégoire Henry Signed-off-by: Christopher Rabotin --- src/context/merge.rs | 2 +- src/math/mod.rs | 1 + src/math/rotation/mod.rs | 149 ++++++++++++++++++++++++++++++++ src/structure/spline/splines.rs | 5 +- 4 files changed, 154 insertions(+), 3 deletions(-) create mode 100644 src/math/rotation/mod.rs diff --git a/src/context/merge.rs b/src/context/merge.rs index 4bff73f4..2b163e00 100644 --- a/src/context/merge.rs +++ b/src/context/merge.rs @@ -32,7 +32,7 @@ impl<'a> AniseContext<'a> { /// # Potential errors /// + The resulting file would have too many trajectories compared to the maximum number of trajectories /// + Two trajectories have the same name but different contents - /// + Incomatible versions: the versions of self and other must match + /// + Incompatible versions: the versions of self and other must match pub fn merge_mut(&mut self, other: &'a Self) -> Result<(usize, usize), AniseError> { // Check the versions match (eventually, we need to make sure that the versions are compatible) if self.metadata.anise_version != other.metadata.anise_version { diff --git a/src/math/mod.rs b/src/math/mod.rs index 625abf6d..5d1367ac 100644 --- a/src/math/mod.rs +++ b/src/math/mod.rs @@ -15,6 +15,7 @@ pub type Vector6 = nalgebra::Vector6; pub mod angles; pub mod cartesian; pub mod interpolation; +pub mod rotation; /// Returns the projection of a onto b pub fn projv(a: &Vector3, b: &Vector3) -> Vector3 { diff --git a/src/math/rotation/mod.rs b/src/math/rotation/mod.rs new file mode 100644 index 00000000..820871eb --- /dev/null +++ b/src/math/rotation/mod.rs @@ -0,0 +1,149 @@ +use nalgebra::Vector3; + +pub trait Rotation { + // What do we want as a common interface for rotations? + + // My suggestion : + fn new(axis: Vector3, angle: T) -> Self; + fn axis(&self) -> Vector3; + fn angle(&self) -> T; // Rotation angle in radians around the rotation axis + + //fn compose where Rot2 : !ComposeWith>>(&self, other: &Rot2) -> (Vector3, T) { + // Composition of two rotations with possibly differing precision + + // Imo the best approach would be to have two implementations + // A specific one, for example composition of two quaternions is a multiplication that can be made very efficient + // And a generic one that would be the conversion into axis/angle of both rotations and then compose the axis/angle representations + // This could probably be implemented with smart usage of a ComposeWith trait + + // Reference for the generic approach : https://math.stackexchange.com/questions/382760/composition-of-two-axis-angle-rotations + // We should probably get the formulas through Herbie floating point optimization + + // let alpha = self.angle(); let beta = other.angle(); let l = self.axis(); let m = other.axis(); + // let new_angle = 2*acos(cos(alpha/2) * cos(beta/2) - l.dot(m) * sin(alpha/2) * sin(beta/2)); + // let new_axis = (2/new_angle)*asin( sin(alpha/2) * cos(beta/2) * l + cos(alpha/2) * sin(beta/2) * m + sin(alpha/2) * sin(beta/2) * l.cross(m) ); + + // Will automatically be coerced into a RawRotation via the From trait, if needed + // (new_axis, new_angle) + // } + + // fn inverse(&self) -> Self ? +} + +pub trait ComposeWith { + type Output; + + fn compose(&self, other: &T) -> Self::Output; +} + +// Possible tests for all rotations : +// Check transformation is correct : rotation -> RawRotation -> rotation +// Check composition rules are correct with inverse rotation ? +// Check edge cases : all-zero axis, non-unit axis, zero angle, , NaN/Inf angle, angle > PI or < PI, others ? +// Check against other libraries ? +// Check performance differences ? + +/// Raw rotation, represented as an axis and angle +pub struct RawRotation { + pub axis: Vector3, + pub angle: T, +} + +impl Rotation for RawRotation { + fn new(axis: Vector3, angle: T) -> Self { + Self { axis, angle } + } + + fn axis(&self) -> Vector3 { + self.axis.clone() + } + + fn angle(&self) -> T { + self.angle.clone() + } +} + +impl From<(Vector3, T)> for RawRotation { + fn from((axis, angle): (Vector3, T)) -> Self { + Self::new(axis, angle) + } +} + +/// Unit quaternion with a specified tolerance for normalization +pub struct RotQuaternion { + pub w: T, + pub x: T, + pub y: T, + pub z: T, + + /// Tolerances are used in the normalization process to make sure + /// that the quaternion is normalized with the needed guarantees + // Should tolerances be optional ? I'd say they should be mandatory but have a fair default value + pub abs_tolerance: T, + pub rel_tolerance: T, + //// Source and destination reference frames are used for runtime check of + //// the correctness of the rotation + // TODO : we should have a way to disable runtime checks + // pub source : RefFrameHash, + // pub destination : RefFrameHash +} + +impl> RotQuaternion { + pub fn new(w: T, x: T, y: T, z: T) -> Self { + // TODO : Check the quaternion is unitary with the correct tolerance + todo!(); + + Self { + w, + x, + y, + z, + abs_tolerance: T::from(1e-6_f32), + rel_tolerance: T::from(1e-6_f32), + } + } +} + +impl RotQuaternion { + pub fn new_with_tol(w: T, x: T, y: T, z: T, abs_tol: T, rel_tol: T) -> Self { + // TODO : Check the quaternion is unit with the correct tolerance + todo!(); + + Self { + w, + x, + y, + z, + abs_tolerance: abs_tol, + rel_tolerance: rel_tol, + } + } +} + +impl Rotation for RotQuaternion { + fn new(axis: Vector3, angle: T) -> Self { + todo!(); + } + fn axis(&self) -> Vector3 { + todo!() + } + + fn angle(&self) -> T { + todo!() + } +} + +impl ComposeWith> for RotQuaternion { + // TODO : allow differing precisions ? + type Output = Self; + + fn compose(&self, other: &Self) -> Self::Output { + todo!() + } +} + +/// Modified Rodrigues parameter +pub struct MRP {} + +// etc... :) +// Good night ! diff --git a/src/structure/spline/splines.rs b/src/structure/spline/splines.rs index be27739d..ce385be7 100644 --- a/src/structure/spline/splines.rs +++ b/src/structure/spline/splines.rs @@ -13,7 +13,7 @@ use super::meta::SplineMeta; // #[derive(Enumerated)] // #[repr(u8)] -// pub enum TrunctationStrategy { +// pub enum TruncationStrategy { // None = 0, // TruncateLow = 1, // TruncateHigh = 2, @@ -27,8 +27,9 @@ use super::meta::SplineMeta; pub struct Splines<'a> { /// Metadata of the spline pub metadata: SplineMeta, + // use AsBytes / FromBytes from "zerocopy" crate to load the data ? /// Stores the CRC32 checksum of the data octet string. - pub data_checksum: u32, + pub data_checksum: u32, // TODO: move the checksum into a CRC32DataArray to check integrity on load /// The data as a packed struct of octets pub data: &'a [u8], } From e5ab976666793da36d2455443695013ab7374f24 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sun, 6 Nov 2022 17:25:46 -0700 Subject: [PATCH 14/48] Array<'a, T> solves the issues with SequenceOf I actually can't believe this works, but this is FANTASTIC! I'll implement this for all of the other types, and that should significantly reduce stack size Signed-off-by: Christopher Rabotin --- AUTHORS.md | 5 +++ Cargo.toml | 1 + src/structure/array.rs | 51 ++++++++++++++++++++++++ src/structure/mod.rs | 1 + src/structure/orientation/orient_data.rs | 5 ++- src/structure/orientation/phaseangle.rs | 4 +- src/structure/orientation/trigangle.rs | 27 ++++++++----- tests/lib.rs | 42 ------------------- 8 files changed, 81 insertions(+), 55 deletions(-) create mode 100644 AUTHORS.md create mode 100644 src/structure/array.rs diff --git a/AUTHORS.md b/AUTHORS.md new file mode 100644 index 00000000..86c16c5f --- /dev/null +++ b/AUTHORS.md @@ -0,0 +1,5 @@ +# Authors + ++ Christopher Rabotin ++ Chris de Claverie ++ Grégoire Henry \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 6dd1c529..f14953b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ tabled = "0.10" const_format = "0.2" nalgebra = "0.31" approx = "0.5.1" +zerocopy = "0.6.1" [dev-dependencies] rust-spice = "0.7.3" diff --git a/src/structure/array.rs b/src/structure/array.rs new file mode 100644 index 00000000..9e1c5152 --- /dev/null +++ b/src/structure/array.rs @@ -0,0 +1,51 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use der::{asn1::OctetStringRef, Decode, Encode, Length, Reader, Writer}; +use zerocopy::{AsBytes, FromBytes, LayoutVerified}; + +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub struct Array<'a, T: FromBytes + AsBytes> { + // use AsBytes / FromBytes from "zerocopy" crate to load the data ? + /// Stores the CRC32 checksum of the data octet string. + pub data_checksum: u32, // TODO: move the checksum into a CRC32DataArray to check integrity on load + /// The data as an array of type T + pub data: &'a [T], +} + +impl<'a, T: FromBytes + AsBytes> Encode for Array<'a, T> { + fn encoded_len(&self) -> der::Result { + self.data_checksum.encoded_len()? + + OctetStringRef::new(self.data.as_bytes()) + .unwrap() + .encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + self.data_checksum.encode(encoder)?; + OctetStringRef::new(self.data.as_bytes()) + .unwrap() + .encode(encoder) + } +} + +impl<'a, T: FromBytes + AsBytes> Decode<'a> for Array<'a, T> { + fn decode>(decoder: &mut R) -> der::Result { + let data_checksum = decoder.decode()?; + let data_bytes: &[u8] = decoder.decode::()?.as_bytes(); + + // TODO: Confirm checksum is correct here. + + Ok(Self { + data_checksum, + data: LayoutVerified::new_slice(data_bytes).unwrap().into_slice(), + }) + } +} diff --git a/src/structure/mod.rs b/src/structure/mod.rs index 4de78aee..75973970 100644 --- a/src/structure/mod.rs +++ b/src/structure/mod.rs @@ -14,6 +14,7 @@ */ extern crate der; extern crate hifitime; +pub mod array; pub mod common; pub mod constants; pub mod context; diff --git a/src/structure/orientation/orient_data.rs b/src/structure/orientation/orient_data.rs index 4605ec74..05870edd 100644 --- a/src/structure/orientation/orient_data.rs +++ b/src/structure/orientation/orient_data.rs @@ -14,7 +14,7 @@ use hifitime::Epoch; pub const MAX_NUT_PREC_ANGLES: usize = 16; use super::{phaseangle::PhaseAngle, trigangle::TrigAngle}; -use crate::structure::{common::InterpolationKind, spline::Splines}; +use crate::structure::{array::Array, common::InterpolationKind, spline::Splines}; /// ANISE supports two different kinds of orientation data. High precision, with spline based interpolations, and constants right ascension, declination, and prime meridian, typically used for planetary constant data. #[derive(Clone, Debug, PartialEq)] @@ -23,7 +23,8 @@ pub enum OrientationData<'a> { pole_right_ascension: PhaseAngle, pole_declination: PhaseAngle, prime_meridian: PhaseAngle, - nut_prec_angles: SequenceOf, + // nut_prec_angles: SequenceOf, + nut_prec_angles: Array<'a, TrigAngle>, }, HighPrecision { ref_epoch: Epoch, diff --git a/src/structure/orientation/phaseangle.rs b/src/structure/orientation/phaseangle.rs index 3fb127f8..e1b6d946 100644 --- a/src/structure/orientation/phaseangle.rs +++ b/src/structure/orientation/phaseangle.rs @@ -8,10 +8,12 @@ * Documentation: https://nyxspace.com/ */ use der::{Decode, Encode, Reader, Writer}; +use zerocopy::{AsBytes, FromBytes}; /// Angle data is represented as a polynomial of an angle, exactly like in SPICE PCK. /// In fact, the following documentation is basically copied from [the required PCK reading](https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/pck.html). -#[derive(Copy, Clone, Debug, Default, PartialEq)] +#[derive(Copy, Clone, Debug, Default, PartialEq, AsBytes, FromBytes)] +#[repr(C)] pub struct PhaseAngle { /// The fixed offset of the angular data pub offset_deg: f64, diff --git a/src/structure/orientation/trigangle.rs b/src/structure/orientation/trigangle.rs index d64d820e..191be52e 100644 --- a/src/structure/orientation/trigangle.rs +++ b/src/structure/orientation/trigangle.rs @@ -7,9 +7,10 @@ * * Documentation: https://nyxspace.com/ */ -use der::{Decode, Encode, Reader, Writer}; +use der::{asn1::OctetStringRef, Decode, Encode, Reader, Writer}; use super::phaseangle::PhaseAngle; +use zerocopy::{AsBytes, FromBytes}; /// Trigonometric angle polynomials are used almost exclusively for satellites. /// This structure enables the PCK level support for this information while also enforcing the correct length. @@ -56,7 +57,8 @@ use super::phaseangle::PhaseAngle; /// i i i /// /// are specific to each satellite. -#[derive(Copy, Clone, Debug, Default, PartialEq)] +#[derive(Copy, Clone, Debug, Default, PartialEq, AsBytes, FromBytes)] +#[repr(packed)] pub struct TrigAngle { /// Right ascension angle factor for this trig polynomial pub right_ascension_deg: f64, @@ -70,17 +72,22 @@ pub struct TrigAngle { impl Encode for TrigAngle { fn encoded_len(&self) -> der::Result { - self.right_ascension_deg.encoded_len()? - + self.declination_deg.encoded_len()? - + self.prime_meridian_deg.encoded_len()? - + self.nut_prec_angle.encoded_len()? + OctetStringRef::new(self.as_bytes()).unwrap().encoded_len() + + // self.right_ascension_deg.encoded_len()? + // + self.declination_deg.encoded_len()? + // + self.prime_meridian_deg.encoded_len()? + // + self.nut_prec_angle.encoded_len()? } fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { - self.right_ascension_deg.encode(encoder)?; - self.declination_deg.encode(encoder)?; - self.prime_meridian_deg.encode(encoder)?; - self.nut_prec_angle.encode(encoder) + OctetStringRef::new(self.as_bytes()) + .unwrap() + .encode(encoder) + // self.right_ascension_deg.encode(encoder)?; + // self.declination_deg.encode(encoder)?; + // self.prime_meridian_deg.encode(encoder)?; + // self.nut_prec_angle.encode(encoder) } } diff --git a/tests/lib.rs b/tests/lib.rs index e9c3b727..d8664c1b 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -32,46 +32,4 @@ fn size_test() { println!("{}", size_of_val(&ctx)); println!("{}", size_of_val(&ctx.ephemeris_data)); println!("{}", size_of_val(&ctx.orientation_data)); - let pa = PhaseAngle { - offset_deg: 0.0, - rate_deg: 0.0, - accel_deg: 0.0, - }; - println!("pa = {}", size_of_val(&pa)); - - let ta = TrigAngle { - right_ascension_deg: 0.0, - declination_deg: 0.0, - prime_meridian_deg: 0.0, - nut_prec_angle: pa, - }; - - println!("ta = {}", size_of_val(&ta)); - - let mut nut_prec_angles = SequenceOf::new(); - nut_prec_angles.add(ta).unwrap(); - - println!("npa = {}", size_of_val(&nut_prec_angles)); - - let pa_od = OrientationData::PlanetaryConstant { - pole_right_ascension: pa, - pole_declination: pa, - prime_meridian: pa, - nut_prec_angles: nut_prec_angles.clone(), - }; - println!("pa_od = {}", size_of_val(&pa_od)); - - struct PlanetaryConstant { - pole_right_ascension: PhaseAngle, - pole_declination: PhaseAngle, - prime_meridian: PhaseAngle, - nut_prec_angles: SequenceOf, - }; - let pa_od2 = PlanetaryConstant { - pole_right_ascension: pa, - pole_declination: pa, - prime_meridian: pa, - nut_prec_angles, - }; - println!("pa_od2 = {}", size_of_val(&pa_od2)); } From f1731b071d1efe334f69e207c94cdc006901ede1 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sun, 6 Nov 2022 23:31:26 -0700 Subject: [PATCH 15/48] Converting LUT to DataArray fails I don't know how to allow a Vec to move into a large lifetime... There is a big issue when building a DataArray: we don't know how many items exist, so we need an allocator. If the solution is to allow for allocs when building, that's OK, but then we can't easily read data from SPICE without allocating before reading. The only good thing here is that we use very little stack space for passing the data around Signed-off-by: Christopher Rabotin --- src/context/append.rs | 66 ++++++++++---------- src/context/integrity.rs | 14 ++--- src/context/merge.rs | 12 +++- src/math/mod.rs | 2 +- src/naif/spk/mod.rs | 12 ++-- src/structure/array.rs | 78 +++++++++++++++++++++--- src/structure/context.rs | 8 +-- src/structure/lookuptable.rs | 20 +++--- src/structure/orientation/orient_data.rs | 7 +-- tests/ephemerides/paths.rs | 4 +- tests/ephemerides/translation.rs | 4 +- tests/lib.rs | 21 ++++++- tests/naif.rs | 8 +-- 13 files changed, 173 insertions(+), 83 deletions(-) diff --git a/src/context/append.rs b/src/context/append.rs index c0c64f09..3c7ee0ef 100644 --- a/src/context/append.rs +++ b/src/context/append.rs @@ -11,6 +11,7 @@ use crate::errors::IntegrityErrorKind; use crate::log::{error, trace}; use crate::structure::orientation::Orientation; +use crate::HashType; use crate::{ errors::{AniseError, InternalErrorKind}, structure::{context::AniseContext, ephemeris::Ephemeris, MAX_TRAJECTORIES}, @@ -20,14 +21,19 @@ use crc32fast::hash; impl<'a> AniseContext<'a> { /// Appends the provided ephemeris to this context /// - /// # Implementation defails + /// # Implementation details /// + If the provided ephemeris already exists in this context, nothing happens and this function returns Ok(false). /// This is an Ok to specify that no error happened and false to specify that nothing was appended /// + If the provided ephemeris' hash is already in the lookup table but the data do not match, this returns an Integrity Error /// specifying that nothing was added to prevent an integrity error. /// + If this ephemeris should have been added but there are already too many items compared to what the library supports, /// then this returns an Indexing Error. - pub fn append_ephemeris_mut(&mut self, e: Ephemeris<'a>) -> Result { + pub fn append_ephemeris_mut( + &mut self, + lut_hashes: &mut Vec, + lut_indexes: &mut Vec, + e: Ephemeris<'a>, + ) -> Result { let new_hash = hash(e.name.as_bytes()); if let Ok(self_idx) = self.ephemeris_lut.index_for_hash(&new_hash) { if self @@ -56,20 +62,14 @@ impl<'a> AniseContext<'a> { // This hash does not exist, let's append it. // Check that we can add one item - if self.ephemeris_lut.indexes.len() == MAX_TRAJECTORIES { - error!("[append] cannnot append ephemeris, look up table is full"); - return Err(AniseError::MaxTreeDepth); - } + // if self.ephemeris_lut.indexes.data.len() == MAX_TRAJECTORIES { + // error!("[append] cannnot append ephemeris, look up table is full"); + // return Err(AniseError::MaxTreeDepth); + // } - self.ephemeris_lut - .hashes - .add(new_hash) - .map_err(|_| InternalErrorKind::LUTAppendFailure)?; + lut_hashes.push(new_hash); // Push the index too - self.ephemeris_lut - .indexes - .add((self.ephemeris_lut.indexes.len()).try_into().unwrap()) - .map_err(|_| InternalErrorKind::LUTAppendFailure)?; + lut_indexes.push((self.ephemeris_lut.indexes.len()).try_into().unwrap()); // Add the ephemeris data self.ephemeris_data .add(e) @@ -117,26 +117,26 @@ impl<'a> AniseContext<'a> { } else { // This hash does not exist, let's append it. - // Check that we can add one item - if self.orientation_lut.indexes.len() == MAX_TRAJECTORIES { - // We're full! - return Err(AniseError::MaxTreeDepth); - } + // // Check that we can add one item + // if self.orientation_lut.indexes.len() == MAX_TRAJECTORIES { + // // We're full! + // return Err(AniseError::MaxTreeDepth); + // } - self.orientation_lut - .hashes - .add(new_hash) - .map_err(|_| InternalErrorKind::LUTAppendFailure)?; - // Push the index too - self.orientation_lut - .indexes - .add((self.orientation_lut.indexes.len()).try_into().unwrap()) - .map_err(|_| InternalErrorKind::LUTAppendFailure)?; - // Add the ephemeris data - self.orientation_data - .add(o) - .map_err(|_| InternalErrorKind::LUTAppendFailure)?; - // Increment the number of added items + // self.orientation_lut + // .hashes + // .add(new_hash) + // .map_err(|_| InternalErrorKind::LUTAppendFailure)?; + // // Push the index too + // self.orientation_lut + // .indexes + // .add((self.orientation_lut.indexes.len()).try_into().unwrap()) + // .map_err(|_| InternalErrorKind::LUTAppendFailure)?; + // // Add the ephemeris data + // self.orientation_data + // .add(o) + // .map_err(|_| InternalErrorKind::LUTAppendFailure)?; + // // Increment the number of added items Ok(true) } } diff --git a/src/context/integrity.rs b/src/context/integrity.rs index 3d6dd7ca..dbf980d6 100644 --- a/src/context/integrity.rs +++ b/src/context/integrity.rs @@ -18,20 +18,20 @@ use crate::{ impl<'a> AniseContext<'a> { pub fn check_integrity(&self) -> Result<(), AniseError> { // Ensure that the lookup tables and arrays have the same number of items - if self.ephemeris_lut.hashes.len() != self.ephemeris_lut.indexes.len() - || self.ephemeris_lut.hashes.len() != self.ephemeris_data.len() + if self.ephemeris_lut.hashes.data.len() != self.ephemeris_lut.indexes.data.len() + || self.ephemeris_lut.hashes.data.len() != self.ephemeris_data.len() { - error!("[integrity] ephemeris lookup table lengths mistmatch"); + error!("[integrity] ephemeris lookup table lengths mismatch"); return Err(AniseError::IntegrityError(IntegrityErrorKind::LookupTable)); } - if self.orientation_lut.hashes.len() != self.orientation_lut.indexes.len() - || self.orientation_lut.hashes.len() != self.orientation_data.len() + if self.orientation_lut.hashes.data.len() != self.orientation_lut.indexes.data.len() + || self.orientation_lut.hashes.data.len() != self.orientation_data.len() { error!("[integrity] orientation lookup table lengths mistmatch"); return Err(AniseError::IntegrityError(IntegrityErrorKind::LookupTable)); } // Check ephemeris integrity - for index in self.ephemeris_lut.indexes.iter() { + for index in self.ephemeris_lut.indexes.data.iter() { // Check that we can access each item from the LUT let data = self.ephemeris_data.get(*index as usize).ok_or_else(|| { error!("[integrity] {} not in ephemeris data list", index); @@ -53,7 +53,7 @@ impl<'a> AniseContext<'a> { } } // Check ephemeris integrity - for index in self.orientation_lut.indexes.iter() { + for index in self.orientation_lut.indexes.data.iter() { // Check that we can access each item from the LUT let data = self.orientation_data.get(*index as usize).ok_or_else(|| { error!("[integrity] {} not in orientation data list", index); diff --git a/src/context/merge.rs b/src/context/merge.rs index 2b163e00..aab101a4 100644 --- a/src/context/merge.rs +++ b/src/context/merge.rs @@ -51,18 +51,20 @@ impl<'a> AniseContext<'a> { } // Append the Ephemeris data tables let mut num_ephem_added = 0; - for new_hash in other.ephemeris_lut.hashes.iter() { + let mut lut_hashes = Vec::new(); + let mut lut_indexes = Vec::new(); + for new_hash in other.ephemeris_lut.hashes.data.iter() { let data_idx = other.ephemeris_lut.index_for_hash(new_hash)?.into(); trace!("[merge] fetching ephemeris idx={data_idx} for hash {new_hash}"); let other_e = other.try_ephemeris_data(data_idx)?; - if self.append_ephemeris_mut(*other_e)? { + if self.append_ephemeris_mut(&mut lut_hashes, &mut lut_indexes, *other_e)? { num_ephem_added += 1; } } // Append the Orientation data tables let mut num_orientation_added = 0; - for new_hash in other.orientation_lut.hashes.iter() { + for new_hash in other.orientation_lut.hashes.data.iter() { let data_idx = other.orientation_lut.index_for_hash(new_hash)?.into(); trace!("[merge] fetching orientation idx={data_idx} for hash {new_hash}"); let other_o = other.try_orientation_data(data_idx)?; @@ -70,6 +72,10 @@ impl<'a> AniseContext<'a> { num_orientation_added += 1; } } + + // And set the lookup data. + // self.ephemeris_lut.hashes.set_data(&mut lut_hashes); + Ok((num_ephem_added, num_orientation_added)) } } diff --git a/src/math/mod.rs b/src/math/mod.rs index 5d1367ac..8fdee68e 100644 --- a/src/math/mod.rs +++ b/src/math/mod.rs @@ -15,7 +15,7 @@ pub type Vector6 = nalgebra::Vector6; pub mod angles; pub mod cartesian; pub mod interpolation; -pub mod rotation; +// pub mod rotation; /// Returns the projection of a onto b pub fn projv(a: &Vector3, b: &Vector3) -> Vector3 { diff --git a/src/naif/spk/mod.rs b/src/naif/spk/mod.rs index c38dd06f..f1ad7b0b 100644 --- a/src/naif/spk/mod.rs +++ b/src/naif/spk/mod.rs @@ -323,13 +323,17 @@ impl<'a> SPK<'a> { let bytes = file_mmap!(fname).unwrap(); all_bufs.push(bytes); } + + let mut lut_hashes = Vec::new(); + let mut lut_indexes = Vec::new(); + // Unwrap all of the possibly failing calls because we just created these files so we assume they're valid for buf in &all_bufs { let ephem: Ephemeris = match Ephemeris::from_der(buf) { Ok(it) => it, Err(err) => return Err(AniseError::DecodingError(err)), }; - ctx.append_ephemeris_mut(ephem)?; + ctx.append_ephemeris_mut(&mut lut_hashes, &mut lut_indexes, ephem)?; } ctx.save_as(filename, true)?; @@ -344,15 +348,15 @@ impl<'a> SPK<'a> { // Load this ANIS file and make sure that it matches the original data. let bytes = file_mmap!(filename).unwrap(); let ctx = AniseContext::from_bytes(&bytes); - // If we skiped empty ephems, we can't check thet exact length, so skip that + // If we skipped empty ephemerides, we can't check the exact length, so skip that if !skip_empty { assert_eq!( - ctx.ephemeris_lut.hashes.len(), + ctx.ephemeris_lut.hashes.data.len(), self.segments.len(), "Incorrect number of ephem in map" ); assert_eq!( - ctx.ephemeris_lut.indexes.len(), + ctx.ephemeris_lut.indexes.data.len(), self.segments.len(), "Incorrect number of ephem in map" ); diff --git a/src/structure/array.rs b/src/structure/array.rs index 9e1c5152..89682fe6 100644 --- a/src/structure/array.rs +++ b/src/structure/array.rs @@ -8,11 +8,15 @@ * Documentation: https://nyxspace.com/ */ +use crc32fast::hash; use der::{asn1::OctetStringRef, Decode, Encode, Length, Reader, Writer}; +use log::error; use zerocopy::{AsBytes, FromBytes, LayoutVerified}; -#[derive(Copy, Clone, Debug, PartialEq, Eq)] -pub struct Array<'a, T: FromBytes + AsBytes> { +use crate::{errors::IntegrityErrorKind, prelude::AniseError}; + +#[derive(Copy, Clone, Default, Debug, PartialEq, Eq)] +pub struct DataArray<'a, T: Default + FromBytes + AsBytes> { // use AsBytes / FromBytes from "zerocopy" crate to load the data ? /// Stores the CRC32 checksum of the data octet string. pub data_checksum: u32, // TODO: move the checksum into a CRC32DataArray to check integrity on load @@ -20,7 +24,61 @@ pub struct Array<'a, T: FromBytes + AsBytes> { pub data: &'a [T], } -impl<'a, T: FromBytes + AsBytes> Encode for Array<'a, T> { +impl<'a, T: Default + FromBytes + AsBytes> DataArray<'a, T> { + /// Builds a new data array and sets its checksum. + pub fn new(data: &'a [T]) -> Self { + let mut me = Self { + data_checksum: 0, + data, + }; + me.update_hash(); + me + } + + /// Updates the hash of the bytes representation of this data. + pub fn update_hash(&mut self) { + self.data_checksum = hash(self.data.as_bytes()); + } + + // pub fn add(&mut self, item: T) { + // // TODO: Put behind an `alloc` crate feature + // let mut data: Vec = Vec::from_iter(self.data.iter().cloned()); + // data.push(item); + // self.set_data(&mut data); + // // info!("Now with {} items", self.da) + // self.update_hash(); + // } + + pub fn set_data(&mut self, backend: &'a [T]) { + self.data = backend; + self.update_hash(); + } + + pub const fn len(&self) -> usize { + self.data.len() + } + + pub fn check_integrity(&self) -> Result<(), AniseError> { + // Ensure that the data is correctly decoded + let computed_chksum = hash(self.data.as_bytes()); + if computed_chksum == self.data_checksum { + Ok(()) + } else { + error!( + "[integrity] expected hash {} but computed {}", + self.data_checksum, computed_chksum + ); + Err(AniseError::IntegrityError( + IntegrityErrorKind::ChecksumInvalid { + expected: self.data_checksum, + computed: computed_chksum, + }, + )) + } + } +} + +impl<'a, T: Default + FromBytes + AsBytes> Encode for DataArray<'a, T> { fn encoded_len(&self) -> der::Result { self.data_checksum.encoded_len()? + OctetStringRef::new(self.data.as_bytes()) @@ -36,16 +94,20 @@ impl<'a, T: FromBytes + AsBytes> Encode for Array<'a, T> { } } -impl<'a, T: FromBytes + AsBytes> Decode<'a> for Array<'a, T> { +impl<'a, T: Default + FromBytes + AsBytes> Decode<'a> for DataArray<'a, T> { fn decode>(decoder: &mut R) -> der::Result { let data_checksum = decoder.decode()?; let data_bytes: &[u8] = decoder.decode::()?.as_bytes(); - // TODO: Confirm checksum is correct here. + // TODO: Try to find a way to compute the checksum here, but I don't know how to return a checksum error instead of a der::Result (which are quite limited) - Ok(Self { + let me = Self { data_checksum, - data: LayoutVerified::new_slice(data_bytes).unwrap().into_slice(), - }) + data: match LayoutVerified::new_slice(data_bytes) { + Some(data) => data.into_slice(), + None => &[T::default(); 0], + }, + }; + Ok(me) } } diff --git a/src/structure/context.rs b/src/structure/context.rs index 9f870e60..34733768 100644 --- a/src/structure/context.rs +++ b/src/structure/context.rs @@ -34,13 +34,13 @@ use super::{ pub struct AniseContext<'a> { pub metadata: Metadata<'a>, /// Ephemeris LookUpTable (LUT) stores the mapping between a given ephemeris' hash and its index in the ephemeris list. - pub ephemeris_lut: LookUpTable, + pub ephemeris_lut: LookUpTable<'a>, /// Orientation LookUpTable (LUT) stores the mapping between a given orientation's hash and its index in the ephemeris list. - pub orientation_lut: LookUpTable, + pub orientation_lut: LookUpTable<'a>, /// Spacecraft constants LookUpTable (LUT) stores the mapping between a given spacecraft's hash and its index in the ephemeris list. - pub spacecraft_constant_lut: LookUpTable, + pub spacecraft_constant_lut: LookUpTable<'a>, /// Planetary constants LookUpTable (LUT) stores the mapping between a given planetary data's hash and its index in the ephemeris list. - pub planetary_constant_lut: LookUpTable, + pub planetary_constant_lut: LookUpTable<'a>, /// List of ephemerides in this file, whose index is stored in the LUT. pub ephemeris_data: SequenceOf, MAX_TRAJECTORIES>, // Orientation data, both for planetary constant data and high precision orientation data diff --git a/src/structure/lookuptable.rs b/src/structure/lookuptable.rs index 0335198a..7a0e2048 100644 --- a/src/structure/lookuptable.rs +++ b/src/structure/lookuptable.rs @@ -13,7 +13,7 @@ use log::error; use crate::{prelude::AniseError, HashType}; -use super::MAX_TRAJECTORIES; +use super::{array::DataArray, MAX_TRAJECTORIES}; /// A LookUpTable allows looking up the data given the hash. /// @@ -22,14 +22,16 @@ use super::MAX_TRAJECTORIES; /// Eventually, the specification will require the hashes will be ordered for a binary search on the index, /// thereby greatly reducing the search time for each data, from O(N) to O(log N). #[derive(Clone, Default, PartialEq, Eq)] -pub struct LookUpTable { +pub struct LookUpTable<'a> { /// Hashes of the general hashing algorithm - pub hashes: SequenceOf, + // pub hashes: SequenceOf, + pub hashes: DataArray<'a, HashType>, /// Corresponding index for each hash - pub indexes: SequenceOf, + // pub indexes: SequenceOf, + pub indexes: DataArray<'a, u16>, } -impl LookUpTable { +impl<'a> LookUpTable<'a> { /// Searches the lookup table for the requested hash /// Returns Ok with the index for the requested hash /// Returns Err with an ItemNotFound if the item isn't found @@ -38,9 +40,9 @@ impl LookUpTable { /// NOTE: Until https://github.com/anise-toolkit/anise.rs/issues/18 is addressed /// this function has a time complexity of O(N) pub fn index_for_hash(&self, hash: &HashType) -> Result { - for (idx, item) in self.hashes.iter().enumerate() { + for (idx, item) in self.hashes.data.iter().enumerate() { if item == hash { - return match self.indexes.get(idx) { + return match self.indexes.data.get(idx) { Some(item_index) => Ok(*item_index), None => { error!("lookup table contain {hash:x} ({hash}) but it does not have an entry for it"); @@ -65,7 +67,7 @@ impl LookUpTable { } } -impl Encode for LookUpTable { +impl<'a> Encode for LookUpTable<'a> { fn encoded_len(&self) -> der::Result { self.hashes.encoded_len()? + self.indexes.encoded_len()? } @@ -76,7 +78,7 @@ impl Encode for LookUpTable { } } -impl<'a> Decode<'a> for LookUpTable { +impl<'a> Decode<'a> for LookUpTable<'a> { fn decode>(decoder: &mut R) -> der::Result { Ok(Self { hashes: decoder.decode()?, diff --git a/src/structure/orientation/orient_data.rs b/src/structure/orientation/orient_data.rs index 05870edd..b7dc3ffa 100644 --- a/src/structure/orientation/orient_data.rs +++ b/src/structure/orientation/orient_data.rs @@ -8,13 +8,13 @@ * Documentation: https://nyxspace.com/ */ -use der::{asn1::SequenceOf, Decode, Encode, Reader, Writer}; +use der::{Decode, Encode, Reader, Writer}; use hifitime::Epoch; pub const MAX_NUT_PREC_ANGLES: usize = 16; use super::{phaseangle::PhaseAngle, trigangle::TrigAngle}; -use crate::structure::{array::Array, common::InterpolationKind, spline::Splines}; +use crate::structure::{array::DataArray, common::InterpolationKind, spline::Splines}; /// ANISE supports two different kinds of orientation data. High precision, with spline based interpolations, and constants right ascension, declination, and prime meridian, typically used for planetary constant data. #[derive(Clone, Debug, PartialEq)] @@ -23,8 +23,7 @@ pub enum OrientationData<'a> { pole_right_ascension: PhaseAngle, pole_declination: PhaseAngle, prime_meridian: PhaseAngle, - // nut_prec_angles: SequenceOf, - nut_prec_angles: Array<'a, TrigAngle>, + nut_prec_angles: DataArray<'a, TrigAngle>, }, HighPrecision { ref_epoch: Epoch, diff --git a/tests/ephemerides/paths.rs b/tests/ephemerides/paths.rs index f7a4912e..1e713e70 100644 --- a/tests/ephemerides/paths.rs +++ b/tests/ephemerides/paths.rs @@ -37,13 +37,13 @@ fn zero_translations() { // We know that these ephemerides files has exactly 14 ephemerides. assert_eq!( - ctx.ephemeris_lut.hashes.len(), + ctx.ephemeris_lut.hashes.data.len(), 12, "DE438s should have 12 ephemerides" ); // For all of the frames in this context, let's make sure that the translation between the same frames is always zero. - for ephemeris_hash in ctx.ephemeris_lut.hashes.iter() { + for ephemeris_hash in ctx.ephemeris_lut.hashes.data.iter() { // Build a J2000 oriented frame with this ephemeris center let this_frame_j2k = Frame::from_ephem_orient(*ephemeris_hash, J2000); diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 9afa7e5f..996feae2 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -363,7 +363,7 @@ fn validate_jplde_translation() { for (idx1, ephem1) in ctx.ephemeris_data.iter().enumerate() { let j2000_ephem1 = - Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx1).unwrap()); + Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.data.get(idx1).unwrap()); for (idx2, ephem2) in ctx.ephemeris_data.iter().enumerate() { if ephem1 == ephem2 { @@ -371,7 +371,7 @@ fn validate_jplde_translation() { } let j2000_ephem2 = - Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.get(idx2).unwrap()); + Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.data.get(idx2).unwrap()); // Query the ephemeris data for a bunch of different times. let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { diff --git a/tests/lib.rs b/tests/lib.rs index d8664c1b..17c4994a 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -8,8 +8,9 @@ * Documentation: https://nyxspace.com/ */ -use anise::structure::orientation::{ - orient_data::OrientationData, phaseangle::PhaseAngle, trigangle::TrigAngle, +use anise::structure::{ + array::DataArray, + orientation::{orient_data::OrientationData, phaseangle::PhaseAngle, trigangle::TrigAngle}, }; use der::asn1::SequenceOf; @@ -27,9 +28,25 @@ fn size_test() { let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + // let ctx = AniseContext::default(); use std::mem::size_of_val; println!("{}", size_of_val(&ctx)); println!("{}", size_of_val(&ctx.ephemeris_data)); println!("{}", size_of_val(&ctx.orientation_data)); + let pa = PhaseAngle { + offset_deg: 0.0, + rate_deg: 0.0, + accel_deg: 0.0, + }; + println!("pa = {}", size_of_val(&pa)); + + let ta = TrigAngle { + right_ascension_deg: 0.0, + declination_deg: 0.0, + prime_meridian_deg: 0.0, + nut_prec_angle: pa, + }; + + println!("ta = {}", size_of_val(&ta)); } diff --git a/tests/naif.rs b/tests/naif.rs index 6e6e1373..b23ee39f 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -11,11 +11,11 @@ use core::convert::TryInto; use anise::{ - structure::context::AniseContext, - structure::spline::{Evenness, Field, StateKind}, file_mmap, naif::{daf::DAF, spk::SPK, Endian}, prelude::*, + structure::context::AniseContext, + structure::spline::{Evenness, Field, StateKind}, }; // Ignore this test by default because it's very slow. It's also tested in the conversion of JPL SPKs. @@ -73,12 +73,12 @@ fn test_spk_load() { let ctx = AniseContext::from_bytes(&bytes); // Ignore the three empty ones assert_eq!( - ctx.ephemeris_lut.hashes.len(), + ctx.ephemeris_lut.hashes.data.len(), spk.segments.len() - 3, "Incorrect number of ephem in map" ); assert_eq!( - ctx.ephemeris_lut.indexes.len(), + ctx.ephemeris_lut.indexes.data.len(), spk.segments.len() - 3, "Incorrect number of ephem in map" ); From 62c31a734e00cfd8b319b2da39fb12516884effd Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Mon, 7 Nov 2022 18:04:09 -0700 Subject: [PATCH 16/48] Rewriting the DAF parser with zerocopy Can now correctly parse PCK summaries! Signed-off-by: Christopher Rabotin --- src/naif/daf.rs | 54 ++++---- src/naif/dafbytes.rs | 273 ++++++++++++++++++++++++++++++++++++++++ src/naif/mod.rs | 3 +- src/naif/recordtypes.rs | 187 +++++++++++++++++++++++++++ src/naif/spk/mod.rs | 1 + src/naif/spk/summary.rs | 117 +++++++++++++++++ src/naif/summaries.rs | 12 -- tests/lib.rs | 45 ++++--- tests/naif.rs | 156 ++++++++++++++++++++++- 9 files changed, 784 insertions(+), 64 deletions(-) create mode 100644 src/naif/dafbytes.rs create mode 100644 src/naif/recordtypes.rs create mode 100644 src/naif/spk/summary.rs delete mode 100644 src/naif/summaries.rs diff --git a/src/naif/daf.rs b/src/naif/daf.rs index 4bf91248..1895ded5 100644 --- a/src/naif/daf.rs +++ b/src/naif/daf.rs @@ -8,10 +8,17 @@ * Documentation: https://nyxspace.com/ */ +use super::recordtypes::{DAFSummaryRecord, NameRecord}; pub(crate) use super::Endian; -use crate::{parse_bytes_as, prelude::AniseError, DBL_SIZE}; +use crate::{ + naif::recordtypes::{DAFFileRecord, NAIFRecord}, + parse_bytes_as, + prelude::AniseError, + DBL_SIZE, +}; use core::convert::TryInto; use log::{debug, error, info, warn}; +use zerocopy::FromBytes; pub(crate) const RCRD_LEN: usize = 1024; pub(crate) const INT_SIZE: usize = 4; @@ -36,6 +43,11 @@ pub struct DAF<'a> { impl<'a> DAF<'a> { /// From https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/daf.html#Structure pub fn parse(bytes: &'a [u8]) -> Result { + let daf_file_record = DAFFileRecord::read_from(&bytes[0..DAFFileRecord::SIZE]).unwrap(); + + println!("{}", daf_file_record.identification().unwrap()); + println!("ni = {}\tnd = {}", daf_file_record.ni, daf_file_record.nd); + let locidw = core::str::from_utf8(bytes.get(0..8).ok_or(AniseError::MalformedData(8))?) .map_err(|_| { AniseError::DAFParserError("Could not parse header (first 8 bytes)".to_owned()) @@ -184,52 +196,41 @@ impl<'a> DAF<'a> { if record_num == 0 { break; } - let record = self.record(record_num)?; - // Note that the segment control data are stored as f64 but need to be converted to usize - let next_record = parse_bytes_as!( - f64, - record - .get(0..DBL_SIZE) - .ok_or(AniseError::MalformedData(DBL_SIZE))?, - self.endianness - ) as usize; + let summary_record_bytes = self.record_bytes(record_num)?; - let nsummaries = parse_bytes_as!( - f64, - record - .get(16..16 + DBL_SIZE) - .ok_or(AniseError::MalformedData(16 + DBL_SIZE))?, - self.endianness - ) as usize; + let record = + DAFSummaryRecord::read_from(&summary_record_bytes[0..3 * DBL_SIZE]).unwrap(); // Parse the data of the summary. - let name_record = self.record(record_num + 1)?; + let name_record_bytes = self.record_bytes(record_num + 1)?; + let name_record = NameRecord::read_from(name_record_bytes).unwrap(); let length = DBL_SIZE * self.nd + INT_SIZE * self.ni; - for i in (0..nsummaries * length).step_by(length) { + for i in (0..record.num_summaries() * length).step_by(length) { let j = 3 * DBL_SIZE + i; - let name = if name_record.is_empty() { + let name = if name_record_bytes.is_empty() { warn!("name record is empty! Using `UNNAMED SPACECRAFT` instead"); "UNNAMED SPACECRAFT" } else { - match core::str::from_utf8(&name_record[i..i + length]) { + match core::str::from_utf8(&name_record_bytes[i..i + length]) { Ok(name) => name, Err(e) => { warn!( "malformed name record: `{e}` from {:?}! Using `UNNAMED SPACECRAFT` instead", - &name_record[i..i + length] + &name_record_bytes[i..i + length] ); "UNNAMED SPACECRAFT" } } }; + if name.starts_with(' ') { println!("WARNING: Parsing might be wrong because the first character of the name summary is a space: `{}`", name); println!( "Full name data: `{}`", - core::str::from_utf8(&name_record[..1000]).unwrap() + core::str::from_utf8(&name_record_bytes[..1000]).unwrap() ); } - let summary_data = &record[j..j + length]; + let summary_data = &summary_record_bytes[j..j + length]; let mut f64_summary = Vec::with_capacity(self.nd); for double_data in summary_data[0..DBL_SIZE * self.nd].chunks(DBL_SIZE) { f64_summary.push(parse_bytes_as!(f64, double_data, self.endianness)); @@ -244,14 +245,13 @@ impl<'a> DAF<'a> { // Add this data to the return vec rtn.push((name, f64_summary, int_summary)); } - record_num = next_record; + record_num = record.next_record(); } Ok(rtn) } - /// Records are indexed from one!! - fn record(&self, num: usize) -> Result<&'a [u8], AniseError> { + fn record_bytes(&self, num: usize) -> Result<&'a [u8], AniseError> { let start_idx = num * RCRD_LEN - RCRD_LEN; self.bytes .get(start_idx..start_idx + RCRD_LEN) diff --git a/src/naif/dafbytes.rs b/src/naif/dafbytes.rs new file mode 100644 index 00000000..168a4e85 --- /dev/null +++ b/src/naif/dafbytes.rs @@ -0,0 +1,273 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use super::recordtypes::DAFFileRecord; +pub(crate) use super::Endian; +use crate::{parse_bytes_as, prelude::AniseError, DBL_SIZE}; +use core::convert::TryInto; +use log::{debug, error, info, warn}; +use zerocopy::FromBytes; + +pub(crate) const RCRD_LEN: usize = 1024; +pub(crate) const INT_SIZE: usize = 4; + +#[derive(Debug, FromBytes)] +pub struct DAFBytes<'a> { + pub idword: &'a str, + pub internal_filename: &'a str, + /// The number of integer components in each array summary. + pub ni: usize, + /// The number of double precision components in each array summary. + pub nd: usize, + /// The record number of the initial summary record in the file. + pub fwrd: usize, + /// The record number of the final summary record in the file. + pub bwrd: usize, + pub freeaddr: usize, + pub endianness: Endian, + // pub bytes: &'a [u8], +} + +impl<'a> DAFBytes<'a> { + /// From https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/daf.html#Structure + pub fn parse(bytes: &'a [u8]) -> Result { + let daf_file_record = DAFFileRecord::read_from(bytes[0..DAFFileRecord::SIZE]).unwrap(); + + let locidw = core::str::from_utf8(bytes.get(0..8).ok_or(AniseError::MalformedData(8))?) + .map_err(|_| { + AniseError::DAFParserError("Could not parse header (first 8 bytes)".to_owned()) + })?; + + if !locidw.contains('/') { + return Err(AniseError::DAFParserError(format!( + "Cannot parse file whose identifier is: `{}`", + locidw + ))); + } + + let daftype_it = locidw.split('/'); + for (idx, content) in daftype_it.enumerate() { + if idx == 0 && content != "DAF" { + return Err(AniseError::DAFParserError(format!( + "Cannot parse file whose identifier is not DAF: `{}`", + locidw, + ))); + } else if idx == 1 { + match content.trim() { + "SPK" => { + debug!("Parsing DAF as SPK"); + } + "PCK" => { + info!("Parsing DAF as PCF (good luck)"); + } + _ => { + error!("DAF of type {content} is not yet supported"); + return Err(AniseError::DAFParserError(format!( + "Cannot parse SPICE data of type `{}`", + locidw + ))); + } + } + } else if idx > 1 { + return Err(AniseError::DAFParserError(format!( + "Malformed header string: `{}`", + locidw + ))); + } + } + + // We need to figure out if this file is big or little endian before we can convert some byte arrays into integer + let str_endianness = + core::str::from_utf8(bytes.get(88..96).ok_or(AniseError::MalformedData(96))?) + .map_err(|_| AniseError::DAFParserError("Could not parse endianness".to_owned()))?; + + let endianness = if str_endianness == "LTL-IEEE" { + Endian::Little + } else if str_endianness == "BIG-IEEE" { + Endian::Big + } else { + return Err(AniseError::DAFParserError(format!( + "Could not understand endianness: `{}`", + str_endianness + ))); + }; + + // Note that we parse as u32 to make sure that it's a 32-bit integer. The docs don't specify if it's signed or not, + // but it works in either case (I guess that the sign bit is still present but set to zero?) + let nd = parse_bytes_as!( + u32, + bytes + .get(8..8 + INT_SIZE) + .ok_or(AniseError::MalformedData(8 + INT_SIZE))?, + endianness + ) as usize; + let ni = parse_bytes_as!( + u32, + bytes + .get(12..12 + INT_SIZE) + .ok_or(AniseError::MalformedData(12 + INT_SIZE))?, + endianness + ) as usize; + let fwrd = parse_bytes_as!( + u32, + bytes + .get(76..76 + INT_SIZE) + .ok_or(AniseError::MalformedData(76 + INT_SIZE))?, + endianness + ) as usize; + let bwrd = parse_bytes_as!( + u32, + bytes + .get(80..80 + INT_SIZE) + .ok_or(AniseError::MalformedData(80 + INT_SIZE))?, + endianness + ) as usize; + let freeaddr = parse_bytes_as!( + u32, + bytes + .get(84..84 + INT_SIZE) + .ok_or(AniseError::MalformedData(84 + INT_SIZE))?, + endianness + ) as usize; + + let locifn = core::str::from_utf8(bytes.get(16..76).ok_or(AniseError::MalformedData(79))?) + .map_err(|_| AniseError::DAFParserError("Could not parse locifn".to_owned()))?; + + Ok(Self { + idword: locidw.trim(), + internal_filename: locifn.trim(), + nd, + ni, + fwrd, + bwrd, + freeaddr, + endianness, + bytes, + }) + } + + pub fn comments(&self) -> Result { + let mut rslt = String::new(); + // FWRD has the initial record of the summary. So we assume that all records between the second record and that one are comments + for rid in 1..self.fwrd { + match core::str::from_utf8( + self.bytes + .get(rid * RCRD_LEN..(rid + 1) * RCRD_LEN) + .ok_or(AniseError::MalformedData((rid + 1) * RCRD_LEN))?, + ) { + Ok(s) => rslt += s.replace("\u{0}\u{0}", " ").replace('\u{0}', "\n").trim(), + Err(e) => { + let valid_s = core::str::from_utf8( + &self.bytes[rid * RCRD_LEN..(rid * RCRD_LEN + e.valid_up_to())], + ) + .unwrap(); + rslt += valid_s + .replace("\u{0}\u{0}", " ") + .replace('\u{0}', "\n") + .trim() + } + } + } + + Ok(rslt) + } + + /// The summaries are needed to decode the rest of the file + pub fn summaries(&self) -> Result, Vec)>, AniseError> { + // Each summary need to be read in bytes of 8*nd then 4*self.ni + let mut record_num = self.fwrd; + let mut rtn = Vec::new(); + loop { + if record_num == 0 { + break; + } + let record = self.record(record_num)?; + // Note that the segment control data are stored as f64 but need to be converted to usize + let next_record = parse_bytes_as!( + f64, + record + .get(0..DBL_SIZE) + .ok_or(AniseError::MalformedData(DBL_SIZE))?, + self.endianness + ) as usize; + + let nsummaries = parse_bytes_as!( + f64, + record + .get(16..16 + DBL_SIZE) + .ok_or(AniseError::MalformedData(16 + DBL_SIZE))?, + self.endianness + ) as usize; + + // Parse the data of the summary. + let name_record = self.record(record_num + 1)?; + let length = DBL_SIZE * self.nd + INT_SIZE * self.ni; + for i in (0..nsummaries * length).step_by(length) { + let j = 3 * DBL_SIZE + i; + let name = if name_record.is_empty() { + warn!("name record is empty! Using `UNNAMED SPACECRAFT` instead"); + "UNNAMED SPACECRAFT" + } else { + match core::str::from_utf8(&name_record[i..i + length]) { + Ok(name) => name, + Err(e) => { + warn!( + "malformed name record: `{e}` from {:?}! Using `UNNAMED SPACECRAFT` instead", + &name_record[i..i + length] + ); + "UNNAMED SPACECRAFT" + } + } + }; + if name.starts_with(' ') { + println!("WARNING: Parsing might be wrong because the first character of the name summary is a space: `{}`", name); + println!( + "Full name data: `{}`", + core::str::from_utf8(&name_record[..1000]).unwrap() + ); + } + let summary_data = &record[j..j + length]; + let mut f64_summary = Vec::with_capacity(self.nd); + for double_data in summary_data[0..DBL_SIZE * self.nd].chunks(DBL_SIZE) { + f64_summary.push(parse_bytes_as!(f64, double_data, self.endianness)); + } + let mut int_summary = Vec::with_capacity(self.ni); + for int_data in summary_data + [DBL_SIZE * self.nd..(self.nd * DBL_SIZE + self.ni * INT_SIZE)] + .chunks(INT_SIZE) + { + int_summary.push(parse_bytes_as!(i32, int_data, self.endianness)); + } + // Add this data to the return vec + rtn.push((name, f64_summary, int_summary)); + } + record_num = next_record; + } + + Ok(rtn) + } + + /// Records are indexed from one!! + fn record(&self, num: usize) -> Result<&'a [u8], AniseError> { + let start_idx = num * RCRD_LEN - RCRD_LEN; + self.bytes + .get(start_idx..start_idx + RCRD_LEN) + .ok_or(AniseError::MalformedData(start_idx + RCRD_LEN)) + } + + /// Returns the 64-bit float at the provided address + pub(crate) fn read_f64(&self, byte_idx: usize) -> f64 { + parse_bytes_as!( + f64, + &self.bytes[DBL_SIZE * byte_idx..DBL_SIZE * (byte_idx + 1)], + self.endianness + ) + } +} diff --git a/src/naif/mod.rs b/src/naif/mod.rs index 38ee5864..fcc337f0 100644 --- a/src/naif/mod.rs +++ b/src/naif/mod.rs @@ -9,8 +9,9 @@ */ pub mod daf; +// pub mod dafbytes; pub mod spk; -pub mod summaries; +pub mod recordtypes; #[macro_export] macro_rules! parse_bytes_as { diff --git a/src/naif/recordtypes.rs b/src/naif/recordtypes.rs new file mode 100644 index 00000000..ad79990a --- /dev/null +++ b/src/naif/recordtypes.rs @@ -0,0 +1,187 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use hifitime::Epoch; +use zerocopy::FromBytes; + +use super::{daf::RCRD_LEN, Endian}; +use crate::{prelude::AniseError, DBL_SIZE}; +use log::{error, warn}; + +pub trait NAIFRecord: FromBytes + Sized + Default { + const SIZE: usize = core::mem::size_of::(); +} + +#[derive(Debug, FromBytes)] +#[repr(C)] +pub struct DAFFileRecord { + pub locidw: [u8; 8], + pub nd: u32, + pub ni: u32, + pub locifn: [u8; 60], + pub forward: u32, + pub backward: u32, + pub free_addr: u32, + pub locfmt: [u8; 8], + pub prenul: [u8; 603], + pub ftpstr: [u8; 28], + pub pstnul: [u8; 297], +} + +impl Default for DAFFileRecord { + fn default() -> Self { + Self { + locidw: [0; 8], + nd: Default::default(), + ni: Default::default(), + locifn: [0; 60], + forward: Default::default(), + backward: Default::default(), + free_addr: Default::default(), + locfmt: [0; 8], + prenul: [0; 603], + ftpstr: [0; 28], + pstnul: [0; 297], + } + } +} + +impl NAIFRecord for DAFFileRecord {} + +impl DAFFileRecord { + pub fn ni(&self) -> usize { + self.ni as usize + } + + pub fn nd(&self) -> usize { + self.nd as usize + } + + pub fn fwrd_idx(&self) -> usize { + self.forward as usize + } + + pub fn summary_size(&self) -> usize { + (self.nd + (self.ni + 1) / 2) as usize + } + + pub fn identification(&self) -> Result<&str, AniseError> { + let str_locidw = core::str::from_utf8(&self.locidw) + .map_err(|_| AniseError::DAFParserError("Could not parse endianness".to_owned()))?; + + if &str_locidw[0..3] != "DAF" { + Err(AniseError::DAFParserError(format!( + "Cannot parse file whose identifier is not DAF: `{}`", + str_locidw, + ))) + } else if str_locidw.chars().nth(3) != Some('/') { + Err(AniseError::DAFParserError(format!( + "Cannot parse file whose identifier is not DAF: `{}`", + str_locidw, + ))) + } else { + match str_locidw[4..].trim() { + "SPK" => Ok("SPK"), + "PCK" => Ok("pCK"), + _ => { + error!("DAF of type `{}` is not yet supported", &str_locidw[4..]); + return Err(AniseError::DAFParserError(format!( + "Cannot parse SPICE data of type `{}`", + str_locidw + ))); + } + } + } + } + + pub fn endianness(&self) -> Result { + let str_endianness = core::str::from_utf8(&self.locfmt) + .map_err(|_| AniseError::DAFParserError("Could not parse endianness".to_owned()))?; + + if str_endianness == "LTL-IEEE" { + Ok(Endian::Little) + } else if str_endianness == "BIG-IEEE" { + Ok(Endian::Big) + } else { + Err(AniseError::DAFParserError(format!( + "Could not understand endianness: `{}`", + str_endianness + ))) + } + } + + pub fn internal_filename(&self) -> Result<&str, AniseError> { + match core::str::from_utf8(&self.locifn) { + Ok(filename) => Ok(filename.trim()), + Err(e) => Err(AniseError::DAFParserError(format!("{e}"))), + } + } +} + +#[derive(Debug, Default, FromBytes)] +#[repr(C)] +pub struct DAFSummaryRecord { + next_record: f64, + prev_record: f64, + num_summaries: f64, +} + +impl NAIFRecord for DAFSummaryRecord {} + +impl DAFSummaryRecord { + pub fn next_record(&self) -> usize { + self.next_record as usize + } + + pub fn prev_record(&self) -> usize { + self.prev_record as usize + } + + pub fn num_summaries(&self) -> usize { + self.num_summaries as usize + } + + pub fn is_final_record(&self) -> bool { + self.next_record() == 0 + } +} + +#[derive(Debug, FromBytes)] +pub struct NameRecord { + raw_names: [u8; RCRD_LEN], +} + +impl Default for NameRecord { + fn default() -> Self { + Self { + raw_names: [0_u8; RCRD_LEN], + } + } +} + +impl NAIFRecord for NameRecord {} + +impl NameRecord { + pub fn nth_name(&self, n: usize, ni: usize, nd: usize) -> &str { + let summary_size = nd + (ni + 1) / 2; + let this_name = + &self.raw_names[n * summary_size * DBL_SIZE..(n + 1) * summary_size * DBL_SIZE]; + match core::str::from_utf8(&this_name) { + Ok(name) => name, + Err(e) => { + warn!( + "malformed name record: `{e}` from {:?}! Using `UNNAMED SPACECRAFT` instead", + this_name + ); + "UNNAMED SPACECRAFT" + } + } + } +} diff --git a/src/naif/spk/mod.rs b/src/naif/spk/mod.rs index f1ad7b0b..ba86e043 100644 --- a/src/naif/spk/mod.rs +++ b/src/naif/spk/mod.rs @@ -36,6 +36,7 @@ use std::io::Write; pub mod datatype; pub mod segment; +pub mod summary; #[derive(Debug)] pub struct SPK<'a> { diff --git a/src/naif/spk/summary.rs b/src/naif/spk/summary.rs new file mode 100644 index 00000000..3bc375b8 --- /dev/null +++ b/src/naif/spk/summary.rs @@ -0,0 +1,117 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use hifitime::Epoch; +use zerocopy::{FromBytes, LayoutVerified}; + +use crate::naif::daf::RCRD_LEN; +use crate::naif::recordtypes::{DAFFileRecord, DAFSummaryRecord, NAIFRecord, NameRecord}; +use crate::prelude::AniseError; + +#[derive(Debug)] +#[repr(C)] +pub struct DAFBytes<'a, R: NAIFRecord> { + pub file_record: DAFFileRecord, + pub daf_summary: DAFSummaryRecord, + pub name_record: NameRecord, + pub data_summaries: &'a [R], +} + +#[derive(Debug, Default, FromBytes)] +#[repr(C)] +pub struct SPKSummaryRecord { + pub start_epoch_et_s: f64, + pub end_epoch_et_s: f64, + pub target_id: i32, + pub center_id: i32, + pub frame_id: i32, + pub data_type_i: i32, + pub start_idx: i32, + pub end_idx: i32, +} + +impl SPKSummaryRecord { + pub fn start_epoch(&self) -> Epoch { + Epoch::from_et_seconds(self.start_epoch_et_s) + } + pub fn end_epoch(&self) -> Epoch { + Epoch::from_et_seconds(self.end_epoch_et_s) + } + pub fn start_index(&self) -> usize { + self.start_idx as usize + } + pub fn end_index(&self) -> usize { + self.end_idx as usize + } +} + +impl NAIFRecord for SPKSummaryRecord {} + +#[derive(Debug, Default, FromBytes)] +#[repr(C)] +pub struct PCKSummaryRecord { + pub start_epoch_et_s: f64, + pub end_epoch_et_s: f64, + pub frame_id: i32, + pub inertial_frame_id: i32, + pub data_type_i: i32, + pub start_idx: i32, + pub end_idx: i32, +} + +impl NAIFRecord for PCKSummaryRecord {} + +impl<'a, R: NAIFRecord> DAFBytes<'a, R> { + pub fn parse(bytes: &'a [u8]) -> Result { + let file_rcrd = DAFFileRecord::read_from(&bytes[..DAFFileRecord::SIZE]).unwrap(); + + // Move onto the next record. + // let mut rcrd_idx = (file_rcrd.fwrd_idx() - 1) * RCRD_LEN; + let rcrd_idx = file_rcrd.fwrd_idx() * RCRD_LEN - RCRD_LEN; + let rcrd_bytes = bytes + .get(rcrd_idx..rcrd_idx + RCRD_LEN) + .ok_or(AniseError::MalformedData(file_rcrd.fwrd_idx() + RCRD_LEN))?; + + let daf_summary = + DAFSummaryRecord::read_from(&rcrd_bytes[0..DAFSummaryRecord::SIZE]).unwrap(); + + // The SPK summaries are defined in this same record, so let's read them now. + let data_summaries = match LayoutVerified::new_slice(&rcrd_bytes[DAFSummaryRecord::SIZE..]) + { + Some(data) => data.into_slice(), + None => &[R::default(); 0], + }; + + // Move onto the next record. + // rcrd_idx = (file_rcrd.fwrd_idx() - 0) * RCRD_LEN; + let rcrd_idx = (file_rcrd.fwrd_idx() + 1) * RCRD_LEN - RCRD_LEN; + let rcrd_bytes = bytes + .get(rcrd_idx..rcrd_idx + RCRD_LEN) + .ok_or(AniseError::MalformedData(file_rcrd.fwrd_idx() + RCRD_LEN))?; + let name_record = NameRecord::read_from(rcrd_bytes).unwrap(); + + Ok(Self { + file_record: file_rcrd, + daf_summary, + name_record, + data_summaries, + }) + } + + pub fn nth_summary(&self, n: usize) -> Result<(&str, &R), AniseError> { + let name = self + .name_record + .nth_name(n, self.file_record.ni(), self.file_record.nd()); + + let summary = &self.data_summaries[n]; + + Ok((name, summary)) + } +} diff --git a/src/naif/summaries.rs b/src/naif/summaries.rs deleted file mode 100644 index 7282df90..00000000 --- a/src/naif/summaries.rs +++ /dev/null @@ -1,12 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -// TODO: Implement an iterator on the summaries. -pub struct Summary; diff --git a/tests/lib.rs b/tests/lib.rs index 17c4994a..e1359772 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -25,28 +25,33 @@ fn size_test() { use anise::file_mmap; use anise::prelude::*; - let path = "./data/de438s.anise"; - let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); - // let ctx = AniseContext::default(); + // let path = "./data/de438s.anise"; + // let buf = file_mmap!(path).unwrap(); + // let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let ctx = AniseContext::default(); use std::mem::size_of_val; - println!("{}", size_of_val(&ctx)); - println!("{}", size_of_val(&ctx.ephemeris_data)); - println!("{}", size_of_val(&ctx.orientation_data)); - let pa = PhaseAngle { - offset_deg: 0.0, - rate_deg: 0.0, - accel_deg: 0.0, - }; - println!("pa = {}", size_of_val(&pa)); + let s: u32 = 45; + println!("str = {}", size_of_val(&s)); + println!("tot = {}", size_of_val(&ctx)); + println!("lut = {}", size_of_val(&ctx.ephemeris_lut)); + println!("ephem = {}", size_of_val(&ctx.ephemeris_data)); + println!("orient = {}", size_of_val(&ctx.orientation_data)); + println!("sc = {}", size_of_val(&ctx.spacecraft_constant_data)); + println!("pl = {}", size_of_val(&ctx.planetary_constant_data)); + // let pa = PhaseAngle { + // offset_deg: 0.0, + // rate_deg: 0.0, + // accel_deg: 0.0, + // }; + // println!("pa = {}", size_of_val(&pa)); - let ta = TrigAngle { - right_ascension_deg: 0.0, - declination_deg: 0.0, - prime_meridian_deg: 0.0, - nut_prec_angle: pa, - }; + // let ta = TrigAngle { + // right_ascension_deg: 0.0, + // declination_deg: 0.0, + // prime_meridian_deg: 0.0, + // nut_prec_angle: pa, + // }; - println!("ta = {}", size_of_val(&ta)); + // println!("ta = {}", size_of_val(&ta)); } diff --git a/tests/naif.rs b/tests/naif.rs index b23ee39f..28f57338 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -9,10 +9,18 @@ */ use core::convert::TryInto; +use std::mem::size_of_val; use anise::{ file_mmap, - naif::{daf::DAF, spk::SPK, Endian}, + naif::{ + daf::DAF, + spk::{ + summary::{DAFBytes, PCKSummaryRecord, SPKSummaryRecord}, + SPK, + }, + Endian, + }, prelude::*, structure::context::AniseContext, structure::spline::{Evenness, Field, StateKind}, @@ -154,7 +162,147 @@ fn test_binary_pck_load() { let filename = "data/earth_latest_high_prec.bpc"; let bytes = file_mmap!(filename).unwrap(); - let high_prec = DAF::parse(&bytes).unwrap(); - println!("{}", high_prec.comments().unwrap()); - high_prec.summaries().unwrap(); + // let high_prec = DAF::parse(&bytes).unwrap(); + // println!("{}", high_prec.comments().unwrap()); + // high_prec.summaries().unwrap(); + + let high_prec = DAFBytes::::parse(&bytes).unwrap(); + for n in 0..high_prec.daf_summary.num_summaries() { + let (name, data) = high_prec.nth_summary(n).unwrap(); + println!("{} -> {:?}", name, data); + } +} + +#[test] +fn test_spk_load_bytes() { + if pretty_env_logger::try_init().is_err() { + println!("could not init env_logger"); + } + + // Using the DE421 as demo because the correct data is in the DAF documentation + let bsp_path = "data/de421.bsp"; + let bytes = file_mmap!(bsp_path).unwrap(); + + let de421 = DAFBytes::::parse(&bytes).unwrap(); + assert_eq!(de421.file_record.nd, 2); + assert_eq!(de421.file_record.ni, 6); + assert_eq!(de421.file_record.identification().unwrap(), "SPK"); + assert_eq!(de421.file_record.internal_filename().unwrap(), "NIO2SPK"); + assert_eq!(de421.file_record.forward, 4); + assert_eq!(de421.file_record.backward, 4); + assert_eq!(de421.file_record.endianness().unwrap(), Endian::Little); + assert_eq!(de421.daf_summary.num_summaries(), 15); + assert_eq!(de421.daf_summary.next_record(), 0); + assert_eq!(de421.daf_summary.prev_record(), 0); + + for n in 0..de421.daf_summary.num_summaries() { + let (name, data) = de421.nth_summary(n).unwrap(); + println!("{} -> {:?}", name, data); + } + + // println!("stack size = {}", size_of_val(&de421)); + // assert_eq!(de421.comments().unwrap().len(), 1379); + // // Convert to SPK + // let spk: SPK = (&de421).try_into().unwrap(); + // println!("{}", spk); + + // let (seg, meta) = spk.segment_ptr(301).unwrap(); + // assert_eq!( + // seg.start_idx, 944041, + // "Invalid start of coeff index for DE421" + // ); + // assert_eq!( + // meta.interval_length_s, 345600.0, + // "Invalid interval length (in seconds) for DE421" + // ); + // assert_eq!(meta.rsize, 41, "Invalid rsize for DE421"); + // assert_eq!( + // meta.num_records_in_seg, 14080, + // "Invalid num_records_in_seg for DE421" + // ); + // assert!( + // (meta.init_s_past_j2k - -3169195200.0).abs() < 2e-16, + // "Invalid start time" + // ); + + // spk.copy_segments(301).unwrap(); + + // // Build the ANISE file + // let filename_anis = "target/de421.anise"; + // spk.to_anise(bsp_path, filename_anis, true, true).unwrap(); + + // // Load this ANISE file and make sure that it matches the original DE421 data. + // let bytes = file_mmap!(filename_anis).unwrap(); + // let ctx = AniseContext::from_bytes(&bytes); + // // Ignore the three empty ones + // assert_eq!( + // ctx.ephemeris_lut.hashes.data.len(), + // spk.segments.len() - 3, + // "Incorrect number of ephem in map" + // ); + // assert_eq!( + // ctx.ephemeris_lut.indexes.data.len(), + // spk.segments.len() - 3, + // "Incorrect number of ephem in map" + // ); + + // // From Python jplephem, an inspection of the coefficients of the DE421 file shows the number of segments we should have. + // // So let's add it here as a test. + // // >>> from jplephem.spk import SPK + // // >>> de421 = SPK.open('../anise.rs/data/de421.bsp') + // // >>> [c.load_array()[2].shape[1] for c in de421.segments] + // let seg_len: &[usize] = &[ + // 7040, 3520, 3520, 1760, 1760, 1760, 1760, 1760, 1760, 3520, 14080, 14080, 1, 1, 1, + // ]; + + // for (eidx, ephem) in ctx.ephemeris_data.iter().enumerate() { + // let splt = ephem.name.split("#").collect::>(); + // dbg!(&splt); + // let seg_target_id = str::parse::(splt[1]).unwrap(); + // // Fetch the SPK segment + // let (seg, meta, all_seg_data) = spk.copy_segments(seg_target_id).unwrap(); + // if all_seg_data.is_empty() { + // continue; + // } + // assert_eq!( + // all_seg_data.len(), + // seg_len[eidx], + // "wrong number of segments for {}", + // eidx + // ); + // assert_eq!(seg.name, splt[0].trim(), "incorrect name"); + + // let splines = &ephem.splines; + // match splines.metadata.evenness { + // Evenness::Even { duration_ns } => { + // assert_eq!( + // (duration_ns as i64).nanoseconds().to_seconds(), + // meta.interval_length_s, + // "incorrect interval duration" + // ); + // } + // _ => panic!("wrong spline kind"), + // }; + + // assert_eq!( + // splines.metadata.state_kind, + // StateKind::Position { + // degree: ((meta.rsize - 2) / 3) as u8 + // } + // ); + + // for (sidx, seg_data) in all_seg_data.iter().enumerate() { + // for (cidx, x_truth) in seg_data.x_coeffs.iter().enumerate() { + // assert_eq!(splines.fetch(sidx, cidx, Field::X).unwrap(), *x_truth); + // } + + // for (cidx, y_truth) in seg_data.y_coeffs.iter().enumerate() { + // assert_eq!(splines.fetch(sidx, cidx, Field::Y).unwrap(), *y_truth); + // } + + // for (cidx, z_truth) in seg_data.z_coeffs.iter().enumerate() { + // assert_eq!(splines.fetch(sidx, cidx, Field::Z).unwrap(), *z_truth); + // } + // } + // } } From 908b263abb689032f93683d52b7a604e36af32e2 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 11 Nov 2022 17:48:13 -0700 Subject: [PATCH 17/48] Good chunk of refactoring from last night Signed-off-by: Christopher Rabotin --- benches/crit_ephemerides.rs | 2 +- benches/iai_ephemerides.rs | 2 +- src/bin/anise/main.rs | 2 +- src/errors.rs | 1 + src/lib.rs | 2 +- src/naif/context/mod.rs | 158 +++++++++++++++++ src/naif/daf/mod.rs | 130 ++++++++++++++ src/naif/{ => daf}/recordtypes.rs | 22 +-- src/naif/dafbytes.rs | 273 ------------------------------ src/naif/{daf.rs => dafold.rs} | 5 +- src/naif/mod.rs | 7 +- src/naif/pck/mod.rs | 37 ++++ src/naif/spk/mod.rs | 3 +- src/naif/spk/recordtypes.rs | 169 ++++++++++++++++++ src/naif/spk/summary.rs | 79 +-------- src/spline.rs | 2 +- tests/naif.rs | 50 ++++-- 17 files changed, 563 insertions(+), 381 deletions(-) create mode 100644 src/naif/context/mod.rs create mode 100644 src/naif/daf/mod.rs rename src/naif/{ => daf}/recordtypes.rs (91%) delete mode 100644 src/naif/dafbytes.rs rename src/naif/{daf.rs => dafold.rs} (98%) create mode 100644 src/naif/pck/mod.rs create mode 100644 src/naif/spk/recordtypes.rs diff --git a/benches/crit_ephemerides.rs b/benches/crit_ephemerides.rs index 8a9958fe..999a6a1e 100644 --- a/benches/crit_ephemerides.rs +++ b/benches/crit_ephemerides.rs @@ -4,7 +4,7 @@ use anise::{ prelude::*, }; use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use hifitime::prelude::*; + use spice; const NUM_QUERIES_PER_PAIR: f64 = 100.0; diff --git a/benches/iai_ephemerides.rs b/benches/iai_ephemerides.rs index a32cfdfc..82a37106 100644 --- a/benches/iai_ephemerides.rs +++ b/benches/iai_ephemerides.rs @@ -3,7 +3,7 @@ use anise::{ file_mmap, prelude::*, }; -use hifitime::prelude::*; + use iai::black_box; use spice; diff --git a/src/bin/anise/main.rs b/src/bin/anise/main.rs index e48d09a5..135405a5 100644 --- a/src/bin/anise/main.rs +++ b/src/bin/anise/main.rs @@ -5,7 +5,7 @@ use std::fs::rename; use anise::cli::args::{Actions, Args}; use anise::cli::CliErrors; use anise::file_mmap; -use anise::naif::daf::DAF; +use anise::naif::dafold::DAF; use anise::naif::spk::SPK; use anise::prelude::*; use clap::Parser; diff --git a/src/errors.rs b/src/errors.rs index 1d159263..f499aa0d 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -20,6 +20,7 @@ use std::io::ErrorKind as IOErrorKind; #[derive(Clone, PartialEq, Debug)] pub enum AniseError { + /// Raised for an error in reading or writing the file(s) IOError(IOErrorKind), /// Raised if an IO error occurred but its representation is not simple (and therefore not an std::io::ErrorKind). diff --git a/src/lib.rs b/src/lib.rs index ec925a80..a9078334 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -50,7 +50,7 @@ pub(crate) type HashType = u32; /// file_mmap allows reading a file without memory allocation #[macro_export] macro_rules! file_mmap { - ($filename:ident) => { + ($filename:tt) => { match File::open($filename) { Err(e) => Err(AniseError::IOError(e.kind())), Ok(file) => unsafe { diff --git a/src/naif/context/mod.rs b/src/naif/context/mod.rs new file mode 100644 index 00000000..9eee75f4 --- /dev/null +++ b/src/naif/context/mod.rs @@ -0,0 +1,158 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use crate::naif::{daf::DAFBytes, pck::BPCSummaryRecord, spk::summary::SPKSummaryRecord}; + +use crate::errors::AniseError; + +/// A SPICE context contains all of the loaded SPICE data. +/// +/// # Limitations +/// You may only load up to 32 SPICE files of each kind. +/// The stack space does _not_ depend on how much data is loaded at any given time. +#[derive(Default)] +pub struct SpiceContext<'a> { + pub spk_lut: [Option<&'a str>; 32], + pub bpc_lut: [Option<&'a str>; 32], + pub spk_data: [Option<&'a DAFBytes<'a, SPKSummaryRecord>>; 32], + pub bpc_data: [Option<&'a DAFBytes<'a, BPCSummaryRecord>>; 32], +} + +impl<'a> SpiceContext<'a> { + pub fn furnsh_spk( + &mut self, + name: &'a str, + spk: &'a DAFBytes<'a, SPKSummaryRecord>, + ) -> Result<(), AniseError> { + // Parse as SPK and place into the SPK list if there is room + let mut data_idx = 32; + for (idx, item) in self.spk_data.iter().enumerate() { + if item.is_none() { + data_idx = idx; + break; + } + } + if data_idx == 32 { + return Err(AniseError::MaxTreeDepth); + } + self.spk_lut[data_idx] = Some(name); + self.spk_data[data_idx] = Some(spk); + Ok(()) + } + + pub fn furnsh_bpc( + &mut self, + name: &'a str, + bpc: &'a DAFBytes<'a, BPCSummaryRecord>, + ) -> Result<(), AniseError> { + // Parse as SPK and place into the SPK list if there is room + let mut data_idx = 32; + for (idx, item) in self.bpc_data.iter().enumerate() { + if item.is_none() { + data_idx = idx; + break; + } + } + if data_idx == 32 { + return Err(AniseError::MaxTreeDepth); + } + self.bpc_lut[data_idx] = Some(name); + self.bpc_data[data_idx] = Some(bpc); + Ok(()) + } + + pub fn unfurnsh_spk(&mut self, name: &'a str) -> Result<(), AniseError> { + // Iterate through the LUT to find that name. + let mut pos_idx = 0; + for (idx, item) in self.spk_lut.iter().enumerate() { + match item { + None => return Err(AniseError::ItemNotFound), // Data is contiguous, so this mean we're found nothing + Some(obj_name) => { + if &name == obj_name { + self.spk_lut[idx] = None; + self.spk_data[idx] = None; + pos_idx = idx; + break; + } + } + } + } + + // Now move everything up. + if pos_idx > 0 { + // Find the first non-null + let mut final_idx = 0; + for (rev_idx, item) in self.spk_lut.iter().rev().enumerate() { + if item.is_some() { + final_idx = rev_idx; + break; + } + } + if final_idx > pos_idx { + // Move everything up. + for mov_idx in pos_idx..final_idx { + self.spk_lut[mov_idx] = self.spk_lut[mov_idx + 1]; + self.spk_data[mov_idx] = self.spk_data[mov_idx + 1]; + } + } + } + return Ok(()); + } + + pub fn unfurnsh_bpc(&mut self, name: &'a str) -> Result<(), AniseError> { + // Ugh, I couldn't make it generic + /* + error[E0508]: cannot move out of type `[Option>]`, a non-copy slice + --> src/naif/context/mod.rs:168:33 + | + 168 | data[mov_idx] = data[mov_idx + 1]; + | ^^^^^^^^^^^^^^^^^ + | | + | cannot move out of here + | move occurs because `data[_]` has type `Option>`, which does not implement the `Copy` trait + + */ + // Iterate through the LUT to find that name. + let mut pos_idx = 0; + for (idx, item) in self.bpc_lut.iter().enumerate() { + match item { + None => return Err(AniseError::ItemNotFound), // Data is contiguous, so this mean we're found nothing + Some(obj_name) => { + if &name == obj_name { + self.bpc_lut[idx] = None; + self.bpc_data[idx] = None; + pos_idx = idx; + break; + } + } + } + } + + // Now move everything up. + if pos_idx > 0 { + // Find the first non-null + let mut final_idx = 0; + for (rev_idx, item) in self.bpc_lut.iter().rev().enumerate() { + if item.is_some() { + final_idx = rev_idx; + break; + } + } + if final_idx > pos_idx { + // Move everything up. + for mov_idx in pos_idx..final_idx { + self.bpc_lut[mov_idx] = self.bpc_lut[mov_idx + 1]; + self.bpc_data[mov_idx] = self.bpc_data[mov_idx + 1]; + } + } + } + return Ok(()); + } +} diff --git a/src/naif/daf/mod.rs b/src/naif/daf/mod.rs new file mode 100644 index 00000000..9917b5e1 --- /dev/null +++ b/src/naif/daf/mod.rs @@ -0,0 +1,130 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use core::fmt::Display; +use zerocopy::{FromBytes, LayoutVerified}; + +pub(crate) const RCRD_LEN: usize = 1024; +pub mod recordtypes; + +use crate::{prelude::AniseError, DBL_SIZE}; +pub use recordtypes::{DAFFileRecord, DAFSummaryRecord, NameRecord}; + +pub trait NAIFRecord: FromBytes + Sized + Default { + const SIZE: usize = core::mem::size_of::(); +} + +pub trait NAIFSummaryRecord: NAIFRecord + Copy { + fn start_idx(&self) -> usize; + fn end_idx(&self) -> usize; +} + +pub trait NAIFDataSet<'a>: Display { + type RecordKind: Display; + + fn from_slice_f64(slice: &'a [f64]) -> Self; + + fn nth_record(&self, n: usize) -> Self::RecordKind; +} + +pub trait NAIFDataRecord<'a> { + fn from_slice_f64(slice: &'a [f64]) -> Self; +} + +#[derive(Default, Debug)] +pub struct DAFBytes<'a, R: NAIFSummaryRecord> { + pub file_record: DAFFileRecord, + pub daf_summary: DAFSummaryRecord, + pub name_record: NameRecord, + pub data_summaries: &'a [R], + /// All of the underlying bytes including what has already been parsed (helps for indexing the data) + pub bytes: &'a [u8], +} + +impl<'a, R: NAIFSummaryRecord> DAFBytes<'a, R> { + pub fn parse(bytes: &'a [u8]) -> Result { + let file_record = DAFFileRecord::read_from(&bytes[..DAFFileRecord::SIZE]).unwrap(); + + // Move onto the next record, DAF indexes start at 1 ... =( + let rcrd_idx = (file_record.fwrd_idx() - 1) * RCRD_LEN; + let rcrd_bytes = bytes + .get(rcrd_idx..rcrd_idx + RCRD_LEN) + .ok_or(AniseError::MalformedData(file_record.fwrd_idx() + RCRD_LEN))?; + + // TODO: Use the endianness flag + let daf_summary = + DAFSummaryRecord::read_from(&rcrd_bytes[..DAFSummaryRecord::SIZE]).unwrap(); + + // The SPK summaries are defined in this same record, so let's read them now. + let data_summaries = match LayoutVerified::new_slice(&rcrd_bytes[DAFSummaryRecord::SIZE..]) + { + Some(data) => data.into_slice(), + None => &[R::default(); 0], + }; + + // Move onto the next record. + let rcrd_idx = file_record.fwrd_idx() * RCRD_LEN; + let rcrd_bytes = bytes + .get(rcrd_idx..rcrd_idx + RCRD_LEN) + .ok_or(AniseError::MalformedData(file_record.fwrd_idx() + RCRD_LEN))?; + let name_record = NameRecord::read_from(rcrd_bytes).unwrap(); + + Ok(Self { + file_record, + daf_summary, + name_record, + data_summaries, + bytes, + }) + } + + pub fn nth_summary(&self, n: usize) -> Result<(&str, &R), AniseError> { + let name = self + .name_record + .nth_name(n, self.file_record.summary_size()); + + let summary = &self.data_summaries[n]; + + Ok((name, summary)) + } + + /// Provided a name that is in the summary, return its full data, if name is available. + pub fn data_from_name>(&self, name: &str) -> Result { + // O(N) search through the summaries + for idx in 0..self + .name_record + .num_entries(self.file_record.summary_size()) + { + let (this_name, _) = self.nth_summary(idx)?; + if name.trim() == this_name.trim() { + // Found it! + return self.nth_data(idx); + } + } + Err(AniseError::DAFParserError(format!( + "Could not find data for {name}" + ))) + } + + /// Provided a name that is in the summary, return its full data, if name is available. + pub fn nth_data>(&self, idx: usize) -> Result { + let (_, this_summary) = self.nth_summary(idx)?; + // Grab the data in native endianness (TODO: How to support both big and little endian?) + let data: &'a [f64] = LayoutVerified::new_slice( + self.bytes + .get((this_summary.start_idx() - 1) * DBL_SIZE..this_summary.end_idx() * DBL_SIZE) + .ok_or(AniseError::MalformedData(this_summary.end_idx() + RCRD_LEN))?, + ) + .unwrap() + .into_slice(); + // Convert it + return Ok(S::from_slice_f64(data)); + } +} diff --git a/src/naif/recordtypes.rs b/src/naif/daf/recordtypes.rs similarity index 91% rename from src/naif/recordtypes.rs rename to src/naif/daf/recordtypes.rs index ad79990a..5e3d7282 100644 --- a/src/naif/recordtypes.rs +++ b/src/naif/daf/recordtypes.rs @@ -8,16 +8,12 @@ * Documentation: https://nyxspace.com/ */ -use hifitime::Epoch; use zerocopy::FromBytes; -use super::{daf::RCRD_LEN, Endian}; -use crate::{prelude::AniseError, DBL_SIZE}; +use crate::{naif::Endian, prelude::AniseError, DBL_SIZE}; use log::{error, warn}; -pub trait NAIFRecord: FromBytes + Sized + Default { - const SIZE: usize = core::mem::size_of::(); -} +use super::{NAIFRecord, RCRD_LEN}; #[derive(Debug, FromBytes)] #[repr(C)] @@ -89,7 +85,7 @@ impl DAFFileRecord { } else { match str_locidw[4..].trim() { "SPK" => Ok("SPK"), - "PCK" => Ok("pCK"), + "PCK" => Ok("PCK"), _ => { error!("DAF of type `{}` is not yet supported", &str_locidw[4..]); return Err(AniseError::DAFParserError(format!( @@ -169,18 +165,22 @@ impl Default for NameRecord { impl NAIFRecord for NameRecord {} impl NameRecord { - pub fn nth_name(&self, n: usize, ni: usize, nd: usize) -> &str { - let summary_size = nd + (ni + 1) / 2; + /// Returns the number of names in this record + pub fn num_entries(&self, summary_size: usize) -> usize { + self.raw_names.len() / summary_size * DBL_SIZE + } + + pub fn nth_name(&self, n: usize, summary_size: usize) -> &str { let this_name = &self.raw_names[n * summary_size * DBL_SIZE..(n + 1) * summary_size * DBL_SIZE]; match core::str::from_utf8(&this_name) { Ok(name) => name, Err(e) => { warn!( - "malformed name record: `{e}` from {:?}! Using `UNNAMED SPACECRAFT` instead", + "malformed name record: `{e}` from {:?}! Using `UNNAMED OBJECT` instead", this_name ); - "UNNAMED SPACECRAFT" + "UNNAMED OBJECT" } } } diff --git a/src/naif/dafbytes.rs b/src/naif/dafbytes.rs deleted file mode 100644 index 168a4e85..00000000 --- a/src/naif/dafbytes.rs +++ /dev/null @@ -1,273 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use super::recordtypes::DAFFileRecord; -pub(crate) use super::Endian; -use crate::{parse_bytes_as, prelude::AniseError, DBL_SIZE}; -use core::convert::TryInto; -use log::{debug, error, info, warn}; -use zerocopy::FromBytes; - -pub(crate) const RCRD_LEN: usize = 1024; -pub(crate) const INT_SIZE: usize = 4; - -#[derive(Debug, FromBytes)] -pub struct DAFBytes<'a> { - pub idword: &'a str, - pub internal_filename: &'a str, - /// The number of integer components in each array summary. - pub ni: usize, - /// The number of double precision components in each array summary. - pub nd: usize, - /// The record number of the initial summary record in the file. - pub fwrd: usize, - /// The record number of the final summary record in the file. - pub bwrd: usize, - pub freeaddr: usize, - pub endianness: Endian, - // pub bytes: &'a [u8], -} - -impl<'a> DAFBytes<'a> { - /// From https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/daf.html#Structure - pub fn parse(bytes: &'a [u8]) -> Result { - let daf_file_record = DAFFileRecord::read_from(bytes[0..DAFFileRecord::SIZE]).unwrap(); - - let locidw = core::str::from_utf8(bytes.get(0..8).ok_or(AniseError::MalformedData(8))?) - .map_err(|_| { - AniseError::DAFParserError("Could not parse header (first 8 bytes)".to_owned()) - })?; - - if !locidw.contains('/') { - return Err(AniseError::DAFParserError(format!( - "Cannot parse file whose identifier is: `{}`", - locidw - ))); - } - - let daftype_it = locidw.split('/'); - for (idx, content) in daftype_it.enumerate() { - if idx == 0 && content != "DAF" { - return Err(AniseError::DAFParserError(format!( - "Cannot parse file whose identifier is not DAF: `{}`", - locidw, - ))); - } else if idx == 1 { - match content.trim() { - "SPK" => { - debug!("Parsing DAF as SPK"); - } - "PCK" => { - info!("Parsing DAF as PCF (good luck)"); - } - _ => { - error!("DAF of type {content} is not yet supported"); - return Err(AniseError::DAFParserError(format!( - "Cannot parse SPICE data of type `{}`", - locidw - ))); - } - } - } else if idx > 1 { - return Err(AniseError::DAFParserError(format!( - "Malformed header string: `{}`", - locidw - ))); - } - } - - // We need to figure out if this file is big or little endian before we can convert some byte arrays into integer - let str_endianness = - core::str::from_utf8(bytes.get(88..96).ok_or(AniseError::MalformedData(96))?) - .map_err(|_| AniseError::DAFParserError("Could not parse endianness".to_owned()))?; - - let endianness = if str_endianness == "LTL-IEEE" { - Endian::Little - } else if str_endianness == "BIG-IEEE" { - Endian::Big - } else { - return Err(AniseError::DAFParserError(format!( - "Could not understand endianness: `{}`", - str_endianness - ))); - }; - - // Note that we parse as u32 to make sure that it's a 32-bit integer. The docs don't specify if it's signed or not, - // but it works in either case (I guess that the sign bit is still present but set to zero?) - let nd = parse_bytes_as!( - u32, - bytes - .get(8..8 + INT_SIZE) - .ok_or(AniseError::MalformedData(8 + INT_SIZE))?, - endianness - ) as usize; - let ni = parse_bytes_as!( - u32, - bytes - .get(12..12 + INT_SIZE) - .ok_or(AniseError::MalformedData(12 + INT_SIZE))?, - endianness - ) as usize; - let fwrd = parse_bytes_as!( - u32, - bytes - .get(76..76 + INT_SIZE) - .ok_or(AniseError::MalformedData(76 + INT_SIZE))?, - endianness - ) as usize; - let bwrd = parse_bytes_as!( - u32, - bytes - .get(80..80 + INT_SIZE) - .ok_or(AniseError::MalformedData(80 + INT_SIZE))?, - endianness - ) as usize; - let freeaddr = parse_bytes_as!( - u32, - bytes - .get(84..84 + INT_SIZE) - .ok_or(AniseError::MalformedData(84 + INT_SIZE))?, - endianness - ) as usize; - - let locifn = core::str::from_utf8(bytes.get(16..76).ok_or(AniseError::MalformedData(79))?) - .map_err(|_| AniseError::DAFParserError("Could not parse locifn".to_owned()))?; - - Ok(Self { - idword: locidw.trim(), - internal_filename: locifn.trim(), - nd, - ni, - fwrd, - bwrd, - freeaddr, - endianness, - bytes, - }) - } - - pub fn comments(&self) -> Result { - let mut rslt = String::new(); - // FWRD has the initial record of the summary. So we assume that all records between the second record and that one are comments - for rid in 1..self.fwrd { - match core::str::from_utf8( - self.bytes - .get(rid * RCRD_LEN..(rid + 1) * RCRD_LEN) - .ok_or(AniseError::MalformedData((rid + 1) * RCRD_LEN))?, - ) { - Ok(s) => rslt += s.replace("\u{0}\u{0}", " ").replace('\u{0}', "\n").trim(), - Err(e) => { - let valid_s = core::str::from_utf8( - &self.bytes[rid * RCRD_LEN..(rid * RCRD_LEN + e.valid_up_to())], - ) - .unwrap(); - rslt += valid_s - .replace("\u{0}\u{0}", " ") - .replace('\u{0}', "\n") - .trim() - } - } - } - - Ok(rslt) - } - - /// The summaries are needed to decode the rest of the file - pub fn summaries(&self) -> Result, Vec)>, AniseError> { - // Each summary need to be read in bytes of 8*nd then 4*self.ni - let mut record_num = self.fwrd; - let mut rtn = Vec::new(); - loop { - if record_num == 0 { - break; - } - let record = self.record(record_num)?; - // Note that the segment control data are stored as f64 but need to be converted to usize - let next_record = parse_bytes_as!( - f64, - record - .get(0..DBL_SIZE) - .ok_or(AniseError::MalformedData(DBL_SIZE))?, - self.endianness - ) as usize; - - let nsummaries = parse_bytes_as!( - f64, - record - .get(16..16 + DBL_SIZE) - .ok_or(AniseError::MalformedData(16 + DBL_SIZE))?, - self.endianness - ) as usize; - - // Parse the data of the summary. - let name_record = self.record(record_num + 1)?; - let length = DBL_SIZE * self.nd + INT_SIZE * self.ni; - for i in (0..nsummaries * length).step_by(length) { - let j = 3 * DBL_SIZE + i; - let name = if name_record.is_empty() { - warn!("name record is empty! Using `UNNAMED SPACECRAFT` instead"); - "UNNAMED SPACECRAFT" - } else { - match core::str::from_utf8(&name_record[i..i + length]) { - Ok(name) => name, - Err(e) => { - warn!( - "malformed name record: `{e}` from {:?}! Using `UNNAMED SPACECRAFT` instead", - &name_record[i..i + length] - ); - "UNNAMED SPACECRAFT" - } - } - }; - if name.starts_with(' ') { - println!("WARNING: Parsing might be wrong because the first character of the name summary is a space: `{}`", name); - println!( - "Full name data: `{}`", - core::str::from_utf8(&name_record[..1000]).unwrap() - ); - } - let summary_data = &record[j..j + length]; - let mut f64_summary = Vec::with_capacity(self.nd); - for double_data in summary_data[0..DBL_SIZE * self.nd].chunks(DBL_SIZE) { - f64_summary.push(parse_bytes_as!(f64, double_data, self.endianness)); - } - let mut int_summary = Vec::with_capacity(self.ni); - for int_data in summary_data - [DBL_SIZE * self.nd..(self.nd * DBL_SIZE + self.ni * INT_SIZE)] - .chunks(INT_SIZE) - { - int_summary.push(parse_bytes_as!(i32, int_data, self.endianness)); - } - // Add this data to the return vec - rtn.push((name, f64_summary, int_summary)); - } - record_num = next_record; - } - - Ok(rtn) - } - - /// Records are indexed from one!! - fn record(&self, num: usize) -> Result<&'a [u8], AniseError> { - let start_idx = num * RCRD_LEN - RCRD_LEN; - self.bytes - .get(start_idx..start_idx + RCRD_LEN) - .ok_or(AniseError::MalformedData(start_idx + RCRD_LEN)) - } - - /// Returns the 64-bit float at the provided address - pub(crate) fn read_f64(&self, byte_idx: usize) -> f64 { - parse_bytes_as!( - f64, - &self.bytes[DBL_SIZE * byte_idx..DBL_SIZE * (byte_idx + 1)], - self.endianness - ) - } -} diff --git a/src/naif/daf.rs b/src/naif/dafold.rs similarity index 98% rename from src/naif/daf.rs rename to src/naif/dafold.rs index 1895ded5..2a3d2985 100644 --- a/src/naif/daf.rs +++ b/src/naif/dafold.rs @@ -8,10 +8,10 @@ * Documentation: https://nyxspace.com/ */ -use super::recordtypes::{DAFSummaryRecord, NameRecord}; +use super::daf::recordtypes::DAFSummaryRecord; pub(crate) use super::Endian; use crate::{ - naif::recordtypes::{DAFFileRecord, NAIFRecord}, + naif::daf::{recordtypes::DAFFileRecord, NAIFRecord}, parse_bytes_as, prelude::AniseError, DBL_SIZE, @@ -203,7 +203,6 @@ impl<'a> DAF<'a> { // Parse the data of the summary. let name_record_bytes = self.record_bytes(record_num + 1)?; - let name_record = NameRecord::read_from(name_record_bytes).unwrap(); let length = DBL_SIZE * self.nd + INT_SIZE * self.ni; for i in (0..record.num_summaries() * length).step_by(length) { let j = 3 * DBL_SIZE + i; diff --git a/src/naif/mod.rs b/src/naif/mod.rs index fcc337f0..7c01ab56 100644 --- a/src/naif/mod.rs +++ b/src/naif/mod.rs @@ -8,10 +8,13 @@ * Documentation: https://nyxspace.com/ */ +pub mod context; pub mod daf; -// pub mod dafbytes; +pub mod dafold; +pub mod pck; pub mod spk; -pub mod recordtypes; + +pub use context::*; #[macro_export] macro_rules! parse_bytes_as { diff --git a/src/naif/pck/mod.rs b/src/naif/pck/mod.rs new file mode 100644 index 00000000..437a0d30 --- /dev/null +++ b/src/naif/pck/mod.rs @@ -0,0 +1,37 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use zerocopy::FromBytes; + +use crate::naif::daf::{NAIFRecord, NAIFSummaryRecord}; + +#[derive(Copy, Clone, Debug, Default, FromBytes)] +#[repr(C)] +pub struct BPCSummaryRecord { + pub start_epoch_et_s: f64, + pub end_epoch_et_s: f64, + pub frame_id: i32, + pub inertial_frame_id: i32, + pub data_type_i: i32, + pub start_idx: i32, + pub end_idx: i32, +} + +impl NAIFRecord for BPCSummaryRecord {} + +impl NAIFSummaryRecord for BPCSummaryRecord { + fn start_idx(&self) -> usize { + self.start_idx as usize + } + + fn end_idx(&self) -> usize { + self.end_idx as usize + } +} diff --git a/src/naif/spk/mod.rs b/src/naif/spk/mod.rs index ba86e043..d13a0290 100644 --- a/src/naif/spk/mod.rs +++ b/src/naif/spk/mod.rs @@ -13,7 +13,7 @@ extern crate der; use self::datatype::DataType; use self::segment::{Record, SegMetaData, Segment}; -use super::daf::{Endian, DAF}; +use super::dafold::{Endian, DAF}; use crate::constants::orientations::J2000; use crate::errors::InternalErrorKind; use crate::prelude::AniseError; @@ -35,6 +35,7 @@ use std::fs::{remove_file, File}; use std::io::Write; pub mod datatype; +pub mod recordtypes; pub mod segment; pub mod summary; diff --git a/src/naif/spk/recordtypes.rs b/src/naif/spk/recordtypes.rs new file mode 100644 index 00000000..bf18caa6 --- /dev/null +++ b/src/naif/spk/recordtypes.rs @@ -0,0 +1,169 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use core::fmt; +use hifitime::{Duration, Epoch, TimeUnits}; + +use crate::naif::daf::{NAIFDataRecord, NAIFDataSet}; + +pub struct ChebyshevSetType2Type3<'a> { + pub init_epoch: Epoch, + pub interval_length: Duration, + pub rsize: usize, + pub num_records: usize, + pub record_data: &'a [f64], +} + +impl<'a> fmt::Display for ChebyshevSetType2Type3<'a> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "start: {:E}\tlength: {}\trsize: {}\tnum_records: {}\tlen data: {}", + self.init_epoch, + self.interval_length, + self.rsize, + self.num_records, + self.record_data.len() + ) + } +} + +impl<'a> NAIFDataSet<'a> for ChebyshevSetType2Type3<'a> { + type RecordKind = Type2ChebyshevRecord<'a>; + + fn from_slice_f64(slice: &'a [f64]) -> Self { + // For this kind of record, the data is stored at the very end of the dataset + let init_epoch = Epoch::from_et_seconds(slice[slice.len() - 4]); + let interval_length = slice[slice.len() - 3].seconds(); + let rsize = slice[slice.len() - 2] as usize; + let num_records = slice[slice.len() - 1] as usize; + + Self { + init_epoch, + interval_length, + rsize, + num_records, + record_data: &slice[0..slice.len() - 4], + } + } + + fn nth_record(&self, n: usize) -> Self::RecordKind { + let rcrd_len = self.record_data.len() / self.num_records; + Self::RecordKind::from_slice_f64(&self.record_data[n * rcrd_len..(n + 1) * rcrd_len]) + } +} + +pub struct Type2ChebyshevRecord<'a> { + pub midpoint: Epoch, + pub radius: Duration, + pub x_coeffs: &'a [f64], + pub y_coeffs: &'a [f64], + pub z_coeffs: &'a [f64], +} + +impl<'a> fmt::Display for Type2ChebyshevRecord<'a> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "start: {:E}\tend: {:E}\nx: {:?}\ny: {:?}\nz: {:?}", + self.midpoint - self.radius, + self.midpoint + self.radius, + self.x_coeffs, + self.y_coeffs, + self.z_coeffs + ) + } +} + +impl<'a> NAIFDataRecord<'a> for Type2ChebyshevRecord<'a> { + fn from_slice_f64(slice: &'a [f64]) -> Self { + let num_coeffs = (slice.len() - 2) / 3; + Self { + midpoint: Epoch::from_et_seconds(slice[0]), + radius: slice[1].seconds(), + x_coeffs: &slice[2..num_coeffs], + y_coeffs: &slice[2 + num_coeffs..num_coeffs * 2], + z_coeffs: &slice[2 + num_coeffs * 2..], + } + } +} + +pub struct Type3ChebyshevRecord<'a> { + pub midpoint: Epoch, + pub radius: Duration, + pub x_coeffs: &'a [f64], + pub y_coeffs: &'a [f64], + pub z_coeffs: &'a [f64], + pub vx_coeffs: &'a [f64], + pub vy_coeffs: &'a [f64], + pub vz_coeffs: &'a [f64], +} + +impl<'a> fmt::Display for Type3ChebyshevRecord<'a> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "start: {}\tend: {}\nx: {:?}\ny: {:?}\nz: {:?}\nvx: {:?}\nvy: {:?}\nvz: {:?}", + self.midpoint - self.radius, + self.midpoint + self.radius, + self.x_coeffs, + self.y_coeffs, + self.z_coeffs, + self.vx_coeffs, + self.vy_coeffs, + self.vz_coeffs + ) + } +} + +impl<'a> NAIFDataRecord<'a> for Type3ChebyshevRecord<'a> { + fn from_slice_f64(slice: &'a [f64]) -> Self { + let num_coeffs = (slice.len() - 2) / 6; + Self { + midpoint: Epoch::from_et_seconds(slice[0]), + radius: slice[1].seconds(), + x_coeffs: &slice[2..num_coeffs], + y_coeffs: &slice[2 + num_coeffs..num_coeffs * 2], + z_coeffs: &slice[2 + num_coeffs * 2..num_coeffs * 3], + vx_coeffs: &slice[2 + num_coeffs * 3..num_coeffs * 4], + vy_coeffs: &slice[2 + num_coeffs * 4..num_coeffs * 5], + vz_coeffs: &slice[2 + num_coeffs * 5..], + } + } +} + +#[derive(Debug)] +pub struct PositionVelocityRecord { + pub x: f64, + pub y: f64, + pub z: f64, + pub vx: f64, + pub vy: f64, + pub vz: f64, +} + +impl fmt::Display for PositionVelocityRecord { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{self:?}") + } +} + +impl<'a> NAIFDataRecord<'a> for PositionVelocityRecord { + fn from_slice_f64(slice: &'a [f64]) -> Self { + Self { + x: slice[0], + y: slice[1], + z: slice[2], + vx: slice[3], + vy: slice[4], + vz: slice[5], + } + } +} diff --git a/src/naif/spk/summary.rs b/src/naif/spk/summary.rs index 3bc375b8..49c61c67 100644 --- a/src/naif/spk/summary.rs +++ b/src/naif/spk/summary.rs @@ -9,22 +9,11 @@ */ use hifitime::Epoch; -use zerocopy::{FromBytes, LayoutVerified}; +use zerocopy::FromBytes; -use crate::naif::daf::RCRD_LEN; -use crate::naif::recordtypes::{DAFFileRecord, DAFSummaryRecord, NAIFRecord, NameRecord}; -use crate::prelude::AniseError; +use crate::naif::daf::{NAIFRecord, NAIFSummaryRecord}; -#[derive(Debug)] -#[repr(C)] -pub struct DAFBytes<'a, R: NAIFRecord> { - pub file_record: DAFFileRecord, - pub daf_summary: DAFSummaryRecord, - pub name_record: NameRecord, - pub data_summaries: &'a [R], -} - -#[derive(Debug, Default, FromBytes)] +#[derive(Clone, Copy, Debug, Default, FromBytes)] #[repr(C)] pub struct SPKSummaryRecord { pub start_epoch_et_s: f64, @@ -54,64 +43,12 @@ impl SPKSummaryRecord { impl NAIFRecord for SPKSummaryRecord {} -#[derive(Debug, Default, FromBytes)] -#[repr(C)] -pub struct PCKSummaryRecord { - pub start_epoch_et_s: f64, - pub end_epoch_et_s: f64, - pub frame_id: i32, - pub inertial_frame_id: i32, - pub data_type_i: i32, - pub start_idx: i32, - pub end_idx: i32, -} - -impl NAIFRecord for PCKSummaryRecord {} - -impl<'a, R: NAIFRecord> DAFBytes<'a, R> { - pub fn parse(bytes: &'a [u8]) -> Result { - let file_rcrd = DAFFileRecord::read_from(&bytes[..DAFFileRecord::SIZE]).unwrap(); - - // Move onto the next record. - // let mut rcrd_idx = (file_rcrd.fwrd_idx() - 1) * RCRD_LEN; - let rcrd_idx = file_rcrd.fwrd_idx() * RCRD_LEN - RCRD_LEN; - let rcrd_bytes = bytes - .get(rcrd_idx..rcrd_idx + RCRD_LEN) - .ok_or(AniseError::MalformedData(file_rcrd.fwrd_idx() + RCRD_LEN))?; - - let daf_summary = - DAFSummaryRecord::read_from(&rcrd_bytes[0..DAFSummaryRecord::SIZE]).unwrap(); - - // The SPK summaries are defined in this same record, so let's read them now. - let data_summaries = match LayoutVerified::new_slice(&rcrd_bytes[DAFSummaryRecord::SIZE..]) - { - Some(data) => data.into_slice(), - None => &[R::default(); 0], - }; - - // Move onto the next record. - // rcrd_idx = (file_rcrd.fwrd_idx() - 0) * RCRD_LEN; - let rcrd_idx = (file_rcrd.fwrd_idx() + 1) * RCRD_LEN - RCRD_LEN; - let rcrd_bytes = bytes - .get(rcrd_idx..rcrd_idx + RCRD_LEN) - .ok_or(AniseError::MalformedData(file_rcrd.fwrd_idx() + RCRD_LEN))?; - let name_record = NameRecord::read_from(rcrd_bytes).unwrap(); - - Ok(Self { - file_record: file_rcrd, - daf_summary, - name_record, - data_summaries, - }) +impl NAIFSummaryRecord for SPKSummaryRecord { + fn start_idx(&self) -> usize { + self.start_idx as usize } - pub fn nth_summary(&self, n: usize) -> Result<(&str, &R), AniseError> { - let name = self - .name_record - .nth_name(n, self.file_record.ni(), self.file_record.nd()); - - let summary = &self.data_summaries[n]; - - Ok((name, summary)) + fn end_idx(&self) -> usize { + self.end_idx as usize } } diff --git a/src/spline.rs b/src/spline.rs index 02f81a8d..c5ca22d4 100644 --- a/src/spline.rs +++ b/src/spline.rs @@ -17,7 +17,7 @@ use crate::{ spline::{Field, Splines}, }, errors::{AniseError, IntegrityErrorKind, InternalErrorKind}, - naif::daf::Endian, + naif::dafold::Endian, parse_bytes_as, DBL_SIZE, }; diff --git a/tests/naif.rs b/tests/naif.rs index 28f57338..904717be 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -9,17 +9,15 @@ */ use core::convert::TryInto; -use std::mem::size_of_val; use anise::{ file_mmap, naif::{ - daf::DAF, - spk::{ - summary::{DAFBytes, PCKSummaryRecord, SPKSummaryRecord}, - SPK, - }, - Endian, + daf::DAFBytes, + dafold::DAF, + pck::BPCSummaryRecord, + spk::{recordtypes::ChebyshevSetType2Type3, summary::SPKSummaryRecord, SPK}, + Endian, SpiceContext, }, prelude::*, structure::context::AniseContext, @@ -162,11 +160,7 @@ fn test_binary_pck_load() { let filename = "data/earth_latest_high_prec.bpc"; let bytes = file_mmap!(filename).unwrap(); - // let high_prec = DAF::parse(&bytes).unwrap(); - // println!("{}", high_prec.comments().unwrap()); - // high_prec.summaries().unwrap(); - - let high_prec = DAFBytes::::parse(&bytes).unwrap(); + let high_prec = DAFBytes::::parse(&bytes).unwrap(); for n in 0..high_prec.daf_summary.num_summaries() { let (name, data) = high_prec.nth_summary(n).unwrap(); println!("{} -> {:?}", name, data); @@ -180,8 +174,7 @@ fn test_spk_load_bytes() { } // Using the DE421 as demo because the correct data is in the DAF documentation - let bsp_path = "data/de421.bsp"; - let bytes = file_mmap!(bsp_path).unwrap(); + let bytes = file_mmap!("data/de421.bsp").unwrap(); let de421 = DAFBytes::::parse(&bytes).unwrap(); assert_eq!(de421.file_record.nd, 2); @@ -200,7 +193,34 @@ fn test_spk_load_bytes() { println!("{} -> {:?}", name, data); } - // println!("stack size = {}", size_of_val(&de421)); + // Try to grab some data here! + let data_set = de421.nth_data::(3).unwrap(); + println!("{data_set}"); + + // Put this in a context + let mut spice = SpiceContext::default(); + spice.furnsh_spk("de421", &de421).unwrap(); + + println!("{:?}", spice.spk_lut); + + // Now load another DE file + // WARNING: Rust won't allow us to load this other file in a scope and then unload it! + + let bytes = file_mmap!("data/de440.bsp").unwrap(); + let de440 = DAFBytes::::parse(&bytes).unwrap(); + spice.furnsh_spk("de440", &de440).unwrap(); + + // And another + let bytes = file_mmap!("data/de438s.bsp").unwrap(); + let de440 = DAFBytes::::parse(&bytes).unwrap(); + spice.furnsh_spk("de438s", &de440).unwrap(); + + println!("{:?}", spice.spk_lut); + + spice.unfurnsh_spk("de440").unwrap(); + + println!("{:?}", spice.spk_lut); + // assert_eq!(de421.comments().unwrap().len(), 1379); // // Convert to SPK // let spk: SPK = (&de421).try_into().unwrap(); From 55cf9de1fdb5557237b9e576fd3b43cf94fb815d Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 11 Nov 2022 18:04:35 -0700 Subject: [PATCH 18/48] Ha, fixed the unloading issue! Signed-off-by: Christopher Rabotin --- src/naif/context/mod.rs | 126 +++++++--------------------------------- tests/naif.rs | 25 ++++---- 2 files changed, 35 insertions(+), 116 deletions(-) diff --git a/src/naif/context/mod.rs b/src/naif/context/mod.rs index 9eee75f4..8a0df6b7 100644 --- a/src/naif/context/mod.rs +++ b/src/naif/context/mod.rs @@ -17,7 +17,7 @@ use crate::errors::AniseError; /// # Limitations /// You may only load up to 32 SPICE files of each kind. /// The stack space does _not_ depend on how much data is loaded at any given time. -#[derive(Default)] +#[derive(Clone, Default)] pub struct SpiceContext<'a> { pub spk_lut: [Option<&'a str>; 32], pub bpc_lut: [Option<&'a str>; 32], @@ -25,12 +25,16 @@ pub struct SpiceContext<'a> { pub bpc_data: [Option<&'a DAFBytes<'a, BPCSummaryRecord>>; 32], } -impl<'a> SpiceContext<'a> { +impl<'a: 'b, 'b> SpiceContext<'a> { + /// Loads a new SPK file into a new context. + /// This new context is needed to satisfy the unloading of files. In fact, to unload a file, simply let the newly loaded context drop out of scope and Rust will clean it up. pub fn furnsh_spk( - &mut self, - name: &'a str, - spk: &'a DAFBytes<'a, SPKSummaryRecord>, - ) -> Result<(), AniseError> { + &self, + name: &'b str, + spk: &'b DAFBytes<'b, SPKSummaryRecord>, + ) -> Result, AniseError> { + // This is just a bunch of pointers so it doesn't use much memory. + let mut me = self.clone(); // Parse as SPK and place into the SPK list if there is room let mut data_idx = 32; for (idx, item) in self.spk_data.iter().enumerate() { @@ -42,16 +46,18 @@ impl<'a> SpiceContext<'a> { if data_idx == 32 { return Err(AniseError::MaxTreeDepth); } - self.spk_lut[data_idx] = Some(name); - self.spk_data[data_idx] = Some(spk); - Ok(()) + me.spk_lut[data_idx] = Some(name); + me.spk_data[data_idx] = Some(spk); + Ok(me) } pub fn furnsh_bpc( - &mut self, - name: &'a str, - bpc: &'a DAFBytes<'a, BPCSummaryRecord>, - ) -> Result<(), AniseError> { + &self, + name: &'b str, + bpc: &'b DAFBytes<'b, BPCSummaryRecord>, + ) -> Result, AniseError> { + // This is just a bunch of pointers so it doesn't use much memory. + let mut me = self.clone(); // Parse as SPK and place into the SPK list if there is room let mut data_idx = 32; for (idx, item) in self.bpc_data.iter().enumerate() { @@ -63,96 +69,8 @@ impl<'a> SpiceContext<'a> { if data_idx == 32 { return Err(AniseError::MaxTreeDepth); } - self.bpc_lut[data_idx] = Some(name); - self.bpc_data[data_idx] = Some(bpc); - Ok(()) - } - - pub fn unfurnsh_spk(&mut self, name: &'a str) -> Result<(), AniseError> { - // Iterate through the LUT to find that name. - let mut pos_idx = 0; - for (idx, item) in self.spk_lut.iter().enumerate() { - match item { - None => return Err(AniseError::ItemNotFound), // Data is contiguous, so this mean we're found nothing - Some(obj_name) => { - if &name == obj_name { - self.spk_lut[idx] = None; - self.spk_data[idx] = None; - pos_idx = idx; - break; - } - } - } - } - - // Now move everything up. - if pos_idx > 0 { - // Find the first non-null - let mut final_idx = 0; - for (rev_idx, item) in self.spk_lut.iter().rev().enumerate() { - if item.is_some() { - final_idx = rev_idx; - break; - } - } - if final_idx > pos_idx { - // Move everything up. - for mov_idx in pos_idx..final_idx { - self.spk_lut[mov_idx] = self.spk_lut[mov_idx + 1]; - self.spk_data[mov_idx] = self.spk_data[mov_idx + 1]; - } - } - } - return Ok(()); - } - - pub fn unfurnsh_bpc(&mut self, name: &'a str) -> Result<(), AniseError> { - // Ugh, I couldn't make it generic - /* - error[E0508]: cannot move out of type `[Option>]`, a non-copy slice - --> src/naif/context/mod.rs:168:33 - | - 168 | data[mov_idx] = data[mov_idx + 1]; - | ^^^^^^^^^^^^^^^^^ - | | - | cannot move out of here - | move occurs because `data[_]` has type `Option>`, which does not implement the `Copy` trait - - */ - // Iterate through the LUT to find that name. - let mut pos_idx = 0; - for (idx, item) in self.bpc_lut.iter().enumerate() { - match item { - None => return Err(AniseError::ItemNotFound), // Data is contiguous, so this mean we're found nothing - Some(obj_name) => { - if &name == obj_name { - self.bpc_lut[idx] = None; - self.bpc_data[idx] = None; - pos_idx = idx; - break; - } - } - } - } - - // Now move everything up. - if pos_idx > 0 { - // Find the first non-null - let mut final_idx = 0; - for (rev_idx, item) in self.bpc_lut.iter().rev().enumerate() { - if item.is_some() { - final_idx = rev_idx; - break; - } - } - if final_idx > pos_idx { - // Move everything up. - for mov_idx in pos_idx..final_idx { - self.bpc_lut[mov_idx] = self.bpc_lut[mov_idx + 1]; - self.bpc_data[mov_idx] = self.bpc_data[mov_idx + 1]; - } - } - } - return Ok(()); + me.bpc_lut[data_idx] = Some(name); + me.bpc_data[data_idx] = Some(bpc); + Ok(me) } } diff --git a/tests/naif.rs b/tests/naif.rs index 904717be..694c5e75 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -198,26 +198,27 @@ fn test_spk_load_bytes() { println!("{data_set}"); // Put this in a context - let mut spice = SpiceContext::default(); - spice.furnsh_spk("de421", &de421).unwrap(); + let spice = SpiceContext::default(); + let spice = spice.furnsh_spk("de421", &de421).unwrap(); println!("{:?}", spice.spk_lut); // Now load another DE file // WARNING: Rust won't allow us to load this other file in a scope and then unload it! + { + let bytes = file_mmap!("data/de440.bsp").unwrap(); + let de440 = DAFBytes::::parse(&bytes).unwrap(); + let spice = spice.furnsh_spk("de440", &de440).unwrap(); - let bytes = file_mmap!("data/de440.bsp").unwrap(); - let de440 = DAFBytes::::parse(&bytes).unwrap(); - spice.furnsh_spk("de440", &de440).unwrap(); + // And another + let bytes = file_mmap!("data/de438s.bsp").unwrap(); + let de440 = DAFBytes::::parse(&bytes).unwrap(); + let spice = spice.furnsh_spk("de438s", &de440).unwrap(); - // And another - let bytes = file_mmap!("data/de438s.bsp").unwrap(); - let de440 = DAFBytes::::parse(&bytes).unwrap(); - spice.furnsh_spk("de438s", &de440).unwrap(); - - println!("{:?}", spice.spk_lut); + println!("{:?}", spice.spk_lut); + } - spice.unfurnsh_spk("de440").unwrap(); + // spice.unfurnsh_spk("de440").unwrap(); println!("{:?}", spice.spk_lut); From 4738e7f3b5f26fae07b09aed0286101cffdd233f Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 11 Nov 2022 18:11:52 -0700 Subject: [PATCH 19/48] Minor cleanup Signed-off-by: Christopher Rabotin --- src/errors.rs | 3 ++- src/naif/context/mod.rs | 4 ++-- tests/naif.rs | 6 ++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/errors.rs b/src/errors.rs index f499aa0d..4068583f 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -20,7 +20,7 @@ use std::io::ErrorKind as IOErrorKind; #[derive(Clone, PartialEq, Debug)] pub enum AniseError { - + StructureIsFull, /// Raised for an error in reading or writing the file(s) IOError(IOErrorKind), /// Raised if an IO error occurred but its representation is not simple (and therefore not an std::io::ErrorKind). @@ -133,6 +133,7 @@ impl From for AniseError { impl fmt::Display for AniseError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { match self { + Self::StructureIsFull => write!(f, "ANISE error: attempted to load more data but no more room was available"), Self::IOError(e) => write!(f, "ANISE error: IOError: {e:?}"), Self::IOUnknownError => write!(f, "ANISE error: IOUnknownError"), Self::MathError(e) => write!(f, "ANISE error: MathError: {e:?}"), diff --git a/src/naif/context/mod.rs b/src/naif/context/mod.rs index 8a0df6b7..38820253 100644 --- a/src/naif/context/mod.rs +++ b/src/naif/context/mod.rs @@ -44,7 +44,7 @@ impl<'a: 'b, 'b> SpiceContext<'a> { } } if data_idx == 32 { - return Err(AniseError::MaxTreeDepth); + return Err(AniseError::StructureIsFull); } me.spk_lut[data_idx] = Some(name); me.spk_data[data_idx] = Some(spk); @@ -67,7 +67,7 @@ impl<'a: 'b, 'b> SpiceContext<'a> { } } if data_idx == 32 { - return Err(AniseError::MaxTreeDepth); + return Err(AniseError::StructureIsFull); } me.bpc_lut[data_idx] = Some(name); me.bpc_data[data_idx] = Some(bpc); diff --git a/tests/naif.rs b/tests/naif.rs index 694c5e75..0f1bd26c 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -9,6 +9,7 @@ */ use core::convert::TryInto; +use std::mem::size_of_val; use anise::{ file_mmap, @@ -216,11 +217,12 @@ fn test_spk_load_bytes() { let spice = spice.furnsh_spk("de438s", &de440).unwrap(); println!("{:?}", spice.spk_lut); - } - // spice.unfurnsh_spk("de440").unwrap(); + println!("{}", size_of_val(&spice)); + } println!("{:?}", spice.spk_lut); + println!("{}", size_of_val(&spice)); // assert_eq!(de421.comments().unwrap().len(), 1379); // // Convert to SPK From d1293713eff2e5b42b47c434cd17fff5acf9dd41 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sat, 12 Nov 2022 15:12:25 -0700 Subject: [PATCH 20/48] Clean up tests of SPK loading --- .gitignore | 3 +- src/naif/context/mod.rs | 22 ++- src/naif/daf/mod.rs | 6 +- src/naif/kpl.rs | 9 ++ src/naif/spk/summary.rs | 15 ++ tests/naif.rs | 300 +++++++--------------------------------- 6 files changed, 89 insertions(+), 266 deletions(-) create mode 100644 src/naif/kpl.rs diff --git a/.gitignore b/.gitignore index 74cf9f1f..74dd0d5b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ cspice *.parquet *.svg perf.data* -analysis/.venv \ No newline at end of file +analysis/.venv +cspice.tar.Z \ No newline at end of file diff --git a/src/naif/context/mod.rs b/src/naif/context/mod.rs index 38820253..86657627 100644 --- a/src/naif/context/mod.rs +++ b/src/naif/context/mod.rs @@ -8,7 +8,7 @@ * Documentation: https://nyxspace.com/ */ -use crate::naif::{daf::DAFBytes, pck::BPCSummaryRecord, spk::summary::SPKSummaryRecord}; +use crate::naif::{daf::DAF, pck::BPCSummaryRecord, spk::summary::SPKSummaryRecord}; use crate::errors::AniseError; @@ -19,19 +19,17 @@ use crate::errors::AniseError; /// The stack space does _not_ depend on how much data is loaded at any given time. #[derive(Clone, Default)] pub struct SpiceContext<'a> { - pub spk_lut: [Option<&'a str>; 32], - pub bpc_lut: [Option<&'a str>; 32], - pub spk_data: [Option<&'a DAFBytes<'a, SPKSummaryRecord>>; 32], - pub bpc_data: [Option<&'a DAFBytes<'a, BPCSummaryRecord>>; 32], + // TODO: Add ANISE context here too. + pub spk_data: [Option<&'a DAF<'a, SPKSummaryRecord>>; 32], + pub bpc_data: [Option<&'a DAF<'a, BPCSummaryRecord>>; 32], } impl<'a: 'b, 'b> SpiceContext<'a> { /// Loads a new SPK file into a new context. /// This new context is needed to satisfy the unloading of files. In fact, to unload a file, simply let the newly loaded context drop out of scope and Rust will clean it up. - pub fn furnsh_spk( + pub fn load_spk( &self, - name: &'b str, - spk: &'b DAFBytes<'b, SPKSummaryRecord>, + spk: &'b DAF<'b, SPKSummaryRecord>, ) -> Result, AniseError> { // This is just a bunch of pointers so it doesn't use much memory. let mut me = self.clone(); @@ -46,15 +44,14 @@ impl<'a: 'b, 'b> SpiceContext<'a> { if data_idx == 32 { return Err(AniseError::StructureIsFull); } - me.spk_lut[data_idx] = Some(name); me.spk_data[data_idx] = Some(spk); Ok(me) } - pub fn furnsh_bpc( + /// Loads a Binary Planetary Constants kernel. + pub fn load_bpc( &self, - name: &'b str, - bpc: &'b DAFBytes<'b, BPCSummaryRecord>, + bpc: &'b DAF<'b, BPCSummaryRecord>, ) -> Result, AniseError> { // This is just a bunch of pointers so it doesn't use much memory. let mut me = self.clone(); @@ -69,7 +66,6 @@ impl<'a: 'b, 'b> SpiceContext<'a> { if data_idx == 32 { return Err(AniseError::StructureIsFull); } - me.bpc_lut[data_idx] = Some(name); me.bpc_data[data_idx] = Some(bpc); Ok(me) } diff --git a/src/naif/daf/mod.rs b/src/naif/daf/mod.rs index 9917b5e1..7ea8aea8 100644 --- a/src/naif/daf/mod.rs +++ b/src/naif/daf/mod.rs @@ -39,7 +39,7 @@ pub trait NAIFDataRecord<'a> { } #[derive(Default, Debug)] -pub struct DAFBytes<'a, R: NAIFSummaryRecord> { +pub struct DAF<'a, R: NAIFSummaryRecord> { pub file_record: DAFFileRecord, pub daf_summary: DAFSummaryRecord, pub name_record: NameRecord, @@ -48,7 +48,7 @@ pub struct DAFBytes<'a, R: NAIFSummaryRecord> { pub bytes: &'a [u8], } -impl<'a, R: NAIFSummaryRecord> DAFBytes<'a, R> { +impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { pub fn parse(bytes: &'a [u8]) -> Result { let file_record = DAFFileRecord::read_from(&bytes[..DAFFileRecord::SIZE]).unwrap(); @@ -92,7 +92,7 @@ impl<'a, R: NAIFSummaryRecord> DAFBytes<'a, R> { let summary = &self.data_summaries[n]; - Ok((name, summary)) + Ok((name.trim(), summary)) } /// Provided a name that is in the summary, return its full data, if name is available. diff --git a/src/naif/kpl.rs b/src/naif/kpl.rs new file mode 100644 index 00000000..33851fca --- /dev/null +++ b/src/naif/kpl.rs @@ -0,0 +1,9 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ diff --git a/src/naif/spk/summary.rs b/src/naif/spk/summary.rs index 49c61c67..5c5e0a22 100644 --- a/src/naif/spk/summary.rs +++ b/src/naif/spk/summary.rs @@ -8,6 +8,7 @@ * Documentation: https://nyxspace.com/ */ +use core::fmt; use hifitime::Epoch; use zerocopy::FromBytes; @@ -52,3 +53,17 @@ impl NAIFSummaryRecord for SPKSummaryRecord { self.end_idx as usize } } + +impl fmt::Display for SPKSummaryRecord { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "SPK Summary for TGT={} CTR={} FRM={} from {:E} to {:E}", + self.target_id, + self.center_id, + self.frame_id, + self.start_epoch(), + self.end_epoch() + ) + } +} diff --git a/tests/naif.rs b/tests/naif.rs index 0f1bd26c..86a0a8c2 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -14,10 +14,13 @@ use std::mem::size_of_val; use anise::{ file_mmap, naif::{ - daf::DAFBytes, - dafold::DAF, + daf::DAF, pck::BPCSummaryRecord, - spk::{recordtypes::ChebyshevSetType2Type3, summary::SPKSummaryRecord, SPK}, + spk::{ + recordtypes::{ChebyshevSetType2Type3, Type2ChebyshevRecord}, + summary::SPKSummaryRecord, + SPK, + }, Endian, SpiceContext, }, prelude::*, @@ -25,132 +28,6 @@ use anise::{ structure::spline::{Evenness, Field, StateKind}, }; -// Ignore this test by default because it's very slow. It's also tested in the conversion of JPL SPKs. -#[test] -#[ignore] -fn test_spk_load() { - if pretty_env_logger::try_init().is_err() { - println!("could not init env_logger"); - } - - // Using the DE421 as demo because the correct data is in the DAF documentation - let bsp_path = "data/de421.bsp"; - let bytes = file_mmap!(bsp_path).unwrap(); - - let de421 = DAF::parse(&bytes).unwrap(); - assert_eq!(de421.nd, 2); - assert_eq!(de421.ni, 6); - assert_eq!(de421.idword, "DAF/SPK"); - assert_eq!(de421.internal_filename, "NIO2SPK"); - assert_eq!(de421.fwrd, 4); - assert_eq!(de421.bwrd, 4); - assert_eq!(de421.endianness, Endian::Little); - assert_eq!(de421.comments().unwrap().len(), 1379); - // Convert to SPK - let spk: SPK = (&de421).try_into().unwrap(); - println!("{}", spk); - - let (seg, meta) = spk.segment_ptr(301).unwrap(); - assert_eq!( - seg.start_idx, 944041, - "Invalid start of coeff index for DE421" - ); - assert_eq!( - meta.interval_length_s, 345600.0, - "Invalid interval length (in seconds) for DE421" - ); - assert_eq!(meta.rsize, 41, "Invalid rsize for DE421"); - assert_eq!( - meta.num_records_in_seg, 14080, - "Invalid num_records_in_seg for DE421" - ); - assert!( - (meta.init_s_past_j2k - -3169195200.0).abs() < 2e-16, - "Invalid start time" - ); - - spk.copy_segments(301).unwrap(); - - // Build the ANISE file - let filename_anis = "target/de421.anise"; - spk.to_anise(bsp_path, filename_anis, true, true).unwrap(); - - // Load this ANISE file and make sure that it matches the original DE421 data. - let bytes = file_mmap!(filename_anis).unwrap(); - let ctx = AniseContext::from_bytes(&bytes); - // Ignore the three empty ones - assert_eq!( - ctx.ephemeris_lut.hashes.data.len(), - spk.segments.len() - 3, - "Incorrect number of ephem in map" - ); - assert_eq!( - ctx.ephemeris_lut.indexes.data.len(), - spk.segments.len() - 3, - "Incorrect number of ephem in map" - ); - - // From Python jplephem, an inspection of the coefficients of the DE421 file shows the number of segments we should have. - // So let's add it here as a test. - // >>> from jplephem.spk import SPK - // >>> de421 = SPK.open('../anise.rs/data/de421.bsp') - // >>> [c.load_array()[2].shape[1] for c in de421.segments] - let seg_len: &[usize] = &[ - 7040, 3520, 3520, 1760, 1760, 1760, 1760, 1760, 1760, 3520, 14080, 14080, 1, 1, 1, - ]; - - for (eidx, ephem) in ctx.ephemeris_data.iter().enumerate() { - let splt = ephem.name.split("#").collect::>(); - dbg!(&splt); - let seg_target_id = str::parse::(splt[1]).unwrap(); - // Fetch the SPK segment - let (seg, meta, all_seg_data) = spk.copy_segments(seg_target_id).unwrap(); - if all_seg_data.is_empty() { - continue; - } - assert_eq!( - all_seg_data.len(), - seg_len[eidx], - "wrong number of segments for {}", - eidx - ); - assert_eq!(seg.name, splt[0].trim(), "incorrect name"); - - let splines = &ephem.splines; - match splines.metadata.evenness { - Evenness::Even { duration_ns } => { - assert_eq!( - (duration_ns as i64).nanoseconds().to_seconds(), - meta.interval_length_s, - "incorrect interval duration" - ); - } - _ => panic!("wrong spline kind"), - }; - - assert_eq!( - splines.metadata.state_kind, - StateKind::Position { - degree: ((meta.rsize - 2) / 3) as u8 - } - ); - - for (sidx, seg_data) in all_seg_data.iter().enumerate() { - for (cidx, x_truth) in seg_data.x_coeffs.iter().enumerate() { - assert_eq!(splines.fetch(sidx, cidx, Field::X).unwrap(), *x_truth); - } - - for (cidx, y_truth) in seg_data.y_coeffs.iter().enumerate() { - assert_eq!(splines.fetch(sidx, cidx, Field::Y).unwrap(), *y_truth); - } - - for (cidx, z_truth) in seg_data.z_coeffs.iter().enumerate() { - assert_eq!(splines.fetch(sidx, cidx, Field::Z).unwrap(), *z_truth); - } - } - } -} - #[test] fn test_binary_pck_load() { if pretty_env_logger::try_init().is_err() { @@ -161,7 +38,7 @@ fn test_binary_pck_load() { let filename = "data/earth_latest_high_prec.bpc"; let bytes = file_mmap!(filename).unwrap(); - let high_prec = DAFBytes::::parse(&bytes).unwrap(); + let high_prec = DAF::::parse(&bytes).unwrap(); for n in 0..high_prec.daf_summary.num_summaries() { let (name, data) = high_prec.nth_summary(n).unwrap(); println!("{} -> {:?}", name, data); @@ -177,7 +54,7 @@ fn test_spk_load_bytes() { // Using the DE421 as demo because the correct data is in the DAF documentation let bytes = file_mmap!("data/de421.bsp").unwrap(); - let de421 = DAFBytes::::parse(&bytes).unwrap(); + let de421 = DAF::::parse(&bytes).unwrap(); assert_eq!(de421.file_record.nd, 2); assert_eq!(de421.file_record.ni, 6); assert_eq!(de421.file_record.identification().unwrap(), "SPK"); @@ -189,9 +66,42 @@ fn test_spk_load_bytes() { assert_eq!(de421.daf_summary.next_record(), 0); assert_eq!(de421.daf_summary.prev_record(), 0); + // From Python jplephem, an inspection of the coefficients of the DE421 file shows the number of segments we should have. + // // So let's add it here as a test. + // // >>> from jplephem.spk import SPK + // // >>> de421 = SPK.open('../anise.rs/data/de421.bsp') + // // >>> [c.load_array()[2].shape[1] for c in de421.segments] + let seg_len: &[usize] = &[ + 7040, 3520, 3520, 1760, 1760, 1760, 1760, 1760, 1760, 3520, 14080, 14080, 1, 1, 1, + ]; + for n in 0..de421.daf_summary.num_summaries() { - let (name, data) = de421.nth_summary(n).unwrap(); - println!("{} -> {:?}", name, data); + let (name, summary) = de421.nth_summary(n).unwrap(); + println!("{} -> {}", name, summary); + // We know that the DE421 data is all in Type 2 + let data_set = de421.nth_data::(n).unwrap(); + assert_eq!(data_set.num_records, seg_len[n]); + if summary.target_id == 301 { + assert_eq!( + summary.start_idx, 944041, + "Invalid start of coeff index for DE421" + ); + assert!( + (summary.start_epoch_et_s - -3169195200.0).abs() < 2e-16, + "Invalid start time" + ); + assert_eq!( + data_set.interval_length, + 345600.0.seconds(), + "Invalid interval length (in seconds) for DE421" + ); + assert_eq!(data_set.rsize, 41, "Invalid rsize for DE421"); + assert_eq!( + data_set.init_epoch, + Epoch::from_et_seconds(-3169195200.0), + "Invalid start time" + ); + } } // Try to grab some data here! @@ -200,132 +110,24 @@ fn test_spk_load_bytes() { // Put this in a context let spice = SpiceContext::default(); - let spice = spice.furnsh_spk("de421", &de421).unwrap(); - - println!("{:?}", spice.spk_lut); + let spice = spice.load_spk(&de421).unwrap(); // Now load another DE file - // WARNING: Rust won't allow us to load this other file in a scope and then unload it! + // NOTE: Rust has strict lifetime requirements, and the Spice Context is set up such that loading another dataset will return a new context with that data set loaded in it. { let bytes = file_mmap!("data/de440.bsp").unwrap(); - let de440 = DAFBytes::::parse(&bytes).unwrap(); - let spice = spice.furnsh_spk("de440", &de440).unwrap(); + let de440 = DAF::::parse(&bytes).unwrap(); + let spice = spice.load_spk(&de440).unwrap(); // And another let bytes = file_mmap!("data/de438s.bsp").unwrap(); - let de440 = DAFBytes::::parse(&bytes).unwrap(); - let spice = spice.furnsh_spk("de438s", &de440).unwrap(); - - println!("{:?}", spice.spk_lut); + let de440 = DAF::::parse(&bytes).unwrap(); + let spice = spice.load_spk(&de440).unwrap(); + // NOTE: Because everything is a pointer, the size on the stack remains constant at 521 bytes. println!("{}", size_of_val(&spice)); } - println!("{:?}", spice.spk_lut); + // NOTE: Because everything is a pointer, the size on the stack remains constant at 521 bytes. println!("{}", size_of_val(&spice)); - - // assert_eq!(de421.comments().unwrap().len(), 1379); - // // Convert to SPK - // let spk: SPK = (&de421).try_into().unwrap(); - // println!("{}", spk); - - // let (seg, meta) = spk.segment_ptr(301).unwrap(); - // assert_eq!( - // seg.start_idx, 944041, - // "Invalid start of coeff index for DE421" - // ); - // assert_eq!( - // meta.interval_length_s, 345600.0, - // "Invalid interval length (in seconds) for DE421" - // ); - // assert_eq!(meta.rsize, 41, "Invalid rsize for DE421"); - // assert_eq!( - // meta.num_records_in_seg, 14080, - // "Invalid num_records_in_seg for DE421" - // ); - // assert!( - // (meta.init_s_past_j2k - -3169195200.0).abs() < 2e-16, - // "Invalid start time" - // ); - - // spk.copy_segments(301).unwrap(); - - // // Build the ANISE file - // let filename_anis = "target/de421.anise"; - // spk.to_anise(bsp_path, filename_anis, true, true).unwrap(); - - // // Load this ANISE file and make sure that it matches the original DE421 data. - // let bytes = file_mmap!(filename_anis).unwrap(); - // let ctx = AniseContext::from_bytes(&bytes); - // // Ignore the three empty ones - // assert_eq!( - // ctx.ephemeris_lut.hashes.data.len(), - // spk.segments.len() - 3, - // "Incorrect number of ephem in map" - // ); - // assert_eq!( - // ctx.ephemeris_lut.indexes.data.len(), - // spk.segments.len() - 3, - // "Incorrect number of ephem in map" - // ); - - // // From Python jplephem, an inspection of the coefficients of the DE421 file shows the number of segments we should have. - // // So let's add it here as a test. - // // >>> from jplephem.spk import SPK - // // >>> de421 = SPK.open('../anise.rs/data/de421.bsp') - // // >>> [c.load_array()[2].shape[1] for c in de421.segments] - // let seg_len: &[usize] = &[ - // 7040, 3520, 3520, 1760, 1760, 1760, 1760, 1760, 1760, 3520, 14080, 14080, 1, 1, 1, - // ]; - - // for (eidx, ephem) in ctx.ephemeris_data.iter().enumerate() { - // let splt = ephem.name.split("#").collect::>(); - // dbg!(&splt); - // let seg_target_id = str::parse::(splt[1]).unwrap(); - // // Fetch the SPK segment - // let (seg, meta, all_seg_data) = spk.copy_segments(seg_target_id).unwrap(); - // if all_seg_data.is_empty() { - // continue; - // } - // assert_eq!( - // all_seg_data.len(), - // seg_len[eidx], - // "wrong number of segments for {}", - // eidx - // ); - // assert_eq!(seg.name, splt[0].trim(), "incorrect name"); - - // let splines = &ephem.splines; - // match splines.metadata.evenness { - // Evenness::Even { duration_ns } => { - // assert_eq!( - // (duration_ns as i64).nanoseconds().to_seconds(), - // meta.interval_length_s, - // "incorrect interval duration" - // ); - // } - // _ => panic!("wrong spline kind"), - // }; - - // assert_eq!( - // splines.metadata.state_kind, - // StateKind::Position { - // degree: ((meta.rsize - 2) / 3) as u8 - // } - // ); - - // for (sidx, seg_data) in all_seg_data.iter().enumerate() { - // for (cidx, x_truth) in seg_data.x_coeffs.iter().enumerate() { - // assert_eq!(splines.fetch(sidx, cidx, Field::X).unwrap(), *x_truth); - // } - - // for (cidx, y_truth) in seg_data.y_coeffs.iter().enumerate() { - // assert_eq!(splines.fetch(sidx, cidx, Field::Y).unwrap(), *y_truth); - // } - - // for (cidx, z_truth) in seg_data.z_coeffs.iter().enumerate() { - // assert_eq!(splines.fetch(sidx, cidx, Field::Z).unwrap(), *z_truth); - // } - // } - // } } From 150acf145eeb543b9eb4f354392168076d881057 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Wed, 16 Nov 2022 00:13:16 -0700 Subject: [PATCH 21/48] Make DAF first-class container -- tests fail Signed-off-by: Christopher Rabotin --- benches/crit_ephemerides.rs | 4 +- benches/iai_ephemerides.rs | 2 +- src/bin/anise/main.rs | 156 +++--- src/cli/inspect.rs | 111 ++-- src/constants.rs | 71 +-- src/context/integrity.rs | 79 --- src/context/merge.rs | 81 --- src/context/mod.rs | 132 ++++- src/ephemerides/mod.rs | 7 +- src/ephemerides/paths.rs | 167 +++--- src/ephemerides/translate_to_parent.rs | 96 ++-- src/ephemerides/translations.rs | 51 +- src/frames/celestial_frame.rs | 22 +- src/frames/frame.rs | 61 ++- src/frames/geodetic_frame.rs | 44 +- src/lib.rs | 8 +- src/math/interpolation/chebyshev.rs | 81 +-- src/naif/context/mod.rs | 72 --- src/naif/daf/daf.rs | 188 +++++++ src/naif/daf/mod.rs | 118 +---- src/naif/daf/recordtypes.rs | 34 +- src/naif/dafold.rs | 268 ---------- src/naif/mod.rs | 30 +- src/naif/pck/mod.rs | 17 +- src/naif/spk/datatype.rs | 89 ---- .../chebyshev.rs} | 83 +-- src/naif/spk/datatypes/hermite.rs | 135 +++++ src/naif/spk/datatypes/lagrange.rs | 129 +++++ src/naif/spk/datatypes/mod.rs | 18 + src/naif/spk/datatypes/posvel.rs | 45 ++ src/naif/spk/mod.rs | 485 +----------------- src/naif/spk/segment.rs | 192 ------- src/naif/spk/summary.rs | 123 ++++- src/{context => structure}/append.rs | 8 +- src/structure/constants/mod.rs | 4 +- src/structure/context.rs | 80 --- src/structure/dataset.rs | 46 ++ src/structure/ephemeris.rs | 6 +- .../rename.rs => structure/integrity.rs} | 14 +- src/{context => structure}/load.rs | 4 +- src/structure/lookuptable.rs | 18 +- src/structure/metadata.rs | 27 +- src/structure/mod.rs | 3 +- src/structure/orientation/mod.rs | 4 +- src/structure/records/mod.rs | 21 + .../{constants => records}/spacecraft.rs | 6 +- src/{context => structure}/save.rs | 22 +- src/structure/semver.rs | 11 + tests/astro/mod.rs | 2 +- tests/astro/orbit.rs | 14 +- tests/ephemerides/parent_translation_verif.rs | 7 +- tests/ephemerides/paths.rs | 90 +--- tests/ephemerides/translation.rs | 50 +- tests/lib.rs | 42 -- tests/naif.rs | 21 +- 55 files changed, 1466 insertions(+), 2233 deletions(-) delete mode 100644 src/context/integrity.rs delete mode 100644 src/context/merge.rs delete mode 100644 src/naif/context/mod.rs create mode 100644 src/naif/daf/daf.rs delete mode 100644 src/naif/dafold.rs delete mode 100644 src/naif/spk/datatype.rs rename src/naif/spk/{recordtypes.rs => datatypes/chebyshev.rs} (71%) create mode 100644 src/naif/spk/datatypes/hermite.rs create mode 100644 src/naif/spk/datatypes/lagrange.rs create mode 100644 src/naif/spk/datatypes/mod.rs create mode 100644 src/naif/spk/datatypes/posvel.rs delete mode 100644 src/naif/spk/segment.rs rename src/{context => structure}/append.rs (95%) delete mode 100644 src/structure/context.rs create mode 100644 src/structure/dataset.rs rename src/{context/rename.rs => structure/integrity.rs} (67%) rename src/{context => structure}/load.rs (96%) create mode 100644 src/structure/records/mod.rs rename src/structure/{constants => records}/spacecraft.rs (98%) rename src/{context => structure}/save.rs (78%) diff --git a/benches/crit_ephemerides.rs b/benches/crit_ephemerides.rs index 999a6a1e..11bad2a0 100644 --- a/benches/crit_ephemerides.rs +++ b/benches/crit_ephemerides.rs @@ -21,7 +21,7 @@ fn benchmark_single_hop_spice(time_it: TimeSeries) { } } -fn benchmark_single_hop_anise(ctx: &AniseContext, time_it: TimeSeries) { +fn benchmark_single_hop_anise(ctx: &DataSet, time_it: TimeSeries) { for epoch in time_it { black_box( ctx.translate_from_to_km_s_geometric(EARTH_J2000, LUNA_J2000, epoch) @@ -39,7 +39,7 @@ pub fn criterion_benchmark(c: &mut Criterion) { // Load ANISE data let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::from_bytes(&buf); + let ctx = DataSet::from_bytes(&buf); // Load SPICE data spice::furnsh("data/de438s.bsp"); diff --git a/benches/iai_ephemerides.rs b/benches/iai_ephemerides.rs index 82a37106..cd45f713 100644 --- a/benches/iai_ephemerides.rs +++ b/benches/iai_ephemerides.rs @@ -39,7 +39,7 @@ fn benchmark_single_hop_anise() { let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::from_bytes(&buf); + let ctx = DataSet::from_bytes(&buf); for epoch in time_it { black_box( diff --git a/src/bin/anise/main.rs b/src/bin/anise/main.rs index 135405a5..6411cf89 100644 --- a/src/bin/anise/main.rs +++ b/src/bin/anise/main.rs @@ -5,8 +5,6 @@ use std::fs::rename; use anise::cli::args::{Actions, Args}; use anise::cli::CliErrors; use anise::file_mmap; -use anise::naif::dafold::DAF; -use anise::naif::spk::SPK; use anise::prelude::*; use clap::Parser; @@ -28,89 +26,93 @@ fn main() -> Result<(), CliErrors> { check, file, } => { - let file_clone = file.clone(); - // Memory map the file - match file_mmap!(file) { - Ok(bytes) => { - let daf_file = DAF::parse(&bytes)?; - // Parse as SPK - let spk: SPK = (&daf_file).try_into()?; - // Convert to ANISE - let spk_filename = file_clone.to_str().unwrap(); - let anise_filename = spk_filename.replace(".bsp", ".anise"); - spk.to_anise(spk_filename, &anise_filename, !allow_empty, check)?; - Ok(()) - } - Err(e) => Err(e.into()), - } + todo!() + // let file_clone = file.clone(); + // // Memory map the file + // match file_mmap!(file) { + // Ok(bytes) => { + // let daf_file = DAF::parse(&bytes)?; + // // Parse as SPK + // let spk: SPK = (&daf_file).try_into()?; + // // Convert to ANISE + // let spk_filename = file_clone.to_str().unwrap(); + // let anise_filename = spk_filename.replace(".bsp", ".anise"); + // spk.to_anise(spk_filename, &anise_filename, !allow_empty, check)?; + // Ok(()) + // } + // Err(e) => Err(e.into()), + // } } Actions::Check { file } => { - let path_str = file.clone(); - match file_mmap!(file) { - Ok(bytes) => { - let context = AniseContext::try_from_bytes(&bytes)?; - context.check_integrity()?; - println!("[OK] {:?}", path_str); - Ok(()) - } - Err(e) => Err(e.into()), - } + // let path_str = file.clone(); + // match file_mmap!(file) { + // Ok(bytes) => { + // let context = DataSet::try_from_bytes(&bytes)?; + // context.check_integrity()?; + // println!("[OK] {:?}", path_str); + // Ok(()) + // } + // Err(e) => Err(e.into()), + // } + todo!() } Actions::Inspect { file } => { // Start by checking the integrity - match file_mmap!(file) { - Ok(bytes) => { - let context = AniseContext::try_from_bytes(&bytes)?; - println!("{}", context); - Ok(()) - } - Err(e) => Err(e.into()), - } + // match file_mmap!(file) { + // Ok(bytes) => { + // let context = DataSet::try_from_bytes(&bytes)?; + // println!("{}", context); + // Ok(()) + // } + // Err(e) => Err(e.into()), + // } + todo!() } Actions::Merge { files } => { - if files.len() < 2 { - Err(CliErrors::ArgumentError( - "Need at least two files to merge together".to_string(), - )) - } else { - // Open the last file in the list - let destination = files.last().unwrap().clone(); - // This is the temporary file. - let dest_str = files.last().unwrap().to_str().as_ref().unwrap().to_string(); - let tmp_dest_str = dest_str.clone() + ".tmp"; - match file_mmap!(destination) { - Ok(bytes) => { - // We can't borrow some bytes and let them drop out of scope, so we'll open the data to be merged before we open the destination. - // This means we need to re-open the destination every time but at least we don't have leaky pointers =( - for (num, this_file) in files.iter().enumerate().take(files.len() - 1) { - // Try load this file - match file_mmap!(this_file) { - Ok(these_bytes) => { - let other = AniseContext::try_from_bytes(&these_bytes)?; - let mut dest_context = AniseContext::try_from_bytes(&bytes)?; - let (num_ephem_added, num_orientation_added) = - dest_context.merge_mut(&other)?; - println!("Added {num_ephem_added} ephemeris and {num_orientation_added} orientations from {:?}", files[num]); + // if files.len() < 2 { + // Err(CliErrors::ArgumentError( + // "Need at least two files to merge together".to_string(), + // )) + // } else { + // // Open the last file in the list + // let destination = files.last().unwrap().clone(); + // // This is the temporary file. + // let dest_str = files.last().unwrap().to_str().as_ref().unwrap().to_string(); + // let tmp_dest_str = dest_str.clone() + ".tmp"; + // match file_mmap!(destination) { + // Ok(bytes) => { + // // We can't borrow some bytes and let them drop out of scope, so we'll open the data to be merged before we open the destination. + // // This means we need to re-open the destination every time but at least we don't have leaky pointers =( + // for (num, this_file) in files.iter().enumerate().take(files.len() - 1) { + // // Try load this file + // match file_mmap!(this_file) { + // Ok(these_bytes) => { + // let other = DataSet::try_from_bytes(&these_bytes)?; + // let mut dest_context = DataSet::try_from_bytes(&bytes)?; + // let (num_ephem_added, num_orientation_added) = + // dest_context.merge_mut(&other)?; + // println!("Added {num_ephem_added} ephemeris and {num_orientation_added} orientations from {:?}", files[num]); - // And finally save. - if let Err(e) = dest_context.save_as(&tmp_dest_str, false) { - return Err(e.into()); - } - } - Err(e) => return Err(e.into()), - } - } - } - Err(e) => return Err(e.into()), - } - // Now that we have written the data to the temp file - // and that the mmap is out of scope, we can move the tmp file into the old file - if let Err(e) = rename(tmp_dest_str, dest_str) { - Err(CliErrors::AniseError(AniseError::IOError(e.kind()))) - } else { - Ok(()) - } - } + // // And finally save. + // if let Err(e) = dest_context.save_as(&tmp_dest_str, false) { + // return Err(e.into()); + // } + // } + // Err(e) => return Err(e.into()), + // } + // } + // } + // Err(e) => return Err(e.into()), + // } + // // Now that we have written the data to the temp file + // // and that the mmap is out of scope, we can move the tmp file into the old file + // if let Err(e) = rename(tmp_dest_str, dest_str) { + // Err(CliErrors::AniseError(AniseError::IOError(e.kind()))) + // } else { + // Ok(()) + // } + // } + todo!() } } } diff --git a/src/cli/inspect.rs b/src/cli/inspect.rs index daeb6af7..5a43c0d6 100644 --- a/src/cli/inspect.rs +++ b/src/cli/inspect.rs @@ -2,85 +2,62 @@ use crc32fast::hash; use std::fmt::{Display, Error as FmtError, Formatter}; use tabled::{Style, Table, Tabled}; -use crate::prelude::AniseContext; +use crate::prelude::DataSet; use crate::structure::orientation::orient_data::OrientationData; -use crate::HashType; +use crate::structure::records::Record; +use crate::NaifId; /// A row is used only to display a context #[derive(Tabled)] struct Row<'a> { name: &'a str, data_kind: &'a str, - hash: HashType, + hash: NaifId, start_epoch: String, end_epoch: String, interpolation_kind: String, } -impl<'a> Display for AniseContext<'a> { +impl<'a, R: Record<'a>> Display for DataSet<'a, R> { fn fmt(&self, f: &mut Formatter) -> Result<(), FmtError> { - writeln!( - f, - "ANISE version {}.{}.{}", - self.metadata.anise_version.major, - self.metadata.anise_version.minor, - self.metadata.anise_version.patch - )?; - writeln!( - f, - "Originator: {}", - if self.metadata.originator.is_empty() { - "(not set)" - } else { - self.metadata.originator - } - )?; - writeln!(f, "Creation date: {}", self.metadata.creation_date)?; - writeln!( - f, - "Metadata URI: {}", - if self.metadata.metadata_uri.is_empty() { - "(not set)" - } else { - self.metadata.metadata_uri - } - )?; - // Build the rows of the table - let mut rows = Vec::new(); - // Add the ephemeris data - for ephem in self.ephemeris_data.iter() { - rows.push(Row { - name: ephem.name, - data_kind: "Ephemeris", - hash: hash(ephem.name.as_bytes()), - start_epoch: format!("{:?}", ephem.start_epoch()), - end_epoch: format!("{:?}", ephem.end_epoch()), - interpolation_kind: format!("{}", ephem.interpolation_kind), - }); - } - // Add the orientation data - for orientation in self.orientation_data.iter() { - rows.push(Row { - name: orientation.name, - data_kind: "Orientation", - hash: hash(orientation.name.as_bytes()), - start_epoch: format!("{:?}", orientation.start_epoch()), - end_epoch: format!("{:?}", orientation.end_epoch()), - interpolation_kind: match orientation.orientation_data { - OrientationData::PlanetaryConstant { .. } => { - "N/A (planetary constant)".to_string() - } - OrientationData::HighPrecision { - ref_epoch: _, - backward: _, - interpolation_kind, - splines: _, - } => format!("{interpolation_kind}"), - }, - }); - } - let mut tbl = Table::new(rows); - tbl.with(Style::rounded()); - write!(f, "{}", tbl) + writeln!(f, "{}", self.metadata) + + // // Build the rows of the table + // let mut rows = Vec::new(); + // // Add the ephemeris data + // for ephem in self.ephemeris_data.iter() { + // rows.push(Row { + // name: ephem.name, + // data_kind: "Ephemeris", + // hash: hash(ephem.name.as_bytes()), + // start_epoch: format!("{:?}", ephem.start_epoch()), + // end_epoch: format!("{:?}", ephem.end_epoch()), + // interpolation_kind: format!("{}", ephem.interpolation_kind), + // }); + // } + // // Add the orientation data + // for orientation in self.orientation_data.iter() { + // rows.push(Row { + // name: orientation.name, + // data_kind: "Orientation", + // hash: hash(orientation.name.as_bytes()), + // start_epoch: format!("{:?}", orientation.start_epoch()), + // end_epoch: format!("{:?}", orientation.end_epoch()), + // interpolation_kind: match orientation.orientation_data { + // OrientationData::PlanetaryConstant { .. } => { + // "N/A (planetary constant)".to_string() + // } + // OrientationData::HighPrecision { + // ref_epoch: _, + // backward: _, + // interpolation_kind, + // splines: _, + // } => format!("{interpolation_kind}"), + // }, + // }); + // } + // let mut tbl = Table::new(rows); + // tbl.with(Style::rounded()); + // write!(f, "{}", tbl) } } diff --git a/src/constants.rs b/src/constants.rs index 70d99d12..87ab0201 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -8,43 +8,26 @@ * Documentation: https://nyxspace.com/ */ -use crate::{ - errors::IntegrityErrorKind, - prelude::{AniseContext, AniseError}, - structure::constants::PlanetaryConstants, -}; - pub mod celestial_objects { - use crate::HashType; + use crate::NaifId; + + // TODO: Merge with id_to_human_name - /// Source bytes: `Solar System Barycenter` - pub const SOLAR_SYSTEM_BARYCENTER: HashType = 3135540444; - /// Source bytes: `Mercury` - pub const MERCURY: HashType = 753059387; - /// Source bytes: `Venus` - pub const VENUS: HashType = 2760147288; - /// Source bytes: `Earth-Moon Barycenter` - pub const EARTH_MOON_BARYCENTER: HashType = 46073813; - /// Source bytes: `Mars Barycenter` - pub const MARS_BARYCENTER: HashType = 1223981629; - /// Source bytes: `Jupyter Barycenter` - pub const JUPITER_BARYCENTER: HashType = 2905700239; - /// Source bytes: `Saturn Barycenter` - pub const SATURN_BARYCENTER: HashType = 2400246439; - /// Source bytes: `Uranus Barycenter` - pub const URANUS_BARYCENTER: HashType = 1449143244; - /// Source bytes: `Neptune Barycenter` - pub const NEPTUNE_BARYCENTER: HashType = 199396881; - /// Source bytes: `Pluto Barycenter` - pub const PLUTO_BARYCENTER: HashType = 1544737610; - /// Source bytes: `Sun` - pub const SUN: HashType = 1777960983; - /// Source bytes: `Luna` - pub const LUNA: HashType = 1668777413; - /// Source bytes: `Earth` - pub const EARTH: HashType = 2330221028; + pub const SOLAR_SYSTEM_BARYCENTER: NaifId = 0; + pub const MERCURY: NaifId = 1; + pub const VENUS: NaifId = 2; + pub const EARTH_MOON_BARYCENTER: NaifId = 3; + pub const MARS_BARYCENTER: NaifId = 4; + pub const JUPITER_BARYCENTER: NaifId = 5; + pub const SATURN_BARYCENTER: NaifId = 6; + pub const URANUS_BARYCENTER: NaifId = 7; + pub const NEPTUNE_BARYCENTER: NaifId = 8; + pub const PLUTO_BARYCENTER: NaifId = 9; + pub const SUN: NaifId = 10; + pub const LUNA: NaifId = 301; + pub const EARTH: NaifId = 399; - pub const fn hash_celestial_name<'a>(hash: HashType) -> Option<&'a str> { + pub const fn hash_celestial_name<'a>(hash: NaifId) -> Option<&'a str> { match hash { SOLAR_SYSTEM_BARYCENTER => Some("Solar System Barycenter"), MERCURY => Some("Mercury"), @@ -65,11 +48,10 @@ pub mod celestial_objects { } pub mod orientations { - use crate::HashType; - /// Source bytes: `J2000` - pub const J2000: HashType = 1404527632; + use crate::NaifId; + pub const J2000: NaifId = 0; - pub const fn hash_orientation_name<'a>(hash: HashType) -> Option<&'a str> { + pub const fn hash_orientation_name<'a>(hash: NaifId) -> Option<&'a str> { match hash { J2000 => Some("J2000"), _ => None, @@ -97,16 +79,3 @@ pub mod frames { pub const LUNA_J2000: Frame = Frame::from_ephem_orient(LUNA, J2000); pub const EARTH_J2000: Frame = Frame::from_ephem_orient(EARTH, J2000); } - -impl<'a> AniseContext<'a> { - pub fn planetary_constants_from_name( - &self, - name: &'a str, - ) -> Result<&PlanetaryConstants<'a>, AniseError> { - let idx = self.planetary_constant_lut.index_for_key(name)?; - match self.planetary_constant_data.get(idx.into()) { - Some(plnt) => Ok(plnt), - None => Err(AniseError::IntegrityError(IntegrityErrorKind::DataMissing)), - } - } -} diff --git a/src/context/integrity.rs b/src/context/integrity.rs deleted file mode 100644 index dbf980d6..00000000 --- a/src/context/integrity.rs +++ /dev/null @@ -1,79 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use log::error; - -use crate::{ - errors::{AniseError, IntegrityErrorKind}, - structure::context::AniseContext, -}; - -impl<'a> AniseContext<'a> { - pub fn check_integrity(&self) -> Result<(), AniseError> { - // Ensure that the lookup tables and arrays have the same number of items - if self.ephemeris_lut.hashes.data.len() != self.ephemeris_lut.indexes.data.len() - || self.ephemeris_lut.hashes.data.len() != self.ephemeris_data.len() - { - error!("[integrity] ephemeris lookup table lengths mismatch"); - return Err(AniseError::IntegrityError(IntegrityErrorKind::LookupTable)); - } - if self.orientation_lut.hashes.data.len() != self.orientation_lut.indexes.data.len() - || self.orientation_lut.hashes.data.len() != self.orientation_data.len() - { - error!("[integrity] orientation lookup table lengths mistmatch"); - return Err(AniseError::IntegrityError(IntegrityErrorKind::LookupTable)); - } - // Check ephemeris integrity - for index in self.ephemeris_lut.indexes.data.iter() { - // Check that we can access each item from the LUT - let data = self.ephemeris_data.get(*index as usize).ok_or_else(|| { - error!("[integrity] {} not in ephemeris data list", index); - AniseError::IntegrityError(IntegrityErrorKind::DataMissing) - })?; - // Check that the data is valid - data.splines.check_integrity()?; - // Check that the hashed name is in the LUT and corresponds to this index - let lut_idx = self.ephemeris_lut.index_for_key(data.name).map_err(|_| { - error!("[integrity] {} not in ephemeris lookup table", data.name); - AniseError::IntegrityError(IntegrityErrorKind::LookupTable) - })?; - if lut_idx != *index { - error!( - "[integrity] expected LUT index of {} for item {}", - lut_idx, index - ); - return Err(AniseError::IntegrityError(IntegrityErrorKind::LookupTable)); - } - } - // Check ephemeris integrity - for index in self.orientation_lut.indexes.data.iter() { - // Check that we can access each item from the LUT - let data = self.orientation_data.get(*index as usize).ok_or_else(|| { - error!("[integrity] {} not in orientation data list", index); - AniseError::IntegrityError(IntegrityErrorKind::DataMissing) - })?; - // Check that the data is valid - data.check_integrity()?; - // Check that the hashed name is in the LUT and corresponds to this index - let lut_idx = self.orientation_lut.index_for_key(data.name).map_err(|_| { - error!("[integrity] {} not in orientation lookup table", data.name); - AniseError::IntegrityError(IntegrityErrorKind::LookupTable) - })?; - if lut_idx != *index { - error!( - "[integrity] expected LUT index of {} for item {}", - lut_idx, index - ); - return Err(AniseError::IntegrityError(IntegrityErrorKind::LookupTable)); - } - } - Ok(()) - } -} diff --git a/src/context/merge.rs b/src/context/merge.rs deleted file mode 100644 index aab101a4..00000000 --- a/src/context/merge.rs +++ /dev/null @@ -1,81 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use crate::log::{info, trace}; -use crate::{errors::AniseError, structure::context::AniseContext}; - -impl<'a> AniseContext<'a> { - /// Clones this context and merges it with the other. - /// - /// # Warning - /// Cloning is an expensive operation. - pub fn merge(&self, other: &'a Self) -> Result { - let mut me = self.clone(); - me.merge_mut(other)?; - Ok(me) - } - - /// Merges another Anise context into this one. - /// - /// # Implementation details - /// + The creation date is set to the newest of the two creation dates - /// + If the originators are not the same, the other originator is appended to the current one. - /// + The metadata URI for FAIR compliance is unset in the resulting file - /// - /// # Potential errors - /// + The resulting file would have too many trajectories compared to the maximum number of trajectories - /// + Two trajectories have the same name but different contents - /// + Incompatible versions: the versions of self and other must match - pub fn merge_mut(&mut self, other: &'a Self) -> Result<(usize, usize), AniseError> { - // Check the versions match (eventually, we need to make sure that the versions are compatible) - if self.metadata.anise_version != other.metadata.anise_version { - return Err(AniseError::IncompatibleVersion { - got: other.metadata.anise_version, - exp: self.metadata.anise_version, - }); - } - // Update the creation date - if self.metadata.creation_date > other.metadata.creation_date { - self.metadata.creation_date = other.metadata.creation_date; - info!( - "[merge] new creation data set to {}", - self.metadata.creation_date - ); - } - // Append the Ephemeris data tables - let mut num_ephem_added = 0; - let mut lut_hashes = Vec::new(); - let mut lut_indexes = Vec::new(); - for new_hash in other.ephemeris_lut.hashes.data.iter() { - let data_idx = other.ephemeris_lut.index_for_hash(new_hash)?.into(); - trace!("[merge] fetching ephemeris idx={data_idx} for hash {new_hash}"); - let other_e = other.try_ephemeris_data(data_idx)?; - if self.append_ephemeris_mut(&mut lut_hashes, &mut lut_indexes, *other_e)? { - num_ephem_added += 1; - } - } - - // Append the Orientation data tables - let mut num_orientation_added = 0; - for new_hash in other.orientation_lut.hashes.data.iter() { - let data_idx = other.orientation_lut.index_for_hash(new_hash)?.into(); - trace!("[merge] fetching orientation idx={data_idx} for hash {new_hash}"); - let other_o = other.try_orientation_data(data_idx)?; - if self.append_orientation_mut(other_o.clone())? { - num_orientation_added += 1; - } - } - - // And set the lookup data. - // self.ephemeris_lut.hashes.set_data(&mut lut_hashes); - - Ok((num_ephem_added, num_orientation_added)) - } -} diff --git a/src/context/mod.rs b/src/context/mod.rs index 34d0ada8..71eb372d 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -8,9 +8,129 @@ * Documentation: https://nyxspace.com/ */ -pub mod append; -pub mod integrity; -pub mod load; -pub mod merge; -pub mod rename; -pub mod save; +use hifitime::Epoch; + +use crate::naif::spk::summary::SPKSummaryRecord; +use crate::naif::{BPC, SPK}; + +use crate::errors::AniseError; + +pub const MAX_LOADED_FILES: usize = 32; + +/// A SPICE context contains all of the loaded SPICE data. +/// +/// # Limitations +/// You may only load up to 32 SPICE files of each kind. +/// The stack space does _not_ depend on how much data is loaded at any given time. +#[derive(Clone, Default)] +pub struct Context<'a> { + // TODO: Add ANISE context here too. + pub spk_data: [Option<&'a SPK<'a>>; MAX_LOADED_FILES], + pub bpc_data: [Option<&'a BPC<'a>>; MAX_LOADED_FILES], +} + +impl<'a: 'b, 'b> Context<'a> { + pub fn from_spk(spk: &'a SPK<'a>) -> Result, AniseError> { + let me = Self::default(); + me.load_spk(spk) + } + + /// Loads a new SPK file into a new context. + /// This new context is needed to satisfy the unloading of files. In fact, to unload a file, simply let the newly loaded context drop out of scope and Rust will clean it up. + pub fn load_spk(&self, spk: &'b SPK<'b>) -> Result, AniseError> { + // This is just a bunch of pointers so it doesn't use much memory. + let mut me = self.clone(); + // Parse as SPK and place into the SPK list if there is room + let mut data_idx = MAX_LOADED_FILES; + for (idx, item) in self.spk_data.iter().enumerate() { + if item.is_none() { + data_idx = idx; + break; + } + } + if data_idx == MAX_LOADED_FILES { + return Err(AniseError::StructureIsFull); + } + me.spk_data[data_idx] = Some(spk); + Ok(me) + } + + /// Loads a Binary Planetary Constants kernel. + pub fn load_bpc(&self, bpc: &'b BPC<'a>) -> Result, AniseError> { + // This is just a bunch of pointers so it doesn't use much memory. + let mut me = self.clone(); + // Parse as SPK and place into the SPK list if there is room + let mut data_idx = MAX_LOADED_FILES; + for (idx, item) in self.bpc_data.iter().enumerate() { + if item.is_none() { + data_idx = idx; + break; + } + } + if data_idx == MAX_LOADED_FILES { + return Err(AniseError::StructureIsFull); + } + me.bpc_data[data_idx] = Some(bpc); + Ok(me) + } + + pub fn num_loaded_spk(&self) -> usize { + let mut count = 0; + for maybe in self.spk_data { + if maybe.is_none() { + break; + } else { + count += 1; + } + } + + count + } + + /// Returns the summary given the name of the summary record if that summary has data defined at the requested epoch and the SPK where this name was found to be valid at that epoch. + pub fn spk_summary_from_name_at_epoch( + &self, + name: &str, + epoch: Epoch, + ) -> Result<(&SPKSummaryRecord, usize, usize), AniseError> { + for (spkno, maybe_spk) in self + .spk_data + .iter() + .rev() + .enumerate() + .take(self.num_loaded_spk()) + { + let spk = maybe_spk.unwrap(); + if let Ok((summary, idx_in_spk)) = spk.summary_from_name_at_epoch(name, epoch) { + return Ok((summary, spkno, idx_in_spk)); + } + } + + // If we're reached this point, there is no relevant summary at this epoch. + Err(AniseError::MissingInterpolationData(epoch)) + } + + /// Returns the summary given the name of the summary record if that summary has data defined at the requested epoch + pub fn spk_summary_from_id_at_epoch( + &self, + id: i32, + epoch: Epoch, + ) -> Result<(&SPKSummaryRecord, usize, usize), AniseError> { + // TODO: Consider a return type here + for (spkno, maybe_spk) in self + .spk_data + .iter() + .rev() + .enumerate() + .take(self.num_loaded_spk()) + { + let spk = maybe_spk.unwrap(); + if let Ok((summary, idx_in_spk)) = spk.summary_from_id_at_epoch(id, epoch) { + return Ok((summary, spkno, idx_in_spk)); + } + } + + // If we're reached this point, there is no relevant summary at this epoch. + Err(AniseError::MissingInterpolationData(epoch)) + } +} diff --git a/src/ephemerides/mod.rs b/src/ephemerides/mod.rs index c1ab8dc3..05a19047 100644 --- a/src/ephemerides/mod.rs +++ b/src/ephemerides/mod.rs @@ -8,13 +8,13 @@ * Documentation: https://nyxspace.com/ */ -use hifitime::{Epoch, TimeUnits}; +use hifitime::Epoch; use crate::structure::{ephemeris::Ephemeris, spline::Evenness}; pub mod paths; -pub mod translations; pub mod translate_to_parent; +pub mod translations; impl<'a> Ephemeris<'a> { /// Returns the first epoch in the data, which will be the chronological "end" epoch if the ephemeris is generated backward @@ -27,7 +27,8 @@ impl<'a> Ephemeris<'a> { match self.splines.metadata.evenness { Evenness::Even { duration_ns } => { // Grab the number of splines - self.ref_epoch + ((self.splines.len() as f64) * (duration_ns as i64).nanoseconds()) + // self.ref_epoch + ((self.splines.len() as f64) * (duration_ns as i64).nanoseconds()) + todo!() } Evenness::Uneven { indexes: _ } => { todo!() diff --git a/src/ephemerides/paths.rs b/src/ephemerides/paths.rs index de3edbaf..2e12a6b6 100644 --- a/src/ephemerides/paths.rs +++ b/src/ephemerides/paths.rs @@ -8,119 +8,103 @@ * Documentation: https://nyxspace.com/ */ -use log::{error, trace}; +use hifitime::Epoch; +use log::error; -use crate::constants::orientations::J2000; +use crate::context::Context; use crate::errors::InternalErrorKind; use crate::structure::orientation::Orientation; -use crate::HashType; +use crate::NaifId; use crate::{ errors::{AniseError, IntegrityErrorKind}, frames::Frame, - structure::{context::AniseContext, ephemeris::Ephemeris}, + structure::ephemeris::Ephemeris, }; /// **Limitation:** no translation or rotation may have more than 8 nodes. pub const MAX_TREE_DEPTH: usize = 8; -impl<'a> AniseContext<'a> { - /// Goes through each ephemeris data and make sure that the root of each is the same. - /// A context is only valid if the data is a tree with a single top level root. - pub fn try_find_context_root(&self) -> Result { - let mut common_parent_hash = 0; - for e in self.ephemeris_data.iter() { - let mut child = e; - if common_parent_hash == 0 { - common_parent_hash = child.parent_ephemeris_hash; - } - - for _ in 0..MAX_TREE_DEPTH { - match self.try_find_parent(child) { - Ok(e) => child = e, - Err(AniseError::ItemNotFound) => { - // We've found the end of this branch, so let's store the parent of the child as the top root if the top root is not set - if common_parent_hash == 0 { - common_parent_hash = child.parent_ephemeris_hash; - } else if common_parent_hash != child.parent_ephemeris_hash { - // Integrity error! - error!("at least one ephemeris hierarchy takes root in hash {} but {}'s parent is {}", common_parent_hash, child.name, child.parent_ephemeris_hash); - return Err(AniseError::IntegrityError( - IntegrityErrorKind::DisjointRoots { - from_frame: Frame::from_ephem_orient(common_parent_hash, J2000), - to_frame: Frame::from_ephem_orient( - child.parent_ephemeris_hash, - J2000, - ), - }, - )); - } else { - // We're found the root and it matches the previous one, so we can stop searching. - return Ok(common_parent_hash); - // break; - } - } - Err(err) => { - error!("{err} occurred when it should not have"); - return Err(AniseError::InternalError(InternalErrorKind::Generic)); +impl<'a> Context<'a> { + /// Returns the center of all of the loaded ephemerides, typically this should be the Solar System Barycenter. + /// + /// # Algorithm + /// + /// 1. For each loaded SPK, iterated in reverse order (to mimic SPICE behavior) + /// 2. For each summary record in each SPK, follow the ephemeris branch all the way up until the end of this SPK or until the SSB. + pub fn try_find_context_center(&self) -> Result { + if self.num_loaded_spk() == 0 { + // TODO: Change to another error + return Err(AniseError::NoInterpolationData); + } + // The common center is the absolute minimum of all centers due to the NAIF numbering. + let mut common_center = i32::MAX; + + for maybe_spk in self.spk_data.iter().rev().take(self.num_loaded_spk()) { + let spk = maybe_spk.unwrap(); + + for summary in spk.data_summaries { + // This summary exists, so we need to follow the branch of centers up the tree. + let mut this_common_center = i32::MAX; + if summary.target_id.abs() < common_center.abs() { + common_center = summary.target_id; + if common_center == 0 { + // We're at the SSB, there is nothing higher up + return Ok(common_center); } - }; + } } } - Err(AniseError::MaxTreeDepth) - } - - /// Try to find the parent ephemeris data of the provided ephemeris. - /// - /// Will return an [AniseError] if the parent does not have ephemeris data in this context. - pub fn try_find_parent(&self, child: &'a Ephemeris) -> Result<&'a Ephemeris, AniseError> { - let idx = self - .ephemeris_lut - .index_for_hash(&child.parent_ephemeris_hash)?; - self.try_ephemeris_data(idx.into()) + Ok(common_center) } /// Try to return the ephemeris for the provided index, or returns an error. pub fn try_ephemeris_data(&self, idx: usize) -> Result<&'a Ephemeris, AniseError> { - self.ephemeris_data - .get(idx) - .ok_or(AniseError::IntegrityError(IntegrityErrorKind::LookupTable)) + todo!() } /// Try to return the orientation for the provided index, or returns an error. pub fn try_orientation_data(&self, idx: usize) -> Result<&'a Orientation, AniseError> { - self.orientation_data - .get(idx) - .ok_or(AniseError::IntegrityError(IntegrityErrorKind::LookupTable)) + todo!() } /// Try to construct the path from the source frame all the way to the root ephemeris of this context. pub fn ephemeris_path_to_root( &self, source: &Frame, - ) -> Result<(usize, [Option; MAX_TREE_DEPTH]), AniseError> { + epoch: Epoch, + ) -> Result<(usize, [Option; MAX_TREE_DEPTH]), AniseError> { // Build a tree, set a fixed depth to avoid allocations let mut of_path = [None; MAX_TREE_DEPTH]; let mut of_path_len = 0; - let mut prev_ephem_hash = source.ephemeris_hash; - - for _ in 0..MAX_TREE_DEPTH { - let idx = self.ephemeris_lut.index_for_hash(&prev_ephem_hash)?; - let parent_ephem = self.try_ephemeris_data(idx.into())?; - let parent_hash = parent_ephem.parent_ephemeris_hash; - of_path[of_path_len] = Some(parent_hash); - of_path_len += 1; - - if parent_hash == self.try_find_context_root()? { - return Ok((of_path_len, of_path)); - } else if let Err(e) = self.ephemeris_lut.index_for_hash(&parent_hash) { - if e == AniseError::ItemNotFound { - // We have reached the root of this ephemeris and it has no parent. - trace!("{parent_hash} has no parent in this context"); - return Ok((of_path_len, of_path)); + let mut prev_ephem_hash = source.ephemeris_id; + + let common_center = self.try_find_context_center()?; + + let summary = self + .spk_summary_from_id_at_epoch(source.ephemeris_id, epoch)? + .0; + + let mut target_id = summary.target_id; + for idx in 0..MAX_TREE_DEPTH { + match self.spk_summary_from_id_at_epoch(target_id, epoch) { + Ok((summary, _, _)) => { + target_id = summary.target_id; + if target_id == common_center { + // We're found the path! + + return Ok((of_path_len, of_path)); + } else { + of_path[of_path_len] = Some(target_id); + of_path_len += 1; + } + } + Err(e) => { + error!("I don't think this should happen: {e}"); + return Err(AniseError::InternalError(InternalErrorKind::Generic)); } } - prev_ephem_hash = parent_hash; } + Err(AniseError::MaxTreeDepth) } @@ -156,16 +140,17 @@ impl<'a> AniseContext<'a> { &self, from_frame: Frame, to_frame: Frame, - ) -> Result<(usize, [Option; MAX_TREE_DEPTH], HashType), AniseError> { + epoch: Epoch, + ) -> Result<(usize, [Option; MAX_TREE_DEPTH], NaifId), AniseError> { // TODO: Consider returning a structure that has explicit fields -- see how I use it first if from_frame == to_frame { // Both frames match, return this frame's hash (i.e. no need to go higher up). - return Ok((0, [None; MAX_TREE_DEPTH], from_frame.ephemeris_hash)); + return Ok((0, [None; MAX_TREE_DEPTH], from_frame.ephemeris_id)); } // Grab the paths - let (from_len, from_path) = self.ephemeris_path_to_root(&from_frame)?; - let (to_len, to_path) = self.ephemeris_path_to_root(&to_frame)?; + let (from_len, from_path) = self.ephemeris_path_to_root(&from_frame, epoch)?; + let (to_len, to_path) = self.ephemeris_path_to_root(&to_frame, epoch)?; // Now that we have the paths, we can find the matching origin. @@ -180,10 +165,10 @@ impl<'a> AniseContext<'a> { )) } else if from_len != 0 && to_len == 0 { // One has an empty path but not the other, so the root is at the empty path - Ok((from_len, from_path, to_frame.ephemeris_hash)) + Ok((from_len, from_path, to_frame.ephemeris_id)) } else if to_len != 0 && from_len == 0 { // One has an empty path but not the other, so the root is at the empty path - Ok((to_len, to_path, from_frame.ephemeris_hash)) + Ok((to_len, to_path, from_frame.ephemeris_id)) } else { // Either are at the ephemeris root, so we'll step through the paths until we find the common root. let mut common_path = [None; MAX_TREE_DEPTH]; @@ -191,18 +176,18 @@ impl<'a> AniseContext<'a> { for to_obj in to_path.iter().take(to_len) { // Check the trivial case of the common node being one of the input frames - if to_obj.unwrap() == from_frame.ephemeris_hash { - common_path[0] = Some(from_frame.ephemeris_hash); + if to_obj.unwrap() == from_frame.ephemeris_id { + common_path[0] = Some(from_frame.ephemeris_id); items = 1; - return Ok((items, common_path, from_frame.ephemeris_hash)); + return Ok((items, common_path, from_frame.ephemeris_id)); } for from_obj in from_path.iter().take(from_len) { // Check the trivial case of the common node being one of the input frames - if items == 0 && from_obj.unwrap() == to_frame.ephemeris_hash { - common_path[0] = Some(to_frame.ephemeris_hash); + if items == 0 && from_obj.unwrap() == to_frame.ephemeris_id { + common_path[0] = Some(to_frame.ephemeris_id); items = 1; - return Ok((items, common_path, to_frame.ephemeris_hash)); + return Ok((items, common_path, to_frame.ephemeris_id)); } if from_obj == to_obj { diff --git a/src/ephemerides/translate_to_parent.rs b/src/ephemerides/translate_to_parent.rs index 6b70c798..b516386e 100644 --- a/src/ephemerides/translate_to_parent.rs +++ b/src/ephemerides/translate_to_parent.rs @@ -11,15 +11,16 @@ use log::trace; use crate::astro::Aberration; +use crate::context::Context; +use crate::errors::IntegrityErrorKind; use crate::hifitime::Epoch; -use crate::math::interpolation::chebyshev::cheby_eval; use crate::math::Vector3; -use crate::structure::common::InterpolationKind; -use crate::structure::spline::Field; +use crate::naif::daf::NAIFDataSet; +use crate::naif::spk::datatypes::{HermiteSetType13, LagrangeSetType9, Type2ChebyshevSet}; use crate::structure::units::*; -use crate::{errors::AniseError, prelude::Frame, structure::context::AniseContext}; +use crate::{errors::AniseError, prelude::Frame}; -impl<'a> AniseContext<'a> { +impl<'a> Context<'a> { /// Returns the position vector and velocity vector of the `source` with respect to its parent in the ephemeris at the provided epoch, /// and in the provided distance and time units. /// @@ -41,75 +42,48 @@ impl<'a> AniseContext<'a> { ) -> Result<(Vector3, Vector3, Vector3, Frame), AniseError> { // TODO: Create a CartesianState struct which can be "upgraded" to an Orbit if the frame is of the correct type? // I guess this is what the `Orbit` struct in Nyx does. - // First, let's get a reference to the ephemeris given the frame. - // Grab the index of the data from the frame's ephemeris hash. - let idx = self.ephemeris_lut.index_for_hash(&source.ephemeris_hash)?; + // First, let's find the SPK summary for this frame. + let (summary, spkno, idx_in_spk) = + self.spk_summary_from_id_at_epoch(source.ephemeris_id, epoch)?; - // And the pointer to the data - let ephem = self.try_ephemeris_data(idx.into())?; - - let new_frame = source.with_ephem(ephem.parent_ephemeris_hash); + let new_frame = source.with_ephem(summary.center_id); trace!("query {source} wrt to {new_frame} @ {epoch:E}"); + let spk_data = self.spk_data[spkno] + .ok_or(AniseError::IntegrityError(IntegrityErrorKind::DataMissing))?; + // Perform a translation with position and velocity; - let mut pos = Vector3::zeros(); - let mut vel = Vector3::zeros(); let mut acc = Vector3::zeros(); - // Grab the pointer to the splines. - let splines = &ephem.splines; - match ephem.interpolation_kind { - InterpolationKind::ChebyshevSeries => { - let start_epoch = ephem.start_epoch(); - let end_epoch = ephem.end_epoch(); - - if epoch < start_epoch || epoch > end_epoch { - return Err(AniseError::MissingInterpolationData(epoch)); - } - - if !splines.metadata.state_kind.includes_position() { - return Err(AniseError::NoInterpolationData); - } - - // Compute the position and its derivative - for (cno, field) in [Field::X, Field::Y, Field::Z].iter().enumerate() { - let (val, deriv) = cheby_eval(epoch, start_epoch, splines, *field)?; - pos[cno] = val; - vel[cno] = deriv; - } - - // If relevant, compute the velocity from the coefficients directly by overwriting the derivative we just computed. - if splines.metadata.state_kind.includes_velocity() { - for (cno, field) in [Field::Vx, Field::Vy, Field::Vz].iter().enumerate() { - let (val, deriv) = cheby_eval(epoch, start_epoch, splines, *field)?; - vel[cno] = val; - acc[cno] = deriv; - } - - // Similarly, if there is acceleration, we should compute that too. - if splines.metadata.state_kind.includes_acceleration() { - for (cno, field) in [Field::Ax, Field::Ay, Field::Az].iter().enumerate() { - let (val, _) = cheby_eval(epoch, start_epoch, splines, *field)?; - acc[cno] = val; - } - } - } + // Now let's simply evaluate the data + let (mut pos_km, mut vel_km_s) = match summary.data_type_i { + 2 => { + // Type 2 Chebyshev + let data = spk_data.nth_data::(idx_in_spk)?; + data.evaluate(epoch)? + } + 9 => { + // Type 9: Lagrange Interpolation --- Unequal Time Steps + let data = spk_data.nth_data::(idx_in_spk)?; + data.evaluate(epoch)? + } + 13 => { + // Type 13: Hermite Interpolation --- Unequal Time Steps + let data = spk_data.nth_data::(idx_in_spk)?; + data.evaluate(epoch)? } - InterpolationKind::HermiteSeries => todo!(), - InterpolationKind::LagrangeSeries => todo!(), - InterpolationKind::Polynomial => todo!(), - InterpolationKind::Trigonometric => todo!(), - } + _ => todo!("{} is not yet supported", summary.data_type_i), + }; // Convert the units based on the storage units. - let dist_unit_factor = ephem.length_unit.from_meters() * distance_unit.to_meters(); - let time_unit_factor = ephem.time_unit.from_seconds() * time_unit.in_seconds(); + let dist_unit_factor = LengthUnit::Kilometer.from_meters() * distance_unit.to_meters(); + let time_unit_factor = TimeUnit::Second.from_seconds() * time_unit.in_seconds(); Ok(( - pos * dist_unit_factor, - vel * dist_unit_factor / time_unit_factor, + pos_km * dist_unit_factor, + vel_km_s * dist_unit_factor / time_unit_factor, acc * dist_unit_factor / time_unit_factor.powi(2), new_frame, )) diff --git a/src/ephemerides/translations.rs b/src/ephemerides/translations.rs index 42ab2301..d4ae94ed 100644 --- a/src/ephemerides/translations.rs +++ b/src/ephemerides/translations.rs @@ -8,9 +8,8 @@ * Documentation: https://nyxspace.com/ */ -use log::error; - use crate::astro::Aberration; +use crate::context::Context; use crate::hifitime::Epoch; use crate::math::cartesian::CartesianState; use crate::math::Vector3; @@ -18,13 +17,12 @@ use crate::structure::units::*; use crate::{ errors::AniseError, prelude::{Frame, FrameTrait}, - structure::context::AniseContext, }; /// **Limitation:** no translation or rotation may have more than 8 nodes. pub const MAX_TREE_DEPTH: usize = 8; -impl<'a> AniseContext<'a> { +impl<'a> Context<'a> { /// Returns the position vector, velocity vector, and acceleration vector needed to translate the `from_frame` to the `to_frame`. /// /// **WARNING:** This function only performs the translation and no rotation whatsoever. Use the `transform_from_to` function instead to include rotations. @@ -44,7 +42,8 @@ impl<'a> AniseContext<'a> { return Ok(CartesianState::zero(from_frame)); } - let (node_count, path, common_node) = self.common_ephemeris_path(to_frame, from_frame)?; + let (node_count, path, common_node) = + self.common_ephemeris_path(from_frame, to_frame, epoch)?; // The fwrd variables are the states from the `from frame` to the common node let (mut pos_fwrd, mut vel_fwrd, mut acc_fwrd, mut frame_fwrd) = @@ -178,48 +177,6 @@ impl<'a> AniseContext<'a> { ) } - /// Try to construct the path from the source frame all the way to the root ephemeris of this context. - pub fn translate_to_root( - &self, - source: Frame, - epoch: Epoch, - ab_corr: Aberration, - distance_unit: LengthUnit, - time_unit: TimeUnit, - ) -> Result<(Vector3, Vector3, Vector3), AniseError> { - // Build a tree, set a fixed depth to avoid allocations - let mut prev_ephem_hash = source.ephemeris_hash; - - let mut pos = Vector3::zeros(); - let mut vel = Vector3::zeros(); - let mut acc = Vector3::zeros(); - - for _ in 0..MAX_TREE_DEPTH { - let idx = self.ephemeris_lut.index_for_hash(&prev_ephem_hash)?; - let parent_ephem = self.try_ephemeris_data(idx.into())?; - let parent_hash = parent_ephem.parent_ephemeris_hash; - - let (this_pos, this_vel, this_accel, _) = - self.translate_to_parent(source, epoch, ab_corr, distance_unit, time_unit)?; - - pos += this_pos; - vel += this_vel; - acc += this_accel; - - if parent_hash == self.try_find_context_root()? { - return Ok((pos, vel, acc)); - } else if let Err(e) = self.ephemeris_lut.index_for_hash(&parent_hash) { - if e == AniseError::ItemNotFound { - // We have reached the root of this ephemeris and it has no parent. - error!("{parent_hash} has no parent in this context"); - return Ok((pos, vel, acc)); - } - } - prev_ephem_hash = parent_hash; - } - Err(AniseError::MaxTreeDepth) - } - /// Translates a state with its origin (`to_frame`) and given its units (distance_unit, time_unit), returns that state with respect to the requested frame /// /// **WARNING:** This function only performs the translation and no rotation _whatsoever_. Use the `transform_state_to` function instead to include rotations. diff --git a/src/frames/celestial_frame.rs b/src/frames/celestial_frame.rs index 74b02a27..9643965c 100644 --- a/src/frames/celestial_frame.rs +++ b/src/frames/celestial_frame.rs @@ -8,10 +8,7 @@ * Documentation: https://nyxspace.com/ */ -use crate::{ - prelude::{AniseContext, AniseError}, - HashType, -}; +use crate::{context::Context, prelude::AniseError, NaifId}; use super::{Frame, FrameTrait}; use core::fmt::{Display, Formatter}; @@ -30,11 +27,11 @@ pub struct CelestialFrame { } impl FrameTrait for CelestialFrame { - fn ephemeris_hash(&self) -> HashType { + fn ephemeris_hash(&self) -> NaifId { self.frame.ephemeris_hash() } - fn orientation_hash(&self) -> HashType { + fn orientation_hash(&self) -> NaifId { self.frame.orientation_hash() } } @@ -51,7 +48,7 @@ impl Display for CelestialFrame { } } -impl<'a> AniseContext<'a> { +impl<'a> Context<'a> { /// Tries to find the celestial frame data given the ephemeris center name and the orientation name. /// # Note /// The ephemeris name MUST match the name of the planetary constant. @@ -71,11 +68,12 @@ impl<'a> AniseContext<'a> { orientation_name: &'a str, planetary_constants_name: &'a str, ) -> Result { - let constants = self.planetary_constants_from_name(planetary_constants_name)?; + todo!() + // let constants = self.planetary_constants_from_name(planetary_constants_name)?; - Ok(CelestialFrame { - frame: Frame::from_ephemeris_orientation_names(ephemeris_name, orientation_name), - mu_km3_s2: constants.mu_km3_s2, - }) + // Ok(CelestialFrame { + // frame: Frame::from_ephemeris_orientation_names(ephemeris_name, orientation_name), + // mu_km3_s2: constants.mu_km3_s2, + // }) } } diff --git a/src/frames/frame.rs b/src/frames/frame.rs index 3f93f8b8..1126f01c 100644 --- a/src/frames/frame.rs +++ b/src/frames/frame.rs @@ -10,24 +10,22 @@ use core::fmt::{Debug, Display, Formatter}; -use crc32fast::hash; - use crate::constants::celestial_objects::hash_celestial_name; use crate::constants::orientations::{hash_orientation_name, J2000}; -use crate::HashType; +use crate::NaifId; /// Defines a Frame kind, allows for compile time checking of operations. pub trait FrameTrait: Copy + Debug + PartialEq { /// Returns the ephemeris hash of this frame. - fn ephemeris_hash(&self) -> HashType; + fn ephemeris_hash(&self) -> NaifId; /// Returns the orientation hash of this frame. - fn orientation_hash(&self) -> HashType; + fn orientation_hash(&self) -> NaifId; /// Returns true if the ephemeris origin is equal to the provided hash - fn ephem_origin_hash_match(&self, other_hash: HashType) -> bool { + fn ephem_origin_hash_match(&self, other_hash: NaifId) -> bool { self.ephemeris_hash() == other_hash } /// Returns true if the orientation origin is equal to the provided hash - fn orient_origin_hash_match(&self, other_hash: HashType) -> bool { + fn orient_origin_hash_match(&self, other_hash: NaifId) -> bool { self.orientation_hash() == other_hash } /// Returns true if the ephemeris origin is equal to the provided frame @@ -43,26 +41,26 @@ pub trait FrameTrait: Copy + Debug + PartialEq { /// A Frame uniquely defined by its ephemeris center and orientation. Refer to FrameDetail for frames combined with parameters. #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub struct Frame { - pub ephemeris_hash: HashType, - pub orientation_hash: HashType, + pub ephemeris_id: NaifId, + pub orientation_id: NaifId, } impl FrameTrait for Frame { - fn ephemeris_hash(&self) -> HashType { - self.ephemeris_hash + fn ephemeris_hash(&self) -> NaifId { + self.ephemeris_id } - fn orientation_hash(&self) -> HashType { - self.orientation_hash + fn orientation_hash(&self) -> NaifId { + self.orientation_id } } impl Frame { /// Constructs a new frame given its ephemeris and orientations hashes. - pub const fn from_ephem_orient(ephemeris_hash: HashType, orientation_hash: HashType) -> Self { + pub const fn from_ephem_orient(ephemeris_hash: NaifId, orientation_hash: NaifId) -> Self { Self { - ephemeris_hash, - orientation_hash, + ephemeris_id: ephemeris_hash, + orientation_id: orientation_hash, } } @@ -70,43 +68,44 @@ impl Frame { ephemeris_name: &'a str, orientation_name: &'a str, ) -> Self { - Self { - ephemeris_hash: hash(ephemeris_name.as_bytes()), - orientation_hash: hash(orientation_name.as_bytes()), - } + todo!() + // Self { + // ephemeris_id: hash(ephemeris_name.as_bytes()), + // orientation_id: hash(orientation_name.as_bytes()), + // } } - pub const fn from_ephem_j2000(ephemeris_hash: HashType) -> Self { + pub const fn from_ephem_j2000(ephemeris_hash: NaifId) -> Self { Self::from_ephem_orient(ephemeris_hash, J2000) } /// Returns a copy of this Frame whose ephemeris hash is set to the provided hash - pub const fn with_ephem(&self, new_ephem_hash: HashType) -> Self { + pub const fn with_ephem(&self, new_ephem_hash: NaifId) -> Self { Self { - ephemeris_hash: new_ephem_hash, - orientation_hash: self.orientation_hash, + ephemeris_id: new_ephem_hash, + orientation_id: self.orientation_id, } } /// Returns a copy of this Frame whose orientation hash is set to the provided hash - pub const fn with_orient(&self, new_orient_hash: HashType) -> Self { + pub const fn with_orient(&self, new_orient_hash: NaifId) -> Self { Self { - ephemeris_hash: self.ephemeris_hash, - orientation_hash: new_orient_hash, + ephemeris_id: self.ephemeris_id, + orientation_id: new_orient_hash, } } } impl Display for Frame { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { - let body_name = match hash_celestial_name(self.ephemeris_hash) { + let body_name = match hash_celestial_name(self.ephemeris_id) { Some(name) => name.to_string(), - None => format!("body {}", self.ephemeris_hash), + None => format!("body {}", self.ephemeris_id), }; - let orientation_name = match hash_orientation_name(self.orientation_hash) { + let orientation_name = match hash_orientation_name(self.orientation_id) { Some(name) => name.to_string(), - None => format!("orientation {}", self.orientation_hash), + None => format!("orientation {}", self.orientation_id), }; write!(f, "{body_name} {orientation_name}") diff --git a/src/frames/geodetic_frame.rs b/src/frames/geodetic_frame.rs index 89e62cda..af401b23 100644 --- a/src/frames/geodetic_frame.rs +++ b/src/frames/geodetic_frame.rs @@ -10,9 +10,10 @@ use super::{celestial_frame::CelestialFrame, CelestialFrameTrait, Frame, FrameTrait}; use crate::{ - prelude::{AniseContext, AniseError}, + context::Context, + prelude::{AniseError, DataSet}, structure::constants::ellipsoid::Ellipsoid, - HashType, + NaifId, }; use core::fmt::{Display, Formatter}; use log::error; @@ -38,11 +39,11 @@ pub struct GeodeticFrame { } impl FrameTrait for GeodeticFrame { - fn ephemeris_hash(&self) -> HashType { + fn ephemeris_hash(&self) -> NaifId { self.celestial_frame.ephemeris_hash() } - fn orientation_hash(&self) -> HashType { + fn orientation_hash(&self) -> NaifId { self.celestial_frame.orientation_hash() } } @@ -88,7 +89,7 @@ impl Into for GeodeticFrame { } } -impl<'a> AniseContext<'a> { +impl<'a> Context<'a> { /// Tries to find the geodetic frame data given the ephemeris center name and the orientation name. /// # Note /// The ephemeris name MUST match the name of the planetary constant. @@ -108,21 +109,22 @@ impl<'a> AniseContext<'a> { orientation_name: &'a str, planetary_constants_name: &'a str, ) -> Result { - let constants = self.planetary_constants_from_name(planetary_constants_name)?; - - if constants.shape.is_none() { - error!("no shape data associated with {planetary_constants_name}"); - return Err(AniseError::ParameterNotSpecified); - } - - // TODO: Figure out how to specify / where to find the angular velocity. And maybe it shouldn't exist! - Ok(GeodeticFrame { - celestial_frame: CelestialFrame { - frame: Frame::from_ephemeris_orientation_names(ephemeris_name, orientation_name), - mu_km3_s2: constants.mu_km3_s2, - }, - shape: constants.shape.unwrap(), - angular_velocity_deg: 0.0, - }) + todo!() + // let constants = self.planetary_constants_from_name(planetary_constants_name)?; + + // if constants.shape.is_none() { + // error!("no shape data associated with {planetary_constants_name}"); + // return Err(AniseError::ParameterNotSpecified); + // } + + // // TODO: Figure out how to specify / where to find the angular velocity. And maybe it shouldn't exist! + // Ok(GeodeticFrame { + // celestial_frame: CelestialFrame { + // frame: Frame::from_ephemeris_orientation_names(ephemeris_name, orientation_name), + // mu_km3_s2: constants.mu_km3_s2, + // }, + // shape: constants.shape.unwrap(), + // angular_velocity_deg: 0.0, + // }) } } diff --git a/src/lib.rs b/src/lib.rs index a9078334..4cdafd22 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,8 +22,6 @@ pub mod errors; pub mod frames; pub mod math; pub mod naif; -pub mod orientations; -pub mod spline; pub mod structure; /// Re-export of hifitime @@ -33,9 +31,11 @@ pub mod time { pub mod prelude { pub use crate::astro::Aberration; + pub use crate::context::Context; pub use crate::errors::AniseError; pub use crate::frames::*; - pub use crate::structure::context::AniseContext; + pub use crate::naif::{BPC, SPK}; + pub use crate::structure::dataset::DataSet; pub use crate::structure::units::*; pub use crate::time::*; pub use std::fs::File; @@ -45,7 +45,7 @@ pub mod prelude { pub(crate) const DBL_SIZE: usize = 8; /// Defines the hash used to identify parents. -pub(crate) type HashType = u32; +pub(crate) type NaifId = i32; /// file_mmap allows reading a file without memory allocation #[macro_export] diff --git a/src/math/interpolation/chebyshev.rs b/src/math/interpolation/chebyshev.rs index 9d8356d8..5a2c1b39 100644 --- a/src/math/interpolation/chebyshev.rs +++ b/src/math/interpolation/chebyshev.rs @@ -8,68 +8,43 @@ * Documentation: https://nyxspace.com/ */ -use hifitime::{Epoch, Unit as DurationUnit}; +use hifitime::Epoch; -use crate::{ - structure::{ - spline::Evenness, - spline::{Field, Splines}, - }, - prelude::AniseError, -}; +use crate::prelude::AniseError; /// Attempts to evaluate a Chebyshev polynomial given the coefficients, returning the value and its derivative /// /// # Notes /// 1. At this point, the splines are expected to be in Chebyshev format and no verification is done. pub(crate) fn cheby_eval( + relative_normalized_time_s: f64, + spline_data: &[f64], + spline_radius_s: f64, eval_epoch: Epoch, - start_epoch: Epoch, - splines: &Splines, - field: Field, + degree: usize, ) -> Result<(f64, f64), AniseError> { - match splines.metadata.evenness { - Evenness::Even { duration_ns } => { - let window_duration_s: f64 = - ((duration_ns as f64) * DurationUnit::Nanosecond).to_seconds(); - - let radius_s = window_duration_s / 2.0; - let ephem_start_delta = eval_epoch - start_epoch; - let ephem_start_delta_s = ephem_start_delta.to_seconds(); - - if ephem_start_delta_s < 0.0 { - return Err(AniseError::MissingInterpolationData(eval_epoch)); - } - - // In seconds - let eval_epoch_et_s = eval_epoch.to_et_seconds(); - let spline_idx_f = (ephem_start_delta_s / window_duration_s).round(); - - let midpoint = splines.fetch(spline_idx_f as usize, 0, Field::MidPoint)?; - - let normalized_t = (eval_epoch_et_s - midpoint) / radius_s; - - // Workspace arrays - let mut w = [0.0_f64; 3]; - let mut dw = [0.0_f64; 3]; - - for j in (2..=splines.metadata.state_kind.degree().into()).rev() { - w[2] = w[1]; - w[1] = w[0]; - w[0] = (splines.fetch(spline_idx_f as usize, j - 1, field)?) - + (2.0 * normalized_t * w[1] - w[2]); - - dw[2] = dw[1]; - dw[1] = dw[0]; - dw[0] = w[1] * 2. + dw[1] * 2.0 * normalized_t - dw[2]; - } + // Workspace arrays + let mut w = [0.0_f64; 3]; + let mut dw = [0.0_f64; 3]; + + for j in (2..=degree).rev() { + w[2] = w[1]; + w[1] = w[0]; + w[0] = (spline_data + .get(j - 1) + .ok_or_else(|| AniseError::MissingInterpolationData(eval_epoch))?) + + (2.0 * relative_normalized_time_s * w[1] - w[2]); + + dw[2] = dw[1]; + dw[1] = dw[0]; + dw[0] = w[1] * 2. + dw[1] * 2.0 * relative_normalized_time_s - dw[2]; + } - let val = - (splines.fetch(spline_idx_f as usize, 0, field)?) + (normalized_t * w[0] - w[1]); + let val = (spline_data + .get(0) + .ok_or_else(|| AniseError::MissingInterpolationData(eval_epoch))?) + + (relative_normalized_time_s * w[0] - w[1]); - let deriv = (w[0] + normalized_t * dw[0] - dw[1]) / radius_s; - Ok((val, deriv)) - } - Evenness::Uneven { indexes: _indexes } => todo!(), - } + let deriv = (w[0] + relative_normalized_time_s * dw[0] - dw[1]) / spline_radius_s; + Ok((val, deriv)) } diff --git a/src/naif/context/mod.rs b/src/naif/context/mod.rs deleted file mode 100644 index 86657627..00000000 --- a/src/naif/context/mod.rs +++ /dev/null @@ -1,72 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use crate::naif::{daf::DAF, pck::BPCSummaryRecord, spk::summary::SPKSummaryRecord}; - -use crate::errors::AniseError; - -/// A SPICE context contains all of the loaded SPICE data. -/// -/// # Limitations -/// You may only load up to 32 SPICE files of each kind. -/// The stack space does _not_ depend on how much data is loaded at any given time. -#[derive(Clone, Default)] -pub struct SpiceContext<'a> { - // TODO: Add ANISE context here too. - pub spk_data: [Option<&'a DAF<'a, SPKSummaryRecord>>; 32], - pub bpc_data: [Option<&'a DAF<'a, BPCSummaryRecord>>; 32], -} - -impl<'a: 'b, 'b> SpiceContext<'a> { - /// Loads a new SPK file into a new context. - /// This new context is needed to satisfy the unloading of files. In fact, to unload a file, simply let the newly loaded context drop out of scope and Rust will clean it up. - pub fn load_spk( - &self, - spk: &'b DAF<'b, SPKSummaryRecord>, - ) -> Result, AniseError> { - // This is just a bunch of pointers so it doesn't use much memory. - let mut me = self.clone(); - // Parse as SPK and place into the SPK list if there is room - let mut data_idx = 32; - for (idx, item) in self.spk_data.iter().enumerate() { - if item.is_none() { - data_idx = idx; - break; - } - } - if data_idx == 32 { - return Err(AniseError::StructureIsFull); - } - me.spk_data[data_idx] = Some(spk); - Ok(me) - } - - /// Loads a Binary Planetary Constants kernel. - pub fn load_bpc( - &self, - bpc: &'b DAF<'b, BPCSummaryRecord>, - ) -> Result, AniseError> { - // This is just a bunch of pointers so it doesn't use much memory. - let mut me = self.clone(); - // Parse as SPK and place into the SPK list if there is room - let mut data_idx = 32; - for (idx, item) in self.bpc_data.iter().enumerate() { - if item.is_none() { - data_idx = idx; - break; - } - } - if data_idx == 32 { - return Err(AniseError::StructureIsFull); - } - me.bpc_data[data_idx] = Some(bpc); - Ok(me) - } -} diff --git a/src/naif/daf/daf.rs b/src/naif/daf/daf.rs new file mode 100644 index 00000000..7a5beee7 --- /dev/null +++ b/src/naif/daf/daf.rs @@ -0,0 +1,188 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use hifitime::Epoch; +use zerocopy::{FromBytes, LayoutVerified}; + +pub(crate) const RCRD_LEN: usize = 1024; + +pub use super::recordtypes::{DAFFileRecord, DAFSummaryRecord, NameRecord}; +use super::{NAIFDataSet, NAIFRecord, NAIFSummaryRecord}; +use crate::{prelude::AniseError, DBL_SIZE}; + +#[derive(Default, Debug)] +pub struct DAF<'a, R: NAIFSummaryRecord> { + pub file_record: DAFFileRecord, + pub daf_summary: DAFSummaryRecord, + pub name_record: NameRecord, + pub data_summaries: &'a [R], + /// All of the underlying bytes including what has already been parsed (helps for indexing the data) + pub bytes: &'a [u8], +} + +impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { + pub fn parse(bytes: &'a [u8]) -> Result { + let file_record = DAFFileRecord::read_from(&bytes[..DAFFileRecord::SIZE]).unwrap(); + + // Move onto the next record, DAF indexes start at 1 ... =( + let rcrd_idx = (file_record.fwrd_idx() - 1) * RCRD_LEN; + let rcrd_bytes = bytes + .get(rcrd_idx..rcrd_idx + RCRD_LEN) + .ok_or(AniseError::MalformedData(file_record.fwrd_idx() + RCRD_LEN))?; + + // TODO: Use the endianness flag + let daf_summary = + DAFSummaryRecord::read_from(&rcrd_bytes[..DAFSummaryRecord::SIZE]).unwrap(); + + // The SPK summaries are defined in this same record, so let's read them now. + let data_summaries = match LayoutVerified::new_slice(&rcrd_bytes[DAFSummaryRecord::SIZE..]) + { + Some(data) => data.into_slice(), + None => &[R::default(); 0], + }; + + // Move onto the next record. + let rcrd_idx = file_record.fwrd_idx() * RCRD_LEN; + let rcrd_bytes = bytes + .get(rcrd_idx..rcrd_idx + RCRD_LEN) + .ok_or(AniseError::MalformedData(file_record.fwrd_idx() + RCRD_LEN))?; + let name_record = NameRecord::read_from(rcrd_bytes).unwrap(); + + Ok(Self { + file_record, + daf_summary, + name_record, + data_summaries, + bytes, + }) + } + + pub fn nth_summary(&self, n: usize) -> Result<(&str, &R), AniseError> { + let name = self + .name_record + .nth_name(n, self.file_record.summary_size()); + + let summary = &self.data_summaries[n]; + + Ok((name.trim(), summary)) + } + + /// Returns the summary given the name of the summary record + pub fn summary_from_name(&self, name: &str) -> Result<(&R, usize), AniseError> { + let idx = self + .name_record + .index_from_name(name, self.file_record.summary_size())?; + + Ok((self.nth_summary(idx)?.1, idx)) + } + + /// Returns the summary given the name of the summary record if that summary has data defined at the requested epoch + pub fn summary_from_name_at_epoch( + &self, + name: &str, + epoch: Epoch, + ) -> Result<(&R, usize), AniseError> { + let (summary, idx) = self.summary_from_name(name)?; + + if epoch >= summary.start_epoch() && epoch <= summary.end_epoch() { + Ok((summary, idx)) + } else { + Err(AniseError::MissingInterpolationData(epoch)) + } + } + + /// Returns the summary given the name of the summary record + pub fn summary_from_id(&self, id: i32) -> Result<(&R, usize), AniseError> { + for (idx, summary) in self.data_summaries.iter().enumerate() { + if summary.id() == id { + return Ok((summary, idx)); + } + } + + Err(AniseError::ItemNotFound) + } + + /// Returns the summary given the name of the summary record if that summary has data defined at the requested epoch + pub fn summary_from_id_at_epoch( + &self, + id: i32, + epoch: Epoch, + ) -> Result<(&R, usize), AniseError> { + let (summary, idx) = self.summary_from_id(id)?; + + if epoch >= summary.start_epoch() && epoch <= summary.end_epoch() { + Ok((summary, idx)) + } else { + Err(AniseError::MissingInterpolationData(epoch)) + } + } + + /// Provided a name that is in the summary, return its full data, if name is available. + pub fn data_from_name>(&self, name: &str) -> Result { + // O(N) search through the summaries + for idx in 0..self + .name_record + .num_entries(self.file_record.summary_size()) + { + let (this_name, _) = self.nth_summary(idx)?; + if name.trim() == this_name.trim() { + // Found it! + return self.nth_data(idx); + } + } + Err(AniseError::DAFParserError(format!( + "Could not find data for {name}" + ))) + } + + /// Provided a name that is in the summary, return its full data, if name is available. + pub fn nth_data>(&self, idx: usize) -> Result { + let (_, this_summary) = self.nth_summary(idx)?; + // Grab the data in native endianness (TODO: How to support both big and little endian?) + let data: &'a [f64] = LayoutVerified::new_slice( + self.bytes + .get( + (this_summary.start_index() - 1) * DBL_SIZE + ..this_summary.end_index() * DBL_SIZE, + ) + .ok_or(AniseError::MalformedData( + this_summary.end_index() + RCRD_LEN, + ))?, + ) + .unwrap() + .into_slice(); + // Convert it + return Ok(S::from_slice_f64(data)); + } + + pub fn comments(&self) -> Result { + // TODO: This can be cleaned up to avoid allocating a string. In my initial tests there were a bunch of additional spaces, so I canceled those changes. + let mut rslt = String::new(); + // FWRD has the initial record of the summary. So we assume that all records between the second record and that one are comments + for rid in 1..self.file_record.fwrd_idx() { + match core::str::from_utf8( + self.bytes + .get(rid * RCRD_LEN..(rid + 1) * RCRD_LEN) + .ok_or(AniseError::MalformedData((rid + 1) * RCRD_LEN))?, + ) { + Ok(s) => rslt += s.replace('\u{0}', "\n").trim(), + Err(e) => { + let valid_s = core::str::from_utf8( + &self.bytes[rid * RCRD_LEN..(rid * RCRD_LEN + e.valid_up_to())], + ) + .unwrap(); + rslt += valid_s.replace('\u{0}', "\n").trim() + } + } + } + + Ok(rslt) + } +} diff --git a/src/naif/daf/mod.rs b/src/naif/daf/mod.rs index 7ea8aea8..0011d5f7 100644 --- a/src/naif/daf/mod.rs +++ b/src/naif/daf/mod.rs @@ -9,12 +9,16 @@ */ use core::fmt::Display; -use zerocopy::{FromBytes, LayoutVerified}; +use hifitime::Epoch; +use zerocopy::FromBytes; pub(crate) const RCRD_LEN: usize = 1024; +pub mod daf; pub mod recordtypes; -use crate::{prelude::AniseError, DBL_SIZE}; +pub use daf::DAF; + +use crate::prelude::AniseError; pub use recordtypes::{DAFFileRecord, DAFSummaryRecord, NameRecord}; pub trait NAIFRecord: FromBytes + Sized + Default { @@ -22,109 +26,29 @@ pub trait NAIFRecord: FromBytes + Sized + Default { } pub trait NAIFSummaryRecord: NAIFRecord + Copy { - fn start_idx(&self) -> usize; - fn end_idx(&self) -> usize; + fn start_index(&self) -> usize; + fn end_index(&self) -> usize; + fn start_epoch(&self) -> Epoch; + fn end_epoch(&self) -> Epoch; + /// Returns whatever is the ID of this summary record. + fn id(&self) -> i32; } pub trait NAIFDataSet<'a>: Display { - type RecordKind: Display; + /// The underlying record representation + type RecordKind: NAIFDataRecord<'a>; + + /// The state that is returned from an evaluation of this data set + type StateKind; + // TODO: Return a result here. fn from_slice_f64(slice: &'a [f64]) -> Self; fn nth_record(&self, n: usize) -> Self::RecordKind; -} -pub trait NAIFDataRecord<'a> { - fn from_slice_f64(slice: &'a [f64]) -> Self; + fn evaluate(&self, epoch: Epoch) -> Result; } -#[derive(Default, Debug)] -pub struct DAF<'a, R: NAIFSummaryRecord> { - pub file_record: DAFFileRecord, - pub daf_summary: DAFSummaryRecord, - pub name_record: NameRecord, - pub data_summaries: &'a [R], - /// All of the underlying bytes including what has already been parsed (helps for indexing the data) - pub bytes: &'a [u8], -} - -impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { - pub fn parse(bytes: &'a [u8]) -> Result { - let file_record = DAFFileRecord::read_from(&bytes[..DAFFileRecord::SIZE]).unwrap(); - - // Move onto the next record, DAF indexes start at 1 ... =( - let rcrd_idx = (file_record.fwrd_idx() - 1) * RCRD_LEN; - let rcrd_bytes = bytes - .get(rcrd_idx..rcrd_idx + RCRD_LEN) - .ok_or(AniseError::MalformedData(file_record.fwrd_idx() + RCRD_LEN))?; - - // TODO: Use the endianness flag - let daf_summary = - DAFSummaryRecord::read_from(&rcrd_bytes[..DAFSummaryRecord::SIZE]).unwrap(); - - // The SPK summaries are defined in this same record, so let's read them now. - let data_summaries = match LayoutVerified::new_slice(&rcrd_bytes[DAFSummaryRecord::SIZE..]) - { - Some(data) => data.into_slice(), - None => &[R::default(); 0], - }; - - // Move onto the next record. - let rcrd_idx = file_record.fwrd_idx() * RCRD_LEN; - let rcrd_bytes = bytes - .get(rcrd_idx..rcrd_idx + RCRD_LEN) - .ok_or(AniseError::MalformedData(file_record.fwrd_idx() + RCRD_LEN))?; - let name_record = NameRecord::read_from(rcrd_bytes).unwrap(); - - Ok(Self { - file_record, - daf_summary, - name_record, - data_summaries, - bytes, - }) - } - - pub fn nth_summary(&self, n: usize) -> Result<(&str, &R), AniseError> { - let name = self - .name_record - .nth_name(n, self.file_record.summary_size()); - - let summary = &self.data_summaries[n]; - - Ok((name.trim(), summary)) - } - - /// Provided a name that is in the summary, return its full data, if name is available. - pub fn data_from_name>(&self, name: &str) -> Result { - // O(N) search through the summaries - for idx in 0..self - .name_record - .num_entries(self.file_record.summary_size()) - { - let (this_name, _) = self.nth_summary(idx)?; - if name.trim() == this_name.trim() { - // Found it! - return self.nth_data(idx); - } - } - Err(AniseError::DAFParserError(format!( - "Could not find data for {name}" - ))) - } - - /// Provided a name that is in the summary, return its full data, if name is available. - pub fn nth_data>(&self, idx: usize) -> Result { - let (_, this_summary) = self.nth_summary(idx)?; - // Grab the data in native endianness (TODO: How to support both big and little endian?) - let data: &'a [f64] = LayoutVerified::new_slice( - self.bytes - .get((this_summary.start_idx() - 1) * DBL_SIZE..this_summary.end_idx() * DBL_SIZE) - .ok_or(AniseError::MalformedData(this_summary.end_idx() + RCRD_LEN))?, - ) - .unwrap() - .into_slice(); - // Convert it - return Ok(S::from_slice_f64(data)); - } +pub trait NAIFDataRecord<'a>: Display { + fn from_slice_f64(slice: &'a [f64]) -> Self; } diff --git a/src/naif/daf/recordtypes.rs b/src/naif/daf/recordtypes.rs index 5e3d7282..7098d83b 100644 --- a/src/naif/daf/recordtypes.rs +++ b/src/naif/daf/recordtypes.rs @@ -69,8 +69,9 @@ impl DAFFileRecord { } pub fn identification(&self) -> Result<&str, AniseError> { - let str_locidw = core::str::from_utf8(&self.locidw) - .map_err(|_| AniseError::DAFParserError("Could not parse endianness".to_owned()))?; + let str_locidw = core::str::from_utf8(&self.locidw).map_err(|_| { + AniseError::DAFParserError("Could not parse identification string".to_owned()) + })?; if &str_locidw[0..3] != "DAF" { Err(AniseError::DAFParserError(format!( @@ -101,15 +102,22 @@ impl DAFFileRecord { let str_endianness = core::str::from_utf8(&self.locfmt) .map_err(|_| AniseError::DAFParserError("Could not parse endianness".to_owned()))?; - if str_endianness == "LTL-IEEE" { - Ok(Endian::Little) + let file_endian = if str_endianness == "LTL-IEEE" { + Endian::Little } else if str_endianness == "BIG-IEEE" { - Ok(Endian::Big) + Endian::Big } else { - Err(AniseError::DAFParserError(format!( + return Err(AniseError::DAFParserError(format!( "Could not understand endianness: `{}`", str_endianness + ))); + }; + if file_endian != Endian::f64_native() || file_endian != Endian::u64_native() { + Err(AniseError::DAFParserError(format!( + "Input file has different endian-ness than the platform and cannot be decoded" ))) + } else { + Ok(file_endian) } } @@ -174,7 +182,7 @@ impl NameRecord { let this_name = &self.raw_names[n * summary_size * DBL_SIZE..(n + 1) * summary_size * DBL_SIZE]; match core::str::from_utf8(&this_name) { - Ok(name) => name, + Ok(name) => name.trim(), Err(e) => { warn!( "malformed name record: `{e}` from {:?}! Using `UNNAMED OBJECT` instead", @@ -184,4 +192,16 @@ impl NameRecord { } } } + + /// Searches the name record for the provided name. + /// + /// **Warning:** this performs an O(N) search! + pub fn index_from_name(&self, name: &str, summary_size: usize) -> Result { + for i in 0..self.num_entries(summary_size) { + if self.nth_name(i, summary_size) == name { + return Ok(i); + } + } + Err(AniseError::ItemNotFound) + } } diff --git a/src/naif/dafold.rs b/src/naif/dafold.rs deleted file mode 100644 index 2a3d2985..00000000 --- a/src/naif/dafold.rs +++ /dev/null @@ -1,268 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use super::daf::recordtypes::DAFSummaryRecord; -pub(crate) use super::Endian; -use crate::{ - naif::daf::{recordtypes::DAFFileRecord, NAIFRecord}, - parse_bytes_as, - prelude::AniseError, - DBL_SIZE, -}; -use core::convert::TryInto; -use log::{debug, error, info, warn}; -use zerocopy::FromBytes; - -pub(crate) const RCRD_LEN: usize = 1024; -pub(crate) const INT_SIZE: usize = 4; - -#[derive(Debug)] -pub struct DAF<'a> { - pub idword: &'a str, - pub internal_filename: &'a str, - /// The number of integer components in each array summary. - pub ni: usize, - /// The number of double precision components in each array summary. - pub nd: usize, - /// The record number of the initial summary record in the file. - pub fwrd: usize, - /// The record number of the final summary record in the file. - pub bwrd: usize, - pub freeaddr: usize, - pub endianness: Endian, - pub bytes: &'a [u8], -} - -impl<'a> DAF<'a> { - /// From https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/daf.html#Structure - pub fn parse(bytes: &'a [u8]) -> Result { - let daf_file_record = DAFFileRecord::read_from(&bytes[0..DAFFileRecord::SIZE]).unwrap(); - - println!("{}", daf_file_record.identification().unwrap()); - println!("ni = {}\tnd = {}", daf_file_record.ni, daf_file_record.nd); - - let locidw = core::str::from_utf8(bytes.get(0..8).ok_or(AniseError::MalformedData(8))?) - .map_err(|_| { - AniseError::DAFParserError("Could not parse header (first 8 bytes)".to_owned()) - })?; - - if !locidw.contains('/') { - return Err(AniseError::DAFParserError(format!( - "Cannot parse file whose identifier is: `{}`", - locidw - ))); - } - - let daftype_it = locidw.split('/'); - for (idx, content) in daftype_it.enumerate() { - if idx == 0 && content != "DAF" { - return Err(AniseError::DAFParserError(format!( - "Cannot parse file whose identifier is not DAF: `{}`", - locidw, - ))); - } else if idx == 1 { - match content.trim() { - "SPK" => { - debug!("Parsing DAF as SPK"); - } - "PCK" => { - info!("Parsing DAF as PCF (good luck)"); - } - _ => { - error!("DAF of type {content} is not yet supported"); - return Err(AniseError::DAFParserError(format!( - "Cannot parse SPICE data of type `{}`", - locidw - ))); - } - } - } else if idx > 1 { - return Err(AniseError::DAFParserError(format!( - "Malformed header string: `{}`", - locidw - ))); - } - } - - // We need to figure out if this file is big or little endian before we can convert some byte arrays into integer - let str_endianness = - core::str::from_utf8(bytes.get(88..96).ok_or(AniseError::MalformedData(96))?) - .map_err(|_| AniseError::DAFParserError("Could not parse endianness".to_owned()))?; - - let endianness = if str_endianness == "LTL-IEEE" { - Endian::Little - } else if str_endianness == "BIG-IEEE" { - Endian::Big - } else { - return Err(AniseError::DAFParserError(format!( - "Could not understand endianness: `{}`", - str_endianness - ))); - }; - - // Note that we parse as u32 to make sure that it's a 32-bit integer. The docs don't specify if it's signed or not, - // but it works in either case (I guess that the sign bit is still present but set to zero?) - let nd = parse_bytes_as!( - u32, - bytes - .get(8..8 + INT_SIZE) - .ok_or(AniseError::MalformedData(8 + INT_SIZE))?, - endianness - ) as usize; - let ni = parse_bytes_as!( - u32, - bytes - .get(12..12 + INT_SIZE) - .ok_or(AniseError::MalformedData(12 + INT_SIZE))?, - endianness - ) as usize; - let fwrd = parse_bytes_as!( - u32, - bytes - .get(76..76 + INT_SIZE) - .ok_or(AniseError::MalformedData(76 + INT_SIZE))?, - endianness - ) as usize; - let bwrd = parse_bytes_as!( - u32, - bytes - .get(80..80 + INT_SIZE) - .ok_or(AniseError::MalformedData(80 + INT_SIZE))?, - endianness - ) as usize; - let freeaddr = parse_bytes_as!( - u32, - bytes - .get(84..84 + INT_SIZE) - .ok_or(AniseError::MalformedData(84 + INT_SIZE))?, - endianness - ) as usize; - - let locifn = core::str::from_utf8(bytes.get(16..76).ok_or(AniseError::MalformedData(79))?) - .map_err(|_| AniseError::DAFParserError("Could not parse locifn".to_owned()))?; - - Ok(Self { - idword: locidw.trim(), - internal_filename: locifn.trim(), - nd, - ni, - fwrd, - bwrd, - freeaddr, - endianness, - bytes, - }) - } - - pub fn comments(&self) -> Result { - let mut rslt = String::new(); - // FWRD has the initial record of the summary. So we assume that all records between the second record and that one are comments - for rid in 1..self.fwrd { - match core::str::from_utf8( - self.bytes - .get(rid * RCRD_LEN..(rid + 1) * RCRD_LEN) - .ok_or(AniseError::MalformedData((rid + 1) * RCRD_LEN))?, - ) { - Ok(s) => rslt += s.replace("\u{0}\u{0}", " ").replace('\u{0}', "\n").trim(), - Err(e) => { - let valid_s = core::str::from_utf8( - &self.bytes[rid * RCRD_LEN..(rid * RCRD_LEN + e.valid_up_to())], - ) - .unwrap(); - rslt += valid_s - .replace("\u{0}\u{0}", " ") - .replace('\u{0}', "\n") - .trim() - } - } - } - - Ok(rslt) - } - - /// The summaries are needed to decode the rest of the file - pub fn summaries(&self) -> Result, Vec)>, AniseError> { - // Each summary need to be read in bytes of 8*nd then 4*self.ni - let mut record_num = self.fwrd; - let mut rtn = Vec::new(); - loop { - if record_num == 0 { - break; - } - let summary_record_bytes = self.record_bytes(record_num)?; - - let record = - DAFSummaryRecord::read_from(&summary_record_bytes[0..3 * DBL_SIZE]).unwrap(); - - // Parse the data of the summary. - let name_record_bytes = self.record_bytes(record_num + 1)?; - let length = DBL_SIZE * self.nd + INT_SIZE * self.ni; - for i in (0..record.num_summaries() * length).step_by(length) { - let j = 3 * DBL_SIZE + i; - let name = if name_record_bytes.is_empty() { - warn!("name record is empty! Using `UNNAMED SPACECRAFT` instead"); - "UNNAMED SPACECRAFT" - } else { - match core::str::from_utf8(&name_record_bytes[i..i + length]) { - Ok(name) => name, - Err(e) => { - warn!( - "malformed name record: `{e}` from {:?}! Using `UNNAMED SPACECRAFT` instead", - &name_record_bytes[i..i + length] - ); - "UNNAMED SPACECRAFT" - } - } - }; - - if name.starts_with(' ') { - println!("WARNING: Parsing might be wrong because the first character of the name summary is a space: `{}`", name); - println!( - "Full name data: `{}`", - core::str::from_utf8(&name_record_bytes[..1000]).unwrap() - ); - } - let summary_data = &summary_record_bytes[j..j + length]; - let mut f64_summary = Vec::with_capacity(self.nd); - for double_data in summary_data[0..DBL_SIZE * self.nd].chunks(DBL_SIZE) { - f64_summary.push(parse_bytes_as!(f64, double_data, self.endianness)); - } - let mut int_summary = Vec::with_capacity(self.ni); - for int_data in summary_data - [DBL_SIZE * self.nd..(self.nd * DBL_SIZE + self.ni * INT_SIZE)] - .chunks(INT_SIZE) - { - int_summary.push(parse_bytes_as!(i32, int_data, self.endianness)); - } - // Add this data to the return vec - rtn.push((name, f64_summary, int_summary)); - } - record_num = record.next_record(); - } - - Ok(rtn) - } - - fn record_bytes(&self, num: usize) -> Result<&'a [u8], AniseError> { - let start_idx = num * RCRD_LEN - RCRD_LEN; - self.bytes - .get(start_idx..start_idx + RCRD_LEN) - .ok_or(AniseError::MalformedData(start_idx + RCRD_LEN)) - } - - /// Returns the 64-bit float at the provided address - pub(crate) fn read_f64(&self, byte_idx: usize) -> f64 { - parse_bytes_as!( - f64, - &self.bytes[DBL_SIZE * byte_idx..DBL_SIZE * (byte_idx + 1)], - self.endianness - ) - } -} diff --git a/src/naif/mod.rs b/src/naif/mod.rs index 7c01ab56..f75af6c0 100644 --- a/src/naif/mod.rs +++ b/src/naif/mod.rs @@ -8,13 +8,14 @@ * Documentation: https://nyxspace.com/ */ -pub mod context; pub mod daf; -pub mod dafold; pub mod pck; pub mod spk; -pub use context::*; +use self::{daf::DAF, pck::BPCSummaryRecord, spk::summary::SPKSummaryRecord}; + +pub type SPK<'a> = DAF<'a, SPKSummaryRecord>; +pub type BPC<'a> = DAF<'a, BPCSummaryRecord>; #[macro_export] macro_rules! parse_bytes_as { @@ -33,3 +34,26 @@ pub enum Endian { Little, Big, } + +impl Endian { + /// Returns the endianness of the platform we're running on for an f64. + /// This isn't const because f64 comparisons cannot be const yet + fn f64_native() -> Self { + let truth: f64 = 0.12345678; + if (f64::from_ne_bytes(truth.to_be_bytes()) - truth).abs() < f64::EPSILON { + Self::Big + } else { + Self::Little + } + } + + /// Returns the endianness of the platform we're running on for an f64. + const fn u64_native() -> Self { + let truth: u32 = 0x12345678; + if u32::from_ne_bytes(truth.to_be_bytes()) == truth { + Self::Big + } else { + Self::Little + } + } +} diff --git a/src/naif/pck/mod.rs b/src/naif/pck/mod.rs index 437a0d30..3411aa64 100644 --- a/src/naif/pck/mod.rs +++ b/src/naif/pck/mod.rs @@ -8,6 +8,7 @@ * Documentation: https://nyxspace.com/ */ +use hifitime::Epoch; use zerocopy::FromBytes; use crate::naif::daf::{NAIFRecord, NAIFSummaryRecord}; @@ -27,11 +28,23 @@ pub struct BPCSummaryRecord { impl NAIFRecord for BPCSummaryRecord {} impl NAIFSummaryRecord for BPCSummaryRecord { - fn start_idx(&self) -> usize { + fn start_index(&self) -> usize { self.start_idx as usize } - fn end_idx(&self) -> usize { + fn end_index(&self) -> usize { self.end_idx as usize } + + fn start_epoch(&self) -> Epoch { + Epoch::from_et_seconds(self.start_epoch_et_s) + } + + fn end_epoch(&self) -> Epoch { + Epoch::from_et_seconds(self.end_epoch_et_s) + } + + fn id(&self) -> i32 { + self.frame_id + } } diff --git a/src/naif/spk/datatype.rs b/src/naif/spk/datatype.rs deleted file mode 100644 index ff46befc..00000000 --- a/src/naif/spk/datatype.rs +++ /dev/null @@ -1,89 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use crate::{structure::spline::StateKind, prelude::AniseError}; - -#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] -pub enum DataType { - /// Type 1 - ModifiedDifferenceArrays, - /// Type 2 - ChebyshevPositionOnly, - /// Type 3 - ChebyshevPositionVelocity, - /// Type 5 (two body propagation) - DiscreteStates, - /// Type 8 - LagrangeInterpolationEqualTimeSteps, - /// Type 9 - LagrangeInterpolationUnequalTimeSteps, - /// Type 10 - SpaceCommandTwoLineElements, - /// Type 12 - HermiteInterpolationEqualTimeSteps, - /// Type 13 - HermiteInterpolationUnequalTimeSteps, - /// Type 14 - ChebyshevPolynomialsUnequalTimeSteps, - /// Type 15 - PrecessingConicPropagation, - /// Type 17 - EquinoctialElements, - /// Type 18 - ESOCHermiteLagrangeInterpolation, - /// Type 19 - ESOCPiecewiseInterpolation, - /// Type 20 - ChebyshevVelocityOnly, - /// Type 21 - ExtendedModifiedDifferenceArrays, -} - -impl DataType { - pub fn to_anise_spline_coeff(&self, degree: usize) -> StateKind { - match self { - Self::ChebyshevPositionOnly => StateKind::Position { - degree: degree.try_into().unwrap(), - }, - Self::ChebyshevPositionVelocity => StateKind::PositionVelocity { - degree: degree.try_into().unwrap(), - }, - _ => todo!(), - } - } -} - -impl TryFrom for DataType { - type Error = AniseError; - fn try_from(data_type: i32) -> Result { - match data_type { - 1 => Ok(Self::ModifiedDifferenceArrays), - 2 => Ok(Self::ChebyshevPositionOnly), - 3 => Ok(Self::ChebyshevPositionVelocity), - 5 => Ok(Self::DiscreteStates), - 8 => Ok(Self::LagrangeInterpolationEqualTimeSteps), - 9 => Ok(Self::LagrangeInterpolationUnequalTimeSteps), - 10 => Ok(Self::SpaceCommandTwoLineElements), - 12 => Ok(Self::HermiteInterpolationEqualTimeSteps), - 13 => Ok(Self::HermiteInterpolationUnequalTimeSteps), - 14 => Ok(Self::ChebyshevPolynomialsUnequalTimeSteps), - 15 => Ok(Self::PrecessingConicPropagation), - 17 => Ok(Self::EquinoctialElements), - 18 => Ok(Self::ESOCHermiteLagrangeInterpolation), - 19 => Ok(Self::ESOCPiecewiseInterpolation), - 20 => Ok(Self::ChebyshevVelocityOnly), - 21 => Ok(Self::ExtendedModifiedDifferenceArrays), - _ => Err(AniseError::DAFParserError(format!( - "unknown data type {}", - data_type - ))), - } - } -} diff --git a/src/naif/spk/recordtypes.rs b/src/naif/spk/datatypes/chebyshev.rs similarity index 71% rename from src/naif/spk/recordtypes.rs rename to src/naif/spk/datatypes/chebyshev.rs index bf18caa6..806f6a4c 100644 --- a/src/naif/spk/recordtypes.rs +++ b/src/naif/spk/datatypes/chebyshev.rs @@ -11,9 +11,13 @@ use core::fmt; use hifitime::{Duration, Epoch, TimeUnits}; -use crate::naif::daf::{NAIFDataRecord, NAIFDataSet}; +use crate::{ + math::{interpolation::chebyshev::cheby_eval, Vector3}, + naif::daf::{NAIFDataRecord, NAIFDataSet}, + prelude::AniseError, +}; -pub struct ChebyshevSetType2Type3<'a> { +pub struct Type2ChebyshevSet<'a> { pub init_epoch: Epoch, pub interval_length: Duration, pub rsize: usize, @@ -21,7 +25,13 @@ pub struct ChebyshevSetType2Type3<'a> { pub record_data: &'a [f64], } -impl<'a> fmt::Display for ChebyshevSetType2Type3<'a> { +impl<'a> Type2ChebyshevSet<'a> { + pub fn degree(&self) -> usize { + (self.rsize - 2) / 3 - 1 + } +} + +impl<'a> fmt::Display for Type2ChebyshevSet<'a> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, @@ -35,7 +45,9 @@ impl<'a> fmt::Display for ChebyshevSetType2Type3<'a> { } } -impl<'a> NAIFDataSet<'a> for ChebyshevSetType2Type3<'a> { +impl<'a> NAIFDataSet<'a> for Type2ChebyshevSet<'a> { + // At this stage, we don't know the frame of what we're interpolating! + type StateKind = (Vector3, Vector3); type RecordKind = Type2ChebyshevRecord<'a>; fn from_slice_f64(slice: &'a [f64]) -> Self { @@ -58,6 +70,40 @@ impl<'a> NAIFDataSet<'a> for ChebyshevSetType2Type3<'a> { let rcrd_len = self.record_data.len() / self.num_records; Self::RecordKind::from_slice_f64(&self.record_data[n * rcrd_len..(n + 1) * rcrd_len]) } + + fn evaluate(&self, epoch: Epoch) -> Result<(Vector3, Vector3), AniseError> { + let window_duration_s = self.interval_length.to_seconds(); + + let radius_s = window_duration_s / 2.0; + let ephem_start_delta = epoch - self.init_epoch; + let ephem_start_delta_s = ephem_start_delta.to_seconds(); + + if ephem_start_delta_s < 0.0 { + return Err(AniseError::MissingInterpolationData(epoch)); + } + + // In seconds + let spline_idx = (ephem_start_delta_s / window_duration_s).round() as usize; + + // Now, build the X, Y, Z data from the record data. + let record = self.nth_record(spline_idx); + + let normalized_t = (epoch.to_et_seconds() - record.midpoint.to_et_seconds()) / radius_s; + + let mut pos = Vector3::zeros(); + let mut vel = Vector3::zeros(); + + for (cno, coeffs) in [record.x_coeffs, record.y_coeffs, record.z_coeffs] + .iter() + .enumerate() + { + let (val, deriv) = cheby_eval(normalized_t, &coeffs, radius_s, epoch, self.degree())?; + pos[cno] = val; + vel[cno] = deriv; + } + + Ok((pos, vel)) + } } pub struct Type2ChebyshevRecord<'a> { @@ -138,32 +184,3 @@ impl<'a> NAIFDataRecord<'a> for Type3ChebyshevRecord<'a> { } } } - -#[derive(Debug)] -pub struct PositionVelocityRecord { - pub x: f64, - pub y: f64, - pub z: f64, - pub vx: f64, - pub vy: f64, - pub vz: f64, -} - -impl fmt::Display for PositionVelocityRecord { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{self:?}") - } -} - -impl<'a> NAIFDataRecord<'a> for PositionVelocityRecord { - fn from_slice_f64(slice: &'a [f64]) -> Self { - Self { - x: slice[0], - y: slice[1], - z: slice[2], - vx: slice[3], - vy: slice[4], - vz: slice[5], - } - } -} diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs new file mode 100644 index 00000000..c1a76975 --- /dev/null +++ b/src/naif/spk/datatypes/hermite.rs @@ -0,0 +1,135 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use core::fmt; +use hifitime::{Duration, Epoch, TimeUnits}; + +use crate::{ + math::{cartesian::CartesianState, Vector3}, + naif::daf::{NAIFDataRecord, NAIFDataSet, NAIFRecord}, + DBL_SIZE, +}; + +use super::posvel::PositionVelocityRecord; + +pub struct HermiteSetType12<'a> { + pub first_state_epoch: Epoch, + pub step_size: Duration, + pub window_size: usize, + pub num_records: usize, + pub record_data: &'a [f64], +} + +impl<'a> fmt::Display for HermiteSetType12<'a> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "Hermite Type 12: start: {:E}\tstep: {}\twindow size: {}\tnum records: {}\tlen data: {}", + self.first_state_epoch, + self.step_size, + self.window_size, + self.num_records, + self.record_data.len() + ) + } +} + +impl<'a> NAIFDataSet<'a> for HermiteSetType12<'a> { + type StateKind = CartesianState; + type RecordKind = PositionVelocityRecord; + + fn from_slice_f64(slice: &'a [f64]) -> Self { + // For this kind of record, the metadata is stored at the very end of the dataset, so we need to read that first. + let first_state_epoch = Epoch::from_et_seconds(slice[slice.len() - 4]); + let step_size = slice[slice.len() - 3].seconds(); + let window_size = slice[slice.len() - 2] as usize; + let num_records = slice[slice.len() - 1] as usize; + + Self { + first_state_epoch, + step_size, + window_size, + num_records, + record_data: &slice[0..slice.len() - 4], + } + } + + fn nth_record(&self, n: usize) -> Self::RecordKind { + let rcrd_len = self.record_data.len() / self.num_records; + Self::RecordKind::from_slice_f64(&self.record_data[n * rcrd_len..(n + 1) * rcrd_len]) + } + + fn evaluate(&self, epoch: Epoch) -> Result { + todo!() + } +} + +pub struct HermiteSetType13<'a> { + pub window_size: usize, + pub num_records: usize, + pub state_data: &'a [f64], + pub epoch_data: &'a [f64], + pub epoch_registry: &'a [f64], +} + +impl<'a> HermiteSetType13<'a> { + pub fn degree(&self) -> usize { + 2 * self.window_size - 1 + } +} + +impl<'a> fmt::Display for HermiteSetType13<'a> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "Hermite Type 13 from {:E} to {:E} with degree {} ({} items, {} epoch directories)", + Epoch::from_et_seconds(*self.epoch_data.first().unwrap()), + Epoch::from_et_seconds(*self.epoch_data.last().unwrap()), + self.degree(), + self.epoch_data.len(), + self.epoch_registry.len() + ) + } +} + +impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { + type StateKind = (Vector3, Vector3); + type RecordKind = PositionVelocityRecord; + + fn from_slice_f64(slice: &'a [f64]) -> Self { + // For this kind of record, the metadata is stored at the very end of the dataset + let num_records = slice[slice.len() - 1] as usize; + let window_size = slice[slice.len() - 2] as usize; + // NOTE: The ::SIZE returns the C representation memory size of this, but we only want the number of doubles. + let state_data_end_idx = PositionVelocityRecord::SIZE / DBL_SIZE * num_records; + let state_data = slice.get(0..state_data_end_idx).unwrap(); + let epoch_data_end_idx = state_data_end_idx + num_records; + let epoch_data = slice.get(state_data_end_idx..epoch_data_end_idx).unwrap(); + // And the epoch directory is whatever remains minus the metadata + let epoch_registry = slice.get(epoch_data_end_idx..slice.len() - 2).unwrap(); + + Self { + window_size, + num_records, + state_data, + epoch_data, + epoch_registry, + } + } + + fn nth_record(&self, n: usize) -> Self::RecordKind { + let rcrd_len = self.state_data.len() / self.num_records; + Self::RecordKind::from_slice_f64(&self.state_data[n * rcrd_len..(n + 1) * rcrd_len]) + } + + fn evaluate(&self, epoch: Epoch) -> Result { + todo!() + } +} diff --git a/src/naif/spk/datatypes/lagrange.rs b/src/naif/spk/datatypes/lagrange.rs new file mode 100644 index 00000000..2ec79df3 --- /dev/null +++ b/src/naif/spk/datatypes/lagrange.rs @@ -0,0 +1,129 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use core::fmt; +use hifitime::{Duration, Epoch, TimeUnits}; + +use crate::{ + math::{cartesian::CartesianState, Vector3}, + naif::daf::{NAIFDataRecord, NAIFDataSet, NAIFRecord}, + DBL_SIZE, +}; + +use super::posvel::PositionVelocityRecord; + +pub struct LagrangeSetType8<'a> { + pub first_state_epoch: Epoch, + pub step_size: Duration, + pub degree: usize, + pub num_records: usize, + pub record_data: &'a [f64], +} + +impl<'a> fmt::Display for LagrangeSetType8<'a> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "Lagrange Type 8: start: {:E}\tstep: {}\twindow size: {}\tnum records: {}\tlen data: {}", + self.first_state_epoch, + self.step_size, + self.degree, + self.num_records, + self.record_data.len() + ) + } +} + +impl<'a> NAIFDataSet<'a> for LagrangeSetType8<'a> { + type StateKind = CartesianState; + type RecordKind = PositionVelocityRecord; + + fn from_slice_f64(slice: &'a [f64]) -> Self { + // For this kind of record, the metadata is stored at the very end of the dataset, so we need to read that first. + let first_state_epoch = Epoch::from_et_seconds(slice[slice.len() - 4]); + let step_size = slice[slice.len() - 3].seconds(); + let degree = slice[slice.len() - 2] as usize; + let num_records = slice[slice.len() - 1] as usize; + + Self { + first_state_epoch, + step_size, + degree, + num_records, + record_data: &slice[0..slice.len() - 4], + } + } + + fn nth_record(&self, n: usize) -> Self::RecordKind { + let rcrd_len = self.record_data.len() / self.num_records; + Self::RecordKind::from_slice_f64(&self.record_data[n * rcrd_len..(n + 1) * rcrd_len]) + } + + fn evaluate(&self, epoch: Epoch) -> Result { + todo!() + } +} + +pub struct LagrangeSetType9<'a> { + pub degree: usize, + pub num_records: usize, + pub state_data: &'a [f64], + pub epoch_data: &'a [f64], + pub epoch_registry: &'a [f64], +} + +impl<'a> fmt::Display for LagrangeSetType9<'a> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "Lagrange Type 9 from {:E} to {:E} with degree {} ({} items, {} epoch directories)", + Epoch::from_et_seconds(*self.epoch_data.first().unwrap()), + Epoch::from_et_seconds(*self.epoch_data.last().unwrap()), + self.degree, + self.epoch_data.len(), + self.epoch_registry.len() + ) + } +} + +impl<'a> NAIFDataSet<'a> for LagrangeSetType9<'a> { + type StateKind = (Vector3, Vector3); + type RecordKind = PositionVelocityRecord; + + fn from_slice_f64(slice: &'a [f64]) -> Self { + // For this kind of record, the metadata is stored at the very end of the dataset + let num_records = slice[slice.len() - 1] as usize; + let degree = slice[slice.len() - 2] as usize; + // NOTE: The ::SIZE returns the C representation memory size of this, but we only want the number of doubles. + let state_data_end_idx = PositionVelocityRecord::SIZE / DBL_SIZE * num_records; + let state_data = slice.get(0..state_data_end_idx).unwrap(); + let epoch_data_end_idx = state_data_end_idx + num_records; + let epoch_data = slice.get(state_data_end_idx..epoch_data_end_idx).unwrap(); + // And the epoch directory is whatever remains minus the metadata + let epoch_registry = slice.get(epoch_data_end_idx..slice.len() - 2).unwrap(); + + Self { + degree, + num_records, + state_data, + epoch_data, + epoch_registry, + } + } + + fn nth_record(&self, n: usize) -> Self::RecordKind { + let rcrd_len = self.state_data.len() / self.num_records; + Self::RecordKind::from_slice_f64(&self.state_data[n * rcrd_len..(n + 1) * rcrd_len]) + } + + fn evaluate(&self, epoch: Epoch) -> Result { + todo!() + } +} diff --git a/src/naif/spk/datatypes/mod.rs b/src/naif/spk/datatypes/mod.rs new file mode 100644 index 00000000..7e51cf46 --- /dev/null +++ b/src/naif/spk/datatypes/mod.rs @@ -0,0 +1,18 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +pub mod chebyshev; +pub mod hermite; +pub mod lagrange; +pub mod posvel; + +pub use chebyshev::*; +pub use hermite::*; +pub use lagrange::*; diff --git a/src/naif/spk/datatypes/posvel.rs b/src/naif/spk/datatypes/posvel.rs new file mode 100644 index 00000000..f63ae5c6 --- /dev/null +++ b/src/naif/spk/datatypes/posvel.rs @@ -0,0 +1,45 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use core::fmt; +use zerocopy::FromBytes; + +use crate::naif::daf::{NAIFDataRecord, NAIFRecord}; + +#[derive(Copy, Clone, Default, FromBytes, Debug)] +pub struct PositionVelocityRecord { + pub x_km: f64, + pub y_km: f64, + pub z_km: f64, + pub vx_km_s: f64, + pub vy_km_s: f64, + pub vz_km_s: f64, +} + +impl fmt::Display for PositionVelocityRecord { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{self:?}") + } +} + +impl NAIFRecord for PositionVelocityRecord {} + +impl<'a> NAIFDataRecord<'a> for PositionVelocityRecord { + fn from_slice_f64(slice: &'a [f64]) -> Self { + Self { + x_km: slice[0], + y_km: slice[1], + z_km: slice[2], + vx_km_s: slice[3], + vy_km_s: slice[4], + vz_km_s: slice[5], + } + } +} diff --git a/src/naif/spk/mod.rs b/src/naif/spk/mod.rs index d13a0290..c97688e7 100644 --- a/src/naif/spk/mod.rs +++ b/src/naif/spk/mod.rs @@ -8,486 +8,7 @@ * Documentation: https://nyxspace.com/ */ -extern crate crc32fast; -extern crate der; -use self::datatype::DataType; -use self::segment::{Record, SegMetaData, Segment}; - -use super::dafold::{Endian, DAF}; -use crate::constants::orientations::J2000; -use crate::errors::InternalErrorKind; -use crate::prelude::AniseError; -use crate::structure::common::InterpolationKind; -use crate::structure::context::AniseContext; -use crate::structure::ephemeris::Ephemeris; -use crate::structure::metadata::Metadata; -use crate::structure::spline::{Evenness, Field, SplineMeta, Splines, StateKind}; -use crate::structure::units::{LengthUnit, TimeUnit}; -use crate::{file_mmap, parse_bytes_as, DBL_SIZE}; -use crc32fast::hash; -use der::{Decode, Encode}; -use hifitime::{Epoch, TimeUnits}; -use log::{info, warn}; -use std::convert::TryInto; -use std::f64::EPSILON; -use std::fmt; -use std::fs::{remove_file, File}; -use std::io::Write; - -pub mod datatype; -pub mod recordtypes; -pub mod segment; +// Defines the supported data types +pub mod datatypes; +// Defines how to read an SPK pub mod summary; - -#[derive(Debug)] -pub struct SPK<'a> { - pub segments: Vec>, - pub daf: &'a DAF<'a>, -} - -impl<'a> SPK<'a> { - /// Returns the segment buffer index and the config data of that segment as (init_s_past_j2k, interval_length, rsize, num_records_in_seg) - pub fn segment_ptr(&self, seg_target_id: i32) -> Result<(&Segment, SegMetaData), AniseError> { - for seg in &self.segments { - if seg.target_id != seg_target_id { - continue; - } - - if seg.data_type != DataType::ChebyshevPositionOnly - && seg.data_type != DataType::ChebyshevPositionVelocity - { - return Err(AniseError::DAFParserError(format!( - "{:?} not yet supported", - seg.data_type - ))); - } - - // For type 2, the config data is at the very end of the record - // https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/spk.html#Type%202:%20Chebyshev%20(position%20only) - - let mut byte_idx = seg.end_idx - 4; - // 1. INIT is the initial epoch of the first record, given in ephemeris seconds past J2000. - let init_s_past_j2k = self.daf.read_f64(byte_idx); - - byte_idx += 1; - - // 2. INTLEN is the length of the interval covered by each record, in seconds. - let interval_length_s = self.daf.read_f64(byte_idx); - - byte_idx += 1; - - // 3. RSIZE is the total size of (number of array elements in) each record. - let rsize = self.daf.read_f64(byte_idx); - - byte_idx += 1; - - // 4. N is the number of records contained in the segment. - let num_records_in_seg = self.daf.read_f64(byte_idx); - - return Ok(( - seg, - SegMetaData { - init_s_past_j2k, - interval_length_s, - rsize: rsize as usize, - num_records_in_seg: num_records_in_seg as usize, - }, - )); - } - Err(AniseError::DAFParserError(format!( - "Could not find segment {}", - seg_target_id - ))) - } - - /// Returns all of the coefficients - pub fn copy_segments( - &self, - seg_target_id: i32, - ) -> Result<(&Segment, SegMetaData, Vec), AniseError> { - let (seg, meta) = self.segment_ptr(seg_target_id)?; - - let mut records = Vec::new(); - - let mut dbl_idx = (seg.start_idx - 1) * DBL_SIZE; - for rnum in (0..meta.num_records_in_seg * meta.rsize).step_by(meta.rsize) { - let mut r_dbl_idx = dbl_idx; - let rcrd_mid_point = parse_bytes_as!( - f64, - &self.daf.bytes[r_dbl_idx..DBL_SIZE + r_dbl_idx], - self.daf.endianness - ); - r_dbl_idx += DBL_SIZE; - let rcrd_radius_s = parse_bytes_as!( - f64, - &self.daf.bytes[r_dbl_idx..DBL_SIZE + r_dbl_idx], - self.daf.endianness - ); - - r_dbl_idx += DBL_SIZE; - - let raw_x_coeffs = &self.daf.bytes[r_dbl_idx..r_dbl_idx + DBL_SIZE * meta.degree()]; - - let x_coeffs: Vec = (0..meta.degree()) - .map(|item| { - parse_bytes_as!( - f64, - raw_x_coeffs[DBL_SIZE * item..DBL_SIZE * (item + 1)], - self.daf.endianness - ) - }) - .collect::<_>(); - r_dbl_idx += DBL_SIZE * meta.degree(); - let raw_y_coeffs = &self.daf.bytes[r_dbl_idx..r_dbl_idx + DBL_SIZE * meta.degree()]; - let y_coeffs: Vec = (0..meta.degree()) - .map(|item| { - parse_bytes_as!( - f64, - raw_y_coeffs[DBL_SIZE * item..DBL_SIZE * (item + 1)], - self.daf.endianness - ) - }) - .collect::<_>(); - r_dbl_idx += DBL_SIZE * meta.degree(); - let raw_z_coeffs = &self.daf.bytes[r_dbl_idx..r_dbl_idx + DBL_SIZE * meta.degree()]; - let z_coeffs: Vec = (0..meta.degree()) - .map(|item| { - parse_bytes_as!( - f64, - raw_z_coeffs[DBL_SIZE * item..DBL_SIZE * (item + 1)], - self.daf.endianness - ) - }) - .collect::<_>(); - - // Prep the data to be exported - let rcrd = Record { - rcrd_mid_point, - rcrd_radius_s, - x_coeffs, - y_coeffs, - z_coeffs, - ..Default::default() - }; - - if rnum == 0 { - info!("[copy_segments] {seg}"); - // The rcrd_radius_s should be a round integer, so let's check that - assert!( - (rcrd_radius_s % rcrd_radius_s.floor()).abs() < EPSILON, - "Record radius is not an integer number of seconds" - ); - } - - records.push(rcrd); - r_dbl_idx += DBL_SIZE * meta.degree(); - dbl_idx = r_dbl_idx; - } - - Ok((seg, meta, records)) - } - - /// Converts the provided SPK to an ANISE file - /// - /// WARNING: The segment name will be automatically switched to the human name of the celestial body - /// from its unspecific "DE-0438LE-0438" if that name can be infered correctly. - pub fn to_anise( - &'a self, - orig_file: &str, - filename: &str, - skip_empty: bool, - check: bool, - ) -> Result<(), AniseError> { - // Start the trajectory file so we can populate the lookup table (LUT) - let mut ctx = AniseContext { - metadata: Metadata { - originator: orig_file, - ..Default::default() - }, - ..Default::default() - }; - - let mut all_intermediate_files = Vec::new(); - - for (idx, seg) in self.segments.iter().enumerate() { - let (seg, meta, records) = self.copy_segments(seg.target_id)?; - if records.len() <= 1 && skip_empty { - warn!("[to_anise] skipping empty {seg}"); - continue; - } - // Some files don't have a useful name in the segments, so we append the target ID in case - let hashed_name = hash(seg.human_name().as_bytes()); - - let degree = (meta.rsize - 2) / 3; - let state_kind = seg.data_type.to_anise_spline_coeff(degree); - - let metadata = SplineMeta { - evenness: Evenness::Even { - duration_ns: ((meta.interval_length_s as f64).seconds()).to_parts().1, - }, - state_kind, - ..Default::default() - }; - - let mut spline_data = Vec::with_capacity(20_000); - - // Build the splines - for record in &records { - // Check that the interval length is indeed twice the radius, this is fixed. - assert_eq!(meta.interval_length_s as f64, 2. * record.rcrd_radius_s); - - for midpoint_byte in record.rcrd_mid_point.to_be_bytes() { - spline_data.push(midpoint_byte); - } - - for coeff in &record.x_coeffs { - for coeffbyte in coeff.to_be_bytes() { - spline_data.push(coeffbyte); - } - } - - for coeff in &record.y_coeffs { - for coeffbyte in coeff.to_be_bytes() { - spline_data.push(coeffbyte); - } - } - for coeff in &record.z_coeffs { - for coeffbyte in coeff.to_be_bytes() { - spline_data.push(coeffbyte); - } - } - - for coeff in &record.vx_coeffs { - for coeffbyte in coeff.to_be_bytes() { - spline_data.push(coeffbyte); - } - } - - for coeff in &record.vy_coeffs { - for coeffbyte in coeff.to_be_bytes() { - spline_data.push(coeffbyte); - } - } - for coeff in &record.vz_coeffs { - for coeffbyte in coeff.to_be_bytes() { - spline_data.push(coeffbyte); - } - } - } - - // Compute the crc32 of this data - let chksum = hash(&spline_data); - // Build the spline struct - let splines = Splines { - metadata, - data_checksum: chksum, - data: &spline_data, - }; - - let parent_ephemeris_hash = hash(Segment::id_to_human_name(seg.center_id)?.as_bytes()); - - // Create the ephemeris - let ephem = Ephemeris { - name: seg.human_name(), - ref_epoch: seg.start_epoch, - backward: false, - interpolation_kind: InterpolationKind::ChebyshevSeries, - parent_ephemeris_hash, - orientation_hash: J2000, - length_unit: LengthUnit::Kilometer, - time_unit: TimeUnit::Second, - splines, - }; - - // Serialize this ephemeris and rebuild the full file in a minute - - let mut buf = Vec::new(); - let fname = format!("{filename}-{idx}-{hashed_name}.tmp"); - all_intermediate_files.push(fname.clone()); - match File::create(fname) { - Ok(mut file) => { - if let Err(e) = ephem.encode_to_vec(&mut buf) { - return Err((InternalErrorKind::from(e)).into()); - } - if let Err(e) = file.write_all(&buf) { - return Err(e.kind().into()); - } - } - Err(e) => { - return Err(AniseError::IOError(e.kind())); - } - } - } - - // Now concat all of the files - let mut all_bufs = Vec::new(); - for fname in &all_intermediate_files { - let bytes = file_mmap!(fname).unwrap(); - all_bufs.push(bytes); - } - - let mut lut_hashes = Vec::new(); - let mut lut_indexes = Vec::new(); - - // Unwrap all of the possibly failing calls because we just created these files so we assume they're valid - for buf in &all_bufs { - let ephem: Ephemeris = match Ephemeris::from_der(buf) { - Ok(it) => it, - Err(err) => return Err(AniseError::DecodingError(err)), - }; - ctx.append_ephemeris_mut(&mut lut_hashes, &mut lut_indexes, ephem)?; - } - - ctx.save_as(filename, true)?; - // And delete the temporary files - for fname in &all_intermediate_files { - remove_file(fname).unwrap(); - } - - // Now, let's load this newly created file and make sure that everything matches - if check { - info!("[to_anise] checking conversion was correct (this will take a while)"); - // Load this ANIS file and make sure that it matches the original data. - let bytes = file_mmap!(filename).unwrap(); - let ctx = AniseContext::from_bytes(&bytes); - // If we skipped empty ephemerides, we can't check the exact length, so skip that - if !skip_empty { - assert_eq!( - ctx.ephemeris_lut.hashes.data.len(), - self.segments.len(), - "Incorrect number of ephem in map" - ); - assert_eq!( - ctx.ephemeris_lut.indexes.data.len(), - self.segments.len(), - "Incorrect number of ephem in map" - ); - } - - for (eidx, ephem) in ctx.ephemeris_data.iter().enumerate() { - let seg_target_id = Segment::human_name_to_id(ephem.name)?; - // Fetch the SPK segment - let (seg, meta, all_seg_data) = self.copy_segments(seg_target_id)?; - if all_seg_data.is_empty() { - continue; - } - - assert_eq!( - seg.start_epoch, - ephem.start_epoch(), - "start epochs differ for {} (eidx = {}): {:E} != {:E}", - ephem.name, - eidx, - seg.start_epoch, - ephem.start_epoch() - ); - - let splines = &ephem.splines; - match splines.metadata.evenness { - Evenness::Even { duration_ns } => { - assert_eq!( - duration_ns, - meta.interval_length_s.seconds().to_parts().1, - "incorrect interval duration" - ); - } - _ => panic!("wrong spline kind"), - }; - - assert_eq!( - splines.metadata.state_kind, - StateKind::Position { - degree: ((meta.rsize - 2) / 3) as u8 - } - ); - assert!(splines.metadata.cov_kind.is_empty()); - - info!( - "[to_anise] metadata OK for {}. Now checking each coefficient.", - ephem.name - ); - - for (sidx, seg_data) in all_seg_data.iter().enumerate() { - for (cidx, x_truth) in seg_data.x_coeffs.iter().enumerate() { - assert_eq!(splines.fetch(sidx, cidx, Field::X)?, *x_truth); - } - - for (cidx, y_truth) in seg_data.y_coeffs.iter().enumerate() { - assert_eq!(splines.fetch(sidx, cidx, Field::Y)?, *y_truth); - } - - for (cidx, z_truth) in seg_data.z_coeffs.iter().enumerate() { - assert_eq!(splines.fetch(sidx, cidx, Field::Z)?, *z_truth); - } - } - - info!("[to_anise] spline data OK for {}.", ephem.name); - } - } - - Ok(()) - } -} - -impl<'a> TryInto> for &'a DAF<'a> { - type Error = AniseError; - - fn try_into(self) -> Result, Self::Error> { - let mut spk = SPK { - // Alloc for conversion of SPICE files is _reasonable_ as it won't be used onboard - segments: Vec::new(), - daf: self, - }; - - // Convert the summaries into segments - for seg_data in self.summaries()? { - let (name, f64_data, int_data) = seg_data; - if f64_data.len() != 2 { - return Err(AniseError::DAFParserError(format!( - "SPK should have exactly two f64 data, found {}", - f64_data.len() - ))); - } - - let start_epoch = Epoch::from_et_seconds(f64_data[0]); - let end_epoch = Epoch::from_et_seconds(f64_data[1]); - - if int_data.len() != 6 { - return Err(AniseError::DAFParserError(format!( - "SPK should have exactly five int data, found {}", - int_data.len() - ))); - } - - let target_id = int_data[0]; - let center_id = int_data[1]; - let frame_id = int_data[2]; - let data_type_i = int_data[3]; - let start_idx = int_data[4] as usize; - let end_idx = int_data[5] as usize; - spk.segments.push(Segment { - name: name.trim(), - start_epoch, - end_epoch, - target_id, - center_id, - frame_id, - data_type: data_type_i.try_into()?, - start_idx, - end_idx, - }); - } - - Ok(spk) - } -} - -impl<'a> fmt::Display for SPK<'a> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - writeln!(f, "{} with segments:", self.daf.idword)?; - for seg in &self.segments { - writeln!(f, "\t{}", seg)?; - } - fmt::Result::Ok(()) - } -} diff --git a/src/naif/spk/segment.rs b/src/naif/spk/segment.rs deleted file mode 100644 index 51e9520f..00000000 --- a/src/naif/spk/segment.rs +++ /dev/null @@ -1,192 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use crate::prelude::AniseError; - -use super::datatype::DataType; -use hifitime::Epoch; -use log::error; -use std::fmt; - -#[derive(Copy, Clone, Debug)] -pub struct SegMetaData { - pub init_s_past_j2k: f64, - pub interval_length_s: f64, - pub rsize: usize, - pub num_records_in_seg: usize, -} - -impl SegMetaData { - /// Returns the degree of this segment. - /// The docs say that the degree has a minus one compared to this formula, but that prevent proper reading of the file. - pub(crate) fn degree(&self) -> usize { - (self.rsize - 2) / 3 - } -} - -#[derive(Debug)] -pub struct Segment<'a> { - pub name: &'a str, - pub start_epoch: Epoch, - pub end_epoch: Epoch, - pub(crate) target_id: i32, - pub(crate) center_id: i32, - pub(crate) frame_id: i32, - pub(crate) data_type: DataType, - pub start_idx: usize, - pub end_idx: usize, -} - -impl<'a> Segment<'a> { - /// Converts the provided ID to its human name. - /// Only works for the common celestial bodies - pub(crate) fn id_to_human_name(id: i32) -> Result<&'a str, AniseError> { - if id % 100 == 99 { - // This is the planet itself - match id / 100 { - 1 => Ok("Mercury"), - 2 => Ok("Venus"), - 3 => Ok("Earth"), - 4 => Ok("Mars"), - 5 => Ok("Jupiter"), - 6 => Ok("Saturn"), - 7 => Ok("Uranus"), - 8 => Ok("Neptune"), - 9 => Ok("Pluto"), - _ => Err(AniseError::DAFParserError(format!( - "Human name unknown for {id}" - ))), - } - } else if id == 301 { - Ok("Luna") - } else if id <= 10 { - // This is the barycenter - match id { - 0 => Ok("Solar System Barycenter"), - 1 => Ok("Mercury"), - 2 => Ok("Venus"), - 3 => Ok("Earth-Moon Barycenter"), - 4 => Ok("Mars Barycenter"), - 5 => Ok("Jupiter Barycenter"), - 6 => Ok("Saturn Barycenter"), - 7 => Ok("Uranus Barycenter"), - 8 => Ok("Neptune Barycenter"), - 9 => Ok("Pluto Barycenter"), - 10 => Ok("Sun"), - _ => Err(AniseError::DAFParserError(format!( - "Human name unknown for barycenter {id}" - ))), - } - } else { - panic!("Human name unknown for {id}"); - } - } - - /// Converts the provided ID to its human name. - /// Only works for the common celestial bodies - pub(crate) fn human_name_to_id(name: &'a str) -> Result { - match name { - "Mercury" => Ok(1), - "Venus" => Ok(2), - "Earth" => Ok(399), - "Mars" => Ok(499), - "Jupiter" => Ok(599), - "Saturn" => Ok(699), - "Uranus" => Ok(799), - "Neptune" => Ok(899), - "Pluto" => Ok(999), - "Luna" => Ok(301), - "Sun" => Ok(10), - "Earth-Moon Barycenter" => Ok(3), - "Mars Barycenter" => Ok(4), - "Jupiter Barycenter" => Ok(5), - "Saturn Barycenter" => Ok(6), - "Uranus Barycenter" => Ok(7), - "Neptune Barycenter" => Ok(8), - "Pluto Barycenter" => Ok(9), - _ => { - error!("[human_name_to_id] unknown NAIF ID for `{name}`"); - todo!() - } - } - } - - /// Returns the human name of this segment if it can be guessed, else the standard name. - /// - /// # Returned value - /// 1. Typically, this will return the name of the celestial body - /// 2. The name is appended with "Barycenter" if the celestial object is know to have moons - /// - /// # Limitations - /// 0. In BSP files, the name is stored as a comment and is unstructured. So it's hard to copy those. (Help needed) - /// 1. One limitation of this approach is that given file may only contain one "Earth" - /// 2. Another limitation is that this code does not know all of the possible moons in the whole solar system. - pub(crate) fn human_name(&self) -> &'a str { - if self.name.starts_with("DE-") { - match Self::id_to_human_name(self.target_id) { - Ok(name) => name, - Err(e) => { - error!("{}", e); - panic!("Human name unknown for {self}") - } - } - } else { - self.name - } - } -} - -impl<'a> Default for Segment<'a> { - fn default() -> Self { - Self { - name: "No name", - start_epoch: Epoch::from_et_seconds(0.0), - end_epoch: Epoch::from_et_seconds(0.0), - target_id: 0, - center_id: 0, - frame_id: 0, - data_type: DataType::ModifiedDifferenceArrays, - start_idx: 0, - end_idx: 0, - } - } -} - -impl<'a> fmt::Display for Segment<'a> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!( - f, - "Segment `{}` (tgt: {}, ctr: {}, frame: {}) of type {:?} from {:E} ({}) to {:E} ({}) [{}..{}]", - self.name, - self.target_id, - self.center_id, - self.frame_id, - self.data_type, - self.start_epoch, - self.start_epoch.to_et_duration().to_seconds(), - self.end_epoch, - self.end_epoch.to_et_duration().to_seconds(), - self.start_idx, - self.end_idx - ) - } -} - -#[derive(Debug, Clone, Default)] -pub struct Record { - pub rcrd_mid_point: f64, - pub rcrd_radius_s: f64, - pub x_coeffs: Vec, - pub y_coeffs: Vec, - pub z_coeffs: Vec, - pub vx_coeffs: Vec, - pub vy_coeffs: Vec, - pub vz_coeffs: Vec, -} diff --git a/src/naif/spk/summary.rs b/src/naif/spk/summary.rs index 5c5e0a22..03de27fb 100644 --- a/src/naif/spk/summary.rs +++ b/src/naif/spk/summary.rs @@ -10,9 +10,13 @@ use core::fmt; use hifitime::Epoch; +use log::error; use zerocopy::FromBytes; -use crate::naif::daf::{NAIFRecord, NAIFSummaryRecord}; +use crate::{ + naif::daf::{NAIFRecord, NAIFSummaryRecord}, + prelude::AniseError, +}; #[derive(Clone, Copy, Debug, Default, FromBytes)] #[repr(C)] @@ -27,31 +31,126 @@ pub struct SPKSummaryRecord { pub end_idx: i32, } -impl SPKSummaryRecord { - pub fn start_epoch(&self) -> Epoch { - Epoch::from_et_seconds(self.start_epoch_et_s) +impl<'a> SPKSummaryRecord { + pub fn spice_name(&self) -> Result<&'a str, AniseError> { + Self::id_to_human_name(self.target_id) } - pub fn end_epoch(&self) -> Epoch { - Epoch::from_et_seconds(self.end_epoch_et_s) + /// Converts the provided ID to its human name. + /// Only works for the common celestial bodies + pub fn id_to_human_name(id: i32) -> Result<&'a str, AniseError> { + if id % 100 == 99 { + // This is the planet itself + match id / 100 { + 1 => Ok("Mercury"), + 2 => Ok("Venus"), + 3 => Ok("Earth"), + 4 => Ok("Mars"), + 5 => Ok("Jupiter"), + 6 => Ok("Saturn"), + 7 => Ok("Uranus"), + 8 => Ok("Neptune"), + 9 => Ok("Pluto"), + _ => Err(AniseError::DAFParserError(format!( + "Human name unknown for {id}" + ))), + } + } else if id == 301 { + Ok("Moon") + } else if id <= 10 { + // This is the barycenter + match id { + 0 => Ok("Solar System Barycenter"), + 1 => Ok("Mercury"), + 2 => Ok("Venus"), + 3 => Ok("Earth-Moon Barycenter"), + 4 => Ok("Mars Barycenter"), + 5 => Ok("Jupiter Barycenter"), + 6 => Ok("Saturn Barycenter"), + 7 => Ok("Uranus Barycenter"), + 8 => Ok("Neptune Barycenter"), + 9 => Ok("Pluto Barycenter"), + 10 => Ok("Sun"), + _ => Err(AniseError::DAFParserError(format!( + "Human name unknown for barycenter {id}" + ))), + } + } else { + panic!("Human name unknown for {id}"); + } } - pub fn start_index(&self) -> usize { - self.start_idx as usize + + /// Converts the provided ID to its human name. + /// Only works for the common celestial bodies + pub fn human_name_to_id(name: &'a str) -> Result { + match name { + "Mercury" => Ok(1), + "Venus" => Ok(2), + "Earth" => Ok(399), + "Mars" => Ok(499), + "Jupiter" => Ok(599), + "Saturn" => Ok(699), + "Uranus" => Ok(799), + "Neptune" => Ok(899), + "Pluto" => Ok(999), + "Luna" => Ok(301), + "Sun" => Ok(10), + "Earth-Moon Barycenter" => Ok(3), + "Mars Barycenter" => Ok(4), + "Jupiter Barycenter" => Ok(5), + "Saturn Barycenter" => Ok(6), + "Uranus Barycenter" => Ok(7), + "Neptune Barycenter" => Ok(8), + "Pluto Barycenter" => Ok(9), + _ => { + error!("[human_name_to_id] unknown NAIF ID for `{name}`"); + todo!() + } + } } - pub fn end_index(&self) -> usize { - self.end_idx as usize + + /// Returns the human name of this segment if it can be guessed, else the standard name. + /// + /// # Returned value + /// 1. Typically, this will return the name of the celestial body + /// 2. The name is appended with "Barycenter" if the celestial object is know to have moons + /// + /// # Limitations + /// 0. In BSP files, the name is stored as a comment and is unstructured. So it's hard to copy those. (Help needed) + /// 1. One limitation of this approach is that given file may only contain one "Earth" + /// 2. Another limitation is that this code does not know all of the possible moons in the whole solar system. + pub(crate) fn human_name(&self) -> &'a str { + match Self::id_to_human_name(self.target_id) { + Ok(name) => name, + Err(e) => { + error!("{}", e); + panic!("Human name unknown for {self}") + } + } } } impl NAIFRecord for SPKSummaryRecord {} impl NAIFSummaryRecord for SPKSummaryRecord { - fn start_idx(&self) -> usize { + fn start_index(&self) -> usize { self.start_idx as usize } - fn end_idx(&self) -> usize { + fn end_index(&self) -> usize { self.end_idx as usize } + + fn start_epoch(&self) -> Epoch { + Epoch::from_et_seconds(self.start_epoch_et_s) + } + + fn end_epoch(&self) -> Epoch { + Epoch::from_et_seconds(self.end_epoch_et_s) + } + + fn id(&self) -> i32 { + self.target_id + } } impl fmt::Display for SPKSummaryRecord { diff --git a/src/context/append.rs b/src/structure/append.rs similarity index 95% rename from src/context/append.rs rename to src/structure/append.rs index 3c7ee0ef..f93e3a17 100644 --- a/src/context/append.rs +++ b/src/structure/append.rs @@ -14,11 +14,11 @@ use crate::structure::orientation::Orientation; use crate::HashType; use crate::{ errors::{AniseError, InternalErrorKind}, - structure::{context::AniseContext, ephemeris::Ephemeris, MAX_TRAJECTORIES}, + structure::{dataset::DataSet, ephemeris::Ephemeris, MAX_TRAJECTORIES}, }; use crc32fast::hash; -impl<'a> AniseContext<'a> { +impl<'a> DataSet<'a> { /// Appends the provided ephemeris to this context /// /// # Implementation details @@ -35,7 +35,7 @@ impl<'a> AniseContext<'a> { e: Ephemeris<'a>, ) -> Result { let new_hash = hash(e.name.as_bytes()); - if let Ok(self_idx) = self.ephemeris_lut.index_for_hash(&new_hash) { + if let Ok(self_idx) = self.lut.index_for_hash(&new_hash) { if self .ephemeris_data .get(self_idx.into()) @@ -69,7 +69,7 @@ impl<'a> AniseContext<'a> { lut_hashes.push(new_hash); // Push the index too - lut_indexes.push((self.ephemeris_lut.indexes.len()).try_into().unwrap()); + lut_indexes.push((self.lut.indexes.len()).try_into().unwrap()); // Add the ephemeris data self.ephemeris_data .add(e) diff --git a/src/structure/constants/mod.rs b/src/structure/constants/mod.rs index 283e0ed6..3d780224 100644 --- a/src/structure/constants/mod.rs +++ b/src/structure/constants/mod.rs @@ -8,9 +8,7 @@ * Documentation: https://nyxspace.com/ */ -pub mod planetary; -pub mod spacecraft; pub mod ellipsoid; +pub mod planetary; pub use planetary::*; -pub use spacecraft::*; diff --git a/src/structure/context.rs b/src/structure/context.rs deleted file mode 100644 index 34733768..00000000 --- a/src/structure/context.rs +++ /dev/null @@ -1,80 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ -use der::{asn1::SequenceOf, Decode, Encode, Reader, Writer}; - -use super::{ - constants::{PlanetaryConstants, SpacecraftConstants}, - ephemeris::Ephemeris, - lookuptable::LookUpTable, - metadata::Metadata, - orientation::Orientation, - MAX_TRAJECTORIES, -}; - -/// A Context is the core structure which stores all of the ANISE data. -/// All of the data stored in the context can be written to disk and read in the exact same way regardless of the endianness -/// of the platform in which the data is written or read. This is guaranteed thanks to the use of the ISO certified ASN1 Distinguished -/// Encoding Rules (DER). -/// -/// # Design considerations -/// ## Requirements -/// Here are the requirements this context fulfils: -/// 1. Memory-mappable data, i.e. does not require any memory allocation for loading a file. -/// 2. Endianness agnostic: data shall be read in the same way regardless of the endianness of the platform on which it was serialized or on which it is read -/// 3. Small size (ANISE are about 5.5% _smaller_ than their equivalent SPICE BSP files) -/// 4. Specification enabled out-of-the-box parsing by other programs (SPICE files are notoriously non-trivial to parse) -#[derive(Clone, Default)] -pub struct AniseContext<'a> { - pub metadata: Metadata<'a>, - /// Ephemeris LookUpTable (LUT) stores the mapping between a given ephemeris' hash and its index in the ephemeris list. - pub ephemeris_lut: LookUpTable<'a>, - /// Orientation LookUpTable (LUT) stores the mapping between a given orientation's hash and its index in the ephemeris list. - pub orientation_lut: LookUpTable<'a>, - /// Spacecraft constants LookUpTable (LUT) stores the mapping between a given spacecraft's hash and its index in the ephemeris list. - pub spacecraft_constant_lut: LookUpTable<'a>, - /// Planetary constants LookUpTable (LUT) stores the mapping between a given planetary data's hash and its index in the ephemeris list. - pub planetary_constant_lut: LookUpTable<'a>, - /// List of ephemerides in this file, whose index is stored in the LUT. - pub ephemeris_data: SequenceOf, MAX_TRAJECTORIES>, - // Orientation data, both for planetary constant data and high precision orientation data - pub orientation_data: SequenceOf, MAX_TRAJECTORIES>, - /// List of spacecraft constants in this file, whose index is stored in the LUT. - pub spacecraft_constant_data: SequenceOf, MAX_TRAJECTORIES>, - /// List of spacecraft constants in this file, whose index is stored in the LUT. - pub planetary_constant_data: SequenceOf, MAX_TRAJECTORIES>, -} - -impl<'a> Encode for AniseContext<'a> { - fn encoded_len(&self) -> der::Result { - self.metadata.encoded_len()? - + self.ephemeris_lut.encoded_len()? - + self.orientation_lut.encoded_len()? - + self.ephemeris_data.encoded_len()? - } - - fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { - self.metadata.encode(encoder)?; - self.ephemeris_lut.encode(encoder)?; - self.orientation_lut.encode(encoder)?; - self.ephemeris_data.encode(encoder) - } -} - -impl<'a> Decode<'a> for AniseContext<'a> { - fn decode>(decoder: &mut R) -> der::Result { - Ok(Self { - metadata: decoder.decode()?, - ephemeris_lut: decoder.decode()?, - orientation_lut: decoder.decode()?, - ephemeris_data: decoder.decode()?, - ..Default::default() - }) - } -} diff --git a/src/structure/dataset.rs b/src/structure/dataset.rs new file mode 100644 index 00000000..acc9694c --- /dev/null +++ b/src/structure/dataset.rs @@ -0,0 +1,46 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ +use der::{asn1::SequenceOf, Decode, Encode, Reader, Writer}; + +use super::{lookuptable::LookUpTable, metadata::Metadata, records::Record}; + +pub const MAX_RECORDS: usize = 32; + +/// A DataSet is the core structure shared by all ANISE binary data. +#[derive(Clone, Default)] +pub struct DataSet<'a, R: Record<'a>> { + pub metadata: Metadata<'a>, + /// All datasets have LookUpTable (LUT) that stores the mapping between a key and its index in the ephemeris list. + pub lut: LookUpTable<'a>, + /// All datasets have up Records that store the actual data. + pub data: SequenceOf, +} + +impl<'a, R: Record<'a>> Encode for DataSet<'a, R> { + fn encoded_len(&self) -> der::Result { + self.metadata.encoded_len()? + self.lut.encoded_len()? + self.data.encoded_len()? + } + + fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { + self.metadata.encode(encoder)?; + self.lut.encode(encoder)?; + self.data.encode(encoder) + } +} + +impl<'a, R: Record<'a>> Decode<'a> for DataSet<'a, R> { + fn decode>(decoder: &mut D) -> der::Result { + Ok(Self { + metadata: decoder.decode()?, + lut: decoder.decode()?, + data: decoder.decode()?, + }) + } +} diff --git a/src/structure/ephemeris.rs b/src/structure/ephemeris.rs index 9fcc196a..f60be17d 100644 --- a/src/structure/ephemeris.rs +++ b/src/structure/ephemeris.rs @@ -10,7 +10,7 @@ use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; use hifitime::Epoch; -use crate::HashType; +use crate::NaifId; use super::{ common::InterpolationKind, @@ -23,8 +23,8 @@ pub struct Ephemeris<'a> { pub name: &'a str, pub ref_epoch: Epoch, pub backward: bool, - pub parent_ephemeris_hash: HashType, - pub orientation_hash: HashType, + pub parent_ephemeris_hash: NaifId, + pub orientation_hash: NaifId, pub interpolation_kind: InterpolationKind, /// Answer the question: What distance unit is the output of the interpolation data for distances? E.g. kilometer (default) pub length_unit: LengthUnit, diff --git a/src/context/rename.rs b/src/structure/integrity.rs similarity index 67% rename from src/context/rename.rs rename to src/structure/integrity.rs index 4328be4d..12c7f034 100644 --- a/src/context/rename.rs +++ b/src/structure/integrity.rs @@ -8,13 +8,15 @@ * Documentation: https://nyxspace.com/ */ -use crate::structure::context::AniseContext; +use log::error; + +use crate::{ + errors::{AniseError, IntegrityErrorKind}, + structure::dataset::AniseContext, +}; impl<'a> AniseContext<'a> { - pub fn rename_ephemeris_traj_mut(&mut self) { - todo!() - } - pub fn rename_orientation_traj_mut(&mut self) { - todo!() + pub fn check_integrity(&self) -> Result<(), AniseError> { + Ok(()) } } diff --git a/src/context/load.rs b/src/structure/load.rs similarity index 96% rename from src/context/load.rs rename to src/structure/load.rs index 9bd553ae..5a11995b 100644 --- a/src/context/load.rs +++ b/src/structure/load.rs @@ -12,10 +12,10 @@ use crate::der::Decode; use crate::log::{error, trace}; use crate::{ errors::AniseError, - structure::{context::AniseContext, semver::Semver, ANISE_VERSION}, + structure::{dataset::DataSet, semver::Semver, ANISE_VERSION}, }; -impl<'a> AniseContext<'a> { +impl<'a> DataSet<'a> { /// Try to load an Anise file from a pointer of bytes pub fn try_from_bytes(bytes: &'a [u8]) -> Result { match Self::from_der(bytes) { diff --git a/src/structure/lookuptable.rs b/src/structure/lookuptable.rs index 7a0e2048..44734d76 100644 --- a/src/structure/lookuptable.rs +++ b/src/structure/lookuptable.rs @@ -8,12 +8,12 @@ * Documentation: https://nyxspace.com/ */ use crc32fast::hash; -use der::{asn1::SequenceOf, Decode, Encode, Reader, Writer}; +use der::{Decode, Encode, Reader, Writer}; use log::error; -use crate::{prelude::AniseError, HashType}; +use crate::{prelude::AniseError, NaifId}; -use super::{array::DataArray, MAX_TRAJECTORIES}; +use super::array::DataArray; /// A LookUpTable allows looking up the data given the hash. /// @@ -24,14 +24,15 @@ use super::{array::DataArray, MAX_TRAJECTORIES}; #[derive(Clone, Default, PartialEq, Eq)] pub struct LookUpTable<'a> { /// Hashes of the general hashing algorithm - // pub hashes: SequenceOf, - pub hashes: DataArray<'a, HashType>, + pub hashes: DataArray<'a, NaifId>, /// Corresponding index for each hash - // pub indexes: SequenceOf, pub indexes: DataArray<'a, u16>, } impl<'a> LookUpTable<'a> { + pub const fn len(&self) -> usize { + self.indexes.len() + } /// Searches the lookup table for the requested hash /// Returns Ok with the index for the requested hash /// Returns Err with an ItemNotFound if the item isn't found @@ -39,7 +40,7 @@ impl<'a> LookUpTable<'a> { /// /// NOTE: Until https://github.com/anise-toolkit/anise.rs/issues/18 is addressed /// this function has a time complexity of O(N) - pub fn index_for_hash(&self, hash: &HashType) -> Result { + pub fn index_for_hash(&self, hash: &NaifId) -> Result { for (idx, item) in self.hashes.data.iter().enumerate() { if item == hash { return match self.indexes.data.get(idx) { @@ -63,7 +64,8 @@ impl<'a> LookUpTable<'a> { /// NOTE: Until https://github.com/anise-toolkit/anise.rs/issues/18 is addressed /// this function has a time complexity of O(N) pub fn index_for_key(&self, key: &str) -> Result { - self.index_for_hash(&hash(key.as_bytes())) + // self.index_for_hash(&hash(key.as_bytes())) + todo!() } } diff --git a/src/structure/metadata.rs b/src/structure/metadata.rs index def4dcec..d96b56e7 100644 --- a/src/structure/metadata.rs +++ b/src/structure/metadata.rs @@ -7,8 +7,8 @@ * * Documentation: https://nyxspace.com/ */ +use core::fmt; use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; - use hifitime::Epoch; use super::{semver::Semver, ANISE_VERSION}; @@ -62,3 +62,28 @@ impl<'a> Decode<'a> for Metadata<'a> { }) } } + +impl<'a> fmt::Display for Metadata<'a> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + writeln!(f, "ANISE version {}", self.anise_version)?; + writeln!( + f, + "Originator: {}", + if self.originator.is_empty() { + "(not set)" + } else { + self.originator + } + )?; + writeln!(f, "Creation date: {}", self.creation_date)?; + writeln!( + f, + "Metadata URI: {}", + if self.metadata_uri.is_empty() { + "(not set)" + } else { + self.metadata_uri + } + ) + } +} diff --git a/src/structure/mod.rs b/src/structure/mod.rs index 75973970..59a27a74 100644 --- a/src/structure/mod.rs +++ b/src/structure/mod.rs @@ -17,11 +17,12 @@ extern crate hifitime; pub mod array; pub mod common; pub mod constants; -pub mod context; +pub mod dataset; pub mod ephemeris; pub mod lookuptable; pub mod metadata; pub mod orientation; +pub mod records; pub mod semver; pub mod spline; pub mod units; diff --git a/src/structure/orientation/mod.rs b/src/structure/orientation/mod.rs index b7232414..582ab9c2 100644 --- a/src/structure/orientation/mod.rs +++ b/src/structure/orientation/mod.rs @@ -9,7 +9,7 @@ */ use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; -use crate::HashType; +use crate::NaifId; pub const MAX_NUT_PREC_ANGLES: usize = 16; use self::orient_data::OrientationData; @@ -21,7 +21,7 @@ pub mod trigangle; #[derive(Clone, Debug, PartialEq)] pub struct Orientation<'a> { pub name: &'a str, - pub parent_orientation_hash: HashType, + pub parent_orientation_hash: NaifId, pub orientation_data: OrientationData<'a>, } diff --git a/src/structure/records/mod.rs b/src/structure/records/mod.rs new file mode 100644 index 00000000..a20f8b6b --- /dev/null +++ b/src/structure/records/mod.rs @@ -0,0 +1,21 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ +use der::{Decode, Encode}; + +use crate::prelude::AniseError; + +pub trait Record<'a>: Encode + Decode<'a> { + /// Returns whether or not the integrity of the data is correct. + fn check_integrity(&self) -> Result<(), AniseError> { + Ok(()) + } +} + +pub mod spacecraft; diff --git a/src/structure/constants/spacecraft.rs b/src/structure/records/spacecraft.rs similarity index 98% rename from src/structure/constants/spacecraft.rs rename to src/structure/records/spacecraft.rs index f7698acc..6254f432 100644 --- a/src/structure/constants/spacecraft.rs +++ b/src/structure/records/spacecraft.rs @@ -9,10 +9,10 @@ */ use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; -use crate::HashType; +use crate::NaifId; /// Spacecraft constants can store the same spacecraft constant data as the CCSDS Orbit Parameter Message (OPM) and CCSDS Attitude Parameter Messages (APM) -#[derive(Copy, Clone, Debug, PartialEq)] +#[derive(Copy, Clone, Default, Debug, PartialEq)] pub struct SpacecraftConstants<'a> { /// Name is used as the input for the hashing function pub name: &'a str, @@ -153,7 +153,7 @@ impl<'a> Decode<'a> for DragData { #[derive(Copy, Clone, Debug, PartialEq)] pub struct InertiaTensor { /// Inertia tensor reference frame hash - pub orientation_hash: HashType, + pub orientation_hash: NaifId, /// Moment of inertia about the 1-axis pub i_11_kgm2: f64, /// Moment of inertia about the 2-axis diff --git a/src/context/save.rs b/src/structure/save.rs similarity index 78% rename from src/context/save.rs rename to src/structure/save.rs index ca51d533..4672c4f9 100644 --- a/src/context/save.rs +++ b/src/structure/save.rs @@ -8,22 +8,20 @@ * Documentation: https://nyxspace.com/ */ -use crate::{ - structure::context::AniseContext, - errors::{AniseError, InternalErrorKind}, -}; -use der::Encode; +use crate::errors::{AniseError, InternalErrorKind}; +use der::{Decode, Encode}; use log::warn; use std::fs::File; use std::io::Write; use std::path::Path; -impl<'a> AniseContext<'a> { +/// A trait to encode / decode ANISE specific data. +pub trait Asn1Serde<'a>: Encode + Decode<'a> { /// Saves this context in the providef filename. /// If overwrite is set to false, and the filename already exists, this function will return an error. /// /// TODO: This function should only be available with the alloc feature gate. - pub fn save_as(&self, filename: &'a str, overwrite: bool) -> Result<(), AniseError> { + fn save_as(&self, filename: &'a str, overwrite: bool) -> Result<(), AniseError> { match self.encoded_len() { Err(e) => Err(AniseError::InternalError(e.into())), Ok(length) => { @@ -37,7 +35,7 @@ impl<'a> AniseContext<'a> { /// Saves this context in the providef filename. /// If overwrite is set to false, and the filename already exists, this function will return an error. - pub fn save_as_via_buffer( + fn save_as_via_buffer( &self, filename: &'a str, overwrite: bool, @@ -65,4 +63,12 @@ impl<'a> AniseContext<'a> { Err(e) => Err(e.kind().into()), } } + + /// Attempts to load this data from its bytes + fn try_from_bytes(bytes: &'a [u8]) -> Result { + match Self::from_der(bytes) { + Ok(yay) => Ok(yay), + Err(e) => Err(AniseError::DecodingError(e)), + } + } } diff --git a/src/structure/semver.rs b/src/structure/semver.rs index ca8b52ab..6a7297be 100644 --- a/src/structure/semver.rs +++ b/src/structure/semver.rs @@ -7,6 +7,7 @@ * * Documentation: https://nyxspace.com/ */ +use core::fmt; use der::{asn1::OctetStringRef, Decode, Encode, Error, ErrorKind, Length, Reader, Writer}; /// Semantic versioning is used throughout ANISE @@ -52,3 +53,13 @@ impl<'a> Decode<'a> for Semver { }) } } + +impl fmt::Display for Semver { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + writeln!( + f, + "ANISE version {}.{}.{}", + self.major, self.minor, self.patch + ) + } +} diff --git a/tests/astro/mod.rs b/tests/astro/mod.rs index 2d79e173..9c11bfa5 100644 --- a/tests/astro/mod.rs +++ b/tests/astro/mod.rs @@ -1 +1 @@ -mod orbit; +// mod orbit; diff --git a/tests/astro/orbit.rs b/tests/astro/orbit.rs index 463769fc..da176aa0 100644 --- a/tests/astro/orbit.rs +++ b/tests/astro/orbit.rs @@ -22,7 +22,7 @@ macro_rules! f64_eq { fn state_def_circ_inc() { let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let ctx = DataSet::try_from_bytes(&buf).unwrap(); let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); @@ -130,7 +130,7 @@ fn state_def_circ_inc() { fn state_def_elliptical() { let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let ctx = DataSet::try_from_bytes(&buf).unwrap(); let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); @@ -220,7 +220,7 @@ fn state_def_elliptical() { fn state_def_circ_eq() { let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let ctx = DataSet::try_from_bytes(&buf).unwrap(); let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); @@ -308,7 +308,7 @@ fn state_def_circ_eq() { fn state_def_equatorial() { let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let ctx = DataSet::try_from_bytes(&buf).unwrap(); let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); @@ -336,7 +336,7 @@ fn state_def_equatorial() { fn state_def_reciprocity() { let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let ctx = DataSet::try_from_bytes(&buf).unwrap(); let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); @@ -410,7 +410,7 @@ fn state_def_reciprocity() { fn geodetic_vallado() { let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let ctx = DataSet::try_from_bytes(&buf).unwrap(); let eme2k = ctx.geodetic_frame("Earth", "J2000").unwrap(); @@ -471,7 +471,7 @@ fn geodetic_vallado() { fn with_init() { let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let ctx = DataSet::try_from_bytes(&buf).unwrap(); let eme2k = ctx.celestial_frame("Earth", "J2000").unwrap(); diff --git a/tests/ephemerides/parent_translation_verif.rs b/tests/ephemerides/parent_translation_verif.rs index 895eaeb3..4e840ee2 100644 --- a/tests/ephemerides/parent_translation_verif.rs +++ b/tests/ephemerides/parent_translation_verif.rs @@ -21,10 +21,9 @@ fn de438s_parent_translation_verif() { println!("could not init env_logger"); } - // "Load" the file via a memory map (avoids allocations) - let path = "./data/de438s.anise"; - let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let bytes = file_mmap!("data/de438s.bsp").unwrap(); + let de438s = SPK::parse(&bytes).unwrap(); + let ctx = Context::from_spk(&de438s).unwrap(); let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); diff --git a/tests/ephemerides/paths.rs b/tests/ephemerides/paths.rs index 1e713e70..ed3bcf19 100644 --- a/tests/ephemerides/paths.rs +++ b/tests/ephemerides/paths.rs @@ -8,72 +8,12 @@ * Documentation: https://nyxspace.com/ */ -use core::f64::EPSILON; +use std::str::FromStr; use anise::constants::celestial_objects::{EARTH_MOON_BARYCENTER, SOLAR_SYSTEM_BARYCENTER}; use anise::constants::frames::*; -use anise::constants::orientations::J2000; -use anise::prelude::Frame; +use anise::file_mmap; use anise::prelude::*; -use anise::{file_mmap, prelude::AniseContext}; - -/// Tests the ephemeris computations from the de438s which don't require any frame transformation. -#[test] -fn zero_translations() { - if pretty_env_logger::try_init().is_err() { - println!("could not init env_logger"); - } - - // Check that this test works for DE421, DE430, DE438s (short), and DE440 - for path in [ - "./data/de421.anise", - "./data/de430.anise", - "./data/de438s.anise", - "./data/de440.anise", - ] { - // "Load" the file via a memory map (avoids allocations) - let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); - - // We know that these ephemerides files has exactly 14 ephemerides. - assert_eq!( - ctx.ephemeris_lut.hashes.data.len(), - 12, - "DE438s should have 12 ephemerides" - ); - - // For all of the frames in this context, let's make sure that the translation between the same frames is always zero. - for ephemeris_hash in ctx.ephemeris_lut.hashes.data.iter() { - // Build a J2000 oriented frame with this ephemeris center - let this_frame_j2k = Frame::from_ephem_orient(*ephemeris_hash, J2000); - - // Check that the common root between the same frame is that frame's hash. - let root_ephem = ctx - .common_ephemeris_path(this_frame_j2k, this_frame_j2k) - .unwrap() - .2; - - assert_eq!(root_ephem, *ephemeris_hash); - - // Check that in these cases, the translation returns a zero vector in position and in velocity. - - let delta_state = ctx - .translate_from_to_km_s( - this_frame_j2k, - this_frame_j2k, - Epoch::now().unwrap(), - Aberration::None, - ) - .unwrap(); - assert!(delta_state.rmag_km() < EPSILON); - assert!(delta_state.vmag_km_s() < EPSILON); - assert!(delta_state.acceleration_km_s2.unwrap().norm() < EPSILON); - } - } - - // ctx.lt_translate_from_to(Earth, Moon, epoch, LTCorr) -> position and velocity of the Earth with respect to the Moon with light time correction at epoch - // ctx.rotate_to_from() -> quaternion -} /// Tests that direct path computations match what SPICE returned to within good precision. #[test] @@ -82,19 +22,19 @@ fn common_root_verif() { println!("could not init env_logger"); } + // SLS Launch epoch!!! IT'S LIIIIVEE!! + let epoch = Epoch::from_str("2022-11-15T23:47:36 +06:00").unwrap(); + // Load the context // Check that this test works for DE430, DE438s (short), and DE440 - for path in [ - "./data/de430.anise", - "./data/de438s.anise", - "./data/de440.anise", - ] { + for path in ["./data/de430.bsp", "./data/de438s.bsp", "./data/de440.bsp"] { let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let spk = SPK::parse(&buf).unwrap(); + let ctx = Context::from_spk(&spk).unwrap(); // The root of all these files should be the SSB assert_eq!( - ctx.try_find_context_root().unwrap(), + ctx.try_find_context_center().unwrap(), SOLAR_SYSTEM_BARYCENTER ); @@ -110,14 +50,14 @@ fn common_root_verif() { PLUTO_BARYCENTER_J2000, ] { assert_eq!( - ctx.common_ephemeris_path(*planet_ctr, LUNA_J2000) + ctx.common_ephemeris_path(*planet_ctr, LUNA_J2000, epoch) .unwrap() .2, SOLAR_SYSTEM_BARYCENTER ); assert_eq!( - ctx.common_ephemeris_path(LUNA_J2000, *planet_ctr) + ctx.common_ephemeris_path(LUNA_J2000, *planet_ctr, epoch) .unwrap() .2, SOLAR_SYSTEM_BARYCENTER @@ -126,13 +66,13 @@ fn common_root_verif() { // Common root between Earth and Moon should be EMB assert_eq!( - ctx.common_ephemeris_path(LUNA_J2000, EARTH_J2000) + ctx.common_ephemeris_path(LUNA_J2000, EARTH_J2000, epoch) .unwrap() .2, EARTH_MOON_BARYCENTER ); assert_eq!( - ctx.common_ephemeris_path(EARTH_J2000, LUNA_J2000) + ctx.common_ephemeris_path(EARTH_J2000, LUNA_J2000, epoch) .unwrap() .2, EARTH_MOON_BARYCENTER @@ -140,13 +80,13 @@ fn common_root_verif() { // Common root between EMB and Moon should be EMB assert_eq!( - ctx.common_ephemeris_path(LUNA_J2000, EARTH_MOON_BARYCENTER_J2000) + ctx.common_ephemeris_path(LUNA_J2000, EARTH_MOON_BARYCENTER_J2000, epoch) .unwrap() .2, EARTH_MOON_BARYCENTER ); assert_eq!( - ctx.common_ephemeris_path(EARTH_MOON_BARYCENTER_J2000, LUNA_J2000) + ctx.common_ephemeris_path(EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, epoch) .unwrap() .2, EARTH_MOON_BARYCENTER diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 996feae2..f53d93d6 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -27,7 +27,8 @@ fn de438s_translation_verif_venus2emb() { // "Load" the file via a memory map (avoids allocations) let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let spk = SPK::parse(&buf).unwrap(); + let ctx = Context::from_spk(&spk).unwrap(); let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); @@ -42,7 +43,7 @@ fn de438s_translation_verif_venus2emb() { */ dbg!(ctx - .common_ephemeris_path(VENUS_J2000, EARTH_MOON_BARYCENTER_J2000) + .common_ephemeris_path(VENUS_J2000, EARTH_MOON_BARYCENTER_J2000, epoch) .unwrap()); let state = ctx @@ -113,7 +114,8 @@ fn de438s_translation_verif_venus2luna() { // "Load" the file via a memory map (avoids allocations) let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let spk = SPK::parse(&buf).unwrap(); + let ctx = Context::from_spk(&spk).unwrap(); let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); @@ -207,7 +209,8 @@ fn de438s_translation_verif_emb2luna() { // "Load" the file via a memory map (avoids allocations) let path = "./data/de438s.anise"; let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::try_from_bytes(&buf).unwrap(); + let spk = SPK::parse(&buf).unwrap(); + let ctx = Context::from_spk(&spk).unwrap(); let epoch = Epoch::from_gregorian_utc_at_midnight(2002, 2, 7); @@ -301,6 +304,7 @@ fn de438s_translation_verif_emb2luna() { #[ignore] #[cfg(feature = "std")] fn validate_jplde_translation() { + use anise::naif::daf::NAIFSummaryRecord; use anise::prelude::Frame; use arrow::array::{ArrayRef, Float64Array, StringArray, UInt8Array}; use arrow::datatypes::{DataType, Field, Schema}; @@ -353,25 +357,27 @@ fn validate_jplde_translation() { let mut writer = ArrowWriter::try_new(file, Arc::new(schema), Some(props)).unwrap(); for de_name in &["de438s", "de440"] { + let path = format!("data/{de_name}.bsp"); // SPICE load - spice::furnsh(&format!("data/{de_name}.bsp")); + spice::furnsh(&path); // ANISE load - let path = format!("./data/{de_name}.anise"); let buf = file_mmap!(path).unwrap(); - let ctx = AniseContext::from_bytes(&buf); + let spk = SPK::parse(&buf).unwrap(); + let ctx = Context::from_spk(&spk).unwrap(); - for (idx1, ephem1) in ctx.ephemeris_data.iter().enumerate() { - let j2000_ephem1 = - Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.data.get(idx1).unwrap()); + // We only have one SPK loaded, so we know what summary to go through + let first_spk = ctx.spk_data[0].unwrap(); - for (idx2, ephem2) in ctx.ephemeris_data.iter().enumerate() { - if ephem1 == ephem2 { + for ephem1 in first_spk.data_summaries { + let j2000_ephem1 = Frame::from_ephem_j2000(ephem1.target_id); + + for ephem2 in first_spk.data_summaries { + if ephem1.target_id == ephem2.target_id { continue; } - let j2000_ephem2 = - Frame::from_ephem_j2000(*ctx.ephemeris_lut.hashes.data.get(idx2).unwrap()); + let j2000_ephem2 = Frame::from_ephem_j2000(ephem2.target_id); // Query the ephemeris data for a bunch of different times. let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { @@ -452,17 +458,11 @@ fn validate_jplde_translation() { Ok(state) => { // Perform the same query in SPICE let (spice_state, _) = spice::spkezr( - match ephem1.name { - "Luna" => "Moon", - _ => ephem1.name, - }, + ephem1.spice_name().unwrap(), epoch.to_et_seconds(), "J2000", "NONE", - match ephem2.name { - "Luna" => "Moon", - _ => ephem2.name, - }, + ephem2.spice_name().unwrap(), ); // Check component by component instead of rebuilding a Vector3 from the SPICE data @@ -520,11 +520,7 @@ fn validate_jplde_translation() { batch_src_frm.push(j2000_ephem1.to_string()); batch_dest_frm.push(j2000_ephem2.to_string()); batch_comp.push(component[i]); - batch_hops.push( - ctx.common_ephemeris_path(j2000_ephem1, j2000_ephem2) - .unwrap() - .0 as u8, - ); + batch_hops.push(0); // TODO: Fix this batch_mean.push(means[i].get()); batch_min.push(mins[i].get()); batch_max.push(maxes[i].get()); diff --git a/tests/lib.rs b/tests/lib.rs index e1359772..1fcc867c 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -8,50 +8,8 @@ * Documentation: https://nyxspace.com/ */ -use anise::structure::{ - array::DataArray, - orientation::{orient_data::OrientationData, phaseangle::PhaseAngle, trigangle::TrigAngle}, -}; -use der::asn1::SequenceOf; - #[macro_use] extern crate approx; mod astro; mod ephemerides; mod frames; - -#[test] -fn size_test() { - use anise::file_mmap; - use anise::prelude::*; - - // let path = "./data/de438s.anise"; - // let buf = file_mmap!(path).unwrap(); - // let ctx = AniseContext::try_from_bytes(&buf).unwrap(); - let ctx = AniseContext::default(); - - use std::mem::size_of_val; - let s: u32 = 45; - println!("str = {}", size_of_val(&s)); - println!("tot = {}", size_of_val(&ctx)); - println!("lut = {}", size_of_val(&ctx.ephemeris_lut)); - println!("ephem = {}", size_of_val(&ctx.ephemeris_data)); - println!("orient = {}", size_of_val(&ctx.orientation_data)); - println!("sc = {}", size_of_val(&ctx.spacecraft_constant_data)); - println!("pl = {}", size_of_val(&ctx.planetary_constant_data)); - // let pa = PhaseAngle { - // offset_deg: 0.0, - // rate_deg: 0.0, - // accel_deg: 0.0, - // }; - // println!("pa = {}", size_of_val(&pa)); - - // let ta = TrigAngle { - // right_ascension_deg: 0.0, - // declination_deg: 0.0, - // prime_meridian_deg: 0.0, - // nut_prec_angle: pa, - // }; - - // println!("ta = {}", size_of_val(&ta)); -} diff --git a/tests/naif.rs b/tests/naif.rs index 86a0a8c2..b2334e44 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -8,7 +8,6 @@ * Documentation: https://nyxspace.com/ */ -use core::convert::TryInto; use std::mem::size_of_val; use anise::{ @@ -16,16 +15,10 @@ use anise::{ naif::{ daf::DAF, pck::BPCSummaryRecord, - spk::{ - recordtypes::{ChebyshevSetType2Type3, Type2ChebyshevRecord}, - summary::SPKSummaryRecord, - SPK, - }, - Endian, SpiceContext, + spk::{datatypes::Type2ChebyshevSet, summary::SPKSummaryRecord}, + Endian, }, prelude::*, - structure::context::AniseContext, - structure::spline::{Evenness, Field, StateKind}, }; #[test] @@ -66,6 +59,8 @@ fn test_spk_load_bytes() { assert_eq!(de421.daf_summary.next_record(), 0); assert_eq!(de421.daf_summary.prev_record(), 0); + println!("{}", de421.comments().unwrap()); + // From Python jplephem, an inspection of the coefficients of the DE421 file shows the number of segments we should have. // // So let's add it here as a test. // // >>> from jplephem.spk import SPK @@ -79,7 +74,7 @@ fn test_spk_load_bytes() { let (name, summary) = de421.nth_summary(n).unwrap(); println!("{} -> {}", name, summary); // We know that the DE421 data is all in Type 2 - let data_set = de421.nth_data::(n).unwrap(); + let data_set = de421.nth_data::(n).unwrap(); assert_eq!(data_set.num_records, seg_len[n]); if summary.target_id == 301 { assert_eq!( @@ -105,11 +100,11 @@ fn test_spk_load_bytes() { } // Try to grab some data here! - let data_set = de421.nth_data::(3).unwrap(); + let data_set = de421.nth_data::(3).unwrap(); println!("{data_set}"); // Put this in a context - let spice = SpiceContext::default(); + let spice = Context::default(); let spice = spice.load_spk(&de421).unwrap(); // Now load another DE file @@ -130,4 +125,6 @@ fn test_spk_load_bytes() { // NOTE: Because everything is a pointer, the size on the stack remains constant at 521 bytes. println!("{}", size_of_val(&spice)); + + // TODO: Generate a BSP from GMAT } From b81a9122878b910c8b73784c28a570cb9228b102 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Wed, 16 Nov 2022 00:27:19 -0700 Subject: [PATCH 22/48] Fixed the ephem paths issue(s?) Signed-off-by: Christopher Rabotin --- src/context/mod.rs | 4 ++-- src/ephemerides/paths.rs | 26 ++++++++++++++------------ tests/ephemerides/translation.rs | 6 +++--- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/context/mod.rs b/src/context/mod.rs index 71eb372d..753af98b 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -96,9 +96,9 @@ impl<'a: 'b, 'b> Context<'a> { for (spkno, maybe_spk) in self .spk_data .iter() + .take(self.num_loaded_spk()) .rev() .enumerate() - .take(self.num_loaded_spk()) { let spk = maybe_spk.unwrap(); if let Ok((summary, idx_in_spk)) = spk.summary_from_name_at_epoch(name, epoch) { @@ -120,9 +120,9 @@ impl<'a: 'b, 'b> Context<'a> { for (spkno, maybe_spk) in self .spk_data .iter() + .take(self.num_loaded_spk()) .rev() .enumerate() - .take(self.num_loaded_spk()) { let spk = maybe_spk.unwrap(); if let Ok((summary, idx_in_spk)) = spk.summary_from_id_at_epoch(id, epoch) { diff --git a/src/ephemerides/paths.rs b/src/ephemerides/paths.rs index 2e12a6b6..6d52371e 100644 --- a/src/ephemerides/paths.rs +++ b/src/ephemerides/paths.rs @@ -39,12 +39,11 @@ impl<'a> Context<'a> { // The common center is the absolute minimum of all centers due to the NAIF numbering. let mut common_center = i32::MAX; - for maybe_spk in self.spk_data.iter().rev().take(self.num_loaded_spk()) { + for maybe_spk in self.spk_data.iter().take(self.num_loaded_spk()).rev() { let spk = maybe_spk.unwrap(); for summary in spk.data_summaries { // This summary exists, so we need to follow the branch of centers up the tree. - let mut this_common_center = i32::MAX; if summary.target_id.abs() < common_center.abs() { common_center = summary.target_id; if common_center == 0 { @@ -76,7 +75,6 @@ impl<'a> Context<'a> { // Build a tree, set a fixed depth to avoid allocations let mut of_path = [None; MAX_TREE_DEPTH]; let mut of_path_len = 0; - let mut prev_ephem_hash = source.ephemeris_id; let common_center = self.try_find_context_center()?; @@ -84,18 +82,22 @@ impl<'a> Context<'a> { .spk_summary_from_id_at_epoch(source.ephemeris_id, epoch)? .0; - let mut target_id = summary.target_id; - for idx in 0..MAX_TREE_DEPTH { - match self.spk_summary_from_id_at_epoch(target_id, epoch) { + let mut center_id = summary.center_id; + + if summary.center_id == common_center { + // Well that was quick! + return Ok((of_path_len, of_path)); + } + + for _ in 0..MAX_TREE_DEPTH { + match self.spk_summary_from_id_at_epoch(center_id, epoch) { Ok((summary, _, _)) => { - target_id = summary.target_id; - if target_id == common_center { + center_id = summary.center_id; + of_path[of_path_len] = Some(center_id); + of_path_len += 1; + if center_id == common_center { // We're found the path! - return Ok((of_path_len, of_path)); - } else { - of_path[of_path_len] = Some(target_id); - of_path_len += 1; } } Err(e) => { diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index f53d93d6..51fb3574 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -25,7 +25,7 @@ fn de438s_translation_verif_venus2emb() { } // "Load" the file via a memory map (avoids allocations) - let path = "./data/de438s.anise"; + let path = "./data/de438s.bsp"; let buf = file_mmap!(path).unwrap(); let spk = SPK::parse(&buf).unwrap(); let ctx = Context::from_spk(&spk).unwrap(); @@ -112,7 +112,7 @@ fn de438s_translation_verif_venus2luna() { } // "Load" the file via a memory map (avoids allocations) - let path = "./data/de438s.anise"; + let path = "./data/de438s.bsp"; let buf = file_mmap!(path).unwrap(); let spk = SPK::parse(&buf).unwrap(); let ctx = Context::from_spk(&spk).unwrap(); @@ -207,7 +207,7 @@ fn de438s_translation_verif_emb2luna() { } // "Load" the file via a memory map (avoids allocations) - let path = "./data/de438s.anise"; + let path = "./data/de438s.bsp"; let buf = file_mmap!(path).unwrap(); let spk = SPK::parse(&buf).unwrap(); let ctx = Context::from_spk(&spk).unwrap(); From d3a8c08c03a04a4a50ee4dd6878a79652f1b3594 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Thu, 17 Nov 2022 22:27:33 -0700 Subject: [PATCH 23/48] Rewrote Context to use SPK files as is without needing ASN1 Signed-off-by: Christopher Rabotin --- analysis/de_val_err.py | 8 + benches/crit_ephemerides.rs | 7 +- benches/iai_ephemerides.rs | 5 +- src/ephemerides/paths.rs | 15 +- src/ephemerides/translate_to_parent.rs | 12 +- src/math/interpolation/chebyshev.rs | 18 +- src/math/mod.rs | 1 + src/math/utils.rs | 47 +++++ src/naif/daf/mod.rs | 4 +- src/naif/spk/datatypes/chebyshev.rs | 46 +++-- src/naif/spk/datatypes/hermite.rs | 31 +++- src/naif/spk/datatypes/lagrange.rs | 31 +++- tests/ephemerides/paths.rs | 2 +- tests/ephemerides/translation.rs | 242 ++++++++++++------------- 14 files changed, 289 insertions(+), 180 deletions(-) create mode 100644 analysis/de_val_err.py create mode 100644 src/math/utils.rs diff --git a/analysis/de_val_err.py b/analysis/de_val_err.py new file mode 100644 index 00000000..441d5d76 --- /dev/null +++ b/analysis/de_val_err.py @@ -0,0 +1,8 @@ +import pandas as pd +import plotly.express as px + +df = pd.read_parquet("../target/validation-test-results.parquet") + +print(df.describe()) + +px.scatter(df, x='source frame', y=['relative error', 'absolute error'], color='component', text='destination frame').write_html("../target/validation-mean-min-max.html") diff --git a/benches/crit_ephemerides.rs b/benches/crit_ephemerides.rs index 11bad2a0..11cf53d8 100644 --- a/benches/crit_ephemerides.rs +++ b/benches/crit_ephemerides.rs @@ -21,7 +21,7 @@ fn benchmark_single_hop_spice(time_it: TimeSeries) { } } -fn benchmark_single_hop_anise(ctx: &DataSet, time_it: TimeSeries) { +fn benchmark_single_hop_anise(ctx: &Context, time_it: TimeSeries) { for epoch in time_it { black_box( ctx.translate_from_to_km_s_geometric(EARTH_J2000, LUNA_J2000, epoch) @@ -37,9 +37,10 @@ pub fn criterion_benchmark(c: &mut Criterion) { let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); // Load ANISE data - let path = "./data/de438s.anise"; + let path = "./data/de438s.bsp"; let buf = file_mmap!(path).unwrap(); - let ctx = DataSet::from_bytes(&buf); + let spk = SPK::parse(&buf).unwrap(); + let ctx = Context::from_spk(&spk).unwrap(); // Load SPICE data spice::furnsh("data/de438s.bsp"); diff --git a/benches/iai_ephemerides.rs b/benches/iai_ephemerides.rs index cd45f713..c9f291db 100644 --- a/benches/iai_ephemerides.rs +++ b/benches/iai_ephemerides.rs @@ -37,9 +37,10 @@ fn benchmark_single_hop_anise() { let time_step = ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); - let path = "./data/de438s.anise"; + let path = "./data/de438s.bsp"; let buf = file_mmap!(path).unwrap(); - let ctx = DataSet::from_bytes(&buf); + let spk = SPK::parse(&buf).unwrap(); + let ctx = Context::from_spk(&spk).unwrap(); for epoch in time_it { black_box( diff --git a/src/ephemerides/paths.rs b/src/ephemerides/paths.rs index 6d52371e..8b00b7c5 100644 --- a/src/ephemerides/paths.rs +++ b/src/ephemerides/paths.rs @@ -72,18 +72,21 @@ impl<'a> Context<'a> { source: &Frame, epoch: Epoch, ) -> Result<(usize, [Option; MAX_TREE_DEPTH]), AniseError> { - // Build a tree, set a fixed depth to avoid allocations - let mut of_path = [None; MAX_TREE_DEPTH]; - let mut of_path_len = 0; - - let common_center = self.try_find_context_center()?; - + // Grab the summary data, which we use to find the paths let summary = self .spk_summary_from_id_at_epoch(source.ephemeris_id, epoch)? .0; let mut center_id = summary.center_id; + // Build a tree, set a fixed depth to avoid allocations + let mut of_path = [None; MAX_TREE_DEPTH]; + let mut of_path_len = 0; + + of_path[of_path_len] = Some(summary.center_id); + of_path_len += 1; + + let common_center = self.try_find_context_center()?; if summary.center_id == common_center { // Well that was quick! return Ok((of_path_len, of_path)); diff --git a/src/ephemerides/translate_to_parent.rs b/src/ephemerides/translate_to_parent.rs index b516386e..a3d87bb4 100644 --- a/src/ephemerides/translate_to_parent.rs +++ b/src/ephemerides/translate_to_parent.rs @@ -15,7 +15,7 @@ use crate::context::Context; use crate::errors::IntegrityErrorKind; use crate::hifitime::Epoch; use crate::math::Vector3; -use crate::naif::daf::NAIFDataSet; +use crate::naif::daf::{NAIFDataSet, NAIFSummaryRecord}; use crate::naif::spk::datatypes::{HermiteSetType13, LagrangeSetType9, Type2ChebyshevSet}; use crate::structure::units::*; use crate::{errors::AniseError, prelude::Frame}; @@ -55,24 +55,24 @@ impl<'a> Context<'a> { .ok_or(AniseError::IntegrityError(IntegrityErrorKind::DataMissing))?; // Perform a translation with position and velocity; - let mut acc = Vector3::zeros(); + let acc = Vector3::zeros(); // Now let's simply evaluate the data - let (mut pos_km, mut vel_km_s) = match summary.data_type_i { + let (pos_km, vel_km_s) = match summary.data_type_i { 2 => { // Type 2 Chebyshev let data = spk_data.nth_data::(idx_in_spk)?; - data.evaluate(epoch)? + data.evaluate(epoch, summary.start_epoch())? } 9 => { // Type 9: Lagrange Interpolation --- Unequal Time Steps let data = spk_data.nth_data::(idx_in_spk)?; - data.evaluate(epoch)? + data.evaluate(epoch, summary.start_epoch())? } 13 => { // Type 13: Hermite Interpolation --- Unequal Time Steps let data = spk_data.nth_data::(idx_in_spk)?; - data.evaluate(epoch)? + data.evaluate(epoch, summary.start_epoch())? } _ => todo!("{} is not yet supported", summary.data_type_i), }; diff --git a/src/math/interpolation/chebyshev.rs b/src/math/interpolation/chebyshev.rs index 5a2c1b39..5be9af98 100644 --- a/src/math/interpolation/chebyshev.rs +++ b/src/math/interpolation/chebyshev.rs @@ -17,8 +17,8 @@ use crate::prelude::AniseError; /// # Notes /// 1. At this point, the splines are expected to be in Chebyshev format and no verification is done. pub(crate) fn cheby_eval( - relative_normalized_time_s: f64, - spline_data: &[f64], + normalized_time: f64, + spline_coeffs: &[f64], spline_radius_s: f64, eval_epoch: Epoch, degree: usize, @@ -27,24 +27,24 @@ pub(crate) fn cheby_eval( let mut w = [0.0_f64; 3]; let mut dw = [0.0_f64; 3]; - for j in (2..=degree).rev() { + for j in (2..=degree + 1).rev() { w[2] = w[1]; w[1] = w[0]; - w[0] = (spline_data + w[0] = (spline_coeffs .get(j - 1) .ok_or_else(|| AniseError::MissingInterpolationData(eval_epoch))?) - + (2.0 * relative_normalized_time_s * w[1] - w[2]); + + (2.0 * normalized_time * w[1] - w[2]); dw[2] = dw[1]; dw[1] = dw[0]; - dw[0] = w[1] * 2. + dw[1] * 2.0 * relative_normalized_time_s - dw[2]; + dw[0] = w[1] * 2. + dw[1] * 2.0 * normalized_time - dw[2]; } - let val = (spline_data + let val = (spline_coeffs .get(0) .ok_or_else(|| AniseError::MissingInterpolationData(eval_epoch))?) - + (relative_normalized_time_s * w[0] - w[1]); + + (normalized_time * w[0] - w[1]); - let deriv = (w[0] + relative_normalized_time_s * dw[0] - dw[1]) / spline_radius_s; + let deriv = (w[0] + normalized_time * dw[0] - dw[1]) / spline_radius_s; Ok((val, deriv)) } diff --git a/src/math/mod.rs b/src/math/mod.rs index 8fdee68e..ec704134 100644 --- a/src/math/mod.rs +++ b/src/math/mod.rs @@ -15,6 +15,7 @@ pub type Vector6 = nalgebra::Vector6; pub mod angles; pub mod cartesian; pub mod interpolation; +pub mod utils; // pub mod rotation; /// Returns the projection of a onto b diff --git a/src/math/utils.rs b/src/math/utils.rs new file mode 100644 index 00000000..3e18f17e --- /dev/null +++ b/src/math/utils.rs @@ -0,0 +1,47 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use core::f64::EPSILON; + +/// Returns the absolute difference between two floats as per the approx crate +pub fn abs_diff(a: f64, b: f64) -> f64 { + if a > b { + a - b + } else { + b - a + } +} + +pub fn rel_diff(a: f64, b: f64, max_relative: f64) -> f64 { + if a == b { + return 0.0; + } + + // Handle remaining infinities + if a.is_infinite() || b.is_infinite() { + // We are far from equal so return a big number + return f64::INFINITY; + } + + let abs_diff = (a - b).abs(); + + // For when the numbers are really close together + if abs_diff <= EPSILON { + return abs_diff; + } + + let abs_a = a.abs(); + let abs_b = b.abs(); + + let largest = if abs_b > abs_a { abs_b } else { abs_a }; + + // Use a relative difference comparison + largest * max_relative +} diff --git a/src/naif/daf/mod.rs b/src/naif/daf/mod.rs index 0011d5f7..e2d76c79 100644 --- a/src/naif/daf/mod.rs +++ b/src/naif/daf/mod.rs @@ -44,9 +44,9 @@ pub trait NAIFDataSet<'a>: Display { // TODO: Return a result here. fn from_slice_f64(slice: &'a [f64]) -> Self; - fn nth_record(&self, n: usize) -> Self::RecordKind; + fn nth_record(&self, n: usize) -> Result; - fn evaluate(&self, epoch: Epoch) -> Result; + fn evaluate(&self, epoch: Epoch, start_epoch: Epoch) -> Result; } pub trait NAIFDataRecord<'a>: Display { diff --git a/src/naif/spk/datatypes/chebyshev.rs b/src/naif/spk/datatypes/chebyshev.rs index 806f6a4c..08bbb4c7 100644 --- a/src/naif/spk/datatypes/chebyshev.rs +++ b/src/naif/spk/datatypes/chebyshev.rs @@ -52,13 +52,13 @@ impl<'a> NAIFDataSet<'a> for Type2ChebyshevSet<'a> { fn from_slice_f64(slice: &'a [f64]) -> Self { // For this kind of record, the data is stored at the very end of the dataset - let init_epoch = Epoch::from_et_seconds(slice[slice.len() - 4]); + let start_epoch = Epoch::from_et_seconds(slice[slice.len() - 4]); let interval_length = slice[slice.len() - 3].seconds(); let rsize = slice[slice.len() - 2] as usize; let num_records = slice[slice.len() - 1] as usize; Self { - init_epoch, + init_epoch: start_epoch, interval_length, rsize, num_records, @@ -66,16 +66,20 @@ impl<'a> NAIFDataSet<'a> for Type2ChebyshevSet<'a> { } } - fn nth_record(&self, n: usize) -> Self::RecordKind { - let rcrd_len = self.record_data.len() / self.num_records; - Self::RecordKind::from_slice_f64(&self.record_data[n * rcrd_len..(n + 1) * rcrd_len]) + fn nth_record(&self, n: usize) -> Result { + Ok(Self::RecordKind::from_slice_f64( + &self + .record_data + .get(n * self.rsize..(n + 1) * self.rsize) + .ok_or(AniseError::MalformedData((n + 1) * self.rsize))?, + )) } - fn evaluate(&self, epoch: Epoch) -> Result<(Vector3, Vector3), AniseError> { + fn evaluate(&self, epoch: Epoch, start_epoch: Epoch) -> Result<(Vector3, Vector3), AniseError> { let window_duration_s = self.interval_length.to_seconds(); let radius_s = window_duration_s / 2.0; - let ephem_start_delta = epoch - self.init_epoch; + let ephem_start_delta = epoch - start_epoch; let ephem_start_delta_s = ephem_start_delta.to_seconds(); if ephem_start_delta_s < 0.0 { @@ -86,9 +90,9 @@ impl<'a> NAIFDataSet<'a> for Type2ChebyshevSet<'a> { let spline_idx = (ephem_start_delta_s / window_duration_s).round() as usize; // Now, build the X, Y, Z data from the record data. - let record = self.nth_record(spline_idx); + let record = self.nth_record(spline_idx)?; - let normalized_t = (epoch.to_et_seconds() - record.midpoint.to_et_seconds()) / radius_s; + let normalized_time = (epoch.to_et_seconds() - record.midpoint_et_s) / radius_s; let mut pos = Vector3::zeros(); let mut vel = Vector3::zeros(); @@ -97,7 +101,7 @@ impl<'a> NAIFDataSet<'a> for Type2ChebyshevSet<'a> { .iter() .enumerate() { - let (val, deriv) = cheby_eval(normalized_t, &coeffs, radius_s, epoch, self.degree())?; + let (val, deriv) = cheby_eval(normalized_time, coeffs, radius_s, epoch, self.degree())?; pos[cno] = val; vel[cno] = deriv; } @@ -107,20 +111,26 @@ impl<'a> NAIFDataSet<'a> for Type2ChebyshevSet<'a> { } pub struct Type2ChebyshevRecord<'a> { - pub midpoint: Epoch, + pub midpoint_et_s: f64, pub radius: Duration, pub x_coeffs: &'a [f64], pub y_coeffs: &'a [f64], pub z_coeffs: &'a [f64], } +impl<'a> Type2ChebyshevRecord<'a> { + pub fn midpoint_epoch(&self) -> Epoch { + Epoch::from_et_seconds(self.midpoint_et_s) + } +} + impl<'a> fmt::Display for Type2ChebyshevRecord<'a> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, "start: {:E}\tend: {:E}\nx: {:?}\ny: {:?}\nz: {:?}", - self.midpoint - self.radius, - self.midpoint + self.radius, + self.midpoint_epoch() - self.radius, + self.midpoint_epoch() + self.radius, self.x_coeffs, self.y_coeffs, self.z_coeffs @@ -131,12 +141,14 @@ impl<'a> fmt::Display for Type2ChebyshevRecord<'a> { impl<'a> NAIFDataRecord<'a> for Type2ChebyshevRecord<'a> { fn from_slice_f64(slice: &'a [f64]) -> Self { let num_coeffs = (slice.len() - 2) / 3; + let end_x_idx = num_coeffs + 2; + let end_y_idx = 2 * num_coeffs + 2; Self { - midpoint: Epoch::from_et_seconds(slice[0]), + midpoint_et_s: slice[0], radius: slice[1].seconds(), - x_coeffs: &slice[2..num_coeffs], - y_coeffs: &slice[2 + num_coeffs..num_coeffs * 2], - z_coeffs: &slice[2 + num_coeffs * 2..], + x_coeffs: &slice[2..end_x_idx], + y_coeffs: &slice[end_x_idx..end_y_idx], + z_coeffs: &slice[end_y_idx..], } } } diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs index c1a76975..94c283f3 100644 --- a/src/naif/spk/datatypes/hermite.rs +++ b/src/naif/spk/datatypes/hermite.rs @@ -14,6 +14,7 @@ use hifitime::{Duration, Epoch, TimeUnits}; use crate::{ math::{cartesian::CartesianState, Vector3}, naif::daf::{NAIFDataRecord, NAIFDataSet, NAIFRecord}, + prelude::AniseError, DBL_SIZE, }; @@ -61,12 +62,21 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType12<'a> { } } - fn nth_record(&self, n: usize) -> Self::RecordKind { + fn nth_record(&self, n: usize) -> Result { let rcrd_len = self.record_data.len() / self.num_records; - Self::RecordKind::from_slice_f64(&self.record_data[n * rcrd_len..(n + 1) * rcrd_len]) + Ok(Self::RecordKind::from_slice_f64( + &self + .record_data + .get(n * rcrd_len..(n + 1) * rcrd_len) + .ok_or(AniseError::MalformedData((n + 1) * rcrd_len))?, + )) } - fn evaluate(&self, epoch: Epoch) -> Result { + fn evaluate( + &self, + epoch: Epoch, + start_epoch: Epoch, + ) -> Result { todo!() } } @@ -124,12 +134,21 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { } } - fn nth_record(&self, n: usize) -> Self::RecordKind { + fn nth_record(&self, n: usize) -> Result { let rcrd_len = self.state_data.len() / self.num_records; - Self::RecordKind::from_slice_f64(&self.state_data[n * rcrd_len..(n + 1) * rcrd_len]) + Ok(Self::RecordKind::from_slice_f64( + &self + .state_data + .get(n * rcrd_len..(n + 1) * rcrd_len) + .ok_or(AniseError::MalformedData((n + 1) * rcrd_len))?, + )) } - fn evaluate(&self, epoch: Epoch) -> Result { + fn evaluate( + &self, + epoch: Epoch, + start_epoch: Epoch, + ) -> Result { todo!() } } diff --git a/src/naif/spk/datatypes/lagrange.rs b/src/naif/spk/datatypes/lagrange.rs index 2ec79df3..b9e06cd1 100644 --- a/src/naif/spk/datatypes/lagrange.rs +++ b/src/naif/spk/datatypes/lagrange.rs @@ -14,6 +14,7 @@ use hifitime::{Duration, Epoch, TimeUnits}; use crate::{ math::{cartesian::CartesianState, Vector3}, naif::daf::{NAIFDataRecord, NAIFDataSet, NAIFRecord}, + prelude::AniseError, DBL_SIZE, }; @@ -61,12 +62,21 @@ impl<'a> NAIFDataSet<'a> for LagrangeSetType8<'a> { } } - fn nth_record(&self, n: usize) -> Self::RecordKind { + fn nth_record(&self, n: usize) -> Result { let rcrd_len = self.record_data.len() / self.num_records; - Self::RecordKind::from_slice_f64(&self.record_data[n * rcrd_len..(n + 1) * rcrd_len]) + Ok(Self::RecordKind::from_slice_f64( + &self + .record_data + .get(n * rcrd_len..(n + 1) * rcrd_len) + .ok_or(AniseError::MalformedData((n + 1) * rcrd_len))?, + )) } - fn evaluate(&self, epoch: Epoch) -> Result { + fn evaluate( + &self, + epoch: Epoch, + start_epoch: Epoch, + ) -> Result { todo!() } } @@ -118,12 +128,21 @@ impl<'a> NAIFDataSet<'a> for LagrangeSetType9<'a> { } } - fn nth_record(&self, n: usize) -> Self::RecordKind { + fn nth_record(&self, n: usize) -> Result { let rcrd_len = self.state_data.len() / self.num_records; - Self::RecordKind::from_slice_f64(&self.state_data[n * rcrd_len..(n + 1) * rcrd_len]) + Ok(Self::RecordKind::from_slice_f64( + &self + .state_data + .get(n * rcrd_len..(n + 1) * rcrd_len) + .ok_or(AniseError::MalformedData((n + 1) * rcrd_len))?, + )) } - fn evaluate(&self, epoch: Epoch) -> Result { + fn evaluate( + &self, + epoch: Epoch, + start_epoch: Epoch, + ) -> Result { todo!() } } diff --git a/tests/ephemerides/paths.rs b/tests/ephemerides/paths.rs index ed3bcf19..d73fe0ef 100644 --- a/tests/ephemerides/paths.rs +++ b/tests/ephemerides/paths.rs @@ -23,7 +23,7 @@ fn common_root_verif() { } // SLS Launch epoch!!! IT'S LIIIIVEE!! - let epoch = Epoch::from_str("2022-11-15T23:47:36 +06:00").unwrap(); + let epoch = Epoch::from_str("2022-11-15T23:47:36+06:00").unwrap(); // Load the context // Check that this test works for DE430, DE438s (short), and DE440 diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 51fb3574..485fcf29 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -14,6 +14,7 @@ use anise::constants::frames::{EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, VENUS_J2 use anise::file_mmap; use anise::math::Vector3; use anise::prelude::*; +use log::error; // For the Earth Moon Barycenter to Luna, there velocity error is up to 3e-14 km/s, or 3e-11 m/s, or 13 picometers per second. const VELOCITY_EPSILON_KM_S: f64 = 1e-13; @@ -237,6 +238,9 @@ fn de438s_translation_verif_emb2luna() { ) .unwrap(); + // Check that we correctly set the output frame + assert_eq!(state.frame, LUNA_J2000); + let pos_expct_km = Vector3::new( 8.1576591043659311e+04, 3.4547568914467981e+05, @@ -304,6 +308,7 @@ fn de438s_translation_verif_emb2luna() { #[ignore] #[cfg(feature = "std")] fn validate_jplde_translation() { + use anise::math::utils::{abs_diff, rel_diff}; use anise::naif::daf::NAIFSummaryRecord; use anise::prelude::Frame; use arrow::array::{ArrayRef, Float64Array, StringArray, UInt8Array}; @@ -311,11 +316,6 @@ fn validate_jplde_translation() { use arrow::record_batch::RecordBatch; use hifitime::{TimeSeries, TimeUnits}; use log::info; - use online_statistics::maximum::Max; - use online_statistics::mean::Mean; - use online_statistics::minimum::Min; - use online_statistics::quantile::Quantile; - use online_statistics::stats::Univariate; use parquet::arrow::arrow_writer::ArrowWriter; use parquet::file::properties::WriterProperties; use spice; @@ -327,6 +327,7 @@ fn validate_jplde_translation() { const FAIL_VEL_KM_S: f64 = 1e-1; // Number of queries we should do per pair of ephemerides const NUM_QUERIES_PER_PAIR: f64 = 1_000.0; + const BATCH_SIZE: usize = 10_000; if pretty_env_logger::try_init().is_err() { println!("could not init env_logger"); @@ -341,12 +342,9 @@ fn validate_jplde_translation() { Field::new("destination frame", DataType::Utf8, false), Field::new("# hops", DataType::UInt8, false), Field::new("component", DataType::Utf8, false), - Field::new("mean err", DataType::Float64, false), - Field::new("min err", DataType::Float64, false), - Field::new("q25 err", DataType::Float64, false), - Field::new("q50 err", DataType::Float64, false), - Field::new("q75 err", DataType::Float64, false), - Field::new("max err", DataType::Float64, false), + Field::new("Epoch UTC", DataType::Utf8, false), + Field::new("absolute error", DataType::Float64, false), + Field::new("relative error", DataType::Float64, false), ]); let file = File::create("target/validation-test-results.parquet").unwrap(); @@ -369,6 +367,8 @@ fn validate_jplde_translation() { // We only have one SPK loaded, so we know what summary to go through let first_spk = ctx.spk_data[0].unwrap(); + let mut pairs = Vec::new(); + for ephem1 in first_spk.data_summaries { let j2000_ephem1 = Frame::from_ephem_j2000(ephem1.target_id); @@ -377,6 +377,18 @@ fn validate_jplde_translation() { continue; } + let key = if ephem1.target_id < ephem2.target_id { + (ephem1.target_id, ephem2.target_id) + } else { + (ephem2.target_id, ephem1.target_id) + }; + + if pairs.contains(&key) { + // We're already handled that pair + continue; + } + pairs.push(key); + let j2000_ephem2 = Frame::from_ephem_j2000(ephem2.target_id); // Query the ephemeris data for a bunch of different times. @@ -397,63 +409,23 @@ fn validate_jplde_translation() { let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); - let mut maxes = [ - Max::new(), - Max::new(), - Max::new(), - Max::new(), - Max::new(), - Max::new(), - ]; - - let mut mins = [ - Min::new(), - Min::new(), - Min::new(), - Min::new(), - Min::new(), - Min::new(), - ]; - - let mut means = [ - Mean::new(), - Mean::new(), - Mean::new(), - Mean::new(), - Mean::new(), - Mean::new(), - ]; - - let mut meds = [ - Quantile::default(), - Quantile::default(), - Quantile::default(), - Quantile::default(), - Quantile::default(), - Quantile::default(), - ]; - - let mut q25s = [ - Quantile::new(0.25).unwrap(), - Quantile::new(0.25).unwrap(), - Quantile::new(0.25).unwrap(), - Quantile::new(0.25).unwrap(), - Quantile::new(0.25).unwrap(), - Quantile::new(0.25).unwrap(), - ]; - - let mut q75s = [ - Quantile::new(0.75).unwrap(), - Quantile::new(0.75).unwrap(), - Quantile::new(0.75).unwrap(), - Quantile::new(0.75).unwrap(), - Quantile::new(0.75).unwrap(), - Quantile::new(0.75).unwrap(), - ]; - let component = ["X", "Y", "Z", "VX", "VY", "VZ"]; - for epoch in time_it { + let mut batch_de_name = Vec::with_capacity(BATCH_SIZE); + let mut batch_src_frm = Vec::with_capacity(BATCH_SIZE); + let mut batch_dest_frm = Vec::with_capacity(BATCH_SIZE); + let mut batch_comp = Vec::with_capacity(BATCH_SIZE); + let mut batch_epoch = Vec::with_capacity(BATCH_SIZE); + let mut batch_hops = Vec::with_capacity(BATCH_SIZE); + let mut batch_abs = Vec::with_capacity(BATCH_SIZE); + let mut batch_rel = Vec::with_capacity(BATCH_SIZE); + + for (i, epoch) in time_it.enumerate() { + let hops = ctx + .common_ephemeris_path(j2000_ephem1, j2000_ephem2, epoch) + .unwrap() + .0 as u8; + match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { Ok(state) => { // Perform the same query in SPICE @@ -474,7 +446,8 @@ fn validate_jplde_translation() { }; // We don't look at the absolute error here, that's for the stats to show any skewness - let err = anise_value - spice_state[i]; + let abs_err = abs_diff(anise_value, spice_state[i]); + let rel_err = rel_diff(anise_value, spice_state[i], EPSILON); if !relative_eq!(anise_value, spice_state[i], epsilon = max_err) { // Always save the parquet file @@ -482,53 +455,90 @@ fn validate_jplde_translation() { panic!( "{epoch:E}\t{}got = {:.16}\texp = {:.16}\terr = {:.16}", - component[i], anise_value, spice_state[i], err + component[i], anise_value, spice_state[i], rel_err ); } - // Update statistics - mins[i].update(err); - maxes[i].update(err); - q25s[i].update(err); - q75s[i].update(err); - meds[i].update(err); - means[i].update(err); + // Update data + + batch_de_name.push(de_name.clone()); + batch_src_frm.push(j2000_ephem1.to_string()); + batch_dest_frm.push(j2000_ephem2.to_string()); + batch_hops.push(hops); + batch_comp.push(component[i]); + batch_epoch.push("".to_string()); + batch_abs.push(abs_err); + batch_rel.push(rel_err); + } + + // Consider writing the batch + if i % BATCH_SIZE == 0 { + writer + .write( + &RecordBatch::try_from_iter(vec![ + ( + "DE file", + Arc::new(StringArray::from(batch_de_name.clone())) + as ArrayRef, + ), + ( + "source frame", + Arc::new(StringArray::from(batch_src_frm.clone())) + as ArrayRef, + ), + ( + "destination frame", + Arc::new(StringArray::from(batch_dest_frm.clone())) + as ArrayRef, + ), + ( + "# hops", + Arc::new(UInt8Array::from(batch_hops.clone())) + as ArrayRef, + ), + ( + "component", + Arc::new(StringArray::from(batch_comp.clone())) + as ArrayRef, + ), + ( + "Epoch UTC", + Arc::new(StringArray::from(batch_epoch.clone())) + as ArrayRef, + ), + ( + "absolute error", + Arc::new(Float64Array::from(batch_abs.clone())) + as ArrayRef, + ), + ( + "relative error", + Arc::new(Float64Array::from(batch_rel.clone())) + as ArrayRef, + ), + ]) + .unwrap(), + ) + .unwrap(); + // Re-init all of the vectors + batch_de_name = Vec::with_capacity(BATCH_SIZE); + batch_src_frm = Vec::with_capacity(BATCH_SIZE); + batch_dest_frm = Vec::with_capacity(BATCH_SIZE); + batch_comp = Vec::with_capacity(BATCH_SIZE); + batch_epoch = Vec::with_capacity(BATCH_SIZE); + batch_hops = Vec::with_capacity(BATCH_SIZE); + batch_abs = Vec::with_capacity(BATCH_SIZE); + batch_rel = Vec::with_capacity(BATCH_SIZE); } } Err(e) => { // Always save the parquet file - writer.close().unwrap(); - panic!("At epoch {epoch:E}: {e}"); + // writer.close().unwrap(); + error!("At epoch {epoch:E}: {e}"); } }; } - let mut batch_de_name = Vec::with_capacity(6); - let mut batch_src_frm = Vec::with_capacity(6); - let mut batch_dest_frm = Vec::with_capacity(6); - let mut batch_comp = Vec::with_capacity(6); - let mut batch_hops = Vec::with_capacity(6); - let mut batch_mean = Vec::with_capacity(6); - let mut batch_min = Vec::with_capacity(6); - let mut batch_max = Vec::with_capacity(6); - let mut batch_q25 = Vec::with_capacity(6); - let mut batch_q50 = Vec::with_capacity(6); - let mut batch_q75 = Vec::with_capacity(6); - - for i in 0..6 { - batch_de_name.push(de_name.clone()); - batch_src_frm.push(j2000_ephem1.to_string()); - batch_dest_frm.push(j2000_ephem2.to_string()); - batch_comp.push(component[i]); - batch_hops.push(0); // TODO: Fix this - batch_mean.push(means[i].get()); - batch_min.push(mins[i].get()); - batch_max.push(maxes[i].get()); - batch_q50.push(meds[i].get()); - batch_q25.push(q25s[i].get()); - batch_q75.push(q75s[i].get()); - } - writer .write( &RecordBatch::try_from_iter(vec![ @@ -550,28 +560,16 @@ fn validate_jplde_translation() { Arc::new(StringArray::from(batch_comp)) as ArrayRef, ), ( - "mean err", - Arc::new(Float64Array::from(batch_mean)) as ArrayRef, - ), - ( - "min err", - Arc::new(Float64Array::from(batch_min)) as ArrayRef, - ), - ( - "q25 err", - Arc::new(Float64Array::from(batch_q25)) as ArrayRef, - ), - ( - "q50 err", - Arc::new(Float64Array::from(batch_q50)) as ArrayRef, + "Epoch UTC", + Arc::new(StringArray::from(batch_epoch)) as ArrayRef, ), ( - "q75 err", - Arc::new(Float64Array::from(batch_q75)) as ArrayRef, + "absolute error", + Arc::new(Float64Array::from(batch_abs)) as ArrayRef, ), ( - "max err", - Arc::new(Float64Array::from(batch_max)) as ArrayRef, + "relative error", + Arc::new(Float64Array::from(batch_rel)) as ArrayRef, ), ]) .unwrap(), @@ -582,7 +580,7 @@ fn validate_jplde_translation() { writer.flush().unwrap(); } - info!("[{de_name}] done with {} ", j2000_ephem1); + info!("[{de_name}] done with {}", j2000_ephem1); } // Unload SPICE (note that this is not needed for ANISE because it falls out of scope) spice::unload(&format!("data/{de_name}.bsp")); From 5d40788943e241575affd22e5647ebcb2267714d Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 18 Nov 2022 19:12:55 -0700 Subject: [PATCH 24/48] Add Polynominal from Nyx, and made it alloc free. Almost done with Hermite unequal step, I think. Signed-off-by: Christopher Rabotin --- .github/workflows/tests.yml | 14 +- Cargo.toml | 2 + analysis/de_val_err.py | 14 +- src/bin/anise/main.rs | 229 ++++++---- src/cli/args.rs | 19 +- src/cli/inspect.rs | 74 +-- src/cli/mod.rs | 2 +- src/errors.rs | 4 +- src/frames/geodetic_frame.rs | 5 +- src/lib.rs | 2 +- src/math/mod.rs | 1 + src/math/polyfit/common.rs | 211 +++++++++ src/math/polyfit/hermite.rs | 402 ++++++++++++++++ src/math/polyfit/mod.rs | 55 +++ src/math/polyfit/polynomial.rs | 377 +++++++++++++++ src/naif/daf/daf.rs | 57 ++- src/naif/daf/mod.rs | 7 +- src/naif/daf/recordtypes.rs | 9 +- src/naif/pck/mod.rs | 8 +- src/naif/spk/datatypes/hermite.rs | 83 +++- src/naif/spk/datatypes/posvel.rs | 19 +- src/naif/spk/summary.rs | 4 +- src/structure/orientation/trigangle.rs | 15 +- tests/ephemerides/mod.rs | 1 + tests/ephemerides/translation.rs | 304 +----------- .../ephemerides/validation/hermite_type13.rs | 432 ++++++++++++++++++ .../validation/jplde_cheby_type2.rs | 431 +++++++++++++++++ tests/ephemerides/validation/mod.rs | 12 + tests/naif.rs | 8 + 29 files changed, 2301 insertions(+), 500 deletions(-) create mode 100644 src/math/polyfit/common.rs create mode 100644 src/math/polyfit/hermite.rs create mode 100644 src/math/polyfit/mod.rs create mode 100644 src/math/polyfit/polynomial.rs create mode 100644 tests/ephemerides/validation/hermite_type13.rs create mode 100644 tests/ephemerides/validation/jplde_cheby_type2.rs create mode 100644 tests/ephemerides/validation/mod.rs diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ef74a54c..d855a8c8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -33,7 +33,7 @@ jobs: with: command: check - spice-convert-and-test: + run-tests: name: Converts SPICE BSP files into ANISE files and runs the tests runs-on: ubuntu-latest steps: @@ -49,18 +49,6 @@ jobs: toolchain: stable override: true - - name: Build - run: cargo build --release - - - name: Convert DE438s and verify every coefficient (slow) - run: cargo run --release -- convert ./data/de438s.bsp --check - - - name: Convert DE421, DE430, DE440 - run: | - cargo run --release -- convert ./data/de421.bsp - cargo run --release -- convert ./data/de430.bsp - cargo run --release -- convert ./data/de440.bsp - - name: Test debug (default features) # This has overflow checks etc. run: cargo test diff --git a/Cargo.toml b/Cargo.toml index f14953b7..7681d529 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,7 @@ const_format = "0.2" nalgebra = "0.31" approx = "0.5.1" zerocopy = "0.6.1" +typenum = "1.15" [dev-dependencies] rust-spice = "0.7.3" @@ -37,6 +38,7 @@ parquet = "25.0.0" arrow = "25.0.0" criterion = "0.3" iai = "0.1" +polars = {version = "0.25", features = ["lazy", "parquet"]} [features] default = ["std"] diff --git a/analysis/de_val_err.py b/analysis/de_val_err.py index 441d5d76..61507c91 100644 --- a/analysis/de_val_err.py +++ b/analysis/de_val_err.py @@ -3,6 +3,16 @@ df = pd.read_parquet("../target/validation-test-results.parquet") -print(df.describe()) +print(df.loc[df['DE file'] == 'de438s'].describe()) -px.scatter(df, x='source frame', y=['relative error', 'absolute error'], color='component', text='destination frame').write_html("../target/validation-mean-min-max.html") +plt = px.scatter(df.loc[df['DE file'] == 'de438s'], x='File delta T (s)', y='relative error (km)', color='source frame') + +plt.write_html("../target/de438s-validation.html") +plt.show() + + +print(df.loc[df['DE file'] == 'de440'].describe()) +plt = px.scatter(df.loc[df['DE file'] == 'de440'], x='File delta T (s)', y='relative error (km)', color='source frame') + +plt.write_html("../target/de440-validation.html") +plt.show() \ No newline at end of file diff --git a/src/bin/anise/main.rs b/src/bin/anise/main.rs index 6411cf89..6e9edc06 100644 --- a/src/bin/anise/main.rs +++ b/src/bin/anise/main.rs @@ -1,12 +1,16 @@ extern crate pretty_env_logger; use std::env::{set_var, var}; -use std::fs::rename; use anise::cli::args::{Actions, Args}; +use anise::cli::inspect::{BpcRow, SpkRow}; use anise::cli::CliErrors; use anise::file_mmap; +use anise::naif::daf::{DAFFileRecord, NAIFRecord, NAIFSummaryRecord}; use anise::prelude::*; use clap::Parser; +use log::{error, info}; +use tabled::{Style, Table}; +use zerocopy::FromBytes; const LOG_VAR: &str = "ANISE_LOG"; @@ -21,98 +25,147 @@ fn main() -> Result<(), CliErrors> { let cli = Args::parse(); match cli.action { - Actions::Convert { - allow_empty, - check, + Actions::Check { file, + crc32_checksum, } => { - todo!() - // let file_clone = file.clone(); - // // Memory map the file - // match file_mmap!(file) { - // Ok(bytes) => { - // let daf_file = DAF::parse(&bytes)?; - // // Parse as SPK - // let spk: SPK = (&daf_file).try_into()?; - // // Convert to ANISE - // let spk_filename = file_clone.to_str().unwrap(); - // let anise_filename = spk_filename.replace(".bsp", ".anise"); - // spk.to_anise(spk_filename, &anise_filename, !allow_empty, check)?; - // Ok(()) - // } - // Err(e) => Err(e.into()), - // } - } - Actions::Check { file } => { - // let path_str = file.clone(); - // match file_mmap!(file) { - // Ok(bytes) => { - // let context = DataSet::try_from_bytes(&bytes)?; - // context.check_integrity()?; - // println!("[OK] {:?}", path_str); - // Ok(()) - // } - // Err(e) => Err(e.into()), - // } - todo!() + let path_str = file.clone(); + match file_mmap!(file) { + Ok(bytes) => { + // Load the header only + let file_record = + DAFFileRecord::read_from(&bytes[..DAFFileRecord::SIZE]).unwrap(); + match file_record + .identification() + .or_else(|e| Err(CliErrors::AniseError(e)))? + { + "PCK" => { + info!("Loading {path_str:?} as DAF/PCK"); + match BPC::check_then_parse(&bytes, crc32_checksum) { + Ok(_) => Ok(()), + Err(AniseError::IntegrityError(e)) => { + error!("CRC32 checksums differ for {path_str:?}: {e:?}"); + Err(CliErrors::AniseError(AniseError::IntegrityError(e))) + } + Err(e) => { + error!("Some other error happened when loading {path_str:?}: {e:?}"); + Err(CliErrors::AniseError(e)) + } + } + } + "SPK" => { + info!("Loading {path_str:?} as DAF/SPK"); + match SPK::check_then_parse(&bytes, crc32_checksum) { + Ok(_) => Ok(()), + Err(AniseError::IntegrityError(e)) => { + error!("CRC32 checksums differ for {path_str:?}: {e:?}"); + Err(CliErrors::AniseError(AniseError::IntegrityError(e))) + } + Err(e) => { + error!("Some other error happened when loading {path_str:?}: {e:?}"); + Err(CliErrors::AniseError(e)) + } + } + } + _ => unreachable!(), + } + } + Err(e) => Err(e.into()), + } } Actions::Inspect { file } => { - // Start by checking the integrity - // match file_mmap!(file) { - // Ok(bytes) => { - // let context = DataSet::try_from_bytes(&bytes)?; - // println!("{}", context); - // Ok(()) - // } - // Err(e) => Err(e.into()), - // } - todo!() - } - Actions::Merge { files } => { - // if files.len() < 2 { - // Err(CliErrors::ArgumentError( - // "Need at least two files to merge together".to_string(), - // )) - // } else { - // // Open the last file in the list - // let destination = files.last().unwrap().clone(); - // // This is the temporary file. - // let dest_str = files.last().unwrap().to_str().as_ref().unwrap().to_string(); - // let tmp_dest_str = dest_str.clone() + ".tmp"; - // match file_mmap!(destination) { - // Ok(bytes) => { - // // We can't borrow some bytes and let them drop out of scope, so we'll open the data to be merged before we open the destination. - // // This means we need to re-open the destination every time but at least we don't have leaky pointers =( - // for (num, this_file) in files.iter().enumerate().take(files.len() - 1) { - // // Try load this file - // match file_mmap!(this_file) { - // Ok(these_bytes) => { - // let other = DataSet::try_from_bytes(&these_bytes)?; - // let mut dest_context = DataSet::try_from_bytes(&bytes)?; - // let (num_ephem_added, num_orientation_added) = - // dest_context.merge_mut(&other)?; - // println!("Added {num_ephem_added} ephemeris and {num_orientation_added} orientations from {:?}", files[num]); + let path_str = file.clone(); + match file_mmap!(file) { + Ok(bytes) => { + // Load the header only + let file_record = + DAFFileRecord::read_from(&bytes[..DAFFileRecord::SIZE]).unwrap(); + + match file_record + .identification() + .or_else(|e| Err(CliErrors::AniseError(e)))? + { + "PCK" => { + info!("Loading {path_str:?} as DAF/PCK"); + match BPC::parse(&bytes) { + Ok(pck) => { + // Build the rows of the table + let mut rows = Vec::new(); + + for (sno, summary) in pck.data_summaries.iter().enumerate() { + let name = pck + .name_record + .nth_name(sno, pck.file_record.summary_size()); + if summary.is_empty() { + continue; + } + rows.push(BpcRow { + name, + start_epoch: format!("{:E}", summary.start_epoch()), + end_epoch: format!("{:E}", summary.end_epoch()), + interpolation_kind: format!("{}", summary.data_type_i), + frame: format!("{}", summary.frame_id), + inertial_frame: format!( + "{}", + summary.inertial_frame_id + ), + }); + } + + let mut tbl = Table::new(rows); + tbl.with(Style::rounded()); + println!("{tbl}"); + + Ok(()) + } + Err(e) => { + error!("Some other error happened when loading {path_str:?}: {e:?}"); + Err(CliErrors::AniseError(e)) + } + } + } + "SPK" => { + info!("Loading {path_str:?} as DAF/SPK"); + match SPK::parse(&bytes) { + Ok(pck) => { + // Build the rows of the table + let mut rows = Vec::new(); + + for (sno, summary) in pck.data_summaries.iter().enumerate() { + let name = pck + .name_record + .nth_name(sno, pck.file_record.summary_size()); + if summary.is_empty() { + continue; + } + + rows.push(SpkRow { + name, + start_epoch: format!("{:E}", summary.start_epoch()), + end_epoch: format!("{:E}", summary.end_epoch()), + interpolation_kind: format!("{}", summary.data_type_i), + frame: format!("{}", summary.frame_id), + target: format!("{}", summary.target_id), + }); + } + + let mut tbl = Table::new(rows); + tbl.with(Style::rounded()); + println!("{tbl}"); - // // And finally save. - // if let Err(e) = dest_context.save_as(&tmp_dest_str, false) { - // return Err(e.into()); - // } - // } - // Err(e) => return Err(e.into()), - // } - // } - // } - // Err(e) => return Err(e.into()), - // } - // // Now that we have written the data to the temp file - // // and that the mmap is out of scope, we can move the tmp file into the old file - // if let Err(e) = rename(tmp_dest_str, dest_str) { - // Err(CliErrors::AniseError(AniseError::IOError(e.kind()))) - // } else { - // Ok(()) - // } - // } - todo!() + Ok(()) + } + Err(e) => { + error!("Some other error happened when loading {path_str:?}: {e:?}"); + Err(CliErrors::AniseError(e)) + } + } + } + _ => unreachable!(), + } + } + Err(e) => Err(e.into()), + } } } } diff --git a/src/cli/args.rs b/src/cli/args.rs index 6f9e7c32..f6ef2619 100644 --- a/src/cli/args.rs +++ b/src/cli/args.rs @@ -11,23 +11,13 @@ pub struct Args { #[derive(Debug, PartialEq, Eq, PartialOrd, Subcommand)] pub enum Actions { - /// Convert a supported SPICE file into an ANISE file - Convert { - /// Set to true to include empty ephemerides in the ANISE file (default: false) - #[clap(long)] - allow_empty: bool, - /// Load the ANISE file and check that it was correctly converted - #[clap(long)] - check: bool, - /// Path to SPICE file - #[clap(parse(from_os_str))] - file: PathBuf, - }, /// Checks the integrity of the file Check { /// Path to ANISE file #[clap(parse(from_os_str))] file: PathBuf, + /// CRC32 checksum + crc32_checksum: u32, }, /// Inspects what's in an ANISE file (and also checks the integrity) Inspect { @@ -35,9 +25,4 @@ pub enum Actions { #[clap(parse(from_os_str))] file: PathBuf, }, - /// Merge several ANISE files together - Merge { - /// Input files are all of the files but the last one - files: Vec, - }, } diff --git a/src/cli/inspect.rs b/src/cli/inspect.rs index 5a43c0d6..87f7b6f2 100644 --- a/src/cli/inspect.rs +++ b/src/cli/inspect.rs @@ -1,63 +1,21 @@ -use crc32fast::hash; -use std::fmt::{Display, Error as FmtError, Formatter}; -use tabled::{Style, Table, Tabled}; +use tabled::Tabled; -use crate::prelude::DataSet; -use crate::structure::orientation::orient_data::OrientationData; -use crate::structure::records::Record; -use crate::NaifId; - -/// A row is used only to display a context #[derive(Tabled)] -struct Row<'a> { - name: &'a str, - data_kind: &'a str, - hash: NaifId, - start_epoch: String, - end_epoch: String, - interpolation_kind: String, +pub struct BpcRow<'a> { + pub name: &'a str, + pub start_epoch: String, + pub end_epoch: String, + pub interpolation_kind: String, + pub frame: String, + pub inertial_frame: String, } -impl<'a, R: Record<'a>> Display for DataSet<'a, R> { - fn fmt(&self, f: &mut Formatter) -> Result<(), FmtError> { - writeln!(f, "{}", self.metadata) - - // // Build the rows of the table - // let mut rows = Vec::new(); - // // Add the ephemeris data - // for ephem in self.ephemeris_data.iter() { - // rows.push(Row { - // name: ephem.name, - // data_kind: "Ephemeris", - // hash: hash(ephem.name.as_bytes()), - // start_epoch: format!("{:?}", ephem.start_epoch()), - // end_epoch: format!("{:?}", ephem.end_epoch()), - // interpolation_kind: format!("{}", ephem.interpolation_kind), - // }); - // } - // // Add the orientation data - // for orientation in self.orientation_data.iter() { - // rows.push(Row { - // name: orientation.name, - // data_kind: "Orientation", - // hash: hash(orientation.name.as_bytes()), - // start_epoch: format!("{:?}", orientation.start_epoch()), - // end_epoch: format!("{:?}", orientation.end_epoch()), - // interpolation_kind: match orientation.orientation_data { - // OrientationData::PlanetaryConstant { .. } => { - // "N/A (planetary constant)".to_string() - // } - // OrientationData::HighPrecision { - // ref_epoch: _, - // backward: _, - // interpolation_kind, - // splines: _, - // } => format!("{interpolation_kind}"), - // }, - // }); - // } - // let mut tbl = Table::new(rows); - // tbl.with(Style::rounded()); - // write!(f, "{}", tbl) - } +#[derive(Tabled)] +pub struct SpkRow<'a> { + pub name: &'a str, + pub target: String, + pub frame: String, + pub start_epoch: String, + pub end_epoch: String, + pub interpolation_kind: String, } diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 182cbf23..fd336867 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -10,7 +10,7 @@ use crate::prelude::AniseError; pub mod args; -mod inspect; +pub mod inspect; #[derive(Debug, Error)] pub enum CliErrors { diff --git a/src/errors.rs b/src/errors.rs index 4068583f..9d7e5e8f 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -89,11 +89,13 @@ pub enum IntegrityErrorKind { DisjointRoots { from_frame: Frame, to_frame: Frame }, } -#[derive(Copy, Clone, PartialEq, Eq, Debug)] +#[derive(Clone, PartialEq, Eq, Debug)] pub enum MathErrorKind { DivisionByZero, StateEpochsDiffer, StateFramesDiffer, + InvalidInterpolationData(String), + PolynomialOrderError(usize), } #[derive(Copy, Clone, PartialEq, Debug)] diff --git a/src/frames/geodetic_frame.rs b/src/frames/geodetic_frame.rs index af401b23..e787ba36 100644 --- a/src/frames/geodetic_frame.rs +++ b/src/frames/geodetic_frame.rs @@ -10,10 +10,7 @@ use super::{celestial_frame::CelestialFrame, CelestialFrameTrait, Frame, FrameTrait}; use crate::{ - context::Context, - prelude::{AniseError, DataSet}, - structure::constants::ellipsoid::Ellipsoid, - NaifId, + context::Context, prelude::AniseError, structure::constants::ellipsoid::Ellipsoid, NaifId, }; use core::fmt::{Display, Formatter}; use log::error; diff --git a/src/lib.rs b/src/lib.rs index 4cdafd22..c67c53eb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -34,8 +34,8 @@ pub mod prelude { pub use crate::context::Context; pub use crate::errors::AniseError; pub use crate::frames::*; + pub use crate::naif::daf::NAIFSummaryRecord; pub use crate::naif::{BPC, SPK}; - pub use crate::structure::dataset::DataSet; pub use crate::structure::units::*; pub use crate::time::*; pub use std::fs::File; diff --git a/src/math/mod.rs b/src/math/mod.rs index ec704134..d4ae476d 100644 --- a/src/math/mod.rs +++ b/src/math/mod.rs @@ -15,6 +15,7 @@ pub type Vector6 = nalgebra::Vector6; pub mod angles; pub mod cartesian; pub mod interpolation; +pub mod polyfit; pub mod utils; // pub mod rotation; diff --git a/src/math/polyfit/common.rs b/src/math/polyfit/common.rs new file mode 100644 index 00000000..e9cc30f4 --- /dev/null +++ b/src/math/polyfit/common.rs @@ -0,0 +1,211 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use super::Polynomial; +use crate::errors::MathErrorKind; +use core::fmt; + +#[derive(Debug, Copy, Clone, PartialEq)] +pub enum CommonPolynomial { + Constant(f64), + /// Linear(a, b) <=> f(x) = ax + b (order is FLIPPED from Polynomial structure) + Linear(f64, f64), + /// Quadratic(a, b, c) <=> f(x) = ax^2 + bx + c (order is FLIPPED from Polynomial structure) + Quadratic(f64, f64, f64), +} + +impl CommonPolynomial { + pub fn eval(&self, x: f64) -> f64 { + match *self { + Self::Constant(a) => Polynomial::<1> { coefficients: [a] }.eval(x), + Self::Linear(a, b) => Polynomial::<2> { + coefficients: [b, a], + } + .eval(x), + Self::Quadratic(a, b, c) => Polynomial::<3> { + coefficients: [c, b, a], + } + .eval(x), + } + } + + pub fn deriv(&self, x: f64) -> f64 { + match *self { + Self::Constant(a) => Polynomial::<1> { coefficients: [a] }.deriv(x), + Self::Linear(a, b) => Polynomial::<2> { + coefficients: [b, a], + } + .deriv(x), + Self::Quadratic(a, b, c) => Polynomial::<3> { + coefficients: [c, b, a], + } + .deriv(x), + } + } + + pub fn coeff_in_order(&self, order: usize) -> Result { + match *self { + Self::Constant(a) => { + if order == 0 { + Ok(a) + } else { + Err(MathErrorKind::PolynomialOrderError(order)) + } + } + Self::Linear(a, b) => match order { + 0 => Ok(b), + 1 => Ok(a), + _ => Err(MathErrorKind::PolynomialOrderError(order)), + }, + Self::Quadratic(a, b, c) => match order { + 0 => Ok(c), + 1 => Ok(b), + 2 => Ok(a), + _ => Err(MathErrorKind::PolynomialOrderError(order)), + }, + } + } + + pub fn with_val_in_order(self, new_val: f64, order: usize) -> Result { + match self { + Self::Constant(_) => { + if order != 0 { + Err(MathErrorKind::PolynomialOrderError(order)) + } else { + Ok(Self::Constant(new_val)) + } + } + Self::Linear(x, y) => match order { + 0 => Ok(Self::Linear(new_val, y)), + 1 => Ok(Self::Linear(x, new_val)), + _ => Err(MathErrorKind::PolynomialOrderError(order)), + }, + Self::Quadratic(x, y, z) => match order { + 0 => Ok(Self::Quadratic(new_val, y, z)), + 1 => Ok(Self::Quadratic(x, new_val, z)), + 2 => Ok(Self::Quadratic(x, y, new_val)), + _ => Err(MathErrorKind::PolynomialOrderError(order)), + }, + } + } + + pub fn add_val_in_order(self, new_val: f64, order: usize) -> Result { + match self { + Self::Constant(x) => { + if order != 0 { + Err(MathErrorKind::PolynomialOrderError(order)) + } else { + Ok(Self::Constant(new_val + x)) + } + } + Self::Linear(x, y) => match order { + 0 => Ok(Self::Linear(new_val + x, y)), + 1 => Ok(Self::Linear(x, new_val + y)), + _ => Err(MathErrorKind::PolynomialOrderError(order)), + }, + Self::Quadratic(x, y, z) => match order { + 0 => Ok(Self::Quadratic(new_val + x, y, z)), + 1 => Ok(Self::Quadratic(x, new_val + y, z)), + 2 => Ok(Self::Quadratic(x, y, new_val + z)), + _ => Err(MathErrorKind::PolynomialOrderError(order)), + }, + } + } +} + +impl fmt::Display for CommonPolynomial { + /// Prints the polynomial with the least significant coefficients first + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match *self { + Self::Constant(a) => write!(f, "{}", Polynomial::<1> { coefficients: [a] }), + Self::Linear(a, b) => write!( + f, + "{}", + Polynomial::<2> { + coefficients: [b, a], + } + ), + Self::Quadratic(a, b, c) => write!( + f, + "{}", + Polynomial::<3> { + coefficients: [c, b, a], + } + ), + } + } +} + +#[test] +fn poly_constant() { + let c = CommonPolynomial::Constant(10.0); + for i in -100..=100 { + assert!( + (c.eval(i as f64) - 10.0).abs() < 2e-16, + "Constant polynomial returned wrong value" + ); + } +} + +#[test] +fn poly_linear() { + let c = CommonPolynomial::Linear(2.0, 10.0); + for i in -100..=100 { + let x = i as f64; + let expect = 2.0 * x + 10.0; + assert!( + (c.eval(x) - expect).abs() < 2e-16, + "Constant polynomial returned wrong value" + ); + } +} + +#[test] +fn poly_quadratic() { + let p = Polynomial { + coefficients: [101.0, -2.0, 3.0], + }; + let p2 = 2.0 * p; + let c = CommonPolynomial::Quadratic(3.0, -2.0, 101.0); + for i in -100..=100 { + let x = i as f64; + let expect = 3.0 * x.powi(2) - 2.0 * x + 101.0; + let expect_deriv = 6.0 * x - 2.0; + assert!( + (c.eval(x) - expect).abs() < 2e-16, + "Polynomial returned wrong value" + ); + assert!( + (p.deriv(x) - expect_deriv).abs() < 2e-16, + "Polynomial derivative returned wrong value" + ); + + assert!( + (p.eval(x) - expect).abs() < 2e-16, + "Polynomial returned wrong value" + ); + assert!( + (p2.eval(x) - 2.0 * expect).abs() < 2e-16, + "Polynomial returned wrong value" + ); + } +} + +#[test] +fn poly_print() { + let p = Polynomial { + coefficients: [101.0, -2.0, 3.0], + }; + println!("{}", p); + assert_eq!( + format!("{}", p), + format!("{}", CommonPolynomial::Quadratic(3.0, -2.0, 101.0)) + ); +} diff --git a/src/math/polyfit/hermite.rs b/src/math/polyfit/hermite.rs new file mode 100644 index 00000000..788c116a --- /dev/null +++ b/src/math/polyfit/hermite.rs @@ -0,0 +1,402 @@ +/* + Nyx, blazing fast astrodynamics + Copyright (C) 2022 Christopher Rabotin + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +/* + * SOURCES: + * 1. bacon-sci, MIT licensed, Copyright (c) Wyatt Campbell. + * 2. Nyx, AGPL v3 license, copied here with permission of redistribution under Mozilla Public License by Chris Rabotin. + */ + +use crate::errors::MathErrorKind; +use crate::math::polyfit::{FixedArray, MAX_SAMPLES, MAX_SAMPLES_TIME_TWO}; +use crate::{ + math::polyfit::polynomial::{multiply, Polynomial}, + prelude::AniseError, +}; +use log::warn; + +impl Polynomial { + pub fn hermite(xs: &[f64], ys: &[f64], derivs: &[f64]) -> Result { + if xs.is_empty() || ys.is_empty() || derivs.is_empty() { + return Err(AniseError::MathError( + MathErrorKind::InvalidInterpolationData("No data to interpolate".to_string()), + )); + } + + if xs.len() != ys.len() || xs.len() != derivs.len() { + return Err(AniseError::MathError( + MathErrorKind::InvalidInterpolationData( + "Abscissa, evaluations, and derivatives must be of the same size".to_string(), + ), + )); + } + + // We need to define the number of samples here because when parsing the data from DAF files, we actually do not know the length. + // Therefore, we can't specify in the parameters that length (compiler complains that `&[f64]` is different from `&[f64; N]`). + const SAMPLES: usize = MAX_SAMPLES; + + if DEGREE < 2 * xs.len() - 1 { + warn!( + "Building Hermite interpolation of degree {} with {} samples, {} degree recommended", + DEGREE, + SAMPLES, + 2 * SAMPLES - 1 + ); + } + + let mut zs = FixedArray::<2, SAMPLES>::zeros(); + let mut qs = FixedArray::<4, MAX_SAMPLES_TIME_TWO>::zeros(); + + for i in 0..SAMPLES { + zs[2 * i] = xs[i]; + zs[2 * i + 1] = xs[i]; + qs[2 * i] = ys[i]; + qs[2 * i + 1] = ys[i]; + qs[2 * i + 1 + (2 * SAMPLES)] = derivs[i]; + + if i != 0 { + qs[2 * i + (2 * SAMPLES)] = + (qs[2 * i] - qs[2 * i - 1]) / (zs[2 * i] - zs[2 * i - 1]); + } + } + + for i in 2..2 * SAMPLES { + for j in 2..=i { + qs[i + j * (2 * SAMPLES)] = (qs[i + (j - 1) * (2 * SAMPLES)] + - qs[i - 1 + (j - 1) * (2 * SAMPLES)]) + / (zs[i] - zs[i - j]); + } + } + + let mut hermite = Polynomial::::zeros(); + for i in (1..2 * SAMPLES).rev() { + hermite += qs[i + i * (2 * SAMPLES)]; + let new_poly = Polynomial::<2>::from_most_significant([1.0, -xs[(i - 1) / 2]]); + hermite = multiply::(hermite, new_poly); + } + hermite += qs[0]; + + if hermite.is_nan() { + dbg!(xs, ys, derivs); + return Err(AniseError::MathError( + MathErrorKind::InvalidInterpolationData(format!( + "Invalid interpolation {:x}", + hermite + )), + )); + } + + Ok(hermite) + } +} + +/// Stores a Hermite series +pub struct HermiteSeries { + coefficients: [f64; N], +} + +impl HermiteSeries { + /// Convert a Hermite series to a Polynomial + pub fn to_polynomial(&self) -> Polynomial { + let mut rtn = Polynomial { + coefficients: self.coefficients, + }; + if N == 1 { + // Do nothing more + return rtn; + } else if N == 2 { + rtn.coefficients[1] *= 2.0; + } else { + let mut c0 = Polynomial::::zeros(); + let mut c1 = Polynomial::::zeros(); + c0.coefficients[0] = self.coefficients[self.coefficients.len() - 2]; + c1.coefficients[0] = self.coefficients[self.coefficients.len() - 1]; + + for i in (2..self.coefficients.len()).rev() { + let tmp = c0; + let mut c_im2 = Polynomial::::zeros(); + c_im2.coefficients[0] = self.coefficients[i - 2]; + c0 = c_im2 - c1 * (2 * (i - 1)) as f64; + c1.shift_by_one(); + c1 = tmp + 2.0 * c1; + } + c1.shift_by_one(); + rtn = c0 + 2.0 * c1; + } + rtn + } +} + +#[test] +fn hermite_sine_test() { + use super::MAX_DEGREE; + let xs: Vec<_> = (0..8).map(|i| i as f64).collect(); + let ys: Vec<_> = xs.iter().map(|x| x.cos()).collect(); + let derivs: Vec<_> = xs.iter().map(|x| -x.sin()).collect(); + + let tol = 1e-10; + let poly = Polynomial::::hermite(&xs, &ys, &derivs).unwrap(); + + println!("{:x}", poly); + + let mut max_eval_err: f64 = 0.0; + let mut max_deriv_err: f64 = 0.0; + + for x in xs { + let (eval, deriv) = poly.eval_n_deriv(x); + let eval_err = (eval - x.cos()).abs(); + assert!(eval_err < tol); + max_eval_err = max_eval_err.max(eval_err); + + let deriv_err = (deriv - -x.sin()).abs(); + assert!(deriv_err < tol); + max_deriv_err = max_eval_err.max(eval_err); + } + + println!( + "Max eval error: {:.e}\tMax deriv error: {:.e}\t", + max_eval_err, max_deriv_err + ); +} + +#[test] +fn hermite_constant_test() { + use super::MAX_DEGREE; + let xs: Vec<_> = (0..8).map(|i| i as f64).collect(); + let ys: Vec<_> = xs.iter().map(|_| 2.0159).collect(); + let derivs: Vec<_> = xs.iter().map(|_| 0.0).collect(); + + let tol = 1e-10; + let poly = Polynomial::::hermite(&xs, &ys, &derivs).unwrap(); + + println!("{:x}", poly); + + let mut max_eval_err: f64 = 0.0; + let mut max_deriv_err: f64 = 0.0; + + for x in xs { + let (eval, deriv) = poly.eval_n_deriv(x); + let eval_err = (eval - 2.0159).abs(); + assert!(eval_err < tol); + max_eval_err = max_eval_err.max(eval_err); + + let deriv_err = (deriv).abs(); + assert!(deriv_err < tol); + max_deriv_err = max_eval_err.max(eval_err); + } + + println!( + "Max eval error: {:.e}\tMax deriv error: {:.e}\t", + max_eval_err, max_deriv_err + ); +} + +#[test] +fn hermite_ephem_spline_test() { + use super::MAX_DEGREE; + let ts = [ + -1.0, + -0.7142321608948587, + -0.4284548929983568, + -0.14272281352821248, + 0.1430009063036013, + 0.4286973024022658, + 0.714367019041751, + 1.0, + ]; + let values = [ + -1200.6957374089038, + -1649.3350718512218, + -2088.1291193578113, + -2514.3714789070427, + -2925.5702772667646, + -3319.240151300038, + -3693.030156393982, + -4044.695271513933, + ]; + let values_dt = [ + -5.450221271198159, + -5.3475633589540585, + -5.212915678573803, + -5.0471031201910135, + -4.851091887968967, + -4.626059429784994, + -4.373345524123602, + -4.094465775216765, + ]; + + let tol = 2e-7; + let tol_deriv = 3e-6; + let poly = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); + + println!("{:x}", poly); + + let mut max_eval_err: f64 = 0.0; + let mut max_deriv_err: f64 = 0.0; + + for (i, t) in ts.iter().enumerate() { + let (eval, deriv) = poly.eval_n_deriv(*t); + let eval_err = (eval - values[i]).abs(); + assert!(dbg!(eval_err) < tol); + max_eval_err = max_eval_err.max(eval_err); + + let deriv_err = (deriv - values_dt[i]).abs(); + assert!(dbg!(deriv_err) < tol_deriv); + max_deriv_err = max_deriv_err.max(deriv_err); + } + + println!( + "Max eval error: {:.e}\tMax deriv error: {:.e}\t", + max_eval_err, max_deriv_err + ); +} + +#[test] +fn hermite_duplication_test() { + use super::MAX_DEGREE; + let ts = [-1.0, 0.0, 1.0]; + let values = [239213.98224426163, 239342.1452415863, 239492.31122918683]; + let values_dt = [5.856883346456119, 1259.7108315572618, 737.5474327513627]; + + let tol = 2e-16; + let tol_deriv = 1e-11; + let poly = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); + + println!("{:x}", poly); + + let mut max_eval_err: f64 = 0.0; + let mut max_deriv_err: f64 = 0.0; + + for (i, t) in ts.iter().enumerate() { + let (eval, deriv) = poly.eval_n_deriv(*t); + let eval_err = (eval - values[i]).abs(); + assert!(dbg!(eval_err) < tol); + max_eval_err = max_eval_err.max(eval_err); + + let deriv_err = (deriv - values_dt[i]).abs(); + assert!(dbg!(deriv_err) < tol_deriv); + max_deriv_err = max_deriv_err.max(deriv_err); + } + + println!( + "Max eval error: {:.e}\tMax deriv error: {:.e}\t", + max_eval_err, max_deriv_err + ); +} + +#[test] +fn herm2poly() { + let series = HermiteSeries { + coefficients: [ + -364.319505276875, + -230.472812950625, + -817.857413263125, + -134.8289486859375, + -229.266493323125, + -15.82103409828125, + -17.08533955890625, + -0.443532253984375, + -0.3394307234765625, + ], + }; + let expected = Polynomial { + coefficients: [ + 0.1945330000000354, + 3.61185323000015, + -6.133532429999718, + -37.53450715000004, + -29.24982842000058, + 89.83425820999997, + 123.0579811700001, + -56.77212851, + -86.89426521, + ], + }; + let poly = series.to_polynomial(); + println!("{}", poly); + println!("{}", expected); + let delta = poly - expected; + println!("DELTA = {}", delta); + for c in delta.coefficients { + assert!(c.abs() < 1e-10); + } +} + +#[test] +fn hermite_spice_docs_example() { + use super::MAX_DEGREE; + let ts = [-1.0, 0.0, 3.0, 5.0]; + let values = [6.0, 5.0, 2210.0, 78180.0]; + let values_dt = [3.0, 0.0, 5115.0, 109395.0]; + + let tol = 2e-7; + let tol_deriv = 3e-6; + let poly = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); + + let poly2 = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); + + println!("{:x}", poly); + println!("{:x}", poly2); + + let mut max_eval_err: f64 = 0.0; + let mut max_deriv_err: f64 = 0.0; + + for (i, t) in ts.iter().enumerate() { + let (eval, deriv) = poly.eval_n_deriv(*t); + let eval_err = (eval - values[i]).abs(); + assert!(dbg!(eval_err) < tol); + max_eval_err = max_eval_err.max(eval_err); + + let deriv_err = (deriv - values_dt[i]).abs(); + assert!(dbg!(deriv_err) < tol_deriv); + max_deriv_err = max_deriv_err.max(deriv_err); + } + + println!( + "Max eval error: {:.e}\tMax deriv error: {:.e}\t", + max_eval_err, max_deriv_err + ); + + println!("{:?}", poly.eval_n_deriv(2.0)); +} + +#[test] +fn hermite_spice_data() { + use super::MAX_DEGREE; + use crate::file_mmap; + use crate::naif::daf::NAIFDataSet; + use crate::naif::spk::datatypes::Type2ChebyshevSet; + use crate::prelude::*; + // "Load" the file via a memory map (avoids allocations) + let path = "./data/de438s.bsp"; + let buf = file_mmap!(path).unwrap(); + let spk = SPK::parse(&buf).unwrap(); + let ctx = Context::from_spk(&spk).unwrap(); + + let data = ctx.spk_data[0] + .unwrap() + .nth_data::(0) + .unwrap(); + + // Now, build the X, Y, Z data from the record data. + let record = data.nth_record(0).unwrap(); + + let poly = Polynomial::::hermite(record.z_coeffs, record.x_coeffs, record.y_coeffs) + .unwrap(); + println!("{poly}"); +} diff --git a/src/math/polyfit/mod.rs b/src/math/polyfit/mod.rs new file mode 100644 index 00000000..1a998ffb --- /dev/null +++ b/src/math/polyfit/mod.rs @@ -0,0 +1,55 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +mod common; +pub mod hermite; +mod polynomial; + +pub use common::CommonPolynomial; +pub use polynomial::{LargestPolynomial, Polynomial}; + +/// Defines the maximum degree for an interpolation. +/// Until https://github.com/rust-lang/rust/issues/60551 , we cannot do operations on const generic, so we need some hack around it. +pub(crate) const MAX_DEGREE: usize = 31; +pub(crate) const MAX_SAMPLES: usize = (MAX_DEGREE + 1) / 2; +const MAX_SAMPLES_TIME_TWO: usize = 2 * MAX_SAMPLES; + +use core::ops::{Index, IndexMut}; + +/// A FixedArray is a a way around allocating vectors when we don't know the exact size at compile time. +/// This will be made obsolete when https://github.com/rust-lang/rust/issues/60551 is merged into rust stable. +#[derive(Copy, Clone, Debug)] +struct FixedArray([[f64; N]; S]); + +impl FixedArray { + fn zeros() -> Self { + Self([[0.0; N]; S]) + } + + const fn indexes(&self, index: usize) -> (usize, usize) { + (index / N, index % N) + } +} + +impl Index for FixedArray { + type Output = f64; + + fn index(&self, index: usize) -> &Self::Output { + let (one, two) = self.indexes(index); + &self.0[one][two] + } +} + +impl IndexMut for FixedArray { + fn index_mut(&mut self, index: usize) -> &mut f64 { + let (one, two) = self.indexes(index); + &mut self.0[one][two] + } +} diff --git a/src/math/polyfit/polynomial.rs b/src/math/polyfit/polynomial.rs new file mode 100644 index 00000000..d71fad9f --- /dev/null +++ b/src/math/polyfit/polynomial.rs @@ -0,0 +1,377 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use super::MAX_DEGREE; +use core::f64::EPSILON; +use core::fmt; +use core::ops; + +/// Polynomial is a statically allocated polynomial. +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct Polynomial { + /// Coefficients are orders by their power, e.g. index 0 is to the power 0, 1 is linear, 2 is quadratic, etc. + pub coefficients: [f64; SIZE], +} + +/// We define the maximum sized polynomial here. +/// This will be made obsolete when https://github.com/rust-lang/rust/issues/60551 is merged into rust stable. +pub type LargestPolynomial = Polynomial; + +impl Polynomial { + pub fn from_most_significant(mut coeffs: [f64; SIZE]) -> Self { + coeffs.reverse(); + Self { + coefficients: coeffs, + } + } + + /// Get the order of the polynomial + pub const fn order(&self) -> usize { + SIZE - 1 + } + + /// Evaluate the polynomial at the provided position + pub fn eval(&self, x: f64) -> f64 { + self.eval_n_deriv(x).0 + } + + /// Evaluate the derivative at the provided position + pub fn deriv(&self, x: f64) -> f64 { + self.eval_n_deriv(x).1 + } + + /// Evaluate the polynomial and its derivative at the provided position + pub fn eval_n_deriv(&self, x: f64) -> (f64, f64) { + if SIZE == 1 { + return (self.coefficients[0], 0.0); + } + + // Start with biggest coefficients + let mut acc_eval = *self.coefficients.last().unwrap(); + let mut acc_deriv = *self.coefficients.last().unwrap(); + // For every coefficient except the constant and largest + for val in self.coefficients.iter().skip(1).rev().skip(1) { + acc_eval = acc_eval * x + *val; + acc_deriv = acc_deriv * x + acc_eval; + } + // Do the constant for the polynomial evaluation + acc_eval = x * acc_eval + self.coefficients[0]; + + (acc_eval, acc_deriv) + } + + /// Initializes a Polynomial with only zeros + pub const fn zeros() -> Self { + Self { + coefficients: [0.0; SIZE], + } + } + + /// Set the i-th power of this polynomial to zero (e.g. if i=0, set the x^0 coefficient to zero, i.e. the constant part goes to zero) + pub fn zero_power(&mut self, i: usize) { + if i < SIZE { + self.coefficients[i] = 0.0; + } + } + + /// Set all of the coefficients below this tolerance to zero + pub fn zero_below_tolerance(&mut self, tol: f64) { + for i in 0..=self.order() { + if self.coefficients[i].abs() < tol { + self.zero_power(i); + } + } + } + + /// Returns true if any of the coefficients are NaN + pub fn is_nan(&self) -> bool { + for c in self.coefficients { + if c.is_nan() { + return true; + } + } + false + } + + /// Shifts all of the coefficients by one degree, dropping the largest degree. + /// For example: + /// P(x) = 10x^3 -6.13353243x^2 + 3.61185323x + 0.194533 .. becomes ... + /// P(x) = -6.13353243x^3 + 3.61185323x^2 + 0.194533x + pub(crate) fn shift_by_one(&mut self) { + let prev_coeff = self.coefficients; + self.coefficients[1..((prev_coeff.len() - 1) + 1)] + .clone_from_slice(&prev_coeff[..(prev_coeff.len() - 1)]); + self.coefficients[0] = 0.0; + } + + fn fmt_with_var(&self, f: &mut fmt::Formatter, var: String) -> fmt::Result { + write!(f, "P({}) = ", var)?; + let mut data = Vec::with_capacity(SIZE); + + for (i, c) in self.coefficients.iter().enumerate().rev() { + if c.abs() <= EPSILON { + continue; + } + + let mut d; + if c.abs() > 100.0 || c.abs() < 0.01 { + // Use scientific notation + if c > &0.0 { + d = format!("+{:e}", c); + } else { + d = format!("{:e}", c); + } + } else if c > &0.0 { + d = format!("+{}", c); + } else { + d = format!("{}", c); + } + // Add the power + let p = i; + match p { + 0 => {} // Show nothing for zero + 1 => d = format!("{}{}", d, var), + _ => d = format!("{}{}^{}", d, var, p), + } + data.push(d); + } + write!(f, "{}", data.join(" ")) + } +} + +/// In-place multiplication of a polynomial with an f64 +impl ops::Mul for Polynomial { + type Output = Polynomial; + + fn mul(mut self, rhs: f64) -> Self::Output { + for val in &mut self.coefficients { + *val *= rhs; + } + self + } +} + +/// Clone current polynomial and then multiply it with an f64 +impl ops::Mul for &Polynomial { + type Output = Polynomial; + + fn mul(self, rhs: f64) -> Self::Output { + *self * rhs + } +} + +/// In-place multiplication of a polynomial with an f64 +impl ops::Mul> for f64 { + type Output = Polynomial; + + fn mul(self, rhs: Polynomial) -> Self::Output { + let mut me = rhs; + for val in &mut me.coefficients { + *val *= self; + } + me + } +} + +impl ops::AddAssign for Polynomial { + fn add_assign(&mut self, rhs: f64) { + self.coefficients[0] += rhs; + } +} + +impl fmt::Display for Polynomial { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + self.fmt_with_var(f, "t".to_string()) + } +} + +impl fmt::LowerHex for Polynomial { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + self.fmt_with_var(f, "x".to_string()) + } +} + +pub(crate) fn add( + p1: Polynomial, + p2: Polynomial, +) -> Polynomial { + if S1 < S2 { + panic!(); + } + let mut rtn = Polynomial::zeros(); + for (i, c1) in p1.coefficients.iter().enumerate() { + rtn.coefficients[i] = match p2.coefficients.get(i) { + Some(c2) => c1 + c2, + None => *c1, + }; + } + rtn +} + +impl ops::Add> for Polynomial { + type Output = Polynomial; + /// Add Self and Other, _IF_ S2 >= S1 (else panic!) + fn add(self, other: Polynomial) -> Self::Output { + add(other, self) + } +} + +/// Subtracts p1 from p2 (p3 = p1 - p2) +pub(crate) fn sub( + p1: Polynomial, + p2: Polynomial, +) -> Polynomial { + if S1 < S2 { + panic!(); + } + let mut rtn = Polynomial::zeros(); + for (i, c1) in p1.coefficients.iter().enumerate() { + rtn.coefficients[i] = match p2.coefficients.get(i) { + Some(c2) => c1 - c2, + None => *c1, + }; + } + rtn +} + +impl ops::Sub> for Polynomial { + type Output = Polynomial; + fn sub(self, other: Polynomial) -> Self::Output { + sub(self, other) + } +} + +/// Multiply two polynomials. First parameter is the size of the first polynomial, second is the size of the second, and third is the sum of both minus one. +/// Implementation is naive and has a complexity of O(n*m) where n and m are the sizes of the polynomials. +pub(crate) fn multiply( + p1: Polynomial, + p2: Polynomial, +) -> Polynomial { + let mut rslt = Polynomial::::zeros(); + for (exponent, val) in p2.coefficients.iter().enumerate() { + if (*val).abs() < std::f64::EPSILON { + // Skip any zeros to allow multiplying large polynomials with themselves. + continue; + } + let if_was_scalar = *val * p1; + for (pos, ival) in if_was_scalar.coefficients.iter().enumerate() { + if (*ival).abs() < std::f64::EPSILON { + // Skip any zeros to allow multiplying large polynomials with themselves. + continue; + } + rslt.coefficients[pos + exponent] += *ival; + } + } + + rslt +} + +#[test] +fn poly_add() { + let p1 = Polynomial { + coefficients: [4.0, -2.0, 3.0], + }; + let p2 = Polynomial { + coefficients: [0.0, -5.0, 0.0, 2.0], + }; + // P(x) = (3x^2 - 2x + 4) + (2x^3 - 5x) + // <=> P(x) = 2x^3 + 3x^2 -7x + 4 + let p_expected = Polynomial { + coefficients: [4.0, -7.0, 3.0, 2.0], + }; + + // let p3 = add::<4, 3>(p2, p1); + let p3 = p1 + p2; + println!("p3 = {:x}\npe = {:x}", p3, p_expected); + assert_eq!(p3, p_expected); + // Check this is correct + for i in -100..=100 { + let x = i as f64; + let expect = p1.eval(x) + p2.eval(x); + assert!( + (p3.eval(x) - expect).abs() < 2e-16, + "Constant polynomial returned wrong value" + ); + } +} + +#[test] +fn poly_sub() { + let p2 = Polynomial { + coefficients: [4.0, -2.0, 3.0], + }; + let p1 = Polynomial { + coefficients: [0.0, -5.0, 0.0, 2.0], + }; + // P(x) = (3x^2 - 2x + 4) + (2x^3 - 5x) + // <=> P(x) = 2x^3 + 3x^2 -7x + 4 + let p_expected = Polynomial { + coefficients: [-4.0, -3.0, -3.0, 2.0], + }; + + let p3 = p1 - p2; + println!("p3 = {:x}\npe = {:x}", p3, p_expected); + assert_eq!(p3, p_expected); + // Check this is correct + for i in -100..=100 { + let x = i as f64; + let expect = p1.eval(x) - p2.eval(x); + assert!( + (p3.eval(x) - expect).abs() < 2e-16, + "Constant polynomial returned wrong value" + ); + } +} + +#[test] +fn poly_multiply() { + let p1 = Polynomial { + coefficients: [4.0, -2.0, 3.0], + }; + let p2 = Polynomial { + coefficients: [0.0, -5.0, 0.0, 2.0], + }; + // P(x) = (3x^2 - 2x + 4) * (2x^3 - 5x) + // <=> P(x) = (3x^2 - 2x + 4) * (2x^3) + (- 5x) * (3x^2 - 2x + 4) + // <=> P(x) = (6x^5 - 4x^4 + 8x^3) + (-15x^3 + 10x^2 -20x) + // <=> P(x) = 6x^5 - 4x^4 -7x^3 + 10x^2 -20x + let p_expected = Polynomial { + coefficients: [0.0, -20.0, 10.0, -7.0, -4.0, 6.0], + }; + + let p3 = multiply::<3, 4, 6>(p1, p2); + println!("p3 = {:x}\npe = {:x}", p3, p_expected); + assert_eq!(p3, p_expected); + // Check this is correct + for i in -100..=100 { + let x = i as f64; + let expect = p1.eval(x) * p2.eval(x); + assert!( + (p3.eval(x) - expect).abs() < 2e-16, + "Constant polynomial returned wrong value" + ); + } +} + +#[test] +fn poly_shift_mulx() { + let mut p1 = Polynomial { + coefficients: [0.194533, 3.61185323, -6.13353243, 10.0], + }; + + let pe = Polynomial { + coefficients: [0.0, 0.194533, 3.61185323, -6.13353243], + }; + + println!("p1 = {:x}", p1); + p1.shift_by_one(); + println!("p1 = {:x}\npe = {:x}", p1, pe); + assert_eq!(p1, pe); +} diff --git a/src/naif/daf/daf.rs b/src/naif/daf/daf.rs index 7a5beee7..074de98c 100644 --- a/src/naif/daf/daf.rs +++ b/src/naif/daf/daf.rs @@ -8,15 +8,14 @@ * Documentation: https://nyxspace.com/ */ +pub use super::recordtypes::{DAFFileRecord, DAFSummaryRecord, NameRecord}; +use super::{NAIFDataSet, NAIFRecord, NAIFSummaryRecord}; +use crate::{errors::IntegrityErrorKind, prelude::AniseError, DBL_SIZE}; +use core::hash::Hash; use hifitime::Epoch; use zerocopy::{FromBytes, LayoutVerified}; pub(crate) const RCRD_LEN: usize = 1024; - -pub use super::recordtypes::{DAFFileRecord, DAFSummaryRecord, NameRecord}; -use super::{NAIFDataSet, NAIFRecord, NAIFSummaryRecord}; -use crate::{prelude::AniseError, DBL_SIZE}; - #[derive(Default, Debug)] pub struct DAF<'a, R: NAIFSummaryRecord> { pub file_record: DAFFileRecord, @@ -25,10 +24,48 @@ pub struct DAF<'a, R: NAIFSummaryRecord> { pub data_summaries: &'a [R], /// All of the underlying bytes including what has already been parsed (helps for indexing the data) pub bytes: &'a [u8], + pub crc32_checksum: u32, } impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { + /// Compute the CRC32 of the underlying bytes + pub fn crc32(&self) -> u32 { + crc32fast::hash(self.bytes) + } + + /// Scrubs the data by computing the CRC32 of the bytes and making sure that it still matches the previously known hash + pub fn scrub(&self) -> Result<(), AniseError> { + if self.crc32() == self.crc32_checksum { + Ok(()) + } else { + // Compiler will optimize the double computation away + Err(AniseError::IntegrityError( + IntegrityErrorKind::ChecksumInvalid { + expected: self.crc32_checksum, + computed: self.crc32(), + }, + )) + } + } + + /// Parse the DAF onl if the CRC32 checksum of the data is valid + pub fn check_then_parse(bytes: &'a [u8], expected_crc32: u32) -> Result { + let computed_crc32 = crc32fast::hash(bytes); + if computed_crc32 == expected_crc32 { + Self::parse(bytes) + } else { + Err(AniseError::IntegrityError( + IntegrityErrorKind::ChecksumInvalid { + expected: expected_crc32, + computed: computed_crc32, + }, + )) + } + } + + /// Parse the provided bytes as a SPICE Double Array File pub fn parse(bytes: &'a [u8]) -> Result { + let crc32_checksum = crc32fast::hash(bytes); let file_record = DAFFileRecord::read_from(&bytes[..DAFFileRecord::SIZE]).unwrap(); // Move onto the next record, DAF indexes start at 1 ... =( @@ -41,7 +78,7 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { let daf_summary = DAFSummaryRecord::read_from(&rcrd_bytes[..DAFSummaryRecord::SIZE]).unwrap(); - // The SPK summaries are defined in this same record, so let's read them now. + // The summaries are defined in this same record, so let's read them now. let data_summaries = match LayoutVerified::new_slice(&rcrd_bytes[DAFSummaryRecord::SIZE..]) { Some(data) => data.into_slice(), @@ -61,6 +98,7 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { name_record, data_summaries, bytes, + crc32_checksum, }) } @@ -186,3 +224,10 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { Ok(rslt) } } + +impl<'a, R: NAIFSummaryRecord> Hash for DAF<'a, R> { + /// Hash will only hash the bytes, nothing else (since these are derived from the bytes anyway). + fn hash(&self, state: &mut H) { + self.bytes.hash(state); + } +} diff --git a/src/naif/daf/mod.rs b/src/naif/daf/mod.rs index e2d76c79..bf9396d0 100644 --- a/src/naif/daf/mod.rs +++ b/src/naif/daf/mod.rs @@ -10,7 +10,7 @@ use core::fmt::Display; use hifitime::Epoch; -use zerocopy::FromBytes; +use zerocopy::{AsBytes, FromBytes}; pub(crate) const RCRD_LEN: usize = 1024; pub mod daf; @@ -21,7 +21,7 @@ pub use daf::DAF; use crate::prelude::AniseError; pub use recordtypes::{DAFFileRecord, DAFSummaryRecord, NameRecord}; -pub trait NAIFRecord: FromBytes + Sized + Default { +pub trait NAIFRecord: AsBytes + FromBytes + Sized + Default { const SIZE: usize = core::mem::size_of::(); } @@ -32,6 +32,9 @@ pub trait NAIFSummaryRecord: NAIFRecord + Copy { fn end_epoch(&self) -> Epoch; /// Returns whatever is the ID of this summary record. fn id(&self) -> i32; + fn is_empty(&self) -> bool { + self.start_index() == self.end_index() + } } pub trait NAIFDataSet<'a>: Display { diff --git a/src/naif/daf/recordtypes.rs b/src/naif/daf/recordtypes.rs index 7098d83b..5af9b2d2 100644 --- a/src/naif/daf/recordtypes.rs +++ b/src/naif/daf/recordtypes.rs @@ -8,14 +8,14 @@ * Documentation: https://nyxspace.com/ */ -use zerocopy::FromBytes; +use zerocopy::{AsBytes, FromBytes}; use crate::{naif::Endian, prelude::AniseError, DBL_SIZE}; use log::{error, warn}; use super::{NAIFRecord, RCRD_LEN}; -#[derive(Debug, FromBytes)] +#[derive(Debug, FromBytes, AsBytes)] #[repr(C)] pub struct DAFFileRecord { pub locidw: [u8; 8], @@ -129,7 +129,7 @@ impl DAFFileRecord { } } -#[derive(Debug, Default, FromBytes)] +#[derive(AsBytes, Debug, Default, FromBytes)] #[repr(C)] pub struct DAFSummaryRecord { next_record: f64, @@ -157,7 +157,8 @@ impl DAFSummaryRecord { } } -#[derive(Debug, FromBytes)] +#[derive(AsBytes, Debug, FromBytes)] +#[repr(C)] pub struct NameRecord { raw_names: [u8; RCRD_LEN], } diff --git a/src/naif/pck/mod.rs b/src/naif/pck/mod.rs index 3411aa64..061829cb 100644 --- a/src/naif/pck/mod.rs +++ b/src/naif/pck/mod.rs @@ -8,12 +8,11 @@ * Documentation: https://nyxspace.com/ */ -use hifitime::Epoch; -use zerocopy::FromBytes; - use crate::naif::daf::{NAIFRecord, NAIFSummaryRecord}; +use hifitime::Epoch; +use zerocopy::{AsBytes, FromBytes}; -#[derive(Copy, Clone, Debug, Default, FromBytes)] +#[derive(Clone, Copy, Debug, Default, AsBytes, FromBytes)] #[repr(C)] pub struct BPCSummaryRecord { pub start_epoch_et_s: f64, @@ -23,6 +22,7 @@ pub struct BPCSummaryRecord { pub data_type_i: i32, pub start_idx: i32, pub end_idx: i32, + pub unused: i32, } impl NAIFRecord for BPCSummaryRecord {} diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs index 94c283f3..eceebea1 100644 --- a/src/naif/spk/datatypes/hermite.rs +++ b/src/naif/spk/datatypes/hermite.rs @@ -11,6 +11,7 @@ use core::fmt; use hifitime::{Duration, Epoch, TimeUnits}; +use crate::math::polyfit::{LargestPolynomial, MAX_SAMPLES}; use crate::{ math::{cartesian::CartesianState, Vector3}, naif::daf::{NAIFDataRecord, NAIFDataSet, NAIFRecord}, @@ -82,16 +83,21 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType12<'a> { } pub struct HermiteSetType13<'a> { - pub window_size: usize, + /// Number of samples to use to build the interpolation + pub samples: usize, + /// Total number of records stored in this data pub num_records: usize, + /// State date used for the interpolation pub state_data: &'a [f64], + /// Epochs of each of the state data, must be of the same length as state_data. ANISE expects this to be ordered chronologically! pub epoch_data: &'a [f64], + /// Epoch registry to reduce the search space in epoch data. pub epoch_registry: &'a [f64], } impl<'a> HermiteSetType13<'a> { pub fn degree(&self) -> usize { - 2 * self.window_size - 1 + 2 * self.samples - 1 } } @@ -116,7 +122,7 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { fn from_slice_f64(slice: &'a [f64]) -> Self { // For this kind of record, the metadata is stored at the very end of the dataset let num_records = slice[slice.len() - 1] as usize; - let window_size = slice[slice.len() - 2] as usize; + let samples = slice[slice.len() - 2] as usize; // NOTE: The ::SIZE returns the C representation memory size of this, but we only want the number of doubles. let state_data_end_idx = PositionVelocityRecord::SIZE / DBL_SIZE * num_records; let state_data = slice.get(0..state_data_end_idx).unwrap(); @@ -126,7 +132,7 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { let epoch_registry = slice.get(epoch_data_end_idx..slice.len() - 2).unwrap(); Self { - window_size, + samples, num_records, state_data, epoch_data, @@ -149,6 +155,73 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { epoch: Epoch, start_epoch: Epoch, ) -> Result { - todo!() + // Start by doing a binary search on the epoch registry to limit the search space in the total number of epochs. + // TODO: use the epoch registry to reduce the search space + // Check that we even have interpolation data for that time + if epoch.to_et_seconds() < self.epoch_data[0] + || epoch.to_et_seconds() > *self.epoch_data.last().unwrap() + { + return Err(AniseError::MissingInterpolationData(epoch)); + } + // Now, perform a binary search on the epochs themselves. + match self.epoch_data.binary_search_by(|epoch_et| { + epoch_et.partial_cmp(&epoch.to_et_seconds()).expect( + "ANISE internal error: epochs in Hermite data or provided is NaN or Infinite", + ) + }) { + Ok(idx) => { + // Oh wow, this state actually exists, no interpolation needed! + Ok(self.nth_record(idx)?.to_pos_vel()) + } + Err(idx) => { + // We didn't find it, so let's build an interpolation here. + + // Check that we won't be fetching out of the window. + let (first_idx, last_idx) = if idx < self.samples / 2 { + // Uh oh, we don't have enough states, so let's bound it to the valid state data + (0, self.samples) + } else if (self.samples % 2 == 0 && idx + self.samples / 2 + 1 > self.num_records) + || (self.samples % 2 == 1 && idx + self.samples / 2 > self.num_records) + { + (self.num_records - self.samples - 1, self.samples - 1) + } else if self.samples % 2 == 0 { + (idx - self.samples / 2, idx + self.samples / 2 + 1) + } else { + (idx - self.samples / 2, idx + self.samples / 2) + }; + + // Statically allocated arrays of the maximum number of samples + let mut epochs = [0.0; MAX_SAMPLES]; + let mut xs = [0.0; MAX_SAMPLES]; + let mut ys = [0.0; MAX_SAMPLES]; + let mut zs = [0.0; MAX_SAMPLES]; + let mut vxs = [0.0; MAX_SAMPLES]; + let mut vys = [0.0; MAX_SAMPLES]; + let mut vzs = [0.0; MAX_SAMPLES]; + for (cno, idx) in (first_idx..last_idx).enumerate() { + let record = self.nth_record(idx)?; + xs[cno] = record.x_km; + ys[cno] = record.y_km; + zs[cno] = record.z_km; + vxs[cno] = record.vx_km_s; + vys[cno] = record.vy_km_s; + vzs[cno] = record.vz_km_s; + epochs[cno] = self.epoch_data[idx]; + } + + // Build the interpolation + let (x_km, vx_km_s) = LargestPolynomial::hermite(&epochs, &xs, &vxs)? + .eval_n_deriv(epoch.to_et_seconds()); + let (y_km, vy_km_s) = LargestPolynomial::hermite(&epochs, &ys, &vys)? + .eval_n_deriv(epoch.to_et_seconds()); + let (z_km, vz_km_s) = LargestPolynomial::hermite(&epochs, &zs, &vzs)? + .eval_n_deriv(epoch.to_et_seconds()); + // And interpolate + let pos_km = Vector3::new(x_km, y_km, z_km); + let vel_km_s = Vector3::new(vx_km_s, vy_km_s, vz_km_s); + + Ok((pos_km, vel_km_s)) + } + } } } diff --git a/src/naif/spk/datatypes/posvel.rs b/src/naif/spk/datatypes/posvel.rs index f63ae5c6..77298d4a 100644 --- a/src/naif/spk/datatypes/posvel.rs +++ b/src/naif/spk/datatypes/posvel.rs @@ -9,11 +9,15 @@ */ use core::fmt; -use zerocopy::FromBytes; +use zerocopy::{AsBytes, FromBytes}; -use crate::naif::daf::{NAIFDataRecord, NAIFRecord}; +use crate::{ + math::Vector3, + naif::daf::{NAIFDataRecord, NAIFRecord}, +}; -#[derive(Copy, Clone, Default, FromBytes, Debug)] +#[derive(Copy, Clone, Default, AsBytes, FromBytes, Debug)] +#[repr(C)] pub struct PositionVelocityRecord { pub x_km: f64, pub y_km: f64, @@ -23,6 +27,15 @@ pub struct PositionVelocityRecord { pub vz_km_s: f64, } +impl PositionVelocityRecord { + pub fn to_pos_vel(&self) -> (Vector3, Vector3) { + ( + Vector3::new(self.x_km, self.y_km, self.z_km), + Vector3::new(self.vx_km_s, self.vy_km_s, self.vz_km_s), + ) + } +} + impl fmt::Display for PositionVelocityRecord { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{self:?}") diff --git a/src/naif/spk/summary.rs b/src/naif/spk/summary.rs index 03de27fb..b0036847 100644 --- a/src/naif/spk/summary.rs +++ b/src/naif/spk/summary.rs @@ -11,14 +11,14 @@ use core::fmt; use hifitime::Epoch; use log::error; -use zerocopy::FromBytes; +use zerocopy::{AsBytes, FromBytes}; use crate::{ naif::daf::{NAIFRecord, NAIFSummaryRecord}, prelude::AniseError, }; -#[derive(Clone, Copy, Debug, Default, FromBytes)] +#[derive(Clone, Copy, Debug, Default, AsBytes, FromBytes)] #[repr(C)] pub struct SPKSummaryRecord { pub start_epoch_et_s: f64, diff --git a/src/structure/orientation/trigangle.rs b/src/structure/orientation/trigangle.rs index 191be52e..531cef5a 100644 --- a/src/structure/orientation/trigangle.rs +++ b/src/structure/orientation/trigangle.rs @@ -20,24 +20,25 @@ use zerocopy::{AsBytes, FromBytes}; /// /// Expressions for the right ascension and declination of the north pole and the location of the prime meridian for any satellite of a given planet are as follows: /// +/// ```text /// 2 ____ -/// RA2*t \ -/// RA = RA0 + RA1*t/T + ------ + / a * sin * theta +/// RA2*t \\ +/// RA = RA0 + RA1*t/T + ------ + // a * sin * theta /// 2 ---- i i /// T i /// /// 2 ____ -/// DEC2*t \ -/// DEC = DEC0 + DEC1*t/T + ------- + / d * cos * theta +/// DEC2*t \\ +/// DEC = DEC0 + DEC1*t/T + ------- + // d * cos * theta /// 2 ---- i i /// T i /// /// 2 ____ -/// W2*t \ -/// W = W0 + W1*t/d + ----- + / w * sin * theta +/// W2*t \\ +/// W = W0 + W1*t/d + ----- + // w * sin * theta /// 2 ---- i i /// d i -/// +/// ``` /// where /// /// d = seconds/day diff --git a/tests/ephemerides/mod.rs b/tests/ephemerides/mod.rs index 3c9104ac..0da0ff79 100644 --- a/tests/ephemerides/mod.rs +++ b/tests/ephemerides/mod.rs @@ -11,3 +11,4 @@ mod parent_translation_verif; mod paths; mod translation; +mod validation; diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 485fcf29..0da48158 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -10,11 +10,11 @@ use core::f64::EPSILON; -use anise::constants::frames::{EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, VENUS_J2000}; +use anise::constants::frames::{EARTH_J2000, EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, VENUS_J2000}; +use anise::constants::orientations::J2000; use anise::file_mmap; use anise::math::Vector3; use anise::prelude::*; -use log::error; // For the Earth Moon Barycenter to Luna, there velocity error is up to 3e-14 km/s, or 3e-11 m/s, or 13 picometers per second. const VELOCITY_EPSILON_KM_S: f64 = 1e-13; @@ -305,286 +305,26 @@ fn de438s_translation_verif_emb2luna() { } #[test] -#[ignore] -#[cfg(feature = "std")] -fn validate_jplde_translation() { - use anise::math::utils::{abs_diff, rel_diff}; - use anise::naif::daf::NAIFSummaryRecord; - use anise::prelude::Frame; - use arrow::array::{ArrayRef, Float64Array, StringArray, UInt8Array}; - use arrow::datatypes::{DataType, Field, Schema}; - use arrow::record_batch::RecordBatch; - use hifitime::{TimeSeries, TimeUnits}; - use log::info; - use parquet::arrow::arrow_writer::ArrowWriter; - use parquet::file::properties::WriterProperties; - use spice; - use std::fs::File; - use std::sync::Arc; - - // If the error is larger than this, we should fail immediately. - const FAIL_POS_KM: f64 = 1e2; - const FAIL_VEL_KM_S: f64 = 1e-1; - // Number of queries we should do per pair of ephemerides - const NUM_QUERIES_PER_PAIR: f64 = 1_000.0; - const BATCH_SIZE: usize = 10_000; +fn spk_hermite_type31_verif() { + // "Load" the file via a memory map (avoids allocations) + let path = "./data/de438s.bsp"; + let buf = file_mmap!(path).unwrap(); + let spk = SPK::parse(&buf).unwrap(); - if pretty_env_logger::try_init().is_err() { - println!("could not init env_logger"); - } + let buf = file_mmap!("./target/Hermite.bsp").unwrap(); + let spacecraft = SPK::parse(&buf).unwrap(); - // Output parquet file - - // Build the schema - let schema = Schema::new(vec![ - Field::new("DE file", DataType::Utf8, false), - Field::new("source frame", DataType::Utf8, false), - Field::new("destination frame", DataType::Utf8, false), - Field::new("# hops", DataType::UInt8, false), - Field::new("component", DataType::Utf8, false), - Field::new("Epoch UTC", DataType::Utf8, false), - Field::new("absolute error", DataType::Float64, false), - Field::new("relative error", DataType::Float64, false), - ]); - - let file = File::create("target/validation-test-results.parquet").unwrap(); - - // Default writer properties - let props = WriterProperties::builder().build(); - - let mut writer = ArrowWriter::try_new(file, Arc::new(schema), Some(props)).unwrap(); - - for de_name in &["de438s", "de440"] { - let path = format!("data/{de_name}.bsp"); - // SPICE load - spice::furnsh(&path); - - // ANISE load - let buf = file_mmap!(path).unwrap(); - let spk = SPK::parse(&buf).unwrap(); - let ctx = Context::from_spk(&spk).unwrap(); - - // We only have one SPK loaded, so we know what summary to go through - let first_spk = ctx.spk_data[0].unwrap(); - - let mut pairs = Vec::new(); - - for ephem1 in first_spk.data_summaries { - let j2000_ephem1 = Frame::from_ephem_j2000(ephem1.target_id); - - for ephem2 in first_spk.data_summaries { - if ephem1.target_id == ephem2.target_id { - continue; - } - - let key = if ephem1.target_id < ephem2.target_id { - (ephem1.target_id, ephem2.target_id) - } else { - (ephem2.target_id, ephem1.target_id) - }; - - if pairs.contains(&key) { - // We're already handled that pair - continue; - } - pairs.push(key); - - let j2000_ephem2 = Frame::from_ephem_j2000(ephem2.target_id); - - // Query the ephemeris data for a bunch of different times. - let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { - ephem2.start_epoch() - } else { - ephem1.start_epoch() - }; - - let end_epoch = if ephem1.end_epoch() < ephem2.end_epoch() { - ephem1.end_epoch() - } else { - ephem2.end_epoch() - }; - - let time_step = - ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); - - let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); - - let component = ["X", "Y", "Z", "VX", "VY", "VZ"]; - - let mut batch_de_name = Vec::with_capacity(BATCH_SIZE); - let mut batch_src_frm = Vec::with_capacity(BATCH_SIZE); - let mut batch_dest_frm = Vec::with_capacity(BATCH_SIZE); - let mut batch_comp = Vec::with_capacity(BATCH_SIZE); - let mut batch_epoch = Vec::with_capacity(BATCH_SIZE); - let mut batch_hops = Vec::with_capacity(BATCH_SIZE); - let mut batch_abs = Vec::with_capacity(BATCH_SIZE); - let mut batch_rel = Vec::with_capacity(BATCH_SIZE); - - for (i, epoch) in time_it.enumerate() { - let hops = ctx - .common_ephemeris_path(j2000_ephem1, j2000_ephem2, epoch) - .unwrap() - .0 as u8; - - match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { - Ok(state) => { - // Perform the same query in SPICE - let (spice_state, _) = spice::spkezr( - ephem1.spice_name().unwrap(), - epoch.to_et_seconds(), - "J2000", - "NONE", - ephem2.spice_name().unwrap(), - ); - - // Check component by component instead of rebuilding a Vector3 from the SPICE data - for i in 0..6 { - let (anise_value, max_err) = if i < 3 { - (state.radius_km[i], FAIL_POS_KM) - } else { - (state.velocity_km_s[i - 3], FAIL_VEL_KM_S) - }; - - // We don't look at the absolute error here, that's for the stats to show any skewness - let abs_err = abs_diff(anise_value, spice_state[i]); - let rel_err = rel_diff(anise_value, spice_state[i], EPSILON); - - if !relative_eq!(anise_value, spice_state[i], epsilon = max_err) { - // Always save the parquet file - writer.close().unwrap(); - - panic!( - "{epoch:E}\t{}got = {:.16}\texp = {:.16}\terr = {:.16}", - component[i], anise_value, spice_state[i], rel_err - ); - } - - // Update data - - batch_de_name.push(de_name.clone()); - batch_src_frm.push(j2000_ephem1.to_string()); - batch_dest_frm.push(j2000_ephem2.to_string()); - batch_hops.push(hops); - batch_comp.push(component[i]); - batch_epoch.push("".to_string()); - batch_abs.push(abs_err); - batch_rel.push(rel_err); - } - - // Consider writing the batch - if i % BATCH_SIZE == 0 { - writer - .write( - &RecordBatch::try_from_iter(vec![ - ( - "DE file", - Arc::new(StringArray::from(batch_de_name.clone())) - as ArrayRef, - ), - ( - "source frame", - Arc::new(StringArray::from(batch_src_frm.clone())) - as ArrayRef, - ), - ( - "destination frame", - Arc::new(StringArray::from(batch_dest_frm.clone())) - as ArrayRef, - ), - ( - "# hops", - Arc::new(UInt8Array::from(batch_hops.clone())) - as ArrayRef, - ), - ( - "component", - Arc::new(StringArray::from(batch_comp.clone())) - as ArrayRef, - ), - ( - "Epoch UTC", - Arc::new(StringArray::from(batch_epoch.clone())) - as ArrayRef, - ), - ( - "absolute error", - Arc::new(Float64Array::from(batch_abs.clone())) - as ArrayRef, - ), - ( - "relative error", - Arc::new(Float64Array::from(batch_rel.clone())) - as ArrayRef, - ), - ]) - .unwrap(), - ) - .unwrap(); - // Re-init all of the vectors - batch_de_name = Vec::with_capacity(BATCH_SIZE); - batch_src_frm = Vec::with_capacity(BATCH_SIZE); - batch_dest_frm = Vec::with_capacity(BATCH_SIZE); - batch_comp = Vec::with_capacity(BATCH_SIZE); - batch_epoch = Vec::with_capacity(BATCH_SIZE); - batch_hops = Vec::with_capacity(BATCH_SIZE); - batch_abs = Vec::with_capacity(BATCH_SIZE); - batch_rel = Vec::with_capacity(BATCH_SIZE); - } - } - Err(e) => { - // Always save the parquet file - // writer.close().unwrap(); - error!("At epoch {epoch:E}: {e}"); - } - }; - } - - writer - .write( - &RecordBatch::try_from_iter(vec![ - ( - "DE file", - Arc::new(StringArray::from(batch_de_name)) as ArrayRef, - ), - ( - "source frame", - Arc::new(StringArray::from(batch_src_frm)) as ArrayRef, - ), - ( - "destination frame", - Arc::new(StringArray::from(batch_dest_frm)) as ArrayRef, - ), - ("# hops", Arc::new(UInt8Array::from(batch_hops)) as ArrayRef), - ( - "component", - Arc::new(StringArray::from(batch_comp)) as ArrayRef, - ), - ( - "Epoch UTC", - Arc::new(StringArray::from(batch_epoch)) as ArrayRef, - ), - ( - "absolute error", - Arc::new(Float64Array::from(batch_abs)) as ArrayRef, - ), - ( - "relative error", - Arc::new(Float64Array::from(batch_rel)) as ArrayRef, - ), - ]) - .unwrap(), - ) - .unwrap(); - - // Regularly flush to not lose data - writer.flush().unwrap(); - } - - info!("[{de_name}] done with {}", j2000_ephem1); - } - // Unload SPICE (note that this is not needed for ANISE because it falls out of scope) - spice::unload(&format!("data/{de_name}.bsp")); - } - // Always save the parquet file - writer.close().unwrap(); + let ctx = Context::from_spk(&spk) + .unwrap() + .load_spk(&spacecraft) + .unwrap(); + + let epoch = Epoch::from_gregorian_utc_at_midnight(2024, 7, 1); + + let my_sc_j2k = Frame::from_ephem_orient(-111229882, J2000); + + let state = ctx + .translate_from_to_km_s_geometric(my_sc_j2k, EARTH_J2000, epoch) + .unwrap(); + println!("{state:?}"); } diff --git a/tests/ephemerides/validation/hermite_type13.rs b/tests/ephemerides/validation/hermite_type13.rs new file mode 100644 index 00000000..194491c1 --- /dev/null +++ b/tests/ephemerides/validation/hermite_type13.rs @@ -0,0 +1,432 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +/// For the DE440 and DE438s files, load them in CSPICE (using rust-spice) and in ANISE, compute NUM_QUERIES_PER_PAIR states between each pair of targets in each file (equally spaced for the duration of the ephemeris), +/// store all of the data in a parquet file, and analyze it to make sure that the errors in computation between CSPICE and ANISE are within bounds. +/// WARNING: This is an O(N*log(N)*K) test, where N is the number of items in each SPK file and K is the number of queries per pair, so it's ignored by default. +/// On my computer, in release mode, this test runs in 5.15 seconds. +#[test] +#[ignore] +#[cfg(feature = "std")] +fn validate_hermite_translation() { + // ANISE imports + use anise::file_mmap; + use anise::math::utils::{abs_diff, rel_diff}; + use anise::prelude::*; + // Test imports + use arrow::array::{ArrayRef, Float64Array, StringArray, UInt8Array}; + use arrow::datatypes::{DataType, Field, Schema}; + use arrow::record_batch::RecordBatch; + use core::f64::EPSILON; + use hifitime::{TimeSeries, TimeUnits}; + use log::error; + use log::info; + use parquet::arrow::arrow_writer::ArrowWriter; + use parquet::file::properties::WriterProperties; + use polars::prelude::*; + use spice; + use std::fs::File; + use std::sync::Arc; + + // If the error is larger than this, we should fail immediately. + const FAIL_POS_KM: f64 = 1e2; + const FAIL_VEL_KM_S: f64 = 1e-1; + // Number of queries we should do per pair of ephemerides + const NUM_QUERIES_PER_PAIR: f64 = 1_000.0; + const BATCH_SIZE: usize = 10_000; + + if pretty_env_logger::try_init().is_err() { + println!("could not init env_logger"); + } + + // Output parquet file + + // Build the schema + let schema = Schema::new(vec![ + Field::new("DE file", DataType::Utf8, false), + Field::new("source frame", DataType::Utf8, false), + Field::new("destination frame", DataType::Utf8, false), + Field::new("# hops", DataType::UInt8, false), + Field::new("component", DataType::Utf8, false), + Field::new("File delta T (s)", DataType::Float64, false), + Field::new("absolute error (km)", DataType::Float64, false), + Field::new("relative error (km)", DataType::Float64, false), + ]); + + let file = File::create("target/validation-test-results.parquet").unwrap(); + + // Default writer properties + let props = WriterProperties::builder().build(); + + let mut writer = ArrowWriter::try_new(file, Arc::new(schema), Some(props)).unwrap(); + + let mut num_comparisons: usize = 0; + + for de_name in &["de438s", "de440"] { + let path = format!("data/{de_name}.bsp"); + // SPICE load + spice::furnsh(&path); + + // ANISE load + let buf = file_mmap!(path).unwrap(); + let spk = SPK::parse(&buf).unwrap(); + let ctx = Context::from_spk(&spk).unwrap(); + + // We only have one SPK loaded, so we know what summary to go through + let first_spk = ctx.spk_data[0].unwrap(); + + let mut pairs = Vec::new(); + + for ephem1 in first_spk.data_summaries { + let j2000_ephem1 = Frame::from_ephem_j2000(ephem1.target_id); + + for ephem2 in first_spk.data_summaries { + if ephem1.target_id == ephem2.target_id { + continue; + } + + let key = if ephem1.target_id < ephem2.target_id { + (ephem1.target_id, ephem2.target_id) + } else { + (ephem2.target_id, ephem1.target_id) + }; + + if pairs.contains(&key) { + // We're already handled that pair + continue; + } + pairs.push(key); + + let j2000_ephem2 = Frame::from_ephem_j2000(ephem2.target_id); + + // Query the ephemeris data for a bunch of different times. + let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { + ephem2.start_epoch() + } else { + ephem1.start_epoch() + }; + + let end_epoch = if ephem1.end_epoch() < ephem2.end_epoch() { + ephem1.end_epoch() + } else { + ephem2.end_epoch() + }; + + let time_step = + ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); + + let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); + + let component = ["X", "Y", "Z", "VX", "VY", "VZ"]; + + let mut batch_de_name = Vec::with_capacity(BATCH_SIZE); + let mut batch_src_frm = Vec::with_capacity(BATCH_SIZE); + let mut batch_dest_frm = Vec::with_capacity(BATCH_SIZE); + let mut batch_comp = Vec::with_capacity(BATCH_SIZE); + let mut batch_epoch = Vec::with_capacity(BATCH_SIZE); + let mut batch_hops = Vec::with_capacity(BATCH_SIZE); + let mut batch_abs = Vec::with_capacity(BATCH_SIZE); + let mut batch_rel = Vec::with_capacity(BATCH_SIZE); + + for (i, epoch) in time_it.enumerate() { + let hops = ctx + .common_ephemeris_path(j2000_ephem1, j2000_ephem2, epoch) + .unwrap() + .0 as u8; + + match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { + Ok(state) => { + num_comparisons += 1; + // Perform the same query in SPICE + let (spice_state, _) = spice::spkezr( + ephem1.spice_name().unwrap(), + epoch.to_et_seconds(), + "J2000", + "NONE", + ephem2.spice_name().unwrap(), + ); + + // Check component by component instead of rebuilding a Vector3 from the SPICE data + for i in 0..6 { + let (anise_value, max_err) = if i < 3 { + (state.radius_km[i], FAIL_POS_KM) + } else { + (state.velocity_km_s[i - 3], FAIL_VEL_KM_S) + }; + + // We don't look at the absolute error here, that's for the stats to show any skewness + let abs_err = abs_diff(anise_value, spice_state[i]); + let rel_err = rel_diff(anise_value, spice_state[i], EPSILON); + + if !relative_eq!(anise_value, spice_state[i], epsilon = max_err) { + // Always save the parquet file + writer.close().unwrap(); + + panic!( + "{epoch:E}\t{}got = {:.16}\texp = {:.16}\terr = {:.16}", + component[i], anise_value, spice_state[i], rel_err + ); + } + + // Update data + + batch_de_name.push(de_name.clone()); + batch_src_frm.push(j2000_ephem1.to_string()); + batch_dest_frm.push(j2000_ephem2.to_string()); + batch_hops.push(hops); + batch_comp.push(component[i]); + batch_epoch.push((epoch - start_epoch).to_seconds()); + batch_abs.push(abs_err); + batch_rel.push(rel_err); + } + + // Consider writing the batch + if i % BATCH_SIZE == 0 { + writer + .write( + &RecordBatch::try_from_iter(vec![ + ( + "DE file", + Arc::new(StringArray::from(batch_de_name.clone())) + as ArrayRef, + ), + ( + "source frame", + Arc::new(StringArray::from(batch_src_frm.clone())) + as ArrayRef, + ), + ( + "destination frame", + Arc::new(StringArray::from(batch_dest_frm.clone())) + as ArrayRef, + ), + ( + "# hops", + Arc::new(UInt8Array::from(batch_hops.clone())) + as ArrayRef, + ), + ( + "component", + Arc::new(StringArray::from(batch_comp.clone())) + as ArrayRef, + ), + ( + "File delta T (s)", + Arc::new(Float64Array::from(batch_epoch.clone())) + as ArrayRef, + ), + ( + "absolute error (km)", + Arc::new(Float64Array::from(batch_abs.clone())) + as ArrayRef, + ), + ( + "relative error (km)", + Arc::new(Float64Array::from(batch_rel.clone())) + as ArrayRef, + ), + ]) + .unwrap(), + ) + .unwrap(); + // Re-init all of the vectors + batch_de_name = Vec::with_capacity(BATCH_SIZE); + batch_src_frm = Vec::with_capacity(BATCH_SIZE); + batch_dest_frm = Vec::with_capacity(BATCH_SIZE); + batch_comp = Vec::with_capacity(BATCH_SIZE); + batch_epoch = Vec::with_capacity(BATCH_SIZE); + batch_hops = Vec::with_capacity(BATCH_SIZE); + batch_abs = Vec::with_capacity(BATCH_SIZE); + batch_rel = Vec::with_capacity(BATCH_SIZE); + } + } + Err(e) => { + // Always save the parquet file + // writer.close().unwrap(); + error!("At epoch {epoch:E}: {e}"); + } + }; + } + + writer + .write( + &RecordBatch::try_from_iter(vec![ + ( + "DE file", + Arc::new(StringArray::from(batch_de_name)) as ArrayRef, + ), + ( + "source frame", + Arc::new(StringArray::from(batch_src_frm)) as ArrayRef, + ), + ( + "destination frame", + Arc::new(StringArray::from(batch_dest_frm)) as ArrayRef, + ), + ("# hops", Arc::new(UInt8Array::from(batch_hops)) as ArrayRef), + ( + "component", + Arc::new(StringArray::from(batch_comp)) as ArrayRef, + ), + ( + "File delta T (s)", + Arc::new(Float64Array::from(batch_epoch)) as ArrayRef, + ), + ( + "absolute error (km)", + Arc::new(Float64Array::from(batch_abs)) as ArrayRef, + ), + ( + "relative error (km)", + Arc::new(Float64Array::from(batch_rel)) as ArrayRef, + ), + ]) + .unwrap(), + ) + .unwrap(); + + // Regularly flush to not lose data + writer.flush().unwrap(); + } + + info!("[{de_name}] done with {}", j2000_ephem1); + } + // Unload SPICE (note that this is not needed for ANISE because it falls out of scope) + spice::unload(&format!("data/{de_name}.bsp")); + } + // Save the parquet file + writer.close().unwrap(); + + info!("done with {num_comparisons} comparisons"); + + // And now, analyze the parquet file! + + let df = LazyFrame::scan_parquet("target/validation-test-results.parquet", Default::default()) + .unwrap(); + + const TYPICAL_REL_ERR_KM: f64 = 1e-7; // Allow up to 100 micrometers of error. + const MAX_REL_ERR_KM: f64 = 1e-5; // Allow up to 1 centimeter of error. + + let rel_errors = df + .clone() + .select([ + min("relative error (km)").alias("min rel err (km) OK"), + col("relative error (km)") + .quantile(0.25, QuantileInterpolOptions::Higher) + .alias("q25 rel err (km) OK"), + col("relative error (km)") + .mean() + .alias("mean rel err (km) OK"), + col("relative error (km)") + .median() + .alias("median rel err (km) OK"), + col("relative error (km)") + .quantile(0.75, QuantileInterpolOptions::Higher) + .alias("q75 rel err (km) OK"), + col("relative error (km)") + .quantile(0.99, QuantileInterpolOptions::Higher) + .alias("q99 rel err (km) OK"), + max("relative error (km)").alias("max rel err (km) OK"), + ]) + .collect() + .unwrap(); + println!("{}", rel_errors); + + let rel_errors_ok = df + .clone() + .select([ + min("relative error (km)") + .alias("min rel err (km) OK") + .lt(TYPICAL_REL_ERR_KM), + col("relative error (km)") + .quantile(0.25, QuantileInterpolOptions::Higher) + .alias("q25 rel err (km) OK") + .lt(TYPICAL_REL_ERR_KM), + col("relative error (km)") + .mean() + .alias("mean rel err (km) OK") + .lt(TYPICAL_REL_ERR_KM), + col("relative error (km)") + .median() + .alias("median rel err (km) OK") + .lt(TYPICAL_REL_ERR_KM), + col("relative error (km)") + .quantile(0.75, QuantileInterpolOptions::Higher) + .alias("q75 rel err (km) OK") + .lt(TYPICAL_REL_ERR_KM), + col("relative error (km)") + .quantile(0.99, QuantileInterpolOptions::Higher) + .alias("q99 rel err (km) OK") + .lt(MAX_REL_ERR_KM), + max("relative error (km)") + .alias("max rel err (km) OK") + .lt(MAX_REL_ERR_KM), + ]) + .collect() + .unwrap(); + + for item in rel_errors_ok.get_row(0).0 { + match item { + AnyValue::Boolean(val) => assert!(val), + _ => panic!("expected a boolean in the DataFrame column"), + } + } + + let abs_errors = df + .clone() + .select([ + // Absolute error + min("absolute error (km)").alias("min abs err (km)"), + col("absolute error (km)") + .quantile(0.25, QuantileInterpolOptions::Higher) + .alias("q25 abs err (km)"), + col("absolute error (km)").mean().alias("mean abs err (km)"), + col("absolute error (km)") + .median() + .alias("median abs err (km)"), + col("absolute error (km)") + .quantile(0.75, QuantileInterpolOptions::Higher) + .alias("q75 abs err (km)"), + col("absolute error (km)") + .quantile(0.99, QuantileInterpolOptions::Higher) + .alias("q99 abs err (km)"), + max("absolute error (km)").alias("max abs err (km)"), + ]) + .collect() + .unwrap(); + println!("{}", abs_errors); + + // For debugging purposes, print all of the q99 errors + let q99_abs = match abs_errors.get_row(0).0[5] { + AnyValue::Float64(val) => val, + _ => unreachable!(), + }; + + let mut outliers = df + .filter(col("absolute error (km)").gt(lit(q99_abs))) + .select([ + col("absolute error (km)"), + col("relative error (km)"), + col("File delta T (s)"), + col("DE file"), + col("source frame"), + col("destination frame"), + max("component"), + ]) + .collect() + .unwrap(); + println!("{}", outliers); + + let outfile = "target/validation-outliers.parquet"; + let mut file = std::fs::File::create(outfile).unwrap(); + ParquetWriter::new(&mut file).finish(&mut outliers).unwrap(); + + info!("saved outliers to {outfile}"); +} diff --git a/tests/ephemerides/validation/jplde_cheby_type2.rs b/tests/ephemerides/validation/jplde_cheby_type2.rs new file mode 100644 index 00000000..3dc6cab7 --- /dev/null +++ b/tests/ephemerides/validation/jplde_cheby_type2.rs @@ -0,0 +1,431 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +/// For the DE440 and DE438s files, load them in CSPICE (using rust-spice) and in ANISE, compute NUM_QUERIES_PER_PAIR states between each pair of targets in each file (equally spaced for the duration of the ephemeris), +/// store all of the data in a parquet file, and analyze it to make sure that the errors in computation between CSPICE and ANISE are within bounds. +/// WARNING: This is an O(N*log(N)*K) test, where N is the number of items in each SPK file and K is the number of queries per pair, so it's ignored by default. +/// On my computer, in release mode, this test runs in 5.15 seconds. +#[test] +#[ignore] +#[cfg(feature = "std")] +fn validate_jplde_translation() { + // ANISE imports + use anise::file_mmap; + use anise::math::utils::{abs_diff, rel_diff}; + use anise::prelude::*; + // Test imports + use arrow::array::{ArrayRef, Float64Array, StringArray, UInt8Array}; + use arrow::datatypes::{DataType, Field, Schema}; + use arrow::record_batch::RecordBatch; + use core::f64::EPSILON; + use hifitime::{TimeSeries, TimeUnits}; + use log::error; + use log::info; + use parquet::arrow::arrow_writer::ArrowWriter; + use parquet::file::properties::WriterProperties; + use polars::prelude::*; + use spice; + use std::sync::Arc; + + // If the error is larger than this, we should fail immediately. + const FAIL_POS_KM: f64 = 1e2; + const FAIL_VEL_KM_S: f64 = 1e-1; + // Number of queries we should do per pair of ephemerides + const NUM_QUERIES_PER_PAIR: f64 = 1_000.0; + const BATCH_SIZE: usize = 10_000; + + if pretty_env_logger::try_init().is_err() { + println!("could not init env_logger"); + } + + // Output parquet file + + // Build the schema + let schema = Schema::new(vec![ + Field::new("DE file", DataType::Utf8, false), + Field::new("source frame", DataType::Utf8, false), + Field::new("destination frame", DataType::Utf8, false), + Field::new("# hops", DataType::UInt8, false), + Field::new("component", DataType::Utf8, false), + Field::new("File delta T (s)", DataType::Float64, false), + Field::new("absolute error (km)", DataType::Float64, false), + Field::new("relative error (km)", DataType::Float64, false), + ]); + + let file = File::create("target/validation-test-results.parquet").unwrap(); + + // Default writer properties + let props = WriterProperties::builder().build(); + + let mut writer = ArrowWriter::try_new(file, Arc::new(schema), Some(props)).unwrap(); + + let mut num_comparisons: usize = 0; + + for de_name in &["de438s", "de440"] { + let path = format!("data/{de_name}.bsp"); + // SPICE load + spice::furnsh(&path); + + // ANISE load + let buf = file_mmap!(path).unwrap(); + let spk = SPK::parse(&buf).unwrap(); + let ctx = Context::from_spk(&spk).unwrap(); + + // We only have one SPK loaded, so we know what summary to go through + let first_spk = ctx.spk_data[0].unwrap(); + + let mut pairs = Vec::new(); + + for ephem1 in first_spk.data_summaries { + let j2000_ephem1 = Frame::from_ephem_j2000(ephem1.target_id); + + for ephem2 in first_spk.data_summaries { + if ephem1.target_id == ephem2.target_id { + continue; + } + + let key = if ephem1.target_id < ephem2.target_id { + (ephem1.target_id, ephem2.target_id) + } else { + (ephem2.target_id, ephem1.target_id) + }; + + if pairs.contains(&key) { + // We're already handled that pair + continue; + } + pairs.push(key); + + let j2000_ephem2 = Frame::from_ephem_j2000(ephem2.target_id); + + // Query the ephemeris data for a bunch of different times. + let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { + ephem2.start_epoch() + } else { + ephem1.start_epoch() + }; + + let end_epoch = if ephem1.end_epoch() < ephem2.end_epoch() { + ephem1.end_epoch() + } else { + ephem2.end_epoch() + }; + + let time_step = + ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); + + let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); + + let component = ["X", "Y", "Z", "VX", "VY", "VZ"]; + + let mut batch_de_name = Vec::with_capacity(BATCH_SIZE); + let mut batch_src_frm = Vec::with_capacity(BATCH_SIZE); + let mut batch_dest_frm = Vec::with_capacity(BATCH_SIZE); + let mut batch_comp = Vec::with_capacity(BATCH_SIZE); + let mut batch_epoch = Vec::with_capacity(BATCH_SIZE); + let mut batch_hops = Vec::with_capacity(BATCH_SIZE); + let mut batch_abs = Vec::with_capacity(BATCH_SIZE); + let mut batch_rel = Vec::with_capacity(BATCH_SIZE); + + for (i, epoch) in time_it.enumerate() { + let hops = ctx + .common_ephemeris_path(j2000_ephem1, j2000_ephem2, epoch) + .unwrap() + .0 as u8; + + match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { + Ok(state) => { + num_comparisons += 1; + // Perform the same query in SPICE + let (spice_state, _) = spice::spkezr( + ephem1.spice_name().unwrap(), + epoch.to_et_seconds(), + "J2000", + "NONE", + ephem2.spice_name().unwrap(), + ); + + // Check component by component instead of rebuilding a Vector3 from the SPICE data + for i in 0..6 { + let (anise_value, max_err) = if i < 3 { + (state.radius_km[i], FAIL_POS_KM) + } else { + (state.velocity_km_s[i - 3], FAIL_VEL_KM_S) + }; + + // We don't look at the absolute error here, that's for the stats to show any skewness + let abs_err = abs_diff(anise_value, spice_state[i]); + let rel_err = rel_diff(anise_value, spice_state[i], EPSILON); + + if !relative_eq!(anise_value, spice_state[i], epsilon = max_err) { + // Always save the parquet file + writer.close().unwrap(); + + panic!( + "{epoch:E}\t{}got = {:.16}\texp = {:.16}\terr = {:.16}", + component[i], anise_value, spice_state[i], rel_err + ); + } + + // Update data + + batch_de_name.push(de_name.clone()); + batch_src_frm.push(j2000_ephem1.to_string()); + batch_dest_frm.push(j2000_ephem2.to_string()); + batch_hops.push(hops); + batch_comp.push(component[i]); + batch_epoch.push((epoch - start_epoch).to_seconds()); + batch_abs.push(abs_err); + batch_rel.push(rel_err); + } + + // Consider writing the batch + if i % BATCH_SIZE == 0 { + writer + .write( + &RecordBatch::try_from_iter(vec![ + ( + "DE file", + Arc::new(StringArray::from(batch_de_name.clone())) + as ArrayRef, + ), + ( + "source frame", + Arc::new(StringArray::from(batch_src_frm.clone())) + as ArrayRef, + ), + ( + "destination frame", + Arc::new(StringArray::from(batch_dest_frm.clone())) + as ArrayRef, + ), + ( + "# hops", + Arc::new(UInt8Array::from(batch_hops.clone())) + as ArrayRef, + ), + ( + "component", + Arc::new(StringArray::from(batch_comp.clone())) + as ArrayRef, + ), + ( + "File delta T (s)", + Arc::new(Float64Array::from(batch_epoch.clone())) + as ArrayRef, + ), + ( + "absolute error (km)", + Arc::new(Float64Array::from(batch_abs.clone())) + as ArrayRef, + ), + ( + "relative error (km)", + Arc::new(Float64Array::from(batch_rel.clone())) + as ArrayRef, + ), + ]) + .unwrap(), + ) + .unwrap(); + // Re-init all of the vectors + batch_de_name = Vec::with_capacity(BATCH_SIZE); + batch_src_frm = Vec::with_capacity(BATCH_SIZE); + batch_dest_frm = Vec::with_capacity(BATCH_SIZE); + batch_comp = Vec::with_capacity(BATCH_SIZE); + batch_epoch = Vec::with_capacity(BATCH_SIZE); + batch_hops = Vec::with_capacity(BATCH_SIZE); + batch_abs = Vec::with_capacity(BATCH_SIZE); + batch_rel = Vec::with_capacity(BATCH_SIZE); + } + } + Err(e) => { + // Always save the parquet file + // writer.close().unwrap(); + error!("At epoch {epoch:E}: {e}"); + } + }; + } + + writer + .write( + &RecordBatch::try_from_iter(vec![ + ( + "DE file", + Arc::new(StringArray::from(batch_de_name)) as ArrayRef, + ), + ( + "source frame", + Arc::new(StringArray::from(batch_src_frm)) as ArrayRef, + ), + ( + "destination frame", + Arc::new(StringArray::from(batch_dest_frm)) as ArrayRef, + ), + ("# hops", Arc::new(UInt8Array::from(batch_hops)) as ArrayRef), + ( + "component", + Arc::new(StringArray::from(batch_comp)) as ArrayRef, + ), + ( + "File delta T (s)", + Arc::new(Float64Array::from(batch_epoch)) as ArrayRef, + ), + ( + "absolute error (km)", + Arc::new(Float64Array::from(batch_abs)) as ArrayRef, + ), + ( + "relative error (km)", + Arc::new(Float64Array::from(batch_rel)) as ArrayRef, + ), + ]) + .unwrap(), + ) + .unwrap(); + + // Regularly flush to not lose data + writer.flush().unwrap(); + } + + info!("[{de_name}] done with {}", j2000_ephem1); + } + // Unload SPICE (note that this is not needed for ANISE because it falls out of scope) + spice::unload(&format!("data/{de_name}.bsp")); + } + // Save the parquet file + writer.close().unwrap(); + + info!("done with {num_comparisons} comparisons"); + + // And now, analyze the parquet file! + + let df = LazyFrame::scan_parquet("target/validation-test-results.parquet", Default::default()) + .unwrap(); + + const TYPICAL_REL_ERR_KM: f64 = 1e-7; // Allow up to 100 micrometers of error. + const MAX_REL_ERR_KM: f64 = 1e-5; // Allow up to 1 centimeter of error. + + let rel_errors = df + .clone() + .select([ + min("relative error (km)").alias("min rel err (km) OK"), + col("relative error (km)") + .quantile(0.25, QuantileInterpolOptions::Higher) + .alias("q25 rel err (km) OK"), + col("relative error (km)") + .mean() + .alias("mean rel err (km) OK"), + col("relative error (km)") + .median() + .alias("median rel err (km) OK"), + col("relative error (km)") + .quantile(0.75, QuantileInterpolOptions::Higher) + .alias("q75 rel err (km) OK"), + col("relative error (km)") + .quantile(0.99, QuantileInterpolOptions::Higher) + .alias("q99 rel err (km) OK"), + max("relative error (km)").alias("max rel err (km) OK"), + ]) + .collect() + .unwrap(); + println!("{}", rel_errors); + + let rel_errors_ok = df + .clone() + .select([ + min("relative error (km)") + .alias("min rel err (km) OK") + .lt(TYPICAL_REL_ERR_KM), + col("relative error (km)") + .quantile(0.25, QuantileInterpolOptions::Higher) + .alias("q25 rel err (km) OK") + .lt(TYPICAL_REL_ERR_KM), + col("relative error (km)") + .mean() + .alias("mean rel err (km) OK") + .lt(TYPICAL_REL_ERR_KM), + col("relative error (km)") + .median() + .alias("median rel err (km) OK") + .lt(TYPICAL_REL_ERR_KM), + col("relative error (km)") + .quantile(0.75, QuantileInterpolOptions::Higher) + .alias("q75 rel err (km) OK") + .lt(TYPICAL_REL_ERR_KM), + col("relative error (km)") + .quantile(0.99, QuantileInterpolOptions::Higher) + .alias("q99 rel err (km) OK") + .lt(MAX_REL_ERR_KM), + max("relative error (km)") + .alias("max rel err (km) OK") + .lt(MAX_REL_ERR_KM), + ]) + .collect() + .unwrap(); + + for item in rel_errors_ok.get_row(0).0 { + match item { + AnyValue::Boolean(val) => assert!(val), + _ => panic!("expected a boolean in the DataFrame column"), + } + } + + let abs_errors = df + .clone() + .select([ + // Absolute error + min("absolute error (km)").alias("min abs err (km)"), + col("absolute error (km)") + .quantile(0.25, QuantileInterpolOptions::Higher) + .alias("q25 abs err (km)"), + col("absolute error (km)").mean().alias("mean abs err (km)"), + col("absolute error (km)") + .median() + .alias("median abs err (km)"), + col("absolute error (km)") + .quantile(0.75, QuantileInterpolOptions::Higher) + .alias("q75 abs err (km)"), + col("absolute error (km)") + .quantile(0.99, QuantileInterpolOptions::Higher) + .alias("q99 abs err (km)"), + max("absolute error (km)").alias("max abs err (km)"), + ]) + .collect() + .unwrap(); + println!("{}", abs_errors); + + // For debugging purposes, print all of the q99 errors + let q99_abs = match abs_errors.get_row(0).0[5] { + AnyValue::Float64(val) => val, + _ => unreachable!(), + }; + + let mut outliers = df + .filter(col("absolute error (km)").gt(lit(q99_abs))) + .select([ + col("absolute error (km)"), + col("relative error (km)"), + col("File delta T (s)"), + col("DE file"), + col("source frame"), + col("destination frame"), + max("component"), + ]) + .collect() + .unwrap(); + println!("{}", outliers); + + let outfile = "target/validation-outliers.parquet"; + let mut file = std::fs::File::create(outfile).unwrap(); + ParquetWriter::new(&mut file).finish(&mut outliers).unwrap(); + + info!("saved outliers to {outfile}"); +} diff --git a/tests/ephemerides/validation/mod.rs b/tests/ephemerides/validation/mod.rs new file mode 100644 index 00000000..ec7c850b --- /dev/null +++ b/tests/ephemerides/validation/mod.rs @@ -0,0 +1,12 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +mod hermite_type13; +mod jplde_cheby_type2; diff --git a/tests/naif.rs b/tests/naif.rs index b2334e44..d881e3ee 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -32,6 +32,10 @@ fn test_binary_pck_load() { let bytes = file_mmap!(filename).unwrap(); let high_prec = DAF::::parse(&bytes).unwrap(); + + assert_eq!(high_prec.crc32(), 0x97bca34c); + assert!(high_prec.scrub().is_ok()); + for n in 0..high_prec.daf_summary.num_summaries() { let (name, data) = high_prec.nth_summary(n).unwrap(); println!("{} -> {:?}", name, data); @@ -48,6 +52,10 @@ fn test_spk_load_bytes() { let bytes = file_mmap!("data/de421.bsp").unwrap(); let de421 = DAF::::parse(&bytes).unwrap(); + + assert_eq!(de421.crc32(), 0x5c78bc13); + assert!(de421.scrub().is_ok()); + assert_eq!(de421.file_record.nd, 2); assert_eq!(de421.file_record.ni, 6); assert_eq!(de421.file_record.identification().unwrap(), "SPK"); From b205322d74d3924e4598367ac11e9622be3c7789 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sat, 19 Nov 2022 13:02:57 -0700 Subject: [PATCH 25/48] Co-engineering session MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Chris de Claverie Co-authored-by: Grégoire Henry Signed-off-by: Christopher Rabotin --- src/context/mod.rs | 8 +++++-- src/math/polyfit/hermite.rs | 37 +++++++++++++++---------------- src/math/polyfit/mod.rs | 3 +-- src/naif/daf/daf.rs | 3 +++ src/naif/spk/datatypes/hermite.rs | 1 + tests/ephemerides/translation.rs | 4 ++++ 6 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/context/mod.rs b/src/context/mod.rs index 753af98b..61ed46ce 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -10,10 +10,10 @@ use hifitime::Epoch; +use crate::errors::AniseError; use crate::naif::spk::summary::SPKSummaryRecord; use crate::naif::{BPC, SPK}; - -use crate::errors::AniseError; +use log::error; pub const MAX_LOADED_FILES: usize = 32; @@ -107,6 +107,7 @@ impl<'a: 'b, 'b> Context<'a> { } // If we're reached this point, there is no relevant summary at this epoch. + error!("Context: No summary {name} valid at epoch {epoch}"); Err(AniseError::MissingInterpolationData(epoch)) } @@ -127,9 +128,12 @@ impl<'a: 'b, 'b> Context<'a> { let spk = maybe_spk.unwrap(); if let Ok((summary, idx_in_spk)) = spk.summary_from_id_at_epoch(id, epoch) { return Ok((summary, spkno, idx_in_spk)); + } else { + error!("Nothing in {spkno}"); } } + error!("Context: No summary {id} valid at epoch {epoch}"); // If we're reached this point, there is no relevant summary at this epoch. Err(AniseError::MissingInterpolationData(epoch)) } diff --git a/src/math/polyfit/hermite.rs b/src/math/polyfit/hermite.rs index 788c116a..8c452010 100644 --- a/src/math/polyfit/hermite.rs +++ b/src/math/polyfit/hermite.rs @@ -23,13 +23,15 @@ */ use crate::errors::MathErrorKind; -use crate::math::polyfit::{FixedArray, MAX_SAMPLES, MAX_SAMPLES_TIME_TWO}; +use crate::math::polyfit::{FixedArray, MAX_SAMPLES}; use crate::{ math::polyfit::polynomial::{multiply, Polynomial}, prelude::AniseError, }; use log::warn; +const Q_LENGTH: usize = MAX_SAMPLES * MAX_SAMPLES; + impl Polynomial { pub fn hermite(xs: &[f64], ys: &[f64], derivs: &[f64]) -> Result { if xs.is_empty() || ys.is_empty() || derivs.is_empty() { @@ -48,44 +50,44 @@ impl Polynomial { // We need to define the number of samples here because when parsing the data from DAF files, we actually do not know the length. // Therefore, we can't specify in the parameters that length (compiler complains that `&[f64]` is different from `&[f64; N]`). - const SAMPLES: usize = MAX_SAMPLES; + let num_samples = xs.len(); if DEGREE < 2 * xs.len() - 1 { warn!( "Building Hermite interpolation of degree {} with {} samples, {} degree recommended", DEGREE, - SAMPLES, - 2 * SAMPLES - 1 + num_samples, + 2 * num_samples - 1 ); } - let mut zs = FixedArray::<2, SAMPLES>::zeros(); - let mut qs = FixedArray::<4, MAX_SAMPLES_TIME_TWO>::zeros(); + let mut zs = FixedArray::<2, MAX_SAMPLES>::zeros(); + let mut qs = FixedArray::<4, Q_LENGTH>::zeros(); - for i in 0..SAMPLES { + for i in 0..xs.len() { zs[2 * i] = xs[i]; zs[2 * i + 1] = xs[i]; qs[2 * i] = ys[i]; qs[2 * i + 1] = ys[i]; - qs[2 * i + 1 + (2 * SAMPLES)] = derivs[i]; + qs[2 * i + 1 + (2 * xs.len())] = derivs[i]; if i != 0 { - qs[2 * i + (2 * SAMPLES)] = + qs[2 * i + (2 * xs.len())] = (qs[2 * i] - qs[2 * i - 1]) / (zs[2 * i] - zs[2 * i - 1]); } } - for i in 2..2 * SAMPLES { + for i in 2..2 * xs.len() { for j in 2..=i { - qs[i + j * (2 * SAMPLES)] = (qs[i + (j - 1) * (2 * SAMPLES)] - - qs[i - 1 + (j - 1) * (2 * SAMPLES)]) + qs[i + j * (2 * xs.len())] = (qs[i + (j - 1) * (2 * xs.len())] + - qs[i - 1 + (j - 1) * (2 * xs.len())]) / (zs[i] - zs[i - j]); } } let mut hermite = Polynomial::::zeros(); - for i in (1..2 * SAMPLES).rev() { - hermite += qs[i + i * (2 * SAMPLES)]; + for i in (1..2 * num_samples).rev() { + hermite += qs[i + i * (2 * num_samples)]; let new_poly = Polynomial::<2>::from_most_significant([1.0, -xs[(i - 1) / 2]]); hermite = multiply::(hermite, new_poly); } @@ -176,13 +178,13 @@ fn hermite_sine_test() { #[test] fn hermite_constant_test() { - use super::MAX_DEGREE; + use crate::math::polyfit::LargestPolynomial; let xs: Vec<_> = (0..8).map(|i| i as f64).collect(); let ys: Vec<_> = xs.iter().map(|_| 2.0159).collect(); let derivs: Vec<_> = xs.iter().map(|_| 0.0).collect(); let tol = 1e-10; - let poly = Polynomial::::hermite(&xs, &ys, &derivs).unwrap(); + let poly = LargestPolynomial::hermite(&xs, &ys, &derivs).unwrap(); println!("{:x}", poly); @@ -348,10 +350,7 @@ fn hermite_spice_docs_example() { let tol_deriv = 3e-6; let poly = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); - let poly2 = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); - println!("{:x}", poly); - println!("{:x}", poly2); let mut max_eval_err: f64 = 0.0; let mut max_deriv_err: f64 = 0.0; diff --git a/src/math/polyfit/mod.rs b/src/math/polyfit/mod.rs index 1a998ffb..47a37490 100644 --- a/src/math/polyfit/mod.rs +++ b/src/math/polyfit/mod.rs @@ -18,8 +18,7 @@ pub use polynomial::{LargestPolynomial, Polynomial}; /// Defines the maximum degree for an interpolation. /// Until https://github.com/rust-lang/rust/issues/60551 , we cannot do operations on const generic, so we need some hack around it. pub(crate) const MAX_DEGREE: usize = 31; -pub(crate) const MAX_SAMPLES: usize = (MAX_DEGREE + 1) / 2; -const MAX_SAMPLES_TIME_TWO: usize = 2 * MAX_SAMPLES; +pub(crate) const MAX_SAMPLES: usize = (MAX_DEGREE - 1) / 2; use core::ops::{Index, IndexMut}; diff --git a/src/naif/daf/daf.rs b/src/naif/daf/daf.rs index 074de98c..ae4004dd 100644 --- a/src/naif/daf/daf.rs +++ b/src/naif/daf/daf.rs @@ -13,6 +13,7 @@ use super::{NAIFDataSet, NAIFRecord, NAIFSummaryRecord}; use crate::{errors::IntegrityErrorKind, prelude::AniseError, DBL_SIZE}; use core::hash::Hash; use hifitime::Epoch; +use log::error; use zerocopy::{FromBytes, LayoutVerified}; pub(crate) const RCRD_LEN: usize = 1024; @@ -132,6 +133,7 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { if epoch >= summary.start_epoch() && epoch <= summary.end_epoch() { Ok((summary, idx)) } else { + error!("No summary {name} valid at epoch {epoch}"); Err(AniseError::MissingInterpolationData(epoch)) } } @@ -158,6 +160,7 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { if epoch >= summary.start_epoch() && epoch <= summary.end_epoch() { Ok((summary, idx)) } else { + error!("No summary {id} valid at epoch {epoch}"); Err(AniseError::MissingInterpolationData(epoch)) } } diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs index eceebea1..96ee49ae 100644 --- a/src/naif/spk/datatypes/hermite.rs +++ b/src/naif/spk/datatypes/hermite.rs @@ -158,6 +158,7 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { // Start by doing a binary search on the epoch registry to limit the search space in the total number of epochs. // TODO: use the epoch registry to reduce the search space // Check that we even have interpolation data for that time + dbg!(&self.epoch_data[0..10]); if epoch.to_et_seconds() < self.epoch_data[0] || epoch.to_et_seconds() > *self.epoch_data.last().unwrap() { diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 0da48158..003b86a0 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -306,6 +306,10 @@ fn de438s_translation_verif_emb2luna() { #[test] fn spk_hermite_type31_verif() { + if pretty_env_logger::try_init().is_err() { + println!("could not init env_logger"); + } + // "Load" the file via a memory map (avoids allocations) let path = "./data/de438s.bsp"; let buf = file_mmap!(path).unwrap(); From 636a5f2c4ffef17bcfb5b682a50b131c5d0ccaa9 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sun, 20 Nov 2022 18:16:12 -0700 Subject: [PATCH 26/48] Hermite Type 13 _almost_ works I'm likely taking one too many or one too few samples causing the interpolation to be slightly off. Added a bunch of debugging messages Signed-off-by: Christopher Rabotin --- Cargo.toml | 1 + src/context/mod.rs | 3 +- src/math/polyfit/hermite.rs | 57 +++++++++++++++++++++++++++++ src/math/utils.rs | 10 ++++++ src/naif/daf/daf.rs | 31 +++++++++++----- src/naif/daf/mod.rs | 3 +- src/naif/spk/datatypes/hermite.rs | 59 ++++++++++++++++++++++++------- tests/ephemerides/mod.rs | 1 + tests/ephemerides/translation.rs | 36 ++++++++++++++++++- 9 files changed, 178 insertions(+), 23 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7681d529..742c3e68 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,7 @@ polars = {version = "0.25", features = ["lazy", "parquet"]} [features] default = ["std"] std = [] +validation = [] # Enabling this flag significantly reduces compilation times due to Arrow and Polars. [profile.bench] debug = true diff --git a/src/context/mod.rs b/src/context/mod.rs index 61ed46ce..10d9d19d 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -127,7 +127,8 @@ impl<'a: 'b, 'b> Context<'a> { { let spk = maybe_spk.unwrap(); if let Ok((summary, idx_in_spk)) = spk.summary_from_id_at_epoch(id, epoch) { - return Ok((summary, spkno, idx_in_spk)); + // NOTE: We're iterating backward, so the correct SPK number is "total loaded" minus "current iteration". + return Ok((summary, self.num_loaded_spk() - spkno - 1, idx_in_spk)); } else { error!("Nothing in {spkno}"); } diff --git a/src/math/polyfit/hermite.rs b/src/math/polyfit/hermite.rs index 8c452010..1ecf877c 100644 --- a/src/math/polyfit/hermite.rs +++ b/src/math/polyfit/hermite.rs @@ -399,3 +399,60 @@ fn hermite_spice_data() { .unwrap(); println!("{poly}"); } + +#[test] +fn hermite_ephem_spline_test2() { + use super::MAX_DEGREE; + let ts = [ + -1.0, + -0.7634946036849767, + -0.4060679398102479, + -0.049378384563548705, + 0.3056319823730729, + 0.6573470399832468, + 1.0, + ]; + let values = [ + 1595.7391028288412, + 1627.6374306789112, + 1667.0328863669654, + 1695.5516916887393, + 1713.0436920553127, + 1719.5460130738645, + 1715.4771765557455, + ]; + let values_dt = [ + 0.5697350947868345, + 0.49328949592701216, + 0.37515578866379, + 0.25482143289805564, + 0.13340456519744062, + 0.012265145643249981, + -0.10583033767077979, + ]; + + let tol = 2e-7; + let tol_deriv = 3e-6; + let poly = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); + + println!("{:x}", poly); + + let mut max_eval_err: f64 = 0.0; + let mut max_deriv_err: f64 = 0.0; + + for (i, t) in ts.iter().enumerate() { + let (eval, deriv) = poly.eval_n_deriv(*t); + let eval_err = (eval - values[i]).abs(); + assert!(dbg!(eval_err) < tol); + max_eval_err = max_eval_err.max(eval_err); + + let deriv_err = (deriv - values_dt[i]).abs(); + assert!(dbg!(deriv_err) < tol_deriv); + max_deriv_err = max_deriv_err.max(deriv_err); + } + + println!( + "Max eval error: {:.e}\tMax deriv error: {:.e}\t", + max_eval_err, max_deriv_err + ); +} diff --git a/src/math/utils.rs b/src/math/utils.rs index 3e18f17e..08a5a185 100644 --- a/src/math/utils.rs +++ b/src/math/utils.rs @@ -45,3 +45,13 @@ pub fn rel_diff(a: f64, b: f64, max_relative: f64) -> f64 { // Use a relative difference comparison largest * max_relative } + +// Normalize between -1.0 and 1.0 +pub fn normalize(x: f64, min_x: f64, max_x: f64) -> f64 { + 2.0 * (x - min_x) / (max_x - min_x) - 1.0 +} + +// Denormalize between -1.0 and 1.0 +pub fn denormalize(xp: f64, min_x: f64, max_x: f64) -> f64 { + (max_x - min_x) * (xp + 1.0) / 2.0 + min_x +} diff --git a/src/naif/daf/daf.rs b/src/naif/daf/daf.rs index ae4004dd..08469102 100644 --- a/src/naif/daf/daf.rs +++ b/src/naif/daf/daf.rs @@ -13,7 +13,7 @@ use super::{NAIFDataSet, NAIFRecord, NAIFSummaryRecord}; use crate::{errors::IntegrityErrorKind, prelude::AniseError, DBL_SIZE}; use core::hash::Hash; use hifitime::Epoch; -use log::error; +use log::{error, trace, warn}; use zerocopy::{FromBytes, LayoutVerified}; pub(crate) const RCRD_LEN: usize = 1024; @@ -155,14 +155,23 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { id: i32, epoch: Epoch, ) -> Result<(&R, usize), AniseError> { - let (summary, idx) = self.summary_from_id(id)?; - - if epoch >= summary.start_epoch() && epoch <= summary.end_epoch() { - Ok((summary, idx)) - } else { - error!("No summary {id} valid at epoch {epoch}"); - Err(AniseError::MissingInterpolationData(epoch)) + // NOTE: We iterate through the whole summary because a specific NAIF ID may be repeated in the summary for different valid epochs + // so we can't just call `summary_from_id`. + for (idx, summary) in self.data_summaries.iter().enumerate() { + if summary.id() == id { + if epoch >= summary.start_epoch() && epoch <= summary.end_epoch() { + trace!("Found {id} in position {idx}: {summary:?}"); + return Ok((summary, idx)); + } else { + warn!( + "Summary {id} found but only valid from {} to {} (requested {epoch})", + summary.start_epoch(), + summary.end_epoch() + ); + } + } } + Err(AniseError::MissingInterpolationData(epoch)) } /// Provided a name that is in the summary, return its full data, if name is available. @@ -187,6 +196,12 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { pub fn nth_data>(&self, idx: usize) -> Result { let (_, this_summary) = self.nth_summary(idx)?; // Grab the data in native endianness (TODO: How to support both big and little endian?) + trace!("{idx} -> {this_summary:?}"); + if this_summary.is_empty() { + return Err(AniseError::InternalError( + crate::errors::InternalErrorKind::Generic, + )); + } let data: &'a [f64] = LayoutVerified::new_slice( self.bytes .get( diff --git a/src/naif/daf/mod.rs b/src/naif/daf/mod.rs index bf9396d0..1aad9ae0 100644 --- a/src/naif/daf/mod.rs +++ b/src/naif/daf/mod.rs @@ -19,9 +19,10 @@ pub mod recordtypes; pub use daf::DAF; use crate::prelude::AniseError; +use core::fmt::Debug; pub use recordtypes::{DAFFileRecord, DAFSummaryRecord, NameRecord}; -pub trait NAIFRecord: AsBytes + FromBytes + Sized + Default { +pub trait NAIFRecord: AsBytes + FromBytes + Sized + Default + Debug { const SIZE: usize = core::mem::size_of::(); } diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs index 96ee49ae..bbc70695 100644 --- a/src/naif/spk/datatypes/hermite.rs +++ b/src/naif/spk/datatypes/hermite.rs @@ -12,6 +12,7 @@ use core::fmt; use hifitime::{Duration, Epoch, TimeUnits}; use crate::math::polyfit::{LargestPolynomial, MAX_SAMPLES}; +use crate::math::utils::normalize; use crate::{ math::{cartesian::CartesianState, Vector3}, naif::daf::{NAIFDataRecord, NAIFDataSet, NAIFRecord}, @@ -153,12 +154,11 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { fn evaluate( &self, epoch: Epoch, - start_epoch: Epoch, + _start_epoch: Epoch, ) -> Result { // Start by doing a binary search on the epoch registry to limit the search space in the total number of epochs. // TODO: use the epoch registry to reduce the search space // Check that we even have interpolation data for that time - dbg!(&self.epoch_data[0..10]); if epoch.to_et_seconds() < self.epoch_data[0] || epoch.to_et_seconds() > *self.epoch_data.last().unwrap() { @@ -185,10 +185,8 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { || (self.samples % 2 == 1 && idx + self.samples / 2 > self.num_records) { (self.num_records - self.samples - 1, self.samples - 1) - } else if self.samples % 2 == 0 { - (idx - self.samples / 2, idx + self.samples / 2 + 1) } else { - (idx - self.samples / 2, idx + self.samples / 2) + (idx - self.samples / 2, idx + self.samples / 2 + 1) }; // Statically allocated arrays of the maximum number of samples @@ -210,17 +208,54 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { epochs[cno] = self.epoch_data[idx]; } - // Build the interpolation - let (x_km, vx_km_s) = LargestPolynomial::hermite(&epochs, &xs, &vxs)? - .eval_n_deriv(epoch.to_et_seconds()); - let (y_km, vy_km_s) = LargestPolynomial::hermite(&epochs, &ys, &vys)? - .eval_n_deriv(epoch.to_et_seconds()); - let (z_km, vz_km_s) = LargestPolynomial::hermite(&epochs, &zs, &vzs)? - .eval_n_deriv(epoch.to_et_seconds()); + // Normalize the epochs between -1.0 and 1.0 + let first_sample_epoch_et_s = epochs[0]; + let last_sample_epoch_et_s = epochs[self.samples - 1]; + // XXX: Is there any different for back prop segments? + let window_duration_s = last_sample_epoch_et_s - first_sample_epoch_et_s; + for idx in 0..self.samples { + epochs[idx] = normalize( + epochs[idx] - first_sample_epoch_et_s, + 0.0, + window_duration_s, + ); + } + + let normalized_epoch = normalize( + epoch.to_et_seconds() - first_sample_epoch_et_s, + 0.0, + window_duration_s, + ); + + // Build the interpolation polynomials making sure to limit the slices to exactly the number of items we actually used + // The other ones are zeros, which would cause the interpolation function to fail. + let x_vx_poly = LargestPolynomial::hermite( + &epochs[..self.samples], + &xs[..self.samples], + &vxs[..self.samples], + )?; + + let y_vy_poly = LargestPolynomial::hermite( + &epochs[..self.samples], + &ys[..self.samples], + &vys[..self.samples], + )?; + + let z_vz_poly = LargestPolynomial::hermite( + &epochs[..self.samples], + &zs[..self.samples], + &vzs[..self.samples], + )?; + + let (x_km, vx_km_s) = x_vx_poly.eval_n_deriv(normalized_epoch); + let (y_km, vy_km_s) = y_vy_poly.eval_n_deriv(normalized_epoch); + let (z_km, vz_km_s) = z_vz_poly.eval_n_deriv(normalized_epoch); // And interpolate let pos_km = Vector3::new(x_km, y_km, z_km); let vel_km_s = Vector3::new(vx_km_s, vy_km_s, vz_km_s); + dbg!(pos_km, vel_km_s); + Ok((pos_km, vel_km_s)) } } diff --git a/tests/ephemerides/mod.rs b/tests/ephemerides/mod.rs index 0da0ff79..a9a90865 100644 --- a/tests/ephemerides/mod.rs +++ b/tests/ephemerides/mod.rs @@ -11,4 +11,5 @@ mod parent_translation_verif; mod paths; mod translation; +#[cfg(feature = "validation")] mod validation; diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 003b86a0..9ef07025 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -328,7 +328,41 @@ fn spk_hermite_type31_verif() { let my_sc_j2k = Frame::from_ephem_orient(-111229882, J2000); let state = ctx - .translate_from_to_km_s_geometric(my_sc_j2k, EARTH_J2000, epoch) + .translate_from_to_km_s_geometric(my_sc_j2k, LUNA_J2000, epoch) .unwrap(); println!("{state:?}"); + + // Check that we correctly set the output frame + assert_eq!(state.frame, LUNA_J2000); + + let pos_expct_km = Vector3::new( + 8.9871033515359500e+02, + -5.4154398990756522e+02, + 1.5101519596160608e+03, + ); + + let vel_expct_km_s = Vector3::new( + -1.2836208430532707e+00, + -9.0227334520037439e-01, + 4.4829903632467799e-01, + ); + + // We expect exactly the same output as SPICE to machine precision. + assert!( + relative_eq!(state.radius_km, pos_expct_km, epsilon = EPSILON), + "pos = {}\nexp = {pos_expct_km}\nerr = {:e}", + state.radius_km, + pos_expct_km - state.radius_km + ); + + assert!( + relative_eq!( + state.velocity_km_s, + vel_expct_km_s, + epsilon = VELOCITY_EPSILON_KM_S + ), + "vel = {}\nexp = {vel_expct_km_s}\nerr = {:e}", + state.velocity_km_s, + vel_expct_km_s - state.velocity_km_s + ); } From 9a4deff03e142ee7a64eb54d30c693f97c542777 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Tue, 22 Nov 2022 07:16:33 -0700 Subject: [PATCH 27/48] I need to rewrite this as divided differences I think My algorithm to build the polynomial is probably wrong. Although it works perfectly for the example of SPICE Signed-off-by: Christopher Rabotin --- Cargo.toml | 1 - src/math/polyfit/hermite.rs | 117 ++++++--- src/math/polyfit/hrmint.c | 411 ++++++++++++++++++++++++++++++ src/math/polyfit/hrmint.rs | 167 ++++++++++++ src/math/polyfit/mod.rs | 10 +- src/naif/spk/datatypes/hermite.rs | 41 +-- 6 files changed, 687 insertions(+), 60 deletions(-) create mode 100644 src/math/polyfit/hrmint.c create mode 100644 src/math/polyfit/hrmint.rs diff --git a/Cargo.toml b/Cargo.toml index 742c3e68..5629d089 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,6 @@ const_format = "0.2" nalgebra = "0.31" approx = "0.5.1" zerocopy = "0.6.1" -typenum = "1.15" [dev-dependencies] rust-spice = "0.7.3" diff --git a/src/math/polyfit/hermite.rs b/src/math/polyfit/hermite.rs index 1ecf877c..c76cab98 100644 --- a/src/math/polyfit/hermite.rs +++ b/src/math/polyfit/hermite.rs @@ -23,7 +23,9 @@ */ use crate::errors::MathErrorKind; -use crate::math::polyfit::{FixedArray, MAX_SAMPLES}; +use crate::math::polyfit::hrmint::hrmint_; +use crate::math::polyfit::{F64TupleArray, MAX_SAMPLES}; +use crate::math::utils::normalize; use crate::{ math::polyfit::polynomial::{multiply, Polynomial}, prelude::AniseError, @@ -50,19 +52,18 @@ impl Polynomial { // We need to define the number of samples here because when parsing the data from DAF files, we actually do not know the length. // Therefore, we can't specify in the parameters that length (compiler complains that `&[f64]` is different from `&[f64; N]`). - let num_samples = xs.len(); if DEGREE < 2 * xs.len() - 1 { warn!( "Building Hermite interpolation of degree {} with {} samples, {} degree recommended", DEGREE, - num_samples, - 2 * num_samples - 1 + xs.len(), + 2 * xs.len()- 1 ); } - let mut zs = FixedArray::<2, MAX_SAMPLES>::zeros(); - let mut qs = FixedArray::<4, Q_LENGTH>::zeros(); + let mut zs = F64TupleArray::<2, MAX_SAMPLES>::zeros(); + let mut qs = F64TupleArray::<4, Q_LENGTH>::zeros(); for i in 0..xs.len() { zs[2 * i] = xs[i]; @@ -86,15 +87,14 @@ impl Polynomial { } let mut hermite = Polynomial::::zeros(); - for i in (1..2 * num_samples).rev() { - hermite += qs[i + i * (2 * num_samples)]; + for i in (1..2 * xs.len()).rev() { + hermite += qs[i + i * (2 * xs.len())]; let new_poly = Polynomial::<2>::from_most_significant([1.0, -xs[(i - 1) / 2]]); hermite = multiply::(hermite, new_poly); } hermite += qs[0]; if hermite.is_nan() { - dbg!(xs, ys, derivs); return Err(AniseError::MathError( MathErrorKind::InvalidInterpolationData(format!( "Invalid interpolation {:x}", @@ -403,51 +403,83 @@ fn hermite_spice_data() { #[test] fn hermite_ephem_spline_test2() { use super::MAX_DEGREE; - let ts = [ - -1.0, - -0.7634946036849767, - -0.4060679398102479, - -0.049378384563548705, - 0.3056319823730729, - 0.6573470399832468, - 1.0, + let epoch_et = 773064069.1841084; + let epochs = [ + 773063753.0320327, + 773063842.6860328, + 773063932.1790327, + 773064021.5950327, + 773064111.0160326, + 773064200.4970326, + 773064290.0490326, + 773064379.5660326, + 773064467.8020325, ]; + let mut ts = [0.0; 9]; let values = [ - 1595.7391028288412, - 1627.6374306789112, - 1667.0328863669654, - 1695.5516916887393, - 1713.0436920553127, - 1719.5460130738645, - 1715.4771765557455, + 1264.0276092333008, + 1169.380111723055, + 1067.501355281949, + 958.9770086109238, + 844.4072328473662, + 724.4430188794065, + 599.8186349004518, + 471.46623936222625, + 342.04349989730264, ]; let values_dt = [ - 0.5697350947868345, - 0.49328949592701216, - 0.37515578866379, - 0.25482143289805564, - 0.13340456519744062, - 0.012265145643249981, - -0.10583033767077979, + -1.0119972729331588, + -1.0982621220038147, + -1.1773202325269372, + -1.248793644639029, + -1.3123304769876323, + -1.3675873394086253, + -1.414230273831576, + -1.4519274117465721, + -1.4801351852184736, ]; - let tol = 2e-7; - let tol_deriv = 3e-6; - let poly = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); + // Normalize the epochs between -1.0 and 1.0 + let samples = 7; + let central_idx = 4; + let start_idx = central_idx - (samples - 1) / 2 - 1; + let end_idx = central_idx + (samples - 1) / 2 + 1; + + let first_sample_epoch_et_s = epochs[start_idx]; + let last_sample_epoch_et_s = epochs[end_idx]; + + let min_x = dbg!(first_sample_epoch_et_s); + let max_x = dbg!(last_sample_epoch_et_s); + + for idx in 0..epochs.len() { + ts[idx] = normalize(epochs[idx], min_x, max_x); + } + + dbg!(&ts); + + let tol = 1e-9; + let tol_deriv = 1e-9; + let poly = Polynomial::::hermite( + dbg!(&epochs[start_idx..end_idx + 1]), + dbg!(&values[start_idx..end_idx + 1]), + dbg!(&values_dt[start_idx..end_idx + 1]), + ) + .unwrap(); println!("{:x}", poly); let mut max_eval_err: f64 = 0.0; let mut max_deriv_err: f64 = 0.0; - for (i, t) in ts.iter().enumerate() { - let (eval, deriv) = poly.eval_n_deriv(*t); + for i in start_idx..end_idx + 1 { + let t = epochs[i]; + let (eval, deriv) = poly.eval_n_deriv(t); let eval_err = (eval - values[i]).abs(); - assert!(dbg!(eval_err) < tol); + // assert!(dbg!(eval_err) < tol); max_eval_err = max_eval_err.max(eval_err); let deriv_err = (deriv - values_dt[i]).abs(); - assert!(dbg!(deriv_err) < tol_deriv); + // assert!(dbg!(deriv_err) < tol_deriv); max_deriv_err = max_deriv_err.max(deriv_err); } @@ -455,4 +487,13 @@ fn hermite_ephem_spline_test2() { "Max eval error: {:.e}\tMax deriv error: {:.e}\t", max_eval_err, max_deriv_err ); + + let (x, vx) = poly.eval_n_deriv(epoch_et); + + let want_x = 8.9871033515359500e+02; + let want_vx = -1.2836208430532707e+00; + + dbg!(x, vx); + + println!("{}\t{}", x - want_x, vx - want_vx); } diff --git a/src/math/polyfit/hrmint.c b/src/math/polyfit/hrmint.c new file mode 100644 index 00000000..c73336ff --- /dev/null +++ b/src/math/polyfit/hrmint.c @@ -0,0 +1,411 @@ +/* hrmint.f -- translated by f2c (version 19980913). + You must link the resulting object file with the libraries: + -lf2c -lm (in that order) +*/ + +#include "f2c.h" + +/* $Procedure HRMINT ( Hermite polynomial interpolation ) */ +/* Subroutine */ int hrmint_(integer *n, doublereal *xvals, doublereal *yvals, + doublereal *x, doublereal *work, doublereal *f, + doublereal *df) { + /* System generated locals */ + integer xvals_dim1, yvals_dim1, work_dim1, work_offset, i__1, i__2, i__3, + i__4, i__5, i__6, i__7; + + /* Builtin functions */ + integer s_rnge(char *, integer, char *, integer); + + /* Local variables */ + doublereal temp; + integer this__, prev, next, i__, j; + extern /* Subroutine */ int chkin_(char *, ftnlen); + doublereal denom; + extern /* Subroutine */ int errdp_(char *, doublereal *, ftnlen); + doublereal c1, c2; + integer xi; + extern /* Subroutine */ int sigerr_(char *, ftnlen), chkout_(char *, ftnlen), + setmsg_(char *, ftnlen), errint_(char *, integer *, ftnlen); + extern logical return_(void); + integer xij; + + /* $ Abstract */ + + /* Evaluate a Hermite interpolating polynomial at a specified */ + /* abscissa value. */ + + /* $ Disclaimer */ + + /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ + /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ + /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ + /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ + /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ + /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ + /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ + /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ + /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ + /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ + + /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ + /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ + /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ + /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ + /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ + /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ + + /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ + /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ + /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ + /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ + + /* $ Required_Reading */ + + /* None. */ + + /* $ Keywords */ + + /* INTERPOLATION */ + /* POLYNOMIAL */ + + /* $ Declarations */ + /* $ Brief_I/O */ + + /* Variable I/O Description */ + /* -------- --- -------------------------------------------------- */ + /* N I Number of points defining the polynomial. */ + /* XVALS I Abscissa values. */ + /* YVALS I Ordinate and derivative values. */ + /* X I Point at which to interpolate the polynomial. */ + /* WORK I-O Work space array. */ + /* F O Interpolated function value at X. */ + /* DF O Interpolated function's derivative at X. */ + + /* $ Detailed_Input */ + + /* N is the number of points defining the polynomial. */ + /* The arrays XVALS and YVALS contain N and 2*N */ + /* elements respectively. */ + + /* XVALS is an array of length N containing abscissa values. */ + + /* YVALS is an array of length 2*N containing ordinate and */ + /* derivative values for each point in the domain */ + /* defined by FIRST, STEP, and N. The elements */ + + /* YVALS( 2*I - 1 ) */ + /* YVALS( 2*I ) */ + + /* give the value and first derivative of the output */ + /* polynomial at the abscissa value */ + + /* XVALS(I) */ + + /* where I ranges from 1 to N. */ + + /* WORK is a work space array. It is used by this routine */ + /* as a scratch area to hold intermediate results. */ + + /* X is the abscissa value at which the interpolating */ + /* polynomial and its derivative are to be evaluated. */ + + /* $ Detailed_Output */ + + /* F, */ + /* DF are the value and derivative at X of the unique */ + /* polynomial of degree 2N-1 that fits the points and */ + /* derivatives defined by XVALS and YVALS. */ + + /* $ Parameters */ + + /* None. */ + + /* $ Exceptions */ + + /* 1) If two input abscissas are equal, the error */ + /* SPICE(DIVIDEBYZERO) will be signaled. */ + + /* 2) If N is less than 1, the error SPICE(INVALIDSIZE) is */ + /* signaled. */ + + /* 3) This routine does not attempt to ward off or diagnose */ + /* arithmetic overflows. */ + + /* $ Files */ + + /* None. */ + + /* $ Particulars */ + + /* Users of this routine must choose the number of points to use */ + /* in their interpolation method. The authors of Reference [1] have */ + /* this to say on the topic: */ + + /* Unless there is solid evidence that the interpolating function */ + /* is close in form to the true function f, it is a good idea to */ + /* be cautious about high-order interpolation. We */ + /* enthusiastically endorse interpolations with 3 or 4 points, we */ + /* are perhaps tolerant of 5 or 6; but we rarely go higher than */ + /* that unless there is quite rigorous monitoring of estimated */ + /* errors. */ + + /* The same authors offer this warning on the use of the */ + /* interpolating function for extrapolation: */ + + /* ...the dangers of extrapolation cannot be overemphasized: */ + /* An interpolating function, which is perforce an extrapolating */ + /* function, will typically go berserk when the argument x is */ + /* outside the range of tabulated values by more than the typical */ + /* spacing of tabulated points. */ + + /* $ Examples */ + + /* 1) Fit a 7th degree polynomial through the points ( x, y, y' ) */ + + /* ( -1, 6, 3 ) */ + /* ( 0, 5, 0 ) */ + /* ( 3, 2210, 5115 ) */ + /* ( 5, 78180, 109395 ) */ + + /* and evaluate this polynomial at x = 2. */ + + /* PROGRAM TEST_HRMINT */ + + /* DOUBLE PRECISION ANSWER */ + /* DOUBLE PRECISION DERIV */ + /* DOUBLE PRECISION XVALS (4) */ + /* DOUBLE PRECISION YVALS (8) */ + /* DOUBLE PRECISION WORK (8,2) */ + /* INTEGER N */ + + /* N = 4 */ + + /* XVALS(1) = -1.D0 */ + /* XVALS(2) = 0.D0 */ + /* XVALS(3) = 3.D0 */ + /* XVALS(4) = 5.D0 */ + + /* YVALS(1) = 6.D0 */ + /* YVALS(2) = 3.D0 */ + /* YVALS(3) = 5.D0 */ + /* YVALS(4) = 0.D0 */ + /* YVALS(5) = 2210.D0 */ + /* YVALS(6) = 5115.D0 */ + /* YVALS(7) = 78180.D0 */ + /* YVALS(8) = 109395.D0 */ + + /* CALL HRMINT ( N, XVALS, YVALS, 2.D0, WORK, ANSWER, DERIV ) */ + + /* WRITE (*,*) 'ANSWER = ', ANSWER */ + /* WRITE (*,*) 'DERIV = ', DERIV */ + /* END */ + + /* The returned value of ANSWER should be 141.D0, and the returned */ + /* derivative value should be 456.D0, since the unique 7th degree */ + /* polynomial that fits these constraints is */ + + /* 7 2 */ + /* f(x) = x + 2x + 5 */ + + /* $ Restrictions */ + + /* None. */ + + /* $ Literature_References */ + + /* [1] "Numerical Recipes---The Art of Scientific Computing" by */ + /* William H. Press, Brian P. Flannery, Saul A. Teukolsky, */ + /* William T. Vetterling (see sections 3.0 and 3.1). */ + + /* [2] "Elementary Numerical Analysis---An Algorithmic Approach" */ + /* by S. D. Conte and Carl de Boor. See p. 64. */ + + /* $ Author_and_Institution */ + + /* N.J. Bachman (JPL) */ + + /* $ Version */ + + /* - SPICELIB Version 1.2.1, 28-JAN-2014 (NJB) */ + + /* Fixed a few comment typos. */ + + /* - SPICELIB Version 1.2.0, 01-FEB-2002 (NJB) (EDW) */ + + /* Bug fix: declarations of local variables XI and XIJ */ + /* were changed from DOUBLE PRECISION to INTEGER. */ + /* Note: bug had no effect on behavior of this routine. */ + + /* - SPICELIB Version 1.1.0, 28-DEC-2001 (NJB) */ + + /* Blanks following final newline were truncated to */ + /* suppress compilation warnings on the SGI-N32 platform. */ + + /* - SPICELIB Version 1.0.0, 01-MAR-2000 (NJB) */ + + /* -& */ + /* $ Index_Entries */ + + /* interpolate function using Hermite polynomial */ + /* Hermite interpolation */ + + /* -& */ + + /* SPICELIB functions */ + + /* Local variables */ + + /* Check in only if an error is detected. */ + + /* Parameter adjustments */ + work_dim1 = *n * 2; + work_offset = work_dim1 + 1; + yvals_dim1 = *n * 2; + xvals_dim1 = *n; + + /* Function Body */ + if (return_()) { + return 0; + } + + /* No data, no interpolation. */ + + if (*n < 1) { + chkin_("HRMINT", (ftnlen)6); + setmsg_("Array size must be positive; was #.", (ftnlen)35); + errint_("#", n, (ftnlen)1); + sigerr_("SPICE(INVALIDSIZE)", (ftnlen)18); + chkout_("HRMINT", (ftnlen)6); + return 0; + } + + /* Copy the input array into WORK. After this, the first column */ + /* of WORK represents the first column of our triangular */ + /* interpolation table. */ + + i__1 = *n * 2; + for (i__ = 1; i__ <= i__1; ++i__) { + work[(i__2 = i__ + work_dim1 - work_offset)] = yvals[(i__3 = i__ - 1)]; + } + + /* Compute the second column of the interpolation table: this */ + /* consists of the N-1 values obtained by evaluating the */ + /* first-degree interpolants at X. We'll also evaluate the */ + /* derivatives of these interpolants at X and save the results in */ + /* the second column of WORK. Because the derivative computations */ + /* depend on the function computations from the previous column in */ + /* the interpolation table, and because the function interpolation */ + /* overwrites the previous column of interpolated function values, */ + /* we must evaluate the derivatives first. */ + + i__1 = *n - 1; + for (i__ = 1; i__ <= i__1; ++i__) { + c1 = xvals[(i__2 = i__)] - *x; + c2 = *x - xvals[(i__2 = i__ - 1)]; + denom = xvals[(i__2 = i__)] - xvals[(i__3 = i__ - 1)]; + + /* The second column of WORK contains interpolated derivative */ + /* values. */ + + /* The odd-indexed interpolated derivatives are simply the input */ + /* derivatives. */ + + prev = (i__ * 2) - 1; + this__ = prev + 1; + next = this__ + 1; + work[(i__2 = prev + (work_dim1 * 2) - work_offset)] = + work[(i__3 = this__ + work_dim1 - work_offset)]; + + /* The even-indexed interpolated derivatives are the slopes of */ + /* the linear interpolating polynomials for adjacent input */ + /* abscissa/ordinate pairs. */ + + work[(i__2 = this__ + (work_dim1 * 2) - work_offset)] = + (work[(i__3 = next + work_dim1 - work_offset)] - + work[(i__4 = prev + work_dim1 - work_offset)]) / + denom; + + /* The first column of WORK contains interpolated function values. */ + /* The odd-indexed entries are the linear Taylor polynomials, */ + /* for each input abscissa value, evaluated at X. */ + + temp = work[(i__2 = this__ + work_dim1 - work_offset)] * + (*x - xvals[(i__3 = i__ - 1)]) + + work[(i__4 = prev + work_dim1 - work_offset)]; + work[(i__2 = this__ + work_dim1 - work_offset)] = + (c1 * work[(i__3 = prev + work_dim1 - work_offset)] + + c2 * work[(i__4 = next + work_dim1 - work_offset)]) / + denom; + work[(i__2 = prev + work_dim1 - work_offset)] = temp; + } + + /* The last column entries were not computed by the preceding loop; */ + /* compute them now. */ + + work[(i__1 = (*n * 2) - 1 + (work_dim1 * 2) - work_offset)] = + work[(i__2 = (*n * 2) + work_dim1 - work_offset)]; + work[(i__1 = (*n * 2) - 1 + work_dim1 - work_offset)] = + work[(i__2 = (*n * 2) + work_dim1 - work_offset)] * + (*x - xvals[(i__3 = *n - 1)]) + + work[(i__4 = (*n * 2) - 1 + work_dim1 - work_offset)]; + + /* Compute columns 3 through 2*N of the table. */ + + i__1 = (*n * 2) - 1; + for (j = 2; j <= i__1; ++j) { + i__2 = (*n * 2) - j; + for (i__ = 1; i__ <= i__2; ++i__) { + + /* In the theoretical construction of the interpolation table, + */ + /* there are 2*N abscissa values, since each input abcissa */ + /* value occurs with multiplicity two. In this theoretical */ + /* construction, the Jth column of the interpolation table */ + /* contains results of evaluating interpolants that span J+1 */ + /* consecutive abscissa values. The indices XI and XIJ below */ + /* are used to pick the correct abscissa values out of the */ + /* physical XVALS array, in which the abscissa values are not */ + /* repeated. */ + + xi = (i__ + 1) / 2; + xij = (i__ + j + 1) / 2; + c1 = xvals[(i__3 = xij - 1)] - *x; + c2 = *x - xvals[(i__3 = xi - 1)]; + denom = xvals[(i__3 = xij - 1)] - xvals[(i__4 = xi - 1)]; + + /* Compute the interpolated derivative at X for the Ith */ + /* interpolant. This is the derivative with respect to X of */ + /* the expression for the interpolated function value, which */ + /* is the second expression below. This derivative computation + */ + /* is done first because it relies on the interpolated */ + /* function values from the previous column of the */ + /* interpolation table. */ + + /* The derivative expression here corresponds to equation */ + /* 2.35 on page 64 in reference [2]. */ + + work[(i__3 = i__ + (work_dim1 * 2) - work_offset)] = + (c1 * work[(i__4 = i__ + (work_dim1 * 2) - work_offset)] + + c2 * work[(i__5 = i__ + 1 + (work_dim1 * 2) - work_offset)] + + (work[(i__6 = i__ + 1 + work_dim1 - work_offset)] - + work[(i__7 = i__ + work_dim1 - work_offset)])) / + denom; + + /* Compute the interpolated function value at X for the Ith */ + /* interpolant. */ + + work[(i__3 = i__ + work_dim1 - work_offset)] = + (c1 * work[(i__4 = i__ + work_dim1 - work_offset)] + + c2 * work[(i__5 = i__ + 1 + work_dim1 - work_offset)]) / + denom; + } + } + + /* Our interpolated function value is sitting in WORK(1,1) at this */ + /* point. The interpolated derivative is located in WORK(1,2). */ + + *f = work[(i__1 = work_dim1 + 1 - work_offset)]; + *df = work[(i__1 = (work_dim1 * 2) + 1 - work_offset)]; + return 0; +} /* hrmint_ */ diff --git a/src/math/polyfit/hrmint.rs b/src/math/polyfit/hrmint.rs new file mode 100644 index 00000000..0ad59a93 --- /dev/null +++ b/src/math/polyfit/hrmint.rs @@ -0,0 +1,167 @@ +/* hrmint.f -- translated by f2c (version 19980913). + You must link the resulting object file with the libraries: + -lf2c -lm (in that order) +*/ + +/* $Procedure HRMINT ( Hermite polynomial interpolation ) */ +/* Subroutine */ +pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { + let mut work: &mut [f64] = &mut [0.0; 256]; + let n: usize = xvals.len(); + + /* System generated locals */ + let mut xvals_dim1: usize; + let mut yvals_dim1: usize; + let mut work_dim1: usize; + let mut work_offset: usize; + let mut i__1: usize; + let mut i__2: usize; + let mut i__3: usize; + let mut i__4: usize; + let mut i__5: usize; + let mut i__6: usize; + let mut i__7: usize; + + /* Local variables */ + let mut temp: f64; + let mut this__: usize; + let mut prev: usize; + let mut next: usize; + let i__: usize; + let j: usize; + + let mut xij: usize; + let mut xi; + + /* Parameter adjustments */ + work_dim1 = n * 2; + work_offset = work_dim1 + 1; + yvals_dim1 = n * 2; + xvals_dim1 = n; + + let mut c1: f64; + let mut c2: f64; + let mut denom: f64; + + assert!(n > 1); + + /* Copy the input array into WORK. After this, the first column */ + /* of WORK represents the first column of our triangular */ + /* interpolation table. */ + + i__1 = n * 2; + for i__ in 1..=i__1 { + work[i__ + work_dim1 - work_offset] = yvals[i__ - 1]; + } + + /* Compute the second column of the interpolation table: this */ + /* consists of the N-1 values obtained by evaluating the */ + /* first-degree interpolants at X. We'll also evaluate the */ + /* derivatives of these interpolants at X and save the results in */ + /* the second column of WORK. Because the derivative computations */ + /* depend on the function computations from the previous column in */ + /* the interpolation table, and because the function interpolation */ + /* overwrites the previous column of interpolated function values, */ + /* we must evaluate the derivatives first. */ + + i__1 = n - 1; + for i__ in 1..=i__1 { + c1 = xvals[i__] - x; + c2 = x - xvals[i__ - 1]; + denom = xvals[i__] - xvals[i__ - 1]; + + /* The second column of WORK contains interpolated derivative */ + /* values. */ + + /* The odd-indexed interpolated derivatives are simply the input */ + /* derivatives. */ + + prev = (i__ * 2) - 1; + this__ = prev + 1; + next = this__ + 1; + work[prev + (work_dim1 * 2) - work_offset] = work[this__ + work_dim1 - work_offset]; + + /* The even-indexed interpolated derivatives are the slopes of */ + /* the linear interpolating polynomials for adjacent input */ + /* abscissa/ordinate pairs. */ + + work[this__ + (work_dim1 * 2) - work_offset] = + (work[next + work_dim1 - work_offset] - work[prev + work_dim1 - work_offset]) / denom; + + /* The first column of WORK contains interpolated function values. */ + /* The odd-indexed entries are the linear Taylor polynomials, */ + /* for each input abscissa value, evaluated at X. */ + + temp = work[this__ + work_dim1 - work_offset] * (x - xvals[i__ - 1]) + + work[prev + work_dim1 - work_offset]; + work[this__ + work_dim1 - work_offset] = (c1 * work[prev + work_dim1 - work_offset] + + c2 * work[next + work_dim1 - work_offset]) + / denom; + work[prev + work_dim1 - work_offset] = temp; + } + + /* The last column entries were not computed by the preceding loop; */ + /* compute them now. */ + + work[(n * 2) - 1 + (work_dim1 * 2) - work_offset] = work[(n * 2) + work_dim1 - work_offset]; + work[(n * 2) - 1 + work_dim1 - work_offset] = work[(n * 2) + work_dim1 - work_offset] + * (x - xvals[n - 1]) + + work[(n * 2) - 1 + work_dim1 - work_offset]; + + /* Compute columns 3 through 2*N of the table. */ + + i__1 = (n * 2) - 1; + for j in 2..=i__1 { + i__2 = (n * 2) - j; + for i__ in 1..=i__2 { + /* In the theoretical construction of the interpolation table, + */ + /* there are 2*N abscissa values, since each input abcissa */ + /* value occurs with multiplicity two. In this theoretical */ + /* construction, the Jth column of the interpolation table */ + /* contains results of evaluating interpolants that span J+1 */ + /* consecutive abscissa values. The indices XI and XIJ below */ + /* are used to pick the correct abscissa values out of the */ + /* physical XVALS array, in which the abscissa values are not */ + /* repeated. */ + + xi = (i__ + 1) / 2; + xij = (i__ + j + 1) / 2; + c1 = xvals[xij - 1] - x; + c2 = x - xvals[xi - 1]; + denom = xvals[xij - 1] - xvals[xi - 1]; + + /* Compute the interpolated derivative at X for the Ith */ + /* interpolant. This is the derivative with respect to X of */ + /* the expression for the interpolated function value, which */ + /* is the second expression below. This derivative computation + */ + /* is done first because it relies on the interpolated */ + /* function values from the previous column of the */ + /* interpolation table. */ + + /* The derivative expression here corresponds to equation */ + /* 2.35 on page 64 in reference [2]. */ + + work[i__ + (work_dim1 * 2) - work_offset] = (c1 + * work[i__ + (work_dim1 * 2) - work_offset] + + c2 * work[i__ + 1 + (work_dim1 * 2) - work_offset] + + (work[i__ + 1 + work_dim1 - work_offset] - work[i__ + work_dim1 - work_offset])) + / denom; + + /* Compute the interpolated function value at X for the Ith */ + /* interpolant. */ + + work[i__ + work_dim1 - work_offset] = (c1 * work[i__ + work_dim1 - work_offset] + + c2 * work[i__ + 1 + work_dim1 - work_offset]) + / denom; + } + } + + /* Our interpolated function value is sitting in WORK(1,1) at this */ + /* point. The interpolated derivative is located in WORK(1,2). */ + + let f = work[work_dim1 + 1 - work_offset]; + let df = work[(work_dim1 * 2) + 1 - work_offset]; + (f, df) +} /* hrmint_ */ diff --git a/src/math/polyfit/mod.rs b/src/math/polyfit/mod.rs index 47a37490..b411c0c5 100644 --- a/src/math/polyfit/mod.rs +++ b/src/math/polyfit/mod.rs @@ -12,6 +12,8 @@ mod common; pub mod hermite; mod polynomial; +pub mod hrmint; + pub use common::CommonPolynomial; pub use polynomial::{LargestPolynomial, Polynomial}; @@ -25,9 +27,9 @@ use core::ops::{Index, IndexMut}; /// A FixedArray is a a way around allocating vectors when we don't know the exact size at compile time. /// This will be made obsolete when https://github.com/rust-lang/rust/issues/60551 is merged into rust stable. #[derive(Copy, Clone, Debug)] -struct FixedArray([[f64; N]; S]); +struct F64TupleArray([[f64; N]; S]); -impl FixedArray { +impl F64TupleArray { fn zeros() -> Self { Self([[0.0; N]; S]) } @@ -37,7 +39,7 @@ impl FixedArray { } } -impl Index for FixedArray { +impl Index for F64TupleArray { type Output = f64; fn index(&self, index: usize) -> &Self::Output { @@ -46,7 +48,7 @@ impl Index for FixedArray { } } -impl IndexMut for FixedArray { +impl IndexMut for F64TupleArray { fn index_mut(&mut self, index: usize) -> &mut f64 { let (one, two) = self.indexes(index); &mut self.0[one][two] diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs index bbc70695..5804be1b 100644 --- a/src/naif/spk/datatypes/hermite.rs +++ b/src/naif/spk/datatypes/hermite.rs @@ -186,7 +186,7 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { { (self.num_records - self.samples - 1, self.samples - 1) } else { - (idx - self.samples / 2, idx + self.samples / 2 + 1) + dbg!(idx - (self.samples - 1) / 2, idx + (self.samples - 1) / 2) }; // Statically allocated arrays of the maximum number of samples @@ -197,7 +197,7 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { let mut vxs = [0.0; MAX_SAMPLES]; let mut vys = [0.0; MAX_SAMPLES]; let mut vzs = [0.0; MAX_SAMPLES]; - for (cno, idx) in (first_idx..last_idx).enumerate() { + for (cno, idx) in (first_idx..=last_idx).enumerate() { let record = self.nth_record(idx)?; xs[cno] = record.x_km; ys[cno] = record.y_km; @@ -208,33 +208,40 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { epochs[cno] = self.epoch_data[idx]; } + dbg!( + &epochs[..=self.samples], + &xs[..=self.samples], + &vxs[..=self.samples] + ); + // Normalize the epochs between -1.0 and 1.0 - let first_sample_epoch_et_s = epochs[0]; - let last_sample_epoch_et_s = epochs[self.samples - 1]; - // XXX: Is there any different for back prop segments? - let window_duration_s = last_sample_epoch_et_s - first_sample_epoch_et_s; + let first_sample_epoch_et_s = dbg!(self.epoch_data[first_idx]); + let last_sample_epoch_et_s = dbg!(self.epoch_data[last_idx]); + // XXX: Is there any difference for back prop segments? + // let window_duration_s = last_sample_epoch_et_s - first_sample_epoch_et_s; for idx in 0..self.samples { - epochs[idx] = normalize( - epochs[idx] - first_sample_epoch_et_s, - 0.0, - window_duration_s, - ); + epochs[idx] = + normalize(epochs[idx], first_sample_epoch_et_s, last_sample_epoch_et_s); } let normalized_epoch = normalize( - epoch.to_et_seconds() - first_sample_epoch_et_s, - 0.0, - window_duration_s, + epoch.to_et_seconds(), + first_sample_epoch_et_s, + last_sample_epoch_et_s, ); + dbg!(normalized_epoch); + // Build the interpolation polynomials making sure to limit the slices to exactly the number of items we actually used // The other ones are zeros, which would cause the interpolation function to fail. let x_vx_poly = LargestPolynomial::hermite( - &epochs[..self.samples], - &xs[..self.samples], - &vxs[..self.samples], + dbg!(&epochs[..self.samples]), + dbg!(&xs[..self.samples]), + dbg!(&vxs[..self.samples]), )?; + println!("{x_vx_poly:x}"); + let y_vy_poly = LargestPolynomial::hermite( &epochs[..self.samples], &ys[..self.samples], From 47220637a0c1a655b809ef2af7fd31eb7d053b59 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sun, 27 Nov 2022 15:41:08 -0700 Subject: [PATCH 28/48] Finally just using the SPICE algo The reference does not exactly use divided differences but it obviously leads to more precise computation Signed-off-by: Christopher Rabotin --- src/math/polyfit/hermite.rs | 78 ++++++++++++++++--------------------- src/math/polyfit/hrmint.rs | 66 ++++++++++--------------------- 2 files changed, 54 insertions(+), 90 deletions(-) diff --git a/src/math/polyfit/hermite.rs b/src/math/polyfit/hermite.rs index c76cab98..6c05fe84 100644 --- a/src/math/polyfit/hermite.rs +++ b/src/math/polyfit/hermite.rs @@ -64,7 +64,6 @@ impl Polynomial { let mut zs = F64TupleArray::<2, MAX_SAMPLES>::zeros(); let mut qs = F64TupleArray::<4, Q_LENGTH>::zeros(); - for i in 0..xs.len() { zs[2 * i] = xs[i]; zs[2 * i + 1] = xs[i]; @@ -88,7 +87,7 @@ impl Polynomial { let mut hermite = Polynomial::::zeros(); for i in (1..2 * xs.len()).rev() { - hermite += qs[i + i * (2 * xs.len())]; + hermite += qs[dbg!(i + i * (2 * xs.len()))]; let new_poly = Polynomial::<2>::from_most_significant([1.0, -xs[(i - 1) / 2]]); hermite = multiply::(hermite, new_poly); } @@ -372,6 +371,13 @@ fn hermite_spice_docs_example() { ); println!("{:?}", poly.eval_n_deriv(2.0)); + + let yvals = [6.0, 3.0, 5.0, 0.0, 2210.0, 5115.0, 78180.0, 109395.0]; + let (x, vx) = hrmint_(&ts, &yvals, 2.0); + println!("{x:e}\t{vx:e}"); + use core::f64::EPSILON; + assert!((x - 141.0).abs() < EPSILON, "X error"); + assert!((vx - 456.0).abs() < EPSILON, "VX error"); } #[test] @@ -402,7 +408,6 @@ fn hermite_spice_data() { #[test] fn hermite_ephem_spline_test2() { - use super::MAX_DEGREE; let epoch_et = 773064069.1841084; let epochs = [ 773063753.0320327, @@ -448,52 +453,35 @@ fn hermite_ephem_spline_test2() { let first_sample_epoch_et_s = epochs[start_idx]; let last_sample_epoch_et_s = epochs[end_idx]; - let min_x = dbg!(first_sample_epoch_et_s); - let max_x = dbg!(last_sample_epoch_et_s); - - for idx in 0..epochs.len() { - ts[idx] = normalize(epochs[idx], min_x, max_x); - } - - dbg!(&ts); - - let tol = 1e-9; - let tol_deriv = 1e-9; - let poly = Polynomial::::hermite( - dbg!(&epochs[start_idx..end_idx + 1]), - dbg!(&values[start_idx..end_idx + 1]), - dbg!(&values_dt[start_idx..end_idx + 1]), - ) - .unwrap(); - - println!("{:x}", poly); - - let mut max_eval_err: f64 = 0.0; - let mut max_deriv_err: f64 = 0.0; - - for i in start_idx..end_idx + 1 { - let t = epochs[i]; - let (eval, deriv) = poly.eval_n_deriv(t); - let eval_err = (eval - values[i]).abs(); - // assert!(dbg!(eval_err) < tol); - max_eval_err = max_eval_err.max(eval_err); - - let deriv_err = (deriv - values_dt[i]).abs(); - // assert!(dbg!(deriv_err) < tol_deriv); - max_deriv_err = max_deriv_err.max(deriv_err); - } - - println!( - "Max eval error: {:.e}\tMax deriv error: {:.e}\t", - max_eval_err, max_deriv_err - ); - - let (x, vx) = poly.eval_n_deriv(epoch_et); + let yvals = [ + 1264.0276092333008, + -1.0119972729331588, + 1169.380111723055, + -1.0982621220038147, + 1067.501355281949, + -1.1773202325269372, + 958.9770086109238, + -1.248793644639029, + 844.4072328473662, + -1.3123304769876323, + 724.4430188794065, + -1.3675873394086253, + 599.8186349004518, + -1.414230273831576, + 471.46623936222625, + -1.4519274117465721, + 342.04349989730264, + -1.4801351852184736, + ]; + let (x, vx) = hrmint_(&epochs[start_idx..end_idx + 1], &yvals, epoch_et); let want_x = 8.9871033515359500e+02; let want_vx = -1.2836208430532707e+00; dbg!(x, vx); - println!("{}\t{}", x - want_x, vx - want_vx); + println!("{:e} km\t{:e} km/s", x - want_x, vx - want_vx); + + assert!((x - want_x).abs() < 1e-8, "Error in X"); + assert!((vx - want_vx).abs() < 1e-10, "Error in VX"); } diff --git a/src/math/polyfit/hrmint.rs b/src/math/polyfit/hrmint.rs index 0ad59a93..d8053ff9 100644 --- a/src/math/polyfit/hrmint.rs +++ b/src/math/polyfit/hrmint.rs @@ -6,42 +6,22 @@ /* $Procedure HRMINT ( Hermite polynomial interpolation ) */ /* Subroutine */ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { - let mut work: &mut [f64] = &mut [0.0; 256]; + let work: &mut [f64] = &mut [0.0; 256]; let n: usize = xvals.len(); /* System generated locals */ - let mut xvals_dim1: usize; - let mut yvals_dim1: usize; - let mut work_dim1: usize; - let mut work_offset: usize; - let mut i__1: usize; - let mut i__2: usize; - let mut i__3: usize; - let mut i__4: usize; - let mut i__5: usize; - let mut i__6: usize; - let mut i__7: usize; + let work_dim1: usize; + let work_offset: usize; /* Local variables */ let mut temp: f64; let mut this__: usize; let mut prev: usize; let mut next: usize; - let i__: usize; - let j: usize; - - let mut xij: usize; - let mut xi; /* Parameter adjustments */ work_dim1 = n * 2; work_offset = work_dim1 + 1; - yvals_dim1 = n * 2; - xvals_dim1 = n; - - let mut c1: f64; - let mut c2: f64; - let mut denom: f64; assert!(n > 1); @@ -49,8 +29,7 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { /* of WORK represents the first column of our triangular */ /* interpolation table. */ - i__1 = n * 2; - for i__ in 1..=i__1 { + for i__ in 1..=n * 2 { work[i__ + work_dim1 - work_offset] = yvals[i__ - 1]; } @@ -64,11 +43,10 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { /* overwrites the previous column of interpolated function values, */ /* we must evaluate the derivatives first. */ - i__1 = n - 1; - for i__ in 1..=i__1 { - c1 = xvals[i__] - x; - c2 = x - xvals[i__ - 1]; - denom = xvals[i__] - xvals[i__ - 1]; + for i__ in 1..=n - 1 { + let c1 = xvals[i__] - x; + let c2 = x - xvals[i__ - 1]; + let denom = xvals[i__] - xvals[i__ - 1]; /* The second column of WORK contains interpolated derivative */ /* values. */ @@ -110,10 +88,8 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { /* Compute columns 3 through 2*N of the table. */ - i__1 = (n * 2) - 1; - for j in 2..=i__1 { - i__2 = (n * 2) - j; - for i__ in 1..=i__2 { + for j in 2..=(n * 2) - 1 { + for i in 1..=(n * 2) - j { /* In the theoretical construction of the interpolation table, */ /* there are 2*N abscissa values, since each input abcissa */ @@ -125,11 +101,11 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { /* physical XVALS array, in which the abscissa values are not */ /* repeated. */ - xi = (i__ + 1) / 2; - xij = (i__ + j + 1) / 2; - c1 = xvals[xij - 1] - x; - c2 = x - xvals[xi - 1]; - denom = xvals[xij - 1] - xvals[xi - 1]; + let xi = (i + 1) / 2; + let xij = (i + j + 1) / 2; + let c1 = xvals[xij - 1] - x; + let c2 = x - xvals[xi - 1]; + let denom = xvals[xij - 1] - xvals[xi - 1]; /* Compute the interpolated derivative at X for the Ith */ /* interpolant. This is the derivative with respect to X of */ @@ -143,17 +119,17 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { /* The derivative expression here corresponds to equation */ /* 2.35 on page 64 in reference [2]. */ - work[i__ + (work_dim1 * 2) - work_offset] = (c1 - * work[i__ + (work_dim1 * 2) - work_offset] - + c2 * work[i__ + 1 + (work_dim1 * 2) - work_offset] - + (work[i__ + 1 + work_dim1 - work_offset] - work[i__ + work_dim1 - work_offset])) + work[i + (work_dim1 * 2) - work_offset] = (c1 + * work[i + (work_dim1 * 2) - work_offset] + + c2 * work[i + 1 + (work_dim1 * 2) - work_offset] + + (work[i + 1 + work_dim1 - work_offset] - work[i + work_dim1 - work_offset])) / denom; /* Compute the interpolated function value at X for the Ith */ /* interpolant. */ - work[i__ + work_dim1 - work_offset] = (c1 * work[i__ + work_dim1 - work_offset] - + c2 * work[i__ + 1 + work_dim1 - work_offset]) + work[i + work_dim1 - work_offset] = (c1 * work[i + work_dim1 - work_offset] + + c2 * work[i + 1 + work_dim1 - work_offset]) / denom; } } From b690eeaeb0d106ed76961909b0076806918f4bf5 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sun, 27 Nov 2022 15:49:32 -0700 Subject: [PATCH 29/48] Cleanup the variables Signed-off-by: Christopher Rabotin --- src/math/polyfit/hrmint.rs | 67 +++++++++++++------------------------- 1 file changed, 22 insertions(+), 45 deletions(-) diff --git a/src/math/polyfit/hrmint.rs b/src/math/polyfit/hrmint.rs index d8053ff9..efd93ab5 100644 --- a/src/math/polyfit/hrmint.rs +++ b/src/math/polyfit/hrmint.rs @@ -9,28 +9,14 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { let work: &mut [f64] = &mut [0.0; 256]; let n: usize = xvals.len(); - /* System generated locals */ - let work_dim1: usize; - let work_offset: usize; - - /* Local variables */ - let mut temp: f64; - let mut this__: usize; - let mut prev: usize; - let mut next: usize; - - /* Parameter adjustments */ - work_dim1 = n * 2; - work_offset = work_dim1 + 1; - assert!(n > 1); /* Copy the input array into WORK. After this, the first column */ /* of WORK represents the first column of our triangular */ /* interpolation table. */ - for i__ in 1..=n * 2 { - work[i__ + work_dim1 - work_offset] = yvals[i__ - 1]; + for i in 0..n * 2 { + work[i] = yvals[i]; } /* Compute the second column of the interpolation table: this */ @@ -43,10 +29,10 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { /* overwrites the previous column of interpolated function values, */ /* we must evaluate the derivatives first. */ - for i__ in 1..=n - 1 { - let c1 = xvals[i__] - x; - let c2 = x - xvals[i__ - 1]; - let denom = xvals[i__] - xvals[i__ - 1]; + for i in 1..=n - 1 { + let c1 = xvals[i] - x; + let c2 = x - xvals[i - 1]; + let denom = xvals[i] - xvals[i - 1]; /* The second column of WORK contains interpolated derivative */ /* values. */ @@ -54,37 +40,31 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { /* The odd-indexed interpolated derivatives are simply the input */ /* derivatives. */ - prev = (i__ * 2) - 1; - this__ = prev + 1; - next = this__ + 1; - work[prev + (work_dim1 * 2) - work_offset] = work[this__ + work_dim1 - work_offset]; + let prev = 2 * i - 1; + let curr = 2 * i; + let next = 2 * i + 1; + work[prev + 2 * n - 1] = work[curr - 1]; /* The even-indexed interpolated derivatives are the slopes of */ /* the linear interpolating polynomials for adjacent input */ /* abscissa/ordinate pairs. */ - work[this__ + (work_dim1 * 2) - work_offset] = - (work[next + work_dim1 - work_offset] - work[prev + work_dim1 - work_offset]) / denom; + work[curr + 2 * n - 1] = (work[next - 1] - work[prev - 1]) / denom; /* The first column of WORK contains interpolated function values. */ /* The odd-indexed entries are the linear Taylor polynomials, */ /* for each input abscissa value, evaluated at X. */ - temp = work[this__ + work_dim1 - work_offset] * (x - xvals[i__ - 1]) - + work[prev + work_dim1 - work_offset]; - work[this__ + work_dim1 - work_offset] = (c1 * work[prev + work_dim1 - work_offset] - + c2 * work[next + work_dim1 - work_offset]) - / denom; - work[prev + work_dim1 - work_offset] = temp; + let temp = work[curr - 1] * (x - xvals[i - 1]) + work[prev - 1]; + work[curr - 1] = (c1 * work[prev - 1] + c2 * work[next - 1]) / denom; + work[prev - 1] = temp; } /* The last column entries were not computed by the preceding loop; */ /* compute them now. */ - work[(n * 2) - 1 + (work_dim1 * 2) - work_offset] = work[(n * 2) + work_dim1 - work_offset]; - work[(n * 2) - 1 + work_dim1 - work_offset] = work[(n * 2) + work_dim1 - work_offset] - * (x - xvals[n - 1]) - + work[(n * 2) - 1 + work_dim1 - work_offset]; + work[(n * 2) - 1 + 2 * n - 1] = work[(n * 2) - 1]; + work[(n * 2) - 1 - 1] = work[(n * 2) - 1] * (x - xvals[n - 1]) + work[(n * 2) - 1 - 1]; /* Compute columns 3 through 2*N of the table. */ @@ -119,25 +99,22 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { /* The derivative expression here corresponds to equation */ /* 2.35 on page 64 in reference [2]. */ - work[i + (work_dim1 * 2) - work_offset] = (c1 - * work[i + (work_dim1 * 2) - work_offset] - + c2 * work[i + 1 + (work_dim1 * 2) - work_offset] - + (work[i + 1 + work_dim1 - work_offset] - work[i + work_dim1 - work_offset])) + work[i + 2 * n - 1] = (c1 * work[i + 2 * n - 1] + + c2 * work[i + 1 + 2 * n - 1] + + (work[i + 1 - 1] - work[i - 1])) / denom; /* Compute the interpolated function value at X for the Ith */ /* interpolant. */ - work[i + work_dim1 - work_offset] = (c1 * work[i + work_dim1 - work_offset] - + c2 * work[i + 1 + work_dim1 - work_offset]) - / denom; + work[i - 1] = (c1 * work[i - 1] + c2 * work[i + 1 - 1]) / denom; } } /* Our interpolated function value is sitting in WORK(1,1) at this */ /* point. The interpolated derivative is located in WORK(1,2). */ - let f = work[work_dim1 + 1 - work_offset]; - let df = work[(work_dim1 * 2) + 1 - work_offset]; + let f = work[0]; + let df = work[2 * n]; (f, df) } /* hrmint_ */ From d0c11b7a3883bc422eecba87bdb39cdfccd8e23f Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sun, 27 Nov 2022 15:59:23 -0700 Subject: [PATCH 30/48] More cleanup (not done yet) Signed-off-by: Christopher Rabotin --- src/math/polyfit/hermite.rs | 54 +++++++++++++++++++++---------------- src/math/polyfit/hrmint.rs | 9 ++++--- 2 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/math/polyfit/hermite.rs b/src/math/polyfit/hermite.rs index 6c05fe84..a49b609f 100644 --- a/src/math/polyfit/hermite.rs +++ b/src/math/polyfit/hermite.rs @@ -372,8 +372,10 @@ fn hermite_spice_docs_example() { println!("{:?}", poly.eval_n_deriv(2.0)); - let yvals = [6.0, 3.0, 5.0, 0.0, 2210.0, 5115.0, 78180.0, 109395.0]; - let (x, vx) = hrmint_(&ts, &yvals, 2.0); + // let yvals = [6.0, 3.0, 5.0, 0.0, 2210.0, 5115.0, 78180.0, 109395.0]; + let yvals = [6.0, 5.0, 2210.0, 78180.0]; + let ydotvals = [3.0, 0.0, 5115.0, 109395.0]; + let (x, vx) = hrmint_(&ts, &yvals, &ydotvals, 2.0); println!("{x:e}\t{vx:e}"); use core::f64::EPSILON; assert!((x - 141.0).abs() < EPSILON, "X error"); @@ -453,27 +455,33 @@ fn hermite_ephem_spline_test2() { let first_sample_epoch_et_s = epochs[start_idx]; let last_sample_epoch_et_s = epochs[end_idx]; - let yvals = [ - 1264.0276092333008, - -1.0119972729331588, - 1169.380111723055, - -1.0982621220038147, - 1067.501355281949, - -1.1773202325269372, - 958.9770086109238, - -1.248793644639029, - 844.4072328473662, - -1.3123304769876323, - 724.4430188794065, - -1.3675873394086253, - 599.8186349004518, - -1.414230273831576, - 471.46623936222625, - -1.4519274117465721, - 342.04349989730264, - -1.4801351852184736, - ]; - let (x, vx) = hrmint_(&epochs[start_idx..end_idx + 1], &yvals, epoch_et); + // let yvals = [ + // 1264.0276092333008, + // -1.0119972729331588, + // 1169.380111723055, + // -1.0982621220038147, + // 1067.501355281949, + // -1.1773202325269372, + // 958.9770086109238, + // -1.248793644639029, + // 844.4072328473662, + // -1.3123304769876323, + // 724.4430188794065, + // -1.3675873394086253, + // 599.8186349004518, + // -1.414230273831576, + // 471.46623936222625, + // -1.4519274117465721, + // 342.04349989730264, + // -1.4801351852184736, + // ]; + + let (x, vx) = hrmint_( + &epochs[start_idx..end_idx + 1], + &values[start_idx..end_idx + 1], + &values_dt[start_idx..end_idx + 1], + epoch_et, + ); let want_x = 8.9871033515359500e+02; let want_vx = -1.2836208430532707e+00; diff --git a/src/math/polyfit/hrmint.rs b/src/math/polyfit/hrmint.rs index efd93ab5..744ed2f6 100644 --- a/src/math/polyfit/hrmint.rs +++ b/src/math/polyfit/hrmint.rs @@ -5,7 +5,7 @@ /* $Procedure HRMINT ( Hermite polynomial interpolation ) */ /* Subroutine */ -pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { +pub fn hrmint_(xvals: &[f64], yvals: &[f64], ydotvals: &[f64], x: f64) -> (f64, f64) { let work: &mut [f64] = &mut [0.0; 256]; let n: usize = xvals.len(); @@ -15,8 +15,9 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { /* of WORK represents the first column of our triangular */ /* interpolation table. */ - for i in 0..n * 2 { - work[i] = yvals[i]; + for i in 0..n { + work[2 * i] = yvals[i]; + work[2 * i + 1] = ydotvals[i]; } /* Compute the second column of the interpolation table: this */ @@ -107,7 +108,7 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], x: f64) -> (f64, f64) { /* Compute the interpolated function value at X for the Ith */ /* interpolant. */ - work[i - 1] = (c1 * work[i - 1] + c2 * work[i + 1 - 1]) / denom; + work[i - 1] = (c1 * work[i - 1] + c2 * work[i]) / denom; } } From a49c27a1e4416a62958dabc98c7946ee607eac9f Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sun, 27 Nov 2022 16:13:34 -0700 Subject: [PATCH 31/48] Add C hrmint file for reference Signed-off-by: Christopher Rabotin --- src/math/polyfit/cdemo/Makefile | 4 + src/math/polyfit/cdemo/hrmint.c | 447 ++++++++++++++++++++++++++++++++ src/math/polyfit/cdemo/main.c | 62 +++++ src/math/polyfit/hrmint.c | 411 ----------------------------- src/math/polyfit/hrmint.rs | 77 ++++-- 5 files changed, 575 insertions(+), 426 deletions(-) create mode 100644 src/math/polyfit/cdemo/Makefile create mode 100644 src/math/polyfit/cdemo/hrmint.c create mode 100644 src/math/polyfit/cdemo/main.c delete mode 100644 src/math/polyfit/hrmint.c diff --git a/src/math/polyfit/cdemo/Makefile b/src/math/polyfit/cdemo/Makefile new file mode 100644 index 00000000..f4a5630c --- /dev/null +++ b/src/math/polyfit/cdemo/Makefile @@ -0,0 +1,4 @@ +it: + gcc -Wall -shared -o libhrmint.so hrmint.c -fPIC -g + gcc -Wall main.c -o main -lm -L. -lhrmint + LD_LIBRARY_PATH=. ./main \ No newline at end of file diff --git a/src/math/polyfit/cdemo/hrmint.c b/src/math/polyfit/cdemo/hrmint.c new file mode 100644 index 00000000..42aae034 --- /dev/null +++ b/src/math/polyfit/cdemo/hrmint.c @@ -0,0 +1,447 @@ +/* hrmint.f -- translated by f2c (version 19980913). + You must link the resulting object file with the libraries: + -lf2c -lm (in that order) +*/ + +// #include "f2c.h" +#include +typedef int integer; +typedef double doublereal; + +/* $Procedure HRMINT ( Hermite polynomial interpolation ) */ +/* Subroutine */ int hrmint_(integer* n, doublereal* xvals, doublereal* yvals, + doublereal* x, doublereal* work, doublereal* f, + doublereal* df) +{ + /* System generated locals */ + // integer xvals_dim1, yvals_dim1, work_dim1, work_offset, i__1, i__2, i__3, + // i__4, i__5, i__6, i__7; + integer work_dim1, work_offset; + + /* Builtin functions */ + integer s_rnge(char*, integer, char*, integer); + + /* Local variables */ + doublereal temp; + integer this__, prev, next, i__, j; + // extern /* Subroutine */ int chkin_(char*, ftnlen); + doublereal denom; + // extern /* Subroutine */ int errdp_(char*, doublereal*, ftnlen); + doublereal c1, c2; + integer xi; + // extern /* Subroutine */ int sigerr_(char*, ftnlen), chkout_(char*, ftnlen), + // setmsg_(char*, ftnlen), errint_(char*, integer*, ftnlen); + // extern logical return_(void); + integer xij; + + /* $ Abstract */ + + /* Evaluate a Hermite interpolating polynomial at a specified */ + /* abscissa value. */ + + /* $ Disclaimer */ + + /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ + /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ + /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ + /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ + /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ + /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ + /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ + /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ + /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ + /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ + + /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ + /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ + /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ + /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ + /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ + /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ + + /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ + /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ + /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ + /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ + + /* $ Required_Reading */ + + /* None. */ + + /* $ Keywords */ + + /* INTERPOLATION */ + /* POLYNOMIAL */ + + /* $ Declarations */ + /* $ Brief_I/O */ + + /* Variable I/O Description */ + /* -------- --- -------------------------------------------------- */ + /* N I Number of points defining the polynomial. */ + /* XVALS I Abscissa values. */ + /* YVALS I Ordinate and derivative values. */ + /* X I Point at which to interpolate the polynomial. */ + /* WORK I-O Work space array. */ + /* F O Interpolated function value at X. */ + /* DF O Interpolated function's derivative at X. */ + + /* $ Detailed_Input */ + + /* N is the number of points defining the polynomial. */ + /* The arrays XVALS and YVALS contain N and 2*N */ + /* elements respectively. */ + + /* XVALS is an array of length N containing abscissa values. */ + + /* YVALS is an array of length 2*N containing ordinate and */ + /* derivative values for each point in the domain */ + /* defined by FIRST, STEP, and N. The elements */ + + /* YVALS( 2*I - 1 ) */ + /* YVALS( 2*I ) */ + + /* give the value and first derivative of the output */ + /* polynomial at the abscissa value */ + + /* XVALS(I) */ + + /* where I ranges from 1 to N. */ + + /* WORK is a work space array. It is used by this routine */ + /* as a scratch area to hold intermediate results. */ + + /* X is the abscissa value at which the interpolating */ + /* polynomial and its derivative are to be evaluated. */ + + /* $ Detailed_Output */ + + /* F, */ + /* DF are the value and derivative at X of the unique */ + /* polynomial of degree 2N-1 that fits the points and */ + /* derivatives defined by XVALS and YVALS. */ + + /* $ Parameters */ + + /* None. */ + + /* $ Exceptions */ + + /* 1) If two input abscissas are equal, the error */ + /* SPICE(DIVIDEBYZERO) will be signaled. */ + + /* 2) If N is less than 1, the error SPICE(INVALIDSIZE) is */ + /* signaled. */ + + /* 3) This routine does not attempt to ward off or diagnose */ + /* arithmetic overflows. */ + + /* $ Files */ + + /* None. */ + + /* $ Particulars */ + + /* Users of this routine must choose the number of points to use */ + /* in their interpolation method. The authors of Reference [1] have */ + /* this to say on the topic: */ + + /* Unless there is solid evidence that the interpolating function */ + /* is close in form to the true function f, it is a good idea to */ + /* be cautious about high-order interpolation. We */ + /* enthusiastically endorse interpolations with 3 or 4 points, we */ + /* are perhaps tolerant of 5 or 6; but we rarely go higher than */ + /* that unless there is quite rigorous monitoring of estimated */ + /* errors. */ + + /* The same authors offer this warning on the use of the */ + /* interpolating function for extrapolation: */ + + /* ...the dangers of extrapolation cannot be overemphasized: */ + /* An interpolating function, which is perforce an extrapolating */ + /* function, will typically go berserk when the argument x is */ + /* outside the range of tabulated values by more than the typical */ + /* spacing of tabulated points. */ + + /* $ Examples */ + + /* 1) Fit a 7th degree polynomial through the points ( x, y, y' ) */ + + /* ( -1, 6, 3 ) */ + /* ( 0, 5, 0 ) */ + /* ( 3, 2210, 5115 ) */ + /* ( 5, 78180, 109395 ) */ + + /* and evaluate this polynomial at x = 2. */ + + /* PROGRAM TEST_HRMINT */ + + /* DOUBLE PRECISION ANSWER */ + /* DOUBLE PRECISION DERIV */ + /* DOUBLE PRECISION XVALS (4) */ + /* DOUBLE PRECISION YVALS (8) */ + /* DOUBLE PRECISION WORK (8,2) */ + /* INTEGER N */ + + /* N = 4 */ + + /* XVALS(1) = -1.D0 */ + /* XVALS(2) = 0.D0 */ + /* XVALS(3) = 3.D0 */ + /* XVALS(4) = 5.D0 */ + + /* YVALS(1) = 6.D0 */ + /* YVALS(2) = 3.D0 */ + /* YVALS(3) = 5.D0 */ + /* YVALS(4) = 0.D0 */ + /* YVALS(5) = 2210.D0 */ + /* YVALS(6) = 5115.D0 */ + /* YVALS(7) = 78180.D0 */ + /* YVALS(8) = 109395.D0 */ + + /* CALL HRMINT ( N, XVALS, YVALS, 2.D0, WORK, ANSWER, DERIV ) */ + + /* WRITE (*,*) 'ANSWER = ', ANSWER */ + /* WRITE (*,*) 'DERIV = ', DERIV */ + /* END */ + + /* The returned value of ANSWER should be 141.D0, and the returned */ + /* derivative value should be 456.D0, since the unique 7th degree */ + /* polynomial that fits these constraints is */ + + /* 7 2 */ + /* f(x) = x + 2x + 5 */ + + /* $ Restrictions */ + + /* None. */ + + /* $ Literature_References */ + + /* [1] "Numerical Recipes---The Art of Scientific Computing" by */ + /* William H. Press, Brian P. Flannery, Saul A. Teukolsky, */ + /* William T. Vetterling (see sections 3.0 and 3.1). */ + + /* [2] "Elementary Numerical Analysis---An Algorithmic Approach" */ + /* by S. D. Conte and Carl de Boor. See p. 64. */ + + /* $ Author_and_Institution */ + + /* N.J. Bachman (JPL) */ + + /* $ Version */ + + /* - SPICELIB Version 1.2.1, 28-JAN-2014 (NJB) */ + + /* Fixed a few comment typos. */ + + /* - SPICELIB Version 1.2.0, 01-FEB-2002 (NJB) (EDW) */ + + /* Bug fix: declarations of local variables XI and XIJ */ + /* were changed from DOUBLE PRECISION to INTEGER. */ + /* Note: bug had no effect on behavior of this routine. */ + + /* - SPICELIB Version 1.1.0, 28-DEC-2001 (NJB) */ + + /* Blanks following final newline were truncated to */ + /* suppress compilation warnings on the SGI-N32 platform. */ + + /* - SPICELIB Version 1.0.0, 01-MAR-2000 (NJB) */ + + /* -& */ + /* $ Index_Entries */ + + /* interpolate function using Hermite polynomial */ + /* Hermite interpolation */ + + /* -& */ + + /* SPICELIB functions */ + + /* Local variables */ + + /* Check in only if an error is detected. */ + + /* Parameter adjustments */ + work_dim1 = *n * 2; + work_offset = work_dim1 + 1; + // yvals_dim1 = *n * 2; + // xvals_dim1 = *n; + + /* Function Body */ + + /* No data, no interpolation. */ + + if (*n < 1) { + printf("Array size must be positive; was #%d", *n); + return 0; + } + + /* Copy the input array into WORK. After this, the first column */ + /* of WORK represents the first column of our triangular */ + /* interpolation table. */ + + // i__1 = *n * 2; + for (i__ = 1; i__ <= *n * 2; ++i__) { + // work[(i__2 = i__ + work_dim1 - work_offset)] = yvals[(i__3 = i__ - 1)]; + work[(i__ + work_dim1 - work_offset)] = yvals[(i__ - 1)]; + } + + printf("[0] { "); + size_t fj; + for (size_t j = 0; j < 256; j++) { + double val = work[j]; + if (val == 0) { + break; + } + printf("%f ", val); + fj = j; + } + printf("} (items = %ld)\n", fj); + + /* Compute the second column of the interpolation table: this */ + /* consists of the N-1 values obtained by evaluating the */ + /* first-degree interpolants at X. We'll also evaluate the */ + /* derivatives of these interpolants at X and save the results in */ + /* the second column of WORK. Because the derivative computations */ + /* depend on the function computations from the previous column in */ + /* the interpolation table, and because the function interpolation */ + /* overwrites the previous column of interpolated function values, */ + /* we must evaluate the derivatives first. */ + + // i__1 = *n - 1; + double ts[256] = { 0 }; + for (i__ = 1; i__ <= *n - 1; ++i__) { + c1 = xvals[i__] - *x; + c2 = *x - xvals[i__ - 1]; + denom = xvals[i__] - xvals[i__ - 1]; + + /* The second column of WORK contains interpolated derivative */ + /* values. */ + + /* The odd-indexed interpolated derivatives are simply the input */ + /* derivatives. */ + + prev = (i__ * 2) - 1; + this__ = prev + 1; + next = this__ + 1; + work[prev + (work_dim1 * 2) - work_offset] = work[this__ + work_dim1 - work_offset]; + printf("set work[%d] = work[%d]\n", prev + (work_dim1 * 2) - work_offset, (this__ + work_dim1 - work_offset)); + + /* The even-indexed interpolated derivatives are the slopes of */ + /* the linear interpolating polynomials for adjacent input */ + /* abscissa/ordinate pairs. */ + + ts[i__ - 1] = (work[(next + work_dim1 - work_offset)] - work[(prev + work_dim1 - work_offset)]) / denom; + work[(this__ + (work_dim1 * 2) - work_offset)] = (work[(next + work_dim1 - work_offset)] - work[(prev + work_dim1 - work_offset)]) / denom; + // Calculate the difference between that time derivative and the input + double err = work[(this__ + (work_dim1 * 2) - work_offset)] - yvals[this__ - 1]; + printf("set work[%d] = (work[%d] - work[%d])/%f => %f\n", this__ + (work_dim1 * 2) - work_offset, prev + work_dim1 - work_offset, denom, err); + + /* The first column of WORK contains interpolated function values. */ + /* The odd-indexed entries are the linear Taylor polynomials, */ + /* for each input abscissa value, evaluated at X. */ + + temp = work[(this__ + work_dim1 - work_offset)] * (*x - xvals[(i__ - 1)]) + work[(prev + work_dim1 - work_offset)]; + work[(this__ + work_dim1 - work_offset)] = (c1 * work[(prev + work_dim1 - work_offset)] + c2 * work[(next + work_dim1 - work_offset)]) / denom; + work[(prev + work_dim1 - work_offset)] = temp; + } + + printf("[1] TS { "); + for (size_t j = 0; j < 256; j++) { + double val = ts[j]; + if (val == 0) { + break; + } + printf("%f ", val); + fj = j; + } + printf("} (items = %ld)\n", fj); + + printf("[1] { "); + for (size_t j = 0; j < 256; j++) { + double val = work[j]; + if (val == 0) { + break; + } + printf("%f ", val); + fj = j; + } + printf("} (items = %ld)\n", fj); + + /* The last column entries were not computed by the preceding loop; */ + /* compute them now. */ + + work[((*n * 2) - 1 + (work_dim1 * 2) - work_offset)] = work[((*n * 2) + work_dim1 - work_offset)]; + work[((*n * 2) - 1 + work_dim1 - work_offset)] = work[((*n * 2) + work_dim1 - work_offset)] * (*x - xvals[(*n - 1)]) + work[((*n * 2) - 1 + work_dim1 - work_offset)]; + printf("[2] { "); + for (size_t j = 0; j < 256; j++) { + double val = work[j]; + if (val == 0) { + break; + } + printf("%f ", val); + fj = j; + } + printf("} (items = %ld)\n", fj); + + /* Compute columns 3 through 2*N of the table. */ + + for (j = 2; j <= (*n * 2) - 1; ++j) { + for (i__ = 1; i__ <= (*n * 2) - j; ++i__) { + + /* In the theoretical construction of the interpolation table, + */ + /* there are 2*N abscissa values, since each input abcissa */ + /* value occurs with multiplicity two. In this theoretical */ + /* construction, the Jth column of the interpolation table */ + /* contains results of evaluating interpolants that span J+1 */ + /* consecutive abscissa values. The indices XI and XIJ below */ + /* are used to pick the correct abscissa values out of the */ + /* physical XVALS array, in which the abscissa values are not */ + /* repeated. */ + + xi = (i__ + 1) / 2; + xij = (i__ + j + 1) / 2; + c1 = xvals[(xij - 1)] - *x; + c2 = *x - xvals[(xi - 1)]; + denom = xvals[(xij - 1)] - xvals[(xi - 1)]; + + /* Compute the interpolated derivative at X for the Ith */ + /* interpolant. This is the derivative with respect to X of */ + /* the expression for the interpolated function value, which */ + /* is the second expression below. This derivative computation + */ + /* is done first because it relies on the interpolated */ + /* function values from the previous column of the */ + /* interpolation table. */ + + /* The derivative expression here corresponds to equation */ + /* 2.35 on page 64 in reference [2]. */ + + work[(i__ + (work_dim1 * 2) - work_offset)] = (c1 * work[(i__ + (work_dim1 * 2) - work_offset)] + c2 * work[(i__ + 1 + (work_dim1 * 2) - work_offset)] + (work[(i__ + 1 + work_dim1 - work_offset)] - work[(i__ + work_dim1 - work_offset)])) / denom; + + /* Compute the interpolated function value at X for the Ith */ + /* interpolant. */ + + work[(i__ + work_dim1 - work_offset)] = (c1 * work[(i__ + work_dim1 - work_offset)] + c2 * work[(i__ + 1 + work_dim1 - work_offset)]) / denom; + } + } + printf("[3] { "); + for (size_t j = 0; j < 256; j++) { + double val = work[j]; + if (val == 0) { + break; + } + printf("%f ", val); + fj = j; + } + printf("} (items = %ld)\n", fj); + + /* Our interpolated function value is sitting in WORK(1,1) at this */ + /* point. The interpolated derivative is located in WORK(1,2). */ + + *f = work[(work_dim1 + 1 - work_offset)]; + *df = work[((work_dim1 * 2) + 1 - work_offset)]; + return 0; +} /* hrmint_ */ diff --git a/src/math/polyfit/cdemo/main.c b/src/math/polyfit/cdemo/main.c new file mode 100644 index 00000000..5698da18 --- /dev/null +++ b/src/math/polyfit/cdemo/main.c @@ -0,0 +1,62 @@ +#include +#include + +typedef int integer; +typedef double doublereal; + +int hrmint_(integer* n, doublereal* xvals, doublereal* yvals, + doublereal* x, doublereal* work, doublereal* f, + doublereal* df); + +int main() +{ + // double xvals[] = { + // // 773063753.0320327, + // 773063842.6860328, + // 773063932.1790327, + // 773064021.5950327, + // 773064111.0160326, + // 773064200.4970326, + // 773064290.0490326, + // 773064379.5660326, + // // 773064467.8020325, + // }; + // double yvals[] = { + // // 1264.0276092333008, + // // -1.0119972729331588, + // 1169.380111723055, + // -1.0982621220038147, + // 1067.501355281949, + // -1.1773202325269372, + // 958.9770086109238, + // -1.248793644639029, + // 844.4072328473662, + // -1.3123304769876323, + // 724.4430188794065, + // -1.3675873394086253, + // 599.8186349004518, + // -1.414230273831576, + // 471.46623936222625, + // -1.4519274117465721, + // // 342.04349989730264, + // // -1.4801351852184736, + // }; + // double x = 773064069.1841084; + double xvals[] = { -1.0, 0.0, 3.0, 5.0 }; + double yvals[] = { 6.0, 3.0, 5.0, 0.0, 2210.0, 5115.0, 78180.0, 109395.0 }; + double x = 2.0; + double f, + df; + int n = 7; + + double work[256] = { 0 }; + double want_x = 8.9871033515359500e+02; + double want_vx = -1.2836208430532707e+00; + + int rslt = hrmint_(&n, xvals, yvals, &x, work, &f, &df); + printf("rslt = %d\n", rslt); + printf("f = %f\tdf= %f\n", f, df); + printf("Δf = %e\tΔdf= %e\n", fabs(f - want_x), fabs(df - want_vx)); + + return 0; +} \ No newline at end of file diff --git a/src/math/polyfit/hrmint.c b/src/math/polyfit/hrmint.c deleted file mode 100644 index c73336ff..00000000 --- a/src/math/polyfit/hrmint.c +++ /dev/null @@ -1,411 +0,0 @@ -/* hrmint.f -- translated by f2c (version 19980913). - You must link the resulting object file with the libraries: - -lf2c -lm (in that order) -*/ - -#include "f2c.h" - -/* $Procedure HRMINT ( Hermite polynomial interpolation ) */ -/* Subroutine */ int hrmint_(integer *n, doublereal *xvals, doublereal *yvals, - doublereal *x, doublereal *work, doublereal *f, - doublereal *df) { - /* System generated locals */ - integer xvals_dim1, yvals_dim1, work_dim1, work_offset, i__1, i__2, i__3, - i__4, i__5, i__6, i__7; - - /* Builtin functions */ - integer s_rnge(char *, integer, char *, integer); - - /* Local variables */ - doublereal temp; - integer this__, prev, next, i__, j; - extern /* Subroutine */ int chkin_(char *, ftnlen); - doublereal denom; - extern /* Subroutine */ int errdp_(char *, doublereal *, ftnlen); - doublereal c1, c2; - integer xi; - extern /* Subroutine */ int sigerr_(char *, ftnlen), chkout_(char *, ftnlen), - setmsg_(char *, ftnlen), errint_(char *, integer *, ftnlen); - extern logical return_(void); - integer xij; - - /* $ Abstract */ - - /* Evaluate a Hermite interpolating polynomial at a specified */ - /* abscissa value. */ - - /* $ Disclaimer */ - - /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ - /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ - /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ - /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ - /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ - /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ - /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ - /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ - /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ - /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ - - /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ - /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ - /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ - /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ - /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ - /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ - - /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ - /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ - /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ - /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ - - /* $ Required_Reading */ - - /* None. */ - - /* $ Keywords */ - - /* INTERPOLATION */ - /* POLYNOMIAL */ - - /* $ Declarations */ - /* $ Brief_I/O */ - - /* Variable I/O Description */ - /* -------- --- -------------------------------------------------- */ - /* N I Number of points defining the polynomial. */ - /* XVALS I Abscissa values. */ - /* YVALS I Ordinate and derivative values. */ - /* X I Point at which to interpolate the polynomial. */ - /* WORK I-O Work space array. */ - /* F O Interpolated function value at X. */ - /* DF O Interpolated function's derivative at X. */ - - /* $ Detailed_Input */ - - /* N is the number of points defining the polynomial. */ - /* The arrays XVALS and YVALS contain N and 2*N */ - /* elements respectively. */ - - /* XVALS is an array of length N containing abscissa values. */ - - /* YVALS is an array of length 2*N containing ordinate and */ - /* derivative values for each point in the domain */ - /* defined by FIRST, STEP, and N. The elements */ - - /* YVALS( 2*I - 1 ) */ - /* YVALS( 2*I ) */ - - /* give the value and first derivative of the output */ - /* polynomial at the abscissa value */ - - /* XVALS(I) */ - - /* where I ranges from 1 to N. */ - - /* WORK is a work space array. It is used by this routine */ - /* as a scratch area to hold intermediate results. */ - - /* X is the abscissa value at which the interpolating */ - /* polynomial and its derivative are to be evaluated. */ - - /* $ Detailed_Output */ - - /* F, */ - /* DF are the value and derivative at X of the unique */ - /* polynomial of degree 2N-1 that fits the points and */ - /* derivatives defined by XVALS and YVALS. */ - - /* $ Parameters */ - - /* None. */ - - /* $ Exceptions */ - - /* 1) If two input abscissas are equal, the error */ - /* SPICE(DIVIDEBYZERO) will be signaled. */ - - /* 2) If N is less than 1, the error SPICE(INVALIDSIZE) is */ - /* signaled. */ - - /* 3) This routine does not attempt to ward off or diagnose */ - /* arithmetic overflows. */ - - /* $ Files */ - - /* None. */ - - /* $ Particulars */ - - /* Users of this routine must choose the number of points to use */ - /* in their interpolation method. The authors of Reference [1] have */ - /* this to say on the topic: */ - - /* Unless there is solid evidence that the interpolating function */ - /* is close in form to the true function f, it is a good idea to */ - /* be cautious about high-order interpolation. We */ - /* enthusiastically endorse interpolations with 3 or 4 points, we */ - /* are perhaps tolerant of 5 or 6; but we rarely go higher than */ - /* that unless there is quite rigorous monitoring of estimated */ - /* errors. */ - - /* The same authors offer this warning on the use of the */ - /* interpolating function for extrapolation: */ - - /* ...the dangers of extrapolation cannot be overemphasized: */ - /* An interpolating function, which is perforce an extrapolating */ - /* function, will typically go berserk when the argument x is */ - /* outside the range of tabulated values by more than the typical */ - /* spacing of tabulated points. */ - - /* $ Examples */ - - /* 1) Fit a 7th degree polynomial through the points ( x, y, y' ) */ - - /* ( -1, 6, 3 ) */ - /* ( 0, 5, 0 ) */ - /* ( 3, 2210, 5115 ) */ - /* ( 5, 78180, 109395 ) */ - - /* and evaluate this polynomial at x = 2. */ - - /* PROGRAM TEST_HRMINT */ - - /* DOUBLE PRECISION ANSWER */ - /* DOUBLE PRECISION DERIV */ - /* DOUBLE PRECISION XVALS (4) */ - /* DOUBLE PRECISION YVALS (8) */ - /* DOUBLE PRECISION WORK (8,2) */ - /* INTEGER N */ - - /* N = 4 */ - - /* XVALS(1) = -1.D0 */ - /* XVALS(2) = 0.D0 */ - /* XVALS(3) = 3.D0 */ - /* XVALS(4) = 5.D0 */ - - /* YVALS(1) = 6.D0 */ - /* YVALS(2) = 3.D0 */ - /* YVALS(3) = 5.D0 */ - /* YVALS(4) = 0.D0 */ - /* YVALS(5) = 2210.D0 */ - /* YVALS(6) = 5115.D0 */ - /* YVALS(7) = 78180.D0 */ - /* YVALS(8) = 109395.D0 */ - - /* CALL HRMINT ( N, XVALS, YVALS, 2.D0, WORK, ANSWER, DERIV ) */ - - /* WRITE (*,*) 'ANSWER = ', ANSWER */ - /* WRITE (*,*) 'DERIV = ', DERIV */ - /* END */ - - /* The returned value of ANSWER should be 141.D0, and the returned */ - /* derivative value should be 456.D0, since the unique 7th degree */ - /* polynomial that fits these constraints is */ - - /* 7 2 */ - /* f(x) = x + 2x + 5 */ - - /* $ Restrictions */ - - /* None. */ - - /* $ Literature_References */ - - /* [1] "Numerical Recipes---The Art of Scientific Computing" by */ - /* William H. Press, Brian P. Flannery, Saul A. Teukolsky, */ - /* William T. Vetterling (see sections 3.0 and 3.1). */ - - /* [2] "Elementary Numerical Analysis---An Algorithmic Approach" */ - /* by S. D. Conte and Carl de Boor. See p. 64. */ - - /* $ Author_and_Institution */ - - /* N.J. Bachman (JPL) */ - - /* $ Version */ - - /* - SPICELIB Version 1.2.1, 28-JAN-2014 (NJB) */ - - /* Fixed a few comment typos. */ - - /* - SPICELIB Version 1.2.0, 01-FEB-2002 (NJB) (EDW) */ - - /* Bug fix: declarations of local variables XI and XIJ */ - /* were changed from DOUBLE PRECISION to INTEGER. */ - /* Note: bug had no effect on behavior of this routine. */ - - /* - SPICELIB Version 1.1.0, 28-DEC-2001 (NJB) */ - - /* Blanks following final newline were truncated to */ - /* suppress compilation warnings on the SGI-N32 platform. */ - - /* - SPICELIB Version 1.0.0, 01-MAR-2000 (NJB) */ - - /* -& */ - /* $ Index_Entries */ - - /* interpolate function using Hermite polynomial */ - /* Hermite interpolation */ - - /* -& */ - - /* SPICELIB functions */ - - /* Local variables */ - - /* Check in only if an error is detected. */ - - /* Parameter adjustments */ - work_dim1 = *n * 2; - work_offset = work_dim1 + 1; - yvals_dim1 = *n * 2; - xvals_dim1 = *n; - - /* Function Body */ - if (return_()) { - return 0; - } - - /* No data, no interpolation. */ - - if (*n < 1) { - chkin_("HRMINT", (ftnlen)6); - setmsg_("Array size must be positive; was #.", (ftnlen)35); - errint_("#", n, (ftnlen)1); - sigerr_("SPICE(INVALIDSIZE)", (ftnlen)18); - chkout_("HRMINT", (ftnlen)6); - return 0; - } - - /* Copy the input array into WORK. After this, the first column */ - /* of WORK represents the first column of our triangular */ - /* interpolation table. */ - - i__1 = *n * 2; - for (i__ = 1; i__ <= i__1; ++i__) { - work[(i__2 = i__ + work_dim1 - work_offset)] = yvals[(i__3 = i__ - 1)]; - } - - /* Compute the second column of the interpolation table: this */ - /* consists of the N-1 values obtained by evaluating the */ - /* first-degree interpolants at X. We'll also evaluate the */ - /* derivatives of these interpolants at X and save the results in */ - /* the second column of WORK. Because the derivative computations */ - /* depend on the function computations from the previous column in */ - /* the interpolation table, and because the function interpolation */ - /* overwrites the previous column of interpolated function values, */ - /* we must evaluate the derivatives first. */ - - i__1 = *n - 1; - for (i__ = 1; i__ <= i__1; ++i__) { - c1 = xvals[(i__2 = i__)] - *x; - c2 = *x - xvals[(i__2 = i__ - 1)]; - denom = xvals[(i__2 = i__)] - xvals[(i__3 = i__ - 1)]; - - /* The second column of WORK contains interpolated derivative */ - /* values. */ - - /* The odd-indexed interpolated derivatives are simply the input */ - /* derivatives. */ - - prev = (i__ * 2) - 1; - this__ = prev + 1; - next = this__ + 1; - work[(i__2 = prev + (work_dim1 * 2) - work_offset)] = - work[(i__3 = this__ + work_dim1 - work_offset)]; - - /* The even-indexed interpolated derivatives are the slopes of */ - /* the linear interpolating polynomials for adjacent input */ - /* abscissa/ordinate pairs. */ - - work[(i__2 = this__ + (work_dim1 * 2) - work_offset)] = - (work[(i__3 = next + work_dim1 - work_offset)] - - work[(i__4 = prev + work_dim1 - work_offset)]) / - denom; - - /* The first column of WORK contains interpolated function values. */ - /* The odd-indexed entries are the linear Taylor polynomials, */ - /* for each input abscissa value, evaluated at X. */ - - temp = work[(i__2 = this__ + work_dim1 - work_offset)] * - (*x - xvals[(i__3 = i__ - 1)]) + - work[(i__4 = prev + work_dim1 - work_offset)]; - work[(i__2 = this__ + work_dim1 - work_offset)] = - (c1 * work[(i__3 = prev + work_dim1 - work_offset)] + - c2 * work[(i__4 = next + work_dim1 - work_offset)]) / - denom; - work[(i__2 = prev + work_dim1 - work_offset)] = temp; - } - - /* The last column entries were not computed by the preceding loop; */ - /* compute them now. */ - - work[(i__1 = (*n * 2) - 1 + (work_dim1 * 2) - work_offset)] = - work[(i__2 = (*n * 2) + work_dim1 - work_offset)]; - work[(i__1 = (*n * 2) - 1 + work_dim1 - work_offset)] = - work[(i__2 = (*n * 2) + work_dim1 - work_offset)] * - (*x - xvals[(i__3 = *n - 1)]) + - work[(i__4 = (*n * 2) - 1 + work_dim1 - work_offset)]; - - /* Compute columns 3 through 2*N of the table. */ - - i__1 = (*n * 2) - 1; - for (j = 2; j <= i__1; ++j) { - i__2 = (*n * 2) - j; - for (i__ = 1; i__ <= i__2; ++i__) { - - /* In the theoretical construction of the interpolation table, - */ - /* there are 2*N abscissa values, since each input abcissa */ - /* value occurs with multiplicity two. In this theoretical */ - /* construction, the Jth column of the interpolation table */ - /* contains results of evaluating interpolants that span J+1 */ - /* consecutive abscissa values. The indices XI and XIJ below */ - /* are used to pick the correct abscissa values out of the */ - /* physical XVALS array, in which the abscissa values are not */ - /* repeated. */ - - xi = (i__ + 1) / 2; - xij = (i__ + j + 1) / 2; - c1 = xvals[(i__3 = xij - 1)] - *x; - c2 = *x - xvals[(i__3 = xi - 1)]; - denom = xvals[(i__3 = xij - 1)] - xvals[(i__4 = xi - 1)]; - - /* Compute the interpolated derivative at X for the Ith */ - /* interpolant. This is the derivative with respect to X of */ - /* the expression for the interpolated function value, which */ - /* is the second expression below. This derivative computation - */ - /* is done first because it relies on the interpolated */ - /* function values from the previous column of the */ - /* interpolation table. */ - - /* The derivative expression here corresponds to equation */ - /* 2.35 on page 64 in reference [2]. */ - - work[(i__3 = i__ + (work_dim1 * 2) - work_offset)] = - (c1 * work[(i__4 = i__ + (work_dim1 * 2) - work_offset)] + - c2 * work[(i__5 = i__ + 1 + (work_dim1 * 2) - work_offset)] + - (work[(i__6 = i__ + 1 + work_dim1 - work_offset)] - - work[(i__7 = i__ + work_dim1 - work_offset)])) / - denom; - - /* Compute the interpolated function value at X for the Ith */ - /* interpolant. */ - - work[(i__3 = i__ + work_dim1 - work_offset)] = - (c1 * work[(i__4 = i__ + work_dim1 - work_offset)] + - c2 * work[(i__5 = i__ + 1 + work_dim1 - work_offset)]) / - denom; - } - } - - /* Our interpolated function value is sitting in WORK(1,1) at this */ - /* point. The interpolated derivative is located in WORK(1,2). */ - - *f = work[(i__1 = work_dim1 + 1 - work_offset)]; - *df = work[(i__1 = (work_dim1 * 2) + 1 - work_offset)]; - return 0; -} /* hrmint_ */ diff --git a/src/math/polyfit/hrmint.rs b/src/math/polyfit/hrmint.rs index 744ed2f6..4030cba7 100644 --- a/src/math/polyfit/hrmint.rs +++ b/src/math/polyfit/hrmint.rs @@ -1,10 +1,60 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +/* + NOTE: This code is manually transliterated from CSPICE's `hrmint_.c`. + The main difference is that this function takes in the derivatives as a separate input and interlaces + the `work` array as is expected to the done manually in SPICE. This is purely an API design choice for clarity. + The relevant comments (including authors) from hrmint are kept. +*/ /* hrmint.f -- translated by f2c (version 19980913). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ -/* $Procedure HRMINT ( Hermite polynomial interpolation ) */ -/* Subroutine */ +/* $ Restrictions */ + +/* None. */ + +/* $ Literature_References */ + +/* [1] "Numerical Recipes---The Art of Scientific Computing" by */ +/* William H. Press, Brian P. Flannery, Saul A. Teukolsky, */ +/* William T. Vetterling (see sections 3.0 and 3.1). */ + +/* [2] "Elementary Numerical Analysis---An Algorithmic Approach" */ +/* by S. D. Conte and Carl de Boor. See p. 64. */ + +/* $ Author_and_Institution */ + +/* N.J. Bachman (JPL) */ + +/* $ Version */ + +/* - SPICELIB Version 1.2.1, 28-JAN-2014 (NJB) */ + +/* Fixed a few comment typos. */ + +/* - SPICELIB Version 1.2.0, 01-FEB-2002 (NJB) (EDW) */ + +/* Bug fix: declarations of local variables XI and XIJ */ +/* were changed from DOUBLE PRECISION to INTEGER. */ +/* Note: bug had no effect on behavior of this routine. */ + +/* - SPICELIB Version 1.1.0, 28-DEC-2001 (NJB) */ + +/* Blanks following final newline were truncated to */ +/* suppress compilation warnings on the SGI-N32 platform. */ + +/* - SPICELIB Version 1.0.0, 01-MAR-2000 (NJB) */ + pub fn hrmint_(xvals: &[f64], yvals: &[f64], ydotvals: &[f64], x: f64) -> (f64, f64) { let work: &mut [f64] = &mut [0.0; 256]; let n: usize = xvals.len(); @@ -43,34 +93,33 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], ydotvals: &[f64], x: f64) -> (f64, let prev = 2 * i - 1; let curr = 2 * i; - let next = 2 * i + 1; - work[prev + 2 * n - 1] = work[curr - 1]; + work[prev + 2 * n - 1] = work[prev]; /* The even-indexed interpolated derivatives are the slopes of */ /* the linear interpolating polynomials for adjacent input */ /* abscissa/ordinate pairs. */ - work[curr + 2 * n - 1] = (work[next - 1] - work[prev - 1]) / denom; + work[prev + 2 * n] = (work[curr] - work[prev - 1]) / denom; /* The first column of WORK contains interpolated function values. */ /* The odd-indexed entries are the linear Taylor polynomials, */ /* for each input abscissa value, evaluated at X. */ - let temp = work[curr - 1] * (x - xvals[i - 1]) + work[prev - 1]; - work[curr - 1] = (c1 * work[prev - 1] + c2 * work[next - 1]) / denom; + let temp = work[prev] * (x - xvals[i - 1]) + work[prev - 1]; + work[prev] = (c1 * work[prev - 1] + c2 * work[curr]) / denom; work[prev - 1] = temp; } /* The last column entries were not computed by the preceding loop; */ /* compute them now. */ - work[(n * 2) - 1 + 2 * n - 1] = work[(n * 2) - 1]; - work[(n * 2) - 1 - 1] = work[(n * 2) - 1] * (x - xvals[n - 1]) + work[(n * 2) - 1 - 1]; + work[4 * n - 2] = work[(2 * n) - 1]; + work[2 * (n - 1)] = work[(2 * n) - 1] * (x - xvals[n - 1]) + work[2 * (n - 1)]; /* Compute columns 3 through 2*N of the table. */ - for j in 2..=(n * 2) - 1 { - for i in 1..=(n * 2) - j { + for j in 2..=(2 * n) - 1 { + for i in 1..=(2 * n) - j { /* In the theoretical construction of the interpolation table, */ /* there are 2*N abscissa values, since each input abcissa */ @@ -100,10 +149,8 @@ pub fn hrmint_(xvals: &[f64], yvals: &[f64], ydotvals: &[f64], x: f64) -> (f64, /* The derivative expression here corresponds to equation */ /* 2.35 on page 64 in reference [2]. */ - work[i + 2 * n - 1] = (c1 * work[i + 2 * n - 1] - + c2 * work[i + 1 + 2 * n - 1] - + (work[i + 1 - 1] - work[i - 1])) - / denom; + work[i + 2 * n - 1] = + (c1 * work[i + 2 * n - 1] + c2 * work[i + 2 * n] + (work[i] - work[i - 1])) / denom; /* Compute the interpolated function value at X for the Ith */ /* interpolant. */ From 1991ba25930ff265842499aabcec01ac4c8a3119 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sun, 27 Nov 2022 16:50:24 -0700 Subject: [PATCH 32/48] Almost done cleaning up Signed-off-by: Christopher Rabotin --- .github/workflows/tests.yml | 6 - src/errors.rs | 2 +- src/math/polyfit/common.rs | 211 ----------- src/math/polyfit/hermite.rs | 574 ++++++++++-------------------- src/math/polyfit/hrmint.rs | 168 --------- src/math/polyfit/mod.rs | 12 +- src/math/polyfit/polynomial.rs | 377 -------------------- src/naif/spk/datatypes/hermite.rs | 43 +-- tests/ephemerides/translation.rs | 10 +- 9 files changed, 203 insertions(+), 1200 deletions(-) delete mode 100644 src/math/polyfit/common.rs delete mode 100644 src/math/polyfit/hrmint.rs delete mode 100644 src/math/polyfit/polynomial.rs diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d855a8c8..ee3f5d1f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -61,12 +61,6 @@ jobs: - name: Test (no default features and release) run: cargo test --no-default-features --release - - name: Create DE ANISE artifacts # At this stage, all of the tests have passed, so let's store these artifacts - uses: actions/upload-artifact@v3 - with: - name: anise-jpl-development-ephemerides - path: data/*.anise - lints: name: Lints runs-on: ubuntu-latest diff --git a/src/errors.rs b/src/errors.rs index 9d7e5e8f..b11a35ff 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -94,7 +94,7 @@ pub enum MathErrorKind { DivisionByZero, StateEpochsDiffer, StateFramesDiffer, - InvalidInterpolationData(String), + InvalidInterpolationData, PolynomialOrderError(usize), } diff --git a/src/math/polyfit/common.rs b/src/math/polyfit/common.rs deleted file mode 100644 index e9cc30f4..00000000 --- a/src/math/polyfit/common.rs +++ /dev/null @@ -1,211 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use super::Polynomial; -use crate::errors::MathErrorKind; -use core::fmt; - -#[derive(Debug, Copy, Clone, PartialEq)] -pub enum CommonPolynomial { - Constant(f64), - /// Linear(a, b) <=> f(x) = ax + b (order is FLIPPED from Polynomial structure) - Linear(f64, f64), - /// Quadratic(a, b, c) <=> f(x) = ax^2 + bx + c (order is FLIPPED from Polynomial structure) - Quadratic(f64, f64, f64), -} - -impl CommonPolynomial { - pub fn eval(&self, x: f64) -> f64 { - match *self { - Self::Constant(a) => Polynomial::<1> { coefficients: [a] }.eval(x), - Self::Linear(a, b) => Polynomial::<2> { - coefficients: [b, a], - } - .eval(x), - Self::Quadratic(a, b, c) => Polynomial::<3> { - coefficients: [c, b, a], - } - .eval(x), - } - } - - pub fn deriv(&self, x: f64) -> f64 { - match *self { - Self::Constant(a) => Polynomial::<1> { coefficients: [a] }.deriv(x), - Self::Linear(a, b) => Polynomial::<2> { - coefficients: [b, a], - } - .deriv(x), - Self::Quadratic(a, b, c) => Polynomial::<3> { - coefficients: [c, b, a], - } - .deriv(x), - } - } - - pub fn coeff_in_order(&self, order: usize) -> Result { - match *self { - Self::Constant(a) => { - if order == 0 { - Ok(a) - } else { - Err(MathErrorKind::PolynomialOrderError(order)) - } - } - Self::Linear(a, b) => match order { - 0 => Ok(b), - 1 => Ok(a), - _ => Err(MathErrorKind::PolynomialOrderError(order)), - }, - Self::Quadratic(a, b, c) => match order { - 0 => Ok(c), - 1 => Ok(b), - 2 => Ok(a), - _ => Err(MathErrorKind::PolynomialOrderError(order)), - }, - } - } - - pub fn with_val_in_order(self, new_val: f64, order: usize) -> Result { - match self { - Self::Constant(_) => { - if order != 0 { - Err(MathErrorKind::PolynomialOrderError(order)) - } else { - Ok(Self::Constant(new_val)) - } - } - Self::Linear(x, y) => match order { - 0 => Ok(Self::Linear(new_val, y)), - 1 => Ok(Self::Linear(x, new_val)), - _ => Err(MathErrorKind::PolynomialOrderError(order)), - }, - Self::Quadratic(x, y, z) => match order { - 0 => Ok(Self::Quadratic(new_val, y, z)), - 1 => Ok(Self::Quadratic(x, new_val, z)), - 2 => Ok(Self::Quadratic(x, y, new_val)), - _ => Err(MathErrorKind::PolynomialOrderError(order)), - }, - } - } - - pub fn add_val_in_order(self, new_val: f64, order: usize) -> Result { - match self { - Self::Constant(x) => { - if order != 0 { - Err(MathErrorKind::PolynomialOrderError(order)) - } else { - Ok(Self::Constant(new_val + x)) - } - } - Self::Linear(x, y) => match order { - 0 => Ok(Self::Linear(new_val + x, y)), - 1 => Ok(Self::Linear(x, new_val + y)), - _ => Err(MathErrorKind::PolynomialOrderError(order)), - }, - Self::Quadratic(x, y, z) => match order { - 0 => Ok(Self::Quadratic(new_val + x, y, z)), - 1 => Ok(Self::Quadratic(x, new_val + y, z)), - 2 => Ok(Self::Quadratic(x, y, new_val + z)), - _ => Err(MathErrorKind::PolynomialOrderError(order)), - }, - } - } -} - -impl fmt::Display for CommonPolynomial { - /// Prints the polynomial with the least significant coefficients first - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match *self { - Self::Constant(a) => write!(f, "{}", Polynomial::<1> { coefficients: [a] }), - Self::Linear(a, b) => write!( - f, - "{}", - Polynomial::<2> { - coefficients: [b, a], - } - ), - Self::Quadratic(a, b, c) => write!( - f, - "{}", - Polynomial::<3> { - coefficients: [c, b, a], - } - ), - } - } -} - -#[test] -fn poly_constant() { - let c = CommonPolynomial::Constant(10.0); - for i in -100..=100 { - assert!( - (c.eval(i as f64) - 10.0).abs() < 2e-16, - "Constant polynomial returned wrong value" - ); - } -} - -#[test] -fn poly_linear() { - let c = CommonPolynomial::Linear(2.0, 10.0); - for i in -100..=100 { - let x = i as f64; - let expect = 2.0 * x + 10.0; - assert!( - (c.eval(x) - expect).abs() < 2e-16, - "Constant polynomial returned wrong value" - ); - } -} - -#[test] -fn poly_quadratic() { - let p = Polynomial { - coefficients: [101.0, -2.0, 3.0], - }; - let p2 = 2.0 * p; - let c = CommonPolynomial::Quadratic(3.0, -2.0, 101.0); - for i in -100..=100 { - let x = i as f64; - let expect = 3.0 * x.powi(2) - 2.0 * x + 101.0; - let expect_deriv = 6.0 * x - 2.0; - assert!( - (c.eval(x) - expect).abs() < 2e-16, - "Polynomial returned wrong value" - ); - assert!( - (p.deriv(x) - expect_deriv).abs() < 2e-16, - "Polynomial derivative returned wrong value" - ); - - assert!( - (p.eval(x) - expect).abs() < 2e-16, - "Polynomial returned wrong value" - ); - assert!( - (p2.eval(x) - 2.0 * expect).abs() < 2e-16, - "Polynomial returned wrong value" - ); - } -} - -#[test] -fn poly_print() { - let p = Polynomial { - coefficients: [101.0, -2.0, 3.0], - }; - println!("{}", p); - assert_eq!( - format!("{}", p), - format!("{}", CommonPolynomial::Quadratic(3.0, -2.0, 101.0)) - ); -} diff --git a/src/math/polyfit/hermite.rs b/src/math/polyfit/hermite.rs index a49b609f..ea9f121b 100644 --- a/src/math/polyfit/hermite.rs +++ b/src/math/polyfit/hermite.rs @@ -1,413 +1,227 @@ /* - Nyx, blazing fast astrodynamics - Copyright (C) 2022 Christopher Rabotin - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. +/* + NOTES: + 1. This code is manually transliterated from CSPICE's `hrmint_.c`. + The main difference is that this function takes in the derivatives as a separate input and interlaces + the `work` array as is expected to the done manually in SPICE. This is purely an API design choice for clarity. + 2. The relevant comments (including authors) from hrmint are kept. + 3. The tests are not part of the original SPICE code. + 4. The transliteration in itself justifies the change of license from unrestricted to MPL. - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . +*/ +/* hrmint.f -- translated by f2c (version 19980913). + You must link the resulting object file with the libraries: + -lf2c -lm (in that order) */ -/* - * SOURCES: - * 1. bacon-sci, MIT licensed, Copyright (c) Wyatt Campbell. - * 2. Nyx, AGPL v3 license, copied here with permission of redistribution under Mozilla Public License by Chris Rabotin. - */ - -use crate::errors::MathErrorKind; -use crate::math::polyfit::hrmint::hrmint_; -use crate::math::polyfit::{F64TupleArray, MAX_SAMPLES}; -use crate::math::utils::normalize; -use crate::{ - math::polyfit::polynomial::{multiply, Polynomial}, - prelude::AniseError, -}; -use log::warn; - -const Q_LENGTH: usize = MAX_SAMPLES * MAX_SAMPLES; - -impl Polynomial { - pub fn hermite(xs: &[f64], ys: &[f64], derivs: &[f64]) -> Result { - if xs.is_empty() || ys.is_empty() || derivs.is_empty() { - return Err(AniseError::MathError( - MathErrorKind::InvalidInterpolationData("No data to interpolate".to_string()), - )); - } +/* $ Restrictions */ - if xs.len() != ys.len() || xs.len() != derivs.len() { - return Err(AniseError::MathError( - MathErrorKind::InvalidInterpolationData( - "Abscissa, evaluations, and derivatives must be of the same size".to_string(), - ), - )); - } +/* None. */ - // We need to define the number of samples here because when parsing the data from DAF files, we actually do not know the length. - // Therefore, we can't specify in the parameters that length (compiler complains that `&[f64]` is different from `&[f64; N]`). +/* $ Literature_References */ - if DEGREE < 2 * xs.len() - 1 { - warn!( - "Building Hermite interpolation of degree {} with {} samples, {} degree recommended", - DEGREE, - xs.len(), - 2 * xs.len()- 1 - ); - } +/* [1] "Numerical Recipes---The Art of Scientific Computing" by */ +/* William H. Press, Brian P. Flannery, Saul A. Teukolsky, */ +/* William T. Vetterling (see sections 3.0 and 3.1). */ - let mut zs = F64TupleArray::<2, MAX_SAMPLES>::zeros(); - let mut qs = F64TupleArray::<4, Q_LENGTH>::zeros(); - for i in 0..xs.len() { - zs[2 * i] = xs[i]; - zs[2 * i + 1] = xs[i]; - qs[2 * i] = ys[i]; - qs[2 * i + 1] = ys[i]; - qs[2 * i + 1 + (2 * xs.len())] = derivs[i]; - - if i != 0 { - qs[2 * i + (2 * xs.len())] = - (qs[2 * i] - qs[2 * i - 1]) / (zs[2 * i] - zs[2 * i - 1]); - } - } +/* [2] "Elementary Numerical Analysis---An Algorithmic Approach" */ +/* by S. D. Conte and Carl de Boor. See p. 64. */ - for i in 2..2 * xs.len() { - for j in 2..=i { - qs[i + j * (2 * xs.len())] = (qs[i + (j - 1) * (2 * xs.len())] - - qs[i - 1 + (j - 1) * (2 * xs.len())]) - / (zs[i] - zs[i - j]); - } - } +/* $ Author_and_Institution */ - let mut hermite = Polynomial::::zeros(); - for i in (1..2 * xs.len()).rev() { - hermite += qs[dbg!(i + i * (2 * xs.len()))]; - let new_poly = Polynomial::<2>::from_most_significant([1.0, -xs[(i - 1) / 2]]); - hermite = multiply::(hermite, new_poly); - } - hermite += qs[0]; - - if hermite.is_nan() { - return Err(AniseError::MathError( - MathErrorKind::InvalidInterpolationData(format!( - "Invalid interpolation {:x}", - hermite - )), - )); - } +/* N.J. Bachman (JPL) */ - Ok(hermite) - } -} +/* $ Version */ -/// Stores a Hermite series -pub struct HermiteSeries { - coefficients: [f64; N], -} +/* - SPICELIB Version 1.2.1, 28-JAN-2014 (NJB) */ -impl HermiteSeries { - /// Convert a Hermite series to a Polynomial - pub fn to_polynomial(&self) -> Polynomial { - let mut rtn = Polynomial { - coefficients: self.coefficients, - }; - if N == 1 { - // Do nothing more - return rtn; - } else if N == 2 { - rtn.coefficients[1] *= 2.0; - } else { - let mut c0 = Polynomial::::zeros(); - let mut c1 = Polynomial::::zeros(); - c0.coefficients[0] = self.coefficients[self.coefficients.len() - 2]; - c1.coefficients[0] = self.coefficients[self.coefficients.len() - 1]; - - for i in (2..self.coefficients.len()).rev() { - let tmp = c0; - let mut c_im2 = Polynomial::::zeros(); - c_im2.coefficients[0] = self.coefficients[i - 2]; - c0 = c_im2 - c1 * (2 * (i - 1)) as f64; - c1.shift_by_one(); - c1 = tmp + 2.0 * c1; - } - c1.shift_by_one(); - rtn = c0 + 2.0 * c1; - } - rtn - } -} +/* Fixed a few comment typos. */ -#[test] -fn hermite_sine_test() { - use super::MAX_DEGREE; - let xs: Vec<_> = (0..8).map(|i| i as f64).collect(); - let ys: Vec<_> = xs.iter().map(|x| x.cos()).collect(); - let derivs: Vec<_> = xs.iter().map(|x| -x.sin()).collect(); +/* - SPICELIB Version 1.2.0, 01-FEB-2002 (NJB) (EDW) */ - let tol = 1e-10; - let poly = Polynomial::::hermite(&xs, &ys, &derivs).unwrap(); +/* Bug fix: declarations of local variables XI and XIJ */ +/* were changed from DOUBLE PRECISION to INTEGER. */ +/* Note: bug had no effect on behavior of this routine. */ - println!("{:x}", poly); +/* - SPICELIB Version 1.1.0, 28-DEC-2001 (NJB) */ - let mut max_eval_err: f64 = 0.0; - let mut max_deriv_err: f64 = 0.0; +/* Blanks following final newline were truncated to */ +/* suppress compilation warnings on the SGI-N32 platform. */ - for x in xs { - let (eval, deriv) = poly.eval_n_deriv(x); - let eval_err = (eval - x.cos()).abs(); - assert!(eval_err < tol); - max_eval_err = max_eval_err.max(eval_err); +/* - SPICELIB Version 1.0.0, 01-MAR-2000 (NJB) */ - let deriv_err = (deriv - -x.sin()).abs(); - assert!(deriv_err < tol); - max_deriv_err = max_eval_err.max(eval_err); +use crate::errors::MathErrorKind; +use log::error; + +use super::MAX_SAMPLES; + +/// From the abscissas (xs), the ordinates (ys), and the first derivatives (ydots), build the Hermite interpolation of the function and evaluate it at the requested abscissa (x). +/// +/// # Runtime verifications +/// 1. Ensure that all provided arrays are of the same size. +/// 2. Ensure that there are no more than 32 items to interpolate. +/// 3. Ensure no division by zero errors (zero is set to core::f64::EPSILON, which is about 2e-16). +pub fn hermite( + xs: &[f64], + ys: &[f64], + ydots: &[f64], + x_eval: f64, +) -> Result<(f64, f64), MathErrorKind> { + if xs.len() != ys.len() || xs.len() != ydots.len() { + error!("Abscissas (xs), ordinates (ys), and first derivatives (ydots) must contain the same number of items, but they are of lengths {}, {}, and {}", xs.len(), ys.len(), ydots.len()); + return Err(MathErrorKind::InvalidInterpolationData); + } else if xs.is_empty() { + error!("No interpolation data provided"); + return Err(MathErrorKind::InvalidInterpolationData); + } else if xs.len() > MAX_SAMPLES { + error!("More than {MAX_SAMPLES} samples provided, which is the maximum number of items allowed for a Hermite interpolation"); + return Err(MathErrorKind::InvalidInterpolationData); } - println!( - "Max eval error: {:.e}\tMax deriv error: {:.e}\t", - max_eval_err, max_deriv_err - ); -} - -#[test] -fn hermite_constant_test() { - use crate::math::polyfit::LargestPolynomial; - let xs: Vec<_> = (0..8).map(|i| i as f64).collect(); - let ys: Vec<_> = xs.iter().map(|_| 2.0159).collect(); - let derivs: Vec<_> = xs.iter().map(|_| 0.0).collect(); - - let tol = 1e-10; - let poly = LargestPolynomial::hermite(&xs, &ys, &derivs).unwrap(); - - println!("{:x}", poly); + // At this point, we know that the lengths of items is correct, so we can directly address them without worry for overflowing the array. - let mut max_eval_err: f64 = 0.0; - let mut max_deriv_err: f64 = 0.0; + let work: &mut [f64] = &mut [0.0; 256]; + let n: usize = xs.len(); - for x in xs { - let (eval, deriv) = poly.eval_n_deriv(x); - let eval_err = (eval - 2.0159).abs(); - assert!(eval_err < tol); - max_eval_err = max_eval_err.max(eval_err); + /* Copy the input array into WORK. After this, the first column */ + /* of WORK represents the first column of our triangular */ + /* interpolation table. */ - let deriv_err = (deriv).abs(); - assert!(deriv_err < tol); - max_deriv_err = max_eval_err.max(eval_err); + for i in 0..n { + work[2 * i] = ys[i]; + work[2 * i + 1] = ydots[i]; } - println!( - "Max eval error: {:.e}\tMax deriv error: {:.e}\t", - max_eval_err, max_deriv_err - ); -} + /* Compute the second column of the interpolation table: this */ + /* consists of the N-1 values obtained by evaluating the */ + /* first-degree interpolants at X. We'll also evaluate the */ + /* derivatives of these interpolants at X and save the results in */ + /* the second column of WORK. Because the derivative computations */ + /* depend on the function computations from the previous column in */ + /* the interpolation table, and because the function interpolation */ + /* overwrites the previous column of interpolated function values, */ + /* we must evaluate the derivatives first. */ -#[test] -fn hermite_ephem_spline_test() { - use super::MAX_DEGREE; - let ts = [ - -1.0, - -0.7142321608948587, - -0.4284548929983568, - -0.14272281352821248, - 0.1430009063036013, - 0.4286973024022658, - 0.714367019041751, - 1.0, - ]; - let values = [ - -1200.6957374089038, - -1649.3350718512218, - -2088.1291193578113, - -2514.3714789070427, - -2925.5702772667646, - -3319.240151300038, - -3693.030156393982, - -4044.695271513933, - ]; - let values_dt = [ - -5.450221271198159, - -5.3475633589540585, - -5.212915678573803, - -5.0471031201910135, - -4.851091887968967, - -4.626059429784994, - -4.373345524123602, - -4.094465775216765, - ]; + for i in 1..=n - 1 { + let c1 = xs[i] - x_eval; + let c2 = x_eval - xs[i - 1]; + let denom = xs[i] - xs[i - 1]; - let tol = 2e-7; - let tol_deriv = 3e-6; - let poly = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); + /* The second column of WORK contains interpolated derivative */ + /* values. */ - println!("{:x}", poly); + /* The odd-indexed interpolated derivatives are simply the input */ + /* derivatives. */ - let mut max_eval_err: f64 = 0.0; - let mut max_deriv_err: f64 = 0.0; + let prev = 2 * i - 1; + let curr = 2 * i; + work[prev + 2 * n - 1] = work[prev]; - for (i, t) in ts.iter().enumerate() { - let (eval, deriv) = poly.eval_n_deriv(*t); - let eval_err = (eval - values[i]).abs(); - assert!(dbg!(eval_err) < tol); - max_eval_err = max_eval_err.max(eval_err); - - let deriv_err = (deriv - values_dt[i]).abs(); - assert!(dbg!(deriv_err) < tol_deriv); - max_deriv_err = max_deriv_err.max(deriv_err); - } + /* The even-indexed interpolated derivatives are the slopes of */ + /* the linear interpolating polynomials for adjacent input */ + /* abscissa/ordinate pairs. */ - println!( - "Max eval error: {:.e}\tMax deriv error: {:.e}\t", - max_eval_err, max_deriv_err - ); -} + work[prev + 2 * n] = (work[curr] - work[prev - 1]) / denom; -#[test] -fn hermite_duplication_test() { - use super::MAX_DEGREE; - let ts = [-1.0, 0.0, 1.0]; - let values = [239213.98224426163, 239342.1452415863, 239492.31122918683]; - let values_dt = [5.856883346456119, 1259.7108315572618, 737.5474327513627]; - - let tol = 2e-16; - let tol_deriv = 1e-11; - let poly = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); + /* The first column of WORK contains interpolated function values. */ + /* The odd-indexed entries are the linear Taylor polynomials, */ + /* for each input abscissa value, evaluated at X. */ - println!("{:x}", poly); - - let mut max_eval_err: f64 = 0.0; - let mut max_deriv_err: f64 = 0.0; + let temp = work[prev] * (x_eval - xs[i - 1]) + work[prev - 1]; + work[prev] = (c1 * work[prev - 1] + c2 * work[curr]) / denom; + work[prev - 1] = temp; + } - for (i, t) in ts.iter().enumerate() { - let (eval, deriv) = poly.eval_n_deriv(*t); - let eval_err = (eval - values[i]).abs(); - assert!(dbg!(eval_err) < tol); - max_eval_err = max_eval_err.max(eval_err); - - let deriv_err = (deriv - values_dt[i]).abs(); - assert!(dbg!(deriv_err) < tol_deriv); - max_deriv_err = max_deriv_err.max(deriv_err); + /* The last column entries were not computed by the preceding loop; */ + /* compute them now. */ + + work[4 * n - 2] = work[(2 * n) - 1]; + work[2 * (n - 1)] = work[(2 * n) - 1] * (x_eval - xs[n - 1]) + work[2 * (n - 1)]; + + /* Compute columns 3 through 2*N of the table. */ + + for j in 2..=(2 * n) - 1 { + for i in 1..=(2 * n) - j { + /* In the theoretical construction of the interpolation table, + */ + /* there are 2*N abscissa values, since each input abcissa */ + /* value occurs with multiplicity two. In this theoretical */ + /* construction, the Jth column of the interpolation table */ + /* contains results of evaluating interpolants that span J+1 */ + /* consecutive abscissa values. The indices XI and XIJ below */ + /* are used to pick the correct abscissa values out of the */ + /* physical XVALS array, in which the abscissa values are not */ + /* repeated. */ + + let xi = (i + 1) / 2; + let xij = (i + j + 1) / 2; + let c1 = xs[xij - 1] - x_eval; + let c2 = x_eval - xs[xi - 1]; + let denom = xs[xij - 1] - xs[xi - 1]; + + /* Compute the interpolated derivative at X for the Ith */ + /* interpolant. This is the derivative with respect to X of */ + /* the expression for the interpolated function value, which */ + /* is the second expression below. This derivative computation + */ + /* is done first because it relies on the interpolated */ + /* function values from the previous column of the */ + /* interpolation table. */ + + /* The derivative expression here corresponds to equation */ + /* 2.35 on page 64 in reference [2]. */ + + work[i + 2 * n - 1] = + (c1 * work[i + 2 * n - 1] + c2 * work[i + 2 * n] + (work[i] - work[i - 1])) / denom; + + /* Compute the interpolated function value at X for the Ith */ + /* interpolant. */ + + work[i - 1] = (c1 * work[i - 1] + c2 * work[i]) / denom; + } } - println!( - "Max eval error: {:.e}\tMax deriv error: {:.e}\t", - max_eval_err, max_deriv_err - ); -} + /* Our interpolated function value is sitting in WORK(1,1) at this */ + /* point. The interpolated derivative is located in WORK(1,2). */ -#[test] -fn herm2poly() { - let series = HermiteSeries { - coefficients: [ - -364.319505276875, - -230.472812950625, - -817.857413263125, - -134.8289486859375, - -229.266493323125, - -15.82103409828125, - -17.08533955890625, - -0.443532253984375, - -0.3394307234765625, - ], - }; - let expected = Polynomial { - coefficients: [ - 0.1945330000000354, - 3.61185323000015, - -6.133532429999718, - -37.53450715000004, - -29.24982842000058, - 89.83425820999997, - 123.0579811700001, - -56.77212851, - -86.89426521, - ], - }; - let poly = series.to_polynomial(); - println!("{}", poly); - println!("{}", expected); - let delta = poly - expected; - println!("DELTA = {}", delta); - for c in delta.coefficients { - assert!(c.abs() < 1e-10); - } + let f = work[0]; + let df = work[2 * n]; + Ok((f, df)) } #[test] fn hermite_spice_docs_example() { - use super::MAX_DEGREE; + use core::f64::EPSILON; let ts = [-1.0, 0.0, 3.0, 5.0]; - let values = [6.0, 5.0, 2210.0, 78180.0]; - let values_dt = [3.0, 0.0, 5115.0, 109395.0]; - - let tol = 2e-7; - let tol_deriv = 3e-6; - let poly = Polynomial::::hermite(&ts, &values, &values_dt).unwrap(); - - println!("{:x}", poly); - - let mut max_eval_err: f64 = 0.0; - let mut max_deriv_err: f64 = 0.0; + let yvals = [6.0, 5.0, 2210.0, 78180.0]; + let ydotvals = [3.0, 0.0, 5115.0, 109395.0]; + // Check that we can interpolate the values exactly. for (i, t) in ts.iter().enumerate() { - let (eval, deriv) = poly.eval_n_deriv(*t); - let eval_err = (eval - values[i]).abs(); - assert!(dbg!(eval_err) < tol); - max_eval_err = max_eval_err.max(eval_err); - - let deriv_err = (deriv - values_dt[i]).abs(); - assert!(dbg!(deriv_err) < tol_deriv); - max_deriv_err = max_deriv_err.max(deriv_err); - } + let (eval, deriv) = hermite(&ts, &yvals, &ydotvals, *t).unwrap(); + let eval_err = (eval - yvals[i]).abs(); + assert!(eval_err < EPSILON, "f(x) error is {eval_err:e}"); - println!( - "Max eval error: {:.e}\tMax deriv error: {:.e}\t", - max_eval_err, max_deriv_err - ); + let deriv_err = (deriv - ydotvals[i]).abs(); + assert!(deriv_err < EPSILON, "f'(x) error is {deriv_err:e}"); + } - println!("{:?}", poly.eval_n_deriv(2.0)); + // Check the interpolation from the SPICE documentation + let (x, vx) = hermite(&ts, &yvals, &ydotvals, 2.0).unwrap(); - // let yvals = [6.0, 3.0, 5.0, 0.0, 2210.0, 5115.0, 78180.0, 109395.0]; - let yvals = [6.0, 5.0, 2210.0, 78180.0]; - let ydotvals = [3.0, 0.0, 5115.0, 109395.0]; - let (x, vx) = hrmint_(&ts, &yvals, &ydotvals, 2.0); - println!("{x:e}\t{vx:e}"); - use core::f64::EPSILON; assert!((x - 141.0).abs() < EPSILON, "X error"); assert!((vx - 456.0).abs() < EPSILON, "VX error"); } -#[test] -fn hermite_spice_data() { - use super::MAX_DEGREE; - use crate::file_mmap; - use crate::naif::daf::NAIFDataSet; - use crate::naif::spk::datatypes::Type2ChebyshevSet; - use crate::prelude::*; - // "Load" the file via a memory map (avoids allocations) - let path = "./data/de438s.bsp"; - let buf = file_mmap!(path).unwrap(); - let spk = SPK::parse(&buf).unwrap(); - let ctx = Context::from_spk(&spk).unwrap(); - - let data = ctx.spk_data[0] - .unwrap() - .nth_data::(0) - .unwrap(); - - // Now, build the X, Y, Z data from the record data. - let record = data.nth_record(0).unwrap(); - - let poly = Polynomial::::hermite(record.z_coeffs, record.x_coeffs, record.y_coeffs) - .unwrap(); - println!("{poly}"); -} - #[test] fn hermite_ephem_spline_test2() { let epoch_et = 773064069.1841084; @@ -422,7 +236,6 @@ fn hermite_ephem_spline_test2() { 773064379.5660326, 773064467.8020325, ]; - let mut ts = [0.0; 9]; let values = [ 1264.0276092333008, 1169.380111723055, @@ -452,44 +265,25 @@ fn hermite_ephem_spline_test2() { let start_idx = central_idx - (samples - 1) / 2 - 1; let end_idx = central_idx + (samples - 1) / 2 + 1; - let first_sample_epoch_et_s = epochs[start_idx]; - let last_sample_epoch_et_s = epochs[end_idx]; - - // let yvals = [ - // 1264.0276092333008, - // -1.0119972729331588, - // 1169.380111723055, - // -1.0982621220038147, - // 1067.501355281949, - // -1.1773202325269372, - // 958.9770086109238, - // -1.248793644639029, - // 844.4072328473662, - // -1.3123304769876323, - // 724.4430188794065, - // -1.3675873394086253, - // 599.8186349004518, - // -1.414230273831576, - // 471.46623936222625, - // -1.4519274117465721, - // 342.04349989730264, - // -1.4801351852184736, - // ]; - - let (x, vx) = hrmint_( + let (x, vx) = hermite( &epochs[start_idx..end_idx + 1], &values[start_idx..end_idx + 1], &values_dt[start_idx..end_idx + 1], epoch_et, - ); + ) + .unwrap(); let want_x = 8.9871033515359500e+02; let want_vx = -1.2836208430532707e+00; - dbg!(x, vx); - - println!("{:e} km\t{:e} km/s", x - want_x, vx - want_vx); - - assert!((x - want_x).abs() < 1e-8, "Error in X"); - assert!((vx - want_vx).abs() < 1e-10, "Error in VX"); + assert!( + (x - want_x).abs() < 1e-8, + "Error in X of {} km", + (x - want_x).abs() + ); + assert!( + (vx - want_vx).abs() < 1e-10, + "Error in VX of {} km/s", + (vx - want_vx).abs() + ); } diff --git a/src/math/polyfit/hrmint.rs b/src/math/polyfit/hrmint.rs deleted file mode 100644 index 4030cba7..00000000 --- a/src/math/polyfit/hrmint.rs +++ /dev/null @@ -1,168 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -/* - NOTE: This code is manually transliterated from CSPICE's `hrmint_.c`. - The main difference is that this function takes in the derivatives as a separate input and interlaces - the `work` array as is expected to the done manually in SPICE. This is purely an API design choice for clarity. - The relevant comments (including authors) from hrmint are kept. -*/ -/* hrmint.f -- translated by f2c (version 19980913). - You must link the resulting object file with the libraries: - -lf2c -lm (in that order) -*/ - -/* $ Restrictions */ - -/* None. */ - -/* $ Literature_References */ - -/* [1] "Numerical Recipes---The Art of Scientific Computing" by */ -/* William H. Press, Brian P. Flannery, Saul A. Teukolsky, */ -/* William T. Vetterling (see sections 3.0 and 3.1). */ - -/* [2] "Elementary Numerical Analysis---An Algorithmic Approach" */ -/* by S. D. Conte and Carl de Boor. See p. 64. */ - -/* $ Author_and_Institution */ - -/* N.J. Bachman (JPL) */ - -/* $ Version */ - -/* - SPICELIB Version 1.2.1, 28-JAN-2014 (NJB) */ - -/* Fixed a few comment typos. */ - -/* - SPICELIB Version 1.2.0, 01-FEB-2002 (NJB) (EDW) */ - -/* Bug fix: declarations of local variables XI and XIJ */ -/* were changed from DOUBLE PRECISION to INTEGER. */ -/* Note: bug had no effect on behavior of this routine. */ - -/* - SPICELIB Version 1.1.0, 28-DEC-2001 (NJB) */ - -/* Blanks following final newline were truncated to */ -/* suppress compilation warnings on the SGI-N32 platform. */ - -/* - SPICELIB Version 1.0.0, 01-MAR-2000 (NJB) */ - -pub fn hrmint_(xvals: &[f64], yvals: &[f64], ydotvals: &[f64], x: f64) -> (f64, f64) { - let work: &mut [f64] = &mut [0.0; 256]; - let n: usize = xvals.len(); - - assert!(n > 1); - - /* Copy the input array into WORK. After this, the first column */ - /* of WORK represents the first column of our triangular */ - /* interpolation table. */ - - for i in 0..n { - work[2 * i] = yvals[i]; - work[2 * i + 1] = ydotvals[i]; - } - - /* Compute the second column of the interpolation table: this */ - /* consists of the N-1 values obtained by evaluating the */ - /* first-degree interpolants at X. We'll also evaluate the */ - /* derivatives of these interpolants at X and save the results in */ - /* the second column of WORK. Because the derivative computations */ - /* depend on the function computations from the previous column in */ - /* the interpolation table, and because the function interpolation */ - /* overwrites the previous column of interpolated function values, */ - /* we must evaluate the derivatives first. */ - - for i in 1..=n - 1 { - let c1 = xvals[i] - x; - let c2 = x - xvals[i - 1]; - let denom = xvals[i] - xvals[i - 1]; - - /* The second column of WORK contains interpolated derivative */ - /* values. */ - - /* The odd-indexed interpolated derivatives are simply the input */ - /* derivatives. */ - - let prev = 2 * i - 1; - let curr = 2 * i; - work[prev + 2 * n - 1] = work[prev]; - - /* The even-indexed interpolated derivatives are the slopes of */ - /* the linear interpolating polynomials for adjacent input */ - /* abscissa/ordinate pairs. */ - - work[prev + 2 * n] = (work[curr] - work[prev - 1]) / denom; - - /* The first column of WORK contains interpolated function values. */ - /* The odd-indexed entries are the linear Taylor polynomials, */ - /* for each input abscissa value, evaluated at X. */ - - let temp = work[prev] * (x - xvals[i - 1]) + work[prev - 1]; - work[prev] = (c1 * work[prev - 1] + c2 * work[curr]) / denom; - work[prev - 1] = temp; - } - - /* The last column entries were not computed by the preceding loop; */ - /* compute them now. */ - - work[4 * n - 2] = work[(2 * n) - 1]; - work[2 * (n - 1)] = work[(2 * n) - 1] * (x - xvals[n - 1]) + work[2 * (n - 1)]; - - /* Compute columns 3 through 2*N of the table. */ - - for j in 2..=(2 * n) - 1 { - for i in 1..=(2 * n) - j { - /* In the theoretical construction of the interpolation table, - */ - /* there are 2*N abscissa values, since each input abcissa */ - /* value occurs with multiplicity two. In this theoretical */ - /* construction, the Jth column of the interpolation table */ - /* contains results of evaluating interpolants that span J+1 */ - /* consecutive abscissa values. The indices XI and XIJ below */ - /* are used to pick the correct abscissa values out of the */ - /* physical XVALS array, in which the abscissa values are not */ - /* repeated. */ - - let xi = (i + 1) / 2; - let xij = (i + j + 1) / 2; - let c1 = xvals[xij - 1] - x; - let c2 = x - xvals[xi - 1]; - let denom = xvals[xij - 1] - xvals[xi - 1]; - - /* Compute the interpolated derivative at X for the Ith */ - /* interpolant. This is the derivative with respect to X of */ - /* the expression for the interpolated function value, which */ - /* is the second expression below. This derivative computation - */ - /* is done first because it relies on the interpolated */ - /* function values from the previous column of the */ - /* interpolation table. */ - - /* The derivative expression here corresponds to equation */ - /* 2.35 on page 64 in reference [2]. */ - - work[i + 2 * n - 1] = - (c1 * work[i + 2 * n - 1] + c2 * work[i + 2 * n] + (work[i] - work[i - 1])) / denom; - - /* Compute the interpolated function value at X for the Ith */ - /* interpolant. */ - - work[i - 1] = (c1 * work[i - 1] + c2 * work[i]) / denom; - } - } - - /* Our interpolated function value is sitting in WORK(1,1) at this */ - /* point. The interpolated derivative is located in WORK(1,2). */ - - let f = work[0]; - let df = work[2 * n]; - (f, df) -} /* hrmint_ */ diff --git a/src/math/polyfit/mod.rs b/src/math/polyfit/mod.rs index b411c0c5..358db25a 100644 --- a/src/math/polyfit/mod.rs +++ b/src/math/polyfit/mod.rs @@ -8,19 +8,13 @@ * Documentation: https://nyxspace.com/ */ -mod common; -pub mod hermite; -mod polynomial; +mod hermite; -pub mod hrmint; - -pub use common::CommonPolynomial; -pub use polynomial::{LargestPolynomial, Polynomial}; +pub use hermite::hermite; /// Defines the maximum degree for an interpolation. /// Until https://github.com/rust-lang/rust/issues/60551 , we cannot do operations on const generic, so we need some hack around it. -pub(crate) const MAX_DEGREE: usize = 31; -pub(crate) const MAX_SAMPLES: usize = (MAX_DEGREE - 1) / 2; +pub(crate) const MAX_SAMPLES: usize = 32; use core::ops::{Index, IndexMut}; diff --git a/src/math/polyfit/polynomial.rs b/src/math/polyfit/polynomial.rs deleted file mode 100644 index d71fad9f..00000000 --- a/src/math/polyfit/polynomial.rs +++ /dev/null @@ -1,377 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ - -use super::MAX_DEGREE; -use core::f64::EPSILON; -use core::fmt; -use core::ops; - -/// Polynomial is a statically allocated polynomial. -#[derive(Copy, Clone, Debug, PartialEq)] -pub struct Polynomial { - /// Coefficients are orders by their power, e.g. index 0 is to the power 0, 1 is linear, 2 is quadratic, etc. - pub coefficients: [f64; SIZE], -} - -/// We define the maximum sized polynomial here. -/// This will be made obsolete when https://github.com/rust-lang/rust/issues/60551 is merged into rust stable. -pub type LargestPolynomial = Polynomial; - -impl Polynomial { - pub fn from_most_significant(mut coeffs: [f64; SIZE]) -> Self { - coeffs.reverse(); - Self { - coefficients: coeffs, - } - } - - /// Get the order of the polynomial - pub const fn order(&self) -> usize { - SIZE - 1 - } - - /// Evaluate the polynomial at the provided position - pub fn eval(&self, x: f64) -> f64 { - self.eval_n_deriv(x).0 - } - - /// Evaluate the derivative at the provided position - pub fn deriv(&self, x: f64) -> f64 { - self.eval_n_deriv(x).1 - } - - /// Evaluate the polynomial and its derivative at the provided position - pub fn eval_n_deriv(&self, x: f64) -> (f64, f64) { - if SIZE == 1 { - return (self.coefficients[0], 0.0); - } - - // Start with biggest coefficients - let mut acc_eval = *self.coefficients.last().unwrap(); - let mut acc_deriv = *self.coefficients.last().unwrap(); - // For every coefficient except the constant and largest - for val in self.coefficients.iter().skip(1).rev().skip(1) { - acc_eval = acc_eval * x + *val; - acc_deriv = acc_deriv * x + acc_eval; - } - // Do the constant for the polynomial evaluation - acc_eval = x * acc_eval + self.coefficients[0]; - - (acc_eval, acc_deriv) - } - - /// Initializes a Polynomial with only zeros - pub const fn zeros() -> Self { - Self { - coefficients: [0.0; SIZE], - } - } - - /// Set the i-th power of this polynomial to zero (e.g. if i=0, set the x^0 coefficient to zero, i.e. the constant part goes to zero) - pub fn zero_power(&mut self, i: usize) { - if i < SIZE { - self.coefficients[i] = 0.0; - } - } - - /// Set all of the coefficients below this tolerance to zero - pub fn zero_below_tolerance(&mut self, tol: f64) { - for i in 0..=self.order() { - if self.coefficients[i].abs() < tol { - self.zero_power(i); - } - } - } - - /// Returns true if any of the coefficients are NaN - pub fn is_nan(&self) -> bool { - for c in self.coefficients { - if c.is_nan() { - return true; - } - } - false - } - - /// Shifts all of the coefficients by one degree, dropping the largest degree. - /// For example: - /// P(x) = 10x^3 -6.13353243x^2 + 3.61185323x + 0.194533 .. becomes ... - /// P(x) = -6.13353243x^3 + 3.61185323x^2 + 0.194533x - pub(crate) fn shift_by_one(&mut self) { - let prev_coeff = self.coefficients; - self.coefficients[1..((prev_coeff.len() - 1) + 1)] - .clone_from_slice(&prev_coeff[..(prev_coeff.len() - 1)]); - self.coefficients[0] = 0.0; - } - - fn fmt_with_var(&self, f: &mut fmt::Formatter, var: String) -> fmt::Result { - write!(f, "P({}) = ", var)?; - let mut data = Vec::with_capacity(SIZE); - - for (i, c) in self.coefficients.iter().enumerate().rev() { - if c.abs() <= EPSILON { - continue; - } - - let mut d; - if c.abs() > 100.0 || c.abs() < 0.01 { - // Use scientific notation - if c > &0.0 { - d = format!("+{:e}", c); - } else { - d = format!("{:e}", c); - } - } else if c > &0.0 { - d = format!("+{}", c); - } else { - d = format!("{}", c); - } - // Add the power - let p = i; - match p { - 0 => {} // Show nothing for zero - 1 => d = format!("{}{}", d, var), - _ => d = format!("{}{}^{}", d, var, p), - } - data.push(d); - } - write!(f, "{}", data.join(" ")) - } -} - -/// In-place multiplication of a polynomial with an f64 -impl ops::Mul for Polynomial { - type Output = Polynomial; - - fn mul(mut self, rhs: f64) -> Self::Output { - for val in &mut self.coefficients { - *val *= rhs; - } - self - } -} - -/// Clone current polynomial and then multiply it with an f64 -impl ops::Mul for &Polynomial { - type Output = Polynomial; - - fn mul(self, rhs: f64) -> Self::Output { - *self * rhs - } -} - -/// In-place multiplication of a polynomial with an f64 -impl ops::Mul> for f64 { - type Output = Polynomial; - - fn mul(self, rhs: Polynomial) -> Self::Output { - let mut me = rhs; - for val in &mut me.coefficients { - *val *= self; - } - me - } -} - -impl ops::AddAssign for Polynomial { - fn add_assign(&mut self, rhs: f64) { - self.coefficients[0] += rhs; - } -} - -impl fmt::Display for Polynomial { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - self.fmt_with_var(f, "t".to_string()) - } -} - -impl fmt::LowerHex for Polynomial { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - self.fmt_with_var(f, "x".to_string()) - } -} - -pub(crate) fn add( - p1: Polynomial, - p2: Polynomial, -) -> Polynomial { - if S1 < S2 { - panic!(); - } - let mut rtn = Polynomial::zeros(); - for (i, c1) in p1.coefficients.iter().enumerate() { - rtn.coefficients[i] = match p2.coefficients.get(i) { - Some(c2) => c1 + c2, - None => *c1, - }; - } - rtn -} - -impl ops::Add> for Polynomial { - type Output = Polynomial; - /// Add Self and Other, _IF_ S2 >= S1 (else panic!) - fn add(self, other: Polynomial) -> Self::Output { - add(other, self) - } -} - -/// Subtracts p1 from p2 (p3 = p1 - p2) -pub(crate) fn sub( - p1: Polynomial, - p2: Polynomial, -) -> Polynomial { - if S1 < S2 { - panic!(); - } - let mut rtn = Polynomial::zeros(); - for (i, c1) in p1.coefficients.iter().enumerate() { - rtn.coefficients[i] = match p2.coefficients.get(i) { - Some(c2) => c1 - c2, - None => *c1, - }; - } - rtn -} - -impl ops::Sub> for Polynomial { - type Output = Polynomial; - fn sub(self, other: Polynomial) -> Self::Output { - sub(self, other) - } -} - -/// Multiply two polynomials. First parameter is the size of the first polynomial, second is the size of the second, and third is the sum of both minus one. -/// Implementation is naive and has a complexity of O(n*m) where n and m are the sizes of the polynomials. -pub(crate) fn multiply( - p1: Polynomial, - p2: Polynomial, -) -> Polynomial { - let mut rslt = Polynomial::::zeros(); - for (exponent, val) in p2.coefficients.iter().enumerate() { - if (*val).abs() < std::f64::EPSILON { - // Skip any zeros to allow multiplying large polynomials with themselves. - continue; - } - let if_was_scalar = *val * p1; - for (pos, ival) in if_was_scalar.coefficients.iter().enumerate() { - if (*ival).abs() < std::f64::EPSILON { - // Skip any zeros to allow multiplying large polynomials with themselves. - continue; - } - rslt.coefficients[pos + exponent] += *ival; - } - } - - rslt -} - -#[test] -fn poly_add() { - let p1 = Polynomial { - coefficients: [4.0, -2.0, 3.0], - }; - let p2 = Polynomial { - coefficients: [0.0, -5.0, 0.0, 2.0], - }; - // P(x) = (3x^2 - 2x + 4) + (2x^3 - 5x) - // <=> P(x) = 2x^3 + 3x^2 -7x + 4 - let p_expected = Polynomial { - coefficients: [4.0, -7.0, 3.0, 2.0], - }; - - // let p3 = add::<4, 3>(p2, p1); - let p3 = p1 + p2; - println!("p3 = {:x}\npe = {:x}", p3, p_expected); - assert_eq!(p3, p_expected); - // Check this is correct - for i in -100..=100 { - let x = i as f64; - let expect = p1.eval(x) + p2.eval(x); - assert!( - (p3.eval(x) - expect).abs() < 2e-16, - "Constant polynomial returned wrong value" - ); - } -} - -#[test] -fn poly_sub() { - let p2 = Polynomial { - coefficients: [4.0, -2.0, 3.0], - }; - let p1 = Polynomial { - coefficients: [0.0, -5.0, 0.0, 2.0], - }; - // P(x) = (3x^2 - 2x + 4) + (2x^3 - 5x) - // <=> P(x) = 2x^3 + 3x^2 -7x + 4 - let p_expected = Polynomial { - coefficients: [-4.0, -3.0, -3.0, 2.0], - }; - - let p3 = p1 - p2; - println!("p3 = {:x}\npe = {:x}", p3, p_expected); - assert_eq!(p3, p_expected); - // Check this is correct - for i in -100..=100 { - let x = i as f64; - let expect = p1.eval(x) - p2.eval(x); - assert!( - (p3.eval(x) - expect).abs() < 2e-16, - "Constant polynomial returned wrong value" - ); - } -} - -#[test] -fn poly_multiply() { - let p1 = Polynomial { - coefficients: [4.0, -2.0, 3.0], - }; - let p2 = Polynomial { - coefficients: [0.0, -5.0, 0.0, 2.0], - }; - // P(x) = (3x^2 - 2x + 4) * (2x^3 - 5x) - // <=> P(x) = (3x^2 - 2x + 4) * (2x^3) + (- 5x) * (3x^2 - 2x + 4) - // <=> P(x) = (6x^5 - 4x^4 + 8x^3) + (-15x^3 + 10x^2 -20x) - // <=> P(x) = 6x^5 - 4x^4 -7x^3 + 10x^2 -20x - let p_expected = Polynomial { - coefficients: [0.0, -20.0, 10.0, -7.0, -4.0, 6.0], - }; - - let p3 = multiply::<3, 4, 6>(p1, p2); - println!("p3 = {:x}\npe = {:x}", p3, p_expected); - assert_eq!(p3, p_expected); - // Check this is correct - for i in -100..=100 { - let x = i as f64; - let expect = p1.eval(x) * p2.eval(x); - assert!( - (p3.eval(x) - expect).abs() < 2e-16, - "Constant polynomial returned wrong value" - ); - } -} - -#[test] -fn poly_shift_mulx() { - let mut p1 = Polynomial { - coefficients: [0.194533, 3.61185323, -6.13353243, 10.0], - }; - - let pe = Polynomial { - coefficients: [0.0, 0.194533, 3.61185323, -6.13353243], - }; - - println!("p1 = {:x}", p1); - p1.shift_by_one(); - println!("p1 = {:x}\npe = {:x}", p1, pe); - assert_eq!(p1, pe); -} diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs index 5804be1b..5b2ce866 100644 --- a/src/naif/spk/datatypes/hermite.rs +++ b/src/naif/spk/datatypes/hermite.rs @@ -11,8 +11,7 @@ use core::fmt; use hifitime::{Duration, Epoch, TimeUnits}; -use crate::math::polyfit::{LargestPolynomial, MAX_SAMPLES}; -use crate::math::utils::normalize; +use crate::math::polyfit::{hermite, MAX_SAMPLES}; use crate::{ math::{cartesian::CartesianState, Vector3}, naif::daf::{NAIFDataRecord, NAIFDataSet, NAIFRecord}, @@ -208,56 +207,32 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { epochs[cno] = self.epoch_data[idx]; } - dbg!( - &epochs[..=self.samples], - &xs[..=self.samples], - &vxs[..=self.samples] - ); - - // Normalize the epochs between -1.0 and 1.0 - let first_sample_epoch_et_s = dbg!(self.epoch_data[first_idx]); - let last_sample_epoch_et_s = dbg!(self.epoch_data[last_idx]); - // XXX: Is there any difference for back prop segments? - // let window_duration_s = last_sample_epoch_et_s - first_sample_epoch_et_s; - for idx in 0..self.samples { - epochs[idx] = - normalize(epochs[idx], first_sample_epoch_et_s, last_sample_epoch_et_s); - } - - let normalized_epoch = normalize( - epoch.to_et_seconds(), - first_sample_epoch_et_s, - last_sample_epoch_et_s, - ); - - dbg!(normalized_epoch); + // TODO: Build a container that uses the underlying data and provides an index into it. // Build the interpolation polynomials making sure to limit the slices to exactly the number of items we actually used // The other ones are zeros, which would cause the interpolation function to fail. - let x_vx_poly = LargestPolynomial::hermite( + let (x_km, vx_km_s) = hermite( dbg!(&epochs[..self.samples]), dbg!(&xs[..self.samples]), dbg!(&vxs[..self.samples]), + epoch.to_et_seconds(), )?; - println!("{x_vx_poly:x}"); - - let y_vy_poly = LargestPolynomial::hermite( + let (y_km, vy_km_s) = hermite( &epochs[..self.samples], &ys[..self.samples], &vys[..self.samples], + epoch.to_et_seconds(), )?; - let z_vz_poly = LargestPolynomial::hermite( + let (z_km, vz_km_s) = hermite( &epochs[..self.samples], &zs[..self.samples], &vzs[..self.samples], + epoch.to_et_seconds(), )?; - let (x_km, vx_km_s) = x_vx_poly.eval_n_deriv(normalized_epoch); - let (y_km, vy_km_s) = y_vy_poly.eval_n_deriv(normalized_epoch); - let (z_km, vz_km_s) = z_vz_poly.eval_n_deriv(normalized_epoch); - // And interpolate + // And build the result let pos_km = Vector3::new(x_km, y_km, z_km); let vel_km_s = Vector3::new(vx_km_s, vy_km_s, vz_km_s); diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 9ef07025..5275ae36 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -10,14 +10,16 @@ use core::f64::EPSILON; -use anise::constants::frames::{EARTH_J2000, EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, VENUS_J2000}; +use anise::constants::frames::{EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, VENUS_J2000}; use anise::constants::orientations::J2000; use anise::file_mmap; use anise::math::Vector3; use anise::prelude::*; -// For the Earth Moon Barycenter to Luna, there velocity error is up to 3e-14 km/s, or 3e-11 m/s, or 13 picometers per second. -const VELOCITY_EPSILON_KM_S: f64 = 1e-13; +// Corresponds to an error of 1e-5 meters, or 1e-2 millimeters, or 10 micrometers +const POSITION_EPSILON_KM: f64 = 1e-8; +// Corresponds to an error of 1e-7 meters per second, or 1e-1 micrometers per second, or 100 nanometers per second +const VELOCITY_EPSILON_KM_S: f64 = 1e-10; #[test] fn de438s_translation_verif_venus2emb() { @@ -349,7 +351,7 @@ fn spk_hermite_type31_verif() { // We expect exactly the same output as SPICE to machine precision. assert!( - relative_eq!(state.radius_km, pos_expct_km, epsilon = EPSILON), + relative_eq!(state.radius_km, pos_expct_km, epsilon = POSITION_EPSILON_KM), "pos = {}\nexp = {pos_expct_km}\nerr = {:e}", state.radius_km, pos_expct_km - state.radius_km From 35243933a8978293b813e14778eb27373227d929 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sun, 27 Nov 2022 22:44:52 -0700 Subject: [PATCH 33/48] Clippy action Signed-off-by: Christopher Rabotin --- src/astro/orbit.rs | 4 ++ src/astro/orbit_geodetic.rs | 4 +- src/bin/anise/main.rs | 4 +- src/ephemerides/mod.rs | 46 ---------------- src/ephemerides/paths.rs | 12 ---- src/ephemerides/translate_to_parent.rs | 2 +- src/ephemerides/translations.rs | 2 +- src/errors.rs | 11 ---- src/frames/celestial_frame.rs | 6 +- src/frames/frame.rs | 4 +- src/frames/geodetic_frame.rs | 11 ++-- src/lib.rs | 4 +- src/math/cartesian.rs | 12 ++-- src/math/interpolation/chebyshev.rs | 6 +- src/math/mod.rs | 1 + src/{structure => math}/units.rs | 0 src/naif/daf/daf.rs | 10 ++-- src/naif/daf/mod.rs | 1 + src/naif/daf/recordtypes.rs | 18 +++--- src/naif/spk/datatypes/chebyshev.rs | 3 +- src/naif/spk/datatypes/hermite.rs | 12 ++-- src/naif/spk/datatypes/lagrange.rs | 18 +++--- src/naif/spk/summary.rs | 3 +- .../constants => shapes}/ellipsoid.rs | 25 --------- src/{structure/constants => shapes}/mod.rs | 0 src/shapes/planetary.rs | 24 ++++++++ src/structure/append.rs | 4 +- src/structure/constants/planetary.rs | 55 ------------------- src/structure/mod.rs | 2 - 29 files changed, 85 insertions(+), 219 deletions(-) rename src/{structure => math}/units.rs (100%) rename src/{structure/constants => shapes}/ellipsoid.rs (79%) rename src/{structure/constants => shapes}/mod.rs (100%) create mode 100644 src/shapes/planetary.rs delete mode 100644 src/structure/constants/planetary.rs diff --git a/src/astro/orbit.rs b/src/astro/orbit.rs index 3407bb7b..91ad6f9c 100644 --- a/src/astro/orbit.rs +++ b/src/astro/orbit.rs @@ -36,6 +36,7 @@ impl Cartesian { /// NOTE: The state is defined in Cartesian coordinates as they are non-singular. This causes rounding /// errors when creating a state from its Keplerian orbital elements (cf. the state tests). /// One should expect these errors to be on the order of 1e-12. + #[allow(clippy::too_many_arguments)] pub fn try_keplerian( sma: f64, ecc: f64, @@ -136,6 +137,7 @@ impl Cartesian { } /// Attempts to create a new Orbit from the provided radii of apoapsis and periapsis, in kilometers + #[allow(clippy::too_many_arguments)] pub fn try_keplerian_apsis_radii( r_a: f64, r_p: f64, @@ -173,6 +175,7 @@ impl Cartesian { /// NOTE: The state is defined in Cartesian coordinates as they are non-singular. This causes rounding /// errors when creating a state from its Keplerian orbital elements (cf. the state tests). /// One should expect these errors to be on the order of 1e-12. + #[allow(clippy::too_many_arguments)] pub fn keplerian( sma: f64, ecc: f64, @@ -187,6 +190,7 @@ impl Cartesian { } /// Creates a new Orbit from the provided radii of apoapsis and periapsis, in kilometers + #[allow(clippy::too_many_arguments)] pub fn keplerian_apsis_radii( r_a: f64, r_p: f64, diff --git a/src/astro/orbit_geodetic.rs b/src/astro/orbit_geodetic.rs index 06bd78a9..e300e808 100644 --- a/src/astro/orbit_geodetic.rs +++ b/src/astro/orbit_geodetic.rs @@ -24,6 +24,7 @@ pub type GeodeticOrbit = Cartesian; impl Cartesian { /// Creates a new Orbit from the provided semi-major axis altitude in kilometers + #[allow(clippy::too_many_arguments)] pub fn try_keplerian_altitude( sma_altitude: f64, ecc: f64, @@ -47,6 +48,7 @@ impl Cartesian { } /// Creates a new Orbit from the provided altitudes of apoapsis and periapsis, in kilometers + #[allow(clippy::too_many_arguments)] pub fn try_keplerian_apsis_altitude( a_a: f64, a_p: f64, @@ -94,7 +96,7 @@ impl Cartesian { let rk = (s_body + height_km) * sin_lat; let radius = Vector3::new(ri, rj, rk); let velocity = Vector3::new(0.0, 0.0, angular_velocity).cross(&radius); - Self::cartesian( + Self::new( radius[0], radius[1], radius[2], diff --git a/src/bin/anise/main.rs b/src/bin/anise/main.rs index 6e9edc06..edba0758 100644 --- a/src/bin/anise/main.rs +++ b/src/bin/anise/main.rs @@ -37,7 +37,7 @@ fn main() -> Result<(), CliErrors> { DAFFileRecord::read_from(&bytes[..DAFFileRecord::SIZE]).unwrap(); match file_record .identification() - .or_else(|e| Err(CliErrors::AniseError(e)))? + .map_err(CliErrors::AniseError)? { "PCK" => { info!("Loading {path_str:?} as DAF/PCK"); @@ -83,7 +83,7 @@ fn main() -> Result<(), CliErrors> { match file_record .identification() - .or_else(|e| Err(CliErrors::AniseError(e)))? + .map_err(CliErrors::AniseError)? { "PCK" => { info!("Loading {path_str:?} as DAF/PCK"); diff --git a/src/ephemerides/mod.rs b/src/ephemerides/mod.rs index 05a19047..50652b93 100644 --- a/src/ephemerides/mod.rs +++ b/src/ephemerides/mod.rs @@ -8,52 +8,6 @@ * Documentation: https://nyxspace.com/ */ -use hifitime::Epoch; - -use crate::structure::{ephemeris::Ephemeris, spline::Evenness}; - pub mod paths; pub mod translate_to_parent; pub mod translations; - -impl<'a> Ephemeris<'a> { - /// Returns the first epoch in the data, which will be the chronological "end" epoch if the ephemeris is generated backward - fn first_epoch(&self) -> Epoch { - self.ref_epoch - } - - /// Returns the last epoch in the data, which will be the chronological "start" epoch if the ephemeris is generated backward - fn last_epoch(&self) -> Epoch { - match self.splines.metadata.evenness { - Evenness::Even { duration_ns } => { - // Grab the number of splines - // self.ref_epoch + ((self.splines.len() as f64) * (duration_ns as i64).nanoseconds()) - todo!() - } - Evenness::Uneven { indexes: _ } => { - todo!() - } - } - } - - /// Returns the starting epoch of this ephemeris. It is guaranteed that start_epoch <= end_epoch. - /// - /// # Note - /// + If the ephemeris is stored in chronological order, then the start epoch is the same as the first epoch. - /// + If the ephemeris is stored in anti-chronological order, then the start epoch is the last epoch. - pub fn start_epoch(&self) -> Epoch { - if self.first_epoch() > self.last_epoch() { - self.last_epoch() - } else { - self.first_epoch() - } - } - - pub fn end_epoch(&self) -> Epoch { - if self.first_epoch() > self.last_epoch() { - self.first_epoch() - } else { - self.last_epoch() - } - } -} diff --git a/src/ephemerides/paths.rs b/src/ephemerides/paths.rs index 8b00b7c5..31608152 100644 --- a/src/ephemerides/paths.rs +++ b/src/ephemerides/paths.rs @@ -13,12 +13,10 @@ use log::error; use crate::context::Context; use crate::errors::InternalErrorKind; -use crate::structure::orientation::Orientation; use crate::NaifId; use crate::{ errors::{AniseError, IntegrityErrorKind}, frames::Frame, - structure::ephemeris::Ephemeris, }; /// **Limitation:** no translation or rotation may have more than 8 nodes. @@ -56,16 +54,6 @@ impl<'a> Context<'a> { Ok(common_center) } - /// Try to return the ephemeris for the provided index, or returns an error. - pub fn try_ephemeris_data(&self, idx: usize) -> Result<&'a Ephemeris, AniseError> { - todo!() - } - - /// Try to return the orientation for the provided index, or returns an error. - pub fn try_orientation_data(&self, idx: usize) -> Result<&'a Orientation, AniseError> { - todo!() - } - /// Try to construct the path from the source frame all the way to the root ephemeris of this context. pub fn ephemeris_path_to_root( &self, diff --git a/src/ephemerides/translate_to_parent.rs b/src/ephemerides/translate_to_parent.rs index a3d87bb4..c846ad50 100644 --- a/src/ephemerides/translate_to_parent.rs +++ b/src/ephemerides/translate_to_parent.rs @@ -14,10 +14,10 @@ use crate::astro::Aberration; use crate::context::Context; use crate::errors::IntegrityErrorKind; use crate::hifitime::Epoch; +use crate::math::units::*; use crate::math::Vector3; use crate::naif::daf::{NAIFDataSet, NAIFSummaryRecord}; use crate::naif::spk::datatypes::{HermiteSetType13, LagrangeSetType9, Type2ChebyshevSet}; -use crate::structure::units::*; use crate::{errors::AniseError, prelude::Frame}; impl<'a> Context<'a> { diff --git a/src/ephemerides/translations.rs b/src/ephemerides/translations.rs index d4ae94ed..18f45285 100644 --- a/src/ephemerides/translations.rs +++ b/src/ephemerides/translations.rs @@ -12,8 +12,8 @@ use crate::astro::Aberration; use crate::context::Context; use crate::hifitime::Epoch; use crate::math::cartesian::CartesianState; +use crate::math::units::*; use crate::math::Vector3; -use crate::structure::units::*; use crate::{ errors::AniseError, prelude::{Frame, FrameTrait}, diff --git a/src/errors.rs b/src/errors.rs index b11a35ff..d577ca1b 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -13,7 +13,6 @@ use hifitime::Epoch; use crate::der::Error as Asn1Error; use crate::der::Error as DerError; use crate::prelude::Frame; -use crate::structure::semver::Semver; use core::convert::From; use core::fmt; use std::io::ErrorKind as IOErrorKind; @@ -38,11 +37,6 @@ pub enum AniseError { IntegrityError(IntegrityErrorKind), /// Raised if the file could not be decoded correctly DecodingError(Asn1Error), - /// Raised if the ANISE version of the file is incompatible with the library. - IncompatibleVersion { - got: Semver, - exp: Semver, - }, /// Raised if the item sought after is not found in the context ItemNotFound, /// Raised when requesting the interpolation for data that is not available in this spline. @@ -151,11 +145,6 @@ impl fmt::Display for AniseError { "ANISE error: bytes could not be decoded into a valid ANISE file - {err}" ), Self::ItemNotFound => write!(f, "ANISE error: requested item not found in context"), - Self::IncompatibleVersion { got, exp } => write!( - f, - "ANISE error: Incompatible version: got {}.{}.{} - expected {}.{}.{}", - got.major, got.minor, got.patch, exp.major, exp.minor, exp.patch - ), Self::InternalError(e) => { write!(f, "ANISE internal error: {e:?} -- please report a bug") } diff --git a/src/frames/celestial_frame.rs b/src/frames/celestial_frame.rs index 9643965c..9c3f870b 100644 --- a/src/frames/celestial_frame.rs +++ b/src/frames/celestial_frame.rs @@ -64,9 +64,9 @@ impl<'a> Context<'a> { /// Tries to find the celestial frame data given the ephemeris center name, the orientation name, and the name of the planetary constants pub fn celestial_frame_from( &self, - ephemeris_name: &'a str, - orientation_name: &'a str, - planetary_constants_name: &'a str, + _ephemeris_name: &'a str, + _orientation_name: &'a str, + _planetary_constants_name: &'a str, ) -> Result { todo!() // let constants = self.planetary_constants_from_name(planetary_constants_name)?; diff --git a/src/frames/frame.rs b/src/frames/frame.rs index 1126f01c..a2722b0b 100644 --- a/src/frames/frame.rs +++ b/src/frames/frame.rs @@ -65,8 +65,8 @@ impl Frame { } pub fn from_ephemeris_orientation_names<'a>( - ephemeris_name: &'a str, - orientation_name: &'a str, + _ephemeris_name: &'a str, + _orientation_name: &'a str, ) -> Self { todo!() // Self { diff --git a/src/frames/geodetic_frame.rs b/src/frames/geodetic_frame.rs index e787ba36..cea85ca6 100644 --- a/src/frames/geodetic_frame.rs +++ b/src/frames/geodetic_frame.rs @@ -9,11 +9,8 @@ */ use super::{celestial_frame::CelestialFrame, CelestialFrameTrait, Frame, FrameTrait}; -use crate::{ - context::Context, prelude::AniseError, structure::constants::ellipsoid::Ellipsoid, NaifId, -}; +use crate::{context::Context, prelude::AniseError, shapes::ellipsoid::Ellipsoid, NaifId}; use core::fmt::{Display, Formatter}; -use log::error; /// Defines a Celestial Frame kind, which is a Frame that also defines a standard gravitational parameter pub trait GeodeticFrameTrait: CelestialFrameTrait { @@ -102,9 +99,9 @@ impl<'a> Context<'a> { /// Tries to find the geodetic frame data given the ephemeris center name, the orientation name, and the name of the planetary constants pub fn geodetic_frame_from( &self, - ephemeris_name: &'a str, - orientation_name: &'a str, - planetary_constants_name: &'a str, + _ephemeris_name: &'a str, + _orientation_name: &'a str, + _planetary_constants_name: &'a str, ) -> Result { todo!() // let constants = self.planetary_constants_from_name(planetary_constants_name)?; diff --git a/src/lib.rs b/src/lib.rs index c67c53eb..511778c3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,7 +22,7 @@ pub mod errors; pub mod frames; pub mod math; pub mod naif; -pub mod structure; +pub mod shapes; /// Re-export of hifitime pub mod time { @@ -34,9 +34,9 @@ pub mod prelude { pub use crate::context::Context; pub use crate::errors::AniseError; pub use crate::frames::*; + pub use crate::math::units::*; pub use crate::naif::daf::NAIFSummaryRecord; pub use crate::naif::{BPC, SPK}; - pub use crate::structure::units::*; pub use crate::time::*; pub use std::fs::File; } diff --git a/src/math/cartesian.rs b/src/math/cartesian.rs index 3bb7b9eb..2cceaaf8 100644 --- a/src/math/cartesian.rs +++ b/src/math/cartesian.rs @@ -62,7 +62,8 @@ impl Cartesian { /// Creates a new Cartesian state in the provided frame at the provided Epoch, and does not set its acceleration. /// /// **Units:** km, km, km, km/s, km/s, km/s - pub fn cartesian( + #[allow(clippy::too_many_arguments)] + pub fn new( x_km: f64, y_km: f64, z_km: f64, @@ -85,7 +86,7 @@ impl Cartesian { /// /// **Units:** km, km, km pub fn from_position(x_km: f64, y_km: f64, z_km: f64, epoch: Epoch, frame: F) -> Self { - Self::cartesian(x_km, y_km, z_km, 0.0, 0.0, 0.0, epoch, frame) + Self::new(x_km, y_km, z_km, 0.0, 0.0, 0.0, epoch, frame) } /// Creates a new Cartesian around in the provided frame from the borrowed state vector @@ -95,7 +96,7 @@ impl Cartesian { /// /// **Units:** position data must be in kilometers, velocity data must be in kilometers per second. pub fn from_cartesian_pos_vel(pos_vel: Vector6, epoch: Epoch, frame: F) -> Self { - Self::cartesian( + Self::new( pos_vel[0], pos_vel[1], pos_vel[2], pos_vel[3], pos_vel[4], pos_vel[5], epoch, frame, ) } @@ -112,10 +113,7 @@ impl Cartesian { /// Returns the magnitude of the acceleration vector in km/s^2 pub fn amag_km_s2(&self) -> Option { - match self.acceleration_km_s2 { - Some(accel) => Some(accel.norm()), - None => None, - } + self.acceleration_km_s2.map(|accel| accel.norm()) } /// Returns a copy of the state with a new radius diff --git a/src/math/interpolation/chebyshev.rs b/src/math/interpolation/chebyshev.rs index 5be9af98..2b27fb3b 100644 --- a/src/math/interpolation/chebyshev.rs +++ b/src/math/interpolation/chebyshev.rs @@ -32,7 +32,7 @@ pub(crate) fn cheby_eval( w[1] = w[0]; w[0] = (spline_coeffs .get(j - 1) - .ok_or_else(|| AniseError::MissingInterpolationData(eval_epoch))?) + .ok_or(AniseError::MissingInterpolationData(eval_epoch))?) + (2.0 * normalized_time * w[1] - w[2]); dw[2] = dw[1]; @@ -41,8 +41,8 @@ pub(crate) fn cheby_eval( } let val = (spline_coeffs - .get(0) - .ok_or_else(|| AniseError::MissingInterpolationData(eval_epoch))?) + .first() + .ok_or(AniseError::MissingInterpolationData(eval_epoch))?) + (normalized_time * w[0] - w[1]); let deriv = (w[0] + normalized_time * dw[0] - dw[1]) / spline_radius_s; diff --git a/src/math/mod.rs b/src/math/mod.rs index d4ae476d..3f7278db 100644 --- a/src/math/mod.rs +++ b/src/math/mod.rs @@ -16,6 +16,7 @@ pub mod angles; pub mod cartesian; pub mod interpolation; pub mod polyfit; +pub mod units; pub mod utils; // pub mod rotation; diff --git a/src/structure/units.rs b/src/math/units.rs similarity index 100% rename from src/structure/units.rs rename to src/math/units.rs diff --git a/src/naif/daf/daf.rs b/src/naif/daf/daf.rs index 08469102..35fae0dc 100644 --- a/src/naif/daf/daf.rs +++ b/src/naif/daf/daf.rs @@ -73,7 +73,7 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { let rcrd_idx = (file_record.fwrd_idx() - 1) * RCRD_LEN; let rcrd_bytes = bytes .get(rcrd_idx..rcrd_idx + RCRD_LEN) - .ok_or(AniseError::MalformedData(file_record.fwrd_idx() + RCRD_LEN))?; + .ok_or_else(|| AniseError::MalformedData(file_record.fwrd_idx() + RCRD_LEN))?; // TODO: Use the endianness flag let daf_summary = @@ -90,7 +90,7 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { let rcrd_idx = file_record.fwrd_idx() * RCRD_LEN; let rcrd_bytes = bytes .get(rcrd_idx..rcrd_idx + RCRD_LEN) - .ok_or(AniseError::MalformedData(file_record.fwrd_idx() + RCRD_LEN))?; + .ok_or_else(|| AniseError::MalformedData(file_record.fwrd_idx() + RCRD_LEN))?; let name_record = NameRecord::read_from(rcrd_bytes).unwrap(); Ok(Self { @@ -208,14 +208,12 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { (this_summary.start_index() - 1) * DBL_SIZE ..this_summary.end_index() * DBL_SIZE, ) - .ok_or(AniseError::MalformedData( - this_summary.end_index() + RCRD_LEN, - ))?, + .ok_or_else(|| AniseError::MalformedData(this_summary.end_index() + RCRD_LEN))?, ) .unwrap() .into_slice(); // Convert it - return Ok(S::from_slice_f64(data)); + Ok(S::from_slice_f64(data)) } pub fn comments(&self) -> Result { diff --git a/src/naif/daf/mod.rs b/src/naif/daf/mod.rs index 1aad9ae0..ff46846e 100644 --- a/src/naif/daf/mod.rs +++ b/src/naif/daf/mod.rs @@ -13,6 +13,7 @@ use hifitime::Epoch; use zerocopy::{AsBytes, FromBytes}; pub(crate) const RCRD_LEN: usize = 1024; +#[allow(clippy::module_inception)] pub mod daf; pub mod recordtypes; diff --git a/src/naif/daf/recordtypes.rs b/src/naif/daf/recordtypes.rs index 5af9b2d2..834fec26 100644 --- a/src/naif/daf/recordtypes.rs +++ b/src/naif/daf/recordtypes.rs @@ -73,12 +73,7 @@ impl DAFFileRecord { AniseError::DAFParserError("Could not parse identification string".to_owned()) })?; - if &str_locidw[0..3] != "DAF" { - Err(AniseError::DAFParserError(format!( - "Cannot parse file whose identifier is not DAF: `{}`", - str_locidw, - ))) - } else if str_locidw.chars().nth(3) != Some('/') { + if &str_locidw[0..3] != "DAF" || str_locidw.chars().nth(3) != Some('/') { Err(AniseError::DAFParserError(format!( "Cannot parse file whose identifier is not DAF: `{}`", str_locidw, @@ -89,10 +84,10 @@ impl DAFFileRecord { "PCK" => Ok("PCK"), _ => { error!("DAF of type `{}` is not yet supported", &str_locidw[4..]); - return Err(AniseError::DAFParserError(format!( + Err(AniseError::DAFParserError(format!( "Cannot parse SPICE data of type `{}`", str_locidw - ))); + ))) } } } @@ -113,9 +108,10 @@ impl DAFFileRecord { ))); }; if file_endian != Endian::f64_native() || file_endian != Endian::u64_native() { - Err(AniseError::DAFParserError(format!( + Err(AniseError::DAFParserError( "Input file has different endian-ness than the platform and cannot be decoded" - ))) + .to_string(), + )) } else { Ok(file_endian) } @@ -182,7 +178,7 @@ impl NameRecord { pub fn nth_name(&self, n: usize, summary_size: usize) -> &str { let this_name = &self.raw_names[n * summary_size * DBL_SIZE..(n + 1) * summary_size * DBL_SIZE]; - match core::str::from_utf8(&this_name) { + match core::str::from_utf8(this_name) { Ok(name) => name.trim(), Err(e) => { warn!( diff --git a/src/naif/spk/datatypes/chebyshev.rs b/src/naif/spk/datatypes/chebyshev.rs index 08bbb4c7..969e8b80 100644 --- a/src/naif/spk/datatypes/chebyshev.rs +++ b/src/naif/spk/datatypes/chebyshev.rs @@ -68,8 +68,7 @@ impl<'a> NAIFDataSet<'a> for Type2ChebyshevSet<'a> { fn nth_record(&self, n: usize) -> Result { Ok(Self::RecordKind::from_slice_f64( - &self - .record_data + self.record_data .get(n * self.rsize..(n + 1) * self.rsize) .ok_or(AniseError::MalformedData((n + 1) * self.rsize))?, )) diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs index 5b2ce866..50646cb5 100644 --- a/src/naif/spk/datatypes/hermite.rs +++ b/src/naif/spk/datatypes/hermite.rs @@ -66,8 +66,7 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType12<'a> { fn nth_record(&self, n: usize) -> Result { let rcrd_len = self.record_data.len() / self.num_records; Ok(Self::RecordKind::from_slice_f64( - &self - .record_data + self.record_data .get(n * rcrd_len..(n + 1) * rcrd_len) .ok_or(AniseError::MalformedData((n + 1) * rcrd_len))?, )) @@ -75,10 +74,10 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType12<'a> { fn evaluate( &self, - epoch: Epoch, - start_epoch: Epoch, + _epoch: Epoch, + _start_epoch: Epoch, ) -> Result { - todo!() + todo!("https://github.com/anise-toolkit/anise.rs/issues/14") } } @@ -143,8 +142,7 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { fn nth_record(&self, n: usize) -> Result { let rcrd_len = self.state_data.len() / self.num_records; Ok(Self::RecordKind::from_slice_f64( - &self - .state_data + self.state_data .get(n * rcrd_len..(n + 1) * rcrd_len) .ok_or(AniseError::MalformedData((n + 1) * rcrd_len))?, )) diff --git a/src/naif/spk/datatypes/lagrange.rs b/src/naif/spk/datatypes/lagrange.rs index b9e06cd1..6a487bf1 100644 --- a/src/naif/spk/datatypes/lagrange.rs +++ b/src/naif/spk/datatypes/lagrange.rs @@ -65,8 +65,7 @@ impl<'a> NAIFDataSet<'a> for LagrangeSetType8<'a> { fn nth_record(&self, n: usize) -> Result { let rcrd_len = self.record_data.len() / self.num_records; Ok(Self::RecordKind::from_slice_f64( - &self - .record_data + self.record_data .get(n * rcrd_len..(n + 1) * rcrd_len) .ok_or(AniseError::MalformedData((n + 1) * rcrd_len))?, )) @@ -74,10 +73,10 @@ impl<'a> NAIFDataSet<'a> for LagrangeSetType8<'a> { fn evaluate( &self, - epoch: Epoch, - start_epoch: Epoch, + _epoch: Epoch, + _start_epoch: Epoch, ) -> Result { - todo!() + todo!("https://github.com/anise-toolkit/anise.rs/issues/12") } } @@ -131,8 +130,7 @@ impl<'a> NAIFDataSet<'a> for LagrangeSetType9<'a> { fn nth_record(&self, n: usize) -> Result { let rcrd_len = self.state_data.len() / self.num_records; Ok(Self::RecordKind::from_slice_f64( - &self - .state_data + self.state_data .get(n * rcrd_len..(n + 1) * rcrd_len) .ok_or(AniseError::MalformedData((n + 1) * rcrd_len))?, )) @@ -140,9 +138,9 @@ impl<'a> NAIFDataSet<'a> for LagrangeSetType9<'a> { fn evaluate( &self, - epoch: Epoch, - start_epoch: Epoch, + _epoch: Epoch, + _start_epoch: Epoch, ) -> Result { - todo!() + todo!("https://github.com/anise-toolkit/anise.rs/issues/13") } } diff --git a/src/naif/spk/summary.rs b/src/naif/spk/summary.rs index b0036847..5195659a 100644 --- a/src/naif/spk/summary.rs +++ b/src/naif/spk/summary.rs @@ -35,6 +35,7 @@ impl<'a> SPKSummaryRecord { pub fn spice_name(&self) -> Result<&'a str, AniseError> { Self::id_to_human_name(self.target_id) } + /// Converts the provided ID to its human name. /// Only works for the common celestial bodies pub fn id_to_human_name(id: i32) -> Result<&'a str, AniseError> { @@ -118,7 +119,7 @@ impl<'a> SPKSummaryRecord { /// 0. In BSP files, the name is stored as a comment and is unstructured. So it's hard to copy those. (Help needed) /// 1. One limitation of this approach is that given file may only contain one "Earth" /// 2. Another limitation is that this code does not know all of the possible moons in the whole solar system. - pub(crate) fn human_name(&self) -> &'a str { + pub fn human_name(&self) -> &'a str { match Self::id_to_human_name(self.target_id) { Ok(name) => name, Err(e) => { diff --git a/src/structure/constants/ellipsoid.rs b/src/shapes/ellipsoid.rs similarity index 79% rename from src/structure/constants/ellipsoid.rs rename to src/shapes/ellipsoid.rs index 66ab30da..999da863 100644 --- a/src/structure/constants/ellipsoid.rs +++ b/src/shapes/ellipsoid.rs @@ -10,7 +10,6 @@ use core::f64::EPSILON; use core::fmt::{Display, Formatter}; -use der::{Decode, Encode, Reader, Writer}; /// Only the tri-axial Ellipsoid shape model is currently supported by ANISE. /// This is directly inspired from SPICE PCK. /// > For each body, three radii are listed: The first number is @@ -92,27 +91,3 @@ impl Display for Ellipsoid { } } } - -impl Encode for Ellipsoid { - fn encoded_len(&self) -> der::Result { - self.semi_major_equatorial_radius_km.encoded_len()? - + self.semi_minor_equatorial_radius_km.encoded_len()? - + self.polar_radius_km.encoded_len()? - } - - fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { - self.semi_major_equatorial_radius_km.encode(encoder)?; - self.semi_minor_equatorial_radius_km.encode(encoder)?; - self.polar_radius_km.encode(encoder) - } -} - -impl<'a> Decode<'a> for Ellipsoid { - fn decode>(decoder: &mut R) -> der::Result { - Ok(Self { - semi_major_equatorial_radius_km: decoder.decode()?, - semi_minor_equatorial_radius_km: decoder.decode()?, - polar_radius_km: decoder.decode()?, - }) - } -} diff --git a/src/structure/constants/mod.rs b/src/shapes/mod.rs similarity index 100% rename from src/structure/constants/mod.rs rename to src/shapes/mod.rs diff --git a/src/shapes/planetary.rs b/src/shapes/planetary.rs new file mode 100644 index 00000000..d89a4ca8 --- /dev/null +++ b/src/shapes/planetary.rs @@ -0,0 +1,24 @@ +/* + * ANISE Toolkit + * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * Documentation: https://nyxspace.com/ + */ + +use super::ellipsoid::Ellipsoid; + +/// Planetary constants can store the same data as the SPICE textual PCK files +#[derive(Clone, Debug, PartialEq)] +pub struct PlanetaryConstants<'a> { + /// Name is used as the input for the hashing function. + pub name: &'a str, + /// Generic comments field + pub comments: &'a str, + /// Gravitational parameter (μ) of this planetary object. + pub mu_km3_s2: f64, + /// The shape is always a tri axial ellipsoid + pub shape: Option, +} diff --git a/src/structure/append.rs b/src/structure/append.rs index f93e3a17..5e0160ed 100644 --- a/src/structure/append.rs +++ b/src/structure/append.rs @@ -39,7 +39,7 @@ impl<'a> DataSet<'a> { if self .ephemeris_data .get(self_idx.into()) - .ok_or(AniseError::IntegrityError(IntegrityErrorKind::DataMissing))? + .ok_or_else(|| AniseError::IntegrityError(IntegrityErrorKind::DataMissing))? != &e { error!( @@ -103,7 +103,7 @@ impl<'a> DataSet<'a> { if self .orientation_data .get(self_idx.into()) - .ok_or(AniseError::IntegrityError(IntegrityErrorKind::DataMissing))? + .ok_or_else(|| AniseError::IntegrityError(IntegrityErrorKind::DataMissing))? != &o { // The ephemeris data differ but the name is the same diff --git a/src/structure/constants/planetary.rs b/src/structure/constants/planetary.rs deleted file mode 100644 index fdb8151e..00000000 --- a/src/structure/constants/planetary.rs +++ /dev/null @@ -1,55 +0,0 @@ -/* - * ANISE Toolkit - * Copyright (C) 2021-2022 Christopher Rabotin et al. (cf. AUTHORS.md) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * Documentation: https://nyxspace.com/ - */ -use der::{asn1::Utf8StringRef, Decode, Encode, Reader, Writer}; - -use super::ellipsoid::Ellipsoid; - -/// Planetary constants can store the same data as the SPICE textual PCK files -#[derive(Clone, Debug, PartialEq)] -pub struct PlanetaryConstants<'a> { - /// Name is used as the input for the hashing function. - pub name: &'a str, - /// Generic comments field - pub comments: &'a str, - /// Gravitational parameter (μ) of this planetary object. - pub mu_km3_s2: f64, - /// The shape is always a tri axial ellipsoid - pub shape: Option, -} - -impl<'a> Encode for PlanetaryConstants<'a> { - fn encoded_len(&self) -> der::Result { - Utf8StringRef::new(self.name)?.encoded_len()? - + Utf8StringRef::new(self.comments)?.encoded_len()? - + self.mu_km3_s2.encoded_len()? - + self.shape.encoded_len()? - } - - fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { - Utf8StringRef::new(self.name)?.encode(encoder)?; - Utf8StringRef::new(self.comments)?.encode(encoder)?; - self.mu_km3_s2.encode(encoder)?; - self.shape.encode(encoder) - } -} - -impl<'a> Decode<'a> for PlanetaryConstants<'a> { - fn decode>(decoder: &mut R) -> der::Result { - let name: Utf8StringRef = decoder.decode()?; - let comments: Utf8StringRef = decoder.decode()?; - - Ok(Self { - name: name.as_str(), - comments: comments.as_str(), - mu_km3_s2: decoder.decode()?, - shape: Some(decoder.decode()?), - }) - } -} diff --git a/src/structure/mod.rs b/src/structure/mod.rs index 59a27a74..64f39a3d 100644 --- a/src/structure/mod.rs +++ b/src/structure/mod.rs @@ -16,7 +16,6 @@ extern crate der; extern crate hifitime; pub mod array; pub mod common; -pub mod constants; pub mod dataset; pub mod ephemeris; pub mod lookuptable; @@ -25,7 +24,6 @@ pub mod orientation; pub mod records; pub mod semver; pub mod spline; -pub mod units; use self::semver::Semver; /// The current version of ANISE From 1cadb631ca75c8b6b9a166abd373c370e076bc73 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Sun, 27 Nov 2022 23:54:46 -0700 Subject: [PATCH 34/48] Moaaar refactoring Signed-off-by: Christopher Rabotin --- .github/workflows/tests.yml | 6 + data/gmat-hermite.bsp | 3 + src/bin/anise/main.rs | 11 +- src/cli/inspect.rs | 4 + src/context/mod.rs | 8 +- src/frames/celestial_frame.rs | 6 +- src/frames/frame.rs | 7 +- src/frames/geodetic_frame.rs | 6 +- src/math/interpolation/chebyshev.rs | 2 +- .../{polyfit => interpolation}/hermite.rs | 12 +- src/math/interpolation/mod.rs | 10 +- src/math/polyfit/mod.rs | 6 - src/naif/spk/datatypes/chebyshev.rs | 5 +- src/naif/spk/datatypes/hermite.rs | 14 +- src/shapes/ellipsoid.rs | 6 +- tests/ephemerides/mod.rs | 2 +- .../ephemerides/validation/hermite_type13.rs | 442 +++++++++--------- .../validation/jplde_cheby_type2.rs | 1 - 18 files changed, 283 insertions(+), 268 deletions(-) create mode 100644 data/gmat-hermite.bsp rename src/math/{polyfit => interpolation}/hermite.rs (97%) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ee3f5d1f..b84edb60 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -61,6 +61,12 @@ jobs: - name: Test (no default features and release) run: cargo test --no-default-features --release + - name: Rust-SPICE JPL DE validation + run: RUST_BACKTRACE=full RUST_LOG=debug cargo test validate_jplde_translation --features validation --release -- --nocapture + + - name: Rust-SPICE hermite validation + run: RUST_BACKTRACE=full RUST_LOG=debug cargo test validate_hermite_translation --features validation --release -- --nocapture + lints: name: Lints runs-on: ubuntu-latest diff --git a/data/gmat-hermite.bsp b/data/gmat-hermite.bsp new file mode 100644 index 00000000..c4e364a1 --- /dev/null +++ b/data/gmat-hermite.bsp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be0e3585440d70fbba44dbba6ef6fff7fa50d3f16b007fe9edf26f4ed92191c3 +size 14336 diff --git a/src/bin/anise/main.rs b/src/bin/anise/main.rs index edba0758..3fc04e41 100644 --- a/src/bin/anise/main.rs +++ b/src/bin/anise/main.rs @@ -103,6 +103,7 @@ fn main() -> Result<(), CliErrors> { name, start_epoch: format!("{:E}", summary.start_epoch()), end_epoch: format!("{:E}", summary.end_epoch()), + duration: summary.end_epoch() - summary.start_epoch(), interpolation_kind: format!("{}", summary.data_type_i), frame: format!("{}", summary.frame_id), inertial_frame: format!( @@ -127,22 +128,24 @@ fn main() -> Result<(), CliErrors> { "SPK" => { info!("Loading {path_str:?} as DAF/SPK"); match SPK::parse(&bytes) { - Ok(pck) => { + Ok(spk) => { // Build the rows of the table let mut rows = Vec::new(); - for (sno, summary) in pck.data_summaries.iter().enumerate() { - let name = pck + for (sno, summary) in spk.data_summaries.iter().enumerate() { + let name = spk .name_record - .nth_name(sno, pck.file_record.summary_size()); + .nth_name(sno, spk.file_record.summary_size()); if summary.is_empty() { continue; } rows.push(SpkRow { name, + center: summary.center_id, start_epoch: format!("{:E}", summary.start_epoch()), end_epoch: format!("{:E}", summary.end_epoch()), + duration: summary.end_epoch() - summary.start_epoch(), interpolation_kind: format!("{}", summary.data_type_i), frame: format!("{}", summary.frame_id), target: format!("{}", summary.target_id), diff --git a/src/cli/inspect.rs b/src/cli/inspect.rs index 87f7b6f2..c6dcaadc 100644 --- a/src/cli/inspect.rs +++ b/src/cli/inspect.rs @@ -1,3 +1,4 @@ +use hifitime::Duration; use tabled::Tabled; #[derive(Tabled)] @@ -5,6 +6,7 @@ pub struct BpcRow<'a> { pub name: &'a str, pub start_epoch: String, pub end_epoch: String, + pub duration: Duration, pub interpolation_kind: String, pub frame: String, pub inertial_frame: String, @@ -15,7 +17,9 @@ pub struct SpkRow<'a> { pub name: &'a str, pub target: String, pub frame: String, + pub center: i32, pub start_epoch: String, pub end_epoch: String, + pub duration: Duration, pub interpolation_kind: String, } diff --git a/src/context/mod.rs b/src/context/mod.rs index 10d9d19d..663cefc9 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -13,6 +13,7 @@ use hifitime::Epoch; use crate::errors::AniseError; use crate::naif::spk::summary::SPKSummaryRecord; use crate::naif::{BPC, SPK}; +use core::fmt; use log::error; pub const MAX_LOADED_FILES: usize = 32; @@ -24,7 +25,6 @@ pub const MAX_LOADED_FILES: usize = 32; /// The stack space does _not_ depend on how much data is loaded at any given time. #[derive(Clone, Default)] pub struct Context<'a> { - // TODO: Add ANISE context here too. pub spk_data: [Option<&'a SPK<'a>>; MAX_LOADED_FILES], pub bpc_data: [Option<&'a BPC<'a>>; MAX_LOADED_FILES], } @@ -139,3 +139,9 @@ impl<'a: 'b, 'b> Context<'a> { Err(AniseError::MissingInterpolationData(epoch)) } } + +impl<'a> fmt::Display for Context<'a> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { + write!(f, "Context: #SPK = {}", self.num_loaded_spk()) + } +} diff --git a/src/frames/celestial_frame.rs b/src/frames/celestial_frame.rs index 9c3f870b..53c835a7 100644 --- a/src/frames/celestial_frame.rs +++ b/src/frames/celestial_frame.rs @@ -11,7 +11,7 @@ use crate::{context::Context, prelude::AniseError, NaifId}; use super::{Frame, FrameTrait}; -use core::fmt::{Display, Formatter}; +use core::fmt; /// Defines a Celestial Frame kind, which is a Frame that also defines a standard gravitational parameter pub trait CelestialFrameTrait: FrameTrait { @@ -42,8 +42,8 @@ impl CelestialFrameTrait for CelestialFrame { } } -impl Display for CelestialFrame { - fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { +impl fmt::Display for CelestialFrame { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { write!(f, "{} (μ = {} km3/s)", self.frame, self.mu_km3_s2()) } } diff --git a/src/frames/frame.rs b/src/frames/frame.rs index a2722b0b..ef854f09 100644 --- a/src/frames/frame.rs +++ b/src/frames/frame.rs @@ -8,7 +8,8 @@ * Documentation: https://nyxspace.com/ */ -use core::fmt::{Debug, Display, Formatter}; +use core::fmt; +use core::fmt::Debug; use crate::constants::celestial_objects::hash_celestial_name; use crate::constants::orientations::{hash_orientation_name, J2000}; @@ -96,8 +97,8 @@ impl Frame { } } -impl Display for Frame { - fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { +impl fmt::Display for Frame { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { let body_name = match hash_celestial_name(self.ephemeris_id) { Some(name) => name.to_string(), None => format!("body {}", self.ephemeris_id), diff --git a/src/frames/geodetic_frame.rs b/src/frames/geodetic_frame.rs index cea85ca6..f3e6664c 100644 --- a/src/frames/geodetic_frame.rs +++ b/src/frames/geodetic_frame.rs @@ -10,7 +10,7 @@ use super::{celestial_frame::CelestialFrame, CelestialFrameTrait, Frame, FrameTrait}; use crate::{context::Context, prelude::AniseError, shapes::ellipsoid::Ellipsoid, NaifId}; -use core::fmt::{Display, Formatter}; +use core::fmt; /// Defines a Celestial Frame kind, which is a Frame that also defines a standard gravitational parameter pub trait GeodeticFrameTrait: CelestialFrameTrait { @@ -66,8 +66,8 @@ impl GeodeticFrameTrait for GeodeticFrame { } } -impl Display for GeodeticFrame { - fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { +impl fmt::Display for GeodeticFrame { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { write!(f, "{}", self.celestial_frame.frame)?; write!(f, " (μ = {} km3/s, {})", self.mu_km3_s2(), self.shape) } diff --git a/src/math/interpolation/chebyshev.rs b/src/math/interpolation/chebyshev.rs index 2b27fb3b..ee4cd8ca 100644 --- a/src/math/interpolation/chebyshev.rs +++ b/src/math/interpolation/chebyshev.rs @@ -16,7 +16,7 @@ use crate::prelude::AniseError; /// /// # Notes /// 1. At this point, the splines are expected to be in Chebyshev format and no verification is done. -pub(crate) fn cheby_eval( +pub(crate) fn chebyshev_eval( normalized_time: f64, spline_coeffs: &[f64], spline_radius_s: f64, diff --git a/src/math/polyfit/hermite.rs b/src/math/interpolation/hermite.rs similarity index 97% rename from src/math/polyfit/hermite.rs rename to src/math/interpolation/hermite.rs index ea9f121b..416a8baf 100644 --- a/src/math/polyfit/hermite.rs +++ b/src/math/interpolation/hermite.rs @@ -70,7 +70,7 @@ use super::MAX_SAMPLES; /// 1. Ensure that all provided arrays are of the same size. /// 2. Ensure that there are no more than 32 items to interpolate. /// 3. Ensure no division by zero errors (zero is set to core::f64::EPSILON, which is about 2e-16). -pub fn hermite( +pub fn hermite_eval( xs: &[f64], ys: &[f64], ydots: &[f64], @@ -145,7 +145,7 @@ pub fn hermite( /* compute them now. */ work[4 * n - 2] = work[(2 * n) - 1]; - work[2 * (n - 1)] = work[(2 * n) - 1] * (x_eval - xs[n - 1]) + work[2 * (n - 1)]; + work[2 * (n - 1)] += work[(2 * n) - 1] * (x_eval - xs[n - 1]); /* Compute columns 3 through 2*N of the table. */ @@ -207,7 +207,7 @@ fn hermite_spice_docs_example() { // Check that we can interpolate the values exactly. for (i, t) in ts.iter().enumerate() { - let (eval, deriv) = hermite(&ts, &yvals, &ydotvals, *t).unwrap(); + let (eval, deriv) = hermite_eval(&ts, &yvals, &ydotvals, *t).unwrap(); let eval_err = (eval - yvals[i]).abs(); assert!(eval_err < EPSILON, "f(x) error is {eval_err:e}"); @@ -216,14 +216,14 @@ fn hermite_spice_docs_example() { } // Check the interpolation from the SPICE documentation - let (x, vx) = hermite(&ts, &yvals, &ydotvals, 2.0).unwrap(); + let (x, vx) = hermite_eval(&ts, &yvals, &ydotvals, 2.0).unwrap(); assert!((x - 141.0).abs() < EPSILON, "X error"); assert!((vx - 456.0).abs() < EPSILON, "VX error"); } #[test] -fn hermite_ephem_spline_test2() { +fn hermite_ephem_spline_test() { let epoch_et = 773064069.1841084; let epochs = [ 773063753.0320327, @@ -265,7 +265,7 @@ fn hermite_ephem_spline_test2() { let start_idx = central_idx - (samples - 1) / 2 - 1; let end_idx = central_idx + (samples - 1) / 2 + 1; - let (x, vx) = hermite( + let (x, vx) = hermite_eval( &epochs[start_idx..end_idx + 1], &values[start_idx..end_idx + 1], &values_dt[start_idx..end_idx + 1], diff --git a/src/math/interpolation/mod.rs b/src/math/interpolation/mod.rs index 9cee84ea..8e029546 100644 --- a/src/math/interpolation/mod.rs +++ b/src/math/interpolation/mod.rs @@ -8,6 +8,12 @@ * Documentation: https://nyxspace.com/ */ -// TODO: Consider making a trait for all interpolation schemes. +mod chebyshev; +mod hermite; -pub mod chebyshev; +pub(crate) use chebyshev::chebyshev_eval; +pub(crate) use hermite::hermite_eval; + +/// Defines the maximum degree for an interpolation. +/// Until https://github.com/rust-lang/rust/issues/60551 , we cannot do operations on const generic, so we need some hack around it. +pub(crate) const MAX_SAMPLES: usize = 32; diff --git a/src/math/polyfit/mod.rs b/src/math/polyfit/mod.rs index 358db25a..1ef1b29e 100644 --- a/src/math/polyfit/mod.rs +++ b/src/math/polyfit/mod.rs @@ -8,13 +8,7 @@ * Documentation: https://nyxspace.com/ */ -mod hermite; -pub use hermite::hermite; - -/// Defines the maximum degree for an interpolation. -/// Until https://github.com/rust-lang/rust/issues/60551 , we cannot do operations on const generic, so we need some hack around it. -pub(crate) const MAX_SAMPLES: usize = 32; use core::ops::{Index, IndexMut}; diff --git a/src/naif/spk/datatypes/chebyshev.rs b/src/naif/spk/datatypes/chebyshev.rs index 969e8b80..5e67d308 100644 --- a/src/naif/spk/datatypes/chebyshev.rs +++ b/src/naif/spk/datatypes/chebyshev.rs @@ -12,7 +12,7 @@ use core::fmt; use hifitime::{Duration, Epoch, TimeUnits}; use crate::{ - math::{interpolation::chebyshev::cheby_eval, Vector3}, + math::{interpolation::chebyshev_eval, Vector3}, naif::daf::{NAIFDataRecord, NAIFDataSet}, prelude::AniseError, }; @@ -100,7 +100,8 @@ impl<'a> NAIFDataSet<'a> for Type2ChebyshevSet<'a> { .iter() .enumerate() { - let (val, deriv) = cheby_eval(normalized_time, coeffs, radius_s, epoch, self.degree())?; + let (val, deriv) = + chebyshev_eval(normalized_time, coeffs, radius_s, epoch, self.degree())?; pos[cno] = val; vel[cno] = deriv; } diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs index 50646cb5..7dc2aa19 100644 --- a/src/naif/spk/datatypes/hermite.rs +++ b/src/naif/spk/datatypes/hermite.rs @@ -11,7 +11,7 @@ use core::fmt; use hifitime::{Duration, Epoch, TimeUnits}; -use crate::math::polyfit::{hermite, MAX_SAMPLES}; +use crate::math::interpolation::{hermite_eval, MAX_SAMPLES}; use crate::{ math::{cartesian::CartesianState, Vector3}, naif::daf::{NAIFDataRecord, NAIFDataSet, NAIFRecord}, @@ -209,21 +209,21 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { // Build the interpolation polynomials making sure to limit the slices to exactly the number of items we actually used // The other ones are zeros, which would cause the interpolation function to fail. - let (x_km, vx_km_s) = hermite( - dbg!(&epochs[..self.samples]), - dbg!(&xs[..self.samples]), - dbg!(&vxs[..self.samples]), + let (x_km, vx_km_s) = hermite_eval( + &epochs[..self.samples], + &xs[..self.samples], + &vxs[..self.samples], epoch.to_et_seconds(), )?; - let (y_km, vy_km_s) = hermite( + let (y_km, vy_km_s) = hermite_eval( &epochs[..self.samples], &ys[..self.samples], &vys[..self.samples], epoch.to_et_seconds(), )?; - let (z_km, vz_km_s) = hermite( + let (z_km, vz_km_s) = hermite_eval( &epochs[..self.samples], &zs[..self.samples], &vzs[..self.samples], diff --git a/src/shapes/ellipsoid.rs b/src/shapes/ellipsoid.rs index 999da863..b98d0582 100644 --- a/src/shapes/ellipsoid.rs +++ b/src/shapes/ellipsoid.rs @@ -9,7 +9,7 @@ */ use core::f64::EPSILON; -use core::fmt::{Display, Formatter}; +use core::fmt; /// Only the tri-axial Ellipsoid shape model is currently supported by ANISE. /// This is directly inspired from SPICE PCK. /// > For each body, three radii are listed: The first number is @@ -67,8 +67,8 @@ impl Ellipsoid { } } -impl Display for Ellipsoid { - fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { +impl fmt::Display for Ellipsoid { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { if self.is_sphere() { write!(f, "radius = {} km", self.semi_major_equatorial_radius_km) } else if self.is_spheroid() { diff --git a/tests/ephemerides/mod.rs b/tests/ephemerides/mod.rs index a9a90865..d4091c70 100644 --- a/tests/ephemerides/mod.rs +++ b/tests/ephemerides/mod.rs @@ -11,5 +11,5 @@ mod parent_translation_verif; mod paths; mod translation; -#[cfg(feature = "validation")] +// #[cfg(feature = "validation")] mod validation; diff --git a/tests/ephemerides/validation/hermite_type13.rs b/tests/ephemerides/validation/hermite_type13.rs index 194491c1..7f3a7259 100644 --- a/tests/ephemerides/validation/hermite_type13.rs +++ b/tests/ephemerides/validation/hermite_type13.rs @@ -8,12 +8,7 @@ * Documentation: https://nyxspace.com/ */ -/// For the DE440 and DE438s files, load them in CSPICE (using rust-spice) and in ANISE, compute NUM_QUERIES_PER_PAIR states between each pair of targets in each file (equally spaced for the duration of the ephemeris), -/// store all of the data in a parquet file, and analyze it to make sure that the errors in computation between CSPICE and ANISE are within bounds. -/// WARNING: This is an O(N*log(N)*K) test, where N is the number of items in each SPK file and K is the number of queries per pair, so it's ignored by default. -/// On my computer, in release mode, this test runs in 5.15 seconds. #[test] -#[ignore] #[cfg(feature = "std")] fn validate_hermite_translation() { // ANISE imports @@ -50,7 +45,6 @@ fn validate_hermite_translation() { // Build the schema let schema = Schema::new(vec![ - Field::new("DE file", DataType::Utf8, false), Field::new("source frame", DataType::Utf8, false), Field::new("destination frame", DataType::Utf8, false), Field::new("# hops", DataType::UInt8, false), @@ -60,7 +54,7 @@ fn validate_hermite_translation() { Field::new("relative error (km)", DataType::Float64, false), ]); - let file = File::create("target/validation-test-results.parquet").unwrap(); + let file = File::create("target/type13-validation-test-results.parquet").unwrap(); // Default writer properties let props = WriterProperties::builder().build(); @@ -69,238 +63,236 @@ fn validate_hermite_translation() { let mut num_comparisons: usize = 0; - for de_name in &["de438s", "de440"] { - let path = format!("data/{de_name}.bsp"); - // SPICE load - spice::furnsh(&path); - - // ANISE load - let buf = file_mmap!(path).unwrap(); - let spk = SPK::parse(&buf).unwrap(); - let ctx = Context::from_spk(&spk).unwrap(); - - // We only have one SPK loaded, so we know what summary to go through - let first_spk = ctx.spk_data[0].unwrap(); - - let mut pairs = Vec::new(); + let de_path = format!("data/de440.bsp"); + let hermite_path = format!("data/gmat-hermite.bsp"); + // SPICE load + spice::furnsh(&hermite_path.clone()); + + // ANISE load + let de_path2 = de_path.clone(); + let hermite_path2 = hermite_path.clone(); + let buf = file_mmap!(de_path2).unwrap(); + let de_spk = SPK::parse(&buf).unwrap(); + let hermite_buf = file_mmap!(hermite_path2).unwrap(); + let hermite_spk = SPK::parse(&hermite_buf).unwrap(); + let ctx = Context::from_spk(&de_spk) + .unwrap() + .load_spk(&hermite_spk) + .unwrap(); + println!("{ctx}"); - for ephem1 in first_spk.data_summaries { - let j2000_ephem1 = Frame::from_ephem_j2000(ephem1.target_id); + let first_spk = ctx.spk_data[0].unwrap(); + let second_spk = ctx.spk_data[1].unwrap(); - for ephem2 in first_spk.data_summaries { - if ephem1.target_id == ephem2.target_id { - continue; - } + let mut pairs = Vec::new(); - let key = if ephem1.target_id < ephem2.target_id { - (ephem1.target_id, ephem2.target_id) - } else { - (ephem2.target_id, ephem1.target_id) - }; + for ephem1 in first_spk.data_summaries { + let j2000_ephem1 = Frame::from_ephem_j2000(ephem1.target_id); - if pairs.contains(&key) { - // We're already handled that pair - continue; - } - pairs.push(key); - - let j2000_ephem2 = Frame::from_ephem_j2000(ephem2.target_id); + for ephem2 in second_spk.data_summaries { + if ephem1.target_id == ephem2.target_id { + continue; + } - // Query the ephemeris data for a bunch of different times. - let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { - ephem2.start_epoch() - } else { - ephem1.start_epoch() - }; + let key = if ephem1.target_id < ephem2.target_id { + (ephem1.target_id, ephem2.target_id) + } else { + (ephem2.target_id, ephem1.target_id) + }; - let end_epoch = if ephem1.end_epoch() < ephem2.end_epoch() { - ephem1.end_epoch() - } else { - ephem2.end_epoch() - }; - - let time_step = - ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); - - let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); - - let component = ["X", "Y", "Z", "VX", "VY", "VZ"]; - - let mut batch_de_name = Vec::with_capacity(BATCH_SIZE); - let mut batch_src_frm = Vec::with_capacity(BATCH_SIZE); - let mut batch_dest_frm = Vec::with_capacity(BATCH_SIZE); - let mut batch_comp = Vec::with_capacity(BATCH_SIZE); - let mut batch_epoch = Vec::with_capacity(BATCH_SIZE); - let mut batch_hops = Vec::with_capacity(BATCH_SIZE); - let mut batch_abs = Vec::with_capacity(BATCH_SIZE); - let mut batch_rel = Vec::with_capacity(BATCH_SIZE); - - for (i, epoch) in time_it.enumerate() { - let hops = ctx - .common_ephemeris_path(j2000_ephem1, j2000_ephem2, epoch) - .unwrap() - .0 as u8; - - match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { - Ok(state) => { - num_comparisons += 1; - // Perform the same query in SPICE - let (spice_state, _) = spice::spkezr( - ephem1.spice_name().unwrap(), - epoch.to_et_seconds(), - "J2000", - "NONE", - ephem2.spice_name().unwrap(), - ); - - // Check component by component instead of rebuilding a Vector3 from the SPICE data - for i in 0..6 { - let (anise_value, max_err) = if i < 3 { - (state.radius_km[i], FAIL_POS_KM) - } else { - (state.velocity_km_s[i - 3], FAIL_VEL_KM_S) - }; - - // We don't look at the absolute error here, that's for the stats to show any skewness - let abs_err = abs_diff(anise_value, spice_state[i]); - let rel_err = rel_diff(anise_value, spice_state[i], EPSILON); - - if !relative_eq!(anise_value, spice_state[i], epsilon = max_err) { - // Always save the parquet file - writer.close().unwrap(); - - panic!( - "{epoch:E}\t{}got = {:.16}\texp = {:.16}\terr = {:.16}", - component[i], anise_value, spice_state[i], rel_err - ); - } - - // Update data - - batch_de_name.push(de_name.clone()); - batch_src_frm.push(j2000_ephem1.to_string()); - batch_dest_frm.push(j2000_ephem2.to_string()); - batch_hops.push(hops); - batch_comp.push(component[i]); - batch_epoch.push((epoch - start_epoch).to_seconds()); - batch_abs.push(abs_err); - batch_rel.push(rel_err); + if pairs.contains(&key) { + // We're already handled that pair + panic!(); + } + pairs.push(key); + + let j2000_ephem2 = Frame::from_ephem_j2000(ephem2.target_id); + + // Query the ephemeris data for a bunch of different times. + let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { + ephem2.start_epoch() + } else { + ephem1.start_epoch() + }; + + let end_epoch = if ephem1.end_epoch() < ephem2.end_epoch() { + ephem1.end_epoch() + } else { + ephem2.end_epoch() + }; + + let time_step = + ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); + + let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); + + let component = ["X", "Y", "Z", "VX", "VY", "VZ"]; + + let mut batch_src_frm = Vec::with_capacity(BATCH_SIZE); + let mut batch_dest_frm = Vec::with_capacity(BATCH_SIZE); + let mut batch_comp = Vec::with_capacity(BATCH_SIZE); + let mut batch_epoch = Vec::with_capacity(BATCH_SIZE); + let mut batch_hops = Vec::with_capacity(BATCH_SIZE); + let mut batch_abs = Vec::with_capacity(BATCH_SIZE); + let mut batch_rel = Vec::with_capacity(BATCH_SIZE); + + for (i, epoch) in time_it.enumerate() { + let hops = ctx + .common_ephemeris_path(j2000_ephem1, j2000_ephem2, epoch) + .unwrap() + .0 as u8; + + match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { + Ok(state) => { + num_comparisons += 1; + // Perform the same query in SPICE + let (spice_state, _) = spice::spkezr( + ephem1.spice_name().unwrap(), + epoch.to_et_seconds(), + "J2000", + "NONE", + &format!("{}", ephem2.target_id), + ); + + // Check component by component instead of rebuilding a Vector3 from the SPICE data + for i in 0..6 { + let (anise_value, max_err) = if i < 3 { + (state.radius_km[i], FAIL_POS_KM) + } else { + (state.velocity_km_s[i - 3], FAIL_VEL_KM_S) + }; + + // We don't look at the absolute error here, that's for the stats to show any skewness + let abs_err = abs_diff(anise_value, spice_state[i]); + let rel_err = rel_diff(anise_value, spice_state[i], EPSILON); + + if !relative_eq!(anise_value, spice_state[i], epsilon = max_err) { + // Always save the parquet file + // writer.close().unwrap(); + + println!( + "{epoch:E}\t{}got = {:.16}\texp = {:.16}\terr = {:.16}", + component[i], anise_value, spice_state[i], rel_err + ); } - // Consider writing the batch - if i % BATCH_SIZE == 0 { - writer - .write( - &RecordBatch::try_from_iter(vec![ - ( - "DE file", - Arc::new(StringArray::from(batch_de_name.clone())) - as ArrayRef, - ), - ( - "source frame", - Arc::new(StringArray::from(batch_src_frm.clone())) - as ArrayRef, - ), - ( - "destination frame", - Arc::new(StringArray::from(batch_dest_frm.clone())) - as ArrayRef, - ), - ( - "# hops", - Arc::new(UInt8Array::from(batch_hops.clone())) - as ArrayRef, - ), - ( - "component", - Arc::new(StringArray::from(batch_comp.clone())) - as ArrayRef, - ), - ( - "File delta T (s)", - Arc::new(Float64Array::from(batch_epoch.clone())) - as ArrayRef, - ), - ( - "absolute error (km)", - Arc::new(Float64Array::from(batch_abs.clone())) - as ArrayRef, - ), - ( - "relative error (km)", - Arc::new(Float64Array::from(batch_rel.clone())) - as ArrayRef, - ), - ]) - .unwrap(), - ) - .unwrap(); - // Re-init all of the vectors - batch_de_name = Vec::with_capacity(BATCH_SIZE); - batch_src_frm = Vec::with_capacity(BATCH_SIZE); - batch_dest_frm = Vec::with_capacity(BATCH_SIZE); - batch_comp = Vec::with_capacity(BATCH_SIZE); - batch_epoch = Vec::with_capacity(BATCH_SIZE); - batch_hops = Vec::with_capacity(BATCH_SIZE); - batch_abs = Vec::with_capacity(BATCH_SIZE); - batch_rel = Vec::with_capacity(BATCH_SIZE); - } + // Update data + + batch_src_frm.push(j2000_ephem1.to_string()); + batch_dest_frm.push(j2000_ephem2.to_string()); + batch_hops.push(hops); + batch_comp.push(component[i]); + batch_epoch.push((epoch - start_epoch).to_seconds()); + batch_abs.push(abs_err); + batch_rel.push(rel_err); } - Err(e) => { - // Always save the parquet file - // writer.close().unwrap(); - error!("At epoch {epoch:E}: {e}"); + + // Consider writing the batch + if i % BATCH_SIZE == 0 { + writer + .write( + &RecordBatch::try_from_iter(vec![ + ( + "source frame", + Arc::new(StringArray::from(batch_src_frm.clone())) + as ArrayRef, + ), + ( + "destination frame", + Arc::new(StringArray::from(batch_dest_frm.clone())) + as ArrayRef, + ), + ( + "# hops", + Arc::new(UInt8Array::from(batch_hops.clone())) + as ArrayRef, + ), + ( + "component", + Arc::new(StringArray::from(batch_comp.clone())) + as ArrayRef, + ), + ( + "File delta T (s)", + Arc::new(Float64Array::from(batch_epoch.clone())) + as ArrayRef, + ), + ( + "absolute error (km)", + Arc::new(Float64Array::from(batch_abs.clone())) + as ArrayRef, + ), + ( + "relative error (km)", + Arc::new(Float64Array::from(batch_rel.clone())) + as ArrayRef, + ), + ]) + .unwrap(), + ) + .unwrap(); + // Re-init all of the vectors + batch_src_frm = Vec::with_capacity(BATCH_SIZE); + batch_dest_frm = Vec::with_capacity(BATCH_SIZE); + batch_comp = Vec::with_capacity(BATCH_SIZE); + batch_epoch = Vec::with_capacity(BATCH_SIZE); + batch_hops = Vec::with_capacity(BATCH_SIZE); + batch_abs = Vec::with_capacity(BATCH_SIZE); + batch_rel = Vec::with_capacity(BATCH_SIZE); } - }; - } - - writer - .write( - &RecordBatch::try_from_iter(vec![ - ( - "DE file", - Arc::new(StringArray::from(batch_de_name)) as ArrayRef, - ), - ( - "source frame", - Arc::new(StringArray::from(batch_src_frm)) as ArrayRef, - ), - ( - "destination frame", - Arc::new(StringArray::from(batch_dest_frm)) as ArrayRef, - ), - ("# hops", Arc::new(UInt8Array::from(batch_hops)) as ArrayRef), - ( - "component", - Arc::new(StringArray::from(batch_comp)) as ArrayRef, - ), - ( - "File delta T (s)", - Arc::new(Float64Array::from(batch_epoch)) as ArrayRef, - ), - ( - "absolute error (km)", - Arc::new(Float64Array::from(batch_abs)) as ArrayRef, - ), - ( - "relative error (km)", - Arc::new(Float64Array::from(batch_rel)) as ArrayRef, - ), - ]) - .unwrap(), - ) - .unwrap(); - - // Regularly flush to not lose data - writer.flush().unwrap(); + } + Err(e) => { + // Always save the parquet file + // writer.close().unwrap(); + error!("At epoch {epoch:E}: {e}"); + } + }; } - info!("[{de_name}] done with {}", j2000_ephem1); + writer + .write( + &RecordBatch::try_from_iter(vec![ + ( + "source frame", + Arc::new(StringArray::from(batch_src_frm)) as ArrayRef, + ), + ( + "destination frame", + Arc::new(StringArray::from(batch_dest_frm)) as ArrayRef, + ), + ("# hops", Arc::new(UInt8Array::from(batch_hops)) as ArrayRef), + ( + "component", + Arc::new(StringArray::from(batch_comp)) as ArrayRef, + ), + ( + "File delta T (s)", + Arc::new(Float64Array::from(batch_epoch)) as ArrayRef, + ), + ( + "absolute error (km)", + Arc::new(Float64Array::from(batch_abs)) as ArrayRef, + ), + ( + "relative error (km)", + Arc::new(Float64Array::from(batch_rel)) as ArrayRef, + ), + ]) + .unwrap(), + ) + .unwrap(); + + // Regularly flush to not lose data + writer.flush().unwrap(); } - // Unload SPICE (note that this is not needed for ANISE because it falls out of scope) - spice::unload(&format!("data/{de_name}.bsp")); + + info!("done with {}", j2000_ephem1); } + // Unload SPICE (note that this is not needed for ANISE because it falls out of scope) + // spice::unload(&format!("data/{hermite_path}.bsp")); + spice::unload(&de_path); + spice::unload(&hermite_path); + // Save the parquet file writer.close().unwrap(); diff --git a/tests/ephemerides/validation/jplde_cheby_type2.rs b/tests/ephemerides/validation/jplde_cheby_type2.rs index 3dc6cab7..182a2401 100644 --- a/tests/ephemerides/validation/jplde_cheby_type2.rs +++ b/tests/ephemerides/validation/jplde_cheby_type2.rs @@ -13,7 +13,6 @@ /// WARNING: This is an O(N*log(N)*K) test, where N is the number of items in each SPK file and K is the number of queries per pair, so it's ignored by default. /// On my computer, in release mode, this test runs in 5.15 seconds. #[test] -#[ignore] #[cfg(feature = "std")] fn validate_jplde_translation() { // ANISE imports From c84c12479695a2caf2eda4bdc3967e197ff9a94c Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Mon, 28 Nov 2022 00:08:07 -0700 Subject: [PATCH 35/48] Woop woop Signed-off-by: Christopher Rabotin --- src/context/mod.rs | 2 - src/naif/spk/datatypes/hermite.rs | 4 +- tests/ephemerides/mod.rs | 2 +- .../ephemerides/validation/hermite_type13.rs | 376 ++++++++---------- 4 files changed, 175 insertions(+), 209 deletions(-) diff --git a/src/context/mod.rs b/src/context/mod.rs index 663cefc9..11543766 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -129,8 +129,6 @@ impl<'a: 'b, 'b> Context<'a> { if let Ok((summary, idx_in_spk)) = spk.summary_from_id_at_epoch(id, epoch) { // NOTE: We're iterating backward, so the correct SPK number is "total loaded" minus "current iteration". return Ok((summary, self.num_loaded_spk() - spkno - 1, idx_in_spk)); - } else { - error!("Nothing in {spkno}"); } } diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs index 7dc2aa19..7991fe56 100644 --- a/src/naif/spk/datatypes/hermite.rs +++ b/src/naif/spk/datatypes/hermite.rs @@ -183,7 +183,7 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { { (self.num_records - self.samples - 1, self.samples - 1) } else { - dbg!(idx - (self.samples - 1) / 2, idx + (self.samples - 1) / 2) + (idx - (self.samples - 1) / 2, idx + (self.samples - 1) / 2) }; // Statically allocated arrays of the maximum number of samples @@ -234,8 +234,6 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { let pos_km = Vector3::new(x_km, y_km, z_km); let vel_km_s = Vector3::new(vx_km_s, vy_km_s, vz_km_s); - dbg!(pos_km, vel_km_s); - Ok((pos_km, vel_km_s)) } } diff --git a/tests/ephemerides/mod.rs b/tests/ephemerides/mod.rs index d4091c70..a9a90865 100644 --- a/tests/ephemerides/mod.rs +++ b/tests/ephemerides/mod.rs @@ -11,5 +11,5 @@ mod parent_translation_verif; mod paths; mod translation; -// #[cfg(feature = "validation")] +#[cfg(feature = "validation")] mod validation; diff --git a/tests/ephemerides/validation/hermite_type13.rs b/tests/ephemerides/validation/hermite_type13.rs index 7f3a7259..81465eac 100644 --- a/tests/ephemerides/validation/hermite_type13.rs +++ b/tests/ephemerides/validation/hermite_type13.rs @@ -11,6 +11,7 @@ #[test] #[cfg(feature = "std")] fn validate_hermite_translation() { + use anise::constants::frames::EARTH_J2000; // ANISE imports use anise::file_mmap; use anise::math::utils::{abs_diff, rel_diff}; @@ -81,213 +82,180 @@ fn validate_hermite_translation() { .unwrap(); println!("{ctx}"); - let first_spk = ctx.spk_data[0].unwrap(); - let second_spk = ctx.spk_data[1].unwrap(); + let sc_naif_id = -10000001; - let mut pairs = Vec::new(); + // We loaded the spacecraft second, so we're just grabbing that directly, but really, users should not be doing that. + let sc_spk = ctx.spk_data[1] + .unwrap() + .summary_from_id(sc_naif_id) + .unwrap() + .0; + + let j2000_spacecraft = Frame::from_ephem_j2000(sc_naif_id); // From GMAT setup + + let j2000_ephem2 = EARTH_J2000; + + // Query the ephemeris data for a bunch of different times. + let start_epoch = sc_spk.start_epoch(); + + let end_epoch = sc_spk.end_epoch(); + + let time_step = ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); + + let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); + + let component = ["X", "Y", "Z", "VX", "VY", "VZ"]; + + let mut batch_src_frm = Vec::with_capacity(BATCH_SIZE); + let mut batch_dest_frm = Vec::with_capacity(BATCH_SIZE); + let mut batch_comp = Vec::with_capacity(BATCH_SIZE); + let mut batch_epoch = Vec::with_capacity(BATCH_SIZE); + let mut batch_hops = Vec::with_capacity(BATCH_SIZE); + let mut batch_abs = Vec::with_capacity(BATCH_SIZE); + let mut batch_rel = Vec::with_capacity(BATCH_SIZE); + + for (i, epoch) in time_it.enumerate() { + let hops = ctx + .common_ephemeris_path(j2000_ephem2, j2000_spacecraft, epoch) + .unwrap() + .0 as u8; + + match ctx.translate_from_to_km_s_geometric(j2000_ephem2, j2000_spacecraft, epoch) { + Ok(state) => { + num_comparisons += 1; + // Perform the same query in SPICE + let (spice_state, _) = spice::spkezr( + "EARTH", + epoch.to_et_seconds(), + "J2000", + "NONE", + &format!("{}", sc_naif_id), + ); + + // Check component by component instead of rebuilding a Vector3 from the SPICE data + for i in 0..6 { + let (anise_value, max_err) = if i < 3 { + (state.radius_km[i], FAIL_POS_KM) + } else { + (state.velocity_km_s[i - 3], FAIL_VEL_KM_S) + }; + + // We don't look at the absolute error here, that's for the stats to show any skewness + let abs_err = abs_diff(anise_value, spice_state[i]); + let rel_err = rel_diff(anise_value, spice_state[i], EPSILON); + + if !relative_eq!(anise_value, spice_state[i], epsilon = max_err) { + // Always save the parquet file + // writer.close().unwrap(); - for ephem1 in first_spk.data_summaries { - let j2000_ephem1 = Frame::from_ephem_j2000(ephem1.target_id); + println!( + "{epoch:E}\t{}got = {:.16}\texp = {:.16}\terr = {:.16}", + component[i], anise_value, spice_state[i], rel_err + ); + } - for ephem2 in second_spk.data_summaries { - if ephem1.target_id == ephem2.target_id { - continue; + // Update data + + batch_src_frm.push(j2000_spacecraft.to_string()); + batch_dest_frm.push(j2000_ephem2.to_string()); + batch_hops.push(hops); + batch_comp.push(component[i]); + batch_epoch.push((epoch - start_epoch).to_seconds()); + batch_abs.push(abs_err); + batch_rel.push(rel_err); + } + + // Consider writing the batch + if i % BATCH_SIZE == 0 { + writer + .write( + &RecordBatch::try_from_iter(vec![ + ( + "source frame", + Arc::new(StringArray::from(batch_src_frm.clone())) as ArrayRef, + ), + ( + "destination frame", + Arc::new(StringArray::from(batch_dest_frm.clone())) as ArrayRef, + ), + ( + "# hops", + Arc::new(UInt8Array::from(batch_hops.clone())) as ArrayRef, + ), + ( + "component", + Arc::new(StringArray::from(batch_comp.clone())) as ArrayRef, + ), + ( + "File delta T (s)", + Arc::new(Float64Array::from(batch_epoch.clone())) as ArrayRef, + ), + ( + "absolute error (km)", + Arc::new(Float64Array::from(batch_abs.clone())) as ArrayRef, + ), + ( + "relative error (km)", + Arc::new(Float64Array::from(batch_rel.clone())) as ArrayRef, + ), + ]) + .unwrap(), + ) + .unwrap(); + // Re-init all of the vectors + batch_src_frm = Vec::with_capacity(BATCH_SIZE); + batch_dest_frm = Vec::with_capacity(BATCH_SIZE); + batch_comp = Vec::with_capacity(BATCH_SIZE); + batch_epoch = Vec::with_capacity(BATCH_SIZE); + batch_hops = Vec::with_capacity(BATCH_SIZE); + batch_abs = Vec::with_capacity(BATCH_SIZE); + batch_rel = Vec::with_capacity(BATCH_SIZE); + } } - - let key = if ephem1.target_id < ephem2.target_id { - (ephem1.target_id, ephem2.target_id) - } else { - (ephem2.target_id, ephem1.target_id) - }; - - if pairs.contains(&key) { - // We're already handled that pair - panic!(); + Err(e) => { + // Always save the parquet file + // writer.close().unwrap(); + error!("At epoch {epoch:E}: {e}"); } - pairs.push(key); - - let j2000_ephem2 = Frame::from_ephem_j2000(ephem2.target_id); - - // Query the ephemeris data for a bunch of different times. - let start_epoch = if ephem1.start_epoch() < ephem2.start_epoch() { - ephem2.start_epoch() - } else { - ephem1.start_epoch() - }; - - let end_epoch = if ephem1.end_epoch() < ephem2.end_epoch() { - ephem1.end_epoch() - } else { - ephem2.end_epoch() - }; - - let time_step = - ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); - - let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); - - let component = ["X", "Y", "Z", "VX", "VY", "VZ"]; - - let mut batch_src_frm = Vec::with_capacity(BATCH_SIZE); - let mut batch_dest_frm = Vec::with_capacity(BATCH_SIZE); - let mut batch_comp = Vec::with_capacity(BATCH_SIZE); - let mut batch_epoch = Vec::with_capacity(BATCH_SIZE); - let mut batch_hops = Vec::with_capacity(BATCH_SIZE); - let mut batch_abs = Vec::with_capacity(BATCH_SIZE); - let mut batch_rel = Vec::with_capacity(BATCH_SIZE); - - for (i, epoch) in time_it.enumerate() { - let hops = ctx - .common_ephemeris_path(j2000_ephem1, j2000_ephem2, epoch) - .unwrap() - .0 as u8; - - match ctx.translate_from_to_km_s_geometric(j2000_ephem1, j2000_ephem2, epoch) { - Ok(state) => { - num_comparisons += 1; - // Perform the same query in SPICE - let (spice_state, _) = spice::spkezr( - ephem1.spice_name().unwrap(), - epoch.to_et_seconds(), - "J2000", - "NONE", - &format!("{}", ephem2.target_id), - ); + }; + } - // Check component by component instead of rebuilding a Vector3 from the SPICE data - for i in 0..6 { - let (anise_value, max_err) = if i < 3 { - (state.radius_km[i], FAIL_POS_KM) - } else { - (state.velocity_km_s[i - 3], FAIL_VEL_KM_S) - }; - - // We don't look at the absolute error here, that's for the stats to show any skewness - let abs_err = abs_diff(anise_value, spice_state[i]); - let rel_err = rel_diff(anise_value, spice_state[i], EPSILON); - - if !relative_eq!(anise_value, spice_state[i], epsilon = max_err) { - // Always save the parquet file - // writer.close().unwrap(); - - println!( - "{epoch:E}\t{}got = {:.16}\texp = {:.16}\terr = {:.16}", - component[i], anise_value, spice_state[i], rel_err - ); - } - - // Update data - - batch_src_frm.push(j2000_ephem1.to_string()); - batch_dest_frm.push(j2000_ephem2.to_string()); - batch_hops.push(hops); - batch_comp.push(component[i]); - batch_epoch.push((epoch - start_epoch).to_seconds()); - batch_abs.push(abs_err); - batch_rel.push(rel_err); - } - - // Consider writing the batch - if i % BATCH_SIZE == 0 { - writer - .write( - &RecordBatch::try_from_iter(vec![ - ( - "source frame", - Arc::new(StringArray::from(batch_src_frm.clone())) - as ArrayRef, - ), - ( - "destination frame", - Arc::new(StringArray::from(batch_dest_frm.clone())) - as ArrayRef, - ), - ( - "# hops", - Arc::new(UInt8Array::from(batch_hops.clone())) - as ArrayRef, - ), - ( - "component", - Arc::new(StringArray::from(batch_comp.clone())) - as ArrayRef, - ), - ( - "File delta T (s)", - Arc::new(Float64Array::from(batch_epoch.clone())) - as ArrayRef, - ), - ( - "absolute error (km)", - Arc::new(Float64Array::from(batch_abs.clone())) - as ArrayRef, - ), - ( - "relative error (km)", - Arc::new(Float64Array::from(batch_rel.clone())) - as ArrayRef, - ), - ]) - .unwrap(), - ) - .unwrap(); - // Re-init all of the vectors - batch_src_frm = Vec::with_capacity(BATCH_SIZE); - batch_dest_frm = Vec::with_capacity(BATCH_SIZE); - batch_comp = Vec::with_capacity(BATCH_SIZE); - batch_epoch = Vec::with_capacity(BATCH_SIZE); - batch_hops = Vec::with_capacity(BATCH_SIZE); - batch_abs = Vec::with_capacity(BATCH_SIZE); - batch_rel = Vec::with_capacity(BATCH_SIZE); - } - } - Err(e) => { - // Always save the parquet file - // writer.close().unwrap(); - error!("At epoch {epoch:E}: {e}"); - } - }; - } + writer + .write( + &RecordBatch::try_from_iter(vec![ + ( + "source frame", + Arc::new(StringArray::from(batch_src_frm)) as ArrayRef, + ), + ( + "destination frame", + Arc::new(StringArray::from(batch_dest_frm)) as ArrayRef, + ), + ("# hops", Arc::new(UInt8Array::from(batch_hops)) as ArrayRef), + ( + "component", + Arc::new(StringArray::from(batch_comp)) as ArrayRef, + ), + ( + "File delta T (s)", + Arc::new(Float64Array::from(batch_epoch)) as ArrayRef, + ), + ( + "absolute error (km)", + Arc::new(Float64Array::from(batch_abs)) as ArrayRef, + ), + ( + "relative error (km)", + Arc::new(Float64Array::from(batch_rel)) as ArrayRef, + ), + ]) + .unwrap(), + ) + .unwrap(); - writer - .write( - &RecordBatch::try_from_iter(vec![ - ( - "source frame", - Arc::new(StringArray::from(batch_src_frm)) as ArrayRef, - ), - ( - "destination frame", - Arc::new(StringArray::from(batch_dest_frm)) as ArrayRef, - ), - ("# hops", Arc::new(UInt8Array::from(batch_hops)) as ArrayRef), - ( - "component", - Arc::new(StringArray::from(batch_comp)) as ArrayRef, - ), - ( - "File delta T (s)", - Arc::new(Float64Array::from(batch_epoch)) as ArrayRef, - ), - ( - "absolute error (km)", - Arc::new(Float64Array::from(batch_abs)) as ArrayRef, - ), - ( - "relative error (km)", - Arc::new(Float64Array::from(batch_rel)) as ArrayRef, - ), - ]) - .unwrap(), - ) - .unwrap(); - - // Regularly flush to not lose data - writer.flush().unwrap(); - } + // Regularly flush to not lose data + writer.flush().unwrap(); - info!("done with {}", j2000_ephem1); - } // Unload SPICE (note that this is not needed for ANISE because it falls out of scope) // spice::unload(&format!("data/{hermite_path}.bsp")); spice::unload(&de_path); @@ -300,8 +268,11 @@ fn validate_hermite_translation() { // And now, analyze the parquet file! - let df = LazyFrame::scan_parquet("target/validation-test-results.parquet", Default::default()) - .unwrap(); + let df = LazyFrame::scan_parquet( + "target/type13-validation-test-results.parquet", + Default::default(), + ) + .unwrap(); const TYPICAL_REL_ERR_KM: f64 = 1e-7; // Allow up to 100 micrometers of error. const MAX_REL_ERR_KM: f64 = 1e-5; // Allow up to 1 centimeter of error. @@ -407,7 +378,6 @@ fn validate_hermite_translation() { col("absolute error (km)"), col("relative error (km)"), col("File delta T (s)"), - col("DE file"), col("source frame"), col("destination frame"), max("component"), @@ -416,7 +386,7 @@ fn validate_hermite_translation() { .unwrap(); println!("{}", outliers); - let outfile = "target/validation-outliers.parquet"; + let outfile = "target/type13-validation-outliers.parquet"; let mut file = std::fs::File::create(outfile).unwrap(); ParquetWriter::new(&mut file).finish(&mut outliers).unwrap(); From 6183f71de3e46ab9ab0b5191a9b561c84d837803 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Mon, 28 Nov 2022 00:10:55 -0700 Subject: [PATCH 36/48] Format + clippy Eventually, I'll remove F64TupleArray Signed-off-by: Christopher Rabotin --- src/math/polyfit/mod.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/math/polyfit/mod.rs b/src/math/polyfit/mod.rs index 1ef1b29e..f1f13861 100644 --- a/src/math/polyfit/mod.rs +++ b/src/math/polyfit/mod.rs @@ -8,17 +8,15 @@ * Documentation: https://nyxspace.com/ */ - - use core::ops::{Index, IndexMut}; /// A FixedArray is a a way around allocating vectors when we don't know the exact size at compile time. /// This will be made obsolete when https://github.com/rust-lang/rust/issues/60551 is merged into rust stable. #[derive(Copy, Clone, Debug)] -struct F64TupleArray([[f64; N]; S]); +pub struct F64TupleArray([[f64; N]; S]); impl F64TupleArray { - fn zeros() -> Self { + pub fn zeros() -> Self { Self([[0.0; N]; S]) } From ac4952bbec7436f84bc83b3272f4e9b27116d7b9 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Mon, 28 Nov 2022 00:10:55 -0700 Subject: [PATCH 37/48] Format + clippy Eventually, I'll remove F64TupleArray Signed-off-by: Christopher Rabotin --- src/math/interpolation/hermite.rs | 66 ------------------------------- src/math/polyfit/mod.rs | 6 +-- 2 files changed, 2 insertions(+), 70 deletions(-) diff --git a/src/math/interpolation/hermite.rs b/src/math/interpolation/hermite.rs index 416a8baf..620ddcbb 100644 --- a/src/math/interpolation/hermite.rs +++ b/src/math/interpolation/hermite.rs @@ -221,69 +221,3 @@ fn hermite_spice_docs_example() { assert!((x - 141.0).abs() < EPSILON, "X error"); assert!((vx - 456.0).abs() < EPSILON, "VX error"); } - -#[test] -fn hermite_ephem_spline_test() { - let epoch_et = 773064069.1841084; - let epochs = [ - 773063753.0320327, - 773063842.6860328, - 773063932.1790327, - 773064021.5950327, - 773064111.0160326, - 773064200.4970326, - 773064290.0490326, - 773064379.5660326, - 773064467.8020325, - ]; - let values = [ - 1264.0276092333008, - 1169.380111723055, - 1067.501355281949, - 958.9770086109238, - 844.4072328473662, - 724.4430188794065, - 599.8186349004518, - 471.46623936222625, - 342.04349989730264, - ]; - let values_dt = [ - -1.0119972729331588, - -1.0982621220038147, - -1.1773202325269372, - -1.248793644639029, - -1.3123304769876323, - -1.3675873394086253, - -1.414230273831576, - -1.4519274117465721, - -1.4801351852184736, - ]; - - // Normalize the epochs between -1.0 and 1.0 - let samples = 7; - let central_idx = 4; - let start_idx = central_idx - (samples - 1) / 2 - 1; - let end_idx = central_idx + (samples - 1) / 2 + 1; - - let (x, vx) = hermite_eval( - &epochs[start_idx..end_idx + 1], - &values[start_idx..end_idx + 1], - &values_dt[start_idx..end_idx + 1], - epoch_et, - ) - .unwrap(); - - let want_x = 8.9871033515359500e+02; - let want_vx = -1.2836208430532707e+00; - - assert!( - (x - want_x).abs() < 1e-8, - "Error in X of {} km", - (x - want_x).abs() - ); - assert!( - (vx - want_vx).abs() < 1e-10, - "Error in VX of {} km/s", - (vx - want_vx).abs() - ); -} diff --git a/src/math/polyfit/mod.rs b/src/math/polyfit/mod.rs index 1ef1b29e..f1f13861 100644 --- a/src/math/polyfit/mod.rs +++ b/src/math/polyfit/mod.rs @@ -8,17 +8,15 @@ * Documentation: https://nyxspace.com/ */ - - use core::ops::{Index, IndexMut}; /// A FixedArray is a a way around allocating vectors when we don't know the exact size at compile time. /// This will be made obsolete when https://github.com/rust-lang/rust/issues/60551 is merged into rust stable. #[derive(Copy, Clone, Debug)] -struct F64TupleArray([[f64; N]; S]); +pub struct F64TupleArray([[f64; N]; S]); impl F64TupleArray { - fn zeros() -> Self { + pub fn zeros() -> Self { Self([[0.0; N]; S]) } From 51b8cb63c16ff14ad1b832a7f2e8e6177292fdf1 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Mon, 28 Nov 2022 00:16:59 -0700 Subject: [PATCH 38/48] Add CSPICE installation in tests Signed-off-by: Christopher Rabotin --- .github/workflows/tests.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b84edb60..6a41a198 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -49,6 +49,9 @@ jobs: toolchain: stable override: true + - name: Install CSPICE + run: sh dev-env-setup.sh + - name: Test debug (default features) # This has overflow checks etc. run: cargo test From 2b430a3ea383d1dbcaf92b48c2a373f1a2f1f407 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Mon, 28 Nov 2022 00:33:02 -0700 Subject: [PATCH 39/48] Rename benches Signed-off-by: Christopher Rabotin --- .github/workflows/tests.yml | 5 ++++- benches/crit_ephemerides.rs | 12 ++++++------ benches/iai_ephemerides.rs | 9 ++++++--- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6a41a198..bdab95ce 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -50,7 +50,7 @@ jobs: override: true - name: Install CSPICE - run: sh dev-env-setup.sh + run: sh dev-env-setup.sh && cd .. # Return to root - name: Test debug (default features) # This has overflow checks etc. run: cargo test @@ -64,6 +64,9 @@ jobs: - name: Test (no default features and release) run: cargo test --no-default-features --release + - name: CLI SPK + run: cargo run -- inspect data/gmat-hermite.bsp && cargo run -- inspect data/de440.bsp + - name: Rust-SPICE JPL DE validation run: RUST_BACKTRACE=full RUST_LOG=debug cargo test validate_jplde_translation --features validation --release -- --nocapture diff --git a/benches/crit_ephemerides.rs b/benches/crit_ephemerides.rs index 11cf53d8..34f91d36 100644 --- a/benches/crit_ephemerides.rs +++ b/benches/crit_ephemerides.rs @@ -9,7 +9,7 @@ use spice; const NUM_QUERIES_PER_PAIR: f64 = 100.0; -fn benchmark_single_hop_spice(time_it: TimeSeries) { +fn benchmark_spice_single_hop_type2_cheby(time_it: TimeSeries) { for epoch in time_it { black_box(spice::spkezr( "EARTH", @@ -21,7 +21,7 @@ fn benchmark_single_hop_spice(time_it: TimeSeries) { } } -fn benchmark_single_hop_anise(ctx: &Context, time_it: TimeSeries) { +fn benchmark_anise_single_hop_type2_cheby(ctx: &Context, time_it: TimeSeries) { for epoch in time_it { black_box( ctx.translate_from_to_km_s_geometric(EARTH_J2000, LUNA_J2000, epoch) @@ -46,13 +46,13 @@ pub fn criterion_benchmark(c: &mut Criterion) { spice::furnsh("data/de438s.bsp"); c.bench_function("ANISE ephemerides single hop", |b| { - b.iter(|| benchmark_single_hop_anise(&ctx, time_it.clone())) + b.iter(|| benchmark_anise_single_hop_type2_cheby(&ctx, time_it.clone())) }); c.bench_function("SPICE ephemerides single hop", |b| { - b.iter(|| benchmark_single_hop_spice(time_it.clone())) + b.iter(|| benchmark_spice_single_hop_type2_cheby(time_it.clone())) }); } -criterion_group!(benches, criterion_benchmark); -criterion_main!(benches); +criterion_group!(de438s, criterion_benchmark); +criterion_main!(de438s); diff --git a/benches/iai_ephemerides.rs b/benches/iai_ephemerides.rs index c9f291db..39c30e80 100644 --- a/benches/iai_ephemerides.rs +++ b/benches/iai_ephemerides.rs @@ -9,7 +9,7 @@ use spice; const NUM_QUERIES_PER_PAIR: f64 = 100.0; -fn benchmark_single_hop_spice() { +fn benchmark_spice_single_hop_type2_cheby() { let start_epoch = Epoch::from_gregorian_at_noon(1900, 1, 1, TimeScale::ET); let end_epoch = Epoch::from_gregorian_at_noon(2099, 1, 1, TimeScale::ET); let time_step = ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); @@ -31,7 +31,7 @@ fn benchmark_single_hop_spice() { spice::unload("data/de438s.bsp"); } -fn benchmark_single_hop_anise() { +fn benchmark_anise_single_hop_type2_cheby() { let start_epoch = Epoch::from_gregorian_at_noon(1900, 1, 1, TimeScale::ET); let end_epoch = Epoch::from_gregorian_at_noon(2099, 1, 1, TimeScale::ET); let time_step = ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES_PER_PAIR).seconds(); @@ -50,4 +50,7 @@ fn benchmark_single_hop_anise() { } } -iai::main!(benchmark_single_hop_spice, benchmark_single_hop_anise); +iai::main!( + benchmark_spice_single_hop_type2_cheby, + benchmark_anise_single_hop_type2_cheby +); From 6f29db995b38c1f222ef8716d0f1ffaaf051c74b Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Tue, 29 Nov 2022 17:41:56 -0700 Subject: [PATCH 40/48] Expand benchmarks and add those to the tests Hopefully this also stores the artifacts, but I'm not sure this will work Signed-off-by: Christopher Rabotin --- .github/workflows/benchmarks.yml | 55 +++++++++ .github/workflows/tests.yml | 4 +- Cargo.toml | 8 +- analysis/de_val_err.py | 26 ++-- ...ephemerides.rs => crit_jpl_ephemerides.rs} | 0 ..._ephemerides.rs => iai_jpl_ephemerides.rs} | 0 benches/iai_spacecraft_ephemeris.rs | 49 ++++++++ src/math/interpolation/chebyshev.rs | 7 +- src/math/interpolation/hermite.rs | 8 ++ src/naif/daf/daf.rs | 2 +- src/naif/daf/mod.rs | 4 +- src/naif/spk/datatypes/chebyshev.rs | 14 ++- src/naif/spk/datatypes/hermite.rs | 27 +++- src/naif/spk/datatypes/lagrange.rs | 27 +++- tests/ephemerides/mod.rs | 10 ++ tests/ephemerides/translation.rs | 36 +++--- .../ephemerides/validation/hermite_type13.rs | 92 +++++++------- .../validation/jplde_cheby_type2.rs | 116 ++++++++---------- 18 files changed, 321 insertions(+), 164 deletions(-) create mode 100644 .github/workflows/benchmarks.yml rename benches/{crit_ephemerides.rs => crit_jpl_ephemerides.rs} (100%) rename benches/{iai_ephemerides.rs => iai_jpl_ephemerides.rs} (100%) create mode 100644 benches/iai_spacecraft_ephemeris.rs diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml new file mode 100644 index 00000000..77abbe23 --- /dev/null +++ b/.github/workflows/benchmarks.yml @@ -0,0 +1,55 @@ +name: Benchmarks + +on: + push: + branches: + - master + tags: + - "*" + pull_request: + workflow_dispatch: + +jobs: + type2_chebyshev: + name: JPL DE Benchmark + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v3 + + - name: Install stable toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + + - name: Bench + run: cargo bench --bench "*_jpl_ephemerides" + + - name: Save benchmark artifacts + uses: actions/upload-artifact@v3 + with: + name: jpl-development-ephemerides-benchmark + path: target/criterion/**/report/* + + type13_hermite: + name: Benchmark epoch + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v3 + + - name: Install stable toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + + - name: Bench + run: cargo bench --bench "*_spacecraft" + + - name: Save benchmark artifacts + uses: actions/upload-artifact@v3 + with: + name: spacecraft-ephemeris-benchmark + path: target/criterion/**/report/* diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index bdab95ce..684bb3a6 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -65,7 +65,9 @@ jobs: run: cargo test --no-default-features --release - name: CLI SPK - run: cargo run -- inspect data/gmat-hermite.bsp && cargo run -- inspect data/de440.bsp + run: | + cargo run -- inspect data/gmat-hermite.bsp + cargo run -- inspect data/de440.bsp - name: Rust-SPICE JPL DE validation run: RUST_BACKTRACE=full RUST_LOG=debug cargo test validate_jplde_translation --features validation --release -- --nocapture diff --git a/Cargo.toml b/Cargo.toml index 5629d089..0315ff04 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,9 +48,13 @@ validation = [] # Enabling this flag significantly reduces compilation times due debug = true [[bench]] -name = "iai_ephemerides" +name = "iai_jpl_ephemerides" harness = false [[bench]] -name = "crit_ephemerides" +name = "crit_jpl_ephemerides" +harness = false + +[[bench]] +name = "iai_spacecraft_ephemeris" harness = false \ No newline at end of file diff --git a/analysis/de_val_err.py b/analysis/de_val_err.py index 61507c91..3121579b 100644 --- a/analysis/de_val_err.py +++ b/analysis/de_val_err.py @@ -1,18 +1,24 @@ import pandas as pd import plotly.express as px +from os import path -df = pd.read_parquet("../target/validation-test-results.parquet") +target_folder = path.join(path.abspath(path.dirname(__file__)), '..', 'target') -print(df.loc[df['DE file'] == 'de438s'].describe()) +for name, filename in [("validation", "validation-test-results"), ("outliers", "validation-outliers")]: + df = pd.read_parquet(f"{target_folder}/{filename}.parquet") + if name == 'validation': + y = 'relative error' + else: + y = 'absolute error' -plt = px.scatter(df.loc[df['DE file'] == 'de438s'], x='File delta T (s)', y='relative error (km)', color='source frame') + for src in ['de438s', 'de440']: + for kind, columns in [("Position", ["X", "Y", "Z"]), ("Velocity", ["VX", "VY", "VZ"])]: + print(f"== {kind} {name} {src} ==") + subset = df.loc[df['DE file'] == src].loc[df.component.isin(columns)] -plt.write_html("../target/de438s-validation.html") -plt.show() + print(subset.describe()) + plt = px.scatter(subset, x='File delta T (s)', y=y, color='source frame') -print(df.loc[df['DE file'] == 'de440'].describe()) -plt = px.scatter(df.loc[df['DE file'] == 'de440'], x='File delta T (s)', y='relative error (km)', color='source frame') - -plt.write_html("../target/de440-validation.html") -plt.show() \ No newline at end of file + plt.write_html(f"{target_folder}/{src}-{name}-{kind}-validation.html") + plt.show() \ No newline at end of file diff --git a/benches/crit_ephemerides.rs b/benches/crit_jpl_ephemerides.rs similarity index 100% rename from benches/crit_ephemerides.rs rename to benches/crit_jpl_ephemerides.rs diff --git a/benches/iai_ephemerides.rs b/benches/iai_jpl_ephemerides.rs similarity index 100% rename from benches/iai_ephemerides.rs rename to benches/iai_jpl_ephemerides.rs diff --git a/benches/iai_spacecraft_ephemeris.rs b/benches/iai_spacecraft_ephemeris.rs new file mode 100644 index 00000000..f7e7ac35 --- /dev/null +++ b/benches/iai_spacecraft_ephemeris.rs @@ -0,0 +1,49 @@ +use anise::{constants::frames::EARTH_J2000, file_mmap, prelude::*}; + +use iai::black_box; +use spice; + +fn benchmark_spice_single_hop_type13_hermite() { + let epoch = Epoch::from_gregorian_hms(2000, 1, 1, 14, 0, 0, TimeScale::UTC); + + // SPICE load + spice::furnsh("data/gmat-hermite.bsp"); + + black_box(spice::spkezr( + "-10000001", + epoch.to_et_seconds(), + "J2000", + "NONE", + "EARTH", + )); + + spice::unload("data/gmat-hermite.bsp"); +} + +fn benchmark_anise_single_hop_type13_hermite() { + let epoch = Epoch::from_gregorian_hms(2000, 1, 1, 14, 0, 0, TimeScale::UTC); + + let path = "./data/de438s.bsp"; + let buf = file_mmap!(path).unwrap(); + let spk = SPK::parse(&buf).unwrap(); + + let buf = file_mmap!("data/gmat-hermite.bsp").unwrap(); + let spacecraft = SPK::parse(&buf).unwrap(); + + let ctx = Context::from_spk(&spk) + .unwrap() + .load_spk(&spacecraft) + .unwrap(); + + let my_sc_j2k = Frame::from_ephem_j2000(-10000001); + + black_box( + ctx.translate_from_to_km_s_geometric(my_sc_j2k, EARTH_J2000, epoch) + .unwrap(), + ); +} + +iai::main!( + benchmark_spice_single_hop_type13_hermite, + benchmark_anise_single_hop_type13_hermite +); diff --git a/src/math/interpolation/chebyshev.rs b/src/math/interpolation/chebyshev.rs index ee4cd8ca..5913d751 100644 --- a/src/math/interpolation/chebyshev.rs +++ b/src/math/interpolation/chebyshev.rs @@ -8,10 +8,10 @@ * Documentation: https://nyxspace.com/ */ +use crate::{errors::MathErrorKind, prelude::AniseError}; +use core::f64::EPSILON; use hifitime::Epoch; -use crate::prelude::AniseError; - /// Attempts to evaluate a Chebyshev polynomial given the coefficients, returning the value and its derivative /// /// # Notes @@ -23,6 +23,9 @@ pub(crate) fn chebyshev_eval( eval_epoch: Epoch, degree: usize, ) -> Result<(f64, f64), AniseError> { + if spline_radius_s.abs() < EPSILON { + return Err(AniseError::MathError(MathErrorKind::DivisionByZero)); + } // Workspace arrays let mut w = [0.0_f64; 3]; let mut dw = [0.0_f64; 3]; diff --git a/src/math/interpolation/hermite.rs b/src/math/interpolation/hermite.rs index 620ddcbb..4cc8ffbd 100644 --- a/src/math/interpolation/hermite.rs +++ b/src/math/interpolation/hermite.rs @@ -59,6 +59,8 @@ /* - SPICELIB Version 1.0.0, 01-MAR-2000 (NJB) */ +use core::f64::EPSILON; + use crate::errors::MathErrorKind; use log::error; @@ -115,6 +117,9 @@ pub fn hermite_eval( let c1 = xs[i] - x_eval; let c2 = x_eval - xs[i - 1]; let denom = xs[i] - xs[i - 1]; + if denom.abs() < EPSILON { + return Err(MathErrorKind::DivisionByZero); + } /* The second column of WORK contains interpolated derivative */ /* values. */ @@ -167,6 +172,9 @@ pub fn hermite_eval( let c1 = xs[xij - 1] - x_eval; let c2 = x_eval - xs[xi - 1]; let denom = xs[xij - 1] - xs[xi - 1]; + if denom.abs() < EPSILON { + return Err(MathErrorKind::DivisionByZero); + } /* Compute the interpolated derivative at X for the Ith */ /* interpolant. This is the derivative with respect to X of */ diff --git a/src/naif/daf/daf.rs b/src/naif/daf/daf.rs index 35fae0dc..74e33b0a 100644 --- a/src/naif/daf/daf.rs +++ b/src/naif/daf/daf.rs @@ -213,7 +213,7 @@ impl<'a, R: NAIFSummaryRecord> DAF<'a, R> { .unwrap() .into_slice(); // Convert it - Ok(S::from_slice_f64(data)) + S::from_slice_f64(data) } pub fn comments(&self) -> Result { diff --git a/src/naif/daf/mod.rs b/src/naif/daf/mod.rs index ff46846e..5f9a39f7 100644 --- a/src/naif/daf/mod.rs +++ b/src/naif/daf/mod.rs @@ -39,7 +39,7 @@ pub trait NAIFSummaryRecord: NAIFRecord + Copy { } } -pub trait NAIFDataSet<'a>: Display { +pub trait NAIFDataSet<'a>: Sized + Display { /// The underlying record representation type RecordKind: NAIFDataRecord<'a>; @@ -47,7 +47,7 @@ pub trait NAIFDataSet<'a>: Display { type StateKind; // TODO: Return a result here. - fn from_slice_f64(slice: &'a [f64]) -> Self; + fn from_slice_f64(slice: &'a [f64]) -> Result; fn nth_record(&self, n: usize) -> Result; diff --git a/src/naif/spk/datatypes/chebyshev.rs b/src/naif/spk/datatypes/chebyshev.rs index 5e67d308..0b44563b 100644 --- a/src/naif/spk/datatypes/chebyshev.rs +++ b/src/naif/spk/datatypes/chebyshev.rs @@ -10,6 +10,7 @@ use core::fmt; use hifitime::{Duration, Epoch, TimeUnits}; +use log::error; use crate::{ math::{interpolation::chebyshev_eval, Vector3}, @@ -50,20 +51,27 @@ impl<'a> NAIFDataSet<'a> for Type2ChebyshevSet<'a> { type StateKind = (Vector3, Vector3); type RecordKind = Type2ChebyshevRecord<'a>; - fn from_slice_f64(slice: &'a [f64]) -> Self { + fn from_slice_f64(slice: &'a [f64]) -> Result { + if slice.len() < 5 { + error!( + "Cannot build a Type 2 Chebyshev set from only {} items", + slice.len() + ); + return Err(AniseError::MalformedData(5)); + } // For this kind of record, the data is stored at the very end of the dataset let start_epoch = Epoch::from_et_seconds(slice[slice.len() - 4]); let interval_length = slice[slice.len() - 3].seconds(); let rsize = slice[slice.len() - 2] as usize; let num_records = slice[slice.len() - 1] as usize; - Self { + Ok(Self { init_epoch: start_epoch, interval_length, rsize, num_records, record_data: &slice[0..slice.len() - 4], - } + }) } fn nth_record(&self, n: usize) -> Result { diff --git a/src/naif/spk/datatypes/hermite.rs b/src/naif/spk/datatypes/hermite.rs index 7991fe56..695257a3 100644 --- a/src/naif/spk/datatypes/hermite.rs +++ b/src/naif/spk/datatypes/hermite.rs @@ -10,6 +10,7 @@ use core::fmt; use hifitime::{Duration, Epoch, TimeUnits}; +use log::error; use crate::math::interpolation::{hermite_eval, MAX_SAMPLES}; use crate::{ @@ -47,20 +48,27 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType12<'a> { type StateKind = CartesianState; type RecordKind = PositionVelocityRecord; - fn from_slice_f64(slice: &'a [f64]) -> Self { + fn from_slice_f64(slice: &'a [f64]) -> Result { + if slice.len() < 5 { + error!( + "Cannot build a Type 12 Hermite set from only {} items", + slice.len() + ); + return Err(AniseError::MalformedData(5)); + } // For this kind of record, the metadata is stored at the very end of the dataset, so we need to read that first. let first_state_epoch = Epoch::from_et_seconds(slice[slice.len() - 4]); let step_size = slice[slice.len() - 3].seconds(); let window_size = slice[slice.len() - 2] as usize; let num_records = slice[slice.len() - 1] as usize; - Self { + Ok(Self { first_state_epoch, step_size, window_size, num_records, record_data: &slice[0..slice.len() - 4], - } + }) } fn nth_record(&self, n: usize) -> Result { @@ -118,7 +126,14 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { type StateKind = (Vector3, Vector3); type RecordKind = PositionVelocityRecord; - fn from_slice_f64(slice: &'a [f64]) -> Self { + fn from_slice_f64(slice: &'a [f64]) -> Result { + if slice.len() < 3 { + error!( + "Cannot build a Type 13 Hermite set from only {} items", + slice.len() + ); + return Err(AniseError::MalformedData(5)); + } // For this kind of record, the metadata is stored at the very end of the dataset let num_records = slice[slice.len() - 1] as usize; let samples = slice[slice.len() - 2] as usize; @@ -130,13 +145,13 @@ impl<'a> NAIFDataSet<'a> for HermiteSetType13<'a> { // And the epoch directory is whatever remains minus the metadata let epoch_registry = slice.get(epoch_data_end_idx..slice.len() - 2).unwrap(); - Self { + Ok(Self { samples, num_records, state_data, epoch_data, epoch_registry, - } + }) } fn nth_record(&self, n: usize) -> Result { diff --git a/src/naif/spk/datatypes/lagrange.rs b/src/naif/spk/datatypes/lagrange.rs index 6a487bf1..1c08b1ad 100644 --- a/src/naif/spk/datatypes/lagrange.rs +++ b/src/naif/spk/datatypes/lagrange.rs @@ -10,6 +10,7 @@ use core::fmt; use hifitime::{Duration, Epoch, TimeUnits}; +use log::error; use crate::{ math::{cartesian::CartesianState, Vector3}, @@ -46,20 +47,27 @@ impl<'a> NAIFDataSet<'a> for LagrangeSetType8<'a> { type StateKind = CartesianState; type RecordKind = PositionVelocityRecord; - fn from_slice_f64(slice: &'a [f64]) -> Self { + fn from_slice_f64(slice: &'a [f64]) -> Result { + if slice.len() < 5 { + error!( + "Cannot build a Type 8 Lagrange set from only {} items", + slice.len() + ); + return Err(AniseError::MalformedData(5)); + } // For this kind of record, the metadata is stored at the very end of the dataset, so we need to read that first. let first_state_epoch = Epoch::from_et_seconds(slice[slice.len() - 4]); let step_size = slice[slice.len() - 3].seconds(); let degree = slice[slice.len() - 2] as usize; let num_records = slice[slice.len() - 1] as usize; - Self { + Ok(Self { first_state_epoch, step_size, degree, num_records, record_data: &slice[0..slice.len() - 4], - } + }) } fn nth_record(&self, n: usize) -> Result { @@ -106,7 +114,14 @@ impl<'a> NAIFDataSet<'a> for LagrangeSetType9<'a> { type StateKind = (Vector3, Vector3); type RecordKind = PositionVelocityRecord; - fn from_slice_f64(slice: &'a [f64]) -> Self { + fn from_slice_f64(slice: &'a [f64]) -> Result { + if slice.len() < 3 { + error!( + "Cannot build a Type 9 Lagrange set from only {} items", + slice.len() + ); + return Err(AniseError::MalformedData(5)); + } // For this kind of record, the metadata is stored at the very end of the dataset let num_records = slice[slice.len() - 1] as usize; let degree = slice[slice.len() - 2] as usize; @@ -118,13 +133,13 @@ impl<'a> NAIFDataSet<'a> for LagrangeSetType9<'a> { // And the epoch directory is whatever remains minus the metadata let epoch_registry = slice.get(epoch_data_end_idx..slice.len() - 2).unwrap(); - Self { + Ok(Self { degree, num_records, state_data, epoch_data, epoch_registry, - } + }) } fn nth_record(&self, n: usize) -> Result { diff --git a/tests/ephemerides/mod.rs b/tests/ephemerides/mod.rs index a9a90865..03b643e8 100644 --- a/tests/ephemerides/mod.rs +++ b/tests/ephemerides/mod.rs @@ -13,3 +13,13 @@ mod paths; mod translation; #[cfg(feature = "validation")] mod validation; + +#[allow(dead_code)] +pub mod consts { + pub const MAX_ABS_POS_ERR_KM: f64 = 10.0; // Absolute error (absolute difference regardless of the scale of the numbers) + pub const MAX_ABS_VEL_ERR_KM_S: f64 = 1e-3; + pub const MAX_REL_POS_ERR_KM: f64 = 1e-5; // Relative error is the scaled error + pub const TYPICAL_REL_POS_ERR_KM: f64 = 1e-7; + pub const MAX_REL_VEL_ERR_KM_S: f64 = 1e-3; + pub const TYPICAL_REL_VEL_ERR_KM_S: f64 = 1e-8; +} diff --git a/tests/ephemerides/translation.rs b/tests/ephemerides/translation.rs index 5275ae36..c45d0f2a 100644 --- a/tests/ephemerides/translation.rs +++ b/tests/ephemerides/translation.rs @@ -10,16 +10,15 @@ use core::f64::EPSILON; -use anise::constants::frames::{EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, VENUS_J2000}; -use anise::constants::orientations::J2000; +use anise::constants::frames::{EARTH_J2000, EARTH_MOON_BARYCENTER_J2000, LUNA_J2000, VENUS_J2000}; use anise::file_mmap; use anise::math::Vector3; use anise::prelude::*; -// Corresponds to an error of 1e-5 meters, or 1e-2 millimeters, or 10 micrometers -const POSITION_EPSILON_KM: f64 = 1e-8; -// Corresponds to an error of 1e-7 meters per second, or 1e-1 micrometers per second, or 100 nanometers per second -const VELOCITY_EPSILON_KM_S: f64 = 1e-10; +// Corresponds to an error of 2e-5 meters, or 2e-2 millimeters, or 20 micrometers +const POSITION_EPSILON_KM: f64 = 2e-8; +// Corresponds to an error of 5e-6 meters per second, or 5.0 micrometers per second +const VELOCITY_EPSILON_KM_S: f64 = 5e-9; #[test] fn de438s_translation_verif_venus2emb() { @@ -307,7 +306,7 @@ fn de438s_translation_verif_emb2luna() { } #[test] -fn spk_hermite_type31_verif() { +fn spk_hermite_type13_verif() { if pretty_env_logger::try_init().is_err() { println!("could not init env_logger"); } @@ -317,7 +316,7 @@ fn spk_hermite_type31_verif() { let buf = file_mmap!(path).unwrap(); let spk = SPK::parse(&buf).unwrap(); - let buf = file_mmap!("./target/Hermite.bsp").unwrap(); + let buf = file_mmap!("data/gmat-hermite.bsp").unwrap(); let spacecraft = SPK::parse(&buf).unwrap(); let ctx = Context::from_spk(&spk) @@ -325,31 +324,30 @@ fn spk_hermite_type31_verif() { .load_spk(&spacecraft) .unwrap(); - let epoch = Epoch::from_gregorian_utc_at_midnight(2024, 7, 1); + let epoch = Epoch::from_gregorian_hms(2000, 1, 1, 14, 0, 0, TimeScale::UTC); - let my_sc_j2k = Frame::from_ephem_orient(-111229882, J2000); + let my_sc_j2k = Frame::from_ephem_j2000(-10000001); let state = ctx - .translate_from_to_km_s_geometric(my_sc_j2k, LUNA_J2000, epoch) + .translate_from_to_km_s_geometric(my_sc_j2k, EARTH_J2000, epoch) .unwrap(); println!("{state:?}"); // Check that we correctly set the output frame - assert_eq!(state.frame, LUNA_J2000); + assert_eq!(state.frame, EARTH_J2000); let pos_expct_km = Vector3::new( - 8.9871033515359500e+02, - -5.4154398990756522e+02, - 1.5101519596160608e+03, + 2.5920090775006811e+03, + 6.7469273862520186e+03, + 1.3832553421282723e+03, ); let vel_expct_km_s = Vector3::new( - -1.2836208430532707e+00, - -9.0227334520037439e-01, - 4.4829903632467799e-01, + -6.6688457210358747e+00, + 2.7743470870318045e+00, + -8.5832497027451471e-01, ); - // We expect exactly the same output as SPICE to machine precision. assert!( relative_eq!(state.radius_km, pos_expct_km, epsilon = POSITION_EPSILON_KM), "pos = {}\nexp = {pos_expct_km}\nerr = {:e}", diff --git a/tests/ephemerides/validation/hermite_type13.rs b/tests/ephemerides/validation/hermite_type13.rs index 81465eac..e287d2ad 100644 --- a/tests/ephemerides/validation/hermite_type13.rs +++ b/tests/ephemerides/validation/hermite_type13.rs @@ -31,9 +31,10 @@ fn validate_hermite_translation() { use std::fs::File; use std::sync::Arc; - // If the error is larger than this, we should fail immediately. - const FAIL_POS_KM: f64 = 1e2; - const FAIL_VEL_KM_S: f64 = 1e-1; + use crate::ephemerides::consts::{ + MAX_ABS_POS_ERR_KM, MAX_ABS_VEL_ERR_KM_S, MAX_REL_POS_ERR_KM, TYPICAL_REL_POS_ERR_KM, + }; + // Number of queries we should do per pair of ephemerides const NUM_QUERIES_PER_PAIR: f64 = 1_000.0; const BATCH_SIZE: usize = 10_000; @@ -51,8 +52,8 @@ fn validate_hermite_translation() { Field::new("# hops", DataType::UInt8, false), Field::new("component", DataType::Utf8, false), Field::new("File delta T (s)", DataType::Float64, false), - Field::new("absolute error (km)", DataType::Float64, false), - Field::new("relative error (km)", DataType::Float64, false), + Field::new("absolute error", DataType::Float64, false), + Field::new("relative error", DataType::Float64, false), ]); let file = File::create("target/type13-validation-test-results.parquet").unwrap(); @@ -135,9 +136,9 @@ fn validate_hermite_translation() { // Check component by component instead of rebuilding a Vector3 from the SPICE data for i in 0..6 { let (anise_value, max_err) = if i < 3 { - (state.radius_km[i], FAIL_POS_KM) + (state.radius_km[i], MAX_ABS_POS_ERR_KM) } else { - (state.velocity_km_s[i - 3], FAIL_VEL_KM_S) + (state.velocity_km_s[i - 3], MAX_ABS_VEL_ERR_KM_S) }; // We don't look at the absolute error here, that's for the stats to show any skewness @@ -191,11 +192,11 @@ fn validate_hermite_translation() { Arc::new(Float64Array::from(batch_epoch.clone())) as ArrayRef, ), ( - "absolute error (km)", + "absolute error", Arc::new(Float64Array::from(batch_abs.clone())) as ArrayRef, ), ( - "relative error (km)", + "relative error", Arc::new(Float64Array::from(batch_rel.clone())) as ArrayRef, ), ]) @@ -241,11 +242,11 @@ fn validate_hermite_translation() { Arc::new(Float64Array::from(batch_epoch)) as ArrayRef, ), ( - "absolute error (km)", + "absolute error", Arc::new(Float64Array::from(batch_abs)) as ArrayRef, ), ( - "relative error (km)", + "relative error", Arc::new(Float64Array::from(batch_rel)) as ArrayRef, ), ]) @@ -274,29 +275,24 @@ fn validate_hermite_translation() { ) .unwrap(); - const TYPICAL_REL_ERR_KM: f64 = 1e-7; // Allow up to 100 micrometers of error. - const MAX_REL_ERR_KM: f64 = 1e-5; // Allow up to 1 centimeter of error. - let rel_errors = df .clone() .select([ - min("relative error (km)").alias("min rel err (km) OK"), - col("relative error (km)") + min("relative error").alias("min rel err (km) OK"), + col("relative error") .quantile(0.25, QuantileInterpolOptions::Higher) .alias("q25 rel err (km) OK"), - col("relative error (km)") - .mean() - .alias("mean rel err (km) OK"), - col("relative error (km)") + col("relative error").mean().alias("mean rel err (km) OK"), + col("relative error") .median() .alias("median rel err (km) OK"), - col("relative error (km)") + col("relative error") .quantile(0.75, QuantileInterpolOptions::Higher) .alias("q75 rel err (km) OK"), - col("relative error (km)") + col("relative error") .quantile(0.99, QuantileInterpolOptions::Higher) .alias("q99 rel err (km) OK"), - max("relative error (km)").alias("max rel err (km) OK"), + max("relative error").alias("max rel err (km) OK"), ]) .collect() .unwrap(); @@ -305,32 +301,32 @@ fn validate_hermite_translation() { let rel_errors_ok = df .clone() .select([ - min("relative error (km)") + min("relative error") .alias("min rel err (km) OK") - .lt(TYPICAL_REL_ERR_KM), - col("relative error (km)") + .lt(TYPICAL_REL_POS_ERR_KM), + col("relative error") .quantile(0.25, QuantileInterpolOptions::Higher) .alias("q25 rel err (km) OK") - .lt(TYPICAL_REL_ERR_KM), - col("relative error (km)") + .lt(TYPICAL_REL_POS_ERR_KM), + col("relative error") .mean() .alias("mean rel err (km) OK") - .lt(TYPICAL_REL_ERR_KM), - col("relative error (km)") + .lt(TYPICAL_REL_POS_ERR_KM), + col("relative error") .median() .alias("median rel err (km) OK") - .lt(TYPICAL_REL_ERR_KM), - col("relative error (km)") + .lt(TYPICAL_REL_POS_ERR_KM), + col("relative error") .quantile(0.75, QuantileInterpolOptions::Higher) .alias("q75 rel err (km) OK") - .lt(TYPICAL_REL_ERR_KM), - col("relative error (km)") + .lt(TYPICAL_REL_POS_ERR_KM), + col("relative error") .quantile(0.99, QuantileInterpolOptions::Higher) .alias("q99 rel err (km) OK") - .lt(MAX_REL_ERR_KM), - max("relative error (km)") + .lt(MAX_REL_POS_ERR_KM), + max("relative error") .alias("max rel err (km) OK") - .lt(MAX_REL_ERR_KM), + .lt(MAX_REL_POS_ERR_KM), ]) .collect() .unwrap(); @@ -346,21 +342,19 @@ fn validate_hermite_translation() { .clone() .select([ // Absolute error - min("absolute error (km)").alias("min abs err (km)"), - col("absolute error (km)") + min("absolute error").alias("min abs err (km)"), + col("absolute error") .quantile(0.25, QuantileInterpolOptions::Higher) .alias("q25 abs err (km)"), - col("absolute error (km)").mean().alias("mean abs err (km)"), - col("absolute error (km)") - .median() - .alias("median abs err (km)"), - col("absolute error (km)") + col("absolute error").mean().alias("mean abs err (km)"), + col("absolute error").median().alias("median abs err (km)"), + col("absolute error") .quantile(0.75, QuantileInterpolOptions::Higher) .alias("q75 abs err (km)"), - col("absolute error (km)") + col("absolute error") .quantile(0.99, QuantileInterpolOptions::Higher) .alias("q99 abs err (km)"), - max("absolute error (km)").alias("max abs err (km)"), + max("absolute error").alias("max abs err (km)"), ]) .collect() .unwrap(); @@ -373,10 +367,10 @@ fn validate_hermite_translation() { }; let mut outliers = df - .filter(col("absolute error (km)").gt(lit(q99_abs))) + .filter(col("absolute error").gt(lit(q99_abs))) .select([ - col("absolute error (km)"), - col("relative error (km)"), + col("absolute error"), + col("relative error"), col("File delta T (s)"), col("source frame"), col("destination frame"), diff --git a/tests/ephemerides/validation/jplde_cheby_type2.rs b/tests/ephemerides/validation/jplde_cheby_type2.rs index 182a2401..1fb9b6bc 100644 --- a/tests/ephemerides/validation/jplde_cheby_type2.rs +++ b/tests/ephemerides/validation/jplde_cheby_type2.rs @@ -33,6 +33,8 @@ fn validate_jplde_translation() { use spice; use std::sync::Arc; + use crate::ephemerides::consts::{MAX_REL_POS_ERR_KM, TYPICAL_REL_POS_ERR_KM}; + // If the error is larger than this, we should fail immediately. const FAIL_POS_KM: f64 = 1e2; const FAIL_VEL_KM_S: f64 = 1e-1; @@ -54,8 +56,8 @@ fn validate_jplde_translation() { Field::new("# hops", DataType::UInt8, false), Field::new("component", DataType::Utf8, false), Field::new("File delta T (s)", DataType::Float64, false), - Field::new("absolute error (km)", DataType::Float64, false), - Field::new("relative error (km)", DataType::Float64, false), + Field::new("absolute error", DataType::Float64, false), + Field::new("relative error", DataType::Float64, false), ]); let file = File::create("target/validation-test-results.parquet").unwrap(); @@ -174,7 +176,6 @@ fn validate_jplde_translation() { } // Update data - batch_de_name.push(de_name.clone()); batch_src_frm.push(j2000_ephem1.to_string()); batch_dest_frm.push(j2000_ephem2.to_string()); @@ -221,12 +222,12 @@ fn validate_jplde_translation() { as ArrayRef, ), ( - "absolute error (km)", + "absolute error", Arc::new(Float64Array::from(batch_abs.clone())) as ArrayRef, ), ( - "relative error (km)", + "relative error", Arc::new(Float64Array::from(batch_rel.clone())) as ArrayRef, ), @@ -246,8 +247,6 @@ fn validate_jplde_translation() { } } Err(e) => { - // Always save the parquet file - // writer.close().unwrap(); error!("At epoch {epoch:E}: {e}"); } }; @@ -278,11 +277,11 @@ fn validate_jplde_translation() { Arc::new(Float64Array::from(batch_epoch)) as ArrayRef, ), ( - "absolute error (km)", + "absolute error", Arc::new(Float64Array::from(batch_abs)) as ArrayRef, ), ( - "relative error (km)", + "relative error", Arc::new(Float64Array::from(batch_rel)) as ArrayRef, ), ]) @@ -309,29 +308,22 @@ fn validate_jplde_translation() { let df = LazyFrame::scan_parquet("target/validation-test-results.parquet", Default::default()) .unwrap(); - const TYPICAL_REL_ERR_KM: f64 = 1e-7; // Allow up to 100 micrometers of error. - const MAX_REL_ERR_KM: f64 = 1e-5; // Allow up to 1 centimeter of error. - let rel_errors = df .clone() .select([ - min("relative error (km)").alias("min rel err (km) OK"), - col("relative error (km)") + min("relative error").alias("min rel err OK"), + col("relative error") .quantile(0.25, QuantileInterpolOptions::Higher) - .alias("q25 rel err (km) OK"), - col("relative error (km)") - .mean() - .alias("mean rel err (km) OK"), - col("relative error (km)") - .median() - .alias("median rel err (km) OK"), - col("relative error (km)") + .alias("q25 rel err OK"), + col("relative error").mean().alias("mean rel err OK"), + col("relative error").median().alias("median rel err OK"), + col("relative error") .quantile(0.75, QuantileInterpolOptions::Higher) - .alias("q75 rel err (km) OK"), - col("relative error (km)") + .alias("q75 rel err OK"), + col("relative error") .quantile(0.99, QuantileInterpolOptions::Higher) - .alias("q99 rel err (km) OK"), - max("relative error (km)").alias("max rel err (km) OK"), + .alias("q99 rel err OK"), + max("relative error").alias("max rel err OK"), ]) .collect() .unwrap(); @@ -340,32 +332,32 @@ fn validate_jplde_translation() { let rel_errors_ok = df .clone() .select([ - min("relative error (km)") - .alias("min rel err (km) OK") - .lt(TYPICAL_REL_ERR_KM), - col("relative error (km)") + min("relative error") + .alias("min rel err OK") + .lt(TYPICAL_REL_POS_ERR_KM), + col("relative error") .quantile(0.25, QuantileInterpolOptions::Higher) - .alias("q25 rel err (km) OK") - .lt(TYPICAL_REL_ERR_KM), - col("relative error (km)") + .alias("q25 rel err OK") + .lt(TYPICAL_REL_POS_ERR_KM), + col("relative error") .mean() - .alias("mean rel err (km) OK") - .lt(TYPICAL_REL_ERR_KM), - col("relative error (km)") + .alias("mean rel err OK") + .lt(TYPICAL_REL_POS_ERR_KM), + col("relative error") .median() - .alias("median rel err (km) OK") - .lt(TYPICAL_REL_ERR_KM), - col("relative error (km)") + .alias("median rel err OK") + .lt(TYPICAL_REL_POS_ERR_KM), + col("relative error") .quantile(0.75, QuantileInterpolOptions::Higher) - .alias("q75 rel err (km) OK") - .lt(TYPICAL_REL_ERR_KM), - col("relative error (km)") + .alias("q75 rel err OK") + .lt(TYPICAL_REL_POS_ERR_KM), + col("relative error") .quantile(0.99, QuantileInterpolOptions::Higher) - .alias("q99 rel err (km) OK") - .lt(MAX_REL_ERR_KM), - max("relative error (km)") - .alias("max rel err (km) OK") - .lt(MAX_REL_ERR_KM), + .alias("q99 rel err OK") + .lt(MAX_REL_POS_ERR_KM), + max("relative error") + .alias("max rel err OK") + .lt(MAX_REL_POS_ERR_KM), ]) .collect() .unwrap(); @@ -381,21 +373,19 @@ fn validate_jplde_translation() { .clone() .select([ // Absolute error - min("absolute error (km)").alias("min abs err (km)"), - col("absolute error (km)") + min("absolute error").alias("min abs err"), + col("absolute error") .quantile(0.25, QuantileInterpolOptions::Higher) - .alias("q25 abs err (km)"), - col("absolute error (km)").mean().alias("mean abs err (km)"), - col("absolute error (km)") - .median() - .alias("median abs err (km)"), - col("absolute error (km)") + .alias("q25 abs err"), + col("absolute error").mean().alias("mean abs err"), + col("absolute error").median().alias("median abs err"), + col("absolute error") .quantile(0.75, QuantileInterpolOptions::Higher) - .alias("q75 abs err (km)"), - col("absolute error (km)") + .alias("q75 abs err"), + col("absolute error") .quantile(0.99, QuantileInterpolOptions::Higher) - .alias("q99 abs err (km)"), - max("absolute error (km)").alias("max abs err (km)"), + .alias("q99 abs err"), + max("absolute error").alias("max abs err"), ]) .collect() .unwrap(); @@ -408,15 +398,15 @@ fn validate_jplde_translation() { }; let mut outliers = df - .filter(col("absolute error (km)").gt(lit(q99_abs))) + .filter(col("absolute error").gt(lit(q99_abs))) .select([ - col("absolute error (km)"), - col("relative error (km)"), + col("absolute error"), + col("relative error"), col("File delta T (s)"), col("DE file"), col("source frame"), col("destination frame"), - max("component"), + col("component"), ]) .collect() .unwrap(); From c98c6eceb35a2d9c670579b93baee3e92faa6a1a Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Tue, 29 Nov 2022 18:00:13 -0700 Subject: [PATCH 41/48] Add CSPICE build to benchmarks Signed-off-by: Christopher Rabotin --- .github/workflows/benchmarks.yml | 8 +++++- .github/workflows/tests.yml | 47 ++++++++++++++++++++++++++------ src/bin/anise/main.rs | 2 ++ 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index 77abbe23..7baec962 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -23,6 +23,9 @@ jobs: toolchain: stable override: true + - name: Install CSPICE + run: sh dev-env-setup.sh && cd .. # Return to root + - name: Bench run: cargo bench --bench "*_jpl_ephemerides" @@ -33,7 +36,7 @@ jobs: path: target/criterion/**/report/* type13_hermite: - name: Benchmark epoch + name: Hermite Benchmark runs-on: ubuntu-latest steps: - name: Checkout sources @@ -45,6 +48,9 @@ jobs: toolchain: stable override: true + - name: Install CSPICE + run: sh dev-env-setup.sh && cd .. # Return to root + - name: Bench run: cargo bench --bench "*_spacecraft" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 684bb3a6..4b2a143e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -33,8 +33,8 @@ jobs: with: command: check - run-tests: - name: Converts SPICE BSP files into ANISE files and runs the tests + test: + name: Run tests runs-on: ubuntu-latest steps: - name: Checkout sources @@ -69,12 +69,6 @@ jobs: cargo run -- inspect data/gmat-hermite.bsp cargo run -- inspect data/de440.bsp - - name: Rust-SPICE JPL DE validation - run: RUST_BACKTRACE=full RUST_LOG=debug cargo test validate_jplde_translation --features validation --release -- --nocapture - - - name: Rust-SPICE hermite validation - run: RUST_BACKTRACE=full RUST_LOG=debug cargo test validate_hermite_translation --features validation --release -- --nocapture - lints: name: Lints runs-on: ubuntu-latest @@ -101,3 +95,40 @@ jobs: with: command: clippy args: -- -D warnings + + validation: + name: Validation + runs-on: ubuntu-latest + needs: [check, test, lints] + steps: + - name: Checkout sources + uses: actions/checkout@v2 + with: + lfs: true + + - name: Install stable toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + + - name: Install CSPICE + run: sh dev-env-setup.sh && cd .. # Return to root + + - name: CLI SPK + run: | + cargo run -- inspect data/gmat-hermite.bsp + cargo run -- inspect data/de440.bsp + + - name: Rust-SPICE JPL DE validation + run: RUST_BACKTRACE=full RUST_LOG=debug cargo test validate_jplde_translation --features validation --release -- --nocapture + + - name: Rust-SPICE hermite validation + run: RUST_BACKTRACE=full RUST_LOG=debug cargo test validate_hermite_translation --features validation --release -- --nocapture + + - name: Save validation artifacts + uses: actions/upload-artifact@v3 + with: + name: validation-artifacts + path: target/*.html diff --git a/src/bin/anise/main.rs b/src/bin/anise/main.rs index 3fc04e41..9fd763f0 100644 --- a/src/bin/anise/main.rs +++ b/src/bin/anise/main.rs @@ -89,6 +89,7 @@ fn main() -> Result<(), CliErrors> { info!("Loading {path_str:?} as DAF/PCK"); match BPC::parse(&bytes) { Ok(pck) => { + info!("CRC32 checksum: 0x{:X}", pck.crc32()); // Build the rows of the table let mut rows = Vec::new(); @@ -129,6 +130,7 @@ fn main() -> Result<(), CliErrors> { info!("Loading {path_str:?} as DAF/SPK"); match SPK::parse(&bytes) { Ok(spk) => { + info!("CRC32 checksum: 0x{:X}", spk.crc32()); // Build the rows of the table let mut rows = Vec::new(); From b958c0e9f0a0594b27bc9b346175dccd0fc72b53 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Tue, 29 Nov 2022 18:03:51 -0700 Subject: [PATCH 42/48] Maybe add coverage? Signed-off-by: Christopher Rabotin --- .github/workflows/tests.yml | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4b2a143e..fdf62da6 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -132,3 +132,41 @@ jobs: with: name: validation-artifacts path: target/*.html + + coverage: + name: Coverage + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install stable toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + components: rustfmt, clippy + + - name: Install CSPICE + run: sh dev-env-setup.sh && cd .. # Return to root + + - name: Install cargo-llvm-cov + uses: taiki-e/install-action@cargo-llvm-cov + + - name: Generate coverage report + run: | + cargo llvm-cov clean --workspace + cargo llvm-cov test --no-report --features=std,asn1der -- --test-threads=1 + cargo llvm-cov test --no-report --tests --features=std,asn1der -- compile_fail + cargo llvm-cov report --lcov > lcov.txt + env: + RUSTFLAGS: --cfg __ui_tests + + - name: Upload coverage report + uses: codecov/codecov-action@v3 + env: + TOKEN: ${{ secrets.CODECOV_TOKEN }} + with: + files: ./lcov.txt From 14b0ac523fad12fa7ab2dc4981886282e45de398 Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Tue, 29 Nov 2022 20:05:11 -0700 Subject: [PATCH 43/48] Add LFS to benchmark --- .github/workflows/benchmarks.yml | 4 ++++ .github/workflows/tests.yml | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index 7baec962..9c272d3c 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -16,6 +16,8 @@ jobs: steps: - name: Checkout sources uses: actions/checkout@v3 + with: + lfs: true - name: Install stable toolchain uses: actions-rs/toolchain@v1 @@ -41,6 +43,8 @@ jobs: steps: - name: Checkout sources uses: actions/checkout@v3 + with: + lfs: true - name: Install stable toolchain uses: actions-rs/toolchain@v1 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fdf62da6..0c9cefdf 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -140,6 +140,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + with: + lfs: true - name: Install stable toolchain uses: actions-rs/toolchain@v1 @@ -158,8 +160,8 @@ jobs: - name: Generate coverage report run: | cargo llvm-cov clean --workspace - cargo llvm-cov test --no-report --features=std,asn1der -- --test-threads=1 - cargo llvm-cov test --no-report --tests --features=std,asn1der -- compile_fail + cargo llvm-cov test --no-report --features=std -- --test-threads=1 + cargo llvm-cov test --no-report --tests --features=std -- compile_fail cargo llvm-cov report --lcov > lcov.txt env: RUSTFLAGS: --cfg __ui_tests From 9073336842783586dff39cfa7a250d90a97574cf Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Tue, 29 Nov 2022 20:14:18 -0700 Subject: [PATCH 44/48] Remove DER requirement for now Might add it back latter if we have a need for custom serialization. This work removes all custom serialization --- Cargo.toml | 9 ++++---- src/errors.rs | 15 ------------- src/lib.rs | 1 - src/math/units.rs | 56 ----------------------------------------------- 4 files changed, 4 insertions(+), 77 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0315ff04..3710e074 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,10 +16,10 @@ exclude = ["cspice"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -hifitime = {version = "3.5.0", features = ["asn1der"]} -memmap2 = "0.5.7" +hifitime = {version = "3.7.0", features = []} +memmap2 = "0.5.8" crc32fast = "1.3.0" -der = {version = "0.6.0", features = ["derive", "alloc", "real"]} +# der = {version = "0.6.0", features = ["derive", "alloc", "real"]} # Disabled until DER is needed again. clap = {version = "3.1", features = ["derive"]} thiserror = "1.0" log = "0.4" @@ -31,8 +31,7 @@ approx = "0.5.1" zerocopy = "0.6.1" [dev-dependencies] -rust-spice = "0.7.3" -online-statistics = "0.2.6" +rust-spice = "0.7.4" parquet = "25.0.0" arrow = "25.0.0" criterion = "0.3" diff --git a/src/errors.rs b/src/errors.rs index d577ca1b..c5ece7e4 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -10,8 +10,6 @@ use hifitime::Epoch; -use crate::der::Error as Asn1Error; -use crate::der::Error as DerError; use crate::prelude::Frame; use core::convert::From; use core::fmt; @@ -35,8 +33,6 @@ pub enum AniseError { InvalidTimeSystem, /// Raised if the checksum of the encoded data does not match the stored data. IntegrityError(IntegrityErrorKind), - /// Raised if the file could not be decoded correctly - DecodingError(Asn1Error), /// Raised if the item sought after is not found in the context ItemNotFound, /// Raised when requesting the interpolation for data that is not available in this spline. @@ -64,7 +60,6 @@ pub enum InternalErrorKind { LUTAppendFailure, /// May happen if the interpolation scheme is not yet supported InterpolationNotSupported, - Asn1Error(DerError), /// Some generic internal error, check the logs of the program and file a bug report Generic, } @@ -114,12 +109,6 @@ impl From for AniseError { } } -impl From for InternalErrorKind { - fn from(e: DerError) -> Self { - Self::Asn1Error(e) - } -} - impl From for AniseError { fn from(e: MathErrorKind) -> Self { Self::MathError(e) @@ -140,10 +129,6 @@ impl fmt::Display for AniseError { } Self::InvalidTimeSystem => write!(f, "ANISE error: invalid time system"), Self::IntegrityError(e) => write!(f, "ANISE error: data integrity error: {e:?}"), - Self::DecodingError(err) => write!( - f, - "ANISE error: bytes could not be decoded into a valid ANISE file - {err}" - ), Self::ItemNotFound => write!(f, "ANISE error: requested item not found in context"), Self::InternalError(e) => { write!(f, "ANISE internal error: {e:?} -- please report a bug") diff --git a/src/lib.rs b/src/lib.rs index 511778c3..4eaa33c6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,7 +9,6 @@ */ extern crate const_format; -extern crate der; extern crate hifitime; extern crate log; diff --git a/src/math/units.rs b/src/math/units.rs index 5ab540e3..236e7535 100644 --- a/src/math/units.rs +++ b/src/math/units.rs @@ -8,7 +8,6 @@ * Documentation: https://nyxspace.com/ */ use core::fmt::Display; -use der::{Decode, Encode, Reader, Writer}; /// Re-export hifitime's units as DurationUnit. pub use hifitime::Unit as TimeUnit; @@ -68,58 +67,3 @@ impl Default for LengthUnit { Self::Kilometer } } - -/// Allows conversion of a Distance into a u8 with the following mapping. -/// Mapping: Micrometer: 0; Millimeter: 1; Meter: 2; Kilometer: 3; Megameter: 4. -impl From for u8 { - fn from(dist: LengthUnit) -> Self { - match dist { - LengthUnit::Micrometer => 0, - LengthUnit::Millimeter => 1, - LengthUnit::Meter => 2, - LengthUnit::Kilometer => 3, - LengthUnit::Megameter => 4, - } - } -} - -/// Allows conversion of a Distance into a u8 with the following mapping. -/// Mapping: Micrometer: 0; Millimeter: 1; Meter: 2; Kilometer: 3; Megameter: 4. -impl From<&LengthUnit> for u8 { - fn from(dist: &LengthUnit) -> Self { - u8::from(*dist) - } -} - -/// Allows conversion of a u8 into a Distance. -/// Mapping: 0: Micrometer; 1: Millimeter; 2: Meter; 4: Megameter; 3 or any other value is considered kilometer -impl From for LengthUnit { - fn from(val: u8) -> Self { - match val { - 0 => LengthUnit::Micrometer, - 1 => LengthUnit::Millimeter, - 2 => LengthUnit::Meter, - 4 => LengthUnit::Megameter, - _ => LengthUnit::Kilometer, - } - } -} - -impl Encode for LengthUnit { - fn encoded_len(&self) -> der::Result { - let converted: u8 = self.into(); - converted.encoded_len() - } - - fn encode(&self, encoder: &mut dyn Writer) -> der::Result<()> { - let converted: u8 = self.into(); - converted.encode(encoder) - } -} - -impl<'a> Decode<'a> for LengthUnit { - fn decode>(decoder: &mut R) -> der::Result { - let converted: u8 = decoder.decode()?; - Ok(Self::from(converted)) - } -} From b1f583d0f78d71f6f4108da7ec963005f3435b9d Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Tue, 29 Nov 2022 20:50:08 -0700 Subject: [PATCH 45/48] Review changes --- .gitattributes | 2 +- .github/workflows/benchmarks.yml | 2 +- .github/workflows/tests.yml | 15 +++++-- analysis/de_val_err.py | 46 +++++++++++++-------- dev-env-setup.sh | 2 +- src/bin/anise/main.rs | 10 ++++- src/math/polyfit/cdemo/main.c | 68 +++++++++----------------------- tests/naif.rs | 2 - 8 files changed, 70 insertions(+), 77 deletions(-) diff --git a/.gitattributes b/.gitattributes index 5c229578..5c9f74d7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,5 @@ data/*.bsp filter=lfs diff=lfs merge=lfs -text -data/earth_old_high_prec.bpc filter=lfs diff=lfs merge=lfs -text +data/*.bpc filter=lfs diff=lfs merge=lfs -text data/de421.anise filter=lfs diff=lfs merge=lfs -text data/de430.anise filter=lfs diff=lfs merge=lfs -text data/de438s.anise filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index 9c272d3c..72bcf185 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -56,7 +56,7 @@ jobs: run: sh dev-env-setup.sh && cd .. # Return to root - name: Bench - run: cargo bench --bench "*_spacecraft" + run: cargo bench --bench "*_spacecraft_ephemeris" - name: Save benchmark artifacts uses: actions/upload-artifact@v3 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0c9cefdf..5bba69cc 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -64,10 +64,6 @@ jobs: - name: Test (no default features and release) run: cargo test --no-default-features --release - - name: CLI SPK - run: | - cargo run -- inspect data/gmat-hermite.bsp - cargo run -- inspect data/de440.bsp lints: name: Lints @@ -126,6 +122,17 @@ jobs: - name: Rust-SPICE hermite validation run: RUST_BACKTRACE=full RUST_LOG=debug cargo test validate_hermite_translation --features validation --release -- --nocapture + + # Now analyze the results and create pretty plots + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Validation analysis + run: | + cd analysis + pip install -r requirements.txt + python de_val_err.py - name: Save validation artifacts uses: actions/upload-artifact@v3 diff --git a/analysis/de_val_err.py b/analysis/de_val_err.py index 3121579b..78d9fcf5 100644 --- a/analysis/de_val_err.py +++ b/analysis/de_val_err.py @@ -1,24 +1,38 @@ import pandas as pd import plotly.express as px -from os import path +from os.path import abspath, join, dirname -target_folder = path.join(path.abspath(path.dirname(__file__)), '..', 'target') +if __name__ == '__main__': -for name, filename in [("validation", "validation-test-results"), ("outliers", "validation-outliers")]: - df = pd.read_parquet(f"{target_folder}/{filename}.parquet") - if name == 'validation': - y = 'relative error' - else: - y = 'absolute error' + target_folder = join(abspath(dirname(__file__)), '..', 'target') - for src in ['de438s', 'de440']: - for kind, columns in [("Position", ["X", "Y", "Z"]), ("Velocity", ["VX", "VY", "VZ"])]: - print(f"== {kind} {name} {src} ==") - subset = df.loc[df['DE file'] == src].loc[df.component.isin(columns)] + for name, filename in [("validation", "validation-test-results"), + ("outliers", "validation-outliers")]: - print(subset.describe()) + # Load the parquet file + df = pd.read_parquet(f"{target_folder}/{filename}.parquet") - plt = px.scatter(subset, x='File delta T (s)', y=y, color='source frame') + if name == 'validation': + y = 'relative error' + else: + y = 'absolute error' - plt.write_html(f"{target_folder}/{src}-{name}-{kind}-validation.html") - plt.show() \ No newline at end of file + for src in ['de438s', 'de440']: + for kind, columns in [("Position", ["X", "Y", "Z"]), + ("Velocity", ["VX", "VY", "VZ"])]: + + print(f"== {kind} {name} {src} ==") + + subset = df.loc[df['DE file'] == src].loc[df.component.isin( + columns)] + + print(subset.describe()) + + plt = px.scatter(subset, + x='File delta T (s)', + y=y, + color='source frame') + + plt.write_html( + f"{target_folder}/{src}-{name}-{kind}-validation.html") + plt.show() diff --git a/dev-env-setup.sh b/dev-env-setup.sh index ce084e95..2a8b4958 100644 --- a/dev-env-setup.sh +++ b/dev-env-setup.sh @@ -3,4 +3,4 @@ curl https://naif.jpl.nasa.gov/pub/naif/toolkit//C/PC_Linux_GCC_64bit/packages/c tar xzvf cspice.tar.Z cd cspice tcsh makeall.csh -mv lib/cspice.a lib/libcspice.a \ No newline at end of file +mv lib/cspice.a lib/libcspice.a diff --git a/src/bin/anise/main.rs b/src/bin/anise/main.rs index 9fd763f0..0658f48e 100644 --- a/src/bin/anise/main.rs +++ b/src/bin/anise/main.rs @@ -42,7 +42,10 @@ fn main() -> Result<(), CliErrors> { "PCK" => { info!("Loading {path_str:?} as DAF/PCK"); match BPC::check_then_parse(&bytes, crc32_checksum) { - Ok(_) => Ok(()), + Ok(_) => { + info!("[OK] Checksum matches"); + Ok(()) + } Err(AniseError::IntegrityError(e)) => { error!("CRC32 checksums differ for {path_str:?}: {e:?}"); Err(CliErrors::AniseError(AniseError::IntegrityError(e))) @@ -56,7 +59,10 @@ fn main() -> Result<(), CliErrors> { "SPK" => { info!("Loading {path_str:?} as DAF/SPK"); match SPK::check_then_parse(&bytes, crc32_checksum) { - Ok(_) => Ok(()), + Ok(_) => { + info!("[OK] Checksum matches"); + Ok(()) + } Err(AniseError::IntegrityError(e)) => { error!("CRC32 checksums differ for {path_str:?}: {e:?}"); Err(CliErrors::AniseError(AniseError::IntegrityError(e))) diff --git a/src/math/polyfit/cdemo/main.c b/src/math/polyfit/cdemo/main.c index 5698da18..2576761a 100644 --- a/src/math/polyfit/cdemo/main.c +++ b/src/math/polyfit/cdemo/main.c @@ -4,59 +4,27 @@ typedef int integer; typedef double doublereal; -int hrmint_(integer* n, doublereal* xvals, doublereal* yvals, - doublereal* x, doublereal* work, doublereal* f, - doublereal* df); +int hrmint_ (integer *n, doublereal *xvals, doublereal *yvals, doublereal *x, + doublereal *work, doublereal *f, doublereal *df); -int main() +int +main () { - // double xvals[] = { - // // 773063753.0320327, - // 773063842.6860328, - // 773063932.1790327, - // 773064021.5950327, - // 773064111.0160326, - // 773064200.4970326, - // 773064290.0490326, - // 773064379.5660326, - // // 773064467.8020325, - // }; - // double yvals[] = { - // // 1264.0276092333008, - // // -1.0119972729331588, - // 1169.380111723055, - // -1.0982621220038147, - // 1067.501355281949, - // -1.1773202325269372, - // 958.9770086109238, - // -1.248793644639029, - // 844.4072328473662, - // -1.3123304769876323, - // 724.4430188794065, - // -1.3675873394086253, - // 599.8186349004518, - // -1.414230273831576, - // 471.46623936222625, - // -1.4519274117465721, - // // 342.04349989730264, - // // -1.4801351852184736, - // }; - // double x = 773064069.1841084; - double xvals[] = { -1.0, 0.0, 3.0, 5.0 }; - double yvals[] = { 6.0, 3.0, 5.0, 0.0, 2210.0, 5115.0, 78180.0, 109395.0 }; - double x = 2.0; - double f, - df; - int n = 7; - double work[256] = { 0 }; - double want_x = 8.9871033515359500e+02; - double want_vx = -1.2836208430532707e+00; + double xvals[] = { -1.0, 0.0, 3.0, 5.0 }; + double yvals[] = { 6.0, 3.0, 5.0, 0.0, 2210.0, 5115.0, 78180.0, 109395.0 }; + double x = 2.0; + double f, df; + int n = 7; - int rslt = hrmint_(&n, xvals, yvals, &x, work, &f, &df); - printf("rslt = %d\n", rslt); - printf("f = %f\tdf= %f\n", f, df); - printf("Δf = %e\tΔdf= %e\n", fabs(f - want_x), fabs(df - want_vx)); + double work[256] = { 0 }; + double want_x = 8.9871033515359500e+02; + double want_vx = -1.2836208430532707e+00; - return 0; + int rslt = hrmint_ (&n, xvals, yvals, &x, work, &f, &df); + printf ("rslt = %d\n", rslt); + printf ("f = %f\tdf= %f\n", f, df); + printf ("Δf = %e\tΔdf= %e\n", fabs (f - want_x), fabs (df - want_vx)); + + return 0; } \ No newline at end of file diff --git a/tests/naif.rs b/tests/naif.rs index d881e3ee..6657ca1d 100644 --- a/tests/naif.rs +++ b/tests/naif.rs @@ -133,6 +133,4 @@ fn test_spk_load_bytes() { // NOTE: Because everything is a pointer, the size on the stack remains constant at 521 bytes. println!("{}", size_of_val(&spice)); - - // TODO: Generate a BSP from GMAT } From 46107eb9d77a207380b226754caaaa2d04e167ba Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Tue, 29 Nov 2022 20:55:34 -0700 Subject: [PATCH 46/48] Removed specs submodule --- .gitmodules | 3 -- .vscode/settings.json | 3 ++ benches/crit_spacecraft_ephemeris.rs | 67 ++++++++++++++++++++++++++++ specs | 1 - 4 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 benches/crit_spacecraft_ephemeris.rs delete mode 160000 specs diff --git a/.gitmodules b/.gitmodules index 49b26f9f..e69de29b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "specs"] - path = specs - url = https://github.com/anise-toolkit/specs.git diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..2b7e46d2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.formatting.provider": "yapf" +} \ No newline at end of file diff --git a/benches/crit_spacecraft_ephemeris.rs b/benches/crit_spacecraft_ephemeris.rs new file mode 100644 index 00000000..e48adf67 --- /dev/null +++ b/benches/crit_spacecraft_ephemeris.rs @@ -0,0 +1,67 @@ +use anise::{constants::frames::EARTH_J2000, file_mmap, prelude::*}; + +use criterion::{black_box, criterion_group, criterion_main, Criterion}; + +use spice; + +const NUM_QUERIES: f64 = 100.0; + +fn benchmark_spice_single_hop_type13_hermite(time_it: TimeSeries) { + // SPICE load + spice::furnsh("data/gmat-hermite.bsp"); + + for epoch in time_it { + black_box(spice::spkezr( + "-10000001", + epoch.to_et_seconds(), + "J2000", + "NONE", + "EARTH", + )); + } + + spice::unload("data/gmat-hermite.bsp"); +} + +fn benchmark_anise_single_hop_type13_hermite(ctx: &Context, time_it: TimeSeries) { + let my_sc_j2k = Frame::from_ephem_j2000(-10000001); + for epoch in time_it { + black_box( + ctx.translate_from_to_km_s_geometric(my_sc_j2k, EARTH_J2000, epoch) + .unwrap(), + ); + } +} + +pub fn criterion_benchmark(c: &mut Criterion) { + let start_epoch = Epoch::from_gregorian_at_noon(2000, 1, 1, TimeScale::UTC); + let end_epoch = Epoch::from_gregorian_hms(2000, 1, 1, 15, 0, 0, TimeScale::UTC); + let time_step = ((end_epoch - start_epoch).to_seconds() / NUM_QUERIES).seconds(); + let time_it = TimeSeries::exclusive(start_epoch, end_epoch - time_step, time_step); + + let path = "./data/de438s.bsp"; + let buf = file_mmap!(path).unwrap(); + let spk = SPK::parse(&buf).unwrap(); + + let buf = file_mmap!("data/gmat-hermite.bsp").unwrap(); + let spacecraft = SPK::parse(&buf).unwrap(); + + let ctx = Context::from_spk(&spk) + .unwrap() + .load_spk(&spacecraft) + .unwrap(); + + // Load SPICE data + spice::furnsh("data/de438s.bsp"); + + c.bench_function("ANISE hermite", |b| { + b.iter(|| benchmark_anise_single_hop_type13_hermite(&ctx, time_it.clone())) + }); + + c.bench_function("SPICE hermite", |b| { + b.iter(|| benchmark_spice_single_hop_type13_hermite(time_it.clone())) + }); +} + +criterion_group!(hermite, criterion_benchmark); +criterion_main!(hermite); diff --git a/specs b/specs deleted file mode 160000 index df33a7e5..00000000 --- a/specs +++ /dev/null @@ -1 +0,0 @@ -Subproject commit df33a7e597f8ff29863a68217a8ba2d898f0cc9b From 11e5206cf0cb8f45cbebde0310cca75a51c49dcc Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Wed, 30 Nov 2022 21:43:16 -0700 Subject: [PATCH 47/48] Update requirements.txt for analysis Signed-off-by: Christopher Rabotin --- analysis/requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/analysis/requirements.txt b/analysis/requirements.txt index b59440bc..6d44c947 100644 --- a/analysis/requirements.txt +++ b/analysis/requirements.txt @@ -1,7 +1,9 @@ +hifitime==3.7.0 numpy==1.23.4 pandas==1.5.1 plotly==5.10.0 polars==0.14.21 +pyarrow==10.0.1 python-dateutil==2.8.2 pytz==2022.5 six==1.16.0 From 42c4862679df7b96d82676237598a86ad4e454de Mon Sep 17 00:00:00 2001 From: Christopher Rabotin Date: Fri, 2 Dec 2022 16:43:28 -0700 Subject: [PATCH 48/48] Rename analysis script and add analysis for Hermite test Signed-off-by: Christopher Rabotin --- .github/workflows/tests.yml | 10 +++--- analysis/spk_type13_val_err.py | 36 +++++++++++++++++++ ..._val_err.py => spk_type2_jplde_val_err.py} | 0 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 analysis/spk_type13_val_err.py rename analysis/{de_val_err.py => spk_type2_jplde_val_err.py} (100%) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5bba69cc..bfce8eec 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -64,7 +64,6 @@ jobs: - name: Test (no default features and release) run: cargo test --no-default-features --release - lints: name: Lints runs-on: ubuntu-latest @@ -122,17 +121,18 @@ jobs: - name: Rust-SPICE hermite validation run: RUST_BACKTRACE=full RUST_LOG=debug cargo test validate_hermite_translation --features validation --release -- --nocapture - + # Now analyze the results and create pretty plots - uses: actions/setup-python@v4 with: - python-version: '3.10' - + python-version: "3.10" + - name: Validation analysis run: | cd analysis pip install -r requirements.txt - python de_val_err.py + python spk_type2_jplde_val_err.py + python spk_type13_val_err.py - name: Save validation artifacts uses: actions/upload-artifact@v3 diff --git a/analysis/spk_type13_val_err.py b/analysis/spk_type13_val_err.py new file mode 100644 index 00000000..7df8f6ad --- /dev/null +++ b/analysis/spk_type13_val_err.py @@ -0,0 +1,36 @@ +import pandas as pd +import plotly.express as px +from os.path import abspath, join, dirname + +if __name__ == '__main__': + + target_folder = join(abspath(dirname(__file__)), '..', 'target') + + for name, filename in [("validation", "type13-validation-test-results"), + ("outliers", "type13-validation-outliers")]: + + # Load the parquet file + df = pd.read_parquet(f"{target_folder}/{filename}.parquet") + + if name == 'validation': + y = 'relative error' + else: + y = 'absolute error' + + for kind, columns in [("Position", ["X", "Y", "Z"]), + ("Velocity", ["VX", "VY", "VZ"])]: + + print(f"== {kind} {name} ==") + + subset = df.loc[df.component.isin(columns)] + + print(subset.describe()) + + plt = px.scatter(subset, + x='File delta T (s)', + y=y, + color='source frame') + + plt.write_html( + f"{target_folder}/{name}-{kind}-validation.html") + plt.show() diff --git a/analysis/de_val_err.py b/analysis/spk_type2_jplde_val_err.py similarity index 100% rename from analysis/de_val_err.py rename to analysis/spk_type2_jplde_val_err.py
  • Pk`V$^q1c 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