ctc/build/0000755000175100017510000000000014614332142013442 5ustar00biocbuildbiocbuildctc/build/vignette.rds0000644000175100017510000000031114614332142015774 0ustar00biocbuildbiocbuildb```b`a@&0`b fd`a%zAyhžy%E)%y % @et Z) H bt]R RR@g;<E T [fN*ސ89 d Bw(,/׃ @?{49'ݣ\)%ziE@ wZ ctc/Changes0000644000175100017510000000205114614230663013641 0ustar00biocbuildbiocbuild18/12/2006 * add references to man pages. 09/11/2005 1.5.1 * new function hclust2treeview 12/07/2005 * a demo and a vignette file 17/06/2005 * example ctc.php for a web application 27/05/2005 * new function read.eisen 08/12/2004: 1.2.8 * minor changes on doc. 16/10/2003: 1.2.5 * Bug fixed for R CMD check. (Examples using Xcluster program cannot be executed). 05/09/2003: 1.2.4 * New release only for Windows. (Just 1.2.3 correctly compiled). 22/07/2003: 1.2.3 * bug fixed with option dec=',' for r2gtr, r2cdt, r2cluster * option colname="ACC" with r2cluster 06/02/2003: 1.2.2 * Major bug fixed on function r2cdt * 2 more parameters on function r2cdt * Bug fixed on function r2gtr 15/01/2003: 1.2.1 * Bug fixed on functions r2gtr and r2cluster * Add links on help files. 22/11/2002: 1.2 * 3 new functions: r2gtr, r2atr, r2cdt * Option dec='.' for functions r2cluster, xcluster2r. 12/11/2002: 1.1-1 * Option description=Boolean in r2xcluster and r2cluster * Fixed some minor bugs (_ remplaced by <- for R 1.6) ctc/demo/0000755000175100017510000000000014614230663013274 5ustar00biocbuildbiocbuildctc/demo/00Index0000644000175100017510000000002414614230663014422 0ustar00biocbuildbiocbuildctc Ctc demo file ctc/demo/ctc.R0000755000175100017510000000265514614230663014203 0ustar00biocbuildbiocbuildcat ("\n\n C T C \n D E M O \n\n") cat("\n------ Standard clustering with R (not ctc): -------\n") data(USArrests) h = hclust(dist(USArrests)) plot(h) readline("Next") cat("\n------ Get the ``heatmap'': -------\n") heatmap(as.matrix(USArrests)) readline("Next") cat("\n------ BUILDING HIERARCHICAL CLUSTERING WITH ANOTHER SOFTWARE -------\n") cat("\n------ Write data table to Xcluster file format -------\n") r2xcluster(USArrests,file='USArrests_xcluster.txt') readline("Next") cat("\n------ Write data table to cluster file format -------\n") r2cluster(USArrests,file='USArrests_cluster.txt') readline("Next") cat("\n------ Hierarchical clustering (need Xcluster tool by Gavin Sherlock) -------\ntry:\n\nh.xcl=xcluster(USArrests)\nplot(h.xcl) ") readline("Next") hr = hclust(dist(USArrests)) hc = hclust(dist(t(USArrests))) cat("\n------ USING OTHER VISUALIZATION SOFTWARES -------\n") cat("\n------ Export hclust objects to Newick format files -------\n") write(hc2Newick(hr),file='hclust.newick') readline("Next") cat("\n------ Export hclust objects to Freeview or Treeview visualization softwares -------\n") r2atr(hc,file="cluster.atr") r2gtr(hr,file="cluster.gtr") r2cdt(hr,hc,USArrests ,file="cluster.cdt") readline("Next") cat("\n------ Clustering and Export hclust objects to Freeview or Treeview visualization softwares -------\n") hclust2treeview(USArrests,file="cluster.cdt") ctc/DESCRIPTION0000644000175100017510000000132114614332142014046 0ustar00biocbuildbiocbuildPackage: ctc Version: 1.78.0 Date: 2005-11-16 Depends: amap Title: Cluster and Tree Conversion. Author: Antoine Lucas , Laurent Gautier biocViews: Microarray, Clustering, Classification, DataImport, Visualization Maintainer: Antoine Lucas Description: Tools for export and import classification trees and clusters to other programs License: GPL-2 URL: http://antoinelucas.free.fr/ctc git_url: https://git.bioconductor.org/packages/ctc git_branch: RELEASE_3_19 git_last_commit: ba92234 git_last_commit_date: 2024-04-30 Repository: Bioconductor 3.19 Date/Publication: 2024-04-30 NeedsCompilation: no Packaged: 2024-05-01 03:17:54 UTC; biocbuild ctc/exec/0000755000175100017510000000000014614230663013274 5ustar00biocbuildbiocbuildctc/exec/ctc.php0000644000175100017510000001057614614230663014567 0ustar00biocbuildbiocbuild
Ctc Demo Web application V0-1

This demo makes hierarchical clustering on your data

Upload your data (text-tabulated file)

File Description:
A first Column
A first line

$MAX_FILE) exit("File size: $taillefichier; max allowed: $MAX_FILE"); } /* ================================== */ /* We write R code in file $ID/prog.R */ /* ================================== */ $fp=fopen("$ID/prog.R",'w'); fwrite($fp,"library(ctc)\n"); /* Read Data */ fwrite($fp,"data <- read.delim('$ID/data.txt',header=$HEADER,row.names=$ROWNAMES) \n" ); fwrite($fp,"data \n"); /* Hierarchical clustering */ fwrite($fp,"hr <- hclust(dist(data)) \n"); fwrite($fp,"hc <- hclust(dist(t(data))) \n"); fwrite($fp,"dr <- as.dendrogram(hr) \n"); fwrite($fp,"dc <- as.dendrogram(hc) \n"); /* A pdf file */ fwrite($fp,"pdf(file='$ID/Rplots.pdf') \n"); fwrite($fp,"heatmap(as.matrix(data),Colv=dc,Rowv=dr) \n"); fwrite($fp,"dev.off() \n"); /* Some png images */ fwrite($fp,"bitmap(file='$ID/heatmap.png') \n"); fwrite($fp,"heatmap(as.matrix(data),Colv=dc,Rowv=dr) \n"); fwrite($fp,"dev.off() \n"); fwrite($fp,"r2atr(hc,file='$ID/cluster.atr') \n"); fwrite($fp,"r2gtr(hr,file='$ID/cluster.gtr') \n"); fwrite($fp,"r2cdt(hr,hc,data ,file='$ID/cluster.cdt') \n"); fclose($fp); /* ===================== */ /* Send command (R batch)*/ /* ===================== */ system("$R_BIN --no-save < $ID/prog.R > $ID/prog.R.out 2> $ID/prog.R.warnings"); /* ===================================== */ /* We create html page including results */ /* ===================================== */ echo "

Ctc Demo results

"; echo "A pdf file

"; echo "3 files for Freeview"; echo " or Treeview: "; echo "cdt "; echo "atr "; echo "gtr "; echo "

"; echo "

"; /* Signature */ echo "

This results made by ctc package. Code use: prog.R, Out: prog.R.out, Warnings: prog.R.warnings."; } ?>

ctc/inst/0000755000175100017510000000000014614332141013317 5ustar00biocbuildbiocbuildctc/inst/doc/0000755000175100017510000000000014614332141014064 5ustar00biocbuildbiocbuildctc/inst/doc/ctc.pdf0000644000175100017510000031017714614332141015341 0ustar00biocbuildbiocbuild%PDF-1.5 % 4 0 obj << /Length 1317 /Filter /FlateDecode >> stream xڕWKoFW%Wp@Q iCRvC{YٔE|3zq8{mUsitudR+ui,sҔ:\Ei'V[665No0#ed23Qb Y[8&SlkXe5ndY+miYʪgɅQIDI2Rm*3%R/mlj,JLcPQ)dp$ACIiR&FMSƉseN ˟7S&/ޏĔ7)gB]|OZ#^vlpbC5 ˪eݍS=K6ӆvNT~~=-T|*2NRkiᖇރ٩7͸G55H̑ޑ1N<}',(k1By&VcHY=̴ƹ3#px) zCELlZ'ML! Բz]RZL_"SJI2.,eS O=k߉ 2cf]y$aNhӱ~0VTΉwL"-|#c|LE*E_Mj3$˳˹O*U!w|XfgFw⧑?NT>0+G}V،8@?|Tb2eeB@C‰?u{c„fG1 Q'Չ\ݾ ez6S&fr䯮Z_>vX gv>uyG Dp Aj&o7S Wo #xF/GoJ^vUޥ,[/ETmtc.R ;^^Ճi(~HM XL󳳫zwAz{+Gj R?dڝ=U˯g3 63'ssIglpƿC^_Zy~*zB2G<ݾܡB~C_Sw굒 lE> e$ endstream endobj 21 0 obj << /Length 796 /Filter /FlateDecode >> stream xV[o0~ϯm 7nnֽmMJ49 iРdYcldڗ %|>|2_IPЙ,B91u""Bg2wo=?L*XT| %>2T?b2"hg3+FF(daf=Ԭ㫂8gx!;5%GPˉ%N  @:ý3,B2 gO҆tc7:8,^B OLkƸ{#aq;x3iQB('&"n0i)Ϧ歖Ll&HiY,<=iWz8;H (HH?9NʊEh T(uՀF?+f:Q7TmB3t '7g]V@&L`PBSKJ;}R5Jq{ 2oYz*߶E4*QؖH!:V vJ|,!Yn 9p6X -x,4'yu:o.( I=|_+-!U[{DVuj# |fuگ|<ᘬ endstream endobj 1 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpXZkkWr/Rbuild2b7c2955c67ae0/ctc/vignettes/ctc-002.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 25 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 26 0 R>> /ExtGState << >>/ColorSpace << /sRGB 27 0 R >>>> /Length 3186 /Filter /FlateDecode >> stream x\˖ Wp9PHsiy؎ؚ /R[t<=G "TrNSmiv?S?Tߌԯ; S;~Ȑoi=ēY$f9f"95[i .P [ֺ1blZCbp@" h aWC۹Z5|Y'UCr$=oыKPbQ]Gȉ|` r|3D_/xL q>v ۧjHhHHXHBDL3"]OAr|=D/G$U36Gw.K,c,Y8=e|mX8z1j rR棅Soܘ ga'^k gp'd!reLX4=+DzaP6^4B9lV(jg2iN&\(#-TjniVs/HK5B!@Ke4id֓ TzBPa].jlE6BMtFZ mJhF\?#-D+h⋅5B MtFZՕ%zkT.ՙZI*n[Su?iʂg4fnl`* gOcE^U6BlV-WJU6BfGjoU6BMtFZO"a5>i?Co\c|L?*X7n[}s6亜(U.ׇx>nOш!{uy_\bBؘ[?aO{56|O03lA|/$ h%oBK_ݪc{z~fK}?_[ !&w\ʈaw]Y{_Vk3WX/o+rRJikƱ0p} t<>o?/owr# \xv`70/_W/q7/}ϪUovZ} i46}46ӬN A?(jG>w]֒cMߺC6ztuP8oV4#g&}8 8 Y|4>4it7ѹ k8= 7kzA9 8H#5G8%={1\2[l`Eh = :ag@{I/GS$"E;4=LGwHi$zpW4ۼS[i=@dni ki[1P,LSRGr+I|ʁ:&HCAfD"IrOZ&H,S@\0ZsE;j&@|n[Y#~bf3O7LHCAD,`^e'ɢHP,,&@$[VSLkD` p~x6ot#0q gRA@ˆ}%X:iEE;&`6uwAT{&1 J <>KCf?ӧ冔K' : FfU,,Ol WIGfD[#`ţ;.@$P,,Ől\MB?r"BA-=AP$ [@.Ha%XND K!0$ H `["5y= "Ha)XMD*`V:*((XX׹RGb"6 ꢀ[#h.0y |EL d LNŝd XXRIbHꤋeW,f`( >w΁ <>cDR_RGph.`HcdV9L$ CLN, I |xx'-0$ eHa-Hf$ DM <aZJA-XLoa`f3M1f'rrt$X:9`.6>XLK'u2 ⛜ (:.@$P,,0)-m#9+I€ f!Yй1"ɇ`a?`D,`IrIւe n"YmD~q`cZ&`HEZ-R1G"Axްxl.*Y:hup8$f칖V$jCIbDI CY]N|^=wAYB|O::fZaw1+ bŭhplZ/B{?B& endstream endobj 29 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 32 0 obj << /Length 1417 /Filter /FlateDecode >> stream xڍWn7}W~ %  n4EQ($na/ :ɋDù9CYX^ELE<[m΄ y˳ďj}\z !dnz X;}ُ*=lCu/@iƳXh?[iJҀii=e#o\{l(@'SwPxFbUI xq-4\^ԭ"~xIŸo;gB5d)ԝrTPP4`F&m7ˡU{ߌMX`WVUޙ_Б?Z/ ,:~mg0uI7אxvAcX )|ΛN* wz_^ LAE) nw< "rG%a1Z& pߴ]~V'1OB AcD 3~)+*GJE(Hc1țq³$i$f!ÐG 6ۡOh?4)Xf$qHL$)riLJ]![tBi%V^A@:4u@uQ5䐡.ph,rL r]ܶ;JdFgV8q \בpOlqa&p~K eTE2-OHL CVS^e$/,.dJZW=m-f{s{qWĒՎbf?3\JSeăh!'۪'(deE\#΢rpe\k+y*tj~wD<,H)#)9*zS|alv˭nan6pHx͑GXl5d6IZfB؀RV^I-Y/#+{<ڐ;(^V|ȖF~8ݨ±L¹~aXmi?rśJ}տNQ|q|ږ|ӕ|lErsxj!Tufhe[V;[]*-o)mOqd-coAfp8$m٠h?J(wX{0Ti{hȄZieWF5,($cY7&XX6n5*ԘNgmP$߇W1qJȤEkm}?ڡ+-tĄo3 0s7ŻՋ( endstream endobj 34 0 obj << /Length 275 /Filter /FlateDecode >> stream xڅJ0顐}Ͳ º=ɃxR(y{(3itG&dfd^QAeE-Wt_g5G ZQmj_*Kz}y{Px[Uo @<9uf8g:&hFO^|IN{?,''Oi%_M ?KӴ L z@;u32<ی+٦ JfW-ƽ<%5ߒ uP:N}m endstream endobj 35 0 obj << /Length 208 /Filter /FlateDecode >> stream xб 0[VZ N⤎(}JK@ȗ.#fREP3sҠraJ !!Lv(]pgt.8÷ xY4}k]FhaZ7C|ݩxS)މZX* Sd endstream endobj 36 0 obj << /Length 208 /Filter /FlateDecode >> stream xe;0 T H*0V*  & ۣ(=BG`O1$N;f22LКhxLSg(J[4NA+]'z)9RLPQjN-rĄTD#ɉ~T?BfrOMPըs`;v)G/O7r$i%O#}jI$֣w{?(a/5sR endstream endobj 37 0 obj << /Length 253 /Filter /FlateDecode >> stream xUAJ1[4]@3SH[A+J] UQzY(/(E !Y}:rO,[3VlΆWZ2' %פWPsHr1Z p8#l"kdGvR !P)J,.RAE&M#GטbToY=$-C0dLm.FÒbj~)kB endstream endobj 38 0 obj << /Length 212 /Filter /FlateDecode >> stream xM?@oH1\@ȻNbjະ)+P $`Nog7)SdgFA/}q7`o:Ph>ggiLjaDGIſ|:w/Hxx@@6/cGP!R^!'TH3=,њR;gXK%Hs$h%Ƣug+> stream x]ο POG@] b`955DS5f&>$)5}6+X8!C %jPfJ`Rjן旭Zz FB!‚_C4KhEoM> endstream endobj 40 0 obj << /Length 237 /Filter /FlateDecode >> stream xUαN@PL#0/ H3D+ cH 7Y0@IAXcClbv?;92Id#GdO!g^&^xWUc奼=]Iz/$w\G ~=BO \N nkm``\MdG :5">fg|w3ތT8ڦLH[e"48 6I|k endstream endobj 41 0 obj << /Length 193 /Filter /FlateDecode >> stream xm=@!$ S $&ZY+hfx=%-l,f&LC9QQф)LLs IK^nGՌ9owT p< AZ-@:hM,љTY(P zG߁ؐIavU.R8Uk Z B endstream endobj 42 0 obj << /Length 216 /Filter /FlateDecode >> stream xڕб @ !? 4?Z`A'qRGEC~Z?O[&\A.rIf>n,؃ҵṊw0 A.vAN(2pڂFh pi0@!D-%\"ōr"R\uTP\(z>Saا#|sfCuL1>|S$^Ik,b&rs\ ;] endstream endobj 43 0 obj << /Length 236 /Filter /FlateDecode >> stream xEοJ1YL2/ٸ{y[Z]!Vz ({h_$",I曯^SE 5=:|zӊ%+mmvssAUn @E2 Ȩ1JAE8Ab„rg|FÄ d]2Gd3Kꖂ''Bǥx`:!s\I`~zNx /[_TdW endstream endobj 44 0 obj << /Length 187 /Filter /FlateDecode >> stream xڅ1 @R,L^@ܹn),J-m5M)Sq793?<~Qq̇.6Ҍ􆣀žIgK]Gj!oCv^a JH˸;%BX[O ԎgU[kM4FF~xϕӁBT hњ~; 9 endstream endobj 45 0 obj << /Length 248 /Filter /FlateDecode >> stream xUαJ@YXrM.A\8O0Xe _|XFlR,3m/ʽe4ݜg4/6G,r|{eSVgrvy~L9]]c"-"46"n"ja g\ô 꽅}abZvLRȴWWqz=A腁=AFZp2Ǥ>}m1fxԑ0S!9TxR^ endstream endobj 46 0 obj << /Length 172 /Filter /FlateDecode >> stream x}1 @bم #BBRPQH!(9eٵ(E!/I )txAM )e8E!Q,LF.vQīI m%;L>?9:^j7N=j AvG ) E endstream endobj 47 0 obj << /Length 266 /Filter /FlateDecode >> stream xUAJ0?dQ^`0v:B[La.]WRU'GQ2xɢt|MUG^dy*W',WOxقt,ErHh,Z}> stream xUϱjP? 9/Pc0$Bj;u(ڎV2HQ#dt`]8x)?DxgDGNx/4/)|8Yb o7/ K7Sd蓺@7=bTEVӊUш?I4M;@AmQSuj#S}7~9`^B 詤tU endstream endobj 49 0 obj << /Length 190 /Filter /FlateDecode >> stream x=ο POG@]A(AAM T EmB/fo#AB߁;ˁ.=t谿6;)#ɭI;~=7~.ɄO.;gJ +92 = Y5"$*GE1_kMAێfb)n! a!"t5}6)G endstream endobj 50 0 obj << /Length 238 /Filter /FlateDecode >> stream x]ϿN0/!Қ?"R)ĀZF@j?y=D $|jr=.YMxzH]lo-_iVSȪNTBᆥ:'zzLfU/2k`&[~6bT~4Ѓ{Νh{FRDJ*+oFt:^Cf\8،&и%FӶt[ӂ~Jl endstream endobj 51 0 obj << /Length 182 /Filter /FlateDecode >> stream xU1 0_:`/PMCv(j3:9: U:zI!78QL#NN"# ÈDkg%- lcdrE,_ω#+h(  0RGC:k3dV4P` {@1gy9xΡoi|KZCf1.$n > stream x=ͱj`27h 6] fԡtҎ*:H|(V;QX\Fje%E)MT̂k1RvO1j}H9S B47Z4^7^;r<ȇ0)z!Be,; e__=FʼW|/Hd endstream endobj 53 0 obj << /Length 178 /Filter /FlateDecode >> stream x]1 @ )tMBą-,J-+GQrBt |(1%2EϨR.#ʒ;baPI(\4 ^nrJ1ʒ61E[4%o!Au4x@u/YqDwk;ppjhWO: m 837ġB endstream endobj 54 0 obj << /Length 216 /Filter /FlateDecode >> stream x51J@o";MBuS,he!Vj)x9a)BpSo\^]s-_Tܴ\ZKӶ5w1S WT##M~!J& zt9Fauޝ"Ya b&91ĐMJ^-}?9:o,Uێ;VF endstream endobj 58 0 obj << /Length 104 /Filter /FlateDecode >> stream x313T0P04W0#S#CB.)T&9ɓK?\K(̥PRTʥ`ȥm``P73`v(PՓ+ L5* endstream endobj 62 0 obj << /Length 119 /Filter /FlateDecode >> stream x313T0P02Q02W06U05RH1*24PA#STr.'~PKW4K)YKE!P EoB@ a'W $o&| endstream endobj 66 0 obj << /Length 105 /Filter /FlateDecode >> stream x3634R0Pb#CSCB. m@ $ɥs{IO_T.}gC.}hCX.O!'W ( endstream endobj 67 0 obj << /Length 235 /Filter /FlateDecode >> stream xڥ @\z Z< fNSuPԹG> stream x= @G, &"),J--mMQ> stream x}ϽN0Jl;Ta?pۜ7kBjikVb7/;8jC'_o6RsS-3[&0`Q0|T*M *pӌ_2 $Lo1ÔJc4|ݜ~82;eSz)<8`͊N9y{2hl endstream endobj 70 0 obj << /Length 214 /Filter /FlateDecode >> stream xڭ1 @E'l&G\@7E1#BBBQRgEv>'S &3!3c4#NqRdn uS:]L> stream x1 0yд*N`A'qRGEx 7бC=q(8 vي1&]lwqy,N1y 6n_pa8&:2)љBztUUN+IZ^>j$qIMMR'*mse cL@I 9Lwni endstream endobj 72 0 obj << /Length 226 /Filter /FlateDecode >> stream xu=n@gbi|eYGH@TDjh> X VyyD%JC80/*v[ dvջ\/_Gvxv+١hJʞ2Ն(W FOFFl@&%`}b zdeL,>2~dgygL[41Ƕ hKyJ BasQ D endstream endobj 73 0 obj << /Length 167 /Filter /FlateDecode >> stream x3632V0PacsCB.cK I$r9yr+[r{E=}JJS ]  b<]700P?aA<$AD0H0 A6b#4o@ endstream endobj 74 0 obj << /Length 281 /Filter /FlateDecode >> stream xڕ=N0’!sHE"T ()@`)<؋$'{Iן5-5tA-ukZw75oZOv3RpC/^Rk-=ԣ/qZqg XxqdWjIpnIUi+W%KK"5-CiK #;A58E, k΢SvYlK S^`%*#G4dPɲ1:^.eiiC%>+^ ~ endstream endobj 75 0 obj << /Length 167 /Filter /FlateDecode >> stream x3332Q0Pa3 TH1*25\Dr.'~)PKW4K)YKE!P EObPFS@ >? uBP?(lԁD(.WO@.Jm endstream endobj 76 0 obj << /Length 131 /Filter /FlateDecode >> stream x3634R0P0b#KsCB.#1s<L=\ %E\N \. ц \. 5 7?D # P?P1?H{pzrrD endstream endobj 77 0 obj << /Length 107 /Filter /FlateDecode >> stream x3634R0P0bc3KCB.#S I$r9yr+r{E=}JJS ]  b<]0q7c.WO@.S endstream endobj 78 0 obj << /Length 162 /Filter /FlateDecode >> stream x3332Q0Pa3 ebUej 䃹 \.'O.pSS.}(BIQi*S!BA,C}?7T10@ 6P?|'W [ endstream endobj 79 0 obj << /Length 213 /Filter /FlateDecode >> stream xڥ1 P #B[SV N⤎h=JбC1&E\|>?dј>c &tA$GOX4 "4 %]/#d5#MJ[h6%y=\0`..Y尀AK<@\@Q#6-WQwu;Sw ?kBKn&j״1a>7k.sk|]ŏf endstream endobj 80 0 obj << /Length 161 /Filter /FlateDecode >> stream x3137U0P0bcSCB.cK I$r9yr+[r{E=}JJS ]  b<]oH?1"~`? L7?bl'W n endstream endobj 81 0 obj << /Length 223 /Filter /FlateDecode >> stream xE1N@ E?b%790;"E"T (AKq%GH"4o4v]_+^sk{w6[{T^o(=fKdJ~|Q_stgj8UR:EZ ʷcVG@VjU'3rع: Fg u1vM#bj2;4@* endstream endobj 82 0 obj << /Length 173 /Filter /FlateDecode >> stream x3135S0P0R5T0P03VH1*26 (@ds<M=\ %E\N \. ц \. Xv8'=3,X w'C=`?`A<7@ ? r  ,t endstream endobj 83 0 obj << /Length 166 /Filter /FlateDecode >> stream x+@i*6#06&$  (D@@/G[58"e9P!Zj Z)%eʡ^Rv3:N[|LuM+C]MD ! a9PIcУd/-x>o;w*!aVB78\ d endstream endobj 84 0 obj << /Length 216 /Filter /FlateDecode >> stream x}=j` `-A䳋M)PH !SڱCC |'ꫯo4J$QLS<Üh'+v 3v/ز^e`7O$e7e*Ɋ*#3Qs;*ؗ /@ih#2+1@[|iơy(sG=ַ G#ʳpH endstream endobj 85 0 obj << /Length 276 /Filter /FlateDecode >> stream xڍJ@ 970&X9z l o=3wR<,gN1SZqBxyy*N}8_Ӆz7\-HDHC!ڐ%ZCƫ%\:Pm)(0#tB%S@=ERPGK(b'$GWP$d9Gmj9h m@Mi^Hv:vP{*j1uE!7blEDna^ԟ(¯n  endstream endobj 86 0 obj << /Length 208 /Filter /FlateDecode >> stream xmA XH0ywGAnSp,괴Py4eJ 1&20$g&{C.'8FTXi_Zk?;7T,9VTtJEͿ㖊u:*kj&D+AZ73C@.ё?|+23F%JUj=p>i05KΓ9ꓶ'-ƮoϽ#MZ'} endstream endobj 87 0 obj << /Length 126 /Filter /FlateDecode >> stream x3530T0Pb 3SCB.c I$r9yr+[p{E=}JJS ]ry(000```` H0@,0%#zl'W  endstream endobj 88 0 obj << /Length 266 /Filter /FlateDecode >> stream xmбN0|G/qCyfίF0t^ߟlߣO;O$9 1!rHdڈ4f&pBl9{Ð68,ִ/vKqbҷ+tي%+NC7"EB8сVP #RI*h~j:Rᕤ[Il`Φʗ'& endstream endobj 89 0 obj << /Length 258 /Filter /FlateDecode >> stream xڅN` {@ $g%^Ltr0NzGh< @= icu]RHRb)U?XHUw>5?1r~geΛ{p~z< 7g!ґRUcR;Q2QP:X Ja2m0{tƔyl[J8 XϠ-AvHxiOzMYSgčV6oGbǝ2ClčLU[ϟ]~(6?d endstream endobj 93 0 obj << /Length 90 /Filter /FlateDecode >> stream x33T0P0bCS CB. &r9yr+Xp{O_T.}gC.}hCX.O@Pgo9 endstream endobj 94 0 obj << /Length 160 /Filter /FlateDecode >> stream x3632W0P0Q54W06T05PH1*22(Cs≮=\ %E\N \. ц \.   @|@2@,@l@0X}ߥbs)8\6' endstream endobj 95 0 obj << /Length 98 /Filter /FlateDecode >> stream x33T0P0bCS#KCB. 'r9yr+Xp{=}JJS ]  b<]lA 2 rzrr0B endstream endobj 96 0 obj << /Length 176 /Filter /FlateDecode >> stream x31׳4W0P0b3SCB.# I$r9yr+q{E=}JJS ]  b<]0i&$ɆAIfiL2ABDPԠpd`lN27u`_`H.WO@._ endstream endobj 97 0 obj << /Length 212 /Filter /FlateDecode >> stream xMJ@!0:/KP 詇(E!bhy_`nz(Y'TQ2 ?e{./⍧*WM %쭾6w}{";fOv+I~ )r!FA ~Q`RP#Kc\gFa4wWbТ 0)B@7 =7bS. endstream endobj 98 0 obj << /Length 177 /Filter /FlateDecode >> stream x]; PEo o6<Vbv'غtn2EHFÅs:XsgyӞd>e8%w!܉hr)-lb^gEihѶ tP"Y~ЅqdXS(\!(iPC] mj7ҪS n1 endstream endobj 99 0 obj << /Length 182 /Filter /FlateDecode >> stream x33T0P0R5T06W01SH1*26 (Cds<M=\ %E\N \. ц \.  ~NH~ ?j?01?` 0L @e5Ȣ ?Փ+ M endstream endobj 100 0 obj << /Length 174 /Filter /FlateDecode >> stream x]1 @RnvA"+P,$(!E n1CXs_qxD:qeı,#e5$_l9eE2hKE T760= ӦAޝG4+ Ya|#xxЂf 8 endstream endobj 101 0 obj << /Length 131 /Filter /FlateDecode >> stream x3235U0P0b#3sCB.# I$r9yr+p{E=}JJS ]*c<]?0acga0?`D?0o".WO@.y?B endstream endobj 102 0 obj << /Length 199 /Filter /FlateDecode >> stream xm= @' H2$&L!he!Vji(H ^DoV#*ZX|3Û;=í8ae&=X҈{ p:p"9ӖlȒx)O+G rߜW3=TU4 hʹtCPZa3+eG_5jd4iNB@ endstream endobj 103 0 obj << /Length 146 /Filter /FlateDecode >> stream x33T0P0bcs3CB.c I$r9yr+p{E=}JJS ]  b<]000 "88{ ?8qV? ?&\= ZP endstream endobj 104 0 obj << /Length 118 /Filter /FlateDecode >> stream x33T0P0bCs3CB.C I$r9yr+p{E=}JJS ]  b<]?@ h ʐ'W =!45 endstream endobj 105 0 obj << /Length 105 /Filter /FlateDecode >> stream x33T0P0bC 3CB.CS I$r9yr+r{E=}JJS ]  b<]BTՓ+ ": endstream endobj 106 0 obj << /Length 164 /Filter /FlateDecode >> stream x33P0P0bS cCB.SS I$r9yr+r{E=}JJS ]  b<]3`? 7g?|0o?TTzCuf( H@).WO@.`\ endstream endobj 107 0 obj << /Length 137 /Filter /FlateDecode >> stream x33T0P0bcscCB.c I$r9yr+p{E=}JJS ]  b<]c`1~``">0Z0'r M endstream endobj 108 0 obj << /Length 157 /Filter /FlateDecode >> stream x3632W0P0R5T06V06TH1*26PAc#Lr.'~PKW4K)YKE!P EACv ,yv`Q5 ?`Bd7`? Փ+ v?X endstream endobj 109 0 obj << /Length 186 /Filter /FlateDecode >> stream xڍ= 0'}$ ], ftr'utPtp:v( ԡoOeLF4Ԙȥ"ՖvGL55.yDFآΈ }o J`J30V@ AaK}Ư/橀˥5 6?pq_Qn endstream endobj 110 0 obj << /Length 124 /Filter /FlateDecode >> stream x323T0P0a3cCB.#c I$r9yr+s{E=}JJS ]  b<]?o^:u?ذ?`$# 'W 1R endstream endobj 111 0 obj << /Length 169 /Filter /FlateDecode >> stream x%; 1F?p۩$:(+PmYf)H"x _u*[}.  ɖ)\ٟhRް-I/R&]/zIOVS6g5\쨞d-yvT"4h<, "2cA.-^I@aIO0hD8'yMk; endstream endobj 112 0 obj << /Length 138 /Filter /FlateDecode >> stream x3231V0P0T5T02V01TH1*22 (Ads< =\ %E\N @QhX.OzE?3L8$ Y0~0`P#'W E;G endstream endobj 113 0 obj << /Length 167 /Filter /FlateDecode >> stream x3632V0P0T5T06S0TH1*26 (Ces<M=\ %E\N \. ц \. 0?&01?`  @D2Q%=;g=p`#?``.WO@._x3 endstream endobj 114 0 obj << /Length 195 /Filter /FlateDecode >> stream x35г4Q0P0T5T05P0TH1*2 (Ces<L,=\ %E\N \. ц \. c!0`  `$F([cWdžJHȱ!Hy igσD00'@"o00-J7B ?qzGx endstream endobj 118 0 obj << /Length 120 /Filter /FlateDecode >> stream x3632W0P0U06R06P01TH1*22 (XB$s<L=,=}JJS ]  b<]a_#\\\^"/ endstream endobj 119 0 obj << /Length 96 /Filter /FlateDecode >> stream x3632W0P04F )\\@NrW %E\N \. ц \. v `Փ+  endstream endobj 120 0 obj << /Length 154 /Filter /FlateDecode >> stream x3632W0P0Q5S06T01SH1*22 (Ads≮=\ %E\N \. ц \.  |yf`{ : ?@?@03?10#3Lc\=Q3k endstream endobj 121 0 obj << /Length 103 /Filter /FlateDecode >> stream x3632W0P04F F )\\@HrWr{*r;8+r(D*ry(13oz;S'W R# endstream endobj 122 0 obj << /Length 101 /Filter /FlateDecode >> stream x3632W0P0S04R0T04WH1*22 (B$s<=L=}JJS ]  b<]\\\ endstream endobj 123 0 obj << /Length 168 /Filter /FlateDecode >> stream x-̽ 0>B LP)P+AAA9>cR~p;Κ9Vhkr+tm f-S0~.Q= *4qI9bH+MjT  3B-). #-%$s|;tI endstream endobj 124 0 obj << /Length 162 /Filter /FlateDecode >> stream x3632W0P0bcC#KCB.#1s<L=\ %E\N \. ц \. a`XA=}C=C=CX0LS|zy'W 7 endstream endobj 125 0 obj << /Length 172 /Filter /FlateDecode >> stream xu-0ǻL<#은r $H,Zq9biy]0$ ~G|.PSpXgA`{ʀ\V g4s<.{bk\dF!|7EAR=SٔdEJWt ~y馼+yol?ǿ]NޔL[ endstream endobj 126 0 obj << /Length 170 /Filter /FlateDecode >> stream x] 0E_xK?! L")P+AAAѵͧS Dpz>*NhtxoW銭EA-*yAnQutTv9O `v587PD"D?D0A9J|upeq.L endstream endobj 127 0 obj << /Length 143 /Filter /FlateDecode >> stream x3632W0P0bcCCB. HrW02r{*r;8+. ц \. 0@l0ر`c`@7 j(cՓ+ @ endstream endobj 128 0 obj << /Length 214 /Filter /FlateDecode >> stream xU=n@4 -w.f 4HqT)A$[X+>=Ɯ!۔f<ݬ͎f9%l3J^U$_pdªy5s:.!_MWHa~”E:Su@I #ABФ?_Fr"@@;^p6kʎ4EN ZH endstream endobj 129 0 obj << /Length 144 /Filter /FlateDecode >> stream x3632W0P0bcCCB.c# I$r9yr+q{E=}JJS|hX.O bv|o`G\=<[ endstream endobj 130 0 obj << /Length 177 /Filter /FlateDecode >> stream x}1 @Ѕ)ir l6b#X6XXzs),ZY<^7SDE{1GX05(cnQ)-t6"-yBQ^W/Bg;Ze#R VnVkxS> aP9~cs|"Xj endstream endobj 131 0 obj << /Length 112 /Filter /FlateDecode >> stream x3632W0P0bc#CCB. HrW02r{*r;8+. ц \. Gz f8\?aՓ+ Ϩ0m endstream endobj 132 0 obj << /Length 148 /Filter /FlateDecode >> stream x3632W0P5f F )\\@`\.'O.p.}0BIQi*S!B4Pe,B<0H2?'8`@?? b\\\cMa endstream endobj 133 0 obj << /Length 137 /Filter /FlateDecode >> stream x3632W0P0bc#KCB.c# I$r9yr+q{E=}JJS ]*c<]7a??`H?#a\\\R_ endstream endobj 134 0 obj << /Length 165 /Filter /FlateDecode >> stream x3632W0P0bcC#KCB.#3 I$r9yr+q{E=}JJS ]  b<]?``cogcgcoao;V a:z{  2d>.WO@.=D endstream endobj 135 0 obj << /Length 178 /Filter /FlateDecode >> stream x3632W0P0T54U06V0TH1*26(@s< =\ %E\N @QhX.O` |:: ;<7~P=Q?L^s endstream endobj 136 0 obj << /Length 142 /Filter /FlateDecode >> stream xڍ; AЎ+ }燈麂(+G(a1 FC?f˾'5&¬9XywYNql-ࡒDE4'L*Jz#R"?OsՎY o"G endstream endobj 137 0 obj << /Length 160 /Filter /FlateDecode >> stream x1 @D*77@VbBmM> stream x3632W0P0bc 2WH1* \.'O.p#s.}(BIQi*S!BA,Cܸazp0?10a``BJ( endstream endobj 139 0 obj << /Length 127 /Filter /FlateDecode >> stream x3632W0P0bc#KCB.c# I$r9yr+q{E=}JJS ]*c<]72f?L!fb`?'W nN endstream endobj 140 0 obj << /Length 154 /Filter /FlateDecode >> stream x3632W0P0bc#KCB.c# I$r9yr+q{E=}JJS ]*c<]?C? ?>`D+0|=GA&szrrH endstream endobj 144 0 obj << /Length 114 /Filter /FlateDecode >> stream x3631Q0P0b#SccCB.C I$r9yr+Zp{E=}JJS ]  b<]00>``O0ZՓ+ V4q endstream endobj 145 0 obj << /Length 171 /Filter /FlateDecode >> stream xɱ 0+ ?D'0iZM ftrC>Z1C 6wrZ,G8уā"Vz˯J-9#cDzŁEqʰ10;- 0q#1™3Zkg6T endstream endobj 149 0 obj << /Length 199 /Filter /FlateDecode >> stream xڥ=@PL ȟ b&ZY+hxJ d)-bߛy63f%gtx0e5$ jOaj:*yAUlQtєg&̛}Nr 5r^ a2ʮ`i`r_zH&=| z)3WwFHH endstream endobj 150 0 obj << /Length 203 /Filter /FlateDecode >> stream xu1@EPLL 1D+ c&jQ8%gdB-^6gߑ;dO\q~ƨ4 Py*^r; SrPEqbtLR~3&0 > stream xU @ O Yxw8jotr'utPQ5I-$f2c-Z)+GZv*C@Hx=Π9sT/Ԩ"kF㇠ZFQ"7!\LŮ{kw; #e%(𮈻i^/aTtY!)y@,=l M>k endstream endobj 152 0 obj << /Length 107 /Filter /FlateDecode >> stream x313T0P0QеP0P5RH1*26 (A$s<≠=}JJS ]  b<]P$ 0,) endstream endobj 153 0 obj << /Length 148 /Filter /FlateDecode >> stream x=1 @ER~- g`#8RK EJ4RZ(ޑ'̨i> stream x313T0P04F )\\@$lIr p{IO_T.}g E!'E@!ncr e endstream endobj 155 0 obj << /Length 118 /Filter /FlateDecode >> stream x313T0P0S04S01S06QH1*2 (Z@ds<-=\ %E\N \. ц \. c$! b\\\ϊ> endstream endobj 156 0 obj << /Length 137 /Filter /FlateDecode >> stream x313T0P04S02W01V05RH1*22(Bs≮=\ %E\N \. ц \. QqC=C=2p\   \\\8 endstream endobj 157 0 obj << /Length 188 /Filter /FlateDecode >> stream xU=@`6$p.?`# b&ZY+h+L9 Gذ nKfQ!!^CUdx[a> stream xmAJ@tx9B FSjtB\U.jir(sn }|2)$9?J\ze\)7oϔ-o/Yr>RbGx+$qP-T 8a Hڔ@\fgm{`%NGPik,F=pk0jluo-9m骢;[| endstream endobj 159 0 obj << /Length 245 /Filter /FlateDecode >> stream xm1JPYR |s}!` A+ RK Eʗ^a2Œ񟉋6̼yT尒x"p,\@_فs/*g. )&LOPvY`n ,{OěMx[l)zi&$vX?zΏE7 }t endstream endobj 160 0 obj << /Length 207 /Filter /FlateDecode >> stream xm= @irYV ),J--mM8mR,dgbF)MidPaly&T'͞ Zh = vA͒#Kv07}> stream xU; @? ` A+ RK E[7GQr)h1/t)ZEyɗϴOC-*2gd6:%Smx],vKȬqzjHHHC,10\qEqRc,S4EB訵H<,l)o e@)]X!uE{/^q endstream endobj 162 0 obj << /Length 212 /Filter /FlateDecode >> stream xuϱJ@_RG> stream xڕ1 P q(dGx9OA ZN⤎m֣xҘ!$!'3N*Φ|INY>-KNɗ[~>^W݊SSNNT D'Ҡi!4y;쑷Gwp{cjCe s]ؗʞZ."US9©-KI endstream endobj 164 0 obj << /Length 218 /Filter /FlateDecode >> stream xeαJA b > ]vj<-,J--mo||ybCBdy-j /;~2xxD-+j.KtoOԬY:ni0s #VH|ěFo;s+lq΅Ƕd,6ɺY'=alp +%D7p endstream endobj 165 0 obj << /Length 196 /Filter /FlateDecode >> stream xm= @'X#MXXSZYZZ(m#Xo[fa5B&x#/~,+E³N|n-f-nKn!R7 !Hꇨ+U4jdcޑM-孍@l_ "j~' f&74.WHe4A o \s` endstream endobj 166 0 obj << /Length 181 /Filter /FlateDecode >> stream xuα 0+ zO`RL'V08iGE7}4бC1:n83d3dftJFq> stream xmαN02Xŏ{H.X*E"L0"5)oG1o`ŃsaA t7;/%KGvA)N v=4GOYScs W,6+"< .L)'rf;GpaF]1P.;a?2yWL ǹG9^jo.G82TJ="b> stream x}1 @49IH,-,J--mMoL2LvY~ Gc 0G8 q bɁD9쎐y Y|=,9 ܂IѱË_ꪽ^cf8y/>_[;bPsfm]vҨVi.oVڷ[eڏ2t6 endstream endobj 169 0 obj << /Length 156 /Filter /FlateDecode >> stream x313T0P0bcKS#CB.cC I$r9yr+r{E=}JJS. @-\. =2>gg`zp=a&f?qA|.WO@.J endstream endobj 170 0 obj << /Length 230 /Filter /FlateDecode >> stream x}ͱJ19X&ywl 'pVbvb7[E(6W77V80/̤mfRɾ@f|mcqw<︼Բ\vgt|y,/䲖ꊻPLdK?t4g1:Vu&*ޠw#¦%{"oOp($BJ(D|p0hs^>۹3k¸ cԤRP5y>ZsY endstream endobj 171 0 obj << /Length 154 /Filter /FlateDecode >> stream xuɱ 1 ኃG0O`\op Njh(bl-?崚aUÓ+>$?*_5o3z  H1D>1Cf$t cUIa.<5Ga D"JLKL`` ?:R endstream endobj 172 0 obj << /Length 194 /Filter /FlateDecode >> stream xu @`Ń0yVq :fNSuPY7|;4kuhgd4GO q^ͷ=@X f܂x>] C)C 6h[ }POmwj؊n֬GerۺInOs&y?ͅ_[*o&+jIhiKx endstream endobj 173 0 obj << /Length 180 /Filter /FlateDecode >> stream xm1 @ )xnBVJBBB"^do)BBbFST@F R/r@)Z?K6A}cE- ol}:X}"j&xovV$GC* ~f endstream endobj 174 0 obj << /Length 198 /Filter /FlateDecode >> stream xm1j@Ep!fsZ1d"W.B*'e h{A (&E a-]{^ҙ|Xr8}Rݒ;=K}A~qIג7j$2%32 ]hzdLs_Lä_Yt:wjh^H;FU.o%mZ-/LRz endstream endobj 175 0 obj << /Length 230 /Filter /FlateDecode >> stream xuνN0:D%{:&KmȀbj@y?BFi>@UJO򢸑Lȯ9Y^.wv™/}UI\ |~|]=%g\.7B>@T*ƒvPU> stream x}1 @]RVBVb(9BʈqvEy03L8I38Byrj5tكL@N0ހ)PR+IFdޒjIWZE,& *>`۰m$jKaj` U endstream endobj 177 0 obj << /Length 206 /Filter /FlateDecode >> stream xU1j@Eq!fo Rd\ l`W)B$e\vG)U8Mb3KtkZ>iyW]VGmZ[wy|گѧZg7}'8l"M !#T ppP\`~ԅƲꌀEwKr40À0=O%AnRZA endstream endobj 178 0 obj << /Length 176 /Filter /FlateDecode >> stream xuϽ @ nY ֫ 7:9::(>#tPCÑKm8r#:&xAk%5ጙC%k,ƭvd9%hr%HDbfRA#JA;=LVi@ &!`nOYo .n R endstream endobj 179 0 obj << /Length 178 /Filter /FlateDecode >> stream xm̱ 0H-}SV08ͣ7#tP> stream x==@!$x.d@ b&ZY+hq%g+̛@.Wy!5||4gN>0U(N$#;NQ=_;!EFg ꚮ~3 |4ؚ4#\Y]gr1WOL$ǭ#bVO endstream endobj 181 0 obj << /Length 197 /Filter /FlateDecode >> stream x5; ` %79m`A'qRGECGEzcokB>bw!ܗ&QvGlE/rPPMycEQѷ(5ҕ;i?͒5-7-ǫy! ^P+́<$r4+n "ID>8q?U endstream endobj 182 0 obj << /Length 216 /Filter /FlateDecode >> stream xEαn@ PGNO_KH@b!`b@L#nvH0e`'wgFJ)S)gG, 톊!څTVK:V6t՜b%71w%;]ͮ:$δ & nKoW1]ЋputF@uFjM0>ɏ) N6#0˾ j5>[ endstream endobj 183 0 obj << /Length 224 /Filter /FlateDecode >> stream xMα@ )iBy` A++Q);l3j:-(#IorNjNӜNP6hW%OR9Q[Qv$QKRvrM`> stream xmбN@CA2 <əXg"WYBh<>%aKK6eg]B}}k{oxⷊ>.6-\WT<*#Syc]nyv@6CG'=D",2dfFz-mə1:;_w1|4t4hn7)xM> stream x3135R0P0Bc3csCB.c46K$r9yr+p{E=}JJS ]  b<]00 @0?`d=0s@f d'n.WO@.sud endstream endobj 192 0 obj << /Length 116 /Filter /FlateDecode >> stream x363P0P0b#sc CB.#C I$r9yr+r{E=}JJS. @-\.   ?0m'W ;> endstream endobj 193 0 obj << /Length 184 /Filter /FlateDecode >> stream xM= P ER[ |/ BlSZY `4G(9,_3q&j5qPr-NFm1cb҉筘t.BKI @?PV^F3@|X,`ܠ^B5j:GF_8 endstream endobj 197 0 obj << /Length 192 /Filter /FlateDecode >> stream xڅ1PDPl Ċ1D+ cmq@IA;WL0 v xlagnEt4'g'Ty!n{> stream xڅO; Pl {I*L!he!Vj)h-G,-$q̃T;LNuihuɗV'/2O4Ĭxq7 $$M | ,G\W{F9^ـ"J[|rY"ֱ4nT?pGrjݬc_e*[M* endstream endobj 199 0 obj << /Length 162 /Filter /FlateDecode >> stream x] 0->KNZ N⤎>cbMN8>] y GGbO%T2[0YFK&pOdLSAZZFHW 2"L}Tߩoﻭ "Іֺ? endstream endobj 200 0 obj << /Length 114 /Filter /FlateDecode >> stream x313T0P04W5W01T0PH1*22(Bs<=\ %E\N \. ц \. a`?r 5ez endstream endobj 201 0 obj << /Length 116 /Filter /FlateDecode >> stream x313T0P0V5W02W0PH1*22 (Bds<=\ %E\N \. ц \. c``pzrrlI endstream endobj 202 0 obj << /Length 104 /Filter /FlateDecode >> stream x313T0P0UеP0T5RH1*26 (A$s<≠=}JJS ]  b<]'W * endstream endobj 203 0 obj << /Length 136 /Filter /FlateDecode >> stream x313T0P04U54R0 R M F0\.'O.pC.}BIQi*S!BA,???PP'W ,5 endstream endobj 204 0 obj << /Length 99 /Filter /FlateDecode >> stream x313T0P04F )\\@$lIr p{IO_T.}g E!'EA0XAՓ+ ; endstream endobj 205 0 obj << /Length 110 /Filter /FlateDecode >> stream x313T0P0V04S01T06QH1*26 (Z@ds<͹=\ %E\N \. ц \.  \\\A endstream endobj 206 0 obj << /Length 103 /Filter /FlateDecode >> stream x313T0P0W04S06W02TH1*2 (B$s<,=L=}JJS ]  b<]0 szrr$~ endstream endobj 207 0 obj << /Length 184 /Filter /FlateDecode >> stream xm=` .߁1D'㤎]ċ8p n #~$(}L> stream xڝ1N@4QY AT (Ar 3AzWJ_kN|y9H/vI'Zun8-)\ؙBwoVWg)6r}Gݚ3J~ ZTMa.)- o̤/`tR27V֯ifhh`+-RN]dvg9 endstream endobj 209 0 obj << /Length 147 /Filter /FlateDecode >> stream x313T0P0b#SCCB.c HrW0r{*r;8+. ц \.    `|$lthvb)،6 Q .WO@.̌r endstream endobj 210 0 obj << /Length 197 /Filter /FlateDecode >> stream xڕС0jrf{::"#a e0XvtmCOh)T^ aLiOvG ֤FscT,r0ʖSiNfEN`Y9Q3pqNN3O0n ZJ4&}5ty+A -ؼ+ԀW2>z endstream endobj 211 0 obj << /Length 236 /Filter /FlateDecode >> stream xu1N@ E"a|$H" * DH$*\!G2HQwmT 娔DJsՠg?x#Um<>r\Iq+wn˜24wC0MLNLtA 9a=tC68yF̛aO2/a<&E>oxv endstream endobj 212 0 obj << /Length 124 /Filter /FlateDecode >> stream x313T0P0b#SCCB.c HrW0r{*r;8+. ц \. @†H0 z(QՓ+ +T endstream endobj 213 0 obj << /Length 167 /Filter /FlateDecode >> stream x1@G(LtYY +D ,ZZhq@IaGhf'_Ϭgɂ#}SqblF.b27+e=Z3bÏB&.ْ`9:Rs)U*H]J^w¤%HRQC/~*hGo8 endstream endobj 214 0 obj << /Length 226 /Filter /FlateDecode >> stream xE1n@б\ M<'m JHqT)"*L(iRZt)GLᏱEW23ɢ}ɟ\YV>>xUs&Ւg9pzy^Jz-NS={kg`g?EJEAJ>.dt &JI0r熻qM 5.M_f[݆{GZ>_?WKq{ endstream endobj 215 0 obj << /Length 191 /Filter /FlateDecode >> stream xm= @ x Ղ?` A+ RK E[)S,;h%Xfh< }:ex\T:8^pVQ>EmqF;)C}FE$ sXBט^Hȃ@?|bezYETZ_q-`R!a~K<.Kj/\ endstream endobj 216 0 obj << /Length 187 /Filter /FlateDecode >> stream xڝ= @g"#Xraˀ!N;GYg!BR@[]/w%ܔ|q&?,Lƹ+x"ҡ@yRx -0遍~*?umֽr!0e] EӐ`%Ж*sz endstream endobj 217 0 obj << /Length 182 /Filter /FlateDecode >> stream xڍ1 @EIk9 n!he!Vjihh%GL2Φօ}g?ofǜlS>'t#k5?;2{Zd܆L]rBC\"iJzD=[5/jLAOQ~ߏ@B_Zh4J5Ϋ^RMuZ9uEJ endstream endobj 218 0 obj << /Length 193 /Filter /FlateDecode >> stream xڕα@ .<} L &`qRG;[pqᾤ 5)+H+9s<^&|XLפ*L,r0S⺡MNMC $z11wx!"><Zi&N?>cH RaH'c ˁ:ѴmO, YK endstream endobj 219 0 obj << /Length 201 /Filter /FlateDecode >> stream xmPE4K BBrmM>}}V́;ܹiԥS=T'u9&a+NFF⻥OK+ VZ[( f#2;܃J>PDCv@Z }•cC 7'* 4u.7mp b2rcZI_ endstream endobj 220 0 obj << /Length 154 /Filter /FlateDecode >> stream x313T0P0asSCCB.c1s<=\ %E\N @BA,@Az H?*;&p4Aka[~ `1.WO@.^ endstream endobj 221 0 obj << /Length 253 /Filter /FlateDecode >> stream x}J@#E`}!k.p` A+ RK E#U(y[,gǰzqꜟJz`;볟 Z.(wk~x|ws%{/xv4lnfxYDdItSn\#7@efd=`El6X4jB*`f}E_h0bj1SL̀,x>v*!*:MƢ:?-y%ۧF@-7> endstream endobj 222 0 obj << /Length 161 /Filter /FlateDecode >> stream x313T0P0bcSCCB.1s<L =\ %E\N @B4Pe,B @d ?  B~oAd $?HzI8'W z endstream endobj 223 0 obj << /Length 132 /Filter /FlateDecode >> stream x313T0P0bcKS#CB.cC I$r9yr+r{E=}JJS. @-\.  @x@@?C1;}pA|.WO@.O) endstream endobj 224 0 obj << /Length 115 /Filter /FlateDecode >> stream x313T0P0b ebUel䃹 \.'O.pc.}(BIQi*Sm`Pz<7,{\W endstream endobj 225 0 obj << /Length 171 /Filter /FlateDecode >> stream xڽ= @[&G\@7!Q1#X^,7[n8ȃW3r9Al&]'-\,cx܎` s0 n ==Cbq1 SeKvI'mr/)T8R`5zf endstream endobj 226 0 obj << /Length 183 /Filter /FlateDecode >> stream x}=@XLvNBLH0XF[٣Q8ab^2}KJ)*%Kw4 +@@)juE]VQzB[_P :9o.A@9(dq%7@'a/=ߵG.^Tyh p A!\\[>P: endstream endobj 227 0 obj << /Length 200 /Filter /FlateDecode >> stream xڥ= @g fI"SZYZZ(ښͣ[.(wS|7q4HRYs_8 LWCNv?$#(%p:lHj&5pGٌs V,S*7;(&A]t, -GT@8=F> $_ȥF<5ޯ endstream endobj 228 0 obj << /Length 158 /Filter /FlateDecode >> stream xڭ1 @ПJuj!Fp A+ RKAEh9JAqc![̃I`4-ØԈmjw쎜{Vky\Y\/|9êe_Hx+5C8#$RC\B"xo<Iw endstream endobj 229 0 obj << /Length 185 /Filter /FlateDecode >> stream xM1 @4!s7q5@T0XErr,,2ԎgDM&rv=pr^ًYMyaoY!RrGB7 }KD#"eZSW!("PB Ca}96A=> stream x313T0P0bc 3CB.cS I$r9yr+r{E=}JJS ]  b<] @AH2`h AA~[@ Lx:B endstream endobj 231 0 obj << /Length 148 /Filter /FlateDecode >> stream x313T0P0bcc3CB.1s<L =\ %E\N @QhX.O` $0()D? d=H2cģd> endstream endobj 232 0 obj << /Length 202 /Filter /FlateDecode >> stream xE; PEoH!LUBBBN!۲t @!L@,a̻{ې lfOÄܒZrɌOp>ܘW!kJ/LnRQ;H(+p{h/ O.ok> 44W&F&R$}xY& endstream endobj 233 0 obj << /Length 237 /Filter /FlateDecode >> stream xEαj@ dz)CB=ҩCɔdnvj:t&=$%p!:d-"zX!ZnhyxDQd}LKႲ)ֳ[{vȭ+OPy5 @U-G[;z[*lB;v\ɼHer;SHR Z88 ~Ka{ endstream endobj 234 0 obj << /Length 203 /Filter /FlateDecode >> stream xڝ= @_L#8MLRL!he!Vjih'({!q-6߲`}t!'<8 91 ũ piNfqJf)c2ot=̜w{@^m W÷x: dTLdO_'X`*w]!WҢqz9KU" }}d endstream endobj 235 0 obj << /Length 141 /Filter /FlateDecode >> stream x313T0Pac S#CB.# I$r9yr+Yp{E=}JJS ]  b<] X큸7001;j?0FJ endstream endobj 236 0 obj << /Length 222 /Filter /FlateDecode >> stream xe1N1E*i| .-V Ab $(UAݣ(>B,?kWEwk.i;O%/$=iI^>$nF6x0ڄʬ ͎X⌾T~fGvlgOȠ<|HTGǂ+ˇD5WTL3*=2,<8h endstream endobj 240 0 obj << /Length 189 /Filter /FlateDecode >> stream xڝ1 @EL70s @BBZZ( 9Z#XZ:IVt« 3Or#xjBN%7nt8SjImYǤ+]'RzΚT;l@TJ @ hxjze/ ]a;AdD/ak+?iTRS" }G@ endstream endobj 241 0 obj << /Length 188 /Filter /FlateDecode >> stream xڝ1 @EL/ :ͮA"EVbE$Nxg1q߄l">h.!Ǧ^OXRcR 7'e|ޏՌ5ٔs@ th~//iKxO`LГtIVx?>(=Cuڕ/@RriniMoEBs endstream endobj 242 0 obj << /Length 130 /Filter /FlateDecode >> stream x-ɱ 0 g 2'0-k3:9 TGAEfڢ|7lXU:x@='e; m;P=fpq}kw+*\ǣҟ;ZFy2ddL*R!sBY ,P# endstream endobj 243 0 obj << /Length 131 /Filter /FlateDecode >> stream x-1 @E?^ xЙmV"RP:ٙ&Nwo\%红V\xA=y1:nwՇ Y/ t4M22DT&2+<*B# endstream endobj 244 0 obj << /Length 94 /Filter /FlateDecode >> stream x3230W0PaCsKCB.K &r9yr+Xr{O_T.}gC.}hCX.Oz 0X [\w endstream endobj 245 0 obj << /Length 153 /Filter /FlateDecode >> stream xڅ̽A ɉ̗eSH" ͣxwN5gvZ88Kb񀷲>7TzOoײC _.)k̓<j*zP R.NO|[ƧmdSL6e\6NdV;x* endstream endobj 246 0 obj << /Length 101 /Filter /FlateDecode >> stream x3230W0PaCsc3CB.K 'r9yr+Xr{=}JJS ]  b<]d7`= 1S'W fp" endstream endobj 247 0 obj << /Length 162 /Filter /FlateDecode >> stream xUA @7 u XJ0fԪEB ,jmAi"=xj1k)%g/ I|<$7}Mlx]I'$K>&ȔGȽm~i\ԅΏG8¢x8M lj0 b+12 endstream endobj 248 0 obj << /Length 94 /Filter /FlateDecode >> stream xM=@PEx$^!R { T߱4J2:*54`ƴ"f@BJJ7"i endstream endobj 249 0 obj << /Length 165 /Filter /FlateDecode >> stream x323P0P5T06V0P0PH1*2(Bs<Áj=\ %E\N \. ц \. 10703H01X010000$E@PPc0n`0\@r ;g0 endstream endobj 250 0 obj << /Length 125 /Filter /FlateDecode >> stream x3135R0P0W0P06U05SH1*22 (X@$s<̹=,=}JJS ]  b<]08`x 0ap`N endstream endobj 251 0 obj << /Length 172 /Filter /FlateDecode >> stream x3134V0P0bSKCB.# I$r9yr+q{E=}JJS ]*c<]0A?  @CA2@5@D!dPICd \\\^ endstream endobj 252 0 obj << /Length 235 /Filter /FlateDecode >> stream xmj1 ^=;Od-$AhO=Xބͣ{N"Q6>fB&?N'izmf4Z||DJƠz.rM/T%V~rEP@X8 \IU{3bY1Ez$'i=Sː†LBp6Pu 8:R [49޲&&Z'XΝ_%m endstream endobj 253 0 obj << /Length 209 /Filter /FlateDecode >> stream xڕ00#pO`Amd3ALd08Fgh< @ڴ_e4f, kӄqH2@5(xEB3 i3 5C8ZA/:L^pXpkFbIF2qUNCE>_c+vdn&~VP endstream endobj 254 0 obj << /Length 260 /Filter /FlateDecode >> stream xڭѱJ@? LaZ 4ܪ[-'BBRP̛*y+uvg!B#n;MG4Zly\Ѣ瞚-Sӟ-5#%_v^QdRPDZTRR OԵ@*(AWE],RIR57P&?2oƐ(~#FLg5=dF#zvL;mf&,mXJ[a # }R:%e-vvS=U:霾es endstream endobj 255 0 obj << /Length 181 /Filter /FlateDecode >> stream xuб 0  /0 D4?/iLsqINƪ&v)9 O44FQ5o3j ioKk2 DdFLƤ1(C8^QDɰ|p1۽."byҀ)gk׿R?U~ endstream endobj 256 0 obj << /Length 166 /Filter /FlateDecode >> stream x353R0P0bSCSsCB.s I$r9yr+s{E=}JJS ]  b<]d `6`RAI68؀L2`%Hv0)"G'!P5Ⱥ AJ$ `G@%\=Mx endstream endobj 257 0 obj << /Length 254 /Filter /FlateDecode >> stream xڭѱJ@?l&yM"&`p` A+ :--7`kMg+ & XKf]{t\)pp{ =SuV=UvT]j__Z]>5(6S`-̗oնd IS03aLlB".!1Ox&pcJ&HۅrI)ܔ_,v0{ltT颧 endstream endobj 258 0 obj << /Length 125 /Filter /FlateDecode >> stream x333P0P0bSKSsCB.SS I$r9yr+r{E=}JJS ]  b<]?T b78) s)hb y.WO@.!7 endstream endobj 259 0 obj << /Length 106 /Filter /FlateDecode >> stream x3ԳT0P0aKSsCB.#3 I$r9yr+q{E=}JJS ]  b<]acW3v\ endstream endobj 260 0 obj << /Length 165 /Filter /FlateDecode >> stream x3133W0P0V5R0T05WH1*26 (ZBds<M=\ %E\N \. ц \. ?@"000=o`#?0o  0X0`ao`27Áq \\\` endstream endobj 261 0 obj << /Length 243 /Filter /FlateDecode >> stream x]J@Yr̡@&A[sjsɃxj= Qj(y=HДeDz~,//Ue7~_G8"Ǎ;ΟGΗoKWn6^D8I F"!:+2oa[87`d`+hLMfp&byiguf0~5jRryd* Sk_ N9Lxods-5P endstream endobj 262 0 obj << /Length 140 /Filter /FlateDecode >> stream x35ԳT0P0bKSsCB.S I$r9yr+r{E=}JJS ]  b<]d3 eR/i& 0 d`L?`@!\=Afl endstream endobj 263 0 obj << /Length 244 /Filter /FlateDecode >> stream xu?kP{<0p '% ur(vtـ]G|X#y=8. [~< 8:İ˵W|Ք.1wQ@jH>yo瘣1 ý 8hFx]*18yTB,a PM 2< fep\$I5+zG4VY5D NZ@fW'coQ! endstream endobj 264 0 obj << /Length 243 /Filter /FlateDecode >> stream xUпJ@/.0fMN?Sge!VjihkR\AKT֩$EuwM1f``w%=.>jRWRkRnKO/VSYZR7T@fm큼0 {düۘ=4]L3Ȧa@bli@T|`MLjb4L1dtFW$G *.|ؙtI6Dc endstream endobj 265 0 obj << /Length 239 /Filter /FlateDecode >> stream xڭ08#^@D'D::htGxWm~_LyxJsNgo(I5M7?/&~I#K CԼ*x1F%)dB 񑊅A8EjGU(Nk4, ~j}> stream xڕѽ 0𖂁#x/i*U ~I(}JK "&HrtF*8 q0Y Ȁf4  ״ 2o@.08BDu uf,HW lf(ze~ަ_Q@6+L6elZv,XKP~EԺe֩N=v< endstream endobj 267 0 obj << /Length 256 /Filter /FlateDecode >> stream xUϱN0 )K~h{=B @!Z̏F%Psw|J8êt0r^jE>U KWk=?ܻbuyJz_uEk?ƌ!fl#>3Z;@'7x &&ȖNm9R0!G/aEFD+E$ьMX^>a-M=:upǴ-i}GA^{sywָ+=# endstream endobj 268 0 obj << /Length 150 /Filter /FlateDecode >> stream x3Գ4W0P0bSsJ1*2" Fr.'~1PKW4K)YKE!P E?<@0g`A bP>T*L`)`J+F Hʃr Wr endstream endobj 269 0 obj << /Length 191 /Filter /FlateDecode >> stream x= @B\@7JL!he!Vj)h9G,Sl3X,fuVsmnFlzl @Hw4HH/I'S>[ِ҃C#^(>l \3X~ZPCAJ'BEH?4u7{-'ROr%xVݙ÷C qBszxa endstream endobj 270 0 obj << /Length 240 /Filter /FlateDecode >> stream xm1j0g1> stream xu1K0W v8b vtr@?')ΝCMHH^K^Y/PX.8\> stream x]AJ0CМ.8]ʅ҅&uW<3ѐ.OXSZ[svn Ik_> stream xU1J@/&Gw@B,āuSZY `-G#liv|ߋ`fȟiʓRuMϕK]ټOӺVEͅF6}8rBG g@p voDD,ZNE- -FI2vpeDZdbtkt`el6X"d=y<"W.;_t endstream endobj 274 0 obj << /Length 204 /Filter /FlateDecode >> stream xm; @ . Vf.1L!he!Vji(X({8Qښ}i<"Ńf{Qj{T3Qes:.{TŘ4 5E&6%/_x/PAP02g0yp&dBw:+0}ATyM6Ӣ5l.5iK|T endstream endobj 275 0 obj << /Length 198 /Filter /FlateDecode >> stream x3134V0P0R5T01V0PH1*21PASKLr.'~PKW4K)YKE!P ETD0S$00|`A; 00* ?8Q"I&PMb`߁q ̍:]'W ckA endstream endobj 276 0 obj << /Length 182 /Filter /FlateDecode >> stream xڍA `'?(   AZDjX.̣y҅Tcu 7f: 5P L % MBb%_/#jƒ&Ύ҄Z{Ue5TƩ-ՇW6j@-OӉ;*`{^[bTd7 wSZ= endstream endobj 277 0 obj << /Length 198 /Filter /FlateDecode >> stream x3134V0P0V5T01Q0PH1*21PASKLr.'~PKW4K)YKE!P ETz !HԱ` |P=iu D)ph<krF=A?0`> stream x]1 @\B/ 8M(+Tr!bI q23;9nvdC)lGUgwIBf6$32d@fr@&m)2ϩ\^sϵ2HQRQO5QJrh MTrL@V@ endstream endobj 279 0 obj << /Length 141 /Filter /FlateDecode >> stream x3236W0P0bcSKCB.# I$r9yr+Yp{E=}JJS ]*c<]70| C`003a`\=&[ endstream endobj 280 0 obj << /Length 237 /Filter /FlateDecode >> stream xڍJ1ƿ00 v^@9Å+T[}> stream x3134V0P0bS CB.C I$r9yr+r{E=}JJS. @-\. ?&iNa`D~700n?D䇁$7 \\\y endstream endobj 282 0 obj << /Length 122 /Filter /FlateDecode >> stream x3230W0P0aCS3CB.C I$r9yr+Zp{E=}JJS ]  b<]0@A@8~? q0\=(CE` endstream endobj 283 0 obj << /Length 150 /Filter /FlateDecode >> stream x3236W0P5Q54W0P05SH1*22 (s< =\ %E\N @QhX.O  P?`E6?gc?P~.WO@.W endstream endobj 284 0 obj << /Length 196 /Filter /FlateDecode >> stream xڵ1 @Еir3'p.#BBRPQr0E:? d37u.{ʧHrCqJzƁGz$15x2`ts [R?L3؂rkm;x3HKv@%.oԐ nn**ɍ@ÔDr endstream endobj 285 0 obj << /Length 108 /Filter /FlateDecode >> stream x3230W0P0aCS CB.C I$r9yr+Zp{E=}JJS ]  b<]?0! ̃`qzrrƂQ. endstream endobj 286 0 obj << /Length 177 /Filter /FlateDecode >> stream x33R0Pa3scsCB.3 I$r9yr+p{E=}JJS ]  b<]?`@=:773n? Da`N``` O7Nszrr#߈ endstream endobj 287 0 obj << /Length 147 /Filter /FlateDecode >> stream x3134V0P0bcsCB.C I$r9yr+r{E=}JJS. @-\. ?00`D~70n?D䇁$0I.WO@.e% endstream endobj 288 0 obj << /Length 188 /Filter /FlateDecode >> stream xڍ1@E #0e6 &naRK v9GTd)HN^f̦ǚ95(EqߜR{cRkI ? ldM*H&g8^WSQdHVR!J*- i~ nN/ookg$AH> wlzZIK endstream endobj 289 0 obj << /Length 196 /Filter /FlateDecode >> stream xڝα @ HByuj;:9::(>Zp"]qQ |CB?2ܓ1G!#I:Ramd$V$fO"tٓH$R^K6ʯ\UW0/%>T5*4hy~> stream x31ֳ0R0P0V54S01Q06WH1*21PAScTr.'~PKW4K)YKE!P E0a<|?`0?> stream x3635R0PacCcsCB.# I$r9yr+Yp{E=}JJS ]  b<]3P?n3 ~o0ah`?PszrrjF endstream endobj 292 0 obj << /Length 195 /Filter /FlateDecode >> stream x=αJ@Xf x{`TSwZ * W6`"8%Gf|q~K.4pR^j<> stream x363T0P0T5T0P05TH1*22 (Ads≮=\ %E\N \. ц \.   W  @ @,?(fQ 0pC sC3=;?f.WO@.uH endstream endobj 294 0 obj << /Length 153 /Filter /FlateDecode >> stream x3134V0P0R5T01Q06WH1*21 ([@ds<L =\ %E\N @QhX.O `J`pB`왏I@.WO@.1c endstream endobj 295 0 obj << /Length 183 /Filter /FlateDecode >> stream xU̱ P#k[WJ' rjj Ɔh>`Phj @ B\Q#HEldȗ$"Sg3:.{|LVkRj_ ..X ,g0i) <p&A=j|c(vk]b=(ԿOI |F? endstream endobj 296 0 obj << /Length 233 /Filter /FlateDecode >> stream xU=KPs Xxv(zb`A' Q|A7|~Lx`7UN?8g!Aj"z$r~nhdHڙdrO/$GcHN* WUP6Aߴ45q " bx%tq_cGŲh;L t5<fOk2|+ZlECd(IBY_ endstream endobj 297 0 obj << /Length 210 /Filter /FlateDecode >> stream xMν @ )(> stream xUj@Yi nZ$sSEGQ|x I;=F(N8^D!qiIs ǔB3I-1QYAg//74gZv* 0ÿ+]SCE@QsϰF,IqSn/'gCb^mmjg`1'>ڟK endstream endobj 299 0 obj << /Length 183 /Filter /FlateDecode >> stream x%1 @@$|'0+AA),DQI:IUuO)Fh~!;:c̐ېዬQ֑)HpIH]RY#H[m(l2Oe-?uC endstream endobj 300 0 obj << /Length 188 /Filter /FlateDecode >> stream xڵ1 @EH!L#d.ͺB` A+ RK EBbGRRl6Pt+ǬƬ5$Ii;Xf$#aI,Dv$f,I(K~ |[jWopG!SE /zO6x+ӸY~uд` endstream endobj 301 0 obj << /Length 121 /Filter /FlateDecode >> stream x3135R0P0bc3SSCB.# I$r9yr+Yp{E=}JJS ]  b<]0001; aX*6T?0'W N endstream endobj 302 0 obj << /Length 228 /Filter /FlateDecode >> stream xmαJ@o"0M^ป'pWSZY `eh>J+5E~;Yct_^iC-/+9u'Zst }{} ,, %s'l"aAZқMY'W Tc| endstream endobj 303 0 obj << /Length 235 /Filter /FlateDecode >> stream xu1N0ЉRX`3',ZiY$R AE GQr[0"OʌǓ/^ҟ+Vɾݭ%+yxb>F:iy-29Q EPE6fLV&b&e6fՎY (y/ifU _ cBԨM>y2_ |Ǜjh endstream endobj 304 0 obj << /Length 226 /Filter /FlateDecode >> stream xڕϿjAna s=b!j WJ!`R nGG8̜EH:_1;dySpnyΟ9)_6[d?9oR&[}";YL9#;e銊Һ„pQ*+j .+xs7xĕ\ }rR /:tKuNTc'ې'jiT2Dׂ+X endstream endobj 305 0 obj << /Length 243 /Filter /FlateDecode >> stream xmJ@O"p}dXW0 j)h()SDm>{uuVZjG+9}Mjag"VNbkx|JV+-*@ Ps&[ D>#E@rI~2> stream xMJ@Eo[8м$AB`B]W҅E ;#Ǜ*y{wquLZZj}%OR7KmN~&wlֺ₲<>H\i%Jo*-o])L O[ `;d1a3X`LpM6{{xSHp|tO01l6 i4,e3zwgRS@v伕+c endstream endobj 310 0 obj << /Length 143 /Filter /FlateDecode >> stream x3235V0P0W54S02R04VH1*24(YBs< M=\ %E\N \. ц \. ?`= ``  0>`> `r , endstream endobj 311 0 obj << /Length 256 /Filter /FlateDecode >> stream x}бN0[#[w7kѮ)5ڂ,HY1FuE1$̝`ڳ$] ciiǒM6jT%0`t)ߚڣ0R7 A\tdC@f;w75>/G% endstream endobj 312 0 obj << /Length 263 /Filter /FlateDecode >> stream xڽ=N@ !L"nCeHJ $GQr-7qF}#[9մgXsoSxmWt5Zx|Ö (ETV";Yepš{J9~P(eRXfdH- Xq*K8/~byoƃq?}`0fW';j#cͪy< ^ux߳= endstream endobj 313 0 obj << /Length 159 /Filter /FlateDecode >> stream x333T0P0bS3SsCB.S# I$r9yr+q{E=}JJS ]  b<]CfPLC(~ŎB1PX ŀD@!;7UӀj (PEqzrrco endstream endobj 314 0 obj << /Length 261 /Filter /FlateDecode >> stream xeѽJ@YR#dM\p` A+ RK EAI|Sgwv/'W,fnQE4tuw8\/nqѢ=ܢmOjKvI@Ƽ U;=zŋ'|+|1#GR (2))RT58B )*B 0Dtc㈒(rTd<\B"!OLm%!) Yxnĺ endstream endobj 315 0 obj << /Length 249 /Filter /FlateDecode >> stream xڵ1N@EQ M#\* $\D*J(SAG\2 "J˻]>{m,|Dr!B~zóӥdȜ t$Pϊ˹vdW3V-pu/ Ɨ=:`Nzw8r,Vpڞݥxdn&8둉;b9޳0rEӪUXЂyjA^:'?ƿI endstream endobj 316 0 obj << /Length 263 /Filter /FlateDecode >> stream xeϱN@ ?y/iJ"JȀD' X{hy^cꊙD5=:駓|_.(_ I4BCjz8nZ:76 endstream endobj 317 0 obj << /Length 152 /Filter /FlateDecode >> stream x3331V0Pa3cS3CB.SK I$r9yr+Zr{E=}JJS ]  b<]ANi Z@5`NWiffI3i04?(p\\\wG endstream endobj 318 0 obj << /Length 196 /Filter /FlateDecode >> stream x1P .^@?'ILtr0NG(сP[C_۴ˏ0$y4h CmJ9&#&5!d 4rJ>6>y[Rb\ [Bgpq Db 7 %Xz’+pC7 M=$qY+|T endstream endobj 319 0 obj << /Length 199 /Filter /FlateDecode >> stream xuν 0+['0~I훙G#t =猪!ARG4!3vYW}؟pRP>@}vD?YM)C?mFAh0Wp(Ԇ&R_GWRM1|w5F ]5IW'C{p:V# \ 8.y endstream endobj 320 0 obj << /Length 184 /Filter /FlateDecode >> stream xڕ; @ )Bnb*#X٣(9BKY#X[?MbJ]-(9ktRSZ*KJPUtH(>> stream xڵ= @FR2'p$!v-,J--o d3<6{A\Ƹ+ [΁Di,7P3P#eƸ֠5->E)tDL̔Z&U!˧m,Jy"LXI?嵏]&^-VgǞZn$̴ɦp h endstream endobj 322 0 obj << /Length 191 /Filter /FlateDecode >> stream x]ν 0S:w#>mб N(Q3 \'3ʇE)rF2:Rߥ}ה$S2{Z|)/&QR:tCuňC:DvG|iFyV;tPo07{KxN. P5 ҂5-Qle endstream endobj 323 0 obj << /Length 264 /Filter /FlateDecode >> stream xڅN0 ]1Drop @ZUt`b81# xlB$7bBb"~??;㺧j|ƶoE]p3A{)~=\SvK;rJxP0w4{\ .c9N]"Yp&Zmm1B`XX 212sP)HrL51UW[$tUݒYņ'r endstream endobj 324 0 obj << /Length 157 /Filter /FlateDecode >> stream x3530U0P0bS#S CB. I$r9yr+Xp{E=}JJS ]  b<]3$;d%YH2$@A6W  H$r  WH endstream endobj 325 0 obj << /Length 122 /Filter /FlateDecode >> stream x3235V0Pa#SSKCB.#C I$r9yr+r{E=}JJS. @-\. 0!("3#! F#.WO@.Nq endstream endobj 326 0 obj << /Length 198 /Filter /FlateDecode >> stream xڵб 0J-}TZV Nj}G!̝:w'dfiYNf6\`w4=]/tbMf u~CQӈ*SKc;[ȩXeٰcF:ԋ!1H޿B !%ԉ=ۈec'l_ق0aOP endstream endobj 327 0 obj << /Length 105 /Filter /FlateDecode >> stream x3235V0Pa#3S CB.## I$r9yr+q{E=}JJS ]  b<]3GBqzrrW endstream endobj 328 0 obj << /Length 188 /Filter /FlateDecode >> stream x= ` C!GhN"  N(kyo =7:8pӺ.fϣRv39;6X|6|GB%%9 " 4Drr{EfV5 RגS^r_,IQiN[)%[y/ [> stream x3137U0P0bScsCB.C I$r9yr+r{E=}JJS. @-\. 000$700cA2 \ i$ ?l 4b>.d!p!dr~$_\\\-in endstream endobj 330 0 obj << /Length 144 /Filter /FlateDecode >> stream x336V0P0bcsJ1*26" \.'O.pc.}(BIQi*S!BA,? DM}?`@8P$` 4'Apzrr8W endstream endobj 331 0 obj << /Length 187 /Filter /FlateDecode >> stream x%= P7.BBBQy[Hθb2+$+]n: 2/*NrN7rZmx]9]bJV9q*> stream x3634Q0P0bc#ScCB.#K I$r9yr+Yr{E=}JJS ]  b<]0<z @?bT 7~`@400cr pR endstream endobj 333 0 obj << /Length 149 /Filter /FlateDecode >> stream x3530U0P0bS#csCB. I$r9yr+Xp{E=}JJS ]  b<]30??@5J2"0?;lA*r  endstream endobj 334 0 obj << /Length 199 /Filter /FlateDecode >> stream xe̱@7&`8ɚ( BX+ RK EBɧ"8qaZ=y$/$I+w良`=,g+b*qz;D$K.&Q~8-x)؇% Vd.hUAmP[0+|D0|D] zy^֐}bUc\6??#Zh endstream endobj 335 0 obj << /Length 236 /Filter /FlateDecode >> stream xuαJ@9R,Lop'p=pSZY՝pE h({]#ZFcf˳朻Em%a⹐QWthMB{[ݝx|A6%ڭy*M\K&#d!#POI* MD // R2h``R̓m\Ջz=@>6m8}F}:1Μ> ,Ef]O sSq0iTxj endstream endobj 336 0 obj << /Length 214 /Filter /FlateDecode >> stream xeͱj@ `-~&lpB2eڌZ-?&A 㤻_*2zSbI_9`QJithwThE}鈶ټS}Nal}!!xH˘ K{0S%YLI4^½vA:C52?j,Tk؄pg e3D^63U[}l* endstream endobj 337 0 obj << /Length 122 /Filter /FlateDecode >> stream x3137U0P0bCSCB.cc I$r9yr+s{E=}JJS ]  b<]DbvQ$G%AÈB\ endstream endobj 338 0 obj << /Length 231 /Filter /FlateDecode >> stream xmJ0,%Z%c7!02I|zGƭVx|,͝Gif4ۛ IodyA# ՌJ&E8]&Rj Ф KX"9߰C"N +oq @F2h.pFmLF IA.gOլ endstream endobj 339 0 obj << /Length 237 /Filter /FlateDecode >> stream x}J@ba> stream xڕϱ @  Y6O`[ҥTAAAQPG#ttt $Byp :D%;摤8ߨ0XnlBuحVK>/'2%;%|AtG*A0`/PuF199a{Db#j3X5SS imhO_o`{ endstream endobj 344 0 obj << /Length 327 /Filter /FlateDecode >> stream xڕӿj0q%C `*B]WC:Nm-vG#dt&?RiD ~i]_\V;WzG*I꒚M dߑ%)YRtZ@m^HwYmVaܶbN4RbXMΔ\uNnnb| mbީLE捴]$ⱱ7!3ilz.2Ob'z>уt!򸴏97 טC.k&) 7Lʬ k ͹!!KkK!#ܥm<Fk(4J@?mG/c endstream endobj 345 0 obj << /Length 338 /Filter /FlateDecode >> stream x͓?N@gC6QڸHaRK vF8%^0 Z-;;3|qvrXЧhsJL6~Em*iS^o*\R[}OT@WdR;Ȉ,QG9Ci 7rXK0A@$s;:>GOÔ11PVGG { r(ܑ  J}1*7S($;SheIL>oC^fi0ӤIΧ C4qHGnJ谬cC +{7Z۶> ࿢*E!en/ endstream endobj 346 0 obj << /Length 325 /Filter /FlateDecode >> stream x͓N0 @PK?h Hכ*D$02`~J?c&rNldH^؎{U.+,p'%ΰ:ޠ%On _ K,!C#44~d32DCĚZAO3%,Fb= _&g2dFLdt^c;ȓhMZE=p8}ډݴ1Mt=[liq<3Mu;oϚ0qfUȱ:ؠqZwѻ$D#BHI!ihD W xkD endstream endobj 347 0 obj << /Length 346 /Filter /FlateDecode >> stream x}ѱJ@?lv_@p] !p` A+ RK E;!hM7HqfwO`vv23)Vf0WI%X8=Uk3UqaUASSbmn*Sުvm| 82"7@б, }8$tHIR2>JJ =MT;4[6R׳ā~D}~k.:6ʃHϐDJwk81ۇ=Isz6WBJI7l:ahJ7Cަ85,φkVq< /XYd|vRJJ}I endstream endobj 348 0 obj << /Length 233 /Filter /FlateDecode >> stream x퓱 @ S:Y|]I(>BGLZD''|r7Ѧ;M CA> 0Ym՜՘eTфU8A5!hHpɾe PVr{y%رW Kp,+&uaJNEIM4y0犉%ޭ^ AlH4ȗ6eOE8`| endstream endobj 349 0 obj << /Length 270 /Filter /FlateDecode >> stream xڕJ@'LsL 'BB> stream xڅJ1g"0M!`Dy[ZYZZ(ںy}<•aǙP1|?IO :1H=>cTPc;Ocw!^_[^ʙ;V8?dmgPj\Rq :dĄ* |Vbn;gE d1o( ؁ahDBc!D[o1En %in6N:\Z` æ]H_I<?y뭜 endstream endobj 351 0 obj << /Length 324 /Filter /FlateDecode >> stream xڥ?J@'X&G\@HBL!he!RK E֛L2ɮ9o[,Ƴw565>UU7v1.tqoYKtq ˣ|QђCDF"RcB|&;J e%wpU3B?O|G(^'f ]THد|X9/O8E.> stream x3635Q0Pacc CB.# I$r9yr+Yp{E=}JJS ]  b<]``0f+ɃԂ 0a@\\\٥; endstream endobj 353 0 obj << /Length 107 /Filter /FlateDecode >> stream x3635Q0Pac cCB.#K I$r9yr+Yr{E=}JJS ]  b<]0a\= endstream endobj 354 0 obj << /Length 232 /Filter /FlateDecode >> stream xҽjA W#>WZL+vrp!ET+ -vXqt;';됱j-->xsiNY-gOّy+#CYEI O$Rx%4DJʤn ׮UH@Y$߸Np⧤D@(Ax^ 9Eۄip xviC endstream endobj 355 0 obj << /Length 184 /Filter /FlateDecode >> stream xѱ@ & &]xHLtr0NUy{ጃ zw6d4JBGqlfiG{1+P)QEz@-ibc|!Pi ౮!`{.TV6ߡA_y48+po endstream endobj 356 0 obj << /Length 231 /Filter /FlateDecode >> stream xڵ0kHnЂ0 &2`A3<#02^KL%!_s{I!.qa@CT9 +@P% 7 v+@x0> stream x;0 t#' VbTD$02`nQzT dj20XY陞c+4xRps?aq@iA W<ix=   E^6ɱC:_:Wѫ}O_ /h m Ij^ endstream endobj 358 0 obj << /Length 259 /Filter /FlateDecode >> stream x]1N@4;ۊB$\ Q%ڬ\vY)yTk.拊57 UIJ/Kn6O\k*ybx[~|nXp8HDF#々~7'QȔ^;LKZ+45qj@.dtv!"ieh֔j]dV絳Su ?hgcfKxhGZ endstream endobj 359 0 obj << /Length 186 /Filter /FlateDecode >> stream x3534S0P0R5T01Q07SH1*21 (Cds<L =\ %E\N @QhX.OON2bH$;&=A$3?8HAN7PJ`$H `( E` qzrr:p endstream endobj 360 0 obj << /Length 252 /Filter /FlateDecode >> stream xڅбJ@YR#d^@7l 'BB+RgvE8X>Y؟/Η%YJyN^RaaB> stream xڕ1j@7Xx6l6@RXR%)S$$fB.2Ni!7.V?u~f*U+uW9o(fKUn*< ݖIu>?_dRLjG/zV!C؃@p` 'h'đv3k"t{O<8 F evb883MmH Є̎io“z>Ba"0i5s?hb8T0c00c*Cٻ1 i<8^gvJpi\DXו!) endstream endobj 362 0 obj << /Length 137 /Filter /FlateDecode >> stream x3337W0P04  )\\&f  ,ɥ`bƥU()*Mw pV0wQ6T0tQ```c;0D0I~0Y"I ?&D(I"\=VI endstream endobj 363 0 obj << /Length 301 /Filter /FlateDecode >> stream x}MJ0)YؖG_]x>.]W҅h=Je? گiftߟ ChÞ6 s/\knCs%ux^ߟ\s>k o@B,D'DdZ"-,-B/63"x甙k p7q|$pF暿 dL@AvZHFӬYM5k|,ZdIeb4j`Mg!@Tt`[Bͻ.A8Ew̕bԊW'bt7}t endstream endobj 364 0 obj << /Length 305 /Filter /FlateDecode >> stream xڍN@LJlA gEr&ZY+h=> @IA烋 |gf.K xQz!eY^#[E{_o8_c#>UX>)EৣNGG#"qhfH8fEAEI=-Β%$#쵂H\Wfä hgcgݺi8iZG`s+,25\i`2[[E3)D/bZ1.8G IUuuR:X&oݴ]֯"Mߴo endstream endobj 365 0 obj << /Length 225 /Filter /FlateDecode >> stream xڽнj0 ['Pt!tP2;4qh~?G$C@Bw&,+]po1}R28^~в$IF~{͒/wu|'ܯ8&旘knLM@;&ED-tw>5 pU/jh:؊,PW+D5^ԝhma#:YVp=Dӊb~9ag/uwiS]]q endstream endobj 369 0 obj << /Length 136 /Filter /FlateDecode >> stream x323P0PP5T02P04PH1*24(YBs< =\ %E\N @QhX.O9   fv6> $'W  ' endstream endobj 370 0 obj << /Length 257 /Filter /FlateDecode >> stream xuбj0d=A-pHRB;u(@19G#d`d |' 󟖋;}O5\RQ`ȻO}c~[zIc%a,D!Q$mbG2bWh*^jL/.i AjS]3}`qd;<z<ĠuH> stream x33г4R0P0bSs3 CB.S HrW05r{*r;8+r(D*ry(*P 2C@,dBPBՃ)A0@\=R endstream endobj 372 0 obj << /Length 229 /Filter /FlateDecode >> stream xuϱJAba yh+RPK E;1 tƽpS|?;?xžjs3TC=-r+SrgkkrKyrM͒a{ծlB-`a:`u)xuwGW2&e˯ɦnh huaǨk} [ bԪob"EzONoɌla endstream endobj 373 0 obj << /Length 203 /Filter /FlateDecode >> stream xڝ 0OKдv vtrAPGAEA0G#8:ANȹ-Lp;"dJ Z_V[UglJ#IWc>NҽIs-0pu@܀_x vZհu/{#ҡ^EA^UzN4 E A2;Wa V4'VhLr endstream endobj 374 0 obj << /Length 210 /Filter /FlateDecode >> stream xu1j0g<7 41'z(S$ MHXGQ|JW\(T 7uN3uki1}.Gq%Cf&u#U])Yϧz\R׹fi WOp_PI! I@*#f%#~,K{ǏT#,ΰq`(nYsLޖF^V2 endstream endobj 375 0 obj << /Length 125 /Filter /FlateDecode >> stream x323P0P0b#S3sCB.#C I$r9yr+r{E=}JJS. @-\. ? :  .WO@.P endstream endobj 376 0 obj << /Length 110 /Filter /FlateDecode >> stream x323P0P0b#S3KCB.#C I$r9yr+r{E=}JJS. @-\. ? C 1cqzrrp^ endstream endobj 377 0 obj << /Length 159 /Filter /FlateDecode >> stream x3534W0P0bSCCB. HrW01r{*r;8+r(D*ry(0a@R` `$@z ɀ a/ m?C&\=?qjS endstream endobj 378 0 obj << /Length 209 /Filter /FlateDecode >> stream xڝ= @GR2MtbSZYZZ(ډr2EH|((v̛ݝGa_ endstream endobj 379 0 obj << /Length 218 /Filter /FlateDecode >> stream xڭн0 p[*y#4"t7p  }4бCHpH'n[~8{`zz9> stream x36׳4R0P0a3CB.c HrW06r{*r;8+r(D*ry(0`?l(g?6g u@lC{ pP endstream endobj 381 0 obj << /Length 213 /Filter /FlateDecode >> stream xMͱN@б\DTd""R.HE) h!kfg:[\ꗺXS)Ks"Z;׌oY2=7Ro0ͬ&a8YZi4 %:1X[z83L̺E[y!8}?+O2dWtm8 \\ղuY endstream endobj 382 0 obj << /Length 160 /Filter /FlateDecode >> stream x36׳4R0P0R5T06V03TH1*26PA3#Lr.'~PKW4K)YKE!P Ea9$luPفX$N#Ccagc{  00?r Jm endstream endobj 383 0 obj << /Length 162 /Filter /FlateDecode >> stream x1 @ᷤL fqC@Vb--+'Gˑ<@Ⱥ!X l3pjZ>DŽm:L#c^[z?.6 6KNJV- -reByDz 7U}`(D,uxI0nҷWR hhKob endstream endobj 384 0 obj << /Length 207 /Filter /FlateDecode >> stream xڽ P FҡмVn?`A'qRGE7f}>BŚނ*3$|9VuQۀ}+5͞1%kTڤ|18Ux*%V738 \A&rOP deyܿ>X ?c\%#'q(IfNĴ) endstream endobj 385 0 obj << /Length 259 /Filter /FlateDecode >> stream x]J@Of!"." E0pA.Z v |˝gH0??pNNmnҮwYUϹ勧7wk"nssa q[{_AꭅBaD4%;>#p{%*édlW]HO˷df 3ÂױtK҇FoMfl=o,"E"pLΉ~WhFF*4& !3DWZnvj endstream endobj 386 0 obj << /Length 257 /Filter /FlateDecode >> stream xmJ0'y h[ 'i((ysƙ$;dfjj5u=5mMrPٿf~jg6wW`G*`Z@y`5@N08F  xP f͡HmVJ[\8 )qYTN KJ8L3#ęgDUk-2gB8&%1Dw>vq endstream endobj 387 0 obj << /Length 206 /Filter /FlateDecode >> stream xڥj@@CkB  A GAẸMb/hffӱZ'd?$u{<l(潽x3\h*fTK> stream xՔN0/y  m KHd@*bFHݒG2vjEb&C˫R\b"k?Q.;V<{gw4γ^|}~lv3vQ5@dֺȴG`̷dQbB\"dW '1)Pl$b.D9hbYp>bP:`VES`tLt93)| bv GNs@9dSL8:p 1¸ ePQJngCʋ9R@(o!DEiMaZj$M؟|hfjcÕ[BK^~i+8j endstream endobj 392 0 obj << /Length 233 /Filter /FlateDecode >> stream xڳ437R0PaSK CB.s3 I$r9yr+q{E=}JJS ]  b<]>@?7@Y - DBX`,v8bƪ@3nfd_b?̰⇇<`,x> stream xڕѽN0> stream xڵJ@%4y˼nn p` A+ J--PB\_SE;%_tB=ܵlkouLn}{ ?T\n0`Bh§"( v3,rV (R0(Z1̾?^3A RW^SML j3)0}1F3f liX6e*yX i}lM󣫖 S-zY endstream endobj 395 0 obj << /Length 267 /Filter /FlateDecode >> stream xڝJ1'lq0޼fpVb]hy}-86L /;q5%QwFO-kHfr;r +ZoyaC 2i寙5z>%k<&r,`vd+q3ߒ1^+ \oxE<@G*q/|Aoٸ=,8U(`ش fA-pڟڤPj"{mI倷YR endstream endobj 396 0 obj << /Length 351 /Filter /FlateDecode >> stream xڭJ0ǧȥº=z =umr!4LRuDg^W4;(M}h-ԣKCQ\jժԥ*NѮ̼<ޫbu~lX)U6_GzahB t ]2G6Da)hrcfEA1-?pλճ I}҈6ĥPgOn ܘ'+tc036u! 蒡AM"9%} |H=X9ZHv]ϽmE=LQVgq)ϜRT7D]n cƒ|M'b<%NZu>v endstream endobj 397 0 obj << /Length 279 /Filter /FlateDecode >> stream x=J@ )2'p2Dl +BB\K E;qy^a2E33EdȼҥOumYꭥA +]Ȝc2͹~z|#8іF_[]PI%ae,*=c<<6F< ӉY+ _ ^Lubފq,?vMectJAqO8:G}- ȘKH~cD='0t[g7׏iC endstream endobj 398 0 obj << /Length 191 /Filter /FlateDecode >> stream x3531T0P0R5T01UPH1*21 (XXBds<L=\ %E\N \. @b<] @>dF"ّH~$RLڃz0D2I@D1aL``n@'03H~`c1(l@A(8\=~@ endstream endobj 403 0 obj << /Producer (pdfTeX-1.40.22) /Creator (TeX) /CreationDate (D:20240430231753-04'00') /ModDate (D:20240430231753-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2022/dev/Debian) kpathsea version 6.3.4/dev) >> endobj 17 0 obj << /Type /ObjStm /N 76 /First 647 /Length 4297 /Filter /FlateDecode >> stream xڵ[]s븑}ׯÐ@7>Rsg'&5}غwkrjs$(ْS6)Nn43u9vߘ:G\ΧQ]b?'ΚdV̝%;ـ2>v6%ԈjluAM;ds "7d N~qߣyO}ec} ?m~uN C|\=nֻwݦdžFO_҇ۓ~p_=7ϻp}yn۰nLJ pEOۧn>h{[_??߭wç 7krv) :24G&\o77c?|Jt8}ټŲ>1ؽ% E#=2Ncq{{`!㯥?-r辦k+E4-4a~ Q}(~{ q5z^\a~y]_ׂcʟDk]v5.19 SOEI]f zCK]衛jM2 P^1Cz!{䚓̰NЪx@{Q|n9Y9ŬE($XJ=Y$2OehK u}$!S?95}uN=8L0R>>OJkgLE\0en@z', H$iDZ!MaOpE9I=VJMԖ3ӌ4:f0i|`NC >pQ' lEܖ{i-Ș8ŜG W48 my",".tP9j*VL_jkwY[L \ 2-WZ\ũu˝S3?m^(}xusEنkꀢ尝k6C9q^r ؋w1A]hp1Yݗp֘_G,M䀌pS^lq>is˝j-SgsjG'yIIgzقs=6LX^\kJS\ rqN%9L [Sh&<Ll6.>x}9wN|iWWXpߚK"Ԛ3uᆩGpos0}|i Fl<aۡh%8ڈUO(,@5'Nq3Q7WC9i9F~-X :@̻#/TC}2(v[2V5GTfu9i7U-+\:U-yA ]zV+ѡy6:lk^ѹK ::ĤDYETQu D,(x$J=77UWUO,6ɨK;IiHV_/Z_mCQkfohfohf怕 ެ7(:Jzެ8ueBFYǐQAdrhPʡAu0J# y(K1d>9tޏSЍenA@"s8XB'psq%y͸tᐯY.B)F}W6_->j]T$LVaI*.P T&jbE&QVA7W vJVE=UaOL:I>1p[VϤXJ{:IG80fcu+*_qPPSF?e/ɽRBq84a|ZS藁("OY4aqJ=4MPeLajzۃ5/4J vEn٫,GW6KŮsP[gEOxK͕) ^U(xUUe%+TrC@49k^pk-^ x({a4'/^$q;Iܢ2ۖ8h߈Noqx& Bfª dbNqF1I:ŧ"2NU[ӟwrM=SYnyfLI7Jzs9*.sHAK1CDG_ M$_ƞImqs*$PQm%j Fy *Ԋڮf]ň.2.k (k 拷ycBPszz#gc Ipؙ&3m8Ǟ_ /|rVxݨs2 6.u-?uuT)IJR7pҗ߲s7|YG?p> />;qV\ґw#>z{+P) endstream endobj 404 0 obj << /Type /XRef /Index [0 405] /Size 405 /W [1 3 1] /Root 402 0 R /Info 403 0 R /ID [<37099E5BDDFB7C1929BEE8C3E3376AB3> <37099E5BDDFB7C1929BEE8C3E3376AB3>] /Length 1186 /Filter /FlateDecode >> stream x%wxgbň+h$IHB$A&bW{oBЪ5jlk/5:ZjqQU~>9sg99Ԝ=㜿 gΕ򾦋f"I4 E=)D)fyEBSg() (l.\P:l-dn^"R!5D͆s;a &4phYҽDqQ\pY)QZK DyMCj= cdв*/5z m7A;mYp:r!g<mTE%s3e%t ݒz^ >S l3aX<(C3aX--(F(#Ë`x˜;0q cwu_i ,+0尷ꢆ27u;{Dmif^σYa8s;au Zžh,~(QoꍷNXiRNoxw7V)5`yXw_ J*~w:"DpanҸ%"8>P>?R|\Lh۔`p)ةDEk-)<}{a=Lz2p6LBP>|}gOHa:- *Чp*;V}+;=3ꀳ"~^Aja\Tj/.T?.oOJflWpS$k?}xpIUE<ʁtzTxJ 0j|:AveCRP_Kh(V4Z魄OJ>;CceAP, gRQDH0 5 JuZu\kAtդ,6)3,8DB -+ԥ-+"C$=cQ\AdC=VAk ) Dn"Q41K<@f)šjhS4˨ sbЂ,Xj)dkGmG[{:(wO)YKIYXZcݩ:A]YOn 륙{+[}bOI]lKH5 %՚Tf6'SGHEw=z U>'yeL%Zyg]rG[? endstream endobj startxref 101085 %%EOF ctc/inst/doc/ctc.R0000644000175100017510000000317114614332141014762 0ustar00biocbuildbiocbuild### R code from vignette source 'ctc.Rnw' ################################################### ### code chunk number 1: ctc.Rnw:45-48 ################################################### data(USArrests) h = hclust(dist(USArrests)) plot(h) ################################################### ### code chunk number 2: ctc.Rnw:51-52 ################################################### heatmap(as.matrix(USArrests)) ################################################### ### code chunk number 3: ctc.Rnw:61-63 ################################################### library(ctc) r2xcluster(USArrests,file='USArrests_xcluster.txt') ################################################### ### code chunk number 4: ctc.Rnw:66-67 ################################################### r2cluster(USArrests,file='USArrests_xcluster.txt') ################################################### ### code chunk number 5: ctc.Rnw:92-94 ################################################### hr = hclust(dist(USArrests)) hc = hclust(dist(t(USArrests))) ################################################### ### code chunk number 6: ctc.Rnw:101-102 ################################################### write(hc2Newick(hr),file='hclust.newick') ################################################### ### code chunk number 7: ctc.Rnw:106-109 ################################################### r2atr(hc,file="cluster.atr") r2gtr(hr,file="cluster.gtr") r2cdt(hr,hc,USArrests ,file="cluster.cdt") ################################################### ### code chunk number 8: ctc.Rnw:113-114 ################################################### hclust2treeview(USArrests,file="cluster.cdt") ctc/inst/doc/ctc.Rnw0000644000175100017510000000732114614230663015336 0ustar00biocbuildbiocbuild% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- % building this document: (in R) Sweave ("ctc.Rnw") \documentclass[a4paper]{article} \title{Ctc Package} \author{Antoine Lucas} \SweaveOpts{echo=FALSE} %\usepackage{a4wide} %\VignetteIndexEntry{Introduction to ctc} %\VignettePackage{ctc} \usepackage{url} \begin{document} \maketitle \tableofcontents \section{Overview} {\tt Ctc} package provides several functions for conversion. Specially to export and import data from Xcluster\footnote{\url{http://genome-www.stanford.edu/~sherlock/cluster.html}} or Cluster\footnote{http://rana.lbl.gov/EisenSoftware.htm} software (very used for Gene's expression analysis), and to export clusters to TreeView or Freeview visualization software. \section{Aim} \begin{itemize} \item To explore clusters made by Xcluster and Cluster . \item To cluster data with Xcluster (it requires very low memory usage) and analyze the results with R. Warning: results are not exactly the same as hclust results with R. \end{itemize} \section{Usage} Standard way of building a hierarchical clustering with R is with this command: %<>= <>= data(USArrests) h = hclust(dist(USArrests)) plot(h) @ Or for the ``heatmap'': <>= heatmap(as.matrix(USArrests)) @ \subsection{Building hierarchical clustering with another software} We made these tools \begin{description} \item[r2xcluster] Write data table to Xcluster file format <>= library(ctc) r2xcluster(USArrests,file='USArrests_xcluster.txt') @ \item[r2cluster] Write data table to Cluster file format <>= r2cluster(USArrests,file='USArrests_xcluster.txt') @ \item[xcluster] Hierarchical clustering (need Xcluster tool by Gavin Sherlock) \begin{verbatim} > h.xcl=xcluster(USArrests) > plot(h.xcl) \end{verbatim} It is roughtly the same as \begin{verbatim} > r2xcluster(USArrests,file='USArrests_xcluster.txt') > system('Xcluster -f USArrests_xcluster.txt -e 0 -p 0 -s 0 -l 0') > h.xcl=xcluster2r('USArrests_xcluster.gtr',labels=TRUE) \end{verbatim} \item[xcluster2r] Importing Xcluster/Cluster output \end{description} \subsection{Using other visualization softwares} We now consider that we have an object of the type produced by 'hclust' (or a hierarchical cluster imported with previous functions) like: <>= hr = hclust(dist(USArrests)) hc = hclust(dist(t(USArrests))) @ \begin{description} \item[hc2Newick] Export hclust objects to Newick format files <>= write(hc2Newick(hr),file='hclust.newick') @ \item[r2gtr,r2atr,r2cdt] Export hclust objects to Freeview or Treeview visualization softwares <>= r2atr(hc,file="cluster.atr") r2gtr(hr,file="cluster.gtr") r2cdt(hr,hc,USArrests ,file="cluster.cdt") @ \item[hclust2treeview] Clustering and Export hclust objects to Freeview or Treeview visualization softwares <>= hclust2treeview(USArrests,file="cluster.cdt") @ \end{description} \section{See Also} Theses examples can be tested with command {\tt demo(ctc)}.\\ \noindent All functions has got man pages, try {\tt help.start()}.\\ \noindent Ctc aims to interact with other softwares, some of them: \begin{description} \item[xcluster] made by Gavin Scherlock, http://genome-www.stanford.edu/\~\/sherlock/cluster.html \item[Cluster, Treeview] made by Michael Eisen, http://rana.lbl.gov/EisenSoftware.htm \item[Freeview] made by Marco Kavcic and Blaz Zupan, http://magix.fri.uni-lj.si/freeview \end{description} \noindent If you want to cite amap or ctc in a publication, use~: Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. \end{document} ctc/man/0000755000175100017510000000000014614230663013123 5ustar00biocbuildbiocbuildctc/man/hc2Newick.Rd0000644000175100017510000000164214614230663015232 0ustar00biocbuildbiocbuild\name{hc2Newick} \alias{hc2Newick} \title{Convert hclust objects to Newick format files} \description{ Convert hclust objects to Newick format files. } \usage{ hc2Newick(hc, flat=TRUE) } \arguments{ \item{hc}{a \code{hclust} object (as returned by the function \code{hclust} in the package \code{stats})} \item{flat}{a boolean (see section value).} } \value{ If \code{flat=TRUE} the result is a string (that you can write in a file). If \code{flat=FALSE} the result is a list (of lists). Each list is consituted of the elements \code{left}, \code{right} and \code{dist}. } \examples{ data(USArrests) h = hclust(dist(USArrests)) write(hc2Newick(h),file='hclust.newick') } \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \author{ Laurent (laurent@cbs.dtu.dk) } \keyword{manip} \keyword{cluster} ctc/man/hclust2treeview.Rd0000644000175100017510000000334014614230663016551 0ustar00biocbuildbiocbuild\name{hclust2treeview} \alias{hclust2treeview} \title{Hierarchical clustering and treeview export} \description{ This function compute hierachical clustering with function hcluster and export cluster to treeview files format. } \usage{ hclust2treeview(x,file="cluster.cdt",method = "euclidean",link = "complete",keep.hclust=FALSE) } \details{This function producte all 3 files needed by treeview, with extentions: cdt, gtr, atr.} \arguments{ \item{x}{numeric matrix or a data frame or an object of class "exprSet".} \item{file}{File name of export file.} \item{method}{the distance measure to be used. This must be one of \code{"euclidean"}, \code{"maximum"}, \code{"manhattan"}, \code{"canberra"} \code{"binary"} \code{"pearson"}, \code{"correlation"} or \code{"spearman"}. Any unambiguous substring can be given.} \item{link}{the agglomeration method to be used. This should be (an unambiguous abbreviation of) one of \code{"ward"}, \code{"single"}, \code{"complete"}, \code{"average"}, \code{"mcquitty"}, \code{"median"} or \code{"centroid"}.} \item{keep.hclust}{if TRUE: function returns a list of 2 objects of class hclust} } \value{ if keep.hclust = FALSE, function return 1. else function returns 2 objects of class hclust, first: hierachical clustering by rows, second: hierarchical clustering by columns } \author{Antoine Lucas, \url{http://mulcyber.toulouse.inra.fr/projects/amap/}} \seealso{\code{\link[stats]{hclust}}} \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \examples{ data(USArrests) hclust2treeview(USArrests,file="cluster.cdt") } \keyword{cluster} ctc/man/r2cluster.Rd0000644000175100017510000000554214614230663015345 0ustar00biocbuildbiocbuild\name{r2cluster} \alias{r2cluster} \title{Write to Cluster file format} \description{Converting data to Cluster format} \usage{ r2cluster(data,labels=FALSE,colname="ACC",description=FALSE, file="cluster.txt",dec='.') } \arguments{ \item{file}{the path of the file} \item{data}{a matrix (or data frame) which provides the data to put into the file} \item{labels}{a logical value indicating whether we use the frist column as labels (ACC column in cluster file)} \item{colname}{a character string indicating what kind of objects are in each row. YORF, MCLID, CLID, ACC can be used: see details. } \item{description}{a logical value indicating whether we use the second column as description (NAME column for cluster file)} \item{dec}{the character used in the file for decimal points} } \details{ Software \emph{Cluster}, made by \emph{M. Eisen} needs formatted input data like: \preformatted{ ACC NAME GWEIGHT GORDER V3 V4 V5 EWEIGHT 1 1 1 gbk01 Gene1 1 1 0.9 0.4 1.4 gbk02 Gene2 1 2 0.6 0.2 0.2 gbk03 Gene3 1 3 1.6 1.1 0.9 gbk04 Gene4 1 4 0.4 1 1 } First field of first line (i.e "ACC") is a special field, that tells program what kind of objects are in each row. Four special values are defined with web link (when visualize with TreeView): \itemize{ \item YORF \url{http://genome-www.stanford.edu/cgi-bin/dbrun/SacchDB?find+Locus+\%22UNIQID\%22} \item MCLID \url{http://genome.rtc.riken.go.jp/cgi-bin/getseq?g+R+UNIQID} \item CLID \url{http://genome-www4.stanford.edu/cgi-bin/SMD/source/sourceRes\-ult?op\-tion=CloneID&criteria1=IMAGE:UNIQID&choice=cDNA} \item ACC \url{http://genome-www4.stanford.edu/cgi-bin/SMD/source/sourceRes\-ult?op\-tion=Number&criteria=UNIQID&choice=cDNA} } Line begining with \code{EWEIGHT} gives weights for each column (variable). Column \code{GWEIGHT} gives weights for each line (individuals). } \note{ \emph{Cluster} is a program made by \emph{M. Eisen} that performs hierarchical clustering, K-means and SOM. \emph{Cluster} is copyrighted. To get or have information about \emph{Cluster}: \url{http://rana.lbl.gov/EisenSoftware.htm} } \examples{ # Create data set.seed(1) m <- matrix(rep(1,3*24),ncol=3) m[9:16,3] <- 3 ; m[17:24,] <- 3 #create 3 groups m <- m+rnorm(24*3,0,0.5) #add noise m <- floor(10*m)/10 #just one digits r2cluster(m) } \keyword{file} \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \author{Antoine Lucas, \url{http://antoinelucas.free.fr/ctc}} \seealso{\code{\link{xcluster}}, \code{\link{r2xcluster}}, \code{\link[stats]{hclust}}} ctc/man/r2gtr.Rd0000644000175100017510000000416414614230663014457 0ustar00biocbuildbiocbuild\name{r2gtr} \alias{r2gtr} \alias{r2atr} \alias{r2cdt} \title{Write to gtr, atr, cdt file format} \description{Write data frame and hclust object to gtr atr, cdt files (Xcluster or Cluster output). Visualisation of cluster can be done with tools like treeview} \usage{ r2gtr(hr,file="cluster.gtr",distance=hr$dist.method,dec='.',digits=5) r2atr(hc,file="cluster.atr",distance=hc$dist.method,dec='.',digits=5) r2cdt(hr,hc,data,labels=FALSE,description=FALSE,file="cluster.cdt",dec='.') } \details{Function \code{\link{hclust2treeview}} compute hierarchical clustering and export to all files at once.} \arguments{ \item{file}{the path of the file} \item{data}{a matrix (or data frame) which provides the data to put into the file} \item{hr,hc}{objects of class hclust (rows and columns)} \item{distance}{The distance measure used. This must be one of `"euclidean"', `"maximum"', `"manhattan"', `"canberra"' or `"binary"'. Any unambiguous substring can be given.} \item{digits}{number digits for precision} \item{labels}{a logical value indicating whether we use the frist column as labels (NAME column for cluster file)} \item{description}{a logical value indicating whether we use the second column as description (DESCRIPTION column for cluster file)} \item{dec}{the character used in the file for decimal points} } \examples{ # Create data set.seed(1) m <- matrix(rep(1,3*24),ncol=3) m[9:16,3] <- 3 ; m[17:24,] <- 3 #create 3 groups m <- m+rnorm(24*3,0,0.5) #add noise m <- floor(10*m)/10 #just one digits # use library stats # Cluster columns hc <- hclust(dist(t(m))) # Cluster rows hr <- hclust(dist(m)) # Export files r2atr(hc,file="cluster.atr") r2gtr(hr,file="cluster.gtr") r2cdt(hr,hc,m ,file="cluster.cdt") } \keyword{cluster} \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \author{Antoine Lucas, \url{http://antoinelucas.free.fr/ctc}} \seealso{\code{\link{r2xcluster}}, \code{\link{xcluster2r}},\code{\link[stats]{hclust}},\code{\link[amap]{hcluster}}} ctc/man/r2xcluster.Rd0000644000175100017510000000424114614230663015530 0ustar00biocbuildbiocbuild\name{r2xcluster} \alias{r2xcluster} \title{Write to Xcluster file format} \description{Converting data to Xcluster format} \usage{ r2xcluster(data,labels=FALSE,description=FALSE,file="xcluster.txt") } \arguments{ \item{file}{the path of the file} \item{data}{a matrix (or data frame) which provides the data to put into the file} \item{labels}{a logical value indicating whether we use the frist column as labels (NAME column for xcluster file)} \item{description}{a logical value indicating whether we use the second column as description (DESCRIPTION column for cluster file)} } \note{ \emph{Xcluster} is a C program made by \emph{Gavin Sherlock} that performs hierarchical clustering, K-means and SOM. \emph{Xcluster} is copyrighted. To get or have information about \emph{Xcluster}: \url{http://genome-www.stanford.edu/~sherlock/cluster.html} } \details{ Software \emph{Xcluster}, made by \emph{G. Sherlock} needs formatted input data like: \preformatted{ NAME DESCRIPTION GWEIGHT V2 V3 V4 EWEIGHT 1 1 1 gbk01 Gene1 1 0.9 0.4 1.4 gbk02 Gene2 1 0.6 0.2 0.2 gbk03 Gene3 1 1.6 1.1 0.9 gbk04 Gene4 1 0.4 1 1 } Line begining with \code{EWEIGHT} gives weights for each column (variable). Column \code{GWEIGHT} gives weights for each line (individuals). } \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \examples{ ## Create data set.seed(1) m <- matrix(rep(1,3*24),ncol=3) m[9:16,3] <- 3 ; m[17:24,] <- 3 #create 3 groups m <- m+rnorm(24*3,0,0.5) #add noise m <- floor(10*m)/10 #just one digits r2xcluster(m) ## And once you have Xcluster program: \dontrun{ system('Xcluster -f xcluster.txt -e 0 -p 0 -s 0 -l 0') h <- xcluster2r('xcluster.gtr') plot(h,hang=-1) } } \keyword{file} \author{Antoine Lucas, \url{http://antoinelucas.free.fr/ctc}} \seealso{\code{\link{xcluster}}, \code{\link{xcluster2r}}, \code{\link[stats]{hclust}}, \code{\link[amap]{hcluster}}} ctc/man/read.eisen.Rd0000644000175100017510000000447614614230663015442 0ustar00biocbuildbiocbuild\name{read.eisen} \alias{read.eisen} \title{Read expression data from a file formatted for Eisen clustering} \description{ The input for Eisen-clustering is a slight variation of a tab delimited file. This method reads the expression data from such files as a matrix and provides optional additional information on the experiments as attributes. } \usage{ read.eisen(file,sep="\t",dec=".", format.check = TRUE) } \arguments{ \item{file}{The relative or absolute path to the file to be read, as internally forwarded to the read.table function. } \item{sep}{Separator of fields, passed on to read.table. } \item{dec}{Passed on to read.table. This is particulary helpful for the interpretation of data from localised spreadsheet programs.} \item{format.check}{TRUE or FLASE: to disable file format check.} } \details{ The software of Michael Eisen and its plain tab separated format for the presentation of gene expression data prior to their clustering is supported by many hard- and software providers, both as an input for their tools and as resulting from the analysis and normalisation of the chip images. To be able to read and write this format, the Bioconductor suite is enabled to easily reanalyse or extend older experiments that might have been analysed with the Eisen tools before. } \value{ A numerical matrix is returned. It is a complete analogue of the Eisen-format, except the descriptions, weights and other information being passed to attributes. The first row will be the column names, the first column will be the respective row name. A second row that has a first empty field is referred to via the attribute "second.row". A column NAME is stored in the attribute "NAME". } \author{Steffen Moeller} \references{Michael Eisen Lab http://rana.lbl.gov/ Michael Hoon's Cluster 3.0 http://bonsai.ims.u-tokyo.ac.jp/~mdehoon/software/cluster/ Eisen M.B., P.T. Spellman, P.O. Brown, and D. Botstein. 1998. Cluster analysis and display of genome-wide expression patterns. /Proc. Natl. Acad. Sci. USA /, 95:14863-14868. De Hoon M.J.L., S. Imoto, J. Nolan, and S. Miyano. Open source clustering software. Bioinformatics *20* (9): 1453--1454 (2004). Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \keyword{cluster} ctc/man/xcluster.Rd0000644000175100017510000001022514614230663015263 0ustar00biocbuildbiocbuild\name{xcluster} \alias{xcluster} \title{Hierarchical clustering} \description{Performs a hierarchical cluster analysis on a set of dissimilarities (this function launch an external program: Xcluster).} \usage{ xcluster(data,distance="euclidean",clean=FALSE,tmp.in="tmp.txt",tmp.out="tmp.gtr") } \arguments{ \item{data}{a matrix (or data frame) which provides the data to analyze} \item{distance}{The distance measure used with \emph{Xcluster}. This must be one of \code{"euclidean"}, \code{"pearson"} or \code{"notcenteredpearson"}. Any unambiguous substring can be given.} \item{clean}{a logical value indicating whether you want the true distances (\code{clean=FALSE}), or you want a clean dendrogram} \item{tmp.in, tmp.out}{temporary files for Xcluster} } \details{ Available distance measures are (written for two vectors \eqn{x} and \eqn{y}): \itemize{ \item Euclidean: Usual square distance between the two vectors (2 norm). \item Pearson: \eqn{1- \mbox{cor}(x,y)}{1 - cor(x,y)} \item Pearson not centered: \eqn{1 - \frac{\sum_i x_i y_i}{\left(\sum_i x_i^2 \sum_i y_i^2 \right) ^{1/2}} }{1 - [ sum x_i y_i ] / sqrt[ sum x_i^2 * sum y_i^2 ] } } Xcluster does not use usual agglomerative methods (single, average, complete), but compute the distance between each groups' barycenter for the distance between two groups. This have a problem for this kind of data: \tabular{rll}{ A \tab 0 \tab 0\cr B \tab 0 \tab 1\cr C \tab 0.9 \tab 0.5\cr } Ie: a triangular in \bold{R}\eqn{^2}, the distance between A and B is larger than the distance between the group A,B and C (with euclidean distance). For that case it can be useful to use \code{clean=TRUE} and that mean that you must not consider A and B as a group without C. } \value{ An object of class \bold{hclust} which describes the tree produced by the clustering process. The object is a list with components: \item{merge}{an \eqn{n-1} by 2 matrix. Row \eqn{i} of \code{merge} describes the merging of clusters at step \eqn{i} of the clustering. If an element \eqn{j} in the row is negative, then observation \eqn{-j} was merged at this stage. If \eqn{j} is positive then the merge was with the cluster formed at the (earlier) stage \eqn{j} of the algorithm. Thus negative entries in \code{merge} indicate agglomerations of singletons, and positive entries indicate agglomerations of non-singletons.} \item{height}{a set of \eqn{n-1} non-decreasing real values. The clustering \emph{height}: that is, the value of the criterion associated with the clustering \code{method} for the particular agglomeration.} \item{order}{a vector giving the permutation of the original observations suitable for plotting, in the sense that a cluster plot using this ordering and matrix \code{merge} will not have crossings of the branches.} \item{labels}{labels for each of the objects being clustered.} \item{call}{the call which produced the result.} \item{method}{the cluster method that has been used.} \item{dist.method}{the distance that has been used to create \code{d} (only returned if the distance object has a \code{"method"} attribute).} } \note{ \emph{Xcluster} is a C program made by \emph{Gavin Sherlock} that performs hierarchical clustering, K-means and SOM. \emph{Xcluster} is copyrighted. To get or have information about \emph{Xcluster}: \url{http://genome-www.stanford.edu/~sherlock/cluster.html} } \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \examples{ # Create data set.seed(1) m <- matrix(rep(1,3*24),ncol=3) m[9:16,3] <- 3 ; m[17:24,] <- 3 #create 3 groups m <- m+rnorm(24*3,0,0.5) #add noise m <- floor(10*m)/10 #just one digits # And once you have Xcluster program: # #h <- xcluster(m) # #plot(h) } \keyword{cluster} \author{Antoine Lucas, \url{http://mulcyber.toulouse.inra.fr/projects/amap/}} \seealso{\code{\link{r2xcluster}}, \code{\link{xcluster2r}},\code{\link[stats]{hclust}}, \code{\link[amap]{hcluster}}} ctc/man/xcluster2r.Rd0000644000175100017510000000465214614230663015536 0ustar00biocbuildbiocbuild\name{xcluster2r} \alias{xcluster2r} \title{Importing Xcluster/Cluster output} \description{Converting Xcluster/Cluster output (.gtr or .atr) to R hclust file} \usage{ xcluster2r(file,distance="euclidean",labels=FALSE,fast=FALSE,clean=FALSE, dec='.') } \arguments{ \item{file}{the path of a \emph{Xcluster/Cluster} file (.gtr or .atr)} \item{distance}{The distance measure used with \emph{Xcluster/Cluster}. This must be one of \code{"euclidean"}, \code{"pearson"} or \code{"notcenteredpearson"}. Any unambiguous substring can be given.} \item{labels}{a logical value indicating whether we use labels values (in the .cdt file) or not.} \item{fast}{a logical value indicating whether we reorganize data like R (\code{Fast=FALSE}) or we let them like \emph{Xcluster/Cluster} did} \item{clean}{a logical value indicating whether you want the true distances (\code{clean=FALSE}), or you want a clean dendrogram (see details below).} \item{dec}{the character used in the file for decimal points} } \details{ See \bold{xcluster} for more details. } \value{ An object of class \bold{hclust} which describes the tree produced by the clustering process. } \note{ \emph{Xcluster} is a C program made by \emph{Gavin Sherlock} that performs hierarchical clustering, K-means and SOM. \emph{Xcluster} is copyrighted. To get or have information about \emph{Xcluster}: \url{http://genome-www.stanford.edu/~sherlock/cluster.html} \emph{Cluster} is a program made by \emph{Michael Eisen} that performs hierarchical clustering, K-means and SOM. \emph{Cluster} is copyrighted. To get or have information about \emph{Cluster}: \url{http://rana.lbl.gov/EisenSoftware.htm} } \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \examples{ # Create data set.seed(1) m <- matrix(rep(1,3*24),ncol=3) m[9:16,3] <- 3 ; m[17:24,] <- 3 #create 3 groups m <- m+rnorm(24*3,0,0.5) #add noise m <- floor(10*m)/10 #just one digits r2xcluster(m) # And once you have Xcluster program: # #system('Xcluster -f xcluster.txt -e 0 -p 0 -s 0 -l 0') #h <- xcluster2r('xcluster.gtr') #plot(h,hang=-1) } \keyword{file} \author{Antoine Lucas, \url{http://mulcyber.toulouse.inra.fr/projects/amap/}} \seealso{\code{\link{xcluster}}, \code{\link{r2xcluster}}, \code{\link[stats]{hclust}}, \code{\link[amap]{hcluster}}} ctc/NAMESPACE0000644000175100017510000000016114614230663013565 0ustar00biocbuildbiocbuild export(hc2Newick,hclust2treeview,r2cdt,r2atr,r2gtr,r2cluster,r2xcluster, read.eisen,xcluster,xcluster2r) ctc/R/0000755000175100017510000000000014614230663012551 5ustar00biocbuildbiocbuildctc/R/hc2Newick.R0000644000175100017510000000166414614230663014520 0ustar00biocbuildbiocbuildhc2Newick <- function(hc, flat=TRUE) { dist <- 0 if (is.null(hc$labels)) labels <- seq(along=hc$order) else labels <- hc$labels putparenthesis <- function(i) { ## recursive function ## i: index of row in hc$merge j <- hc$merge[i, 1] k <- hc$merge[i, 2] if (j < 0) { left <- labels[-j] if (k > 0) dist <- hc$height[i] - hc$height[k] else dist <- hc$height[i] } else { left <- putparenthesis(j) } if (k < 0) { right <- labels[-k] if (j > 0) dist <- hc$height[i] - hc$height[j] else dist <- hc$height[i] } else { right <- putparenthesis(k) } if (flat) return(paste("(", left, ":", dist/2, ",", right, ":", dist/2, ")", sep="")) else return(list(left=left, right=right, dist=dist)) } n <- putparenthesis(nrow(hc$merge)) if (flat) n <- paste(n, ";", sep="") return(n) } ctc/R/hclust2treeview.R0000644000175100017510000000147214614230663016037 0ustar00biocbuildbiocbuildhclust2treeview <- function(x,file="cluster.cdt",method = "euclidean", link = "complete",keep.hclust=FALSE) { if("amap" %in% .packages(all=TRUE)) { hr <- hcluster (x,method =method, link=link) hc <- hcluster (t(x),method =method, link=link) } else { hr <- hclust(dist(x,method =method), method=link) hc <- hclust(dist(t(x),method =method), method=link) } basefile = strsplit(file,"\\.")[[1]] if(length(basefile>1)) basefile = paste(basefile[-length(basefile)],collapse=".") r2atr(hc,file=paste(basefile,".atr",sep="")) r2gtr(hr,file=paste(basefile,".gtr",sep="")) r2cdt(hr,hc,x ,file=paste(basefile,".cdt",sep="")) if(keep.hclust) return(list(hr,hc)) else return(1) } ctc/R/r2cdt.R0000644000175100017510000000444514614230663013721 0ustar00biocbuildbiocbuildr2cdt <- function(hr,hc,data,labels=FALSE,description=FALSE,file="cluster.cdt",dec="."){ #------------------------------------------------------- # # Created : 20/11/02 # Last Modified : Time-stamp: <2003-07-22 16:52:28 lucas> # # Description : Write data object to cdt # file (Xcluster or Cluster output). # Should be use with r2gtr # Visualisation of cluster can be # done with tools like treeview # # Author : Antoine Lucas # lucas@toulouse.inra.fr # # Licence : GPL (r2xcluster, not Xcluster) # #------------------------------------------------------- # # n <- dim(data)[1] # Add GWEIGHT column data <- as.data.frame(cbind(1,data)) # If the name column does not exist -> creation # of this column else: put column name on # first place. (column NAME in the file) if(!description){ if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,2]),data) } } else{ data <- cbind(as.factor(data[,3]),data[,-3]) } # column YORF in the file if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,3]),data[,-3]) } # add GID column GID <- paste ('GENE',0:(n-1),'X',sep='') data <- cbind(as.factor(GID),data) # Put data in right order data <- data [hr$order,] m <- dim(data)[2] data[,5:m] <- data[,5:m][hc$order] colnames(data)[5:m] <- colnames(data)[5:m][hc$order] # Round data data[,5:m] <- signif(data[,5:m], digits = 4) levels(data[,1]) <- c(levels(data[,1]),"1","GID","AID","EWEIGHT") levels(data[,2]) <- c(levels(data[,2]),"1","UNIQID") levels(data[,3]) <- c(levels(data[,3]),"1","NAME") data <- rbind(1,data) nom <- c("GID","UNIQID","NAME","GWEIGHT",names(data)[-c(1,2,3,4)]) names(data) <- nom data[1,1] <- "EWEIGHT" data <- rbind(c("AID",NA,NA,NA,paste('ARRY',hc$order-1,'X',sep='')),data) # NA will be replaced by "" in the file # data[2:length(data[,1]),2] <- NA data[2,2:4] <- NA # Write file if(dec==',') { data<-apply(data,2,function(u){chartr(".",",",u)}) data[data=="NA"]<-NA } write.table(data,file = file,sep = '\t',row.names = FALSE,col.names = TRUE,na="",quote=FALSE) } ctc/R/r2cluster.R0000644000175100017510000000404114614230663014620 0ustar00biocbuildbiocbuildr2cluster <- function(data,labels=FALSE,colname="ACC",description=FALSE,file="cluster.txt",dec='.'){ #------------------------------------------------------- # # Created : 05/07/02 # Last Modified : Time-stamp: <2003-07-22 16:53:00 lucas> # # Description : Write to Cluster file format (Cluster make # Hierarchical cluster analysis) # Author : Antoine Lucas # lucas@toulouse.inra.fr # See Also : r2xcluster # # Xcluster : Cluster is a program that performs # hierarchical clustering, K-means and # SOM. # Cluster is copyrighted. # To get or have information on Cluster: # # http://rana.lbl.gov/EisenSoftware.htm # # Licence : GPL # # #------------------------------------------------------- # # # Example: # source('r2cluster.R') # r2cluster(data) # #------------------------------------------------------- n <- length(data[,1]) data <- as.data.frame(cbind(1,1:n,data)) # If the name column does not exist -> creation # of this column, else: put column name on # first place. if(!description){ if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,3]),data) } } else{ data <- cbind(as.factor(data[,4]),data[,-4]) } if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,4]),data[,-4]) } levels(data[,1]) <- c(levels(data[,1]),"1",colname,"EWEIGHT") levels(data[,2]) <- c(levels(data[,2]),"1","NAME","EWEIGHT") data <- rbind(1,data) nom <- c(colname,"NAME","GWEIGHT","GORDER",names(data)[-c(1,2,3,4)]) names(data) <- nom data[1,1] <- "EWEIGHT" data[1,2:4] <- NA # NA will be replaced by "" in the file #data[2:length(data[,1]),2] <- NA #data[2,3] <- NA # Write file if(dec==',') { data<-apply(data,2,function(u){chartr(".",",",u)}) data[data=="NA"]<-NA } write.table(data,file,sep='\t',row.names = FALSE,col.names = TRUE,na="",quote=FALSE) } ctc/R/r2gtr.R0000644000175100017510000000555114614230663013742 0ustar00biocbuildbiocbuildr2gtr <- function(hr,file="cluster.gtr",distance=hr$dist.method,dec=".", digits=5) { #------------------------------------------------------- # # Created : 20/11/02 # Last Modified : Time-stamp: <2005-04-05 16:06:45 lucas> # # Description : Write hclust object to gtr atr # files (Xcluster or Cluster output). # Visualisation of cluster can be # done with tools like treeview # Author : Antoine Lucas # lucas@toulouse.inra.fr # See Also : plot.hclust (library mva) # # Licence : GPL #------------------------------------------------------- height <- hr$height if(substr(distance,1,1)=="p") { height <- 1 - height } else { height <- height +1 height <- height[1] / height # height <- (( 2 / height ) -1 ) / (( 2 / height[1] ) -1) } height <- signif(height, digits = digits) n <- length(height) node <- 1:n node <- paste ('NODE',node,'X',sep='') merge1 <- hr$merge[,1] merge11 <- paste ('NODE',merge1,'X',sep='') merge12 <- paste ('GENE',-1-merge1,'X',sep='') merge1[hr$merge[,1]>0] <- merge11[hr$merge[,1]>0] merge1[hr$merge[,1]<0] <- merge12[hr$merge[,1]<0] merge2 <- hr$merge[,2] merge11 <- paste ('NODE',merge2,'X',sep='') merge12 <- paste ('GENE',-1-merge2,'X',sep='') merge2[hr$merge[,2]>0] <- merge11[hr$merge[,2]>0] merge2[hr$merge[,2]<0] <- merge12[hr$merge[,2]<0] data <- data.frame(cbind(node,merge1,merge2)) data <- cbind(data,height) write.table(data,file=file,row.name=FALSE,col.names=FALSE,quote=FALSE,sep='\t',dec=dec) } #----------------------------------- # Cosmetic modifications for r2atr #----------------------------------- r2atr <- function(hc,file="cluster.atr",distance=hc$dist.method,dec=".", digits=5) { height <- hc$height if(substr(distance,1,1)=="p") { height <- 1 - height } else { height <- height +1 height <- height[1] / height } height <- signif(height, digits = digits) n <- length(height) node <- 1:n node <- paste ('NODE',node,'X',sep='') merge1 <- hc$merge[,1] merge11 <- paste ('NODE',merge1,'X',sep='') merge12 <- paste ('ARRY',-1-merge1,'X',sep='') merge1[hc$merge[,1]>0] <- merge11[hc$merge[,1]>0] merge1[hc$merge[,1]<0] <- merge12[hc$merge[,1]<0] merge2 <- hc$merge[,2] merge11 <- paste ('NODE',merge2,'X',sep='') merge12 <- paste ('ARRY',-1-merge2,'X',sep='') merge2[hc$merge[,2]>0] <- merge11[hc$merge[,2]>0] merge2[hc$merge[,2]<0] <- merge12[hc$merge[,2]<0] data <- data.frame(cbind(node,merge1,merge2)) data <- cbind(data,height) if(dec==',') { data<-apply(data,2,function(u){chartr(".",",",u)}) data[data=="NA"]<-NA } write.table(data,file=file,row.name=FALSE,col.names=FALSE,quote=FALSE,sep='\t') } ctc/R/r2xcluster.R0000644000175100017510000000403114614230663015007 0ustar00biocbuildbiocbuildr2xcluster <- function(data,labels=FALSE,description=FALSE,file="xcluster.txt"){ #------------------------------------------------------- # # Created : 10/12/01 # Last Modified : Time-stamp: <2002-11-12 13:17:15 lucas> # # Description : Write to Xcluster file format (Xcluster make # Hierarchical cluster analysis) # Author : Antoine Lucas # lucas@toulouse.inra.fr # See Also : xcluster2r # # Xcluster : Xcluster is a C program that performs # hierarchical clustering, K-means and # SOM. # Xcluster is copyrighted. # To get or have information on Xcluster: # # http://genome-www.stanford.edu/~sherlock/cluster.html # # Licence : GPL (r2xcluster, not Xcluster) # #------------------------------------------------------- # # # Example: # source('r2xcluster.R') # r2xcluster(data) # system('Xcluster -f xcluster.txt') # h <- xcluster2r('xcluster.gtr') # library(mva) # plot(h,hang=-1) # #------------------------------------------------------- data <- as.data.frame(cbind(1,data)) # If the name column does not exist -> creation # of this column else: put column name on # first place. if(!description){ if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,2]),data) } } else{ data <- cbind(as.factor(data[,3]),data[,-3]) } if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,3]),data[,-3]) } levels(data[,1]) <- c(levels(data[,1]),"1","NAME","EWEIGHT") levels(data[,2]) <- c(levels(data[,2]),"1","DESCRIPTION") data <- rbind(1,data) nom <- c("NAME","DESCRIPTION","GWEIGHT",names(data)[-c(1,2,3)]) data <- rbind(nom,data) data[2,1] <- "EWEIGHT" # NA will be replaced by "" in the file #data[2:length(data[,1]),2] <- NA data[2,2:3] <- NA # Write file write.table(data,file,sep='\t',row.names = FALSE,col.names = FALSE,na="",quote=FALSE) } ctc/R/read.eisen.R0000644000175100017510000000167614614230663014723 0ustar00biocbuildbiocbuildread.eisen <- function(file,sep="\t",dec=".",format.check=TRUE) { f<-read.table(file=file,header=TRUE,sep=sep,dec=dec) rownames(f)<-f[,1] if (format.check & colnames(f)[1] %in% c("UNIQID","YORF","MCLID","CLID","ACC")) { stop(paste("This is not a proper Eisen-formatted file ('",file,"').",sep="")) } if ("NAME"==colnames(f)[2]) { colstart<-3 } else { colstart<-2 } if (""==rownames(f)[1]) { rowstart<-2 } else { rowstart<-1 } r<-f[rowstart:nrow(f),colstart:ncol(f)] if (2==rowstart) { attr(r,"second.row")<-f[1,colstart:ncol(f)] } else { attr(r,"second.row")<-NULL } if (3==colstart) { attr(r,"NAME")<-f[rowstart:nrow(f),2] } else { attr(r,"NAME")<-NULL } return(r) } ctc/R/xcluster.R0000644000175100017510000000626114614230663014552 0ustar00biocbuildbiocbuildxcluster <- function(data,distance="euclidean",clean=FALSE,tmp.in="tmp.txt",tmp.out="tmp.gtr"){ #------------------------------------------------------- # # Created : 10/12/01 # Last Modified : Time-stamp: <2002-11-12 09:48:10 lucas> # # Description : Execute Xcluster (Xcluster make # Hierarchical cluster analysis) # Author : Antoine Lucas # lucas@toulouse.inra.fr # See Also : xcluster2r # # Xcluster : Xcluster is a C program that performs # hierarchical clustering, K-means and # SOM. # Xcluster is copyrighted. # To get or have information on Xcluster: # # http://genome-www.stanford.edu/~sherlock/cluster.html # # Licence : GPL (r2xcluster, not Xcluster) # # #------------------------------------------------------- # Xcluster flags #------------------------------------------------------- # # -g 0|1|2 ; 0 indicates no gene clustering, 1 indicates non-centered metric, 2 indicates centered metric when clustering genes. 2 is default. # -e 0|1|2 ; 0 indicates no experiment clustering, see above for 1 and 2. 0 is the default. # -p 0|1 ; whether to use pearson correlation (1), or Euclidean distance (0). 1 is the default. # -s 0|1 ; whether to make a SOM (1). 0 is the default. # -x specify x dimension of SOM # -y specify y dimension of SOM # -r 0|1 ; whether to seed the random number generator with the time when making a SOM. 1 is the default. # -k num ; how many k-means clusters to make. num is an integer, greater than 1, and preferably less than a gazillion. # -l 0|1 ; whether to log transform the data. # -u string ; a unique identifier by which to name the output files, instead of basing their names on the input file. eg -u 888 will generate 888.cdt as an output file. #------------------------------------------------------- # # # Example: # source('r2xcluster.R') # system('Xcluster -f xcluster.txt') # h <- xcluster2r('xcluster.gtr') # library(mva) # plot(h,hang=-1) # #------------------------------------------------------- r2xcluster(data,file=tmp.in) #------------------------------------- # CASE DISTANCE=EUCLIDEAN #------------------------------------- if(substr(distance,1,1)=="e") { script <- paste ("Xcluster -f",tmp.in," -e 0 -p 0 -s 0 -l 0") system(script) tree <- xcluster2r(file=tmp.out,distance="euclidean",labels=TRUE,fast= TRUE,clean=clean) } #------------------------------------- # CASE DISTANCE=PEARSON #------------------------------------- if(substr(distance,1,1)=="p") { script <- paste ("Xcluster -f",tmp.in,"-g 2 -e 0 -p 1 -s 0 -l 0") system(script) tree <- xcluster2r(file=tmp.out,distance="pearson",labels=TRUE,fast= TRUE,clean=clean) } #------------------------------------- # CASE DISTANCE=NONCENTEREDPEARSON #------------------------------------- if(substr(distance,1,1)=="n") { script <- paste ("Xcluster -f",tmp.in,"-g 1 -e 0 -p 1 -s 0 -l 0") system(script) tree <- xcluster2r(file=tmp.out,distance="pearson",labels=TRUE,fast= TRUE,clean=clean) } script <- paste ("rm ",substr(tmp.in,0,nchar(tmp.in)-3),"*",sep='') system(script) tree } ctc/R/xcluster2r.R0000644000175100017510000001250514614230663015014 0ustar00biocbuildbiocbuildxcluster2r <- function(file,distance="euclidean",labels=FALSE,fast=FALSE,clean=FALSE,dec="."){ #------------------------------------------------------- # # Created : 26/11/01 # Last Modified : Time-stamp: <2002-11-22 11:48:29 lucas> # # Description : Read Xcluster output (Xcluster make # Hierarchical cluster analysis) to # analyse and plot the result. # Author : Antoine Lucas # lucas@toulouse.inra.fr # See Also : plot.hclust (library mva) # # Xcluster : Xcluster is a C program that performs # hierarchical clustering, K-means and # SOM. # Xcluster is copyrighted. # To get or have information on Xcluster: # # http://genome-www.stanford.edu/~sherlock/cluster.html # # Licence : GPL (xcluster2r, not Xcluster) # # #------------------------------------------------------- # # # Example: # source('xcluster2r.R') # h <- xcluster2r('data.gtr') # library(mva) # plot(h,hang=-1) # # #------------------------------ # Determin if it is a .gtr or # .atr file #------------------------------ ext <- substr(file,nchar(file)-2,nchar(file)-2) if( (ext=='a') || (ext=='A') ) { premierelettre <- 'A' atr <- TRUE } else { premierelettre <- 'G' atr <- FALSE } #------------------------------ # reading file #------------------------------ if(atr){ premierelettre <- 'A' } else { premierelettre <- 'G' } data <- read.table(file,sep='\t',dec=dec) data1 <- as.character(data[,2]) i1 <- (substr(data1,1,1)==premierelettre)*(-1) #si i1 -1 => Gene, #Si i1 0 => Cluster data1 <- as.integer(substr(data1,5,nchar(data1)-1)) data1 <- data1*i1+i1+data1*(1+i1) data2 <- as.character(data[,3]) i2 <- (substr(data2,1,1)==premierelettre)*(-1) data2 <- as.integer(substr(data2,5,nchar(data2)-1)) data2 <- data2*i2+i2+data2*(1+i2) if(substr(distance,1,1)=="e") { Hheight <- 2 / (data[,4] +1 ) #Distance = Euclidean } else{ Hheight <- 1-data[,4] #Distance = pearson (centered or not) } rm(data) #---------------------------------------------------- # Giving ordered distances #---------------------------------------------------- if(clean){ Hheight <- cummax(Hheight) } #---------------------------------------------------- # Reorganizing data (Not essential, # but gives the same look as R) # Fast=T skip this part #---------------------------------------------------- if(!fast){ for(i in 1:length(data1)){ if(abs(data1[i])>abs(data2[i])){ tmp <- data2[i] data2[i] <- data1[i] data1[i] <- tmp} if(data1[i]>0 && data2[i]<0) { tmp2 <- data2[i] data2[i] <- data1[i] data1[i] <- tmp2 } } } #---------------------------------------------------- # Order the clusters #---------------------------------------------------- liste <- list("1"=c(data1[1],data2[1])) for(i in 2:length(data1)){ if(data1[i]<0 && data2[i]<0){ liste[[as.character(i)]] <- c(data1[i],data2[i]) } if(data1[i]>0 && data2[i]<0) { tmp <- as.character(data1[i]) liste[[as.character(i)]] <- c(data2[i],liste[[tmp]]) liste[[tmp]] <- c() } if(data1[i]<0 && data2[i]>0) { tmp <- as.character(data2[i]) liste[[as.character(i)]] <- c(data1[i],liste[[tmp]]) liste[[tmp]] <- c() } if(data1[i]>0 && data2[i]>0) { tmp1 <- as.character(data1[i]) tmp2 <- as.character(data2[i]) if(data1[i]<=data2[i]) { liste[[as.character(i)]] <- c(liste[[tmp1]],liste[[tmp2]]) } else { liste[[as.character(i)]] <- c(liste[[tmp2]],liste[[tmp1]]) } liste[[tmp1]] <- c() liste[[tmp2]] <- c() } } #-------------------------------- # Giving the outputs #-------------------------------- Hmerge <- cbind(as.integer(data1),as.integer(data2)) Horder <- -liste[[as.character(length(data2))]] Hlabels <- as.character(1:(length(data2)+1)) Hmethod <- "average" #Hdist.method <- "Pearson" #Hcall <- "Xcluster" #-------------------------------- # Getting labels on .cdt file #-------------------------------- if(labels){ if(atr) { filetxt <- paste(substr(file,0,nchar(file)-4),'.txt',sep='') data <- read.table(filetxt,nrows=1,sep='\t',dec=dec) Hlabels <- as.character(t(data[4:length(data)])) } else { filecdt <- paste(substr(file,0,nchar(file)-4),'.cdt',sep='') data <- read.table(filecdt,skip=1,sep='\t',dec=dec) data1 <- as.character(data[,1]) data1 <- as.integer(substr(data1,5,nchar(data1)-1)) data2 <- as.character(data[,2]) Hlabels[data1+1] <- data2 } } tree <- list(merge=Hmerge,height=Hheight,order=Horder,labels=Hlabels,method=Hmethod) class(tree) <- "hclust" tree } ctc/R/zzz.R0000755000175100017510000000023014614230663013527 0ustar00biocbuildbiocbuild.noGenerics <- TRUE .conflicts.OK <- TRUE .onLoad <- .First.lib <- function(lib, pkg) { if("amap" %in% .packages(all=TRUE)) require("amap") } ctc/vignettes/0000755000175100017510000000000014614332141014352 5ustar00biocbuildbiocbuildctc/vignettes/ctc.Rnw0000644000175100017510000000732114614230663015624 0ustar00biocbuildbiocbuild% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- % building this document: (in R) Sweave ("ctc.Rnw") \documentclass[a4paper]{article} \title{Ctc Package} \author{Antoine Lucas} \SweaveOpts{echo=FALSE} %\usepackage{a4wide} %\VignetteIndexEntry{Introduction to ctc} %\VignettePackage{ctc} \usepackage{url} \begin{document} \maketitle \tableofcontents \section{Overview} {\tt Ctc} package provides several functions for conversion. Specially to export and import data from Xcluster\footnote{\url{http://genome-www.stanford.edu/~sherlock/cluster.html}} or Cluster\footnote{http://rana.lbl.gov/EisenSoftware.htm} software (very used for Gene's expression analysis), and to export clusters to TreeView or Freeview visualization software. \section{Aim} \begin{itemize} \item To explore clusters made by Xcluster and Cluster . \item To cluster data with Xcluster (it requires very low memory usage) and analyze the results with R. Warning: results are not exactly the same as hclust results with R. \end{itemize} \section{Usage} Standard way of building a hierarchical clustering with R is with this command: %<>= <>= data(USArrests) h = hclust(dist(USArrests)) plot(h) @ Or for the ``heatmap'': <>= heatmap(as.matrix(USArrests)) @ \subsection{Building hierarchical clustering with another software} We made these tools \begin{description} \item[r2xcluster] Write data table to Xcluster file format <>= library(ctc) r2xcluster(USArrests,file='USArrests_xcluster.txt') @ \item[r2cluster] Write data table to Cluster file format <>= r2cluster(USArrests,file='USArrests_xcluster.txt') @ \item[xcluster] Hierarchical clustering (need Xcluster tool by Gavin Sherlock) \begin{verbatim} > h.xcl=xcluster(USArrests) > plot(h.xcl) \end{verbatim} It is roughtly the same as \begin{verbatim} > r2xcluster(USArrests,file='USArrests_xcluster.txt') > system('Xcluster -f USArrests_xcluster.txt -e 0 -p 0 -s 0 -l 0') > h.xcl=xcluster2r('USArrests_xcluster.gtr',labels=TRUE) \end{verbatim} \item[xcluster2r] Importing Xcluster/Cluster output \end{description} \subsection{Using other visualization softwares} We now consider that we have an object of the type produced by 'hclust' (or a hierarchical cluster imported with previous functions) like: <>= hr = hclust(dist(USArrests)) hc = hclust(dist(t(USArrests))) @ \begin{description} \item[hc2Newick] Export hclust objects to Newick format files <>= write(hc2Newick(hr),file='hclust.newick') @ \item[r2gtr,r2atr,r2cdt] Export hclust objects to Freeview or Treeview visualization softwares <>= r2atr(hc,file="cluster.atr") r2gtr(hr,file="cluster.gtr") r2cdt(hr,hc,USArrests ,file="cluster.cdt") @ \item[hclust2treeview] Clustering and Export hclust objects to Freeview or Treeview visualization softwares <>= hclust2treeview(USArrests,file="cluster.cdt") @ \end{description} \section{See Also} Theses examples can be tested with command {\tt demo(ctc)}.\\ \noindent All functions has got man pages, try {\tt help.start()}.\\ \noindent Ctc aims to interact with other softwares, some of them: \begin{description} \item[xcluster] made by Gavin Scherlock, http://genome-www.stanford.edu/\~\/sherlock/cluster.html \item[Cluster, Treeview] made by Michael Eisen, http://rana.lbl.gov/EisenSoftware.htm \item[Freeview] made by Marco Kavcic and Blaz Zupan, http://magix.fri.uni-lj.si/freeview \end{description} \noindent If you want to cite amap or ctc in a publication, use~: Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. \end{document}