pygpiv-2.0.0/0000755000175000017500000000000011274563022012327 5ustar gerbergerberpygpiv-2.0.0/piv.i0000644000175000017500000000037411274074206013304 0ustar gerbergerber%inline %{ /* * Extension to acces array members of GpivCovariance */ float GpivCov_z_ij_get(GpivCov *cov, int i, int j) { return cov->z[i][j]; } void GpivCov_z_ij_set(GpivCov *cov, int i, int j, float val) { cov->z[i][j] = val; } %} pygpiv-2.0.0/README0000644000175000017500000000245311274553516013222 0ustar gerbergerberThis is a python extension module of the libgpiv library obtained using the Swig software. It provides functions for reading and writing images, PIV and scalar data and parameters, for image processing, image PIV interrogation, PIV data validation and PIV data post-processing. unpacking is done with: 'tar -xzf pygpiv-*.tar.gz' building the package is done with: 'python setup.py build_ext' and installing the module with: 'python setup.py install' An example script and image is provided in the example/ directory. Documentation about the functions can be found at http://libgpiv.sourceforge.net/doc/ Only variables of int, char or float that have been wrapped by Swig are recognized from a python script. Other variables, like arrays, structures, are mapped into a pointer of type Swigobj. So, these variables are opage when used from a python script and can only be used by the functions of the wrapped C code internally, in this case libgpiv. Therefore, some additional functions have been added in the wrapper to access the individual array members. These have _i_get and _i_set or _ij_get and _ij_set in their name. For example to get the array member dx (from the GpivPivData struct) at index (i,j): GpivPivData_dx_ij_get(gpiv_data, i, j) GpivPivData_dx_ij_set(gpiv_data, i, j, value). Gerber van der Graaf pygpiv-2.0.0/setup.py0000644000175000017500000000441311274563015014045 0ustar gerbergerber#!/usr/bin/env python from distutils.core import setup, Extension setup(name='pygpiv', version='2.0.0', description='Particle Image Velocimetry module', long_description='Python module, wrapped from Libgpiv, \ for Particle Image Velocimetry. The module is intended for developers on \ the PIV technique itself and for fluid dynamics researchers and engineers \ who feel limited by the Gpiv GUI program and the command line \ programs from the Gpivtools package. So, those may write their own \'quick hacks\' easely \ by using the Python scripting language for rapid development.', author='Gerber van der Graaf', author_email='gerber_graaf@users.sourceforge.net', license='GNU General Public License (GPL)', keywords='science engineering fluid mechanics experiment piv particle image velocimetry', url='http://gpiv.sourceforge.net/', classifiers=['Development Status :: 4 - Beta', 'Environment :: Console', 'Intended Audience :: End Users/Desktop', 'Intended Audience :: Science/Research', 'Intended Audience :: Education', 'License :: OSI Approved :: GNU General Public License (GPL)', 'Operating System :: POSIX :: Linux', 'Programming Language :: C', 'Programming Language :: Python', 'Topic :: Scientific/Engineering', 'Topic :: Software Development :: Libraries', 'Natural Language :: Dutch' ], ext_modules=[Extension('_pygpiv', ['pygpiv.i'], include_dirs=['/usr/local/include', '/usr/include/glib-2.0', '/usr/lib/glib-2.0/include'], swig_opts=['-modern', '-cpperraswarn', '-I/usr/include', '-I/usr/local/include'], libraries=['gsl', 'gslcblas', 'm', 'hdf5', 'fftw3', 'png', 'glib-2.0', 'netpbm', 'gpiv'], )], ) pygpiv-2.0.0/img.i0000644000175000017500000000074711274071544013270 0ustar gerbergerber%inline %{ /* * Extension to acces array members of GpivImage */ float GpivImage_frame1_ij_get(GpivImage *image, int i, int j) { return image->frame1[i][j]; } void GpivImage_frame1_ij_set(GpivImage *image, int i, int j, float val) { image->frame1[i][j] = val; } float GpivImage_frame2_ij_get(GpivImage *image, int i, int j) { return image->frame2[i][j]; } void GpivImage_frame2_ij_set(GpivImage *image, int i, int j, float val) { image->frame2[i][j] = val; } %} pygpiv-2.0.0/PKG-INFO0000644000175000017500000000245711274563022013434 0ustar gerbergerberMetadata-Version: 1.0 Name: pygpiv Version: 2.0.0 Summary: Particle Image Velocimetry module Home-page: http://gpiv.sourceforge.net/ Author: Gerber van der Graaf Author-email: gerber_graaf@users.sourceforge.net License: GNU General Public License (GPL) Description: Python module, wrapped from Libgpiv, for Particle Image Velocimetry. The module is intended for developers on the PIV technique itself and for fluid dynamics researchers and engineers who feel limited by the Gpiv GUI program and the command line programs from the Gpivtools package. So, those may write their own 'quick hacks' easely by using the Python scripting language for rapid development. Keywords: science engineering fluid mechanics experiment piv particle image velocimetry Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Environment :: Console Classifier: Intended Audience :: End Users/Desktop Classifier: Intended Audience :: Science/Research Classifier: Intended Audience :: Education Classifier: License :: OSI Approved :: GNU General Public License (GPL) Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: C Classifier: Programming Language :: Python Classifier: Topic :: Scientific/Engineering Classifier: Topic :: Software Development :: Libraries Classifier: Natural Language :: Dutch pygpiv-2.0.0/gpiv.i0000644000175000017500000000634511274071673013464 0ustar gerbergerber%inline %{ /* * Extension to acces array members of GpivPivData */ float GpivPivData_point_x_ij_get(GpivPivData *gpiv_data, int i, int j) { return gpiv_data->point_x[i][j]; } void GpivPivData_point_x_ij_set(GpivPivData *gpiv_data, int i, int j, float val) { gpiv_data->point_x[i][j] = val; } float GpivPivData_point_y_ij_get(GpivPivData *gpiv_data, int i, int j) { return gpiv_data->point_y[i][j]; } void GpivPivData_point_y_ij_set(GpivPivData *gpiv_data, int i, int j, float val) { gpiv_data->point_y[i][j] = val; } float GpivPivData_dx_ij_get(GpivPivData *gpiv_data, int i, int j) { return gpiv_data->dx[i][j]; } void GpivPivData_dx_ij_set(GpivPivData *gpiv_data, int i, int j, float val) { gpiv_data->dx[i][j] = val; } float GpivPivData_dy_ij_get(GpivPivData *gpiv_data, int i, int j) { return gpiv_data->dy[i][j]; } void GpivPivData_dy_ij_set(GpivPivData *gpiv_data, int i, int j, float val) { gpiv_data->dy[i][j] = val; } float GpivPivData_snr_ij_get(GpivPivData *gpiv_data, int i, int j) { return gpiv_data->snr[i][j]; } void GpivPivData_snr_ij_set(GpivPivData *gpiv_data, int i, int j, float val) { gpiv_data->snr[i][j] = val; } float GpivPivData_peak_no_ij_get(GpivPivData *gpiv_data, int i, int j) { return gpiv_data->peak_no[i][j]; } void GpivPivData_peak_no_ij_set(GpivPivData *gpiv_data, int i, int j, float val) { gpiv_data->peak_no[i][j] = val; } float GpivPivData_scalar_ij_get(GpivPivData *gpiv_data, int i, int j) { return gpiv_data->scalar[i][j]; } void GpivPivData_scalar_ij_set(GpivPivData *gpiv_data, int i, int j, float val) { gpiv_data->scalar[i][j] = val; } /* * Extension to acces array members of GpivScalarData */ float GpivScalarData_point_x_ij_get(GpivScalarData *scalar_data, int i, int j) { return scalar_data->point_x[i][j]; } void GpivScalarData_point_x_ij_set(GpivScalarData *scalar_data, int i, int j, float val) { scalar_data->point_x[i][j] = val; } float GpivScalarData_point_y_ij_get(GpivScalarData *scalar_data, int i, int j) { return scalar_data->point_y[i][j]; } void GpivScalarData_point_y_ij_set(GpivScalarData *scalar_data, int i, int j, float val) { scalar_data->point_y[i][j] = val; } float GpivScalarData_scalar_ij_get(GpivScalarData *scalar_data, int i, int j) { return scalar_data->scalar[i][j]; } void GpivScalarData_scalar_ij_set(GpivScalarData *scalar_data, int i, int j, float val) { scalar_data->scalar[i][j] = val; } float GpivScalarData_flag_ij_get(GpivScalarData *scalar_data, int i, int j) { return scalar_data->flag[i][j]; } void GpivScalarData_flag_ij_set(GpivScalarData *scalar_data, int i, int j, float val) { scalar_data->flag[i][j] = val; } /* * Extension to acces array members of GpivBinData */ float GpivBinData_bound_i_get(GpivBinData *bin_data, int i) { return bin_data->bound[i]; } void GpivBinData_bound_i_set(GpivBinData *bin_data, int i, float val) { bin_data->bound[i] = val; } float GpivBinData_centre_i_get(GpivBinData *bin_data, int i) { return bin_data->centre[i]; } void GpivBinData_centre_i_set(GpivBinData *bin_data, int i, float val) { bin_data->centre[i] = val; } %} pygpiv-2.0.0/pygpiv.i0000644000175000017500000000456711274075031014031 0ustar gerbergerber/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 c-style: "K&R" -*- */ /*----------------------------------------------------------------------------- libgpiv - library for Particle Image Velocimetry Copyright (C) 2002, 2003, 2004 Gerber van der Graaf This file is part of libgpiv. Libgpiv is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ------------------------------------------------------------------------------- FILENAME: pygpiv.i LAST MODIFICATION DATE: $Id: $ --------------------------------------------------------------------------- */ %module pygpiv %include "typemaps.i" %pragma make_default %{ #include #include %} %include "gpiv.i" %include "img.i" %include "piv.i" %rename(GpivImage) __GpivImage; %rename(GpivPivData) __GpivPivData; %rename(GpivScalarData) __GpivScalarData; %rename(GpivBinData) __GpivBinData; %rename(GpivCovariance) __GpivCovariance; %rename(GpivLinRegData) __GpivLinRegData; %rename(GpivRoi) __GpivRoi; %rename(GpivImagePar) __GpivImagePar; %rename(GpivImageProcPar) __GpivImageProcPar; %rename(GpivPivPar) __GpivPivPar; %rename(GpivValidPar) __GpivValidPar; %rename(GpivPostPar) __GpivPostPar; %include %include %include /* %include */ %include %include %include %include %include %include %include %include %include %include #define G_BEGIN_DECLS #define G_END_DECLS %include %include %include #define G_END_DECLS pygpiv-2.0.0/example/0000755000175000017500000000000011274563022013762 5ustar gerbergerberpygpiv-2.0.0/example/img1.png0000644000175000017500000020271610734121365015335 0ustar gerbergerberPNG  IHDRH' IDATxl]u&Xd4:ތum$Cd 5{v'5R`Y~#{>[X`[3 _ k4%T=nAX`{(*Gd]{"evt?p#"JdFč{=<"B;Iug!G9/>YHGN9@@@$ƈ)R$FcN ϥ׾7$t[ -BZZP S7-е.+KɇwsoIB ĤǙtfyS C)R$؃ $iN 0Fmm'ZEy/r5J!R/f] iz);#UAl=Z"+@+ YZG_12 &r#4û)I A,q4\=; cfnuy0jd1SRAa>kQH zoB (p5q[uIc՞ ay"iGrO#=F/WlbEV? !گ+sJs@ʨj OcE9C [ P4Fa uzfS on|I4IbR)sj|BlE:¤z)sG &慻9l9\,@(Fб9pA0NoL//]Im5"10ar6F} ߠBr*D 0tM$]uEEA{%K Uw0443m#%vKR .ygʭ6E!bmhۯOh`^ӫr0"CA(Έ!4Gjϯci >ugmدW 8=kǁ:ޕEAb.GD~vQ?X] R߾[.x J̝a}#ȹ_r=cy#O]zw@Ᏽr zt'݌lޟΞ=顕;(VQH:9Qr!4Arس{ggD$ӱ!AzwE)u#nUƩ(}zlNj=u{Gn8TPJ/E-V}q}cg[Z)\.GxRP?)$vؠ($/oS8 T.I坊T ҆Vj/)`C" !@p!fNv%guґ;5AӫL v\V}%`P^CLKp@ `"-QE-Slk:Qgݔ\ܑ0l ݮcE굾tOM6eSSd" $Z 9@18ˑvmSDұjr}Wy^"S%H`!N08㐒%NMB$n_EB lpD Zak9hA$PH? Ӛbf~8LQL AȇiHsdsrTT ŔUɽk , {> .U*Ә3NZ)Wn4 :t%8ULjHg[ݿ 0&KZOC+?Ċ0kzINX=2N%tqPsv7I3Ǵ4'-!Mb8[#HH4ӥZQa&Q%JBg`EʒnA)¦*t}KbWgPTY3\zMSpRB!%$VN, AIIR\>Ḥ{%  Ub j8(n#'蚼ԊL=^y{\ޯ7@|[B1*}-P֬\H *6( _:L3DRN5<ַL!J!xU%ЀDNgLh2'ujJo1e W1 i:*F%FkvWĤ's"0Jn97JSA#H5MDi̧~w`oHp7fIQiUzA^`%Ũv~ao9*+@͠4ݣ) % _⸔|ŗuZ1Lbi7ylcN!(%k銈F60wH'ح7Q0̸OgCn+{ :+k6p0 _У!i. Iڹt-o]@uOlMەZ?hV@PKף8i _wB)ʹ+$ZnoJGF*hֺB@Ag͇1;b_)x2 ȬctPsV5]ۇoȚĐX>#,,CAy;ǨmcD*aRJ.wQh3r14v*X=q})$OWyQgArç:cb7Th84/MW@ߺnxℴ C#4]+ {%*ci 3v4¬`:Do>#P0Sr[5s@'焈$YkE+JKI,M٫ԼI%j(it#  @0 d<02q}hQb]P״=LU dVo Az=}DyڮPLefyH0zBt6^ص$87cіz =O'TN1E)m+6üsӂPQFm m@zG{:WFkVG՞Jx) d^嗂kL$>S%3j96ۍxfU*_ulTǒHVG&+e]|d[@̗pIy!guFbݬe)0([gpF9>T0Y+嶖33#~:@V`J֙w*1`sRJ'<fω1*I!`DgP{`E9Wp|06@pXeio/ '`Io[.ϔ7K@Y(e-iZn;2Z"Izn3ˋt[)~v7 <{}07$ 3 {8qC A@a@gdĘ388KU@ ʋ3 xdD5P:Û:sL/VցAϥ7Y&Ǟ Fs`?7Z`FF&.{;)~O,f…#bBY7HZSݾ N%G+XSgB HWzC2Cgt[I7B&E/>,fWJ>tvm@ UZ\9x UNzc:g, h :eYw[%zgV+aKPQh+Zǥ5z0-Yig0X[㝘hǵhuaMK7>K]>t$lf+2S/ظ*a"xyIabKɞ%Rmf c4/pԳ5le TglXm 0o`o8?Pؐu}kNҌel܅aͳ^lRK"MT3fƂ?geuR7G'N >gjl pu!ŕ&@h<21J+?fr]9Ro?/h!Ƹ=f# 1?cN?r*Yjt߼g}E=v3pEֽ3<~:zxycv ۻL( {覷{)Z1+TEֽV}yVVk'~$M0Ņ^.˓N>uOƑY9{~t~uea<z' ^<_#x=bXhzWXh49|veшLԧ!YL+nbpViVPM/뻋RC\] H1)T!+DjdB돷j @$e΃&k&)!I"7\A==p Q%teq텧nC VdMo/X/trF %z(iƥ[^TҁB` F72~xJqXٕbؘ>-\'gȞ) Ig]6yueBNy~ݧhZrtrbABU p[R #T;PZ@dr$u!X\0inRrx \Jۄ T܌AXB[3UHIc4SFZ_Aؑ "9 e~#@V1daOU(Nگol#fSewcA DeB~`I@"32ȴNjY9GKx(A>GcrB;K_?H{O] Z:2-m.ӎ @y3Hs|XǷ1`p%VҪ1!Øư >v( 37 Q7.e"f Yn8,hi]!߼nߞGuHa.TjW{2 ȅᆊqO["p}BrčX+ y"EI Vo(r r*&L[GـIgkDOZݒ#+*0 mWFl(_8A}<;[$YK$K_g@p ެ#tX[tܱ$5S؝v hǶݓ0u!OV=zibmi5GAH p;){s-$wF {841ڦ3\$p sZ҆t;0Sٌ& %s|딻H=ҍfP(.3 ` gO1{i&nr&X*NstyQl߹"EɄ0r Ưݾ5#??nn~h%Qc{Ï^V̉~/6y+/p_ k\ GCI:ؿ?Z>kݹh~8ԤhKR}[h8Zo?*6xG4 r~)9Ɉg 5;XU@%kraW# 7`9ThA §*`/h~s@spAn k R,}I$c1nױ(-?(Kr;;^ve[1W(>k !t}yowŬ,9gɿv[ qx׮Dj]\Q?0{ {rU(#}"2ƌ:ǏIBXh`(:}>{D"DxIOF+OyAm7 ?g#~o8yDK1`u/ZG}20+a8=u@{`-n)#<߭*v~pL)+&47M=WWQsbL7|GxDݾޏ#Y2mxꍱY~_-b>$sk/hVqdG  t|ғ%q|}XŸQ"pe~=ҹO4s8ΓQ ;<>+DwL~<_ 0UpV0B| bmoeqVV*+"ALH+-|/M3 5jw.;$GDIm_aFM3,U]{H[bM ͅ#b0nC^7/#J]qxd$ЃudqLV?f&;@3 a'ީ!fnbuOt#]k)Ɖk3!|$ǓE!vy|~8e7^r* G["C>Bf)ݲ!([~lY/G4~iCy wk{9(gcg[^4'~`1p!s;(ko &Na IDAT.ś){$>8|B=V 48.r9Ln{iჱC">ܞ;K@V/GgpڡQZq5ءύ~ZW'eЃ\'G2G3hK wdHH> ߲cק>w3_;-aV&]4;B[0߯,2Fo~G? |F+_NˇѓVS +)kѰ O,x|_P^C$VטԎP݄%(4R\zTB餕PB 8Ė4% nЯ\ X]6SRRdj(3#H~" g--[>D98|L%*/׻W'Ҭz\y\B;-(]fo0] L?*gR-1h >ZJw(.2By3-6)x`QW_ffKGRY>jiO:>mTBy[2Bb!=RKXM7HRpWzAF@LhO ooft E±|WV@$7Fe$;%Zi@FhG^ 0hzᵚRr(W#`)~e%α" P.`Ң%̆ʼpW(6GP(eU>0@c˖^'e94XGi#qPөwkYoI~ƈ ݌s*oU ی@boPh^=Y]ၿ+dV(]fҒr }d(5;ig;V!WlOB"J,ieP 1_+k~@]$굵z+A#8(]몮2Жro= AAMBnn@ifa,*A`kJ] mp\g@j*E3p4FCx(4'~#_ Plu\4cտ"H:%n[ 3WSZ `lqræ1;Je1b ~ϕUV_P[b1ԧZ/gt9uBpI7r(2DT ڭi.2FŴM$ptNݴ쉛+JЯЫ/v RREx9ݻHڎԭW,- Vu'U~[cFfRe:G }™thYfcEꜥU6mp{PJ rWRDBJ4'JwX2o#L;x)qt*`⹶IPtgRO+2ubUr6롬C‰<S9A:̼p>:Ή2Tj=.8bܖ-Џ;; eЖ$Ims2)!ՅP8{yu$ iI%JL@kKr^x6ޙ ZF4Rx&㐃7@x6nX@pBUe;0ZV1YlQ=H;O޹ IOe#euM{9Iu<D HiN4l[KƆ ɝR#Ns%me3(6G2| J_To 5"}GUL U^7-' +@/5F5W`"|3#9s}{+j]]D+VBnhiأݩU}~ZL_?w|?8SVƮ9!,C&+?dY-$yy-=;Ov697љ9(Q住οW4?+$sװ/'=1#_[,fQQzXyq|VC5d`ydh`Zх1+_N@/~晴4(fuD}=!IYUStl*isq bؒm%mOP2]j}.P]ƅGJXp8䜡`c,<.>cVqo̰0=by@Vɖ"Z /~5*ie8 ǯ[c57 Oc iuW+`piBHL٠GlOxWBHUdyY~+~ә8"#z}8‹rX@={ʖ ^:GGV[A_ =ƣP&/qt޻- H̾+H.׸h~hz4ˈ7.ΣA A`:nj"Ùtw0˶4+{ Lt[=,W@\AVLbgίWÐvR{RXT1N +ic@;8gp_wUf^w4LHiVEb{44t0PZȬC*`^-0^4PDA~Ji?d $MlbjjV/="ǦIsS68 ހ\%V ՓAm,@^flf:9mKNn!{w CՏ_▮"8P:@0T Y2եlCu))JF-O S%2f2R^o;1;d+lrN4RD84@D?^\yp3،H[uh*&)'(.pO-@Ҏͩ~(n˜yl+Bpa$/Q8+8ؽUxwKKʹ21Y<3oDQC^i!;9};DݥA $B7cAFJ _I,a.Vъ*p. 6n@$y |Pn1OϾPK%Z$2S,PЗnV$q`ft,62n `UZӳ>U({0IKt&*(u+qc Ć U|@tAϪHP&Hi.mxML+~?14՜16'!I("eZ!+ԍevZbY@lh4i, .noZY?Fx>,Fi7W?DSPHL7#r駿b> {~u :KJ'$t$TF)/Ň/>Gƴdikv3ԋX>vDFST 2I]\t?DIӷS%ۊ*LCfo2sD"""1@UBoݶ-k\jl+eSUu=X3,xoB#̕ #{Uˠ5o>f 'ހ@ HgEYiw2*! U `/т#iJH̛^9hVˁZhEiu_HaXtP,䍜YOR4` X~{(YHuDHԵn+)bL3*m3P`!y ݬ[SkWsz 'I:RLV+] w%q1 fRvKt-7ۥC \ʲ XH㽅I hh'.Rg>YȑؚҬ򦤳nv2N~/~ꋊaBlZ`TTbOD qp͒kWcO"2S]h.ś=@M9 NԽL08\ƨCrQ_9x] %jҼjtЕldM-4̢ji\`ڕbsu׀ ZJ_+'{vk9"CFv&#_SE~gRtԛW1#{ȏ&|$OX;St(ꠇ )+&V/_>?~k߶hq=7Q#r\_{7ß2^}Ƙ F/~RH̱G7U6qp"Ev֎؂e~7*o/ovM #r|*t?1 +Gmo;em􊝖I4-ϣWV©C- q :{+>.KfJT1Pt\;;HۄM2>9qPfV+%S `.Dg}sϔ4SqsU1>CWIŦO(¯H^߽C"ivI![7b:!ļx׏Iv>D43oBRNve>grxKLTD<(ҹW1]z'QV A ݙ(!q}rƘtOS@,~WE;!'bӂURW̼;@H(ֲӼ_⪼WpCD/ر?]ou^ . iBsqPuL*,儔TKE8v쩺؞nR=CW͍I&)jTlXwQ: P<Oܨ. E5!,##zІ!fsj=n t tqːE榟mE/lȪBW7ށWRDw,l&-{-Ka]}p0z?CSBT18+7A&us+t蝹&D !tqQ>(R 繪,&gdGRhwWz(8A䁚e.e%Gp:36Wd5{coB^l!& B$}Op2;$A OMqB?G$/LG<~#; nŷle~dFO40Yc=v(]Ƌ0-RDNK|(L(Ġv|\Ǻ ܸH>k#k$ N^B sc_vh%a iB)\TJ{j̉dpd!Mle% g1 [tN Gr;E'n@{'z`Yι鲧̟a}a'Kͼd+cwo As"Mejh]0wDLSFjaI8 o;BDRU)Alasj:j_Gp2syb!3DZ4ʹb$Qrg[pu`"[;5nn$KuK⼅ӖoS~?^0{=su@8ٚ_Y-ٸ-C6 W~{k 3=ٗ{%3sac_8w 2yDGf)]ܿ4ZT}YZlBBϴ'oD |Vv]LNchW"$)(/_u $L%;D6Bvj?0@ ꗿ^Mrka2'٢+mKsOܱM!Iö #|^uJ밝0B"өWna/*&=Ƙ,{0Rxͯ!^Uu]iEM?GmWԗLj ۲#4Z).?O)ZRYBꉴ;x7;eKڸZb,eqɖ1cX= -O]Z%R.ZM-&@ds9(G ۷K<[R f6dxZӎ䒂7j 9-oV'Kk[FbZڡNk3u]7E]`^. 8RꊨX@Z-B v~lw \c!hh G{M!JLK s .uw{ VHʤ˗=uKPI90,vIሰUi*W[kN!ͻ)Y=?!v짧'}ܨND>:~JsI0N' E0>5&ڦ0KBܴiwSeڝڵ\ OGG"QT"F!يJDIe7<*!Gޭ,FaT %?"C`7dH ~^679]9OCSW7{oʞ䋬g+83zy'(8уZe4iyKB}דysFz''zJ6GҖ~jZgԶzt#*<`GBu ]JްMc:KN>@Zvp _3(!„;mz,H}agכ>֐~W}K '8=bp>,F@d%zӳz<"E%H￝,<@9tF^~xmǁ⠨z߽_.ymK/f S@'z۰1 n h$I-bE:1>e`nEWfb,bybl՗5[A$Z'V )t~ւC'?= z&6Mfp{ǢIBD/^ 2K¥'\K̑srX|ܦeICTԽ뱅ZZބB' +$V&TP'kk0%}1oa_!c,!rpG/rH.oIcp[EZѽfiZDؠ gXBirn$ Q1R)ղKclh|c?$3lނ%eQ hn^H"gՒraoJc/D2Ɗ % fՑw7iT*QF@*U9ʆJ*paEX3Q$PH+.XܺA4"K;a|h4fh"հn!ރӎezy,Hv!|,h5sF@(++|XAs^SQ ) ;Ư 1d 襼 c.0 A^6] 8&P(NF0]Bɠ>(jQJ0'Jss\.Bꈧ /c$pIʟiN P;uk(#s,Qb~ "VzeaڶKFOLP"J(驏H)?2 ^恡~9T͗S߇_>%=#pAyF|'lrbw '71 ɑ)AǓzT$^2ڂ6ufZ)!|}plW!D c&E|V;o+J%4" B-h=jl\iU6뿂ݧ&f?ޥftΛa8|4P]U3QX) EEaP};mFO`~gY~_ fIe/7&gz_`zuN}^z(cY93_#",aD4磏^w|}8p/GY?r /돝>ޛ}Xlol ƤQd֢`֫P9>Y$TfqIEyHE=WREf,ݠDtX$G }5}] 7+AiY1=CP飴t4>rY ZçcȬzD>G=%boүޢߺkS=E6<i2||rf}_~7(53a4{x>+m#֤̓0US׶%l_=[i9 FwRvkϧK>P8maidBR  ^0mfvBt{0NڜԎ*lS 0ry\q;?~CE?/~])6H!д-@d}͠IA;NRC8!tMn5ԃۣG[M dnc%x%,^Ys6KaMb~DPHvɆ\~dAV P-&[y.u!!/S8k چh-X8fS!58f  #F҉jX-H]*=c>)3Ce7CH1e `VS@@H0nS%C!ߠb{bM/ՎShIwYf-daApT\ ZYDdiM1t=YYQ7딬Imb̄q ]|TMX.eˀIAL?٥ԋh|ϕX@ly0 C7r92tn;G\߹tlێ\wP0Cvd "΂,eLda夓$F Bx/^gOuo wPfԽ,= ~I|$*bęF?< zqAx73b`^<[77tW"[7{6uzD''rW==,qiL!0̣t6 ?wbt۱~ϸ8v=x o_獶e^Eyi = h,%Qq.Sqڠ#f ABHV#ye 2U#Sm'ݕ*f|eɘhK[ M @5HiK-KD h2?aEsI!*3̼f|Gg?Jwgy={pb h%pkǏ;[_yf}@,㳙^+ ^yܛ0/_Lt#nyލéLE4{>:u,jH?h\qG(ϴZRTE:M{Vˤ"_1-j%<ʹ ͑m P0 /fkPi,4uٿ^LIy1EίX ȁ+KI#XoOFzhn=[fVыNU߰r]paao>_Dͬ7>q8bc}CXAp3]g숎͢}+s}8`Z|<W9X9f=;ˤZpD6oFg~q羇Q1DD#5ywԻN~yߣr3gJ!g(uRPeq *PԸ^fx)ə? ^޻F'#|O7\*_t -GBӚX=S?*)2Zd%{ (x1DSk$'!(I= @E{B8DŽG@#}ϊ DQwEɁ+|,=f?fԅ"9HpOD^t Wh#|fa\H@쐈m;Dg/uWK-v7 HXB\*Oz$g1֓YDg~Ert{ 9URt6$o0S{)(8nV}B=>f KxC `w_~O"3{lk I/70 ;=x8FZ܇YOL r{O`4RNGIm6GK+6E0m5ԫwGLAk)ЍaO>t+w*[\Xǻi#o ;aZw\S L45g(Z6!O[{yDžOvǠpںnA0&I2]\N ZqM6_EROGoZ:`FD(=I@T|kػqYq; #{l!DmRf(/3 E"a[bG= L\_~ Mf='3)z[*OpF2S[%D'<c3RNfóOdOvVZT{m~ TE2~{Z$C?r"2RPO'21LJÌ`N, 8!DezDQ4gOe"lz}* #;"2C}>fz`6=qW*ToTB9 FZK"]HyTབྷ(~|jhɴSGᄆN [|;<:(czM% c ̜Sx.71'BQv>-8MՑ.ڕ7y|c -E8 N!gGke\\@qA\\C!^C jHnv`a9S #>Q)IaRx-- L_9(AciK \:~ԩ':s3@u,UQHs! >gЀ5P:Î#½S~HӞ;~,!dlOg$5vsN~1w"VH6!RewYu(m=>:CQkz+Uuڲn!edؽNӔM&7ZMv6,&1 v}Ec- } BFٲIݚQo?J yv IDATǎ@pu n^U)&A'.7:Y@Lq0R &]M :Ζ4;GZbۄ˻4זVs},$ͧ$}=^ .Č6_fr.@ )HԉS 12v`&3AU= mک$spZॗkB!~CDrF-;J7Ũ@Oɦ@A;ħkĖgNX mf҅)-mjX[ӕkJmkodhY"dRcޢv ˽HKs֤(Rk}mXСJEK#[KUs"Pw{;5} Ak_b|t[!Tf&UDh]C3q3hDvOz0)2{YJ`8E N~A ū Px޷wQ=:/&o rGk#z3?F/K=+?o&ꋧ>3pA{0@"j;_IȮU+Ðxkg|/<|/=3<'.B<̅]ueQyTJtzHunr,󳬜=l0G%k4>my[D4{׶HȳIpnBMGr+݅ Ĵ^རRD9̬=rXY>V ӏ۽Asv z Us`ЗUAt/LC-Ԁ٤zd2?cmpk] жxw, bmЪn-%$h9s w>|PhΟڜl-txTK$ &zL"h),s}y+(#s5̓*.^T3iAg&"$CBNrMAك~HƝA?e,}ۛҡ[`qW~zbYU,:< F{LvxNK1/jA T^ D<JS\zD4$ȩf!j3M| :hhZ8戲Q}{Hnwt>3B.Q0~-:@Y1S x uxض-(c{@ui X~/" ~dqUKQY8Ig<%# 4y,o;d e:LvXꩊiw{@滐ݭo0\6\ u4!}#N)uLҖ{wnJpkHuNVAGig!` vП$ yH G&i_ kLE_C1׾|z_*(s;;9h9V8*Zmdc8~Hed>GD6)>}o RiHz`Ձ gtm=nN:> PN h gH&ZPOe}WI}[u1^9u:_ Fyc0@{-n/-n!ϟl Z[NgQ? ˾m3dQ_MsJ; K7?G_4Rt"vqels@/'zz"yŹyZ[pm vM@=e0,)Z)ruVǍ> xOdxk!GD}+>h>sg01e۽YYx@<Nck`JbY{42DJBQK{P2},t7WDJaΖC/.;]{.oڱ=֠hyf+:u$ک8prr L'N߾pۇ{>  VO0'Ī6iOJ"n={~q2v⣣ 9UC|E<1N{fsMQELiO H߱`4.@MRdȆ[=v?fdG0% @%H yM(: L0FdݕŭVRu5 &bm:=SmQ_ljK`K8VZ?ǔ*,zJWW;y(~R-mzIVEz@%H?rϯF= ~iIܱz{0i%쐱^pE" ߻5l$ZLoљ8Rν؂_y#oG4v펂u3J\ٿa4i߶_H3'~fg3^A}zH]m|n7eH`V/Xt#a .A_{Crri ?>t_`R^"%[ՋbQ?S"R_ g *Pao7O"uat Iنm~-1V?{ϥUhTVg!5I&m .^nLZQ> qB;G[p @[>ձI؇SM(W oXh%69R3Ķ#pbYd06L~aV4 qn $,[,e";.Ez;lKT{K$F> j jcaEE^a(u l9 E [Eoa; M' ){WIZVGYZl}oofBXS8?y H!FImoIs+=!$LSج$BHk$΁pWX[X@% u4[DCsUiFbe~^dhksD-k4Άm~'8 H k'oO H r1NFVO X$`Gv;!IZE`bvOO\Z+2$5kݍ=K}GiSB?nUm6F<|KUvQC-2]VfDMv  Yl2؍5 L H?6p{n,l`ӭu1Y;Vun+d:qn[?fwݯsy#s_xkZQCg>)h7.^U$:H gw~}rx?#zzFY3cՋѣ_ys&QVA;wI,X]kKGF?K<b'ry@h(;9A/oxzH"׭T@(HItqS.gndѴhn*]F쐂m Ӳ0cAgZZn؍oFvJ;uA,<ч<1Sdf~޳ߒK|aBG \_ ^*i1}?ԴEnxdYE1H!zi?1G'/4LΓGCc׵C<|#Ʒh3(ʺ){z -gcNB &y.V.D/,WjeXi'>aŠDy_Ŭy}xO?}]܊JS>3lBc{B 3w,\u]ĐOd}`\o!=|/4+[>L4G8Pv>,Lcf.F.aBP' d.4vOr@Cm+da3~8[AJXUuj=O[ԢKЩ/mJV mV(Z;O44>W5M<(6bU9?7CêNwPwV9,-$p x ԹP6;60fkm=Xo" ZqBےVF)fIQP4F>q})Wf MY coɳ#C+QNu%/H__y~teU͗ĄR|=Eӑ?4a K6e%;S 6X~~gؤ--FH͚x4 vExFSL3k"h4: 1O>]Ga˴Q3E3apbۏ8M-pNolDwΌJBȢ6 hqv @ܘ ]C鬞tO%K4+Iw4w0WN)Zݼ{BZ4"~mUi6;KBZQ9C$Fcu,3X&ʓ zQ|#:w,n|5Ӓ򛛩"rA@AtFpVC@KM7ٟ?ŧD)v%oA ˤXw:jO` '1g'$٘LmmW 닭1$$ϟxkJږ|H] [@ɟ քeG5mQ9wP+C@'H~ ^U6!?ZJsgDY۬ %esj]wܒ.: ɋk)8ZЬjPUhXBI8ŕ8(M"zɯ]v`g]|a~׎f˪uIZ Q ,J=݌[窾8SEb9ĆNXRBN J3K M\9;TV. $f*?,@̢Wh@*z&X@ȠU_XK!eDeATG>2~gS^h w{p CF>˼HQd3Y_v}=TG0a:qu}y & ՆcbDA>|VdȯG[tjW_4hat܅ zxYyܷ|V/=I 2_zt8a^Ms7^lƀD(,֮4xϿOЅWUZ*Ac&!DV3 ~KG8̭ޑk~` 4~v0= @ձo߿cҘ., hܛە nIC4*EWJ¾ ^LZy᠄<L<'AЧZͿw\۔嘖x;N_|DDȟlжVOF&Nz26v $IHҭQesJϺ eoEOg~$xfs#}s(E~~{l33W2xd_-r-\Ξf,2d1CYOsq#Ke4U.8ED{/+s}HZrm@ZO ;yt-KtCBڶ[ ?'zI(.>@:;L2AMۼMȳ)ɑ8 +:Y]iȖ) &l@3XM*p?\|;c'nUG)ɴP7u5gDF#쨜g)`v>_אV IDATfO,7Iv+@3I p,M }q{,WaEƓhE~r[de"+j{UӢ8fb2 %^w !rN.w}*HL!\,٠֐E(Q|HCXo u$&$`AO{Fe<.( Be:/'y@a?hޥNT{1}ItlZv/o`M^~3]Bq84Ġζ޾΂Kdo$D=K 瞲 nlU9(`__xʂG$gr7wŻvK9~y쉨eQpW?y@pt }Í~a@u3WveoMFJq~hΜ6fO) |4.l3HܤG(CGR?Y뫍(:~negH#-u#K #s6.O;t7n/ư@luG HjM~J o". ?/_3;X(k@{бo- +f YCPBVR@txdB'mU~5PNamb,g =A[ra݄2Zi ._#`"b1v nV 5ovM]ŹB(ݕz~|xR3 #@[k;tv[fi ӌ}Hڝ M E 73@|y~vn})GQtaˆ\Uu -K5<)~DelߥGtJ '<<>|Ygڜ!hB ZAXvKS@F}K:,319c4B=W4'CnTbhSNK g~4i1~( YY8tXZ}.RS 0;=_l6'R6R 5xUůXo߶PQ.RD l_}yJa30%pԼFJs5~"n<¡APjw-? P/ORa%x?}w}? rBD<^Z2:min;-Feҽ:ۻ% ]Ü 3PIUU e+!dq9&nay$Ee9W)ZYF36GYxf`E'tEXa6NK9,EIe)Ǯz~>ߢ)"dJ0+{-8@$F2 ; Ff4Xc}˜LW$h+EÉVR w;ftVY܁LrXBD(.<[.>Lq76!!)!깆5xy8?3G#navB+뉢߿ETCPbXX<ȽvS-sK*ժ^m[[:C@҂GA;%1қ$w S.B{QdEkcd&mʥ۶}b7pwZ|>:0eHUH=/C:jV_t^hnF9Q=a>l{,?A`?fZs"|$Al=5B+כS{D?㬢Y="Ǚ6+nv3a!vCMBA!A{q##!,V~H^<P?6pRY p;!y Ͷ{_4hu7&>3cA|"\֎zc/HA/G=;.֮0  SW6 k'8{!F վWJrz`HQV|PJY m5V:KMg~faHXa9 ~?mLĖcuͷvQqi.5L0NNa5.Qp:@? F5]Բ̄+i 6X ٣tN[RomKPda:O?]M<2^w.Uݘ}G( Ϻz4T!6l錭6Zpn7x(RjJM^)⡇l 3id[nm!ʡ5~r?{D^ x<>.y0w3]G8+{wC2GWRf߻C#exX)=e'-熑z'J~(עc7^ezCDLF+:|)=fO }412y p]m*'C}DDqP*E+|aK*, OPZs Zcg6Y|F?Nrcm"eȉW"Gv}Cِt(n_Y҈kW" E h KΝ;,*-n]E MD[s$vDBhti`e~k ;-͙ҐJZR^}wU(lC/1!I @tQiL̠.<@gmn'`ȥ/iێJJh^%IӪn ڡyz(rѧdZq6Ts=i~M8d p#0pqlZʡWM+.fPua0-Zq`2^cp wRk1 J7!1,@'٢D[7-~]-c7J*Zvy߾OQKaуޜ1Ә: ?l y0r}}ъvHxOD>* tAXfunyY~ֵrËqFfvuSj'^6|MTʍG}Th?=Lg߶mT}VeJmnNfF!ʟ/Nf,; w="#}ὗxE E/7[D\qDe φ44/7lsW.D{} ?v㏺=@ʢm3]a?{f\{Cj%rS12UxWwO PE`w;C)G6h4/tow>q |\5=a2m/7rQhA3”>rhf<ʫM*}3=GU_/~So)/|=X}幮 N5wӎ(ajcwJNl ha'7VIQq0=,n'T'6@Y !iy'O'Oei?˜Ah%bNp$G"-y81.'j+"i3. i[dqpsi VJObjF%hV!Pm/QahͲP4] 4j>. 5olhBxXH~$EJĿ<R;#m%+/kz#>D;r I^69:H%mS $"qS[P>iY"$]b&W+j3gIj//.I@+᏾x, z&z zb$aR:]h2jEJ3AjLq?@7~sfp)`[,eކm^TwRH@aJgo`EU!Kr2o΃A|MWG.L[#JRi5ՅE[? X'#K&@i4 #R4aw4A (+.O>OTCIB" H-MK . Jv{SJ6vHccIFPp Kpm}4ā|tF-\yɥ1% عX-Zg8,zBn0QSU}oWUN_^]!`ۙnm`]@pdʄ\+LO"[#gx5n[g=v_sFLo3C_}#J<"]*:_{Iy3 "j @zӏ=P_uMQYEDtpL~,jfvHv s$o&4W$*(|"Jj%i NO|DCk:)sRb$F8ɳ濺|XaIb1|C2#"yd|3-"p/>Cђ:xV$d[Zj غ[xΜ4r~b~ğA; j_~Sί6zNk #mpNr3#kvms\R$`B̷C"M[aT `&Z)DA\m4 oGAںK[v'{lcD",DQ,DT[nv؍W0.dd0>|%{|2,2pof7CrJ̬zDO 91}~j.><eI.w"TL>%Li{Y~#=svٚQL4r|)vPaSNzpui (#Jc,3&QWUUp#; *΄QքZPSZбD6)̼}cc7oFcE/e!,vtU~yex2{/1y2I/5=?E<Ͽy 6$f-;Juu;_ *HS,65`3da[B-9$DOBD R]A R蠨):)kY9V,|#|w3PCP/K d:9&(@4̀ `6z`N\8/CϖO|ps{[ݘ,togHM_pDS??tָR}٨snV^<.(*M;=2/7Ԑ2Kbc#}/"vwzdgan0hJ6TJ[Bm'lbZ1Fw)GCQRW5[b1.iҪr*m.,nabB@;e4!бX+C=1ټP)so V0pMmq8L*ya<0;nrrH1aFpͥFY_3- 6ԕ1o>0vZ,TM FU`6X\YmbAEe 64,=5?trdW DQVXH1@ oBҔIqUR^ uJNlJ ]KxۃMG IDAT86nD3+5ԂHC=-8dz\4M7,j\h&l\ "L9uM EQNRK&(Qanij( c7^$p!0leN 3.{x< +w~`u;o $ @t=iKH&kb|_Tv}ڕ̰)roy+,!,-/Ts;Cza7$"5>wI7B~4X4𼥗rWH `$%d ALv|?i99,!ͫ6r046k)kwVn]'ڪKp=paZǶ䧁4n166 >$- KQpX .n_ua#g&YПD*@Gyyd_ "{y,;Mc$*Se<WOT2$"8ږB3B!jrr6~մC5 GLkh_(q/77VRH:K'b kE9@JgPj#Y:ӣb ƶΆt 9 }{18veHL]b863I2BD,@`8'5K-~%}|_":f8TM1MQ(3%wv=p_ɺDӗչPOng]tk_Ԯ#w3Ga`fTP~#A-5s33b3diuv͑o"8W@ek)8Wtkoa/ n(3I]wE g`: yL(j˲i$;86Swyw+XZP[8ۂxu|"@HTGPwƒNirⲪrk4>}[`aӥ@Hti@ߚ3_n2K`_q 0-x~7!D7w&:B F*._rߥ3q ,)hm[մܻРhc.QqhkͶIQ"9 b[s[Iy%ĵuKu,stʟZ2E-CӲb 5pu+ 1J2zdDy ;h+IGztb]ޛ`d̆HetZ9D= ,N L.Eb:@CBkH֠jro5 KEùZ48jg"ZZjw Ƥi\Z 4ܶ@w]ـ#dė>R/W$pūU͝aw,:UmJ5 CѺ@U#먰,&5poZC_ۙ&&h H#:֩D&R{tͶ#+sShyKoJ7b_=VF &EFA/CI?M(]q ( aU)F>ul#̨z5 Oq`a1zLS`@9w RڼRd2L͍C/kq0.x Rh([5rA")P&75nPBH$^ٽv3mx~ͩ~Q1]0uʑת}U?߷.{=/_CeLNz4g;mCyEzDyXys2G/Q7j,qNA$á!\kƛuZG{k,3uu>u& zS5nM<K@._j.ckбxNobHFmwFE@To6@w)V>_ 1K 61 =3M30Eߺ(7s*>Ec}jK-A|U㪖^M6&b{3f:\6eh}q5\2A Xuά-`j6$ egAob$#؜YKXЖl;="5fub7xZyX=:5N=Qʢ ]W]pu|c7 )}f N о3'ܕ G?cnOtJsmV$=]#Gr ~l6;IeN݈UݒG(^Ym8X]غ,=Q;˝d-}~t҇GlR#b"R;lN+>9ˇEVeVFFF| :$QOW[7簈Z|F~a' ޣvhAȫmx_06d1B -t\`oMJm+ e+!HxmBƳf+5(p"s !Q:`YBvJ}T1gtjN,v=:#D|[P%eeX_m߄k/ A(|m gҮƒKQ A2dfQ1ӭx#$Y;D ./dN@tRTXPrdVt"Htp,g;8zD2y]I/:_W,<HÞLi}(zK}úR&EF ztTI"x?VDm5/?HUgɇ@Oz?,;=z{朊'K|a@#"я̽iEb%[خjjA'{-rhzDg#Hh9CtRr?rnKjU)H;RZs"K301(A@ `f_hB`Bk3;HT_cDCWcÃ'h=ڕ}E=~qOJ' "+ENBfB?*f}/m;:WgQrDOۿ{XG"Gdm7v]sOxßSQf7lV' |MѢ qqKRbЉcX. )Zg/I"# :QUmn&%/*xK1VZ%%p|$? G1*T%N ncϱJ5!H"t|znhJ=IfF4,L"D7.CڱhTMAhP/g9ey`nc@.p }KwJ2uƃk|XNDHɐ}}iQk-,zr,VS)ګ6 w,헉KwrffgpjšVxec_+fO2, u53 K-te#@H䄧@9J -,VQy fJA{0.3.!J4BtHDsg(JxҲ3DxMmSBYRR+(&͙2߲ i,#Vs$J$2A `F !K2ϡ.cX:ۍ΁~$6,[UY>< z`'kKu,E;>ɖeJ%IL%̓ rK h$ESkr/L'^?[uXl~c1BDh9Ma6'dC߮cy怜@ &wuFd҂@+:MBȐN'6\xܾV*a(/e ~Z~T>;}w7>0f\# Vb$ÈMGD(AOuvFv>A;>V)A'Ō6Hcc='Fgge!y'D(@ZB4LҘ,}Cc*\ajOBZ*&nL?9e!ZB :r9THD2hc$J7=(Bg-AnƁFƪ;,?CjY: 4b B\68jTte3~1EyPeˉt45]O K%K+f;?s=*7~سp"|G_q,(_&g/˝z<@gnVx_8kvy|j^Oު?N%Z@?*ƭN@ Zpz$Tx ˧pK-J0tz-* tL%z9(B96P9(P-s5Rh`_76+u[Տĸ 2 Hr',)zi4"!mܚ A5C&t/h>wpn 2e7b34\'g7Eҭ4TwH{@Q0m 6 P,t7[΄4.Lb` qI֞od9C5mmiaO[ @>{}ꩿ2bu+ck Qs 7a(:êŌ[1LyCWuNT**<ۈ԰ru Hk-[/_70F*s-{&'Tsq5"$9%"o:9H\ Lh&;߲9JLǍ^I7EIe4kO'%IʐySXQvGњQZ'{Z2eT>F>碓rg}ivop2y=LBT Ev3dq? xCD ky GQXYUvȺZQr]ȩ93,#z~jZ([X~y*mdxwt@br2{'.a+_ZAt[o<@Kv0Y>23$h,+l/uJrBk(ƂK{H>cnvz,/dZC}a U'џ -Y8v+W}R_uݵ$/ c#Ydf:Q}FGxm`o{old&+:z޶G ! xg[#G"q/ࣨςQt){L]{K_IRa/8hQZ=0MG De_Xz=<1fo4ݢEh1U8,C\C&. ChכFnƉw~=vw` [VBŸ4;;1N;W!ǥr}/&2L OWItttKqG}q_,{ʺxuU_tX[5w|SVכ^QL=HF)17Knչ#;sGz[oF &xΞ;߮jD(Eޫq0ᙗQ!{:B]9 bЫɄ)e R?G E&IDjɎtW)8hI>3Xu7UDTkf!4?f|e1uLֺN9[VHǾ1Ґ#FV]v]*R wޱ.R*1ww*eSԝ E60X9N8PWo(ћS.1O,{SeH%݌W[wCtn$C?b,%eC]NǩC 2-`vKvtnuWz v-нA;+Rc rSi9tn E#?!yD@goѻo O n``JbL( 'p fK5H"㰀Az7I~S ֞M)g ,!@}R;,VA6uKH&=-+k%^ 棒-m *+#ו֓EWU ) "`1<0ÂR7G8SYi{>gޟ@zQG^ƒ'ws/W? t}|!.rf.m{q/ -K;*R ~#9=r?h[C[]L:5엔1Y1n N֡41 (I8xj; tc%zov,"$5b:gкr[)wWgȣ .!Jpm'e6R- #"P%teiy!9zS݉vf4Zk :q>Vˆy"9z>=yC ~ry*<t+<& #}C[t>ֽx٨}f K* E >Mj(Q Q QMhH|/D޽ +I8_izv֭g Ĕ> #Th$!F*7l(「0D ^H3w IDATHک i?*4!4m N!|mw8V]v @ݳIB\UNu,86Ȱ6:_B&q +42(( (7/pux0;C턉D?ѷw1H5k>oh"A%B>p$Z&:D c6^,/?ue׾E-#񷻛l#˽9x ׽Zȶ~ߊ|aKl| :p^ v(z[/Ǝ%j#;Nre]'D/-\ r= le:(к\e`3pκ- *$fI%ZkpnX=|y5J7Zgs,DsM_8`簍vC&/ 8RYvѢf%_I sr˟I򍃝݃hygv&t`SB)oTqRX'D Iy;@ڹ q~n"Y4)9 ڍTDY\X8Z0*@׿9@ $5f]<XN3$lVEcJI1pk;밢yH-d;Za|y=+wl2V!Oh9?+߈H( {[>K MseXD|kNq/ʗJ ~1mK-|U1qcuX{cP`V4%\t#{H4D~JI/$~vq'(2y8'OO@6}CQJ*1gNxzw豕GS˄|ˉֻ+B˜қ4^XNqڟ_Y,KQ-H'y<*^KCC3LJQy{/s3ψĚk﷖~ZƊ,ΡS!{vjS6 uEr.GQyB]Z?1+$U*k!P閞ɳ ]9@^wXXB?sny*}ЧJHT.OmN9 @k G95b ^fI," +{= Ћ_5/Bο<;~ߟ\{\)$yK{!QEqD]DC"JM|T=OcZsiֺR/j3@?\42I#fHT7$8q+0];D mf驱gNF w@mfI0~V7,qS0}p {@;w]YVv_o:]PBM[lERv"ɞpH 6tu%m:J%Մ;;facjD2_viO|mh^)G"nIPh7Y4-oP4sXbI;_NЊ|X8tBcVh0=}xx_Z#}lY}F/Q{D#^pd4!gw;~.*zob|ʛ7{Dxx?foWNɔ0xcD uZ(]eRs2S <%U[yՍh&(KTebڂ pD*|Z@6n~f*E%,rʲ1}2b*j {#qZjcLۊЫDW@_i '[s7 8"/CNYhCI;iƸ=wbQ<1 f¾ڑA@w5DϗWbIMQ$@Zk$:k$on> , &WDpc:D,@h Nc@<4ծe>]:@d; q"1R6"C 8%[XIS@&)p!oLk\Xy"A~;lGz=0I4Zq3=?K-q xs6D,-#ejGb+kYܙ!E;bpլd{hGS&|<:r$D0[jRfwpnŎXjL @b. 'Sz7 $O ;r`żam :q8jo2NK:юOl3ux#Spx!ɇ6oE.k\̽Q%lht$)[P^*4STbc ZPԥ)&Ў.䢞i؅+{g]9Zi$ڴ#d]&`@/>t,_,q5cX:&Q$Pk^힀$Տ<~jyGw7>˯khB]lO*Xɥ,]R>r9N.TǸЭPϸx5,BG!3Ma4>{7:YV>!9\hMt18nGOBX](ɩN}+gj* g0V|ݑ<t0V%rE I1`%i% Pdc#|#KA_L!Xdu t {ЄS"UBO֞ رwm=Gܸ9bC'̦{!ݹHc۽ XB 3M64V /~#YOsw|o==7ףGtm~yDXj#6i轲o (y0C"|*lE/^>>ޟ sM#9 H?=`z-#?~hI_X̂<锁+nگшή8ZX8{XeJZA 8inBg8F&w67w8B5%V"߶+HD~ E͹`u Utd>5'a_;afG}ah- Hk'T=Zu~h'= =xp{)Vx>QoDz}WZA(|?Ӈq_3]\=70ytWhv}Ov/ܪP(T/>'R-*i:[?;^T"5FI37U'`ecW !8[8 !\ś2burtxupp5ۀ[,MUJ7z h?(j8/Tmn]e2A0]w7A2 Ӧk烙X.S&-AL;赛NAV ^cU)"'^]qT2kpFGй}A3fepӱZc-1h6OlA3 VbduO6!a4(A}) ڜ][+ũ6ThM)t}q6ebǑM*ɚk67d$gqUUpKvzΌ@h4aRALa7޿Hic*SU"21eָ4$<ج0& Ih%7$ß!ky zR׿Oj5Q<ՑyE|4Tp>NO(ا/_< _tkAjD< e<ˆ,Uk\WqڹOޓ,Ur{yG{"D>#>PWN s}EXۦ= rBҽ``~.n="4F '=[bVr0~pcJ#!ָS=gVA> `}53Ua(T UFhp$k`bnvSX6SKMx8J+s8ѷM|Gt+6}/gى< .?Rv erpUо" ΎtV戗fJ{#ǁP(CMV?PZqCw-[Ce}EN&^>Z`}AD;!:+6ҭ&VfTU! ё=П1JVGocHnY{O}灸V(bf !ۯW4UbʠjqPp 3k 7O- @qͤKuPPG-]߇&8azXNem>݉?3hYYNJ@êQ@e"PS~NWDsn?AU12S/5Acդ=CDgzu !̸$oUN ЙCl& d ;,' 7qí66FCl)Ґ`RnTk詹$"j{}C &jlF0֣v{ؑ^}_A}Qx.zmj^r bngtuA wh5 ??F{3Id`a >ќeIiYp?utbj)!g+lAtS٠*KcHt p}x$ri4;Y ݘOCHCgyVQ';!Tk8UUtL`M\o\ ,*nuN@/Zu28`i@3mΈ86%xs7O65}($(KUcƁ鉻\< ] dNʎgn`~4|[)+[941봀A+VrC.Xju4O<9>?及TB*]zh-ȑp`+S2]+mZ.A6 c=ВG4mb ,FV4 )*5qݠ%CtHT'#T'Eƈ^|f~vEEB7B{/^m|%)LUȾ-p;._6ܓ}_ sʣy^x=Qy#lQ=y1hFTآ[ⷾBu:O9b)>T.F D=vAZ;h*=4N\`A5iF7C҈E>?AN_ +faNӴ25epfzG9ںӥu" ׫7DXpda͖3Ty]OD6FcO9ġ?YI k0eDc''GDfa1HސSsyy ҸT43E2xZ:|Ӑd ߨޓ MH~/9[_B+{ tCzmvv]& \x][>~ԚH[wÑO§`@_p $%Y> H#@)cHQqQk1vF\scnSAS0͖ZbOK1-EF>.z~Dz, -d|B/c9tZ8>^m4!մPаV` Ji2`:Z?jie!+umrORt|!{X)N-[ A&& ٻ Af-[v2c D:'fɉ1; 6Ng˩@.5wós{uj^4Xم=W׾([OT|ۧş}RE{DPg@zrvjŭ" ?2{ܕZ1<üe=VxHsQOM8Ѧ$QԼo˕ |o{Qy>#*~:7scHw=g//m6:Dp$.ZnuЎa%,r/F yl yv)M((40B45c%X)$)D¾" Y,- v]I U)9MFK|JF$)-m3UJ,^3U󥲡3bVn{6 u\^+Fv4V(J_ōLZ)hHmTg%G= "œD 1jd"#+:RH*=\Q*"]~=T Bu"L AYR_銞Ӡ@~XuHKq`ĩYoL~bvk%G3L1% &*y0:v82+ld6J `'͎,`.}ꩯOA2)/H28h 7TT-N52pQ}|yob`t,l0nF4EφkKO?֤rKa,i ɪ1O&4[cM7)2}a_'67 IT/.E_db$v]1%ix@a wf+[S([%Ɗ2u؎+DQzRsQa]iQ=+mݨN,y2S-wҎ, {b W3 7 0  ra{`#+ʌB.X~S+}~HO*V?{wH_tN#U1ZLխVЗx MeJ8xZX<])㑳z-8 qke ATz7e Aa&@qvf-gmіcQG|gAxɒHL`_ Zcuc$x淜_r!DzySaapOhyJX8fzƱI)b(A-)$ p45tOl5ǽKjcf/s7pvk4{EWĭLt9BsifT{ZW,ZGG -GKhUõ ;WjZN˚7Q_'Ѽcs^𦝎!:ᲇ}gz|_.}xQROڂgyT+Uq&"?y avke~=Ϩh鳉 -UCJ-Φ=daH~y<} Kܜ|kJ*FxKx%f ܈~qs7|vEV} \3$ o[Eiz#3k;'d-Y-M_pt\Du)!}-2|]~ߜ2$AwCYtvX;@NP6[L9|%#Z`WIUvjv8Ds!ł^?% 1E޴djj;Hg$nDL椔WטYY̎xF$3J'A63|4Tlv@ћpf`oSb# HbN-vo)X Yl4Zha2%0MkC{l))[Vmf`&*s}lh%$2qV_@:Sf<եL.a5`l9׭u3V%m, >dQ4ב*jw"͍6@I.~A1:bfC;ՂZ/jId,q2eEe ShHQ5RZH,! b}d+dVm09@(,^zږ1l&P{qd҄f 5p .PMB:!n$uC 0Ug;c(%7ːIqrV"'nCBjȗ.|0pl8Cl#^Iy~HZ qS>A6 F)(c29PQӈz̽Oc5I\sǨ.2)L:[ I^7aOʛM E@j+(7ajaa!!?ϕ'4dž`(h;_͝ o@KHW_0kC;|P fB/8R w:? 7aM/ 漣Y[&dr}Ȅq)-I}j8@DA} c ѐ[7|Z8HȬ?X6DU%~Y1&ƢVg:k~udPdi2BϿ xV _ j<x].zBÌ.E:Ƃm$.!wdƊT3{-DW&1:ЍU r׭\\Ʋ&S ţFVڭ]B0 X'/%R;=" e/X]ϊ5^fF:0~#FmlYJ6f:) `l~w⵵oC Arn;l ,,+ JW̩ n<|TΎ,!AU#=,QNiZCs2ـN{',n4V}=^ʣ yK?#}-DzD"x>b\Xtr?[Org^j"Kҫ)c!$Q c'hSCtrĂgN:M+ZæFkTaԵb [{=pM2)k|>gJMVTFgmXZ&Gu<= ]:RR{џ?l!Wد%G(~jڐ*.gg\//R_ p ={2;=ق[h*W;4h!bXI#b`?KW[A]>?hA aZD8 XSK·ϐHMRaC݁E|$ԱuU}o][=zE7aί@M)?4 @R$f,d˅F7дom8k^X%NU1ykb jjq%B}$>/` nŒaA2Sh u8IM`ݝ|+]ȵ_K~e7ʒ O ?G鳿{J9R !D8|ⅳ7CnIqO_KVO~,нۈ~OQy'{Y.ڥȹU20+q .EUlXZfmuIϾ-P6&g tjfvB20uTk ړ<ˆ\'vwB`- }s@a/Tz|A,<|?˃d|ADs솚F\TEKV? y(O#=dgO_`w;J*{ĩGyTy?N>άQwF $b^ Y(:7>(|30##9˧ʕ8pZx[HDiީw4Ēnjy]:)8P `.ޛnjiR,}'DezRM):mꓯג!B  QN 9_&O\w/N`S+`ލ*XP![y N (n$J[uuz/֎"Fvw\K飅s'cvmTgT]͢%Or>BYEbwW$pʤo(qna臨6`L8ve,=WwgHx- l[` Y݁# vuȪX8:Mx`o!r QMvjߢfu&t\ Wi@)TG#^|q^.gHWx;y7 G@>8Zlg'|bm^S9n>}%vWDkƂɼh "K {a5?qY9Y3<#"D`1=<}FKKۮg-l+$d(z_ǂMá9:~8z}zb|AnQOmv~O-q\V}O{ygD"!aWjkqZ_Y/{˧e)zh9䔈s"tM9i²@|豠t|;V>eJmIq" N&e㔻?a,@=7z/4H^c:Ci"iP7A $$V]RpBuჩ [#\oM"P]w IueYBzibc*̍˗EK q Gi\k}ZUXTWMG?v߀]'47]BVh[Hb]}"6-lm?o JIh|TM4=FqC-רwP zחVXdMKsMK2mvdT'10R<*j04ٳ s)2-^v"\d+v-+;Vau;Sx&rqI~ٲ$.`1T⇩uY;'6PO^NjATسNI5L9{IZ͐(n+d^]zчݜ.%v9BE* J&Ql#*~p>Uf/&\fVrg"FSTr5H{1+nvw^J M#DvjDL[tб+j@@:J> U4r$3eIwQOe7[%ZlT9YD]Wv$n?)ʙ=9\U4@#>%)shԱX7(&wˀvx, u* %W7mi:Z&@HgoymXv: :0vL LRڐ^v4|OrR;cdzwhQ _MZqlcچLk'Xm &M! LHƏ^@Yo#Tx )R2QaMsBo د^, Xo75-!8Ġoh}Yd6b;miL+kqjm)*MCڛ^f ϸE`LuISaN.i؍Q9)0Σ,PtuP>#ڂHYX4Neh;lȻuF *fnbxsiiHMB{Vy櫃mRSbL;AFF}=`>ub oGErS:Z.7%ntlGIFtYk: v.Xg&RG(112Gh *=ޒB˙uZs+H;^ qXٴD֔)fY 0`C 3[[7#h;A8d .ڋ BF"x=VkBmLx "E ,C) ?:~ RY3̀?7+'H޴5w7wFß6{CF}r[2q( Fk?z4>,|}k7lLjtU$x{|C>? ٕ>]|/ '쥫gDW yen8!j:ZCaA~]i<7md`z~f&ED mp]U1&AY_l gm~J-jz@(C s Rk!W{CK@]_uOF[GzAL :`nۗ+g&`޹EXm7޸?2> QE=AG杬K_sbhN;̇C~@g#JU>ʋݰ\0VWjqlƂC5TY\2YOoY~hBFeHJ` l TⲪ)9 $1?Zp%9sf"+hB'k-w8Am{ W"wA$bKkQfGRke#zi@ÙiIENDB`pygpiv-2.0.0/example/gpivrc0000644000175000017500000002725611116512252015205 0ustar gerbergerber#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # This file contains the parameters settings for the Gpiv and Gpivtools # packages and is installed for system-wide use during installation # of Libgpiv (at /etc for most of *nix-like systems). # # For personalizing the parameters, copy this file to $HOME/.gpivrc and adapt # it ti your needs. The system-wide configuration and the personalized parameters # may be overruled by ./gpivrc (at local directory) or by the # command-line keys of the Gpivtools programs. # # If a parameter is not defined by the command-line keys or in one of # the parameter resources $HOME/.gpivrc and (system-wide) gpivr.conf, its # default value will be taken from Libgpiv, as defined in the headers. # # Each parameter is described by the module key (CAM, TRIG, IMG, # IMGPROC, PIV, VALID or POST) and the parameter name, separated by # a dot (.), followed by its value. Some of the parameters are # optional. The parameters may be defined in arbitrary order. Blank # lines and comment (starting with a pound sign (#) at the first # column) may be included in the parameter files. # #------------------------------------------------------------------------------ #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Camera parameters (key: CAM) # Only active if camera has been enabled during compilation by: # ./configure --enable-cam #------------------------------------------------------------------------------ # Operating mode (indefinite/interrupt/definite) # Default 1 CAM.Mode 1 # number of cycles (equal to number of images to be recorded?) # Default 1 CAM.Cycles 1 # Image filename # Default gpiv_img CAM.Fname gpiv_img #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Real Time Application Interface (RTAI) trigger parameters (key TRIG) # Only active if triggering has been enabled during compilation by: # ./configure --enable-trig #------------------------------------------------------------------------------ # Trigger time settings: # All timings are internally expressed in nano seconds. The parameters here # are expressed in milliseconds. It is thought that this is more convenient, # while this policy is used as well by the gpivtrig module and Rtai packages. # Camera acquisition period time # Default 250 TRIG.Ttime_cap 250.0 # Laser trigger pulse width # Default 0.02 TRIG.Ttime_lpw 0.02 # Time from laser trigger->Hi until laser pulse 0.19 ms # Default 0.19 TRIG.Ttime_t2l 0.19 # Time between 2 laser exposures # Default 10 TRIG.Ttime_dt 10 # Operating mode (indefinite/interrupt/definite) # Default 2 TRIG.Ttime_mode 2 # number of cycles (equal to number of images to be recorded?) # Default 1 TRIG.Ttime_cycles 1 # Increment in dt # Default 1 TRIG.Ttime_incr_dt 1 #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Image parameters # Required parameters for reading the image should be present in the # image header or the software will return an error #------------------------------------------------------------------------------ # DEPRECIATED should be defined in image header # Number of columns containing the image # Default 256 ##IMG.ncolumns 256 # DEPRECIATED should be defined in image header # Number of rowss containing the image # Default 256 ##IMG.nrows 256 # DEPRECIATED should be defined in image header # Image color depth (1 - 16) # Default 8 IMG.depth 8 # Image contains a single frame for autocorrelation (0) or # or two frames fror cross-correlation (1) # Default 1 IMG.x_corr 1 # --------------------------------------------- used by gpiv_post_scale() # Spatial scale expressed in mm/pixel * 10-3 # Default 1.0 IMG.s_scale 9.0 # Time scale; separation time between subsequent image recordings, # expressed in milliseconds # Default 1.0 IMG.t_scale 7.0 # Zero offset of pixel(0,0) in relatation to a specific point in the # experiment, expressed in meters # Default 0.0 IMG.zoff_x 10.0 # Default 0.0 IMG.zoff_y 20.0 # ------------------------------------------------- Optional parameters # IMG.title # IMG.creation_date: # IMG.location # IMG.author # IMG.software: # IMG.source: # IMG.usertext # IMG.warning: # IMG.disclaimer: # IMG.comment: # IMG.copyright: # IMG.email: IMG.url gpiv.sourceforge.net #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Parameters for image processing (key: IMGPROC) #------------------------------------------------------------------------------ # Used for mean image value calculation # First numbered directory to search for (numbered) images for processing # Default 0 #IMGPROC.First_dir: # Last numbered directory to search for (numbered) images for processing # Default 0 #IMGPROC.Last_dir: # Prefix to directory name # Default ./ #IMGPROC.Dir_prefix: # First numbered file name of image for processing # Default 0 #IMGPROC.First_file: # Last numbered file name of image for processing # Default 0 #IMGPROC.Last_file: # Prefix to file name # Default img #IMGPROC.File_Prefix: # Used for filtering on single image or image pair: # NONE = 0 # SMOOTH = 1 # HILO = 2 # CLIP = 3 # FFT = 4 # INVFFT = 5 # CORR = 6 # CONV = 7 # BANDPASS = 8 # PT_GETBIT = 9 #IMGPROC.Filter: # Default 0 #IMGPROC.Smooth_operator: # Default 10 #IMGPROC.Window: # Default 30 #IMGPROC.Threshold: #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Parameters of PIV image evaluation (= interrogation) (key: PIV) #------------------------------------------------------------------------------ # Column to start first interrogation area (start with 0) # Default 0 PIV.Col_start 0 # Column to start last interrogation area # Default 255 PIV.Col_end 255 # Line (or row) to start first interrogation area (start with 0) # Default 0 PIV.Row_start 0 # Line (or row) to start last interrogation area # Default 255 PIV.Row_end 255 # First interrogation size (not necessary to be power of 2). # Default 64 PIV.Int_size_i 32 # Second interrogation size (not necessary to be power of 2), # has to be equal or larger than the First interrogation size). # Default 32 PIV.Int_size_f 32 # shift of adjacent interrogation area # Default 16 PIV.Int_shift 16 # pre-shift in x-direction (columns) # Default 0 PIV.Pre_shift_col 0 # pre-shift in y-direction (rows) # Default 0 PIV.Pre_shift_row 0 # Adopt image data to interrogation area in order to correct for biasing # effects # 0; no correction # 1; linear kernel weighting # 2; zero offsettting # 3; zero ofsetting using central differential scheme # 4; image deformation # Default 4 PIV.Int_scheme 4 # Applies Gauss weighting to the Interrogation Area's to reduce the high # spatial frequency signal generated from teh I.A. borders. This may improve # the accuracy of the analyses. # Default 1 PIV.Gauss_weight_ia 1 # Applies Symmetric Phase Only filtering # This may reduce background scatter or flare light, reflected from surfaces # and improve SNR # Default 0 PIV.Spof_filter 0 # Calculates first (1),second (2) or third (3) highest peak in the covariance # function # Default 1 PIV.Peak 1 # type of sub-pixel fit; # None = 0, # Gauss=1, # Power law=2, # Grav=3 # Default 1 PIV.Ifit 1 # Interrogation geometry to be analysed: Area of Interest (0), # defined by col/row start/end, vertical line (1) defined by int_line_col, # horizontal line (2), defined by int_line_row or point (3), defined by # point_col and point_row # Default 0 PIV.Int_geo 0 # Default 64 PIV.Int_line_col 64 # Default 0 PIV.Int_line_row_start 0 # Default 127 PIV.Int_line_row_end 127 # Default 64 PIV.Int_line_row 64 # Default 0 PIV.Int_line_col_start 0 # Default 127 PIV.Int_line_col_end 127 # Select a single interrogation region with centre PIV.Point_col # PIV.Point_row to interrogate (optional parameter) # Default 64 #PIV.Int_point_col 64 # Default 64 #PIV.Int_point_row 64 # Sub-pixel maximum estimation. Obtains peak (at integer pixel level) # from an old piv file and uses as it pre-shifted values. # RR Still needs the images for # calculation of covariance function! (1/0) # Default 0 PIV.Old_piv 0 # Sets automatically parameters that belong to others (optional parameter): # Set zero_off 1 if ad_int is set # Set weight 0 if zero_off is set and Set weight 1 if zero_off is not set # Default 1 PIV.Autokey 1 #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Parameters PIV data validation (key: VALID) #----------------------------------------------------------------------------- # Maximum allowed residu value (from mean or median calculation) for # acceptance. # Default GPIV_RESIDU_MAX__RELMEDIAN, if VALID.Residu_Type = 2, else # Default 2.0 VALID.Residu_max 2.0 # Odd number, representing the number of neighboring PIV data that will * be used to calculate the (median) residu and average local mean. # Typically 3x3, maximum 9x9. # Default 3 VALID.Neighbors 3 # Determines the residual of a particle displacement # 0: from the SNR value # 1: from the median residual with its surroundings # 2: normalized median: ratio between median residu with current datapoint # included and between median residu of surroundigs (with datapoint excluded) # Default 2 VALID.Residu_type 2 # Substitutes erroneous displacements by: # 0: not substituted, only peak_nr in PIV data set is set to 0 # 1: the mean of surroundings # 2: median # 3: the next highest correlation peak # Default 2 VALID.Subst_type 2 # Use histogram (0) or cumulative histogram (1) # Default 0 VALID.Histo_type 0 # Checking on outliers after substituion (REMOVE??) VALID.Check 0 # TODO:: Automatic threshold detection (from histogram analysis) VALID.Auto_thresh 0 # Estimation of the data yield from particle image concentration, # out-of plane flow, velocity gradient within interrogation area. # ref: Keane and Adrian 1992 # Default 0.95 VALID.Data_yield 0.95 #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Parameters post-processing, used by program manipiv (key: POST) #----------------------------------------------------------------------------- # Operation on PIV data: # fast_y = 0 # flip_x = 1 # flip_y = 2 # revert = 3 # rot90 = 4 # rot180 = 5 # filter_block = 6 # pass_block = 7 # Default 0 POST.Operator_manipiv 0 # Set disabled data to a specified value (1/0): # Default 1 POST.Set 1 # Define x-displacement (columns, horizontal direction) to be set for # disabled data: # Default 0.0 POST.Set_dx 0.0 # Define y-displacement (rows, vertical direction) to be set for # disabled data: # Default 0.0 POST.Set_dy 0.0 #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Parameters post-processing, used by program s-avg (key: POST) #----------------------------------------------------------------------------- # Subtracting displacements or velocity estimators with: # NONE (0), # mean value (1) or # Zoff_dx and Zoff_dy (2) # Default 0 POST.Subtract 0 # Default 0.0 POST.Zoff_dx 0.0 # Default 0.0 POST.Zoff_dy 0.0 #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Parameters post-processing, used by program vorstra (key: POST) #----------------------------------------------------------------------------- # Differentiation_Type: # central = 0 # least_squares = 1 # richardson = 2 # circulation = 3 # Default 2 POST.Differential_type 2 # Calculate from PIV data: # vorticity = 0 # shear strain = 1 # normal strain = 2 # Default 0 POST.Operator_vorstra 0 # Normal (0) or inverse (1) scaling # Default 0 POST.Scale_type 0 pygpiv-2.0.0/example/example.py0000744000175000017500000001212011116512251015755 0ustar gerbergerber#!/usr/bin/env python # Use gpiv python module as: #import _pygpiv # Calling a function then is done following: pygpiv.funcion() # or as: from _pygpiv import * from optparse import OptionParser import doctest parser = OptionParser() ##parser.add_option("-f", "--file", dest="filename", ## help="uses FILE fro reading and storing", metavar="FILE") parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=True, help="don't print status messages to stdout") parser.add_option("-e", "--defs", action="store_true", dest="w_defs", default=False, help="writes libgpiv definitions from gpiv.h") parser.add_option("-p", "--params", action="store_true", dest="params", default=False, help="prints parameters to stdout") parser.add_option("-i", "--interr", action="store_true", dest="interr", default=False, help="interrogates example image") parser.add_option("-a", "--data", action="store_true", dest="pivdata", default=False, help="reads and writes piv data from file to stdout") parser.add_option("-w", "--warn", action="store_true", dest="warn", default=False, help="prints a warning and error message using gpiv_warning() and gpiv_error") parser.add_option("-t", "--test", action="store_true", dest="test", default=False, help="tests the script on documentation") (options, args) = parser.parse_args() # # Function declarations # def warnerr(warn_msg='my_msg', err_msg='my_error'): """Prints error and warning message. Keyword arguments: warn_msg -- warning message. Default: my_msg err_msg -- error message. Default: my_error """ gpiv_warning(warn_msg) gperr = gpiv_error # Just remame a function to a new variable gperr(err_msg) def w_defs(): """Writes definitions from gpiv.h.""" print 'executing W_DEFS' print 'GPIV_SYSTEM_RSC_FILE = ', GPIV_SYSTEM_RSC_FILE print 'GPIV_HOME_RSC_FILE = ', GPIV_HOME_RSC_FILE print 'GPIV_NIMG_MAX = ', GPIV_NIMG_MAX print 'GPIV_MAX_CHARS = ', GPIV_MAX_CHARS print 'GPIV_MAX_LINES = ', GPIV_MAX_LINES print 'GPIV_MAX_LINES_C = ', GPIV_MAX_LINES_C print 'GPIV_MAX_IMG_SIZE = ', GPIV_MAX_IMG_SIZE print 'GPIV_MAX_IMG_DEPTH = ', GPIV_MAX_IMG_DEPTH print 'GPIV_MIN_INTERR_SIZE = ', GPIV_MIN_INTERR_SIZE print 'GPIV_MAX_INTERR_SIZE = ', GPIV_MAX_INTERR_SIZE print 'GPIV_NBINS_MAX = ', GPIV_NBINS_MAX print 'GPIV_NBINS_DEFAULT = ', GPIV_NBINS_DEFAULT print 'GPIV_SNR_NAN = ', GPIV_SNR_NAN print 'SYSTEM_RSC_DIR = ', SYSTEM_RSC_DIR def rw_params(parfile = "gpivrc"): """Reads and writes parameters from configuration and to stdout. Keyword arguments: parfile -- parameter filename. Default: gpivrc """ print 'RW_PARAMS' print 'Reading interrogation parameters from ./gpivrc, $HOME/.gpivrc' print 'or from system wide configuration file gpiv.conf' piv_par = gpiv_piv_get_parameters_from_resources(parfile, TRUE) valid_par = gpiv_valid_get_parameters_from_resources(parfile, TRUE) post_par = gpiv_post_get_parameters_from_resources(parfile, TRUE) def rw_pivdata(infile = "img1.piv", outfile = "out.piv"): """Reads and writes piv data from file and to stdout. Keyword arguments: infile -- piv-data filename. Default: img1.piv outfile -- piv-data filename. Default: out.piv """ print 'RW_PIVDATA' print 'Reading piv_data from: ', infile print 'Writing piv_data to: ', outfile piv_data = gpiv_fread_pivdata(infile) gpiv_fwrite_pivdata(outfile, piv_data, TRUE) def piv_interrogate_image(infile = "img1.png", outfile = "img1.piv", parfile = "gpivrc", verbose = FALSE, stdout = FALSE): """Interrogates an image to obtain PIV estimators. Keyword arguments: infile -- image input filename. Default: img1.png outfile -- PIV output filename. Default: img1.piv parfile -- parameter filename. Default: gpivrc verbose -- prints behaviour to stdout. Default: FALSE stdout -- prints PIV data to stdout. Default: FALSE """ if (verbose): print 'PIV_INTERROGATE_IMAGE' print 'Loading image from: ', infile piv_par = gpiv_piv_get_parameters_from_resources(parfile, verbose) valid_par = gpiv_valid_get_parameters_from_resources(parfile, verbose) image = gpiv_fread_image(infile) piv_data = gpiv_piv_interrogate_img(image, piv_par, valid_par, verbose) if (verbose): print "Writing PIV data to: ", outfile gpiv_fwrite_pivdata(outfile, piv_data, FALSE) if (stdout): print "Writing PIV data to stdout" gpiv_write_pivdata (None, piv_data, TRUE) print "Finished!" # # execution of enabled options # uri = "http://libgpiv.sourceforge.net/doc/" if options.verbose: print "Testing and example program of the pygpiv module that provides" print "libgpiv functionality in the Python scripting-language." print "Documentation of the libgpiv functions is found at: \n", uri if options.w_defs: w_defs() if options.params: rw_params() if options.interr: piv_interrogate_image(verbose = TRUE) if options.pivdata: rw_pivdata() if options.warn: warnerr() #warnerr("another warning msg", "another error msg") if options.test: print "\nTesting this script" doctest.testmod()