From bdee1776bddeb63338adbfb62de18b884af97085 Mon Sep 17 00:00:00 2001 From: Lan Dam <ldam@passcal.nmt.edu> Date: Tue, 25 Apr 2023 13:04:23 -0600 Subject: [PATCH] Replot for TPS to apply colorange inside TPS only --- .../10 _ Change TPS Color Range.help.md | 78 ++++++++++++++++++ ...splay.help.md => 11 _ Gap Display.help.md} | 0 documentation/images/tps/tps_color_range.png | Bin 0 -> 18290 bytes sohstationviewer/database/soh.db | Bin 61440 -> 61440 bytes .../plotting/time_power_squared_dialog.py | 42 ++++++++-- tests/test_database/test_extract_data.py | 2 +- 6 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 documentation/10 _ Change TPS Color Range.help.md rename documentation/{10 _ Gap Display.help.md => 11 _ Gap Display.help.md} (100%) create mode 100644 documentation/images/tps/tps_color_range.png diff --git a/documentation/10 _ Change TPS Color Range.help.md b/documentation/10 _ Change TPS Color Range.help.md new file mode 100644 index 000000000..9dd01dbde --- /dev/null +++ b/documentation/10 _ Change TPS Color Range.help.md @@ -0,0 +1,78 @@ +# Change TPS Color Range + +<br /> +<br /> +<img alt="Change TPS Color Range" src="images/tps/tps_color_range.png" height="100" /> +<br /> +<br /> + +--------------------------- +--------------------------- + +## TPS plot +The TPS plot shows the square root of the average of the sum of the squares of +the data amplitudes over each 5-minute period of each day covering the time +range of the data on the main display. Each horizontal line is one UT day. + +Each 5-minute block is color-coded according to the average amplitude +during the period. +<br /> + +## Selecting Color Range +Select the desired color range from the dropdown list. There are 4 different +color ranges in the list: Antarctica, Low, Medium and High +<br /> + +**Antarctica** +* Dark Grey/Black: there was no data for that period or the average really +was 0.0 (not likely) +* Dark blue: the average was +/-10 counts +* Cyan: +/-100 counts +* Green: +/-1,000 counts +* Yellow: +/-10,000 counts +* Red: +/-100,000 counts +* Magenta: +/-1,000,000 counts +* Light Grey/White: > +/-1,000,000 counts +<br /> + +**Low** +* Dark Grey/Black: there was no data for that period or the average +really was 0.0 (not likely) +* Dark blue: the average was +/-20 counts +* Cyan: +/-200 counts +* Green: +/-2,000 counts +* Yellow: +/-20,000 counts +* Red: +/-200,000 counts +* Magenta: +/-2,000,000 counts +* Light Grey/White: > +/-2,000,000 counts +<br /> + +**Medium** +* Dark Grey/Black: there was no data for that period or the average really +was 0.0 (not likely) +* Dark blue: the average was +/-50 counts +* Cyan: +/-500 counts +* Green: +/-5,000 counts +* Yellow: +/-50,000 counts +* Red: +/-500,000 counts +* Magenta: +/-5,000,000 counts +* Light Grey/White: > +/-5,000,000 counts +<br /> + +**High** +* Dark Grey/Black: there was no data for that period or the average really +was 0.0 (not likely) +* Dark blue: the average was +/-80 counts +* Cyan: +/-800 counts +* Green: +/-8,000 counts +* Yellow: +/-80,000 counts +* Red: +/-800,000 counts +* Magenta: +/-8,000,000 counts +* Light Grey/White: > +/-8,000,000 counts + +<br /> + +## Applying the selected Color Range +Click button "RePlot" to re-plot TPS with new selected color range. + +<br /> diff --git a/documentation/10 _ Gap Display.help.md b/documentation/11 _ Gap Display.help.md similarity index 100% rename from documentation/10 _ Gap Display.help.md rename to documentation/11 _ Gap Display.help.md diff --git a/documentation/images/tps/tps_color_range.png b/documentation/images/tps/tps_color_range.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb04de38fcb8bf021bb478fe87af733fe888c45 GIT binary patch literal 18290 zcmdSAbySqy+crFe^uQ3(-3XE+-5mocARr(eLw89_cS?6DDvd~kbT`s1-Cd&Jh2GEe zyVvtR@B04x*7}Au%oV%$dF_3i=W$%&&sF5W7^D~=5D2UwFRcawA*2Jx4QMF9|CGhZ zRS*bc)>2C9xq_4w^>ZhCb4wdD5J*1!T?(p3Vjp48*4;SSQyK!6yb$&*keVcpOdNJT zUV^w}I1SB*u!#Qrx7HHU$O92&5zKWBh*gB0Z*5<&&Ag725%*yyl$P1>36PsvbYJq? zT6AVS6XN6f3Ns(RK?NzIY0>tDOo4iFw-gEj?}@_|`mh#2{s<V50K$s3Q&T)Q4Gn&A z8>?TRe6~^Ij9Y9!g<Tvi|JIsV!88>H<q`x<TyyJVx7+r5d`px+1Bp|}{$z|irN?Lq z=Twd$2s=K)7*72Wi=mQX2=z2pwy6<o#{wOjvTLOyfM!uncuqY@<jJe@QN6ef=w<65 zM)uip19H~{?Ysg4n2&|SDjrqoBZ3|YP_!xDsSifAcB-m(Z#nTK3C~Ukts+TtEAYDa z{q}_Zo_DI+P!|}CmmpM>%71(lch;Emg%j4dRx=x~&bFrdz0fdEnBFeJll%7%mQ81* z_9U-ri%?a^2IjDWsKlP|EaLz+PV<N&%z}6I<3+#rSvD1!PVsOL<1M;a?j;fANLs~- zGdR0$@~>yr*#;ueGxXQX&y_aD`fnet8Mf{;N%Su{oBHi)b-p+p!tV}Y_S#aJ=73bc zH|fWF_vPdfLcoOeTGAear*FSr!anoH8wt0HagKplAhi_x*7*|i28p?oR6#Lum^ktZ zBBhjT1gICEZCD+;*803k`bj@zlWV5e8lRKjI6Dj6F}5^@4(giEYQjF+#<$1IH^{my zl~HNmTED)&?z1$gKn2NNA&6I{U2;7|crIhtw*kr4OBdUbVio1=Eq{*z7e^%q;Ts~@ z1kgD=%5Eb<e)}APZY+V98aw#}SwI|vFhH^bFUg;~0^R1(lp)^?CiYvp6=FEb`!)dw zbUh@#Z?BKh&i#Fl@vs7M46)u)lS>DDh{HBTOOyB>N7wnbDNmf4JR&3^SA!V|Ps-^7 zL<js%V&nO<8q|-0zHe0|w{lsZ6P<&0gF|w^j#>~uN;D$<jFZv9V?;O@(y^lLL79oL z)&9tVs|lg(t@Ub$1HLzQ3(9h^*GkGU8b+=>vtU1(S)_5^&lm9@Of>`*BXnY($h^$A zdIA2Rse!u7`w{g5;{rWeMtuyc=II<h#oHLEv(ftPjqQtVt8)n#{9D9Z-UcF(s9zy@ zhUc8$iE*${6T|x2*xHi}pK#rAF>w-cxpUp8;%Kua$Cw!}R?y7Q+c3JZxQVzi)#A>F z9JF5=$vN<6Vh@vU1xI!|I(pXOEx0WhExcNIswZ|xmmS2{DYO=N+~>jN`?v+q56ut7 z4^zyaitYpMAR1+mJYr5oP(^%2?5JX$#5PkD?o>D|pNK0tRY6bTGc7NK1CI)SIbNRL zBtgg$TS58>?aTO>1op%?3OT)`rmR(B0>Nxd_S96=U*oCbmR~RvI7e_Wq$SABikB2* zz85a?*2w!fQ{td;{e)G+N+VsvuB1tm;X`^!)yu6<gda3NQff8l-6}@snwM>scfZsv z(=2dPJIJ036MVTSA)+QC=hJ*kbHTbBNXid(jur>E$X0giN1u`UXb?;V?W%6P&{Ds8 z!J&3%sZE;Loo6=Q50`^y)fg#*l`V!mhPu+9rN4jXwawfhkR>%zY+p!K;65Q{y<=VZ z1zBgWhP1}cGTLfn^m2+2o?^vkwLJCfbH^z9WZ(Gg=ZVi}(nO`!MM84!@rUe-kqzbM zqvjsND?`j#jyBy=BHAO096I(TOZv@wZ|H7OZol2)-5=a;T^Nvzg1y1q;3rta#8@P1 z;AXH)$m0+TumLBO#7364Ai^<#%cjtRz?hzI&ScUOYCZ^!;n6o+fdA|ag12)k@Re{{ z@{#a9gGO^cg_iR9z-2j2($I%$(_B-d(|LyQ2d7i{GH|%Rq>-B=RA=AJyft1miMM`X z?bw57-B&eOwP5Kvfl=#JiKjEAy;u=a`npu+yHIJP4JYp*uW^P>hF7hrZmn&LZL@7T z#UlHH-MiP-i+gFsJc$-|*|S_{8O@PCwfCZTa@eHUdDx%Gbtskubp%eyt;vu0Uu3?` z)a3ud-|SfHM#z8U)N&;08t(9Fef;orYHH}^?%ayt5A)sR-P(==%E;~r<5G*)ZasB( z_2mv?8^8KGrszi2Q+uegYqMWvhYF)wa9N<6A7o5zneBI7%&kwY4;`yq{QB0|)6*Ne zr@nVKINh0Y)VS>KZ`(I)N@d=9S$&mwn{`Zfadm94xlHJffriZt-o~0li^BYj?M-S* zo`kDG1ts6dYl7B2MaIV?tP=P^DVNi+KIs@DwJ4bqtdB+)+7<LNR0Q)YMoP$6**4rf zTwPkq5#Efa*^A`pv;y(Ev^mmT1x^LNX@Obz&)%C4pTR@7+qYwgtp?wwN^wyc-y8FF zi$+w3CH8#j`PBWsbGj>*5t%-T>70HTrkCvTRDn++X)+;7DMocEN0^(>;qZI?JqtSv z1IyxB>KWlkBe#LO@8!=4ObsFjB68KPLdHT$#ryW?AK#ti#`!IU#zQ=RHQ6?$cpLaW z@{?a-U?##U^eReuk7Mp(X46NEcZ<dvTrT}9-)bylFm7-$t>9JsE7Yp)YWylP=VO5q z0j4g}HMW!BU=&Ouj{O8}B}ICXddhlT=g=af@q2E0Ue)gja#GUcuJyq`g*@$B+<ldQ z^~jt=#&BpFu<3jIgij^7DxqM!#qiaO(C^os(}!!+RaLl?c+F;SjGoqP9I(PP3Cg!Q zFxUm_66(0EH_AWlYrQLf(<*4>YF+8;_`-47{oC?X%7-L*rNhz_y=t$gZ%W~|TY~Rh z=cj#GH&XPUR&#t}yQ|9n`fK+Jds)jztcAu$YD;!Hx{=q2FPzWS{&Lp4La(_gx5-|q zGr1T;R>rdHt`xIYzr>|%p*gxvxux{|lctYmjXRgh^Q{_~pN_s?PeBhy=PT`cwpD%& z>o$73KimJl{JQq;3@4xJ@CbcrLc>~Lx1Okx&+q8W=j2Y%*YsZdtAV@U?5}dvPSiKp zvQ$maw=}if<&Q?Y-_+^ri@ES`91qbU$mx*UkX=H@$p&KH7MvDv_$uC)+-c8LUao&$ z2a9FgH?1RINL%7h))ZRSy_#8=NSGXV<vus{`ed;eZm{nw;LyLVF=RP3K{f&zA;=*S z({*qwR35+F)$6WrxqNgGJIs{b>TEO|JRE66#9@HZ;L;Mf=y+K*y`iopT$b6?-!SJr zbfGihnzF~_>w0q`{odMQ0{oTiDc_=ft=rJ9p!2}i_xgE+uN;f33-xa9my2bGb%%FX zYKIpKTgz15arY}j9X~@&Vk0O`C{sjVc&XiJ99bUNC$~Pkth>xS1aCM0V%wZ85Y=BE zST<|*+u`t4@zfVE<bTe$&F^8w4By_2tmn8jP}GlUesU9fE9TZz>v4ZZ)#9f|r9yt_ zN9V)y%k5q$%N=z|sMVe-oYeD{W~*Zcz9W|viz-$r>gug>EzDWFjd`dvr8Q7qy4>C( zLODW0mEusefX?DCiISO(-8PRD#;bzpAF=JUwxD1uVl?{WcK|x#?{KDztDt(sQGXc5 ztIo?uE81g)nJ*=@X~K<t5cYo*lK<v@)sVPu%Eq0~#uZlP`5p&U_SnCC{N$uEYkl1S z_jTYKkhtz)VX+o5;n*p7(7E87-QwdK+GD<q$veN@lOvwz8Y@`8M1SKW(2>Bl1L@-c zteb46tzfRK40-|_qk$eF;DL~UBLv_Ngg^><^ye4^QbZv8?_)It=6}*4f<U2`Amo42 z=m5VDpNCR`-2eO{C4_)bfipbd8<dOqU#St&bCLe*7}NmV14*b$DJTHH>LyNRW_HeS zdzao?Vq)L|x`X^HXAp>x;o*y*phkZT0wGRYYG}J?E5ig$>}}bNOzn-$*gb3=9?Ag; zdk6xDwq`Cy)E>4rcFuwxBD8-}2m;3smpN#u|0Hp-7NONveoifA?_@^J%g)KpNh^v$ zO-(KAWNI#`CN29<cHm5e7VhHWAjrYt?(WX+&ckl+WWm8DARxfO$<4vd{S-*?)Y;R{ z#mM8Soip9vLjJ29X)|XNCrbwxOM5%&hjNXK?Ok0&XlWlR`tQ%*cA9xu{--88=YP5d zbdclW4hI)IC&&Mm&BfCE|B~(D&fjc*`t`Ru;fKNmpIZVetG2YIEilwT(?p?MoWg&q z`9JRbr=fpyzH~NolCrl2GP;QVXRiLq{O_CpGvl8sU;U>_E`HvBSNX3y|H}E$1wl14 zXL}phhar4vXXzr!EzI%1UH+fBUi~MVC>Ip^Po{rg{hv9s|JNM<zWP6Ns5)5!<6!jA zG*Pa9YWVlHf6@zcJWTz+OyRGc{kaMlnka@a$A25GC<fAJkqi)szd=D-Lc;^$APcpQ z@Y!WI9a>nvKeM4+#pf9>t^H;`J=X)U*G73+vk6DzrG5pUp4ZW9g69&C2#91}h$Bmz z-j8rxWydbmpIsnc4SQv8-I+7?nQ|YQo^EDlnwpadx$PUUhc;a;c?lRlW<U<|hd>Y| zsreAAH|WwA-m_|=p&`&vBL|7wA?y5z(fs^yR~!v3;1mKGOA5^yCj5IUj1~qz1r@>{ zlKMlKaS(8oJ+F6c{+{**`iC*%h)4XB_Wvbo!0dp~YYR*SnmEjW)?Xhpa4774U$y=g z5W*e-ceLMgMqg&2AXX3Y&a<hH7FI#N=gVMPIG)%RVRGb`K=b=m(I)8(O}`O3t@8QY zy71Y~L9e!Q{N7a23<kNZ3J{jrPDr(p9;Ur^>ZK=$x%px<JO0ILs^9);6u0{Ck1yPC zm9GhEIFO$N`QysUvqP{ru7uA9*EiFx*{6$@Gd?y=K5lqq#*>KqK`Vq+2SbqG@0Y-k za<=fSayqn6IZJSAx-ZV<qXe(c+v5D#7is7STVBCUpMQ=T`u@ImUyj@#FN(}Ci4j1K zhxA5>XX@F|^m}-G$EuP}W#F(I%@DkB=QAH9F1J<Z8*>?j@24;{<_F3^Wu%JngT&pC z*V3^>dIYvIC!SWcA<n9*MM1(KoZRSr8-8O5J%p&w2}gX{(G?!$uhu=9zYV*M7W?(< z?x;Cg>UFTq;15j}o^+T+eRk4XkT^P8DkG0sKS4YU{krIcfDTXI^bOR;LN|<&o~*s2 zMnO9mx!qTu8=^b_p9yi8PoScp=?xK_ueF_zu!hp67cv!b(mY2*G-o%_3ppWv6FhFJ z2;w$-KRQYl0E=~_PUrA*JB%O6^0H2H7K6Fi&7Gf$TTXG)Ce~-^df{%l>37#N2u;1N zHtXcq?<ir)h^Lb?-?d}-LYg+*@8v6~i)IS(hf|ZF==t3p@O_;zj=Vwm4MRLY3m`@; z&JyQ@vnRe6aPQk279owt>Y0Mnq#yj+T<F^q;B(IqbS4c7{CU!&fjT=Va<yQ0Icss1 zRiv0YLVDXW^;+pSV7mn2{?S7fG8vYO4PWGo<*_D`7vxby12h=#R~O=uGQF;=cjK{$ zolAS@XoYUYT&I7ea#NS;em%KJ79{_^(=apsTLxNW@}4JH90}QjD;mCys~99MiVR=j zdS^tscNOA%6kEnuAhX)}^6W~&rBo^3+R2uTD8Fg)H61A(S^EGkuCl=Pjvft!x=qP) zoyX%y{vrFQ)hKgFjO$^geBx?da;sbckgI&E%_{!6I}Pb>Rah}L{yk>ED{KV)=Zq#m zg}lhr_(4NC@v?#SQMQ%zXJ2nJy>38TqWlZ>S#Jpad;_iT@TSs6K6Jbz@XUINr@Zmb z3K>>llu+!sUq~AF>U=X4OtyL0a%Xq-we^1J{{F}>$FeBMbd=r!*@Nelowe5TNTAi( z{b+MR_`)YWlCPYuEHsqBT}f{~6W4(t_fRdAwPY*|j+c!-z&)8SC+Kl(cy-u#^d{%R z=W20UHA#^<=50DL;=4mIZ{>W>M&zB}?<>E<>Ji$<v<VE!+U=#4-K0E4gK!QASf^_n z-E~er?@@s1A-a6`@E%b-*lJu#CJsDZjAbs`u~<Lusx6H#LZtU%XI1#Lm+mmbzQs}O z_s?qJ_h#Yar?Oo?UAy|Cy;+`dB~~_$=JN!htxRX{vSzQV%i1vvgZv-+?DaqJ_^dQ0 zrxYN<A2szHWn#h2k{3&4Z#7sN-8%HF-OoF4#Ol0`nx_pM=54>aDn0$8alo!0z$$XP zU0~N4hHJOvx#fCy@YSGzT*`gXq4h=k6I5yMIGS|h&A#*f{e|Ynkx^6T&2n`M@~ipw zdKxjot5@f&(sgbj@LkmpE)*&vV@)@k87<r~WPD}ccu0iYK6?Sid4Dvn#NqnWyf}R^ z*Wnqz$7vtaVjRs)qf8`QRhZXyUZ`FyrHIw@kFS2?z4Mi@=%xTp=N3KIqkoMnvDcd> z(xoFHq11g{dNc5}VLLxu+IdWdsNU<azUOK4`MBN1lvWN2gs-7EdKMZH_DG!j-h|$H zjmNdnX_=CzHw4;z#F1%ZoN^NS?(;wiV>*$($G7`+s^4LZEHc>p@fF*v?2Y?taN(UH zzw<G<!z}lulM^{ApPIWLiK+`-L<aj4#T(_X8{O<mzkIiHXcYT(U2wPisr=`h{7TKm zcU`ZlSH3qJWQ9uW2pkp+2BT18?E|k6;Ss^T&sGM-D?drxIZVAnDpTWNb#3UleZu^8 zhiYEZolbrtv)VfCqjskX-utcN7yMtO&-Th&8-Qh#QHmQfIHhH<2)Ef3`+XA|Xvzpn zU9qd*Ap8pK2X$cH8R}(cYu=MotfR)G7TGHv$2IBSRZEUN6ibsHn`strCQJ%~Fg_3? z&J4BQ9SXHlzPvhIygxncG95<D=?KMf$7HX|<zs#9Y}Zngn!_bD@v38AFRCH|5$QbD zl!PZ7b3=Au?blf5tMf|2_6y(J9VWRRtGr;sC&bmp*@;)&k#@z9=x+JW!~5&^7I9cc zfj#_Rz0N<1jy9@P2iWjiL<(izv6F`OF{GYgut=2&J9QN$!^`T{Fj|FqSJ<itxexnU z%Wb5&J0;k%gxuY9ZNEGY&9<q+1wW2r_*&_BHiY}cf*~33fLqv7dj=HkW2)Y<!gkv; zuYt+%2n_-D@R3B`Xc;}`-(Qz~_gekFT_lcoj)YVB-Cs=mTBb;nX}>XrLKb+UsiLj9 zB+~>^gg0~ieEob&N$WfWzFq%38*vXr0iWiOQ)eHA`ZK7|3+-1(1*!wHNc8pB?cN=y zAZX$DmudYy)V32wNwmHBujSLSKH}$BGbXY16DmSOUgWQ46qvGp5DUwBEL~DMU`gl! zbsw&VQe9$l<AuyzZ_Zle90<B>KPS@u?RQwebsK|eN$K~~(Ew!^J5r#EePMv3HB%vW z=Ms3ToyuE(y^&SwROo5yTDxkVHP5)QFu#(|(si3P^YM-3XsPQUkJ1Ag_e;e5q!&l@ zx-B%=FVn9B%y;eh1h&nXWdCJK)A@a-lOpX7!ChwWbhjmO*a*{rtT|8OdUga_k$z$& zXKf&D)$A9)A6OMzSXF64Zy3%tjwle?qn<S7%%NvAX`m%0+O^)hwHjOU+ElLFHS83N z-lkb(pS%-*4PZ`}8;E^fa2gO8l+(C=Hmx`Dq8>;1SbRAWYl5i3K(U3Ndo=90@oZRV z@wNNn#(-pfEwGsl4rszjoQh1SAIqT!*_RnwVLd8uIQY7}RDRQi*{~Wy)?l~TP#?`Z z*DG?|hGaB8C>l*__P)vEH-+bq_!c@)_Fh?I8K3oA%NdZVO4;(a5+rA;Xsi+A;K!QB zclUQ!?(03V?!Z%dF)c0?jhVWRCb4Bw^iI<WSS;&xJvZLnpFAScTOpgi7MKz)&OU6| zD?7ZuS{{kRnl_Q7$X1Vg6m85LM<315iX--O)cP<k=~-K0k(3LtsWzfgd2>2HxuPtt zL>pj@TK7C^xjW2m+wKf9UeDmK6aSt!^Nc!qJw|A_`F8hHwrM+b-z0s}@Av(pb$N3# z4M}?meriR%eYZ}X7CtBXfPCG%EPi}eDPnU+8yfk~WG8~%KHR?oFV@dS#Bfwk=wI(U zWAGfOD@*g%*TxO#E(`Wt{*suT$e-PJvVT37K})&8uhr7|Qdg~HY!s9(HwCOK>Z9Vk zB9bs9d2i2nd{yBwuhK3m!pCX)WZ>foRj~uII*)X{o}wSt9E3M5*K3j3#!;=_^<}SY z$VII2NvRU=j#`%~y!I<wBx*Qoqe92FFLow+?g8+55v@#YAN>g24_NYHw#QmH=N#X; zp`uBLzrCJNJ`Ml*s1zAg#Z<iG&EyL?&$awKi3C#8u$UM*y-~bv^oi?=(qMlC9psH7 zrdYQCCi*#2FelPns@rI{<>dTV`{fVXhQXSSyCv^$m-x}q8i9Snr&+vu*{<=RX*2pV z=F`#p9N*m!UTD)npK+mH_}S(4Xyw3~Z+Fyub$Nt)^j%$5WFy<}mnWao5BXSz=@`u7 zJzxQtPYK_X+-DU26o?}_6OR%rd%6T{9L<a|Zh<Jlwe8ONJcd~mf_TE}{jmF7DG3YA z@M-);P4BxSzu!U==<TmSsMLb#2EI2%emNgvA=uNL;1awMmYi-0fjd8)tH>0A9pWML ztuPz&#|jK%&n;mXuDY^Qs#PKrpW2_1=8c>5YkM7hY4&2^ASZoPSldJCbsa&%#KJ1) ztsCx5V$kjqs_8E)E)|sgQX#LBv$DzaWc%^y_=Gt3F$UwgsAHRWVlJ12)C`A{*uhL? zfm!_Qc*U98QO$&kU3v56X|}3VD7GswE)9IsV_}Of6Uv8SbTPe|XD2;WUQYQm#YU?w zmbnh_+^wjzP;4pQy!gBmNw~vUro(y&aXld;B`JG1di&lj{>S5<x<}J%a)F_;R+7yd zvudh!1~Bmqo2qabi`v3(fmo%($jXQuN;QfO-E85Pp)BaCr4>v#^$<cL(l@&V?47`_ zY1AzpMF*Y}+cYZ+U`$pXC8V*{M8^)^GStBviBkzjzXG4U;P_w>SBe|$lMpasN;er$ zSf#6f^0Y9TG0<Tdn95IklPo%_VtBCH6`YeivwTM`RBWs#Cz)1xFR#hc6#T$B$FL{T zr5urqi-phgE6-PxyAvpxB!f4*HoByUCw~O5Ff<(0&NqGHj3#d0^;RqKw&drG?riQp zecc-8LCSZC$t?x%)h49Mdq1#%>5EG4;Ln$H6Sf`el7!h#jni~1+1OfS(g-}eZ>r;l zCX6zJZzvXU(s9dni~?1U7HU2Yus04K)LWQ-C?gt7Pdz-2GjR}LhjK$`B?|_sgK{C+ z4AJ}>LHol(N5aeN>@_L-JS?j?XEeivv&i1mq{!+jcw^$JG=19oD~6j&P*<{nifeD( zYy)120R}&LP}8>I3=h^wfcP4{lyGOvbH<vvy3y@3@A@spn2cH1dP>)C@{CQQbF=N3 z9Q%7^uN(13N+8jUY;x-JstjYJkvs~gPL*}u^8rYx<_Y5bvfOEH@K6c8L34hzpq&or z$vx+5fg5f@HTJ&I`7TO3M1fKDjiN%W(9y6UFpdc+FN*nAux^czlB(!zSV#!-lDNe7 zr_WUpOw5cM!Nzrt%Rs|Pdr=Zm=QQ>Br}yvcD#-e@1<9G2dCbY7&rm+rkLX}Dd)I)4 ze_b2taC155Qq1#)n}$^{iQOeKDjTa;i66rGlY07Pv*g;61o4S#uwm+s5=s(M;%$8M zL5ekuWPH(EFLoW}p{dM?L2vw%-zh12s_@9BJ8dkutg9(Ni*?RsBzYt%W5-B&hX*vd zb}q)(S>D0>`@ZTWthP9?%acNxu#FsY^q)n0@fxwAJjEk&B&DlmoF$ca2qaEGwiiWC z(ZN6CT<0e<?=;KE4V@hdijm*GH(iB`Fh(IvzJ<3%E(w`%o2yiD6I3bh{&di1sNw1c zjahx8wQOS5y5THgj7Q7X)nrNtW7f*v=;mq(T8T=4F1=&@?UbXANW|B$fIY^kS>8o= z)Ygl$Iu+vcS=LfZr>)+nz<0FmD67##cFHcPOcSAmKHcH-BOcWf5jyKkVwb^}TqN73 z4g~m*=ETQSrLWsq-`O+heLCqk*=HfJncyde^vuY~FC=4g8+lT6n^LD62UmW!iKdCx z(ECgT<2NClMNV0v&#QzQ;n|C#d$rz-CzHk|JB&)8dfI+FZOcUR9If6=kq%3)O`o?e ztM9(wGx*)F_tv7z%W$LpMF9c2vSqPRa)K($Rw~P9?X5IL;rEg-3oV-iy-<N&v>!9Q zXZx2SD%okeA*Pf!cTqJ|a;8YDKN4o0WHhPS-$~;SmvD}xIaR=R)7~ZKWa*ZAKm9FP z3xDi5!ogU<t=X=Pnk@<q$>V$;`-w>xe=}eF7{V=<d{t7I`zkHfJ(nVMz5-@ccae`i zP*gICPAv)*3BJ*A$|>@JcS15@oD3lpr2U!7d!I}N);x`@cv7q!+L|yK^V0BD`7=2p z9(P|*KkZ%_wX<R|yaAA-2P<m2_c*b#nrFX{3iLD>4qbmg8INjK$4yHy9G(cKKbz6# z8IO0<bJ3@{NvzdLP|W{U*y#^#`RUR1yrlXf8|<McYU@OFnEGM*{Cua<WIPv@iWkw1 zQrF9fm~G_!P+W`7O@ccEGLfMktnxk2R?rQ>xvBDTO*P7WMF+MsQ>KGt;9d8i+D=G1 zf=(Eg`UlG(&1?tj5l$=<sv~Zg#Q6tDUFGrgwJnXi>uA2E<CNTQ9gF-f3`}nYxTlio z6NyPnae16yC&1nnB}aR8nuc`u*7)1RASWR_P2Q5eSHfd8QPWc+X0*fakJZxCBaVHm z%}hjTk@O{V%QRh@hIB}b(&;eV$2_igHa>B+r=Y-~xputN<VQoxRg_1+?|I@dIERa# zqBRSp$D1}+C!rrbBQ?ne7O-?gVv!k-Z}5c8nMXzR#<XY9940FdSL?qtmN1Uf5N^il zJ=H4puGTBtHiWiIVGDHT$c=D_mIu8o!6o&rh)!gUmVVah0Qg;7+)ECtuG+p`O~@S% zmj`;;u1^PzPxhE7GIqkcv)>S4Yz%J16Ba*p6Qi#gErj1_*Ym45(XYG?Q(gMvj5(W* zghXkby1gdJ6oQQv!>gder0L5T8M1D5;=R@bhnmZ@8PT7se5ujHFPG9gE4d3>ebMin z{?uy0a%GJF^j<VV-mDR>GkSfyW0g8ao&BysaJnVh+5K=X)zmKfmiFe9p(ULjNw$QZ z)Go6gxp<eyGrFiN5!vhM<AKd3!`83$oZtB!DMeJe4c6KdDESeojcz>}j`?9)ecm0` zNsS|>FgnPlWome+_d!<yR}^1dQ&dr^1_ld9Sp}TlL!ffR8>>cPlZ$IQJllSphxQ2K z4CQQkzxKAf!<*W7FkTVwle&UqR|pp_o>4AIEMJX1DIYl!rxs}*5r9t5H*F*Y<;lK! z!v;4AV`SR8d8mc-woBHV==f1r#`X94<+K^Iv)%<XNUjf)GYV64O|6Z`JVRX7ajbMk z59J)?Z@(o`weNw)d`|ZF=OO0ddgq+RtjIK>sb)w*&gezAA<EQ?5?vg(9Ev+@gETw2 z*g{oJ0*ME=zN4#7>jOeRjW>bqr#~8!XxL>NPL9=L)Rmw!NohVdZwF{Ocv@~WjP)$i z%!W-lGk%1o$C#V6uP{a9NtzYXm>hycEJzuiJmsKl&jc|t5z<cee~q&yN=M<LF%1-F zYzkr|lS`z>P4)^HB_ZxE3{Jz1(k{&<Z5Jj<MwEmTj1|L?J-#Qs%jQfJOGJJ;bci~= zvFJ8GRNfcdtwa~OMPyD(s!saSS})=BBf;!`)7fyEBVw3sj?d-Ez;UiJ_wTU!CsUA2 z@SqTmardXVD&or3TU-9qC{O!07rPr;#BI+qQTo|Xijr`YQ_-s?xdg$f#ycxURU!P; z<j8!UpR8A1+rvvI1<>fcr#os+e8y+D#5sp5HOU#F?Vew88J)*(pez>xW3_h%=X_oR z@@HW&m^XQ|Ha=S7ytZ@+uSONu$?2Uj(_sNOUu<8>K{Y9z)<`rH;A#T0Cb7un%r<4` z{lxZlfUEIyWUb?AVrMD~xgZ{71knpBtRdNrlF*GxES76wn*Kc1zV_Z~BjeyrQP3IU z1a(C|CnMG%$;_VTi&rNk)sNDR^>j@&-Gx6V?J;FZ1$I_<W)h_<w^7mtuzmg(mJ@p! z9!lP<+3l3j?YwO>+JVzkxOStln<^;x>I3E^>jXB}eY!J9<uM$m*vR1^ZoB=sLhokW z(73RrS`Tdc7JvfyL?jmLi(JuJ&?skrI_WSuJr9btQsEPaHObYbokA{jqUg@eH3w1W zW$M@DDhWZA_`@AWU7Cz&1KH(RNmNzqKOJt7NO7F&sHxVJ6@64PV;KWxt-jS~k<HFf z8>hf)?zdZUXQk7J{Af}8VsOV&$r1Xb(_viWUtXW<<#Pw=D2Hird73E+=_1p2rdSy{ z;FNa#+?L|}pa)|vM8(hPwAkUqJuw~!1wY2;!QT3Hmh&6tQr{(#q&Ohe)r9XZ$If7& z;hW(n&XI{yLXh{qcLvWKPj`Zag$k{UvBEKCh<D3Z`_VT|*G;`coNBa9adNskF~;X1 z_>v^31px)qsY7&-r{VhS$dtoo7z1(zQJN72C^2Mp!t2MlYk^sd-Rb*!Ft79ezML9H zVWl^dNkr8OdT=x@5+~6!2YC~dM<+E!<cS<}kHOGHO%~Os$ap5?A$J3t`-pjGQurgh z_U|*RxD6ss2$%48l|_59j&+i<-h`Z~a&5(<UJdhuNAQjFC^r%%bJUUFPxD__ZTzr| z-?_KkI(%Z(GVmmx@l4}9LW);T_=N@gfL6E1&!w^b-~rkVk74=hG?6OD`^Qu3G*T#D zw&{YfEY=hcX(+<(hyGNp4|*DGC=BbQu(+l%_Q#1K(I^oS%2Mzcq-Z=M+~=j<k<5~P z3YN!Q4C9ge-%E96$d*0wIIYL-HoJ1S($1X>$2)(#H6%4_Vo+$y?2eWVK}ohq`{ald zj^d1em0oI+;35)SgoDtFlAk8HSnn=3Wyu_sGO0FNoE=e<|BT47Oxd(05MB&R+aF4F zA(e)H@g{B1OcV!!yM$Lp)Axm*XnF`jylef7oH>gmVD-Hn!>p#((nu1kyTcKE=f@0^ z)MSW|q4RCNr?lzIwC~&3X@4i&?UHL$XQ`bWFR}9XNRPUeW?4VR1vA!gnfM-4@Cs_X zK#ImR$lc6ll5pF+1FwipplGbzoaUX{h~`XC;xkQSVRUDB5pw=&Xc~$fGFoU~C>~85 z7$FShk@=g#DOh-m-pQHi)@6g(xLwPDo2*%fR;;Ge?(%%SinHJ}Z&hb)R83l#MLzZn zrz)qm$#$3#iF_3{fjSVvkC0HZwD3eG<~QGXYjgPdeE3+l+ObG+2_lX3P244Qgqjrg z;ZI$?D9*FcUPjVS0XDyGBo~>|!#{;cH?6uI?ksp_$WXeB5j{Q@w0<0qWnNRF?suh* z$eFQv{Z>|;z0U!MHr+~CVM9P2*APT(|8#Sd^RSyA*E(|*H&{-sQfZCo4Ua4|4t(Y? zYWLB#RC1uurCJmb5|K9Q8w({Hgj4<cIvjO*`E}SwtkRC{eWp+v-MDsxY__d6+dlbb z)k`{C6laoEbM8QYhXc9DZ#7tbVeo#5*IO6?PiXwNNTiYK^QKlHan|u8PaaFn@^T?_ z=Fq@-)#<9fNvvGScYG_nl&hh7$$G?ZIE+}IL@{W<2xq}MmWybzrilJ#NNbIMPfc74 z=SDN<*<@N>?UA+-KDY5MW|#5&Jyt{yP!t*%2!mLuTgTr6Opo7o481wQ@SCks+juEj zje-b0j|<~7k|}1R3wD#`93ym+xa*VQUR@ODhqKu9<xt&73I9s1+eRf>wN-lE6<(y4 zZ4U0w_k_}r&k-SR&>1p9VHW&U6+u|YLFVd_;n^F@0Zyr}&}LG>)1e;M5^OZzDsoh* zA^2|54%Cl*(dNVP{Vvk6T$3C6QfZ5;71IWH%LrZ@NSi!|vm!qU6_@AzEc&euHz+W< zgWm8>jCT*}fgCMz0_2!p9aKV}mGN{Rh~jM(!?J&TA=<n%dSW6R@}@6n*D4On40p`b zixz_j(TujuBN`W*r<;ZxN<N=|GLwqE1DQ|uw9H~h7Dn9U>i*uXM~x393hSy(9e_oa z$ZpA*KtIMw<|?8cw}*6o!yFy}e<SV_hobGY*Svg^P^C<R7#D?$?V3R4I_67*{;EN- zgZ>|G5E*So$wuOwbVr015{Vm4aTj*WKR;c&L-V{8rICQXy-J+hjr>rZ;}Z*DVfmk$ zg2hD;FKMONF7q+TX*hXsb15Zxzd&%6pFaQoEC{&w<xS<II!Nj}$OmxNkfQtNs(;v0 zWn9SEB!S&)*aLkUCyFc$-SOINFnQoZ#sB|$?|ij-hG*J+-o$_V`9rs!$BLI2ggzdd zL?Q;_7CuwFe|nb=K?@J|u_o&{mOPdh86$RBO+IRvcSJKLCOiza1gKSjABJ0@1$E*c z&ig>REqd1-PfV1kmW$KjQEW4k>_3ZDa}EKjb@SKHGgVdIptLx4;hy#{j~{qus2Oq; zCw1a;{>|wsGo|T|FIii^a1Q5*)HrvXt=*L{kkUoP=}{B6Wm;r=F6cQAZOqkJszbsY zpS!aCsTLb;bhY?(rm$yK2GlYkL(ui3J)P7zOOVZ98hi*L&iD|)a6c5~42T4JeLwt% zt&QkYv<!aW#Y-goYn=vDxt4CFbi<1SWldUb#0z8K051y@0T`!-M}*qcWU_!s18qeM z00kVi{$8>csL6_pPFtu-8zUwC@ir>`jNLTwANJMRceH^I7`2aYK@`sNA-qYolY+;y z?8#5^xtvMXxo0Shj4ZilKZdmbseKkV_n;75^t4F%%jL73C=FaND3v#`^aXvQ1_J@( zLkF3$5avcDYtknn(Isv+Mk~Nx=2c$RzM}EuVQTy#VRZf$>|%41717b}mB3>T>mVa( zo~s4tp32e6zr;R4ILNjHH#%NfI8tM%00EgS$B0^q7C9Xg5eRJi`^~24+6jDJi(utV znIHFoA|S(+{C=LuE!T3JC;spR+FfaZGMjs-5adsD3~&;4LPt##*krbqG86u1*2^tE z1=mi9b(dx-uQ&Dm?p<^I05*%%bh=cR@9Uh^r}~W)gC*5uYsf1<hhH~acYQ7oVX81j zbn4)jV1zlfxk<eQU}U0E+=b8Xh9AYOjR&^5FZ*m!0&(#sKA8Q%N+6C~50#(yQcW=9 z%3K^4K&Itf8;sY(;u=@pVlI5wwa+4W{jLI_uqLC4x!Q+-)&a5o%TN8!k}M}={cDqW zr-Vlm4jErcn}B|p7%08B6~x`1t$zPNGjj9&28yn;Z@vE>4N!2gCl4f?-OuZj!_U>j zA3Z{Y`|N?Zyxry;J|pZHd=D&oyIK|eJB5kfB((r@0ZX?!#3JTwYX*2RJAk8mJf?xa z&6w@p!u#x<bfRtB$8a(0$E}iRnLupWF3a`1Wzsy*y7k-3gT0g$LzrnOg`2~tvIeUH zmks0vAlMmQHl*|u=x+liN7HEH5YW;6@7g9{zTZF3Qk+?`fTcM^94PyxzC~_2PFw^{ zc~m+DqIKz)WWLw4(aiu+R67sH6sUmpJVchC(ZDc^Fp9%PE@wKj9NN)EF;Cz8zQ0oH zk6}n@x!q;uGwp?30YUjaA7*r!tfV0Evf5{^q+r7zi1g^<!RQE5Am#VA^R>PSq|(mU ztD(9{%aVxG27b+rTiIR<9IZbS!uLk=0{0dhzY6VsDEK+|JS~jY4IpudR9z+w%3cp@ z59LY(F1*xwy|LtdHiUBF7cWETcz4)XJ`WJGWJ#ug*uz>pE)_fFwcD#4^OG(jcU8bi z4?Gu?=R>@io0`N`Zuk^<*rJE*fRgHS*)Sb4#jxfC_~H#f861@RJucMLy};u+Y)N1s z53(y9d}Y{V{-ZZOICE_Ri;Q=0HJaCPty6X@iu74Oz;Sx|qF+nlh(Pg2n!@S`&3if( zg2cH1dCLQ?QIBmK&6DB*^CJDoTX37VB}sS%Fe;1sUI!ar{6|FZ1{VSL`*1y0%q{9* zr3}_#@Oi}_)JI+X`o{p$8HK)6999g<olLd~nN3B&6|KqOPFdsOX$-cOo@4OdLVfkT z<@+q}WProDI&*RmZNo3Ko-QM~ve%r7Lklnl1UCeM$>YVO2&4z<Dgq3F-;#Ch(q=81 z))SQ2PkNL%nrj}IgZrK{w6;m<^%h|8Z%^U@K5Zf6V}xymBLU|tpNlD5J^<A1m7NV^ z(zo{+0kb?(XyDYx;8X9m=&GeE4L9NE=VUb91Dzs>2UT^4KTC{v3lgUU_AgJ6n#(Pu z4u}vh0MuJ*y(3I!(Di1!Ahv0m2-hRyVt0x)F@y`^d?LIa#luZ+g3js5bp@>DqQ7`n z;j*wcHtAGXa3AMkV4POol3gGw&gB;87?hrbiunF1K#Ls$6rw9IJcti8tP)#gkc>58 z#Bcq>ifK8YByI+^eJXEBzi`_=II5kuTS8*fv+5vqQ6cBE%cOFNwRrp8<n6Q;-k719 zuE%Qd(=@928-P*c?ui>L{kpW<$B3V57J4HVH9}pVT!g+}hl8t3DE?TF8<93WA#Wml z=rIE6TnvSfx!qAHm9GO<Ivt!|j?&YVaoCL-JF(Csvibm!5ZN_G*TPjD116JotXRrD z>2WoLMS9@M-e(kjGL)V1V%bs)JuyOu+aqH+kPiev(TX%B-sxb(_t|f(0u>VLF4q)c z1^1&;IQ4<pg1wdGFy`;M_{ouIoRzrCMM^2h=Yyh$6RV~#&_HK|CfpmJD+#R((jpo5 zdoRQg2p+wQ28O~0?VW_PoWFzvBaB=2t(!BTM`-N87W(|ncKuQJ8#52LRU^&a{L(mW zc_^4&?FWJidY!S<TY$nb`(E7&5V(U2q?&%oXaS0JaSiVfo`7>tl~55=2M3WN18y9e z9wC1YFfT*@#5IEP_C4_?FEY`F4Y$Ke8!Ty2jxpDlX>w-GQIHVv1~9}QQt~H~)RMXC z?^V+3Ie-|qla_&xE0SJ2%IzS}h|4Odg+Y4#8*<N4Fp+-6%166WJqY;Bd+l_HZ@G@O zylEVjho;8s>JXez18A?Ps<h#qKAmRZt~!p97{AOk3nqA_t1)L_;<D9P+FKmOARu zOA~r61x-i75grAWDU+pe&<Mw7HM!6E*pd&i`^E$Ls#3a}%;01rybVYyE|!~(vY`Dj zEOFfP5eUE{_oiU#1Cb6q4|X#wdS`RhO=f?Mo}DHRh>8#)qr}Px)GXl;5W;u<j)Eu@ zBK%jazW3xgSeycfb?ZNghXE=v{-TjPYB3kQTC9g@w8l^@s>$O2d}fP?Xmfn#Bgklh zP}gSlu=z@#Du}QfXDi4e$A=eI>_ZcW9{{}KFc=6t!2F0<YZ*U2(gDhZMtiuz-JEs# zGvd3p>PVc#Jcgjdu|ftvO*{`^{Uifl61}lK?PJv3<m6Bq;0LolUNMDSiAtFW9MnvZ z3h>R;!}Zxz@ynzkBOT*b8Ft7{Q<1aXF%)-Nq$}TS6ZM&^n+m+#SW9cvNbPj5_!A+y zWzi%&-KtB{UU?F#v;jIqv6Xb)y2J}x>vrA~j9N&z$+49z!&23(Za0~nR0n)w$l5)z z4V|f!7sC4QO$DueNA%pGnAB|pwZJ}lyUg}H6NWqY#X99gdH|WQ&P3n+5u;WW0S$yH z`MUIde+)A5PdIYTq-WEUZS6lmQ5f;_N$Ae^x#>c3H5n)h$R7qM<*@%^I<x>h+?7UH zO-Vhyt2ELXx2~XNwiJ6V0n-CufgncXu8=824W&vct`iIwMZlw65xPXF-yuh||G6!h z%ZVHXm$$XG`8hZV0fUYMU1`!;)QhhT$RQMfh7f=~;znqOyz4@;#beq+WMV?kr16*d zi+MDcH|SLH{=y<=Fan`z*J2j$vy{RJIIKY869V}rGAK#<q4Ctn5mNrO6Pqu`icbro zl@lId7x8TFF4ucQVE2EJ1}V%i|AG0`$aoN90jENHA>e(%>Q|C#R7vUY5F|l1??5xD zm82-u)VY)*Z|XcZ)0ki%eg0PcLC(K+yv0CT*V4SYa0(<j3XnY@NCFs1hpikTj1$Uw z?zTPp&Cd_n^*QasfXLG!!nzA>J5M|KQd0@r6BKI_qnvqo6Jt%=o_>+;7(&X&#b$j3 z_=5bkGV3(pJ<WLR%2Kh>oCkE5OG0C4!e&DQ5uA%dPsi*u)*UpH<qUS|c5cLg(t#4~ z9{EeIaoR)Cy5&*wCFF^UmHSnV{vg@n7!bWlkQAAvsnlIB2R)5a%2BquGSuHBm*jZ` z)FxV-O&035Pq({nW1#!cFL8BQYWgS#s)WjQha9&mVg<kt&_*HeG;Y($to>7B4V`!+ z+H4XnZ91`)KTCdiK)%$Uj3mHDyZa5Z$DryUC7@d6FX|USZdc*E`_3D(8oZ#f8{X}Y z`89Q9pC6eE3-hW23b?fouE8^8$u+dA15q^09(cRM{KyyOXJf>#DuVT{XScFX1gjm8 z;?|GJF{l3sT1S&`Ii12|zc~z!WERfo5O0lA&ehi+ihYqb3BpalbhbR^H|b{0DYcy_ zR+gaNMAUZtI}Q;b3cEQOO}P0QBUMykbd4u8PKCxa5#SL(CSp)xMmVB&3j6Dyg@wgB zEE;xydh`r8x0Ia6JnHK&&H#KcYIL{nY+06Iez-L^=LLXCb_lf%18j&{^#0l!B67>` zUtZ-Kqi*Q}(c3oWHRGB2ftb8quX|CHLpIE%xs^}QKMn$o8H6Ekr%t$yhlD7(n6avV z4C@{=iyAO=@6=;dX4IW}UiUEL)Ix|gSv7ezMKvYgTNtzApX4KeCd@0IMVKah4Ep;3 z1=EO=>4a$}lI8~(LTWi3_P&=kYrQgZc=GPAL(qxa#*;#2Yc<o|Jy8?_uXFV0%wNsG z_^&4i2f*cktTDqQri704A7|l7fWMDgKAtBF4$bH!B=;$}$1<Tm2N<I`@NTv=TGCrk z^Me{-(C7FYs$Fj!%^|S0pI($$jAR2!u4HFj`{pmYfT~BSPiG4)fH4$g%VKNAt}rA_ zN{XthznNm->&W`KLXuq%SR(Ln4c%M-zhV)9!EwZ@)KsB@8%gR503LhyESfe*+*xu3 z(0#Z93LJa$F8^!q^hqn|&<@R>zEvP-z<$57hf+UqH6lyU)rri$sZ!TCoZ;swIh^l7 zLik&7uYN0g??GU8d%mNd(Z2IU(vXohPPG6~JD8GHq=%0vq}U;%2?GK_00vrQxh@o? z=<j+t8jUUcT)lP&6mwn)^#Iad%nPO5wNUxv`=*ltfOS$s0O{D_3}JlXiT~kyCp2#$ zY1*KQ;7*||z0{9%>$088Wk0_hyZxEULtw)k%uK8~o40ShaikpoF1hVl<&9PxGgcty z<?Qsd?2|Rr583HUX~_f}L`OtD)GD}*tt4Z())}6r-srlQJR5t&$r~sDeq~isv^KU> z;|3_f8Uc_q!*`o(*mAS!3^)}Zh3@vNUx#8-u+3074|4g!!s-nmS_wV$>#@ymE}Wvo z%9>954*_xKaOMd1iQZYZ*WrmJTf*M?;o>}n>*R~^CM*KmNLgxw#&p4GfXZ-v3;7^t z*!5Uz&@kW?TLx#j;e;~ZMJvGC^U8Ne5IpREjhA!QWN}#GqgL5Im#>zO3v5$ufYxL) zrv}`g4shr?1Rem5+<s8l<=8#Ie@G94iR`qVvocZwjW@9FX8Tj~g+o3N0x-*p=96~@ z1!8I!>_Oyt^eQCMnTzxkkTe~M-tF_`487Sa-6FdI0Nm1R$F9f2XvP5aKfIi`|Eg54 z%sbop#d>;}O6+WqC+*mwr~Q?JJ0SlA7cAI*UEBn^EJ_tp+c7i#ARYp=klf|>kdrnf zoVo`a{pKkML3}4k?Rq%mfj#D|XZG&pli<8l1zbdE_x<gKwL_0b&WoID2|~a&9Rjb9 zK|^mn`Rd;40{|7=;@4UD6_6{oMU(LjKLvz;*jq@6KqZSJ*DHad_rPo)%+=ajzwpKG zxZNv1^8IyVVK3StZ7xad7&XKONIS8WqhfE<46zrSM?`$m90ttEG4Qjb(Fg)T7bp`P z&Q|+m&sJ~7;gV1w;Brds(1w6o2RLxcu18BEi3#20r9ajpIWDEE0hi@^9ro4`wfzCu zH=%Td7D%ps3Wi-uhhS688R9Kq3+=CTa5Z-gS)>jzBUJ$!znju~Fe#KdaRi`D$NWv@ z1JjPK*JH2xUak7?0lMTOT=^^>@gf8b-yJDKz+rRzDSGn*{|Zoy-abYQ0W`-wa-0Rt zzkl6{?gLUDXTZU8*Yu~3e(<aBfv#c?y`^G&iVUWQ_N~%a^wLJwy(o|s7&MiYFML)_ zl0&@=FNj9#?_K#8$a4o*RM2;jRiig$kJEhCD_)$1K|`Hi0*UKq^g&x8H^fH#OneN0 zEYAr7X(WYAz_DA>`vU0F_&{4gXySaG5%PGmN-`+zJNy|xt^)<YL*_`x^FyfPR2TLi zIi`{WQH9zJ*E_&+ETYweAk2>u(uNgfRJPCqKnUF;wR2Xi?$fW`%{Ip%LmrCE9=;Tg zow)kz0jAU;GDNQ@%j3K0NA;?JQN2~&$VYEJ?PnEbG3Ut$#OKS12RWyrrz_S{S%&Qa zAtnZ3Ptw3bu!KGiR3mw2fjs*BvxJ2nooEZ*(jBlu?Hx9qsn{!;7#E`JjDYzTR&Z_% z36=~z0#4pZCO&{^ul!lZx~@JDK54dH>Hsw_PX<?cPtB*}Od!tky%~W0zW&Me&vanC z(sFlSBn@T3<x`JcDQHHKaSh3lVmXEDj>!iYK0AgeV4^p7XlHjru{3e~p^^zSBBYA! z5}zdWeJ)<Mw#)&RwiTOLLjt@iMQYT(No3%?dUe5sZ1v!nd=J}uql|~3$2YC-WovNx zph*V&e(n>|QSa2R#z;4H1R2CP4pDCSMDmP!n~anrCxGv|^Mz&50$9%La|-*ehkz$C zCrMZeDxD1gq!<SK2h#W&yH)R#TF=NtC4`wEAekx0`}9>XquuU~$IZ^{!&?_d4Szgi z!)$a?WLH2fP3Z)^OwAwFIVKLIckuBAG>bm9snZUgwVtdGf?7bU8OcPm5C&-Oj<o#E z4=S0mJ=#@4;4CEKfpBZ#s2xrmR1QA9l=v^-bp}?|vgl#wKLKaHsW@l{rxb(Fsvme+ znON)v{`*Iok5}eA`um!ag9_W7Xv8VZE$NqVcWr+1Af#8MVTyD;7>VE$Scs{(*rdu^ z`n1<5Qwl`C562#)mp%5}=z$br=%sy|eJfnuKfcyAoph5O<_2Q-BOADk$qd7+(%K9| zozB1%y=)oc?0}VJ4Q$259e4-7Cqq!4i4ytkfx|^uDn%3b7~zd2uu#?+d^GE0NP*EK zK!f$0-`qUnS*Mrk1{}|i_UG%?xvM8#RXn`8IiIp6W#MvYbCVCw%2oCK3p=#KI4NvL z3L!U}I4s%@@*cz-+BB5W?Ob`}H6578n_VdBAW|wsQ^&Fhf_i`%kdNEu(ycvoyxP%R zA8uyi@N)Q~J(%d5UKh@|kwUr-nz<Ov9JbWyWd~@Y73l|cl4PdgqG;a0G}r+Fy^-5s zWnASm&+iTR56GwuCSkbJ7T{aT)BRhm^*f1(vM&f1yJ0wqsUQ;L0e7b(AVz7WBLN(< z=)1!q|8Gx*|ARVUy|ZZDPAU{*ZB2D63`0zu&uji*MYMo+h~W!un0Y<9HsES>H~1s+ z|0fq6sZ%8{Z?=h57z*h6TLT3AY56qqpNPFB;3b$KHd#Wy4|h8Q!O<YTn4PFT$GRfL ze;f@ca?7t<Yq6Bb|F{W8`DB>ni2wEz5`h?Q67M@ITbl&Hl>oK%qP&cC&Fzk*I+Bed zjt`3d$7`WR2moGsxvfp)g+enJ=r1Hn(ke(04I{1FyQ3yJQy(E*Y>#!E2<V0X1z}Ji zIEknH5Ff^~MX7!@PCs<KuYm^!1(|mE6AsiO(PAx@s54FHNujp3Ki$p!<F~}gBBw?v z%!h4++H-R~4JwL+Gm&hu2mN3C1gZbiPZ(3%hD$NR*&&g(Tq$XU>hc!CUq6ZSAad?# zf|%*CL62bnUpop#h$I8Dp$|y>5BXquPJjJ(Zh)71!hlssJU8hdM@&&lTw0yfPEhGD zs>YB8PN|<O{t1#p5Q}Ia(LRyZih(K?=nsY#Bu;}?gSHh;;PiI<uQdRnbd&(XL8`H+ zD`RSPorg4kFR`UEp1tCVV=4VRF$96)k$F;~5kPPd_Lm}%%w<N_i2`<Y<y20Ifii+e z8F>G=p?PREE9=jYP_fT<zI1ElRj_3JQ$~b%<mJKq-4O;BDYUm-gRP2%K(Gk^!KpzD zkc7a$h1v+Z?Qgec^Lk%9q>W-oC|mwxk%q|TTYK@|`=69j*zG1iyvT+(xF6{|peQmw zH1`4j6CwIif~jt;CW@n(9-`RYU=nWnGZNLbai?$Z`TusSH&opGo}|~jtbWt!VUg?z z0XzHLo;%iw&WE-^OL(Y~BK{#X=#h2AsaI1bWMjy8RD}PZeRR3LzrKDuXu<lv+TXk6 o>wY*E=T5p1JOkpbC$10vGtTVOUFw%E7tR0#p00i_>zopr0Qpjt{Qv*} literal 0 HcmV?d00001 diff --git a/sohstationviewer/database/soh.db b/sohstationviewer/database/soh.db index 20da913532058a61b3717a6304197081d24bb4f1..e705fa6ba04f1b7c745e28769bc6dc5dccb82a53 100755 GIT binary patch delta 181 zcmZp8z})bFd4e?K_K7mijN3OREY#=czsJDBe}aMk1OIdW6Z}^;3mWX;*W+SlmSprz zP01|HHR51l7G?CvOwR~lU|`^6%uP)(VrOC&X7tG~7vW=MR%CSC{LOx<JWo}AmSJ&P zdI?aK%tS|t&FkZX3V8W%0!=^1!2gN=A^)q*0tx&0wHX+=;D$2;6?0?&&E|mG!NLwP QnTeNKk<)SW_xqdz0Ijt#tN;K2 delta 158 zcmZp8z})bFd4e?KmWeXXj9WG)EY#;`U|?Y3zrw)(f&V%GJ^m}31s5FQSK?q{7G=!H zOwR~lXJ!^=%uP)(VrK#}a`MYX_!yZL851{uv!5!@Q;=+sm0^~W1vErvqNBv-_3=Rk u5EE}Q@PFdJ$^VM~5zxew{Bj&n16kN1<}rh4pm9vR%!-_eo4?=Z6aWBb=PY*s diff --git a/sohstationviewer/view/plotting/time_power_squared_dialog.py b/sohstationviewer/view/plotting/time_power_squared_dialog.py index 33c71e076..8caef189b 100755 --- a/sohstationviewer/view/plotting/time_power_squared_dialog.py +++ b/sohstationviewer/view/plotting/time_power_squared_dialog.py @@ -87,6 +87,7 @@ class TimePowerSquaredWidget(plotting_widget.PlottingWidget): :param end_tm: requested end time to read """ self.is_working = True + self.set_key = key self.plotting_data1 = d_obj.waveform_data[key] self.plotting_bot = const.BOTTOM @@ -458,13 +459,28 @@ class TimePowerSquaredWidget(plotting_widget.PlottingWidget): for processor in self.tps_processors: processor.request_stop() + def replot(self): + """ + Reuse tps_data calculated in the first plotting to replot + with new color range selected. + """ + self.clear() + self.plotting_bot = const.BOTTOM + title = get_title(self.set_key, self.min_x, self.max_x, self.date_mode) + self.timestamp_bar_top = self.plotting_axes.add_timestamp_bar(0.) + self.plotting_axes.set_title(title, y=0, v_align='bottom') + for chan_id in self.plotting_data1: + c_data = self.plotting_data1[chan_id] + self.plot_channel(c_data, chan_id) + self.done() + class TimePowerSquaredDialog(QtWidgets.QWidget): def __init__(self, parent): """ Dialog to display time power square data for waveform channels. Users - are allowed to select different Color Ranges (antarctica, low, - medium, high) for differences values vs. colors map to draw + are allowed to select different Color Ranges (Antarctica, Low, + Medium and High) for differences values vs. colors map to draw time power square for each 5-minute data :param parent: QMainWindow/QWidget - the parent widget @@ -503,8 +519,13 @@ class TimePowerSquaredDialog(QtWidgets.QWidget): bottom_layout.addSpacing(20) main_layout.addLayout(bottom_layout) + buttons_layout = QtWidgets.QVBoxLayout() + bottom_layout.addLayout(buttons_layout) + # ################ Color range ################# - bottom_layout.addWidget(QtWidgets.QLabel("Color Range")) + color_layout = QtWidgets.QHBoxLayout() + buttons_layout.addLayout(color_layout) + color_layout.addWidget(QtWidgets.QLabel("Color Range")) """ color_def: [str,] - list of color codes in order of values to be @@ -521,7 +542,7 @@ class TimePowerSquaredDialog(QtWidgets.QWidget): self.sel_col_labels = [] """ color_ranges: [str,] - name of color:value map for user to choose - 'antarctica'/'low'/'med'/'high' + 'Antarctica'/'Low'/'Medium'/'High' all_square_counts: [[int,],] - time-power-squared values color_label: [str,] - labels that define count range for colors to show in the legend of the tps plotting widget @@ -536,11 +557,15 @@ class TimePowerSquaredDialog(QtWidgets.QWidget): """ self.color_range_choice = QtWidgets.QComboBox(self) self.color_range_choice.addItems(self.color_ranges) - self.color_range_choice.setCurrentText('high') - bottom_layout.addWidget(self.color_range_choice) - ################################################ + self.color_range_choice.setCurrentText('High') + color_layout.addWidget(self.color_range_choice) + # ##################### Replot button ######################## + self.replot_button = QtWidgets.QPushButton("RePlot", self) + buttons_layout.addWidget(self.replot_button) + + # ##################### Save button ########################## self.save_button = QtWidgets.QPushButton('Save', self) - bottom_layout.addWidget(self.save_button) + buttons_layout.addWidget(self.save_button) self.info_text_browser.setFixedHeight(60) bottom_layout.addWidget(self.info_text_browser) @@ -574,6 +599,7 @@ class TimePowerSquaredDialog(QtWidgets.QWidget): Connect functions to widgets """ self.save_button.clicked.connect(self.save) + self.replot_button.clicked.connect(self.plotting_widget.replot) self.color_range_choice.currentTextChanged.connect( self.color_range_changed) diff --git a/tests/test_database/test_extract_data.py b/tests/test_database/test_extract_data.py index e8cd50781..64e7e1da1 100644 --- a/tests/test_database/test_extract_data.py +++ b/tests/test_database/test_extract_data.py @@ -165,7 +165,7 @@ class TestExtractData(unittest.TestCase): names, all_counts, all_display_strings = get_color_ranges() num_color_def = 7 - expected_names = ['antarctica', 'low', 'med', 'high'] + expected_names = ['Antarctica', 'Low', 'Medium', 'High'] self.assertEqual(names, expected_names) # Check that each name correspond to a list of counts and list of -- GitLab