4Misc_StartT4PlatformT@9VersionCheck xHH@Rg(HHdh xHH@Rg(HHdh x HH@Rg(HHdh ^Graph*0;WDashSettings#  ! Ak6Normal@ Lucida Console<HHHH$$4 4 4 4 4 4 homeRJd C:Users:HertleM:Documents:programming:igor:C:Users:HertleM:Documents:programming:igorUser_ProceduresskdC:Users:HertleM:Documents:WaveMetrics:Igor Pro 8 User Files:User Procedures:C:Users:HertleM:Documents:WaveMetrics:Igor Pro 8 User Files:User ProceduresRecentWindowsdAdvanced Topics.ihf (Advanced_Topics_ihf)Analysis.ihf (Analysis_ihf)Getting Started.ihf (Getting_Started_ihf)Graph0:sinxgraph vs xrange1 (Graph0)Graph1:random1 vs xrange1 (Graph1)Graph2:data1 (Graph2)Igor Reference.ihf (Igor_Reference_ihf)Notebook0 (Notebook0)Notebook1 (Notebook1)Statistics.ihf (Statistics_ihf)Window_layouts (winlayouts_panel) 4Misc_EndTXOPState_Start`THDF5-64 (Notebook1)TDM64hf)Analysis.ihf (AnalysisPeakFunctions2-644XOPState_EndT\J•Make/N=500 xrange1 •Make/N=500 sinxgraph •Display sinxgraph vs xrange1 •xrange1=(p-numpnts(xrange1)/2)/numpnts(xrange1) * 10 •sinxgraph=sin(xrange1[p]*pi)/(xrange1[p]*pi) •Make/O/N=500 random1=enoise(2)*xrange1[p] •Display random1 vs xrange1 •ModifyGraph rgb=(0,0,65535) •winlayouts_makepanel() •NewNotebook/F=0/ENCG=1/N=Notebook0 •NewNotebook/F=0/ENCG=1/N=Notebook1 •Make/N=10000 data1;SetScale x,0,10e-3,"s",data1 •data1= 2+2*cos(x*300)+10*exp(-(1e4*(x-3e-3))^2) + 1*exp(-(1e4*(x-6e-3))^2) + 0.3*exp(-(1e4*(x-6.2e-3))^2) + gnoise(0.03) •Display data1 !$y  test graphs!P QX $#׽%؜%xrange1????)\R{p̜(Hq=Q= ff•z ד33\Gף)\R{p̌(Hq=Q= ff…z ׃33\GףR~p}(|HzyQx= wuzt33sqףp)\o{nlkq=jhgfffe c\bGa`R^p](\HZYQX= WUzT33SQףP)\O{NLKq=JHGffFE C\BGA@R>p=( #>Q8>L>Ga>u>>)\>> ף>{>Q>\>>= >G>>>??q= ?)\?z??R? #?(?{.?333?Q8?p=?\B?G?L?Q?= W?(\?Ga?fff?k?ףp?u?Hz??\???q=?̌?)\??z?= ??(?R?G? ף?ff???{?ף?33?µ?Q?H?p??\???q=??)\??z?= ??(?R?G? ?ff???{?ף?33??Q?H?p?@G@\@ @@ff@@@q= @ @ @{@)\@ף@@33@z@@= @Q@@H@(@p@R@ @G!@\"@ #@%@ff&@'@(@q=*@+@,@{.@)\/@ף0@1@333@z4@5@= 7@Q8@9@H:@(<@p=@R>@@@GA@\B@ C@E@ffF@G@H@q=J@K@L@{N@)\O@ףP@Q@33S@zT@U@= W@QX@Y@HZ@(\@p]@R^@`@Ga@\b@ c@e@fff@g@h@q=j@k@l@{n@)\o@ףp@q@33s@zt@u@= w@Qx@y@Hz@(|@p}@R~@@ף@G@@\@33@ ׃@z@@…@ff@= @@Q@@@q=@H@@(@̌@p@{@R@)\@@ף@G@@\@33@ ד@z@@•@ff@= @@Q@@@q=@H@@(@̜@p@{@R@)\@P o 4%؝%sinxgraph????}3$; -=;="H=pT=l`=8k=i-u=?~=1=dž==݉=m=0u==ݐ=9=X=.9=ڎ=K=3b=I==~=Mu=׷j=_=fR=D=v6=!'===p<È<6a>+>vt>98>Ru>D*>=R=(!=?=M=4N=E=8=-=+=J;=Me= =\eb=?==0_!>:>T>9|o>A/>f˒>>h>*[>[>5c>i>:g>C*???i?e?"?'n)?/? 5? ;?eA?aG?L?R?W?[?R=`?wd?lh?l?:|o?r?Zu?jw?y?I{?>P}?|~?S???S?|~?>P}?I{?y?jw?Zu?r?:|o?l?lh?wd?R=`?[?W?R?L?aG?eA? ;? 5?/?'n)?"?e?i???C*?:g>i>5c>[>*[>h>>f˒>A/>9|o>T>:>_!>+Z>=7=_=7*=<}3$tzff"Dֽ^zK^(5M*3<5DSJ}Pl(UXԛ[m]T^'X^~]+[LYgVQ=MGeA;36,{#4?ލwr7Խ쿽|:;L T/(mb%}3h"Ru>98>vt>+>6a>>=-#=W=ku=W=n==a= U==o=ͯ=-y=Hو=w=Q*]=B= &= =3<1<\-===E=r?c!"?Fw Կs<8dH@ƿÍgzV@gs@5@!?C? z'[>?IU?,/5B9?ȧq@&?z'ZJ?Cr0?(X[H@MH@|uh@d@q@ @?@rSJF㿐!@?o?v5@]@P~/?i?q?Uk>N:{ݿ>3??{'j ?w?뾿bRн >nӿ|??L9@k!#?cܿ+#>]?1O/?S>)iSt?Kn>i|ͧe?Co҆Ջ5?r`햲M͛?=ZZ??><> ^D?Ѽ}_?SD[> l6?b:>8"W~5>>1ӽQ(R>в5b= ̽#=9<X>6~>z?? \ξ1>0?&Z>`>Slա{}?>?Ѹ=f$}l?5W? D?&vZf?ǵQ˿ݮM˦F ?αZ?2?Br-tݕ?F?⚿&?? ?>w'bYQۈK@&=o*觯@9#Z? }`ɑ"=̿]>LzB7?*?5Cp?S?9?F5e?N.?i@9]-c@_2@khqֿ@M˿v0p@g??>q?L9?n? PCm_?Ir-@?rpT%@S"@nX?v@O?@!?}J i@Zn.@ڄ4%N?֢g?:m?kL@?1̽vڗ?q?zm &d@!@5=XgѢ҇H@Ej@ ?ـ? :@@/q a@,@1@gCQ@@sa@b!@2@AۿNZ@42@>$ZWm|@칩4}@akF?ܕ56g@UQ`F_ˍp@tux$k>0@/vF9 doiD@-1 @2 i@Ii wpN1@A`]?j?<@@+gq@ʟ$@sc]D@Pe@Azyپ A>a A:HV?F;i@H"̰g@!ۿ@I?@"m{UzhN@0q-%-%'data1'ư>???smo@݀@ @vh@+@@,@L@@HA~@@,~@U@@ @b@ 8@xU~@o@ }@=~@[@#}@Y@"~@>+~@с@܀@i@~@K@@6~@@"]@M@7~@o@;@{|@*@Qb|@{@|@p@g~@;|@@R@@V}@@|@@AJ@ϸ~@~@&~@@@~@@@@|@y}@@t<@G@ށ@9r~@Z@My@[y@t~@.>@ @FM@~@@uz@@n|@e@.@"@݁@(@3Ȁ@Q@Ű~@8}@=_@@~@@FO@@I@@@xw@!@@R~@v}@f~@c@~~@l}@0@ص@€@0@@}@h~@Ry@~@}@v@)@@1@9E@s}@ɀ@@+~@^@8~@y@ґ@ |@@@6}@.@(~@="{@xW@r@@/@Q@+@@v@}@e-z@@ @_~@.Y@m@B@@@_|@8@3>@a~@?}@&@ˀ@@}@;D~@F,@~@@7@@{@@Ɖ@ @x@m:@a@e~@K@&@~@@o@Ԁ@~@,@@q~@~@q:{@C~@@@f@p@݀@r@r@x~@v~@#l@ ~@~@lj@|@ }@@@D7@|@$~@#@:@a:}@}@3{@e~@Cl@@М@'|@?@)O@a|@~@"@T~@^/@6 @h@G@}@1@N~@h}@6~}@J@@|@jz}@՝@~@tH@G@A@Zp~@{@ol|@~@Q}@@{@|@-@bz@}@>P@3@U$~@@V|@~@:~@4@"y~@T@X|@y@4@~@H@v~@Ř}@Qǀ@A~@|@u@b@@r~@ձ@z{@}@{~@<~@fv@VU@#~@@#@X@̨@D}@p}@]@K@o~@~@w|@7c@h7~@S@F|@Y@^G@$A@}@,@ @@h@x@Q}@8@~@ E~@ @0~@`}@9 @}@ @%|@#@(~@@΍|@܀@~@T.@6}@~@~@ @S@@@}@^@2@]@jz@'@|@o@G@J#@r|@@~@@(m}@}@m@B@X@p_@[:@*{@)@+{@~@L|@@~@8@[@@ @?π@Ԁ@@}@~@~@\~@}@@@n}@G~@1N}@ B@qX{@1{@1v|@~@X@|@b~@i|@a@/p~@n@D~@z@@}@@r@@?~@>[@@Sˀ@ P~@O@q@[|@L\@9@E@jx@2~@O{@}@V@S~@{n~@@@S)@3t~@R{@@x@r@ɂ}@@@"@}@r@l{@H@@w}@uހ@_@~@&@|@@ @ @놀@1{@;}@U@I~@d@~@t}@E,~@z@7@f|@OE}@)~@e@j}@}@(p@]@Qv|@|@-P@-|@р@<@ }@-@~@|@"z~@@J@wP@*@!@s@~@զz@_6@0~@~@a~@uA@M@e@e@a@~@a@).~@;~@@|@@0~@?@2@+@ /~@0@Am}@K~@@ π@my@t~@~@|@P@ݘ@%~@k}@|@:}@[}@@<|@|@9^}@(~@^@}@*@8~@;~@ѷ~@}@J~@J|@}@"@y@[m|@7~@w|@}@!~@z@[p|@ƅz@ӆ~@n(~@C'@~@Ϝ|@@^|@|M@m@|@^@|@}@|@|@l@~@~@(}@尀@?|@-{@w}@)@~@G~@|@|@r|@|@e|@9*~@*~@|@B|@r@}@Q@|@~@r0{@J}@42{@{}@@s@}@@*{@{@{@z@N}@a}@e}@+@^~@;@y@~@|@z@X@]@+|@}@ |@|@ }@@/{@{@r@G)~@~@I@ N@&}@Y|@*~@w@4<|@|@#|@}@C|@~@G~@x@!@VG@P~@B{@(z@U@D@T|@~@J,|@~@Q|@9{@D@ك~@n@|}@Xz@S~@@Ei}@}@~@W~@|@|@]@~@+~@{@׏{@+@>}@g~@~@Ki~@y@@8~@|{@ ,@~@-}@My@8@D|@~K}@d7{@L&z@N{@~@~@e~@|@g|@h~@g~@|@~@e0|@l~@c@Y|@{@pz@~@bG~@K{@{{@H~~@3v~@}@.5|@Q{@|@k}@}y@<{@D}@}@}@7z@%_{@|@~@.~@=~@0|@M}@ }@Fy@A{@x@m{@j_|@y@nu|@Hz@={@K|@\[{@z@{@|@,W~@*(}@̉@x@}@)H{@'}@~@w@|}@oOz@@{@)y@dz@I{@y{@~|@A|@t}@e}@W|@@@D}{@}@"q@:}@2z@T4{@@}@TYy@{@|@x@f}@K ~@6z@۪|@{}@@O|@$@Ϛ@>@~@R~@ }@=~@;|@z{@W}@J/@}@9~}@$@Y~@m@^a}@8C}@{@^|@z@v|@2V{@q{@)z@}@z@$@#Q}@{@ez@}@y@|@~@{@Uz@4~@ ~@s}@|@S_@!d@z@|@C>@|@t}@Hz@2{@Hy@{@#y@u*{@W{@x@I{@O|@|@;~@}@ {@Wv{@ }@/~@|@Yy@ev@y@z@1r~@6{@&@Qy@z@$y@fz@tz@x@{@4@>v@=~@n,z@^}@Qz@4}@i{@~@F|@|@wz@xz@X{@ih{@*{@@z@|@{@Fw{@:z@x@H{@|@ ~@I~@}@y@z@z@Cx@KK{@*}@_|@ z@'}@|@U|@=y@2}@fz@>w@{@7~@~@~@ {@>@=y@YJ|@a{@O{@;w@x@y@y@z@Pz@9z@}@y@2y@}@}@4z@{@}@z@,y@|@y@|@Dy@x@4}@+{@G%}@I|@|@v@}@{@"{@|@B$~@Npy@{@Uy@{@x@p @i^{@h{@ z@xz@x@ww@ک|@jy@My@d}@{@}@/|@zy@Fx@~@Wy@x@ݴz@|@Dx@"{w@W}@8|@ʂz@6y@ >x@Fx@ɷx@ y@HT{@F{@r{@goz@~|@T |@zy@x@z@wv@y@Fz@Vz@g~z@mz@ hx@NUw@|@?D|@iz@)f{@iz@y@|y@ z@z@x@z@w@Ǐz@w@gy@u@yy@|@Țy@,{@'5z@|@Wz@;x@{@x@ߧy@|@Yw@ry@@y@u@+z@w@+z@=}@z@w@Gx@ar}@Kgy@'|@{@#x@y@Zz@$|@{@py@&x@x@|@gw@|@ z@uz@Hx@\Mz@xz|@T&y@v#z@{@ |@|@x3z@%x@zw@v@z@X|@}@ y@Yy@{@{hv@"y@{@z@yy@{@ez@|y@{@xu@B{@^z@jy@џ{@z@Ey@x@w@y@v@}+w@v@9z@;v@Sz@v@v@Ix@z@x@u@_x@x@4{@J{@@y@1y@-x@Oy@(z@ty@y@z}@Ky@Zw@w@x@Сx@y@{@?v@D~x@Wx@EPz@t@Iz@$t@Yy@y@w@+z@Ffy@Jw@ڟy@`v@]z@?w@\}@udz@|tw@&L{@v@{@B |@{@y@w@_y@{@w@Fw@{@<{@arv@x@v@Rex@ {@lt@Ay@x@w@t@x@8y@x@"x@Jw@y@w@æv@w@w@Ky@$v@ޅx@2jy@u@Tv@,y@7Jx@z@s@w@5v@v@-y@ey@0x@7Mx@%w@{@v@Tt@ t@*|@bv@ix@osu@w@y@&u@-x@t@0s@ցy@ Lz@+w@Zy@/y@rt@Wv@f}@u@{@\v@$v@'x@By@84w@Du@rfw@x@v@ x@؍u@Ӧy@t@+6{@Vy@z@9v@5`v@H@w@(w@Yv@Mt@ȏv@ƈy@4v@Tz@ v@"v@w@u@Fw@;>t@x(y@`v@v@8v@Zw@Ww@v@u@w@Tu@W.v@v@es@Ct@w@s@@u@v@u@Ou@u@u@Bx@Xy@It@g>w@w@ܯu@Ax@ Fw@Qw@0y@z@mw@ęw@u@x@+x@?z@Ix@/v@ #v@v@@Gv@Wv@w@Gy@fw@(u@ Pt@@v@s@djt@x@t@u@_nv@#s@?y@v@e y@lax@v@u@jPw@߂w@q@Nu@v@|Ov@w@t@s@&t@w@'s@v@u@w@x@v@w@t@t@(x@ht@v@u@6s@'[x@GZu@w@kv@Yu@:ct@ݠv@u@=q@Eu@feu@MCt@v@t@Xv@u@iu@t@u@v@ft@Zx@i#q@1s@s@t@)w@!u@ w@(#w@"v@v@t@xs@xu@#u@uv@ +q@s@t@v@y@u@ks@bv@8u@at@t@ܰs@Ou@t@?>u@Jr@v@x@@v@)ct@r@nq@}w@A!v@?v@1u@]o@t@M0r@q@er@p6p@s@ p@n@.p@s@Qn@2r@Rq@s@3p@Cl@q@yn@p@Tq@zo@Qr@[Om@[r@q@;o@o@yp@ q@B-r@,q@o@&m@q@Gn@dn@o@q@߰o@p@~p@o@Wwl@n@1m@ǘo@^t@m@!m@ 9o@Il@[p@cs@Rk@o@؁p@ r@o@do@Io@o@q@-n@Co@9m@n@las@Nuo@,+o@vl@ap@Tl@l@Zl@0>q@q3o@ݣk@nZn@ko@ l@#p@gr@Sl@n@un@"n@Go@6n@m@n@hm@Ll@#n@Tm@4r@po@n@o@vGl@so@)>m@3m@m@o@o@Y`q@9m@o@n@n@tt@n@Co@(o@pnn@l@m@ro@Qk@n@>Yi@l@o@,q@$m@Ao@k3l@amj@n@#m@Bn@&p@rk@m@8n@o@k@Vm@Lq@>m@%Jn@>n@'n@m@ihq@?o@ l@k@{p@jj@Dm@mpn@ q@Yn@7Qo@Ep@zn@ q@7=n@n@m@n@ p@n@Pi@ajn@k@ujj@(k@,j@k@3k@#o@[k@o@Fl@gm@q@l@n@m@:p@r$h@=p@%4m@&ko@r;k@go@4o@=p@ o@m@'nl@n@k@j@zq@=m@otk@ %i@l@ho@|Sm@l@j@ k@m@=Ro@Ao@%&m@h@5l@ n@vl@*l@j@h@Krm@3l@i@^Sk@!l@k@k@rm@?h@8j@Fh@l@Ik@m@Gm@m@Ln@Im@.l@l@%k@Imm@]m@k@xg@j@4o@xh@+Ij@l@oi@>j@l@m@+n@Cxn@_j@k@k@i@ l@bk@/j@~m@;n@vi@mDn@hk@! l@.Jn@]j@hk@K,j@9m@Zm@k@p%j@n@eh@:i@m@k@k@n@n@6h@j@k@,j@)k@Hj@Kj@Ql@m@Sl@j@ h@nrk@k@qi@Qj@i@l@Ti@7(i@JLm@pi@ m@i@f@-k@l@ l@h@j@71i@i@j@ҡk@Gm@ɠh@Gl@Tk@h@Ql@l@h@Qk@ h@j@Li@gj@"i@dh@i@?k@L{j@rk@Te@Ql@j@fj@Nh@%i@i@>Gi@Qj@i@\l@k@f@$h@vi@h@f@i@ k@j@Mh@n@cj@Yj@>l@6h@l@` h@A%i@ٽi@ i@J\h@Vj@k@ff@3g@oh@k@ i@h@Ni@8>j@f@2j@\i@h@>l@z%g@i@ j@Mg@j@zf@]i@g@d@ h@wh@%[g@(;h@R5f@D g@Hg@l@U`j@g@g@g@Pf@MHh@g@ih@)f@Fh@%*h@sg@@h@Fg@:%i@g@4g@g@nh@i@g@j@hf@f@*f@Yi@h@g@:j@|Bf@rf@2g@lf@g@g@=g@i@[ h@`k@|e@bf@c@5g@Hk@j@df@zf@g@h@g@(h@g@rg@k@k@E>d@f@>c@f@ e@ e@Oe@e@i@ j@}h@Od@je@i@_Ue@g@h@Tf@e@xf@$/g@f@i&e@f@Oh@i@Lre@Zb@g@J&h@U6i@.hf@e@{d@g@d@g@e@6Pg@Ug@6^f@f@Ef@h@b@f@V3f@͞f@3"b@_h@g@g@ei@i@e@e@d@Re@d@h@Vud@h@Pi@e@j@d@yYi@d@6c@e@e@7g@9i@{Xf@ld@Lb@.d@K%c@c@b@Vd@uf@`g@H h@ =e@i@Wb@e@_e@թg@ e@b@d@/ud@d@n f@h@g@!e@lMc@LKe@vf@c@e@hb@2e@e@~e@ΐe@&b@b@e@ f@f@(de@6c@rd@S>d@4e@e@.!e@d@ic@`@d@\2d@ a@#f@}f@,b@`@c@e@qd@%@a@Mb@&f@_@Mh@Lc@rue@m7e@l`@\@z^@nGa@i`@d@6]@_@>B^@W_@l]@ a@Y@ D[@d'[@O]@a@]@\@O]@._@\@^@s_@l]@Uv`@)Z@3 _@y^@Z]@ѱ_@'_@jv^@cd@^@_@1!]@b^@3]@qab@n^@[@-]@]@<_@^@^@r^@ \@\@{_@]@6\@A^@]@9p_@Q^@/F^@!&_@^@>^@\@<_@^@`@[@'_^@ޛ]@A]@[@[@]@D\@Q^@|v^@E]@_/\@5N^@ĩZ@Z@(t[@~\@?[@ Y@O^@U\@`Z@\@(_Y@`@i^@_Z@]@W[]@q]@#`@vu[@\]@J]@_@\@?`[@@ `@(a@թZ@^@z[@>^@\@6]@jZ@uZ@X@=[@S_@Y@FX@[@^]@B]@[@]@\F[@`Z@k X@~]@^@֪\@X^@wX@\@i]@S]@q\@ y[@n\@O]@^@mY@X@]@P/Z@@b[@Y@%]@z@Y@)\@X2^@/I[@]@MY@[@BZ@-Z@[@+[@BY@dZ@\@XY@01Z@Z@Y@_!X@ [@-[@lW@a]@X@8YX@6Y@h7\@[@f_[@$Y@ Z@[@Ks[@8\@X@^Y@;IZ@W@Z@Z@W@Z@Y@tV@{[@JZ@AZ@W@r[@W@Z{Z@aY@6U@pU@*\@+X@W@X@X@ETX@apX@Z@,qW@BY@dX@oZZ@\@-[@gT@IX@Y@W@Z@X@YW@Z\@:Z@X@Y@Z@RV@V@1V@GZ@Y@Y@0^Y@T@V@`Y@'[@R Y@>5Z@X@V@t\@uY@Y"[@Z@X@gY@YLZ@Y@=X@Y@4W@W@W@9Y@Y@%V@2W@V@uW@#X@h)Y@^Z@T@XDZ@JW@YWU@BT@XZ@V@W@+Z@HV@juV@X@V@|Z@^Y@X@Y@(Y@Y@KZ@VW@VU@HqY@zW@W@Y#Z@^T@(HV@W@D7X@Y@Y@~V@W@V@hX@\W@'Z@X@Y@:V@5VV@'Y@9X@ V@ݏT@!W@C"T@W@WW@Y@*X@V@V@XY@ׯW@P:V@)[@TzZ@OY@s\@0_X@Y@Z@E[@Y@Z@m[@*Z@ӬX@WZ@q]@C_@[@*zV@ [@Z@h[@f[@fY@2]@Y@(Y@s\@_\@^@8^@M[@3a@S\@W^@*]@ќ^@]@;[@Q`@#]@{e@Fa@`@mb@la@Ac@e@EA@=Ai@AK}AA8AAr6CA CADAFA7`EAFAqHA1IAkIA^JA_KA:KA?LA0LAMAA}>A@=A$2;A:As9AV8A;7AS 6A5AW3A2A0As/Aq.A,A+,A*AT)A[(A'A%A.0$A"A!A AA$MA/AK.AR7AeyA)AgA̮AA^A–A.EA' AG A A.* A&A@AT AAAAK@d@r@@@΍@@|#@@ @&C@|M@@@@r@V@[d@@@@@@@4@F@@v@>@3K@P@f@ܶ@f@P@ͯ@i@5@շ@J@7@i@kv@ͣ@Q@@@%Ӟ@v@8@@@s@@UR@u@@@! @ݍ@ȋ@&@Jׇ@؈@ah@Z@:@A-@ڃ@tM@@ .@ $@@(-~@{@{@%y@u@6p@Yx@#r@q@5|p@3p@1p@ٲk@b@l@j@tj@ri@i@4f@c@'c@d@r_@0^@^@g]@]@`@{^@5[@v\@}Z@MY@K[@bW@Y@EzX@wW@SW@W@{T@xXU@.=X@2GP@jT@P@ZS@OGQ@nhT@4S@1Q@MQ@4Q@߉Q@=K@rR@T@4P@+M@5P@UO@UM@NP@=M@6M@CP@OO@̦M@.L@^ N@I@-G@;K@rK@I@mHI@I@K@UH@OO@J-I@ WE@xL@J@#nG@"H@e)I@F@E@F@D@F@D@JH@MF@%G@G@LF@}7F@iG@G@C@؏I@C@_TE@K@H@G@%E@TVI@)I@ٶD@>H@GE@SG@@F@eD@E@uE@qI@E@I@_D@CE@2G@F@mG@F@D@^E@F@D@%I@F@D@E@sB@LD@cE@xE@gE@4E@_K@P`C@ F@IWE@; F@@H@IE@KG@E@UF@<F@@@D@IE@A@>A@dB@/A@?@:D@?@/A@B@\>@?C@PA@B@e@@@@A@$x?@2?@Y<@)>@ܚA@?@B@?@?@E?@B@f@@A@٠A@R[?@A@@@qC@=C@:B@?@D@`<@@>@9ZA@}@@B@D@0A@+<=@>@?@!;@@@?@=@@\D@VD@>A@oNC@9@@A@3B@KC@8@@#@@%&?@b@@ B@C8B@?>@H|?@B@@@~>@c%@@C@D?@'?@A@LA@Cm?@B@B@A@9@@P@@WC?@@@B@?@5l=@?@zA@й=@A@)C@=@_?@>@W?@B@Pu@@>@"@@=@@@G@@=@>@{?@[A@=@>@*?@n!>@<@'?@Q>@;@@@;@'=@D@>@t=@&>@q:@y:>@Ѫ>@?@>@#>@>@A@=@|?@=@;@o?@9@;=@<@>@5e;@=@ӿ<@:@>@~<@P;@t>@<@}<@A@3=@6;@f=@1>@>?@9@$U<@;@<@x:@>@:@-?@DG;@[:@?:@=@T<@D=@=@*<@z9@p_=@G ?@Bb<@:@,<;@\;@}D<@2o?@:@d?@N;@{;@-8@4<@<@(q<@o29@7@D<@<@"<@,=@;@f?@QZ<@Y;@&1:@=@>@r*;@:@o<@:@7@(8@;@;@ 9@ƙ=@8@j:@AE<@!;@j;@`Z9@A<@3e8@9@@;@c=@ږ<@~8@2k9@i<@9@ 8;@EN;@<@:@=@};@J;@9@N:@]8@8@ 9@>=@ T<@9:@L:@ 9@8@9@V;@;@x;@<<@:9@8@֥;@B:@V<@Sm7@$)<@?6@9@E:@O_9@8@n:@09@ :@]h8@}:@7@b7@_'9@=S<@%t=@9@7@8@g;@;@%`:@9@O:@;@/:@M;@7@':@,8@d7@.v6@~8@G6@r8@8@x8@:@&28@:@9@:@8@36@}8@7@8@ܼ5@<@I5@߯7@|6@h6@=9@7@A5@g7@i5@:@7@ 4@8@+:@9@H8@I:@c7@=6@3@R&9@)5@4:@7@ 6@B8@6@87@\7@6@_v7@\?2@>26@w7@47@3@_V5@05@y5@I8@#5@]6@_6@6@!4@3@4@K9@d8@1@4\4@9;@5@)4@"4@[7@4@%|2@:@X6@v1@o8@a\4@35@Aj9@6@ 6@3@4@7P5@!6@5@,3@:A4@83@B[6@WS5@c6@K6@8@6@25@ ^6@6@3@_6@24@4@7@2@G2@3@Oq3@,T5@ 4@"Z8@4@]o4@2@@3@6@6@*|4@V2@4@z6@64@d6@ƾ6@u4@3@\q2@g3@5@aw2@;@5@(1@1@b5@4@x5@5@U4@B3@BG7@5@(S3@4@ž2@hb2@:1@O5@G2@2@Oa3@.6@^m4@04@3@4@3@Ql5@@F0@93@ 4@ְ1@]0@T4@͆1@7@-0@N2@3@M1@/@T3@2@3@?3@V2@2@_13@H4@E]6@50@15@O3@8@3@2@f4@4@3@82@2@(4@2@F0@1@0@$3@/@Q1@e2@2@Y1@2@0@/@f0@1@1@90@1@90@Y&3@ `1@6@2@'/@ل0@.@,@i&@UK*@MM*@n.@Ē*@6(@ )@+@+@(@)@+@A%@or(@(@*@u%@%)@0)@0J&@(,@ *@*@{a-@h(@^*@X+@A)@Ar)@,@%@(@<)@׽'@F,@P*@V*@#)$@\ )@V)@Y*@v(@8(@~*@ %@+@<$@&@`&@#(@(@Wo)@b)@u*@6V'@)@!'@e*@'@#(@&@(@%@-i(@>)@+@Ji'@ &@U&@#@(@(@/'@)(@'@&#@Q#&@(@T)@"&@z[)@܃,@('@W&@'@!*@ &@f&@&@I*@(@hE&@"@ &@&@u%@$@'@/C'@#@R&@B(@%@ˣ%@~(@$B&@!'@k&@p;%@y3'@{)@w&@)@^~%@2)@Y*@9)@5G#@R&@:&@&&@"@&@ %@L0$@ %@#@Cc#@y%@K(@%@d#@&/(@\%@Z)@*@B%@vV&@n#@c%@#@R$@k%@"&@%@%@'@e%@%@j#@$@g/$@"$@&@f(@%@J"@:3$@r1%@x#@3{$@6#@ %@X$@N @f,#@@i#@N$@O>&@>$@Kr"@##@$@}&@1#@e @$@3#@ʴ#@%@M$@#@ø#@ %@"@V @WB"@@ !@)$@!@%@&@ @Z!@I%@~@r&@Z$@ )"@@$@@  @a @'!@*(#@c#@Qk"@._@:#@K!@'#@`&@?#@%o @!@a`#@@"@v @l"@t"@b#@@d. @%!@o!@.s!@#@'#@"@ @#@$@[@%@V @#@"@<"@a!@D@ @!@v@96 @X!@0i@"@1!@"w!@A!@="@p@-!@A#@ @E!@P8$@n @@ "@P!@7 @3@"@t5 @@%@V@b@Z@T@Q@)@j@=@@Q @h @g# @p@x@,@!@ @P@/"@ɼ@@!@@@m@O @5"@}S!@Y"@D@Z!@F@@@ @i @I @@*@v@c"@7a @[@@s@@@~@@@S @ܩ@@y0@@ @.@ @U@gd@ @'!@@@S@ @5@"@A@@.@ @*@@&!@n@p@5@@@^@=@"@.@-@F@g@ @e@6@"@I@_@W @e@ @1@ !@@u@Z\ @ @]@D@.@[)@>@"@@'@!b@@0@ӣ@@]@|j@9R@(_@Ʈ@@I@@@2D@@@@AB@@@@T@;@@B[@p@F=@u@{"@f@@!@G*@@@@E@@H@H@@@w@3@,@_@2@6@@@A@u@>@@ړ@s@y@@E@@@@@*@@@e@@Op@@w@(@ @@"@1@3@x@ L@O@@@`@@8@;@8m@"@@@@|@ܑ@6@M3@+@u@5@D@\@@@@}@I@q+@8v@@ߘ@D@@-@w@@@qX@@s@,@@@@W@Z@<@@u@@h*@r@@@۩@@!@@@@b9@R@@@@n@m.@@6@6T@w@:@@@@W@VT@@(@A@p@_@ K@@c@.@ӄ@@_y@^@͵@N@f@J@fn@@!@-C@E@>#@@g@@@]@Ez@T@#@m@&1@xN@@@]@@2t@`@@X@@.@@@c@h@L@e@h@@S@X1@Xq@Vf@@@&(@@!@@K!@M@9@c@k3@w@i.@Թ@H@W@ @@@u@@=@@E@T@r@N=@Y@5v@h@C@R@@@3@ @y<@i@@@q@F$@h.@qu@\@;@T@^A@@=@0@j@k@R@j*@@w@Ƙ@"@@@@@Id@@i<@1"@@.@@;@@,@o@@@K@ @z@u@T@@@@@/@@R@Q@V@"@@a@` @D@?@2@@` @n@G@Pc@8@x@[@L=@[W@F4@[@6 @0@B@,C@s!@l @]w@ @m@@@ւ@w@=@=@@@@x@ @X@@Im@m@`@.F@ @@ @l @{@T @\@ S@U7@Q @@ @P@~@ o@֢ @A@ @V @ @@[@@`@|2@.@z@@g @F@H @L @ @@_ @ @v @3@N@6@@"b @ @ @F @J @A3@@E@ @׺ @2@@l@ @' @@ @\ @_ @@ @ @@m8 @W@* @T@y @ @q @=@% @F@ @n@ @m @I @h]@ @ms@@/I@ @: @ @%b @ķ @3 @ @_ @I @-J @5 @O @ @ @rt @~b @m @4 @ @ @ @ @@*@9 @L- @, @ @ @ @x @P @5 @ @j @V} @y @ @_; @ @t @% @N @R @h @@@@^ @>@@ @ @on @c\@'@@ @@@Ԓ@ @ @@#X @I@@ @@ @n@h@/@ R@r2@7@v@1@@@ @z@@@ @@S@e@@6Y@H@$@@b@@D@@2p@@m@M@@i@IC@@:@@S@{@U@@@_ @H@@| @)@@?@}I@Fc@:c@L@@@e@@ @J@I@}@@b@@/7@H@@q@k@P,@݊?uf@@@@@C@@@<@ZN@@@4@j#@@O@@?@@]@@?@@@vd@J?&@2@@@s@{@@L@#p@"8@@@;@+@ @A@N@U-@ty@E@@$@{@jz@3L@:@{@ռ@(%@9E@'@%@Y?w@B?@G @c@?̎?@@6@@,@E? @@\??o?n@@@PH??@?@H @J?-C@?9@S?@? @X@ @@B@ѣ@n?W@?!@?P?g-@??1@?lj@?Qw@}??0?_@ @?!?sT@n6?X?x?j@E@c@G@z@?}4?@%@L??j@?!f??1?{N?'$@?@??YG?3??? ??+??L??ݰ?Έ?_?(?f?@ T?@s?:U@ȁ@?$?:?w?G??Q$?C?l@?IZ?+M????e?z??DF???zi???0/?s?o3?78?7??i?s?J?W?:e????.?|d??r?>?I?ZO?eQ??@`?7>@ڴ??]??5?"?5?s??5???ی?h?g?[??-?G9?4?%?kt??]?+z?? ?\|?9?+?=?r?:?Z??z???F?9?? ??S?p?RS?ػ?M#?(u?6 ?+?^J?*??? R???#?{??KA?k?3"??D&?@K??V?Uv?cC?g?"?@H?,???\?L?zC?U?I?;?C0? 3?&J?'?8x?¥??F?T?Q??5?/J???zT??Z?q?g?z&??~8??܋?Rk?? D??b$??{??y??t??o?'^? ?o?g$?L?{?&???,v?0?? k?m?f.????a?9?1??????$??}?.??&?z???n8?\?v??%???????4?z?,7?M?BF?*e????"?L??G?J?M?0?l(??T??F??=?E???$?I???!???2??h?$?=?0?w? ?e???Z?wJ??~??#?mq?9?I??W???O?!?n? ???????R??C???'?8????.?v?u?d?N?~??e?՘???s?}???0??g?Ya????X?|?_?.? ^?A??~?dw?4????????(???%??X9?z???4?Y?̘?v0?j?=?%??Z??1?7?;?}n?r?q?vt?M?5?JO?n??`???????_??=n?(??D?P?M?p?&???X?1?3b?]???2f?4??n?-?`Y?y ?t?/?O?U?c???%?_?'??'??m?????'???k?84??Aq?{?G?1??0n?*O?+? ;??ɛ?v?H?5?^??Y?Ύ?Y???bu?C?L????? ??Jq??? ??@?.?Z?׋?_?x????????,?$??E?g?FL?Z?ct????n ??r{?%? c?]??a}?`?i?܅?6?AG?P?? ?7?=?)?W??Z?t??p?8?m???E?x1??h?_??~7?|??I?>I?Nc?q ?V??I????g2?8??@ڧ?go@_?6U?R@@8@@@]@G@3@|@@ @@p@c@-:@@ @@ @M @KS @f @ @lZ @l @s@( @@@t @@r_@G @ @@l@$@@,/@s@|(@ҵ@G@`@[@o@@@@a@@ @@8B@@_@C@@@@P@2@|@_@NL@@Zs@ @ _@&@@3@EO"@ET#@f!@ $@T @ޤ@>m!@&@k @!@X!@f'@!@H$@|@ @@$@7$@ک!@2 @!@"@ X&@!@ '@"@k!@ @$"@&Q#@#@f/@"@U @"@ !@#@ %@ @"@Ӊ @O|!@ @r"@k!@@ @&@H!@& @ @"@%B@n@p@@!@ @@d@/+@g@@a@K@@@8q@A@h@0@@ @@@;@{@ @>@@@}@@@8 @ @->@6@ @\@[ @I @m @n @F@5] @ @9 @R @@[ @@V@F_@[@@%@@@`s@E@@Gs@C@τ@*@@3?9@@-?`h@)@f;?y@?>?;)?8?>?vH@S?,?U??f? ?\?????n?\?X?\+??;|?@??1???}?=?Ko?ҷ?? ?K??r?`?#?SP??q?%?????K?^??p??Z?d? }?????]k??V??A??6?I???.|????G??^??-???E??)? 1??̪?[F?"?A?S ?i? ?Z?n?u???????e#?Ư?T??>?#?}k?E???|?]??O?ݳ??????C??΃????R??k?P??m????1??#p?g?f?z?KP?!?2?????J?X8?6??S????v?N?z??X??+?Iw?܃?"?!o??5a??+??g?7?7?e??y?E?%???0ݾ??!?`??z?S??^l?? ܰ?<?޹?Y{?m??F?&?BL?đ?ڵ??K?ڴ??? ?߱?kȵ? ٲ?M?C???0T?a? ??޹?Ӵ??)??TO?%a??{?4?Ų?K?/?i?F?ø?_??6®?\0??V??%Ь??L?)6???:^?ў??Eگ?!.?)?V?ީ?䥭? ?ֻ??r?C?3?F{?Hg?]?؎?!ت??Ӭ??d?5??x?vb?R??7n?ʨ??۳?_?`??R?!?w?-?-?'r?Ξ?1?M??mQ?{?Ӄ?o?¨?O?I??L??:??֫?4?{n?5?ګ?Y?0?u?M??t?q?I?_?^D?ޠ?5?3J? I??y????e???ϧ?P? ?p?Ӥ?;'?*??:S?J???,???Z?c????y?et?|?n?ķ?Y??? O?j???GB?h?xj?l?}??~?4?~?6e?*?Ti?!c?A?:?Ҳ?V??|Z?ӥ?_??ϡ?ƞ?+ʛ??2T?ȡ??q??¥?X?#??9-?b?q?O?=|???-?c?:??/?/??[S??>?7i??"7? ?_?ښ??1W??X????nf?Q??t?1?J[?ܤ?כ?6?ι?`?n?+?K?:N?I$?8? ?ɝ?1͝???%M??uɡ?A?B[?A?=?М??t?kl?QW?6?B?Z?U?'"??5g???N?B?xp?V?U?Mn?m?us?]?gF?,%?O??w?B?o?/?"?ˣ?x???P?꿘?mZ?>?r??T????Sp?ޗ?ʭ?ڙ?:??0????{?? ٛ?O?'??u?[?6?s?ⱐ? ???y?b?Ӌ?M???U2?f4?,?Y??Q?绖?b?ԍ? ? ?D??????u???J?+??y?.??Q?YI??r?*?@?c??yD?ݒ??ח?`?\?Ǘ?C???#??ϑ??~I?B?l?G?c^?w??X???ܓ?5?d?]???x?D?J?'??J.???3˔?h?|r?Ӕ?L??ؐ?"??3g?o?_?v?W}?w?#M???=??Ҍ?O+?g?? ?L?#?w?s?? ???ԏ? ?(?K??>? ??K?Up?\??س?G?Xi??À?7???J? ??^?ڌ?t?t???1?Ċ?G?q}??%?u??Ž?\?s?Y?$?%e????>?Ƈ?o?˴?X?|??Y? ??]?m?Qd?EV?:ߊ?S?ډ? ?^??+?~? g?$>?E?f]?`?e?f??:}?ʼn?Ň?6?,ކ?S?9?J?(K?+?K?5?,?W??1?ʌ?J.??Fև?2??H?8??.??ث??!??+ƍ??b??AY?(?'????p?$??<`?,?u?Z?A5?a5?3?wv?J?Y?pI?ل?)`~?Ui??f?ф??`w?]?ބ?O?q?7?ӹx?x?ޙ?? ?4{??g ?7?{V?0?͠? ??I?w?F.? w?4??^?!??c?M?gz??h?? O?濅?{? ?r?4?sM??L??=s?OQ?h?˄?G?S? ~??X?t???"?ѳ??e6??}T{????r?q???Ch??҆??? ?|?b???? ?f~?Ը?n?L?/}??z?R?p;?@}?&}?}?7m?&D{?c?܀?? |?U?)|?pt??K?9~?( z?~?:~k?cx??x?k&y?Ć?Q;~?*x?ws?u? y?z?r?|?g[{?N}?i~?jE?M??PXx??k?y?k}?|~?t?r?̈́?{?ݎw?#w?Fe~?]r?X2n?%au?z?s?y?2y?Zkz?8?kg?jk?%fp??g?v? ?ߪy?H+n?by?#?>v?ζt?'ux??J?z?I|?hp?D}?{n? ?tt?~?41q?p2o?.r?wn?zm?vr?=x?Ņw?&y?Zy}? s?w??y?ps?5m?s?։c?v?t?ęq?(m?8n?Jdz?ʟt?w?eze?,k?bh?oQ|?Rp?q? ?VLy?ܿe?q?5s?#Zf?}?_?q?k?Ol?i?-i?j?[o?*r?hp?X?gi?x?)p? o?i? h?x%]?|w?m?}?.m?Ժx?Ef?p?k?h?if?\j?Bg?m?70g?+Sb?l?p?mp?:_?+s?#n?Mg? rm?ī^?o?^?*z?;x?e?tU?}a? l?l? q?;i?Ta?_?_co?J^?h?ht?`?c?!o?c?c?zc?7^?|h?# t?@c?T?J_q?_m?%Yl?Ed? {i?pc?yl?S?/^?\?ݺi?a?Db?vV?1Hj?EU?d?OY?_?V?d?[?/_?om?ěl?ph?[a?\?]?i`?J_?e?ac?Zo?e?[?[^? V?#[W?[?wa?{]c?h?-T?RW?^?~T?a?j\?]?_?%U??ӛQ?=?D?TR?{9G?>R@?C?:K? /Z?ʼU?#R?sO?żS??=B?C?D?h;?0\E? K?DQ?R??9???LD?#B?:? 8?/8?JP?d&;?B?&>?m?@?t>?Y`D?@?3?N?I? wD?RE?B?=LG???:@?2jC?=?)g=?C?:?rE?7A?8?9B?>?e:?jB?V;??9:?8?c]7?8?2?@?*GA?;M?~G?:?`8?!7?r<9?z0O?\??F?????YB?>?}>?)3?@?RCC? j>? yD?"~B?/XF?c;?N;?:?+?jA?H?F72?^A?Q?,?*/?4?--?2?,F>?j0?J%7?3?}5?9?2@9?̅/?1?ך5?;=?l .?W )?&>0?ڡ,?F>?<$?ݴ-?Q&?38?_C'?=?7? !?/? ?1-?A7?C?)?o@6?2?$1?/?U7?A4?l>7?%6?*?.?,?92? %?3?8.?zn&?2*?AS?'?#?&?h3?_K?#?-?o?u?\4?&?%?z$?[?)??Dg??;$?"??O).???L-?  ?E0? $? &?%?J ?l|?8?1a'?/2?̲#?/)??s ?"? ?$?>??_H?ǘ?1#?zk?vK?C?bO??G$?@%?T$??%?0X?G"?0??} ?L?0??:?/D?}\?:'?f?"? ?E??5[? ?/?h?a?i?e?V??Qf#?U?'?g?֚?g??,n?!??(!??_?l?(0????i"?xT!?&?b ??8W?I???"??p.,?e? ??J$?E?&??g???-"? !?F ?? ??|?Z?>?ci?v?w??,?j ?@)?N'??*?M?ʕ?%$?p\?A?˰?>?=h?+??6 ?~?}? ??D???͉? ?'?t?|n?*?^? ?J ??dI?|?ZT?b?k8 ?I??R??Q??2??? i>:$??5??]{ ? ?* ?"? ?ʈ?][???2? ? ?R ?y ?ph ?@_? ?!?; ??@??_?@?g?:?_? j??{?O??;?? ?&X??m ?,?#s??; ?3?p>_U ?]? ??&?z?-\?$>B?>j ?>??: ?Cg?i???[?7??'q? ?5?+ ?Y ? ??V?Dx?>i? ?Q?d?-V ? ?T?:?7?C^??w?? ?Yb>?3:?hM?#- ?L ?+>|>f?J?A[ ?>$?Ӝ?I ? ??IX ?T? ?_ >'>T ?>$j?>m?O>/>X? ? ? ?k?z>&?ej ?E.?~>ar>?p??B??u>T?<_>?1?& ?^>I>ݴ><>c ?*>A?I>$>AF> ?|`>>?C>?T?>?x?J?p&????m?t>>>M>\>>?]>Z?K ?>o?#h>>D> >W? G>>%>?s>i ?>:y?%K?'>>k>>s*>qm?n?>>R>>,>,>>;>_+>&>o>j> ?hB>>w>>,>r>> >JK?y>n>->}>" ?3>p>\M? ?|$? >ذ>=>>>>>>;1>HB>^>>>{m>> >G>N>m>>v>;]>|>!>>f>>4> L>O>D?>n>z>>]> M>@'?g>> >> >:S>>>> >ɿ>>J>>LR?6> >>`>.>>>b>>V>f>s>>`>>B(>>S>N>!>8>Q>>@]> ~>|>>ט>!>>=v> >d>>_>>'>4>Y>>H>[>>8>U>>l>K>>?H>T>>>$M>>(>#>*>>>X>W>>>>t>>N>q>i>>–>H>@>E>t>&>>C;>n>>>>>> >7G>B>a>I>w>.>L>D>>1>B->>ݞ>">->>8>>Ll>>>pY>>> >6>>s>l>_i>">>>5>p>_> M>>7>o@>3>W>{>Ϲ>>q>m6>y>f>>r>D>t>>C>3b>>y><>$>>>>>Q>μ>>>#>>4>>>?>/>b>>>>S>>N>>>>>]ĵ>v>7X>/>]>p>X>>}T>=ٷ>>~U>\>.>>>,^> y>K>>>>>#y>:>2:>>/>C>ƻ> >N >g>:>>>*>D$>> >P>fb>>2>1>>>N>~y>(>,>>>>$>8'>>>>>%R>B>e͝>>+i>o>p>>^>\5>Y>u̩>6> >9>ɮ>>W>(><>iW>k>m>>?>F>У>>>'>Z>@>>Ha> 4>:>q5>>S>>>曻> >5>4>> >B>q'>h>9>aw>@s>#=>>k>>m>2>>{6>o>u>Ȱ>(>r>>t>A> >u>k۲>>">>o>y>>„>K'>*>B>>D>肦>T>}>ȷ>U>/>>>\>>UB>>S> >'>MT>}i>[>7>b>V>>i>> 0>>&>Z>r>>F2>>->>>>ӌ>>>8>[6>]>K>;"> o>u>'>.>RP>>M>I>M{>u,>>S>*r>K>4>>>)>id>A>M>?>h>0>"I>a>'c>I>>r>Y>kz>,>1ȡ>ܨ>:>>>} >V>j>inl> v>DG>>h>7ڬ>G>>n>̲>~>W>K>|>s>g>FD>Ú>>>b>+>>c>˖>ݙ> >b>>ޫ>>ʛ>j>>:>{Ƨ>F\>O>8> >H>mq>>>T>祝>1>h>'>>$>>b>8>>-2>>>p> &>A> 3s>!>Cy>u>7̄>Y">p>>9]>Ր>>ft>~>˜>@>pp>ۙ>>P>U>[>|>Ynj>ƃ>t>7]>3>>2>ǃ>Ϟ>E>Ϡ>1y>>>f>Ae>A>F>|>>g>͚>>C>&>[>ì>>ѫ>>"4>MAc>j>>>S>J>M->>ؐ>G>)Ū>bڝ>YW> >9s>t>>ge>^>>e>@{>>3s>#>\^>Ѥ>\^>S>*r>d8r>Ҧ>_>Bi>q>gz>ܙ>m>iv>Ci> >Ւ>>΀>F}>ɂ>(>-l>S>>u>)>C`>v>ry^>>>o>}>Ni>Fh>*>5vI>He>2q>>t>b_>π>'m>6>[z>&>0X>9>I> k>{>x> >mCn>w>-n>>n>o>_>H>,g>y}>!v> >~>/P>>ⴗ>a)>/>>/>>a>l0>˅>lw>>m>i(> c[>(|U>Աo>5MS>a>;>>]>w>>r>\>hw>>s>w~>)>>bm>q>JL>x>>w>_>wψ>D7>GD>Z>[>P>-9>ƒ9>_>>i>"cz>_P>df>j=>6>S7`>|>j-{>hl>f_>Zʆ>E>K> >>yg='>K^>n>Im>[i>_gX>e>e>a>>h\s>J>аl>KF> xI>1H>m[>di>M> L>|u>a{>:>w9o>Ea> 6>6<>i>=>DxN>t4O>uD>$e>T>6>lH>:z>0 j>f,>ut>X>OB>,>Az>2H>*>[_u>zv>U> rg>szj>(SA>P>K>YS>_>hs>l,]> [D>r_{>5>C>3h>L>[>eO>c>I>M2>f8r>]><>\>B>O>#\>>;?>)>T>F>UM>">x>b>(<>XNY>X>:#>pj> p>\)>ia>*\>>>F`>;"P>N~Z>#A>!$t>l>&/>:E>B>E>I>F,p>:u>Xc>U|~>J>(?>ib>"tx>r<> T>(rk>#>>>(E>;Nc>1FN>B/>V9> =>=>H]>->%$>N>_M>^> 6h>=>>>|L>vF,>تH>Z>IU> F>J> C>f4S>>>O>=R>I8>>'>[YY>>_>Y>\m>->j[>`>>g>Ķ->^:>Y?>%>o7>7>7>-G>h->>O*o>[>nr>EjB>l82>JS>=->VE><> `>>C>0E>>f >F>0>&>J>%>T6> >S>>;>)>SM5># >b4W> o>#>,>U~>:>͓=S>6(#>[4=Cj>l{L>K6>X{>_>^>>!kW>|g*>6*>YU>I>k,N>8> > <> >a>%>p>"~>)>W>P>RF>V>>> B >+>*'>%>Xm/>T)>">QF>A$>+7>B>> >K>R0>5>>O>½>>L1>>-i>5>&>/>,=>X >'>bw#>r=.>g=>c;>f >0%>X>Q>ãZ>,?,>=_->=>M\>,>>`=6I>t->H>E>X>'>=T> >.>W=j>2d=a>k>x2=kp)>@>=>FD>%>t#>'=| >=O=j<>/=> >4>=5P>==!W>=~ >6>d0>e->y>cL>0>Z>)>%->i;>F> > >ݞ->u[=>=!>:=>== > >*>g%>]2>=Q >n#>Ȅ=8>F1>Ok=[L=[=i >[>==@> >׈+>tr$>$>> C2>=x=AR>M=[>?0:>ق=r$>. >,t= ^>z=RE>~=>9ƃ> 9>c= >,=9>y>k> >D>,`>===>>==M==>J >VF>>>=J>(> =` =">&>NE >h4>,m>= >%>S=AW=&=!>|>c.>>O="=j==>==qW>W#>K>vx=S >Z=k>p==,=M_=#=)7>F>TJ>U=;'>3=v=:=m>>$>E>Ä >= u=L>!>G==>=*F==)==T>=a=ֻ= =>T>>>)Y===>z>\C=O5z===Ł=?[ >o=s>b>>g=L=$>d=O>=g>N=DS= =( > X=¡==E >>o{>ƛ=5=#=#'=G=`=5z4>D==Y==}=.=PAx=NR=2>->^==1N=+=W4=>W >-=ң=1>=T=p==¤==j==nݜ=S-===O=d>6={ ==7h>=m=#>===FǷ=a>[=ժV=>HX=q>f_== 5=4N== ===z=>(Z=9$x=3y=Y=Ρ=Y==t=+v=k==z==~>V_=uC=y==!=(֯=e8P=QJ=Ħ==.>ɤ==rG=^R&=樦=Dl=y=a=t=<=== t=%_=|=z==p=v=\== w=Ǝ=>gۦ=AZ[=ZX=@<=_=F==Vk= \l=+=1r=Dd=֕=A= =#c==`==J1==i=}=k===r=BH=<@=q==ք===>ۢe==vº=y=c>=̭=;=I==|j=dDb==Ta=<==x=v{: ==$ܸ=|=o-= m=1=J====7.=sWT=l=a1==r=Di=5===v=#=|'=ݏ=&=+=<D#=d=~=:qD=B=mv=?Y= =8<@K==U<_"<;OO<'I=g== 8<=$[=d7= a=IU\&&=l==Nj=,Nb=l<{=b;[Ƽ&  Parameters!  WinLayouts!D^x߁K%K%defaultlayoutsmenuwave????All windows'Graphxx' windowsWindows not in layoutsLayout 3Layout 4Layout 5Layout 6Layout 7Layout 8Layout 9Layout 10Layout 11Layout 12Layout 13Layout 14Layout 15Layout 16Layout 17Layout 18Layout 19Layout 20Layout 21Layout 22Layout 23Layout 24Layout 25Layout 26Layout 27Layout 28Layout 29 2:BJRZbjs| Sܧx%g%layoutsmenuwave????All windows'Graphxx' windowsWindows not in layouts-- (empty) --Help notebooksin(x)/x graphincreasing noise graphboth graphssome data graphHelp notebook with data graphLayout 10Layout 11Layout 12Layout 13Layout 14Layout 15Layout 16Layout 17Layout 18Layout 19Layout 20Layout 21Layout 22Layout 23Layout 24Layout 25Layout 26Layout 27Layout 28Layout 29 2?LZp{ %.7@IR[6u~xK%g%layouts????Notebook1;Graph0;Graph1;Graph1;Graph0;Graph2;Graph2;Notebook1; &->>>>>>>>>>>>>>>>>>>>>TZx%%positions????169.5:42.5;175.5:53.75;391.5:193.25;585:149;175.5:148.25;216:163.25;659.25:41.75;169.5:42.5; $9D\\\\\\\\\\\\\\\\\\\\\  Layouts!mousedown_button"@currentlayoutnameHelp notebook with data graph * dTXET????A Notebook1Notebook1Notebook1This is an example experiment showing the functionality of the "windows layouts" panel and functions. I wrote them to make it easier (for me) to manage large sets of graph windows in Igor Pro. -------------- Here's how to use it: There's a "window layouts panel" on the left hand side that allows switching between different layout sets of windows (graphs, notebooks etc). Clicking on the buttons switches between these layout sets of windows. If closed, this panel can be recreated with the menu selection "WinLayouts->Window Layouts Panel". Try clicking on the buttons: You'll get an arrangement of windows that was previously created as a layout set under the buttons. All other windows that are not in that set will get hidden. Here are the possible actions: 1) Ctrl-click on a button: This is how to store the current visible set of windows, including their positions, as a layout set. You can later restore that set by clicking that button. You also get to give that set a name, which then becomes the button label. 2) Click on a button: This shows the selected layout set of windows. All other windows get hidden. 3) Shift-click on a button: This shows the selected layout set of windows, without hiding other windows. 4) Alt-click on a button: Adds the topmost window to the layout set of the clicked button. 5) Ctrl-Click then drag a button onto another button: Swaps the two buttons. In the popup, click "No" in the popup to swap the two setups, or "Cancel" to cancel. The action for "Yes" isn't implemented yet... Windows can be added to multiple sets (with possibly different positions). This is most easily done with alt- and shift-click actions. The title in the winlayouts panel shows which window set is currently active. The first three buttons are fixed and not changeable. They are hopefully self-explanatory. All others buttons are changeable on the fly and can have custom window layout sets associated with them. -------------- There'a a menu "WinLayouts" that does the same button actions with a menu instead. The menu also has a couple of additional nice functions for setting graph sizes and copying axis ranges - under the "Windows Control" submenu. It also has a function "Clone Window" that copies a graph so that I can modify a graph copy without touching the original. -------------- The procedures are far from bug free, but work pretty well on average. Feel free to use these procedures for your projects. If you like them, send me an email: mphertlein at gmail dot com. Thanks! dTXET????wNotebook0Notebook0Notebook0This notebook was not added to a windows layout set yet, so it only shows up when we show "Windows not in layouts"_// Platform=WindowsNT, IGORVersion=8.020, architecture=Intel, systemTextEncoding="Windows-1252", historyTextEncoding="UTF-8", procwinTextEncoding="UTF-8", recreationTextEncoding="UTF-8", build=32405 #pragma TextEncoding = "UTF-8" Silent 101 // use | as bitwise or -- not comment. NewPath/Z User_Procedures ":::WaveMetrics:Igor Pro 8 User Files:User Procedures:" SetDataFolder root:'test graphs': DefaultFont "Arial" MoveWindow/P 687,65,1386.75,520.25 MoveWindow/C 7.5,555.5,1403.25,682.25 String/G root:gWMSetNextTextFilesTextEncoding = "UTF-8" // Text encoding for Notebook0. Used by Igor Pro 7. OpenNotebook/N=Notebook0/W=(240.75,242.75,597,327.5)/J=58388/V=0 "Notebook0" Graph1() Graph0() winlayouts_panel() Graph2() String/G root:gWMSetNextTextFilesTextEncoding = "UTF-8" // Text encoding for Notebook1. Used by Igor Pro 7. OpenNotebook/N=Notebook1/W=(169.5,42.5,645.75,528.5)/J=55601 "Notebook1" KillStrings/Z root:gWMSetNextTextFilesTextEncoding Window Graph2() : Graph PauseUpdate; Silent 1 // building window... String fldrSav0= GetDataFolder(1) SetDataFolder root:'test graphs': Display /W=(659.25,41.75,950.25,228.5) data1 SetDataFolder fldrSav0 EndMacro Window winlayouts_panel() : Panel PauseUpdate; Silent 1 // building window... NewPanel /W=(8,53,208,706) as "Window_layouts" Button layoutbutton_0,pos={1.00,21.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLAll windows" Button layoutbutton_1,pos={1.00,42.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JL'Graphxx' windows" Button layoutbutton_2,pos={1.00,63.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLWindows not in layouts" Button layoutbutton_3,pos={1.00,84.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JL-- (empty) --" Button layoutbutton_3,userdata= "-- (empty) --" Button layoutbutton_4,pos={1.00,105.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLHelp notebook" Button layoutbutton_4,userdata= "Help notebook" Button layoutbutton_5,pos={1.00,126.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLsin(x)/x graph" Button layoutbutton_5,userdata= "sin(x)/x graph" Button layoutbutton_6,pos={1.00,147.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLincreasing noise graph" Button layoutbutton_6,userdata= "increasing noise graph" Button layoutbutton_7,pos={1.00,168.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLboth graphs" Button layoutbutton_7,userdata= "both graphs" Button layoutbutton_8,pos={1.00,189.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLsome data graph" Button layoutbutton_8,userdata= "some data graph" Button layoutbutton_9,pos={1.00,210.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLHelp notebook with data graph" Button layoutbutton_9,userdata= "Help notebook with data graph" Button layoutbutton_10,pos={1.00,231.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 10" Button layoutbutton_10,userdata= "Layout 10" Button layoutbutton_11,pos={1.00,252.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 11" Button layoutbutton_12,pos={1.00,273.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 12" Button layoutbutton_13,pos={1.00,294.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 13" Button layoutbutton_14,pos={1.00,315.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 14" Button layoutbutton_15,pos={1.00,336.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 15" Button layoutbutton_16,pos={1.00,357.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 16" Button layoutbutton_17,pos={1.00,378.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 17" Button layoutbutton_18,pos={1.00,399.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 18" Button layoutbutton_19,pos={1.00,420.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 19" Button layoutbutton_20,pos={1.00,441.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 20" Button layoutbutton_21,pos={1.00,462.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 21" Button layoutbutton_22,pos={1.00,483.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 22" Button layoutbutton_23,pos={1.00,504.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 23" Button layoutbutton_24,pos={1.00,525.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 24" Button layoutbutton_25,pos={1.00,546.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 25" Button layoutbutton_26,pos={1.00,567.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 26" Button layoutbutton_27,pos={1.00,588.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 27" Button layoutbutton_28,pos={1.00,609.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 28" Button layoutbutton_29,pos={1.00,630.00},size={200.00,20.00},proc=winlayouts_layoutsbuttonProc,title="\\JLLayout 29" TitleBox current_layout,pos={3.00,3.00},size={165.00,15.00},title="Help notebook with data graph" TitleBox current_layout,frame=0 EndMacro Window Graph0() : Graph PauseUpdate; Silent 1 // building window... String fldrSav0= GetDataFolder(1) SetDataFolder root:'test graphs': Display /W=(175.5,148.25,570,356)/HIDE=1 sinxgraph vs xrange1 SetDataFolder fldrSav0 EndMacro Window Graph1() : Graph PauseUpdate; Silent 1 // building window... String fldrSav0= GetDataFolder(1) SetDataFolder root:'test graphs': Display /W=(585,149,979.5,356.75)/HIDE=1 random1 vs xrange1 SetDataFolder fldrSav0 ModifyGraph rgb=(0,0,65535) EndMacro #pragma TextEncoding = "UTF-8" #pragma rtGlobals=3 // Use modern global access method and strict wave access. // Functions to make handling large sets of graphs easier // Written by Marc Hertlein (mphertlein at gmail dot com) // Hint: save all these procedures as a file (Menu File->Save Procedure Copy...) in the WaveMetrics // User folder (...:WaveMetrics:Igor Pro 8 User Folder:User Procedures), so they can be loaded easily later. print "window_layouts.ipf: v1.1" // --------------------------------------------------- // Constants Constant NUMLAYOUTS = 30 // number of window layouts - this is our default hardcoded value Constant FIXEDLAYOUTS = 3 // the top few layouts are not changeable - hardcoded to be: All windows, Graphxx windows, orphan windows Constant HIDEWINDOWS = 1 StrConstant PARAMDIR = "root:Parameters:" StrConstant wlp_subfolder = "WinLayouts:" StrConstant wlp_paramfolder = "root:Parameters:WinLayouts:" // winlayouts_panel sizing constants constant wlp_buttonoffset = 21, wlp_buttonspacing = 1, wlp_buttonwidth = 200 constant wlp_left = 1,wlp_top = 53 Constant wlp_buttonheight = 20 // --------------------------------------------------- Menu "WinLayouts", dynamic "Window Layouts panel", winlayouts_makepanel() "Clone Window", CloneWindow() SubMenu "Window Layouts" "Window Layouts panel", winlayouts_makepanel() "Show windows not in any layouts", showwindowsnotinlayouts2() SubMenu "Recall Layouts" layoutmenuitems(), showselectedlayout() End SubMenu "Show layout in addition" layoutmenuitems(), showselectedlayout(alsoshow=1) End SubMenu "Save to Layout" layoutmenuitems(), saveselectedlayout() End SubMenu "Add top graph|table window to Layout" layoutmenuitems(), saveselectedlayout(addcurrentwindow=1) End End SubMenu "Window Control" "\\M0Get/Store Window Parameters", getwindowsize() "Set Window Size to last stored", setwinsizetostored("window") "Set Graph Size to last stored", setwinsizetostored("graph") SubMenu "Set Axis range to last stored" "Bottom", setaxistostored("bottom") "Left", setaxistostored("left") "Right", setaxistostored("right") End "-" "Make standard size", setwindowsize(394.5, 208.5, units="pt") "Wide graph size", setgraphsize(521.25, 186.0) "Double graph size", DoubleGraphWindowSize() SubMenu "Other Window Sizes" "Match graph size to previous window", getwindowsize() "Set window to 10\"x3\"", setwindowsize(10, 3, units="in") "Set window to 7.5\"x3\"", setwindowsize(7.5, 3, units="in") "Set window to 5\"x3\"", setwindowsize(5, 3, units="in") End "Fix current graph aspect ratio", FixCurrentGraphAspect() "Make graph resizable again", DefaultGraphResize() End "-" "Make plot traces standard colors", normalize_trace_colors() "-" End // ------------------------------------------------------------------------ Function CloneWindow([win,replace,with,casesense,freeze]) // Clones a given graph // Function from Igor forum, modified String win // Name of the window to clone. String replace,with // Replace some string in the windows recreation macro with another string. Variable casesense // case sensitive replacement Variable freeze // Make a frozen clone (basically just a picture). if(ParamIsDefault(replace) || ParamIsDefault(with)) // these are string lists, so multiple strings can be replaced replace=""; with="" endif if(ParamIsDefault(win)) win=WinName(0,1) // topmost graph window endif if (ParamIsDefault(casesense)) casesense=1 // default is case sensitive endif String win_rec=WinRecreation(win,0) // returns a string containing the window recreation macro Variable i for(i=0;i maxfontwidth) ? fssw : maxfontwidth // find the maximum pixel width of all strings endfor buttonwidth = max(maxfontwidth+10, 200) // make button width a bit wider than maximum string pixel width. Minimum 100 pixels. for (wli=0; wli= 3) && (mouseup_button < NUMLAYOUTS) // on or between buttons? mouseup_ison_button = mouseup_ison_button && (mouseh > wlp_left) && (mouseh < wlp_left+wlp_buttonwidth) mouseup_buttonctrlname = "layoutbutton_" + num2istr(mouseup_button) // this was hard coded in winlayouts_makepanel() mousedown_button = get_param(wlp_subfolder+"mousedown_button", mouseup_button) // to be safe, default is same as mouseup button mousedown_buttonctrlname = buttoncontrol_name // on mouseup, we get name of control where drag started, i.e. mousedown control // print "debug: mouseup button #", mouseup_button, "onbutton=", mouseup_ison_button if (mouseup_ison_button) msg = layoutsmenuwave[mousedown_button]+" <==> "+layoutsmenuwave[mouseup_button] +"\r\r" msg = msg + "Yes: Insert first layout above second (not working yet)\r" msg = msg + "No: Swap layouts\r" msg = msg + "Cancel: Don't do anything" DoAlert/T="Move_Window_Layouts" 2, msg if (V_flag==1) // Yes clicked print "Not yet implemented" elseif (V_flag==2) // No clicked: swap two layouts templayout = layouts[mouseup_button] templayoutname = layoutsmenuwave[mouseup_button] templayoutpos = layoutspos[mouseup_button] layouts[mouseup_button] = layouts[mousedown_button] layoutsmenuwave[mouseup_button] = layoutsmenuwave[mousedown_button] layoutspos[mouseup_button] = layoutspos[mousedown_button] layouts[mousedown_button] = templayout layoutsmenuwave[mousedown_button] = templayoutname layoutspos[mousedown_button] = templayoutpos Button $mouseup_buttonctrlname,title="\JL"+layoutsmenuwave[mouseup_button],win=$win_name // rename mouseup button Button $mouseup_buttonctrlname,userdata=layoutsmenuwave[mouseup_button] Button $mousedown_buttonctrlname,title="\JL"+layoutsmenuwave[mousedown_button],win=$win_name // rename mousedown button Button $mousedown_buttonctrlname,userdata=layoutsmenuwave[mousedown_button] endif // V_flag endif // mouseup_ison_button endif // ctrl key break case -1: // control being killed break // Button cases are: -1: control being killed, 1: mouse down, 2: mouse up, 3: mouse up outside control, // 4: mouse moved, 5: mouse enter, 6: mouse leave, 7: mouse dragged while outside the control endswitch return 0 end // ------------------------------------------------------------------------ function/T savelayout2(tolayout [addcurrentwindow]) // save current visible windows to layout array so windows can be restored later string tolayout variable addcurrentwindow // flag: if 1, only add currently selected window to existing layout variable i,j string win, vislist, shownlist="", poslist="" // go to the Parameters folder String savDF= GetDataFolder(1) // Save current DF for restore. MakeOrSetDataFolder(wlp_paramfolder) init_layouts() // initialize layouts parameters if necessary wave/T layouts, positions wave layoutsmenuwave string layoutsmenustr = TextWave2List(layoutsmenuwave) // make an array of all non-minimized visible windows and and an array of their positions vislist = WinList("*", ";","WIN:23,VISIBLE:1") // List of all graph & table visible (non-hidden) windows (may be minimized) for(i=0; i= FIXEDLAYOUTS && layoutnum < numpnts(layouts)) // don't save in the first few fixed (default) menus if (addcurrentwindow) // if we chose option "addcurrentwindow" then only the top window will be added to the window list DoAlert 1, "Save window \"" + WinName(0,23) + "\" to layout \"" + tolayout + "\"?" if (V_flag == 1) string wname = WinName(0,23,1) // name of top visible non-hidden graph or table window layouts[layoutnum] += wname + ";" // add currently selected window to current layout GetWindow $wname wsize // get window dimensions in V_left, V_right, V_top, and V_bottom positions[layoutnum] += num2str(V_left) + ":" + num2str(V_top) + ";" endif else // add all windows we found in shownlist in loop above string currentlayoutname = get_strparam(wlp_subfolder+"currentlayoutname","empty") Prompt newname, "Current layout name is: "+currentlayoutname+"\nEnter new layout Name:" DoPrompt "Enter Layout name to save (or cancel to not save layout)", newname do variable foundat = WhichListItem(newname, layoutsmenustr) if ( foundat == layoutnum || foundat == -1 || V_flag == 1) // if layouts name does not already exist on earlier button or cancel clicked break endif Prompt newname, "Layout name already exists - please choose a different name.\nCurrent layout name is: "+currentlayoutname+"\nEnter new layout Name:" DoPrompt "Enter Layout name to save (or cancel to not save layout)", newname while(1) if (V_flag == 0) // Continue clicked. layoutsmenustr = RemoveListItem(layoutnum, layoutsmenustr) layoutsmenustr = AddListItem(newname, layoutsmenustr, ";", layoutnum) layouts[layoutnum] = shownlist // add all shown windows to current layout positions[layoutnum] = poslist save_strparam(wlp_subfolder+"currentlayoutname", newname) // save new current layout name in parameters // note: if V_flag == 1 (cancel clicked), currentlayoutname does not get updated endif endif List2TextWave(layoutsmenustr, wname="layoutsmenuwave") // for easier viewing & debugging endif SetDataFolder savDF // Restore current DF. return newname end // ------------------------------------------------------------------------ function showlayout2(layouttoshow [alsoshow, hidewindows]) // minimize all graph/table windows, and restore the ones in the selected showlist variable layouttoshow, alsoshow, hidewindows alsoshow = (ParamIsDefault(alsoshow)) ? 0 : alsoshow hidewindows = (ParamIsDefault(hidewindows)) ? 0 : hidewindows // go to the Parameters folder String savDF= GetDataFolder(1) // Save current DF for restore. MakeOrSetDataFolder(wlp_paramfolder) init_layouts() // initialize layouts parameters if necessary wave/T/Z layouts, positions variable i,wnumber string wname, vislist vislist = WinList("*", ";","WIN:23") // List of all graph & table visible (non-hidden) windows (may be minimized) if (layouttoshow==2) // layout button number 2 is special: show orphan windows showwindowsnotinlayouts2(alsoshow=alsoshow) else // minimize/restore windows for(i=0; i=0 so window will show elseif (layouttoshow==1) // special layout one: all windows with name "Graph..." wnumber = (StringMatch(wname, "Graph*")) ? 0 : -1 // >=0 means show window, -1 means don't show else // regular layout wnumber = WhichListItem(wname, layouts[layouttoshow]) // get window number so we can recall correct window position endif if (wnumber>=0) // is this window name in the current layout name array? DoWindow/HIDE=0 $wname MoveWindow/W=$wname 1,1,1,1 // if so, restore window if (WaveExists(positions)) // only move window to stored position if positions array exists (could be missing for old experiments) string posstring = StringFromList(wnumber, positions[layouttoshow]) if (cmpstr(posstring,"")!=0) // only move window if there's an entry stored (could be empty for old experiments) variable wleft = str2num(StringFromList(0, posstring,":")), wtop = str2num(StringFromList(1, posstring,":")) GetWindow $wname wsize MoveWindow/W=$wname wleft, wtop, wleft+(V_right-V_left), wtop+(V_bottom-V_top) endif endif else // window name is not in layout. Minimize window, unless we have 'alsoshow' active if (alsoshow==0) if (hidewindows!=0) DoWindow/HIDE=1 $wname else MoveWindow/W=$wname 0,0,0,0 // minimize window endif endif endif endfor endif wave layoutsmenuwave string layoutsmenustr = TextWave2List(layoutsmenuwave) save_strparam(wlp_subfolder+"currentlayoutname", StringFromList(layouttoshow, layoutsmenustr)) SetDataFolder savDF // Restore current DF. end // ------------------------------------------------------------------------ function showwindowsnotinlayouts2([variable alsoshow]) // minimize all graph/table windows, and restore the ones in the selected showlist variable i,j string winn, winl, winsinlayouts="" // go to the Parameters folder String savDF= GetDataFolder(1) // Save current DF for restore. MakeOrSetDataFolder(wlp_paramfolder) init_layouts() // initialize layouts parameters if necessary wave/T layouts, positions winl = WinList("*", ";","WIN:23") // All graph and table windows (including minimized and hidden) // make a list of all windows that are captured in layouts for(i=FIXEDLAYOUTS; i=0) // if this window name is in a layout, possibly hide window if (alsoshow==0) // if we're not "showing layout in addition", hide or minimize the window // but if we are, don't hide this currently showing window if (HIDEWINDOWS==1) DoWindow/HIDE=1 $winn else MoveWindow/W=$winn 0,0,0,0 // minimize window endif endif else // if window is not in any layout, restore it DoWindow/HIDE=0 $winn MoveWindow/W=$winn 1,1,1,1 // restore window endif endfor TitleBox current_layout,title="Windows not in layouts",win=winlayouts_panel SetDataFolder savDF // Restore current DF. end // ======================================================================== // Utility functions for setting graph and window sizes // ======================================================================== // ------------------------------------------------------------------------ function FixCurrentGraphAspect() GetWindow kwTopWin, psize ModifyGraph width={Aspect,(V_right-V_left)/(V_bottom-V_top)} End // ------------------------------------------------------------------------ function DefaultGraphResize() ModifyGraph width=0 End // ------------------------------------------------------------------------ function DoubleGraphWindowSize() GetWindow kwTopWin, psize ModifyGraph width=(V_right-V_left)*2 ModifyGraph height=(V_bottom-V_top)*2 End // ------------------------------------------------------------------------ function getwindowsize([string wname]) DoUpdate // if (ParamIsDefault(wname)) // wname = WinName(0,1) // top graph // endif // Print window size (in points, not pixels) and graph size inside window // Get size of window itself GetWindow kwTopWin, wsize // window size variable wleft=V_left, wright=V_right, wtop=V_top, wbottom=V_bottom variable wHsize = wright-wleft, wVsize = wbottom-wtop // Get size of plot region GetWindow kwTopWin, psize // plot size variable pleft=V_left, pright=V_right, ptop=V_top, pbottom=V_bottom variable pHsize = pright-pleft, pVsize = pbottom-ptop // save "currently recorded" window sizes save_param("Graphsize:sto_wleft", wleft) save_param("Graphsize:sto_wright", wright) save_param("Graphsize:sto_wtop", wtop) save_param("Graphsize:sto_wbottom", wbottom) save_param("Graphsize:sto_wHsize", wHsize) save_param("Graphsize:sto_wVsize", wVsize) save_param("Graphsize:sto_pleft", pleft) save_param("Graphsize:sto_pright", pright) save_param("Graphsize:sto_ptop", ptop) save_param("Graphsize:sto_pbottom", pbottom) save_param("Graphsize:sto_pHsize", pHsize) save_param("Graphsize:sto_pVsize", pVsize) print "Window: H=", wHsize, "V=",wVsize, "Graph: H=", pHsize, "V=", pVsize print "Use setwindowsize(newhsize, newvsize) or setgraphsize(newhsize, newvsize) to resize window" printf "Template: setwindowsize(%.3f,%.3f) setgraphsize(%.3f,%.3f)\r", wHsize, wVsize, pHsize, pVsize string axes = AxisList("") variable i for (i=0; i0) SetDataFolder :: folderdepth -= 1 else print "Error: can't go up from root directory" return 1 endif else // normal case: set/create directory NewDataFolder/O/S $dirstr folderdepth += 1 endif endif endfor if (stayincurrentfolder==1) SetDataFolder(savDF) endif return 0 end // ------------------------------------------------------------------------ function/s TextWave2List(wave/Z w [string delimiter, string defaultstr]) // Given a text wave reference, returns a string-list formatted version of the wave. // Useful for converting an array of wave names to a string of wave names // e.g. make w={"w1","w2","w3"}; print textwave2list(w) returns "w1;w2;w3" // defaultstr - string to return if wave w is empty or nonexistent if (ParamIsDefault(defaultstr)) defaultstr = "" endif if (!WaveExists(w) || numpnts(w)==0) return defaultstr endif if (ParamIsDefault(delimiter)) delimiter = ";" endif string str wfprintf str, "%s"+delimiter, w return str end // ------------------------------------------------------------------------ function/wave List2TextWave(list [wname, listSepStr, wfolder]) // possibly obsolete?: there is the "ListToTextWave" function but not as convenient // // Given a string list, returns a (free) wave reference to a text wave containing the list items. // If wname is given, creates a text wave of given name containing the list items, in the current dir. // Useful for converting a string of wave names to an array of wave names // // Use it in a function like this: // wave/T/FREE wOut = List2TextWave(waveliststring) // to make a free wave, or: // List2TextWave(waveliststring, wname=mywname, wfolder="root:myfolder") // to create a real wave in the given directory string list, wname, listSepStr, wfolder if (ParamIsDefault(listSepStr)) listSepStr = ";" endif variable listlen = ItemsInList(list, listSepStr) if (ParamIsDefault(wfolder)) wfolder = "" endif if (ParamIsDefault(wname)) Make/O/T/FREE/N=(listlen) w // make a free wave else if (cmpstr(wfolder[strlen(wfolder)-1], ":")!=0) wfolder = wfolder + ":" endif Make/O/T/N=(listlen) $(wfolder+wname)/WAVE=w // make a real wave in the current directory endif variable i for (i=0; i1) // if we're specifying a subfolder param_dir = ParseFilePath(1, param_name, ":", 1, 0) param_name = ParseFilePath(0, param_name, ":", 1, 0) MakeOrSetDataFolder(PARAMDIR+param_dir) endif if( !Exists(param_name) ) Variable/G $param_name endif nvar param=$param_name param = param_value SetDataFolder savDF // Restore current DF. end // ------------------------------------------------------------------------ function save_strparam(string param_name, string param_value) // save_strparam: Save a string parameter // Example: save_strparam("myfolder:myparamname", "foo") string param_dir String savDF= GetDataFolder(1) // Save current DF for restore. if (ItemsInList(param_name, ":")>1) // if we're specifying a subfolder param_dir = ParseFilePath(1, param_name, ":", 1, 0) param_name = ParseFilePath(0, param_name, ":", 1, 0) MakeOrSetDataFolder(PARAMDIR+param_dir) endif if( !Exists(param_name) ) String/G $param_name endif svar param=$param_name param = param_value SetDataFolder savDF // Restore current DF. end // ------------------------------------------------------------------------ function get_param(param_name, param_default [quick]) // get_param: Recall a number parameter, saving and returning a default value if it doesn't exist yet. // If quick==1, the variable and subfolder must exist for the function to not return an error. // This avoids the very slow directory functions here that take a lot of time. // However, the unavoidable NVAR statement is still slow, taking most of the time. // For profiling, use #include (see RunFuncWithProfiling(analyze_spectra,maxPct=99)) // Example: variable fixy0 = get_param("fixy0",0) // also creates and sets fixy0 to zero if it doesn't exist yet string param_name variable param_default variable quick if (ParamIsDefault(quick) || quick!=1) string param_dir String savDF= GetDataFolder(1) // Save current DF for restore. if (ItemsInList(param_name, ":")>1) // if we're specifying a subfolder param_dir = ParseFilePath(1, param_name, ":", 1, 0) param_name = ParseFilePath(0, param_name, ":", 1, 0) MakeOrSetDataFolder(PARAMDIR+param_dir) endif if( !Exists(param_name) ) Variable/G $param_name = param_default endif nvar param=$param_name SetDataFolder savDF // Restore current DF. else nvar param = $(PARAMDIR+param_name) // this is still somewhat slow endif return param end // ------------------------------------------------------------------------ function/S get_strparam(string param_name, string param_default) // get_strparam: Recall a string parameter, saving and returning a default value if it doesn't exist yet. // Example: string lastusedpathstr = get_strparam("lastusedpathstr", "C:") string param_dir String savDF= GetDataFolder(1) // Save current DF for restore. if (ItemsInList(param_name, ":")>1) // if we're specifying a subfolder param_dir = ParseFilePath(1, param_name, ":", 1, 0) param_name = ParseFilePath(0, param_name, ":", 1, 0) MakeOrSetDataFolder(PARAMDIR+param_dir) endif if( !Exists(param_name) ) String/G $param_name = param_default endif svar param=$param_name SetDataFolder savDF // Restore current DF. return param end // ------------------------------------------------------------------------ function param_exists(param_name) // param_exists: return a number >0 if parameter exists, else 0 string param_name string param = PARAMDIR + param_name return (Exists(param)) end