)!)EoUf`s1GxprnQ+5>Ewdkq+mGkzOE?xd|rE=Zvr|l@dYR6IMf_*pYe|)Rr z|2O~DR&!i0o#W(w95uWo@x#`G&`;Acv+ni0*iHQ?T(uxofs`A&T`%?GMAuy6#Br4y z-;BaEj)K68?|82A;0~g{ZTE!@3sDww7|b%>@{TQ&A1*ln~9gE7^bhJ zH1ShU^8L%cjXqH|?uOD++=%)iPfV(ZgX+kogB)5(c?_D(M7^7Ek1_$bCG9k#Zr2Ob zM3{k_>hU$N=sd3yma)}K>PhOR{Y08<#@>^(m=TwR3L9-VOsAMqUXZ%=Sm-du)DxLR zd`X(@#Z5i+M%30ay~s!Z*nnOXxUv6SHc=16zanFg_v*a+aQM<(1!T%2LUih*-9yU_OsRH;`d=z1Ua2 zWHHRAJZHbbnJFX1qpXg}F=Ih?GKM;Ns@`-J+eLa5suNDI2f835k}lm&6xZE7U#}?> z+^Cq6 AO+xhZuk!vngUAe|AV~Y6adQne_)CjjlU%@&M=I2%A}@+sE{fPF+-{%M3vNx z5RAfAA?AR{Am+*0T%8x=147yS_Z}M>BgVdc*WLGG+YOby6-T`&>9u(a8n)nxy^2|X z!H#9h=WT$7{nQJhhM)RgBDFSaj@^u-u6=GTNuG6G8<3Jn9|_b!a~l927!36PLyY7W zHjJoa(F>v%7Jbhmi%p6#mGgCRbs!3cC=zQIh$*Zuh%$&xfxsH(MXT6$2b3sToh`^u z>vcy!QmmM9?Os2X{mhW2&T16JDiL0jO{W%p6vf_cOhR<{wi__$Xc%OCZTc-Sz*-b) zE~XnY9BU{Rg!6)?Si @2>Us9klZp4Z>t7w~(t^W% 8^jY(eiEgetHYwnSEP9?){uHWyT(1D0&9EOY|*w$=9Ro}0F9Kd~9X z?5A$PI3bJrNEgSRF4OvFcU^`#1_nEAdx>ZB&U1N)oZXB9*5<4B*<{VG*f-l=W7mG0 zQ7cZ_?|E;FR=@3qO6OK*&Ay_44Hb}u7ZjypNujF)?5p$W`ku2vnZN!R+4VS%VsRD> z>IR BDnd+<95f8NAYk@e0wr8}$mUHt~mDRVJTajGZTF5mZ zUd^-?LrBhB5*|ZO-oL|I^s;E6Lt zCZFT}xJ}fXqRzBfTv-b9^m0ZFXNGnQl-v;uVw!zx!OHsON$06k#sIi63;BZNXC%*3 z57|F#uFBRww=%4kzfI9LSVS|5ZQ!~cyU&1#VlgldDEP2~#IcZf?SM7Uj+$C9jqIL; zsa&NI^c9D?T=&sH)6QpF_ITLTklF}){q*Vx1Ak)J7wr4^NnyZjfD;2u#_J5a j1wvUST*hfvu56 z&(`=XFPqpFkl@_e#Q!Ou0Q~ ?3@)5ckZdCXJV+Fzk#aO9H#l@j0~W6uI+y16 zd9E_lE=N>t8HRHA2g4AA`s`idCb#q3XmAb9&X%o`wQN;#z>-;O)~Z^i+-UlFYbkev ze;2I9oWvv;aKYfrhZbcH?4@8!DxMOEV$p7n;&q^qAW&!EBJ*_oK$v+GuM}ug6|;)m z$O>Z?uS=(7++%5^46v1>tauvc&y9V`%sjj*0~<3LY7XS|zB1}P;e*Q*|3l_8JF^0N zq4vEjSHX!g6J@l}%qnr5(^<&sq(`#o6Gcabc@**Gis|c^8QEgi(t!>gmM|I+%Z50P zw4m4Hom^dhH4N1R?<=*)?s8m}dFL@toScCNk5V_VLpf&}s98;P=xJZIzwy$?ZfVmw zfd(IK@=?%O)?<71EDNu#t)&oK(`U0C2X?dyap!?C4UX2d^^`=xV-6IY+sLCzlxWup zjp*P6C!VVp_}ZLsc7+~0AE3z%Q>)n%xkeBr+7u$TFMWXQcYE3dfJ+#u9M*4d++DBV zS-){>-KlSGIS+1bJ#f~=owp^@mY6`Qg(f_OY4ZUq@t=DVQ-HYFl) }~Vw+|J*i!E PBM^C#hfluGKM%DP{2W;x;->6K zZA6d1$jKudCs~aj+m7tCU5nQ2v+CkmWnXv~-r~{buHWlHBC-D$@~bmOf4Abk)(z)5 zl9x!ZBl_xrTX_%rWboOAn{bZNXke(d8U=E1B+B#}qQlv2JcwguO#g(|-_kl`9c7)U zT2r}7?vj;fbT2WdWEFE6{R$Ls4N#mn )L$34vMK+cf|$ zvEZ%8+i)7l&kxjnL8dQ$BpYkz2%S)6nQ3PR5$3fQvK&%2J78%1XBPp+lb_Nq((2MAw==%4suZo@}MpIKS2%M*2Jwt90)cVay zfRyVgT*-xApbzJ}$PIhRj^Ey{6nfoWy05RdJipaW1^&%t)=t0K^kU~1DLbP<0q+d2 zJdwpMsFY=wO&kD ul>U_evGSXgzkvy`?G{UkvdEM>LDoxB{CGL9vj(qT?Z2SPBm zfl8O;fHq}9jH#hMudou1*v=F#u?D=d;mr(r16!yLc{7GLJLFXjPwO-rN|w(;8e=kQ zZdhmj5DyXA0!&4RV=$|Hrv4lffnLnQAkfQM0F<7f&IxJhn50XR9ygO;$pkuY7$en| ze3H~W8xrn16KLb$0HN_+>m(wgi4)O4QV`T-B@9Ei-iWxC4oj|xC2D=%tG8I2^rdzG zio_bsb3-@SPy9q%@Nr|oj)Y8~L-IBfJgpMnP+NtSi>-=@sdT^RIo}y%y`&L4zhf*} zEZq4+)3mgj$pxwF{DH~(Vkc9>NjN_=MQ}csrE9T%R(v-|&CN^Nt>e()09VAQnZbt- zr)^9Vc|L D`Ffi?fp*bgM+;61)Schb3!W$DR zePts9s;8G W!tyv~|D#F_>vF|%oK&)gw3;bDR ?zKS~8yWw9J7 fwpGK}yhEnXvGm_o6^G5~^8gY~) z@_0%X(mcRn_Zx7_Pd)MO&MzVPGLm;p4Dy@b`N`kcoGXAHIU&v)P;>AQN1nvqy0LX* z7 sCK;d^y zg=aovjq^Qv9ig}L``pfH%LEW*9bGT;7oSu4ler295wp2d) A>ZXVB$u2hnzX zdU#=?AK=JU$>#7>c6D4JD>HW`^+C{}vnF)TveVh=EX!7CtnN%kbPSP20<$Koi8+&< z!%av=FPM0T=_51@b#vxc
r;KKjXXl>ETME8@Vv^-Yj>GR$c7fVYyt{DX@(c&y)WbvG z4TSUzUHaKbj09!Qi?Lv41QCD(4rV7|jXsk6Ig%eEK|J$X&(PWR5SHz0R`zt23OG3z ztpc8}a5`_9&rwOio&UL?YOW@MY4$i3*F^QY>{6WrE!7W@osz7I8uhwEy0ft|0Wz;`Aa>j=+%fcVjE_+2R}?(BsliaITau eNVXXTas;w_o+eos!w4c?&{XOFy4Gg*+mT{F3y z@ul(Z?1=?BGckaXS8>Kge_ CfJw(R^WID(5CR zUmS4EzMP+sxiG<5o8Vl0 p6Bh0m~VO|WhazICk=NBFJpxQQokzc_NrJvk{3Hwkh4>bGLv{MkbK z@Vjx(!I&I@nsbxVt=R3g{YE0A2%@y!8@!z8$N~P;WF0?(^u|3sVu^*JgAR6DB5-F9 z39c2KzeWQ1eod}HT-!D6%-)qi2th?DU$q9G+%g}s@jaC*S;lEB<%cvrkj($TKGj1l HO_u);*=R9o literal 30661 zc$~d`dvF}tde`Y0%}66lmMlxMWP9zl@AdU~R~k$5V|RTw$$Hn%U0ZfW-u1oO>r7hH ztx?M}-Q(^a$?{rMf^X_3R6;^h5Rz1=R4Tk75FS-j2yh{x0#&J^3aH{0AiN65KTrfh zD)}RPzwbMz=OugZg3XL{bY6X4{k_k3j M_-M7YIUD#jHuNS$sI(C4Q`avL#jTi8vE7ie$^OLt7DQ|Q1x-uIG|P!NP1Y+ zCsgC0T0N*5lWKKRa`&nFlxj??)oDqOsQMvwPmg;>t CMLd`-Dyik6HE$5s89Y8+Rq$J4?C%Cpt843$qPZ@*fnS_jqFm3pSs zS65FccT#y{oI91~p2P@Niqm)*^ArrfA9+sVxpo-X%i)&&_ME-6uy}EJ_+6)!Y=qGz zI|?`F?OS2%<154d@6%_wNbgW30~9o!WJ6Me6u5pAI1NuShAFt=Ij$F7^XpzQV;+h9 zCmz>!Vke569jQHp$7vXe-_UjUQ*bv5t6m)YLG7c!Pm%&<-D!G}llWoK?&Yo%QLl*? z#q#771!c!|qW8lfiNbo_i)0|l2$iht#EI9C3~6JWg8P2pQg7=t)aY(KOr!+C>k`dV zP;2n;IGv+ly&i@U$Gj*Cqjtr>3F20Rqkb(2Badg3cyaRHt$XD%_no2!X7wHx=0Bhz z#ps~$x>hrQ5k#_hXNU~oO%mjP-C``5YX5kHYI6ukAV1HtCMO5Tryt5e(V+S|p-h3F z8sc__0p4hQAK)615r8rxqkv&V_5)NA83T+WG7iW@ #84j}?4se*`Fy9rYSF=0F@gWWiSgPG&RipSmtk&)b z=Z|u@pTjW@$2mN};RJ^VIh^Ehio Pb!sU0!z$zeP?a+y`3xGy3?vBf}~F3+-W8JxZem}FBwDSuoVyn zRU)q%MsCcl`7t5Tx?kf8>vgBL9Ns2a20F(K+iR`$bwZ+JDQbK5buM_g?L@V>j6pNf z#)%UpSAgCaffu+OPfP9*R+$pS%SV90Gp5;Xr~WVjoOq8D9vHCnmLCg2K;mZLQW=VX zpii(mrXC0q*Fy;t93J6@=hrr5LE-?@UgtPHn#Q-hc78+08M(1&F}E31H=H2w>M>Ue zA}6R(3C6rbeen`Ehz4!&=w0d>f9p;nf2m}M31Y%)TI6?(ApQ;t&TfPa@2nU3)rV)d z!{}k$bgJIjn0oXB{inHe7GtTO^+Woptksi (=5A&}1fWb$q*1{pp_4 zacj&fScMFJ8F4{o@%MeSKZ?a==CW%6309a63X>>ff=rdm$5Ji<09@OA$ *QP5QA6f-;HSWv&d$lhwGqnZZnmv0lGHM3aIX7i7STDV3*5GUzN) zFl_73)yKq}d@rbawjZpAQG@wZTAW5=fcFP})oD0U)v<|H`JsJhE%u@ {&Y94faws<6PMhvZ#g?&WIKUt-;2U#7&kZY9&F~J zb`dP=j2%}aznRS0V3hWjN6YRfz8CXTE6ZhjJqjE4>!mm*l4S$&;y5QA+QZ9C)5=IQ z -NAE?{}gZ-qHv#MA# z{N@Y{y{#B-2!`S}IKm)Lfbo>TgUJ4XvWOu7vS^x8H49j?n6wLG@M0V>^NhWu)#PE^ zi&{bkYaWQDQyel2!j!aZBRGNJ6oQiozF?Yp)bd&{nS}5=idw-2+8YwIvZk$(409tN z80UYPf^?PgW|h9(GOL8CKNW^&>Gh(Oc$iU939vxO_Xjh)Py;6ani395%wI2H&Mb82 zDnA|6e3jCO3;>0N!J_t%ihm5e2RznN)4CHX7{-v|OBSQ`Qx-NJW>xe%XgZA(x+nY8 zCjE?XuQ`x{%~3qs&Zn01?fmtOn!bJ`SW@jaPgz7Lp4Sd4=OB( tUTl&r9~HxJ2~m{SB}B&_11V=hKYMr!{{*Z8K>{mjQ8CY5XvTWjdlpndPB9d!7Ow z@1DgBKc=JziM#wADPT`3Ey;iE)LY(F$kGhr$v(ypqLLddbd&+w< yHmFby8*9E6m#Po~7_8$R;nUt@KlxVijJtoyZ0lW6IyA;j7KVw>juD29 z(C;kxEpy%R>_{eO%~ p!^Mmx#UlEw1pE^EmUl^NIw#uC9CkwXX6G{GOq z&4fI};eeYpVS`zvBLnL3e?;+>2fq%{`l+ZCIdy_0Y+Ayn1psLrt4GU>P)5HvL83Q` zhq?GiJBssw@e?GIqj(<||AHW$RML*cAabx*#LRye#Q&-c!1Oczy91O zh&;@b{F8V=Od=1~fT@jM2U;Pw`+@e%n3pi!=vaBZ&_q>YAnWU=V*h_Y3;JyYzk}d+ z5rCZ*K{ptcYxQuAu^f>_QAkKV7g7Pvj&WZzs)Hyv%dN(m7coWfgG7kNfUe4-iPLP- zdn%5;h(d_2(W=++f)Z2}GOKl}R7*j>3! bD >l%^VUPOYGzprUVp zv=9$v&Y?N1LPYwc{%4=DOpo-a7Tqm(u%n#F 8PZUU&oD~ZmmrBljDpgO(q?M! z;xfUFZ>M1XIiF9!?`(j}gXdMDPYhLh_>&bcNep^Du#2Z?7^PB)#dNfAN!T*8*UL(a z>ZCw30+ruUT7oZMLIAn1j1>?;78+it6@I|TW=QCS$Q?o-L5aFkyBRNg+YI+-0NZVO zpABVhyX579{tas5S5qFF0Y@FSrbxV>vW^jl9k2>&$U1I~X2yxPvX)ESmq8xCsZjew zbqTd1%US|f8P*t;(H;l1+)A*12t18pnJPYGp_9c^)(MOOsPjo;WI&ayF$odWQ9_%A z1R}6T^yatiGFxjN*kZK-$k=D`dsay3r@NFAD#@lJkV*iawubH#YU4;NvAp8Lh7JYV z6eIw#s*KQuml=zK@*dlNSVv1=?|WGF@^_(6%e>#0td@-GY48w`3Bzd&lb6a4(`%g1 z5LL@e;MKNY<9_oR|GhF+0IgN1_PcwQ)k09hWC-D)el7CKp7HzMEa;b$Fx^2o%GLI( znlw0OBI71 !Q~t zjmnO(g1Myoqje&U^h(*7LMp8HL GVoQ4n)prJ!IKtD+MmmPpqv7|*L_;Dv- zmUkz43!ng-zdNng3DR-~qV_>vk~ZBDsI15w)j8B`0g$fwD)U@-)S%9oGVD_R5|f@a zBOf;dKF}U8@+Wv;2eGrDQ6_`U1$Ue(SOVc%x1TbRX(eQ}a>(S&n8>V&9L9dc3d3>y zS33~_JPC- (44-4@yE z50i$-5o{c5*8QaX7V^OKL{Nw^*)s3)VdtoP3qb?HuBo$8K^>l52nhs~qzRdX=mksb zME M#$Z%o#u_7TSs?0^v&J)dE33aV znJH_CM57^+{AV&JEMtZ!SSdHn7#arb(z3jm?+%K@f-PpuOk`!*zRDO{%m$xVCLTZ# z*l^ lg2SB(+)61Td2?>YX~G! kt$j6Dz3MY(`fcH%}ZekqIrb=;Wl1Y??^L2qHQukwYda zkr@$xhqYRl9B!}kqaUyy{UBRGhY5t(s&`YpP>MlJb|PVG(A%4KxQ6|ae(Ei{8^Bgu zBkj7kp0uqsu^6{`TOex)pby&Vv&jJ1xh$lL)gNd|vQ;^(%q}V5uI!@V4 W_ z*hEHVsYGl1PGx1eEF|TPl$r$yLZ$7XTq|rP#C({J2t{Gql9)QJge{ym;Vd!OPBWPj z(#94qFA)uZ@sJ7WD-(y{*l^A=W{2FEHA2K@fW-5W%ovI3W7a|Xj?v#)Yt%YE@MVfk z5LrT52f0c28ZW619V{MaTJzNG=f!rKCS<$VvH1dUYEvYB!K@Vxn1y4@vDRHY^Uhdt zd}S;1Bh `i9%RBfJJmlCP404A5IRD7+MGPl E8UC2!*QfP2(B=&Ewh6r)spaWQW+^@yFiVl{;?f#mO-^8fM5Jkk2^*Q* z50v|%a&Ia3wsM!1dxwQx5?Aj+-X) 4!A?<@B!%KfTxSC#vT za=)hB2g>~} z7r?nC9)mD^CYFB$ |Si1o Rz zi~+MZghxP!h|hJ39AY06mbs_?*7ocGFS#1Hs0I0bS+>v{L8^^`-*;^c1gS>G_7am~ zSs*o`R2ne}GiW1mYUNLr)|j}pYS?Iyh7*@z?2&%f&zIjc5=pHYSK`D;TC(4{9(j+% zcab6sVu67ZlX&KMb&@fn@{%%2-~xBrjMhaxsfHWk>BPEJ%x0KoSa%}-3H!Q8_x^bv zc=Q-570t7}kjgON1Ed_mTWd5;M?sAiSZhGh qUF~@f605ec_My<@`in&QJE{#KwBrUGJwl>$U9??O4WC zpn(}w>&P?+pfk&VV$XhodENc~OkceeFS{%LY+uC=zr%hjOSI7a_|NsN%%9x5K|$~C zs((7I>g$|8)Aw-OJ+k}RKik*wpX =%Y8Y&(3kU9 z_FM=}CAvHKYkgh*_1>H~#rOX85#;ZG-HhYit#p%x?y^oA(LI{K(>K0v_T~KDzMQ|; zm-EYgv+AZ9-L?OIU+o?e(p~*m``*Am=**c@S|O2r2CrT(e?#qI Ov8>N}P_W=+y}hQrB>gn4Vqny`*h*?5?>f$cQ zn+Hz}4hk9RCJyC)i~w|@{7(@4Qv@j;DE~7A!17mS1No!W#%}^OzKAAsBkTY;_JS|( zC1L>v4G69bn7u@?hjbc);4+utlQHb(w>!XLj>9~MgX}gqq#pk)6s9W=ei8?2um#B; zf7ricH@X3nk<}SFlQEz(@+KpvGYV{i7D%6Q2ian=nZo)I>w5`9y33~LXUekRHaM&f z!ToU1w6{;%dvsIXPXrUP*qg-0qh-;&bS7_Dy8AhEz+~n+GIJ&~-;tR&nS&jf;w8CH zuc08=I&Y<-hz}bjf@adue(rq?mME(8PH$Nj{)-RU;_;5SEN>drbNT1{GI~|kv!Vj` z6{nGP**}2UM0&}YUUK~-$n80TTnA!5cLaUKeIqz%MvynX gCH)ytGcWqtWL74xajxkb_^3V?Toai zp=7S(2|u=-Dr&N)dT5JWT-kyPc %CIW~q<-djCZzK3c3Luy%_3jV9%krK>f+{wF*>q6; zH6yK-%SK3CuZK>;&wS4}e)*frKBPXjE)-9s^6l4+@LT@pDPy{qGNw1W1k@PkUL)Bh z0yBubc*7wU$$af!m|nMWMxgvJQyKCRf`5e|M)2zhA~Pdqha!JM4KM#| C$om2~ zI9x6vIEw({dT}HbDcMHTv8L@^E=b6Gt>mwnF2y#)Rx^?eWGh_Sz=}S6$&A;bHnOz( zF+>A3bgb({+$hO>@;ycJ eE;7B%a9i{I{tC;EkTg*;dH#3XGsHZdInK6<* zpC>tD9YuQT-OM;+^7Zi{Y~7@OU2k+E ! ^|~F8*ekQ3c|t`zxeWRb h`zpK8Llj2#9 *bPuz-Zm#^(zlHX%T6TL@|DTn==wn>-G+tldqI1=RDm^sTKwfR>St4Q zjZSc+ 81%cipd*oq~fC8zxIW@a*Z41*00d^S7W1_+do8+?I-0TBEp zuL4kOBcs~K{AM!47SG@OGBErG=FcyA=BYT!^J37u#(B4QP14fIgm3BCl;ufJ`dJ!O zL`B&&$M #}mFtd}IYtiVl&aeQP^>+jhsJla8X^h$rxCN%G?@4W zrO%dFD!9{AB_mb70%EMI%=J{sN|jHQ99uz^0$u^B%7jbeyIaffH5vO1Ia0l65VW$X zweUf;o>$X?JK_$kRor2%UTAOM5mP# L?T(Deu+~rdsqs6=YsE$T96TNBm=0;cJI7Tr z0h^T86-RLY%QNF8d_R~~1IZ!va9BmZLP~vsi1IXiL=LHyuh1Y?ih#8EKXqdJynO{i zb;A$z8Cr1@WA9z45}s4t5DX?2Cp6d5bfM)#KZtQ6?n7Vpf^SkXYGIq!E;a(M5hi~1 zOz#s!S~?y9Yv`!lhv^-|?Kpv0^;{>q!&bFDE7yMh`oDWJ`SX+CtW9#P_|4im{v7%y zGv-rErKNS*^Iel;aU1$?xE96VtK>8?9EQ_#j(n2I4ZS!xoygH+QVn;c&ch(w4odc& zpuW>_?C?g*398OcIA`DWTam+> n#$vH^5k;S|wZT+;j zeHzcnhT}$l&8e5TtaMu^-$x3r1Sd&~pD`4cH7vl`ZNNw1SIeOGy@d65jqt?P!J>?p zc-zam{IyiFXw~an_B~4LmJzkR<&|-|M)pt8qulSp(8`aQaf>>E(XtnG-}vQ7*^sG3 zFv?7Xk8g_B$OlQBq|yXX@Q{(((7?hX5f=-jur-(&8`=bdEt{KOKEycrkmsOD-E>*O z_>jk)7BvXOoZ8F2HG!2@k58fh5V*`0<}#vH9 ONk=?J`sIjqFpJw( zj! jXmnYm6-)fV!=U6y^OAj89h{= zr(ZegI=h=`SJ&(|or@MYGg{81GE*>W*mQ5fe#5zY3(R&6?0tPNMOUR)BL|0`X1d1> z^LQScI(mL${>*|)%F&|D36&hwCyit^pYox9F`~j|o@e$t0KUw2S-yk}Cl!ApBTYjq z801FTo*v|pLy?_hkXBG @u@ zVQF_pJ>8F6#h%XMR +#R1 TN^Yvg#1u0Hq(eBszV@oGB{}bP0`eSpx5K z_R5AYI4cI$VQ=`g4U(hcu-;+`g&SD3ap~f=eHmVEO}^x%xIlU59yZS4gzpO;U7~6? zP|*AA;sPG-)=A?ag7KX6TVjRw3g5M4FNc2Y*=39#O0N4}*E6KnVIcOy#&E|15W}k* ziMdk_UE8ts*1#o^ot?I!o+RREhqnS^-16kP5RO AexIzvc7QDn**m)*0KY8LJJUmn+vhn!}(g%VoK))FtSPOf(FlcJ7k7 zC?(J_mmozhMhZlf-wGC+OFFhhF_d}rB^I!0rIxNhisnP9nAs<=RMSG6s|aFTMNnj7 z^y%)Il2~>QS+MLNm_=~dGKV3LAbAwQYY2`ZIF8aUr?#LUHA=`6_)qB=y?z~|w Zzr#zY(I7UfW2` zm^ nSD>BAu*5)28SaTh zat;$d9V3#(WkhD=O4jn7`yE&E0mp-vtXN_?%=!47+OI&jglDswEn4)=j9H&%TAAU@ zQEQgJ#msc(h&4u9 m1Dm6j`5wKV?B3)W_wcj zPGt}BDZYc**Qjmz9xEKAzN+ScZE8DZ$4F(aJW%>}piYgFWUQ~{pkc{92&9qhn)?kl z^F}4h>RZWht+C3Q`@PsLNAw?aNuX+9-O;}LXZre$_U&KT3g63?hP!M_RfkVXk|5J* zZ@cU=PwBYh)250Jp?yasO%TPDB)+3 t9D+_ZT%gK~irzAvjOCvNzS z5WyTU7~Os;vT2O>P{D2~djLugx&^i(NshkrCTDP{z3s-Wh(+s)7gx(aZ3wWO-Vjp} zEhnyKE#J0YiTB@!Sw7ARRGG1kWN-uNU}iScaTGLbPzYZ4sgWjXAAx04gDcJhR}5~+ zB}47|h%)-Vtsre9HDKgnd5L@_y9D~w>>ib<`JdB<{>?&q#(mf*N3!u|Zn11%S|ppl z*g$Q|3g$v8?4hMQXl!E#SZe7({7P5|_+i6M%2SqMF3k1Wv-1}6z XGZkYmSx)j!Si?kdXROgI{bDQCP{Q=aMx5wPeTJuZEpzudQ$3dnpIDEG z(qYZt1ijN6%zU9^O6b;ew9sgKnK!iN=kEdch2%iB!g_vqbNR~Ud-k{4r`+-~JWZc< zl0AHc=5%HCUQA30dL!w@#a(q_fF(_XBvR5n)=AE(qH^87>qV{Z9m}qiKt*PvXD~gr zFeQDHsl(n|%_!XRUAd?w*$(Z`b(68{HS6IHRLz7R#&Ia9d5I0rcRs3sB8 g2=Ipl?N*B-HKf~QRL`I=0a8uHU+3v85i%X@2^LXOT z3#D^Q_Wd)Zo>}*P`d7hj3OB%LAeyzr 7^ji&ZFG#gAxNZm0TJ@nf0)$6B2#(t2$7Toqjn z8% L!YaLBt^@n5SF`SU#2G*_Z{4`*`BJ*kH!$|<7H-kuZAI>)*R8kyWs^y z9D*=7{bB&U8Q8M9KsdH|abaN&ZzsWlz%Ds~rt $3^&) AlR8Ok~I5I_wG_LmQ^i5(Mz78-f3beLO?ksXl7?kvB)U z4t;!%D<_c?#C2@IiIs!EehrI7y)p!n@{T)uXh`dIZFitX!}hg~NlH?v#X5W=X?O&V z#>9qB8eXiEC0eMPiQS6%l5}nKVo;7ek_d^MLeHfBnBBPiv@u2yNQ&_TE5a)z9=Ckr zC@$Gpe&gsW3bzNm@uOr%+lgYDvzYW;EC}eAsCB^Sz_`QGaO@iz@foW-QMwDC8G=go zXHw}NsMvO5wph`W ZOIn1ja=kf@>aJ%jf&7BGkQahz{dF&((%4=h zAh7QyJ0<&8LZiAFOGPjs%@lZ%Yf;#0@+{LemKC&%F3EF|zlQo}z#$v5z_g%YT=j65 zCl#};sBh9Q_ upEb<;B;we2-dnj^{`m5}n|GF1J_}ewjsHR%f#3|XjIb*LFP8;g+SJ7^ zdZk)v&VG;7oLX!zzWvtuGlGsW@%u!}9vu{fI19lgZh-3$S+*R4EzQM*w9pe^V?+sU z_JFpXwCGCMY=WFNyksMEi`QYLM$&aoyXQTYUS?x4uk?I#OJ~HE3i@U#8a`#a_U< z xUa}(q<;=y@?@S_zQ%f0C?-tgsGB$6UAER<;mveRZC@tm0Zae{lEPf^wd z!q>cH+oP@xsr7>w5 N9^l>~s2JRa7=8Zl8>d0M)+mlo#VKKCZC;oF~o zl$SM;;t_$Oz&(rywiOb2!>jAmCca}27@#-5@)@rl>)-SG=lELw$cy8>hW-lhe~;C; z{Qif_ckbW1dgc1n+gF$Gtz7!nr0BK_T*_ye4Y8UFfmhF%gaOzlkZcP~vBrHP^mJ(F z{r^_zGn9#YFMe7i_;q@V_0IS30=2(AHui9fTg@iveC9t7c=qzjH3&CCyokeGt`SdQ zG4S%e+w%+O&n;cJcmbRuY}GcXW<-iZy%QEbkMjKg2L`USBGv;Itt@v=n(+@kZFH zyYO#xTsLC>M&hvjfbw|^FZg`x#uxhB@*6}g_bj^at=S)yZ(Xw6|9q D_-|*=QoY %s" %(self.nReadBlocks, -# self.processingHeaderObj.dataBlocksPerFile, -# self.dataOut.datatime.ctime()) + if self.verbose: + print "[Reading] Block No. %d/%d -> %s" %(self.nReadBlocks, + self.processingHeaderObj.dataBlocksPerFile, + self.dataOut.datatime.ctime()) return 1 def __readFirstHeader(self): diff --git a/schainpy/model/io/jroIO_base.pyc b/schainpy/model/io/jroIO_base.pyc index 2bdffe7820075be7b69831065a88be75de8084c4..4832fae3fcca3340e1d1c61e2b65f4c9510eacfb 100644 GIT binary patch delta 2418 zc$|flZERCz6vywmZP)c>ec9S{Fx`YO#mPXnc{iW~){ueA41+C;%VgVSyLPvBZEcGi zWn1wDh6Eh$WZ4HTXq@N=C7TaQjGE{YM*;?e#z5i{iI}M*lE4xijATCT=X>ghCe6RU zoc^D4&i`DvB2HWtjk<+A^WwfU)5dvy!FE9qHuQ%3lnntT7Ewdtgp8{OD{#HR3M<(b z!(#>#dDrZOay(})2NCDYACuho7ALggHA@K?*uR#~j3juv*lKQ3`;@(M$ggydxl|BY z!1WGovVMgJE@Q`vC%A)vYmkX6+iCc8u^SfH`Ql$iO{8u@vip^Iy&6>Nqv5`0CH^S8 zx$2;ftd}bFz&7@I>BSrp`DUF9RQze(6;0y(>I%aqu2158`9+eb<@%>=VZ8%LWGmM% z;ImKvK@yv}KEq-gQ`$wiS6eREJ3G~o8t?41iep1X_+FxteA(?vBRKG0C6dIYDkr#b zuIg~MZr25a;eMs3F6xgJv8iW%r`{;R5A1sNKib2X9+99PE#3~oi-hOA`Ou8td3Td; z_td(fjrnV<>2?3jR|xyqqVEnp@3ICDOfg@>G}&feB^SMo4!F;rYwV+=u+;1U4=ZRX z(_YpzGTds1m)Tpb9__C14&$vh8ysQx+x{Z` Fw~(xVdB5{1yIv4tt2rR(Okf4QnEsf>HKGYj;D#L0 zkojhULSW1Lx6zj&>32gJ8~2;(u-^zcpn=^9Jk+j|&e#~&53|b13^`S^f$K3PejxHE z+dgntyUBG43EFWW(N0da@Q@8cxIFkswuD-ZT;~Z(&o%l#@Gf{IE0KQPk6cf1sxeE8 z^muB>3d5Kh8X+lVxBy<`L^Vzg?FUSH`zED?L%ZEGZD>--eaRAhPRP`VF!y3u} delta 2130 zc${^VZA@Eb6vumRU(@vU!UAZs!UvSN$x9s_Gp%!CgiXTOY__B>kW0CPOIr%JZEB@J z>&tL2BH1CjXht-F4L{6)kC{eeOxy?5Y*VMpV*Fq ?oepAY}v zdCqg5=lsuo &` z-E6zL)=Y#2amnt4Mm%f3AB?zWU!r0fm2^Z&$~#B)N+W~vejbo^@x>rGpc+hqNzm4q znJXgyEX?S5+p5dcG8DvrD!ed&o=OFb?CHwa$ht9FQw8Tyt+|&6y;^fcA9OpD&HkvA zk;@gWv-2Cj706`2)QPZ>{acqelK8{=DtMS(u3xo~`1{S3FpM`hU)0g-rGR-G*A~&$ zxJuG6*WP0OCJ&JKA+EiL`Q|l}KFGCm>~zaX{bsGM!w)zFr+~GEZVKCsTvM|nUJPtO zvgfW=Cu~4pYmwSsq4jo9&g@7eQaO2GhdP+{vGvv;=z9!u?E S)~r?_x-V2ztZ2$sWHM_Cl0>5Z+1|H-KB)tD%?mv|p!t*B7zj%q};qu=!mp^fS(N zRl{HGOjlCx*4r7Xpqk|(_tDn6y3Y+NyScB5w$|RL2#1&)y+)lKbmb%^!woDwl1Rnk zXV}7l%lf#Mp*GKOHaQwebxG+=Ir1F)y0@OHC+O e zkF#&$xAZ$TOC0A~iTTGqCSTpI{YLmjvZL2nbN+YQbYF1o04BztB+qvgL`b2(pm$ZN z5Qa2K>LxlNM-uJ4&$%|vsSo{=&9s#!JuroflhY&}o2r0k@%gDql6Dp=VY-|>Uks3Q zvR)M7C|XNbi0XoXtl=5LWm@5JuD#Bp&pk!sV_fqy-=R}_NBuv%KcaMmdaiAF`mh^* zCaE^OyN`I`HX6YD wL2*um5W~5z=$E{}wLNV4< ;pa&47K3+6jF_!cfNo+YV+kNYLIe5!-4DztPD2pC)1 F@*l3>rf>iN diff --git a/schainpy/model/io/jroIO_bltr.py b/schainpy/model/io/jroIO_bltr.py index ac987de..fe46699 100644 --- a/schainpy/model/io/jroIO_bltr.py +++ b/schainpy/model/io/jroIO_bltr.py @@ -10,10 +10,9 @@ import matplotlib.pyplot as plt import pylab as plb from scipy.optimize import curve_fit -from scipy import asarray as ar,exp +from scipy import asarray as ar, exp from scipy import stats -from duplicity.path import Path from numpy.ma.core import getdata SPEED_OF_LIGHT = 299792458 @@ -427,7 +426,7 @@ class RecordHeaderBLTR(Header): return 1 -class BLTRReader (ProcessingUnit, FileHeaderBLTR, RecordHeaderBLTR, JRODataReader): +class BLTRSpectraReader (ProcessingUnit, FileHeaderBLTR, RecordHeaderBLTR, JRODataReader): path = None startDate = None @@ -456,7 +455,7 @@ class BLTRReader (ProcessingUnit, FileHeaderBLTR, RecordHeaderBLTR, JRODataReade #Eliminar de la base la herencia ProcessingUnit.__init__(self, **kwargs) -# self.isConfig = False + #self.isConfig = False #self.pts2read_SelfSpectra = 0 #self.pts2read_CrossSpectra = 0 @@ -1151,43 +1150,5 @@ class BLTRReader (ProcessingUnit, FileHeaderBLTR, RecordHeaderBLTR, JRODataReade -class BLTRWriter(ProcessingUnit): - ''' - classdocs - ''' - - def __init__(self): - ''' - Constructor - ''' - self.dataOut = None - - self.isConfig = False - - def setup(self, dataIn, path, blocksPerFile, set=0, ext=None): - ''' - In this method we should set all initial parameters. - - Input: - dataIn : Input data will also be outputa data - - ''' - self.dataOut = dataIn - - self.isConfig = True - - return - - def run(self, dataIn, **kwargs): - ''' - This method will be called many times so here you should put all your code - - Inputs: - - dataIn : object with the data - - ''' - - if not self.isConfig: - self.setup(dataIn, **kwargs) + diff --git a/schainpy/model/io/jroIO_bltr.pyc b/schainpy/model/io/jroIO_bltr.pyc index f9676dd2718ff9e7c1ef67023db3d93a8be14671..2ed5c685f2b7ab68155f2c0dc833fb9dad14fcab 100644 GIT binary patch delta 5142 zc$}?Qd2AHd8UMz{i*G~0Hg>=UAF#&8UORvl2m#+VhmU8QV}WeOes9-f&(16}vo>~V zHVGlEauxEbsA 1Log1!a972vM`<&;qlilQXRIWE~y;55?mK(B=GL*Rc1q)a~OTOqs+{M#U01^%i8 zwE*;72v>u@8p7Mbza7Fmz`rBGixq-i1L0cm*9t-rusR4TK#Sp7fXe`9{Pn R_RHgr+}UYdIqQ;=vkoWfSw2XIM4vlCxEIzCxA`@r9c_bAkYxdDWDqAX`nMe zb)aFO22c}d1n32z7El|g12hVB7U&!d(~Cgofi3|3JcOF%MRo)2cP}!Kx=16?qrkQS z6E|uERtv#(K#!%^O+XbG^ ?!X&p$nPJv4&FqL~m H-?~1m zC?)*)-1bcF7Uv0i#L^6BzzCYHd_!K{(K11D@&yC}VUtF676_0H=)gvV&mnA2b0xDs z8+~m#MS@-%e=o09>8U~8T7-IpI)t4Fn;+zoXcYY!jr$8~lu9(J!D^QItA%7QvYl*{ zF`Q)*l59KH5+Bw{ANbayrc4nl@CbTuKj!Kj|4Px-*s@EdY>_5B0<)o7mO4+G@xQ3- zm_bcv$)gY+Mq+`0DPfdZW6_At$i909qGissW^7*WYs$f-yufc4R~^LUksSy!W&7Qf z-EX#b3HnI D5Ka znjSxXJ%{i(0z(KQgb)t7iMY>%e-e+B_jx?nB4juJ{ $5P{;)lX*?tWOodEO)$(%ESD+_oPRL;UNEy_jqkx>c)m!z7CFp3EiBWv9$$8 zJbb3% ;23M12%Lv-?|$GW|-^&J9m3iyq(K)R{3zA2t;$pT>XM^qR6u zO22aNXb81R>|-lx Klej1X4O=kvqN>(z$B?N5l#7Iab99`(dq$k{c zCe3GW_L96U?5kWgZ+QL jtU&nw!i zm7DyL_7fTF;wSAT%2fPL`y08+LGB!>RT}tLj}WDa|MkeeOiG(@bB4`X%?Jh5S!Ssr z_C9wyUd$lBKPRL{?GO0T&Y6O@Q+L0`f7n@*LF0gOi#K&WA-s60tHFB}j;>zjwj% z!tO%l2fU)YR@u!Db?-g&q>vlb-bWRT$soJvY{$azj-V4?a5F|^Ib!e2VUb8`9ge@4 zjPDr25JHce-=M`VM42%;PmUq|rBr_Lj^sszVU(>F5Lhxth@5GGKv1)6r=MvdXNnAF z7OV&aDAOG^DJiFHJHn6ov7XvP k!ZmJH!tH}|nMIxhY(ln?|Zn`w1w|8vV z6f4^%kMXyA4v&9`77EfjgnSv{D#A4cIrQ-*K&BC95casOMpZ`*1cOeZ{A_1F!pM{S zaPNq6nP2Pm#a?y=C(W=}zZV0EcKpC4pJY10nk8qDjC;+&S6W0Pa^1-tcOH_9PHJ>b zsYbVEI|Mt@TjzF?gR|L6Y -_FO =`06Wqy# ~uc= zM_y?xog~XarK&Y u^jgc$DM(zKX|rqvGnUMd==ULeQd_BvriV>kwKQ9GG}B1u zZdf#Ji8MQ-%yCv8Zs5AL2aIu>r8A2l2GAW 8)#Px2<{fGHywt9*3t?n{}zWHevbJ7Klw) zt@kp~w$ec%&=HQTdctz{D%V@WjxD!dvZSN>RFU3JU-~>*DbRW^fwq(YZpOr-yZ~|^ z@P7?GBHl91!*gEr%!q~~^UYzkS&U*v W9IjJ5Jb$DiCVz3r zH?@4!$@z*6FSq%$WeyAlCPWxXp=-mOm=^B`B7^WGBsY@yF&>aVloL-?9o***E|awu u&-$gWtG|tGRIc;?j#Tj~QlV!niO-hova=o~dFne6s& zmUcoObbqv&l7_TNCM6GkXgWj7r0FzM+8<%sPTMqpI+V6EO#83X_E)Eq?pbLswo$;n z8h!KKv%6<^&)IX%-urKmAG}Gbvi@0^7oFfw1t9%&h=0HM8+Ws=RQ);upgSPE4k8uc zuK=RwfPX#cxrhs;po?ZFgexJk0sI?)9E+|4LP%O{SK=svCsCFM;VOt!gTESNpL_^! zgh&neYarqVzdI!@fN(BEYQbL%kwhK%>mcF*zbDmL2;q8&G=RTBycYr61XBd`Vz>yf z2=J7@5m+vq@q+FGeGN?6Kwqm!i6W(nl*!IbpqIl`7EIe=k$`_Q=<9$rO1%{cOL4PO zyk3p2RAhr9Rf<%DzEP4IC2=pCO0Ql1S_isEcB@yUAvG`o`X;5KQ4y~qO^R$*q*;*` zMOqbUQ>0yy4n;Z@=~84%nk4jYCEBV;k0QN_Y*VZLf+E`$*`dfzMRqB&Tai9R`V|>a zBr&MikRrp1j3_dyto?){d(vdOO}bPVV@$bpujNr;nSH=&fC<;O0&9S&Y|zK8W?`@W zuwJy|r~{T*SdYMA??L_}+uq!45hy;*3?~0;+e?afinsP)EW+AZJQSGWuXlFx=d%mR zCjLrxkGEK~dWit)LIw(qOv762PO_Qz*#Ey_`KDb6=i?!hwIzRNj}YSGgE_q!7xqC; z5$WO|=hTyR{2w_bU2AZPwFo5$waX^^ycxUfMM74eJe%7|20S>f9$^zg141K0+3L5@ zWyf_)Bsb>OkxEn;f=pVuKc9AEvzdi`qUMSoQf!# ZtPu$3hNN0gL;*NR^uCNp~;q_zuI|O>9w-s_<9my65#~GDgI7b zHNRh4> b @^-Sn=`BKL`2EeBT<2Gqh*vicW(qBriEAAdA!2k s;d=<*M|cC_O@6bj!SmLtmegf`RmdumJKFz4rWbLDT*5aHE?cw66Z0Ll z7CZrH0eTU|Uq$#D0w#%7XU5lrtTXv(=YZ|W3y{unVHTz5<>^KE5`v8S-eq3K=?Br% zsiiJ1Tdy~3i4V_qS7!A7bs-y1{=U1A(5M $K&41L6Ixu0PBX7lsg~)G zoipRwY)qtULv|Y1BBynY-r(Im`!goxpZB;(DEUdx)m*ZZ8+{&862H|)Nh|+*-`0!+ z0{tcAhkU;Oa;DZi8FbUyoN<#M8kos{*V_Co{)>USj0#%^o#Ynp9ei3$`t8A{`dhdc zblAdUBENE|ko=T;hdiX2j}LW|1V2Aio%phH3zcUrq+&nixfMBWw`JBN2tI^S< $)cm96F%u@+Q)x6+_&w=sG(rl zv8OL1TtWCIg3Rh?5M~g<2yMJ?q)M3X#K<9Xk-tCEk$6c(R3H`+RrTCtDwu96@lh70 zc=D(p(xu82c>`ucsd6XF7FHZtyX1(WpcWkt879S;^441iHV5M-Rlude4O5Go{N(7G zvJbG&&k$}Se2j39FODvfzww+WZf1<1_fP|O?zyw&K|!B~N2Vl%=Mk=Q=UDTp-$J@- z=$fg~PeCPo%rW#Ds5FGRiDIUp*Og)Dd$79da!$zJ=Xb`26Q(LJ$M7y0w>}OrS_W}A zUVg-Fz)$cK&~L*#u}E!x@hKy?9rP@?Xam0>*;4Kh=SS8G0}E@OTRefVW*B-bV5HtK zrtpv68cJZ#a@;F{=fpuJ=tU%1smnKZGOCp(e1>9Caow8>n6bDeJCM4P&0C?7vL-w} z 8MZ7|cVg~RSpG-QUfuzS`i@~G&=;s(FhQIZ&o&d! I&gwaV&7D zi#Idr7ax1ve0Wq}LffKN$aUJBwty{t$nd`p2fER)03tCMRgw^CXB)ggfJ9-5i9h0% zE$&1>*pKP%h!$ONo1q9Z++yQF7H95-*qpL6+6L_`L~(aO+z}o&g*2eC{o#g37(I6S z3}XRPSlkQ>53}V~USVmQvabx;B}KT1tm+o>G{*d^*3ry!k^^4MS@gjj6JJGUj|C f&1`6bP9M zZL{LDm}c{@_{z(%YRGGYJU`Ry874m19Q<8hJ;~v}@iisnbxqzCFz=+w16B)}hR(!e zV+SWsYX+l*N(WjxU{aisVzQ8lQ6zv#`Bj#>0!2VoSj=k_ck($q&Rtr$yJS_^8Hwq0 zVYV9+h4Hq43R1A_S8OXFE>cchHW%Ud4pmk=N$OXTResz-oJ)Siq?jKn- Q{yAKMBFazQaX!M?tvN0
wR+2n)hUS%Wh^*#$+|k?EJh|Tb<4$SqM~~g z?h@;e*Bac}Y>Uq}oVIQBjl*eZm|rpOL@yGs9;bzzfuC^t-7)AE?%+%eF~XVYC*KTP ihg0L(@C#Vu0j%+H>|LC4Z1EX54c!uNi94E1672yDktL-7 delta 1386 zc$~X_gz@tsMt0`Uyj(TX4jb9+nE9O;7#Q?3@^e%5Q;RZ_vnMyIS!|xbY{rO1!e+B5 zs{}R)i_H~mOR(ygoXv3vn}*31oRhJNhjAUjDxS(cA4B}3ki}$wp0`-V+j(bWbx$E* zB3AQd`2(<;vxEOAHu23T1e!5D4AL-7$OBz`^G6{|Cak8Eir&DC0Yg8V$#W!6V|C^x zDNJvHY@H!}6RQP#WbCoWi 49k zH#PZysRI%)cd)u|y2VT^f#tBd+0q1SirUO%{e~68p^T1YELc?^a&^G!(8<2;xmZ2G z>Y;?a6e#jugK3hXFJ^u-^qYp&03rWk?1}G6z 2mPxV(0Ic4*=>Px# diff --git a/schainpy/model/io/jroIO_hf.pyc b/schainpy/model/io/jroIO_hf.pyc index 22b31099a57616b37a6cc8cda9bfcdc1301a4079..b6e063ef163fc91cb7870f155c109958542839f8 100644 GIT binary patch delta 1040 zc$}L!i*fF3Mt0`Uyj&4cb2hRsU>3GxU|`VC$j?pH&q^&W$jr;HN}L=hYq0qla|&+B zPWJ7%CF{BOvEY!@pIj}_gj3F1& av zloXSiirdsz(or})*(7rSo80C=+0QtGbaJ!eN1QI%tkjDuxPft@{sXr&>(x0n@6$BI z?MXcyDcrjMxo~fuq pb4wEzn~9RgYF3?GGdiz5?+j5B14o3tHk8BVz;qsI4y3%gjK>x zYASY ap%-!)j2J(>WYYW}BSsAvC$!c@9?jB$ta=Eh=-3#TEwon?>E%U=KAGPXX)_;a x-GV}7Q5+{EYHr{N I5Kco4B~P;8l(dyI!0nt3^76QyV=KqGSz2)`&fuMVU!7yKw2Cxt1#h)EHaDtC z hxTS5|z1 K&pP?Gn-u`dL`eVu delta 828 zc$}Ns&p5S@k)8Q7FV|XWhmGuC+4$`k7#Q?3@^e%5Q;RZ_vnMyI8E 2OeQ~&XPK-nI18&BhtOFZde|l_317i#k*!D+BUXufqTN^}CT|dr!seIB0TPF> z8Wbsck_D?orknwGs~^bAW0!DK+=n%|Cd+GZYz|hD#*p0Hs1}ahD0z)W?A`+z^ D$R+ vck~qd=U7wZK?iSa8jLpwIfY`Ec = 0., self.dataOut.height[0, :] <= self.hcm, numpy.isfinite(self.dataOut.height[0, :]))) + else: + h_select = numpy.where(numpy.bitwise_and(self.dataOut.height[0, :] >= 0., self.dataOut.height[0, :] < 20, numpy.isfinite(self.dataOut.height[0, :]))) + + ht = h_select[0] + + self.o_height = self.dataOut.height[self.im, ht] + self.o_zon = self.z_zon[ht, self.im] + self.o_mer = self.z_mer[ht, self.im] + self.o_ver = self.z_ver[ht, self.im] + o_snr = self.dataOut.data_SNR[ :, :, self.im] + + o_snr = o_snr[ht, :] + + ndiv = numpy.nansum((numpy.isfinite(o_snr)), 1) + ndiv = ndiv.astype(float) + + sel_div = numpy.where(ndiv == 0.) + ndiv[sel_div] = numpy.nan + + if self.nchannels > 1: + msnr = numpy.nansum(o_snr, axis=1) + else: + msnr = o_snr + + try: + self.msnr = 10 * numpy.log10(msnr / ndiv) + except ZeroDivisionError: + self.msnr = 10 * numpy.log10(msnr /1) + print 'Number of division (ndiv) egal to 1 by default. Check SNR' + + time_t = time.gmtime(self.dataOut.time1) + year = time_t.tm_year + month = time_t.tm_mon + day = time_t.tm_mday + hour = time_t.tm_hour + minute = time_t.tm_min + second = time_t.tm_sec + timedate_0 = datetime.datetime(year, month, day, hour, minute, second) + + # 1d parameters + GDLATR = self.lat + GDLONR = self.lon + GDLAT2 = self.lat + GLON2 = self.lon + + # 2d parameters + GDALT = self.o_height + + SNL = self.msnr + VN1P2 = self.o_zon + VN2P2 = self.o_mer + EL2 = self.o_ver + NROW = len(self.o_height) + + startTime = timedate_0 + endTime = startTime + self.dataRec = madrigal.cedar.MadrigalDataRecord(self.kinst, + self.kindat, + startTime.year, + startTime.month, + startTime.day, + startTime.hour, + startTime.minute, + startTime.second, + 0, + endTime.year, + endTime.month, + endTime.day, + endTime.hour, + endTime.minute, + endTime.second, + 0, + ('gdlatr', 'gdlonr', 'gdlat2', 'glon2'), + ('gdalt', 'snl', 'vn1p2', 'vn2p2', 'el2'), + NROW, ind2DList=['gdalt']) + + # Setting 1d values + self.dataRec.set1D('gdlatr', GDLATR) + self.dataRec.set1D('gdlonr', GDLONR) + self.dataRec.set1D('gdlat2', GDLAT2) + self.dataRec.set1D('glon2', GLON2) + + # Setting 2d values + for n in range(self.o_height.shape[0]): + self.dataRec.set2D('gdalt', n, GDALT[n]) + self.dataRec.set2D('snl', n, SNL[n]) + self.dataRec.set2D('vn1p2', n, VN1P2[n]) + self.dataRec.set2D('vn2p2', n, VN2P2[n]) + self.dataRec.set2D('el2', n, EL2[n]) + + # Appending new data record + ''' + [MADRIGAL3]There are two ways to write to a MadrigalCedarFile. Either this method (write) is called after all the + records have been appended to the MadrigalCedarFile, or dump is called after a certain number of records are appended, + and then at the end dump is called a final time if there were any records not yet dumped, followed by addArray. + ''' + + self.cedarObj.append(self.dataRec) + print ' [Writing] records {} (mode {}).'.format(self.dataOut.counter_records,self.im+1) + self.cedarObj.dump() + + + + + def setHeader(self): + ''' + - Creating self.catHeadObj + - Adding information catalog + - Writing file header + + ''' + self.catHeadObj = madrigal.cedar.CatalogHeaderCreator(self.fullname) + kindatDesc, comments, analyst, history, principleInvestigator = self._info_BLTR() + + self.catHeadObj.createCatalog(principleInvestigator="Jarjar", + expPurpose='characterize the atmospheric dynamics in this region where frequently it happens the El Nino', + sciRemarks="http://madrigal3.haystack.mit.edu/static/CEDARMadrigalHdf5Format.pdf") + + self.catHeadObj.createHeader(kindatDesc, analyst, comments, history) + + self.catHeadObj.write() + + print '[File created] path: %s' % (self.fullname) + + def putData(self): + + if self.dataOut.flagNoData: + return 0 + + if self.dataOut.counter_records == 1: + self.setFile() + print '[Writing] Setting new hdf5 file for the mode {}'.format(self.im+1) + + if self.dataOut.counter_records <= self.dataOut.nrecords: + self.writeBlock() + + + if self.dataOut.counter_records == self.dataOut.nrecords: + self.cedarObj.addArray() + + self.setHeader() + self.flagIsNewFile = 1 + + def _info_BLTR(self): + + kindatDesc = '''--This header is for KINDAT = %d''' % self.kindat + history = None + analyst = '''Jarjar''' + principleInvestigator = ''' + Jarjar + Radio Observatorio de Jicamarca + Instituto Geofisico del Peru + + ''' + if self.type == 1: + comments = ''' + + --These data are provided by two Boundary Layer and Tropospheric Radar (BLTR) deployed at two different locations at Peru(GMT-5), one of them at Piura(5.17 S, 80.64W) and another located at Huancayo (12.04 S, 75.32 W). + + --The purpose of conducting these observations is to measure wind in the differents levels of height, this radar makes measurements the Zonal(U), Meridional(V) and Vertical(W) wind velocities component in northcoast from Peru. And the main purpose of these mensurations is to characterize the atmospheric dynamics in this region where frequently it happens the 'El Nino Phenomenon' + + --In Kindat = 1600, contains information of wind velocities component since 0 Km to 3 Km. + + --In Kindat = 1601, contains information of wind velocities component since 0 Km to 10 Km. + + --The Huancayo-BLTR is a VHF Profiler Radar System is a 3 channel coherent receiver pulsed radar utilising state-of-the-art software and computing techniques to acquire, decode, and translate signals obtained from partial reflection echoes in the troposphere, lower stratosphere and mesosphere. It uses an array of three horizontal spaced and vertically directed receiving antennas. The data is recorded thirty seconds, averaged to one minute mean values of Height, Zonal, Meridional and Vertical wind. + + --The Huancayo-BLTR was installed in January 2010. This instrument was designed and constructed by Genesis Soft Pty. Ltd. Is constituted by three groups of spaced antennas (distributed) forming an isosceles triangle. + + + Station _______ Geographic Coord ______ Geomagnetic Coord + + _______________ Latitude _ Longitude __ Latitude _ Longitude + + Huancayo (HUA) __12.04 S ___ 75.32 W _____ -12.05 ____ 352.85 + Piura (PIU) _____ 5.17 S ___ 80.64 W ______ 5.18 ____ 350.93 + + WIND OBSERVATIONS + + --To obtain wind the BLTR uses Spaced Antenna technique (e.g., Briggs 1984). The scatter and reflection it still provided by variations in the refractive index as in the Doppler method(Gage and Basley,1978; Balsley and Gage 1982; Larsen and Rottger 1982), but instead of using the Doppler shift to derive the velocity components, the cross-correlation between signals in an array of three horizontally spaced and vertically directed receiving antennas is used. + + ...................................................................... + For more information, consult the following references: + - Balsley, B. B., and K. S. Gage., On the use of radars for operational wind profiling, Bull. Amer. Meteor.Soc.,63, 1009-1018, 1982. + + - Briggs, B. H., The analysis of spaced sensor data by correations techniques, Handbook for MAP, Vol. 13, SCOTEP Secretariat, University of Illinois, Urbana, 166-186, 1984. + + - Gage, K. S., and B.B. Balsley., Doppler radar probing of the clear atmosphere, Bull. Amer. Meteor.Soc., 59, 1074-1093, 1978. + + - Larsen, M. F., The Spaced Antenna Technique for Radar Wind Profiling, Journal of Atm. and Ocean. Technology. , Vol.6, 920-937, 1989. + + - Larsen, M. F., A method for single radar voracity measurements?, Handbook for MAP,SCOSTEP Secretariat, University of the Illinois, Urban, in press, 1989. + ...................................................................... + + ACKNOWLEDGEMENTS: + + --The Piura and Huancayo BLTR are part of the network of instruments operated by the Jicamarca Radio Observatory. + + --The Jicamarca Radio Observatory is a facility of the Instituto Geofisico del Peru operated with support from the NSF Cooperative Agreement ATM-0432565 through Cornell University + + ...................................................................... + + Further questions and comments should be addressed to: + Radio Observatorio de Jicamarca + Instituto Geofisico del Peru + Lima, Peru + Web URL: http://jro.igp.gob.pe + ...................................................................... + ''' + + return kindatDesc, comments, analyst, history, principleInvestigator + diff --git a/schainpy/model/io/jroIO_mira35c.py b/schainpy/model/io/jroIO_mira35c.py index b447548..632bc93 100644 --- a/schainpy/model/io/jroIO_mira35c.py +++ b/schainpy/model/io/jroIO_mira35c.py @@ -13,7 +13,6 @@ from scipy.optimize import curve_fit from scipy import asarray as ar,exp from scipy import stats -from duplicity.path import Path from numpy.ma.core import getdata SPEED_OF_LIGHT = 299792458 diff --git a/schainpy/model/io/jroIO_mira35c.pyc b/schainpy/model/io/jroIO_mira35c.pyc index d632d4f14af2226a5d20c730704c346232c0c107..99aeb8c93b64fff67a3c6c8ed82d55d55fb8ef1f 100644 GIT binary patch delta 3371 zc$}SAX>e0j6h1d?(j_S^OK8(V+q9(((2XVFj1DMmL)Z%3mMsb~?Ymjp 4wq2Ch@sle3I^wvJZzW;420t2XSB;C;&<>L`xv% z0G|WMCbbv{A){imE>;O_Mp+(2OCeSUzA}(H`4F7}v6 2CN!_1e5}J2w*qB7GDjpT 1Z}6D|JV!3`cWxM^Aw=49Z?mMnKsI3g 2_#%P1NlSnh~%dM%IE;O`!0e*ihuJlEj-%pG1;K>M65Gwg0&(sXA+~xuy zuSz-cj%Qn{P`ieoE4Z{kvxsMpHyIgZ|KlERGakJoHKp*qEGv48fZ>wAIn{mL2|2DT z>6U*vtuoU!ZKF{jug7`2{o+vC9$^+jEkYdvMnyZ23nVg-NCXDx23(>CEgp zwd&j_MdvMmu#n@NB=g z?T*$qN;hUWSXR2mqS4U=>U>UsKcmrxOLOPmBFZXhLsgUAR7@rl@iC=y^e F4F;3#~Fl+@m30=v=W%wu>51XyJew5{d7}t@{uL5C#!; zA`DHO=Rm5i;tH__4WjX=E_1R`Jo5*fF22`kne8gkt29mdB%Sh(PP(C`a|3O=7G~G{ zo8z}cRy>tGvkNJnkJ@>56W?W@U1l?z%vm=i`N45X-XY}MQtj0*m@GNcg#S5f0a?$R zYv+ zTmA`zLwa1Y+vD4XhK%SD1RP=-mO(H*KGTD5HNqNwtGzGg_p%6W(nChUvWS|L7sU>& z1l8l|To;e1T9P)y==4Lih}sel(*}OXy`D7ktL_@RG1v!LBA%p@k;A-xk+XEfpzTq- z`*khDLyO8Y7Ty^lUz>V=ku8rL=9iZ)AxBfCw|ASSJ*;yt@110
p4;VnJrFpGr38rsTScsp7*CL H7yz6(M=%p+|_uKNmJZ}iS7KEqRD zk)?W^FZIk_{D+ EMDcnFC;49 Pur C;Z z>>Pfg-QkuB@va`$tx@zt_aOX)ut9G@ia%s17AAclT~j|+m5lR#JEa`!ri9qW{1=*R Pq=-x>MJ7J7_LYACiwo3h delta 3231 zc$}41X>3$g6h3!4o$j=ydrPOwlrp7s0i=}xQs^!)Etj^?!E~JVy;<5>%FLs+1yi&{ zg|L+?iHIghLHS`6d~O&c@sC8|hem>|8X-m#|B(1YV*KGfclxHbwzf?2zTA7>x#yhw zon_vyr^)5hBq!pJgjio2>+FGvUj=_^_!F!j%lU2uKr(
*Jvfi(-HXvCpZ zkofBu@MMEG2dp_jw)--G5HcZ-)WkjlJ5Ux2o<-oz1#2z{ojC9q!J7xxJn-g&H9sVc z2TwG33&2_c-jPDE7J}CVRug!Oz*@vr5 *p_OsHNq5Qhe2wdDmem9y)aY?(k9K&=CGk
1hR qz2ytO%FiD_6(?cTXSta_K5&jEpCXS!raIIg!6L6Am;9SD-;~hGQ{kI3U}l5_a`5 zkH$uF* ;3Xu9-HxiBF}BX=1hSktql=0%_**5GgU#mkOS?U?%|?^a-$H~G zgaVeFk@6oiq;XZ`0xmPDi7^-S#Kaz@+ {~Xqpj?-lqW;B VAH?2$1JIw&Qo@H_)OSD~M0R7sU z>NnKYQ@VW?rwTHs$R5u`S~Lphq6|y$WOjV%YF-|}cvR7)=`u(%;g2qqj%hqPW~Hzj zWol&((=BjnX_f|gOzdHSRY&)*GGjIGgkGa%Gab;1-RBP|F1ydkv-=#HA3_*L*n=>F zuy1~>cB||1?h}JERJDF%Gs`e$q2B`qYZpyYx kw+aSnHQ+Yh)bTOBBWMDmW~LE+{U!kb|SBC{9R;mU$K7B03| z@s`n{TUz|?piJL}c@BN_t8&>2wQ{*$KQe}vu#P;kk0RNj#yx~^MvF=GtiPXYh-h9$ z*s2lj2+h6F*xG_%(Oy}0du>g!n^tP!qF|%j7ZjJouF3~rLql7u-|bU^bU94SFI02; zYW*%+&c0u@l~l0BRYhsxi99R^{6Q+%7-wBo1=+{Ll)W;oE!fE_ Ps5u;?6-??xW|~m5uo$-4hW*Ffib53SHR&+IV{%VX||@StVc- z6OWEfAydRiv7ZziV*$CxACM+E91UmKh0u%8C$5d21AO|(^c3r_O-=n; +!pq zeG0w8UaQ@eBr@ P&IxaETM1o@Hn1)@-_rOBuON40C-0;rXdyV ;s^4>ocm#fzR diff --git a/schainpy/model/io/jroIO_param.pyc b/schainpy/model/io/jroIO_param.pyc index 99bc2908b9d308275c3d821f2dc4bf70a05655ae..4012460de2af570a0ed070ad0253865b2ac3971b 100644 GIT binary patch delta 850 zc$}NLiLrAtBRlhFUarltb2hRkG7CF0Ffiz6 2+r{v@UDYnf=W!rHZ-6!9{ zf=4&!=0uh2OgME{soUT-`iF)fPRYsMTB~ttw9uBvrO{~f3>{Nk4mO(1XDG|av02AZ z7gs Iumqsa?> r92wa*KlahVsbq72zYeY>X|#E72s3UEF@{CpmYfyNhdWwdMd$+ns4X3l delta 734 zc%19p%s6usBRlhFUaq{5$s5@dnfYxQ7#Q?3@^e%5Q;RZ_vnPMlFxtG9Sqz(m@n%l; zWL9hvlQ;1cF|ut|<&9& &;nDHiO`xGmd@-MDq~9V}QS zYE&LDVU<{ S7Bp zqs_N0EU^19!m1y8oaxxrV|T&_`xxv-O>&gN9$TM0lCkTU?InvX6pbeT^>Jk6*lh2s jgH?L-27euF$;N22Vkk3qM`wmbV3%Nv;KLp@QIYxpGcf9z diff --git a/schainpy/model/io/jroIO_spectra.pyc b/schainpy/model/io/jroIO_spectra.pyc index 95c0e820cb5c2247cf4c0bf4a151acbc2bdda186..4b3c9b498448008dd4014158e834fd5c3eb98098 100644 GIT binary patch delta 501 zc${0>%=ogIk)8Q7FW2VSIUCvM@e4aMFfiz6 n`QDx{ `tu04h#$o`WgATsrp%|#RZvp`BjON511KF?qpqzL(XV( zF55~roRZ 6KQ`7 `tuwHVh05`WgATsrso!naSCc4S5YG_p&a=B5t&~lx-y& zy2NHf-gp+Qs;>%G@L-jgBzKDmtHee{YiveYOg2|LhfREQfciJAc2Dls*@IQQN4F5G z%}#o3j94}F>fgi`M4ML`*kaRQxLMoC1G~g_V=b%_lT}T WJM `7 KM*jPY{9<;tGKbiEOhbB z4+Q2jVo_|m`MA(;7OWCn65E)tNlfODwqs=9>@Ho0ReCe893K}}eaRZ%usL`00?lk@ zto{hn#qbB%1`|CF>{hoJti>)-X?z*G#1u1s?7^aKaR-~DOeg!>EXL|sOWQwK)z{jo F0sxPrlcoRw diff --git a/schainpy/model/proc/__init__.pyc b/schainpy/model/proc/__init__.pyc index 38a91ab17d9fa7ca86187bef151b478795c41cf1..8f1ca2e3fb7dcce858147d897acd53bb65964c39 100644 GIT binary patch delta 40 wc${0qvVn!2`7 ~|T3T^Se{^fU5vQ}we_iwiRI@~aXjCvsX()?=E1Rj!fU zY%(`<01i3x$qSix<1%yeGL|z;I5f87GH|mW2MaD&9>(dyOs=Ik<$}4V;F8;{!*dV2 uWsU6ClSB9lak`S5Uj=tqRtgm0)Tl2g#EjF%ZjnTs0c|AOhtrF!Vk!WZ>zi2s delta 425 zc$|Byvr>nh`7 ~|UY9T^xH^fU5vQ}t7eGLy3>J93*%)@7QDMcjO{2(v#{ z^=p{-U=!cGk>w&2Rt=}w1F>pI ?xiKJl_FBI*^>MbuZWdPKsd~yH) diff --git a/schainpy/model/proc/jroproc_base.pyc b/schainpy/model/proc/jroproc_base.pyc index 5dddede5a1863b79b60583ea2d55cdd6143cdfe8..c39d0e35de47f5247f0c67cdc99a492d807e6c51 100644 GIT binary patch delta 714 zc$}LS@-2j&`7 !w1r^db9Ww ECth<@F?M! z{8re2k!7=-hzH_Di8&SvhxDlyrCy#=c{ zFGm|zgYIzLV8p87FIPWS4Oh9#uxpsYtH{W*c^fY;c8Bo@`T(UP1=E>uNOMdU6ft0A z+w3Hw!+}M~864hanLJB29IKp_+#C$?gNkO8<>jNWsy`$jiB)}yf+tq>-xPMBi*G)t x_yW^^AVWT>6k!!#tD25Yd~>YY9?W0{X-LxW#VY
V!lim3r;1L piqVYRi>E3I; WJHH7d*XB3;KRB=&t0T#a%?)Ogn`BIY#%`AhW5FsNrWnP@vv{MT jAXZa<8u2hPa%^TZsb$6LsMD5bv6}kO>Kj(|@-}(^6ER{8 diff --git a/schainpy/model/proc/jroproc_correlation.pyc b/schainpy/model/proc/jroproc_correlation.pyc index c65d755c8a3f1aabcaffb5eb39df89e7430e89e2..789820c9007b7721b87baee7d3ff8511c0d85c3a 100644 GIT binary patch delta 212 zc${m{nxn 39 mvjbZNBTh+Xj;FYcwb^XUUBQk^a`HE!8#v_l;MDU(L E@wxV*nCb%1e-B7lMO{0u$eMhfP-Z+tEe~t9ojgr diff --git a/schainpy/model/proc/jroproc_heispectra.pyc b/schainpy/model/proc/jroproc_heispectra.pyc index 6dec0a4b678ebd3725c6789c785c5afd7a862d14..56cb920d8adcac39aa6b11519aa19657ea564f82 100644 GIT binary patch delta 535 zc%0km*67a8{F#?4B5KY?_Pvb4UJMKj`WgATsrp%|#RZvp`BjON9XYKx^D*sa#vy65 zS%j?tmrk3__t}H7N^W-KG+@H1YY(>oZX?Bcvv4`adh%(3BAmWx7j(nv#mVBrl8j87 z4TV?X_Nbb;A8se_m+Zl1xWnXG($8^fJR`%7+pltR;kYFa$UEZpkGJA7oO0Gm({MUf HL0J+26%3^@ delta 462 zc${l=-|5EA{F#?4OU7X%`(8$VHwFd<{fzwFRQ=SV%;fCJft=Qxg_w3TW0A1gEW_4- zO^40q*X+R<5}N}#4VbX1zQ8Sj-57n|ENm8APkt^?gw>_X1>LZEVY0QbBqQ_YP~lbB zJ>n 2h!3POotC1u%<0x2UEnx}uiW53ULmvhg#_dRJ&b?3Lr%3{vmh8bEO zScR$_!_Cahe2?Yjr1@s1oygC~%_~U~N85B_t!jpgIauqMQ7sS;WDeFImM~*~rJ9x7 zd0D{+i;g|0WS#ar3S-0C8gmdQu-hB2@jIeoL9B8KC0jP^60r_aP4)@l&qx8k2K-V( z&@3-uw+ZrK^Pbq z{R);8!;dVjVm(W-;b _8rEQFw}(&snk~h$tTTKAXNU6bq7Z7zKZF$x zI^N4Q3Zvo%zDX4Cek!fw54U|#5MNv |MV-SOnu}1U)mZrJGKqJ5=)Kt z?Buwe4K(M-)Kj>=;@C&@xf7W6bU!|i>%VyO&9MA|`Id+e#%v7#Mk#?4^G32{t$*HO zIS2lh!Q6EV3tE(0o^+r-e#^?Rr?mtxvs9f&YT4h32DtGuIg w5K4sGvBLgt80}b< z{Y#+QPFdJT9?)pg q0 z{V;9fejKH%2AYF}MiR(~wpIR+NRe<|<&tEwf!;9v8ffIVX*7i0^F4!V;7%_4S2p># g7$-2T5V)ZVv$jHd4twt`A}@UZOusdf+i5!W4`=TjV*mgE delta 2647 zc$|G!Z7h{x7 1?Ed}S+J#gVsTG)LtlHOW^qt9+~-Kg!sc<&PrM%ibh2 z8WXLlhn@_xXvq9vZJM^WCQGU1V5!K~IqKhYo&G-8d*AnUKi75N&)c=8R#w$^s#RyL zHn#DJ-7&RGjE#*=$mOdAIUzZPSF-cu@)n(3r(O`wjovyop^*pyO2S35W$E@GRWMzA zwT9hw^0$Mat6LvRDSNt?qwm=#_nK|iIZSxg*#fkboSDfx&J}ib^FX+G4Hm#H^t%QE zDd83H9#~++UPw;9AK3%Xo27PmUUxhn7Kqn7*#kggj|~N|GRr-6NL0mA;%mZb7*Lrw z3QNeXshd#2Zx Hl(kPX^lx(lCHvj zq^`vJiq47ZS{#;9c1OIi+73yMx?zMRR2AKbl*BZZRiY@h9Z_;{n>{n#aupf>9hWpH z*n0I3(z2D?OAfGDXhW2kueL)kPu}Z=eNHtxVgdn8MX=B1CgXp`zqh$hKv{Xq2UH`D z4L@*4Y@=9kTcU9LthPf3)5w9Hdq~3!oegl2v4h>yq5xYa^C3I=Je!By8hbXaDdWP{ zo?R2fR>~7dl85@ENhPZXObFI9!{7@{GIhia0OJkjA@O?kR@|CqO_^ajz pmNny~g$5dW{~XFIkIup8U`zI=^Fw&=Y+ndMdq P046`u|bG827a7VegX(tW9M@rf7Ah_Q62~QdmLb&g4lEk66d~a4@9BUI>KrVb{ zALT-r*Z9$Xuy{7~+%bT5K-N4jnBIx&;NPRmn+{V5Bx$jUM)B3rB+ROdpiJo1tvGJd z(^1@EQ8c{-_a4EkV#p8LK~Wp%EOggH1GSS%Nr