From dffebd5826ce809a7e755cc0e9720124b299c012 Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Mon, 9 Mar 2009 11:05:51 +0000 Subject: [PATCH] New version of pairing algorithm (alpha) git-svn-id: https://www.grenoble.prabi.fr/svn/LECASofts/ecoPrimers/branches/eric-test@184 60f365c0-8329-0410-b2a4-ec073aeeaa1d --- src/ecoPrimer | Bin 62448 -> 58176 bytes src/ecoprimer.c | 77 +++--- src/global.mk | 2 +- src/libecoPCR/ecoError.P | 15 ++ src/libecoPCR/ecoIOUtils.P | 15 ++ src/libecoPCR/ecoMalloc.P | 15 ++ src/libecoPCR/ecodna.P | 5 + src/libecoPCR/ecofilter.P | 5 + src/libecoPCR/econame.P | 15 ++ src/libecoPCR/ecorank.P | 15 ++ src/libecoPCR/ecoseq.P | 19 ++ src/libecoPCR/ecotax.P | 15 ++ src/libecoprimer/Makefile | 1 + src/libecoprimer/amplifiatree.c | 131 ++++++++++ src/libecoprimer/apat_search.P | 17 ++ src/libecoprimer/aproxpattern.P | 17 ++ src/libecoprimer/ecoprimer.h | 116 ++++++--- src/libecoprimer/goodtaxon.P | 17 ++ src/libecoprimer/hashsequence.P | 17 ++ src/libecoprimer/libstki.P | 17 ++ src/libecoprimer/merge.P | 17 ++ src/libecoprimer/pairs.P | 17 ++ src/libecoprimer/pairs.c | 415 ++++++++++++++++++++----------- src/libecoprimer/pairtree.P | 17 ++ src/libecoprimer/pairtree.c | 133 ++++++++++ src/libecoprimer/queue.P | 17 ++ src/libecoprimer/readdnadb.P | 17 ++ src/libecoprimer/smothsort.P | 10 + src/libecoprimer/sortmatch.P | 17 ++ src/libecoprimer/sortword.P | 17 ++ src/libecoprimer/strictprimers.P | 18 ++ 31 files changed, 1015 insertions(+), 211 deletions(-) create mode 100644 src/libecoPCR/ecoError.P create mode 100644 src/libecoPCR/ecoIOUtils.P create mode 100644 src/libecoPCR/ecoMalloc.P create mode 100644 src/libecoPCR/ecodna.P create mode 100644 src/libecoPCR/ecofilter.P create mode 100644 src/libecoPCR/econame.P create mode 100644 src/libecoPCR/ecorank.P create mode 100644 src/libecoPCR/ecoseq.P create mode 100644 src/libecoPCR/ecotax.P create mode 100644 src/libecoprimer/amplifiatree.c create mode 100644 src/libecoprimer/apat_search.P create mode 100644 src/libecoprimer/aproxpattern.P create mode 100644 src/libecoprimer/goodtaxon.P create mode 100644 src/libecoprimer/hashsequence.P create mode 100644 src/libecoprimer/libstki.P create mode 100644 src/libecoprimer/merge.P create mode 100644 src/libecoprimer/pairs.P create mode 100644 src/libecoprimer/pairtree.P create mode 100644 src/libecoprimer/pairtree.c create mode 100644 src/libecoprimer/queue.P create mode 100644 src/libecoprimer/readdnadb.P create mode 100644 src/libecoprimer/smothsort.P create mode 100644 src/libecoprimer/sortmatch.P create mode 100644 src/libecoprimer/sortword.P create mode 100644 src/libecoprimer/strictprimers.P diff --git a/src/ecoPrimer b/src/ecoPrimer index 13716c122e12ae6e4bfea9dcfa533af903040fa0..c3e5c3e4c4b3654c50902ef5f33e657ed2880a4d 100755 GIT binary patch delta 19781 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 UzM-6T{M=G=vN_ft>ye`T4^VJ|KmY&$ delta 22557 zcmbV!3tUxI7Wd%-dar^P5ELIM>Qxbumw*tO_v%FsgocXm7lfD^A|a@mc2Ph*9&cg0 zX&k3!uuRRYd{iU$5Z_u&k=0~2jWoS3Y7;#*d))88_TC4HoWA+K`}>`<_kZoR*Is+= zwciICPWiTc?pqt`vvEt)J|@S{K9<6~ewE%HO6o zaf;5HSG=gasH~tkRV2)tmzOa;?*`LWO~{kt6vA!g`Q2cp82i$vU&wBmC%2nO+^wzW$9D6lL_5iCx(lzo?+iJHEQ3@XojXx?=6_tAE>Z|CR^+YyEl4LgN7k5BYmc z2OGEK`?ET8yzL6wUpwtthz9@GF*(N_ao1N~uVb=z;Ky4O#oAZ#4*d5P_N{q`YXmq{ z_iEd8Rdd>=dz$Vf820cY1ls4ScJvie&f_Jr?mrrtRXq>P?qr>_e5C5B2@M_>rB|KE zpLN{Yw;CA~WwKgzC0=#Uwgsu~a$BUTUG&^XObAyabm}>_aHpQjx_1h7yb@MSgU8l|Fg6YGZMa6wGS_c)jGVVvZ_w1DxQqA&#cuWk?u@i6SU$p zJtIlg*C<);IpKP_EfkDjtJdfSJ;P4nnJjlkZ=Mr{M(G*hz8Ss0wgx+G=C7@D&w#@f z-SD+_M&R=+6$NzI1<3zdj%GG|L!35`JsGxhk6KBsrJaJsM?y^$YNi4`{Y7eiYib{) z>J>2ksL7xuG?3CB3y5D^qn$RtudP8jHZxMwkb1~P9i4PpV2wITWyhdw&p(TZ8055t zgD-^mh|O~nWPLbDKcY3D$Me9dj*5Zg0ZESsu@1y1s~@;`PD_ z;W6s0IS$Kg#~jC8$GqdUEWeZ9^=My6tZ69k>Cl(YSK-9@ec3OahMC?P%!YN|H7;lcG!R0wfa6tQqym# zXs%in>a${zs*f@2F2#{{w7e4vbXuKf9NuG&s_Q=YoiPM(J)xNQIH{ICJ=D7H9xsL_ z@2QOR@|Yy+xkf*+zAMU0}G z5vA^hD8@o%`0(MQ5#5UDf&~jGT8Ai2t%&YGKtDuxix@@s%Bbps`uhOjf|c<89PKmh zOV62kic)nA-jak;syxH1u4SzF7dQgJ2)``!Tc`RodYcy1PVb;7ufl5o|BuV-z3=}b zfLx#NwR^g#UXHu&8(aYNWe(EQDcvIx%#JO-V@?ZB!Y z5x9}eIx6!HMLCTAue?G{mhgqDclH#{C61SDm5K|b?>#z=4|->Cr-D06J9(IVgJ)g9)SLA3=BOLI#}Fj-oL4eQ&Kf4+E++ zMXUO1TPnr?r-sqz5nCe|a@;#?EeIX2ygmMoAkVoUsJ{;TW<83?v)NUbJ9#6dqg*HE z9ZZX!M6U4~Xq)^Oq&T(fC^~`@^K9WL#fg;XkV4!vR~^gs{4$&1cry13NV#Ed&re8! zQ`17?XJSJ5BSNRX*>)aUIoZ(Q=rND;=0Mq7xExf3bdxpZb@FtJH{_soJZ>pUH$<^N z1V_2jAOUYnL$n6njtVy=wtcq-$iO=fh~YkB(K4JNXjIQ?+B- z`_yt$(&0`JUUjXrb?mV;&x*rn2piIhcjIGU#X3x>S7R`P2b}+yxb5v4>)>+w^_P({c4>Ze3?<8hr>xQcs4EW5fq@6A| z!$F;)is~{PD?S_ZfCNBsoI&I8(Ox`;XRp=9%rrk!Nqgt*&>^VVGtyp!_hhI zu=(rjAk&?^8Llrj05fMON^=f|0!&55WY#>A4-F!h-{mthi4<<`Cs=9Lf@3Jn!2)A| z71)Qey7Y+oR1jRFE9AqYa^b@6l|Cr?S;Xr5kf#=4^i;7V)lO5ZRzia3{pk>Sua#<~;T}qHekcY0R|iWr*<45i={sm*tD1N*GH zJ=o-_smQ(;JgQ!7L$CYf@_4Kg?P_5N2FxI2guavX@l*4-hJ0mmS&YgrwRDBK}I4nfz!#%F2dJt`jqK!3UX^UOQgAVWM%Ug1^ zk7?E?$JXz~5LTA!Spdzb7H%@^Nww;@*_rlT#RtuoQP&)O)HYfbe4%-0fLGlSgQ(xQ zLr;=9;1?a#A&ptS9pEw{d@flSg{H)K;fl|w`NF9$j8U!53*M8S4{bE+jz;5rL(Q!n z%c8j;Lu+zs&7LhPqbMmSmKZvKSK#h1&@6QQlcMl}_UE`P>a)A1*-mk$8mv35BI zSl6wi)^PoZHw>JE`p_OvO+(yTK zU_{2j0vrMQ{{i~fzYAM=qWwWwdxDnV2@P#l_}I$mt~^_+cHWD!M;`N-&|NXdQ#o?} zRpH7B4cZ0I);vW?dxR&gc(pkdLx(ZVHG9AJdbPdW1)A?b96cuZK9WF<=T5$YW`nJ1 z$pQDug&g$gp$KZ}Hw+Js70k%=;Tl*=JELlEY1gx~uaNaJ^(WrrdV=5c>14L2d&!Xf zlWCg!94iV9v4nFpPrU<`tA6$?k3jv)c`r= zV#-%_B1qL5$;`)f-)6^hG%t3>!Wp2QCImDis2@$mpY}|J3=|*7i*H^-o!lK(Ao%W_ z!SZ?xzKs`)Ll=*#728^1uqf?a&tRy94ybC!t<|*b~V5fTAZK)8*GK1NB_7CZ{T1*Kz^l@U-yy#9Yd zfKERE4OX>^i!6t%4DF-wT8q}KY8OO zbEx_IAe5s+`ZwGIPuG%YCHCDkw!c@X>Duk=bgv~N{*0xC9ykVkHD}9lT;<;voZ#9G zUw3HlkJp;8c2c!VqVQR?5b*|fUd8U}J;zcY`osKb?5*C_mUqY<;aXGK+=zjuofBA1 z#PB{Jj0X|5vZzDO&r*+ie2=3AW(&>@Q`tWv`h-VJkRD48>khkHBrcoE0{SEtrU*0@ zL48khh?jq+esFI%Jg*#`AS_HUj3b5!Vt7O_L>dg=VrYR{B&a@;815woci2A#J#H%7 z-e-(u8%JTArm!o0M%<>5*6!q&K;#p4m>seDbjm#eql&8i2Saie=9(bS*&OVLYQ88R zP9y&r0OYG{&1as%O8SQ1vV}8!PfS-mwSuXpm8lV3u>Lj@{x3d*;K+^(kMzvQVGVtY zEVqLJVkhRY*vJ7v=fDd6dkf-+d8{C^XTRM<)c%EGmE5xqNMA$d`3M~uSx@A#MIg5%Ib+(*qaM+7=muE&c4XplOl~GdQGnC{Gdy58@hF6FI$FryWABHf+ z(~hi_qpZlmu=5gD!kS8&7N&d%yqi-09%Cp~f-r zw5stiqzE-;L3DW*ZQk}{`e}|50}(p7IH-g0eiNyT;c0qpHg3SC&x@;TLjkx{f-GiClCn#+fVBcci0|5e{&+c z%Qnt3OQ6jY*=yLV%ubSSd{u%E^`e$Jmzicx$fj-5bGbNQjdKHLHfNxMn5?q z7;MDwCt}!64DPUPf*z5}?j7{cj?;iV&pX-N!6~;YFl2deRZl_dcP08&%ArMg$}sr) z_gsPkt43V_P|C;Xft`SB&aO;Vv02mue=26@1`oG%MBj&2&rV=nqEd3m_=Z3iQaqVL zpq&dWDdqwbrNHF5z%}0+0&^)f?PR%{KHjgw|8h8Mh#q7X-Pk*xy%Lpj>%O~hNPib8 zo@FZy(P}hNRfdZ3M=Uz|X(o0$WN+ zU^gM~-vCPaB)FeH2pKgEE5`{7e7~4|GQ?r|{5EcZ2Xa_!bc#I}+=d0pQJ8125ShwF z&RooOj5b6DW`TgSN<-u=LgZi}^3B`Wf1(H9b`@Q*z5+_L-Z)fUNySxzAMD;hoH(~N z9|;G8C+AD(kF^d?kxzU6VaMP%y%Rj(c}So}x{c)z?a_TF@?e|H2b!eDp}ZKZ_k0R%q!f zP(l{#6Fb=U$tV?HFF2+KBO{U9(wc>M+yF*=%|0x2AQoSaI57 z%lA|Rcd~aByO@@2IzN+jyX9h!_vWFI9qy^%e52P*(S|k zdmXu^mg(#l#{kpiNo>HFwWh!!Z0DFklRk}t{yEl|rW`$a^Cak>XUm6%1rSBMix+)R zSeAaPQ=4yF?KuHv0HmKqI<_599F=<-WLi>3At7i4>oc~u>0-*kkz@UQg7!`&Z*6ko zG7i;$W-7~de%E;y?1V-Abk7?DSZ>BW0Rw>PKFA$5WD0vXj z=LPx!K|Ll3OmU6a(yyko(y%{?v=1q*f|^ImFng}P$2fxl<;TxVpV`l!$hWgM5gNq>SwoRifPT{*NZ)xJJb>* z*oF;dZ{^x8A4l_&0*11l6Njho5-6WUSRvvFyjSrIIZHk1Wb8ofKILT%@ zs~#LaX^D?%ayWZz@-@pX)M4CVv!dAJd5NZhgd*Kea7Eq|^eaR+6#4PEP~;>Oxxy9M zFSx$4v6$&SP0x*C>hw`AchYixy5qcRPIta%wm#foeW5{Y3bk`|I}tib6+F1%O}eV; zrX0PSJ|W1dj|*_>6L7iOflfhHZ5;OVW3UY#7o=qeIkhnXPA%JRUhV`8B`Lp(UiR6I7in$&e1-lDF-KV@P~9yc(B;|yai@lMq@U{S@-eq z3_8UlOSPKZTJr+LI@~p+3c9OFjO@M$_;o*~bj9J)G9z)XN;W;(`q^p6IT?NgIQ+PS=$ zIEctY)wH1IR8UlX3Ek{D;b3UGVq3Vi=5y@+3_of93xKfv4bRNde&RmM9oC_J$30cJ zGQPFZZ^tnoN}vx5JTQd=vtbfI&1*1#D+?`}ibGO&*r$=)KPN!_(_^`Jo*pZF^G+}x ziNsLv>G2A5ru?*&;aMH&IktGTAXspFvIG-=_@p7r9n)9O2u;s`XMTsoEVo}@J*ehf z1+GePoa?kD=?g<^zUXPK=?0y0;BMRuNa-7@d9t+7Q_R~thHjrIGgtDQGi|7~IvPC| z-uRZadMGk#@A6WeX)(tun(2d#K%@$tYQ`bzUMpHZEFqFR!G*pEw2O{IOCZ*P9v1(r z)<6C-T0lEaT`!dcyKYvWn$8f++n#RZ0yjb==55~gS4cb@$#IC50&u5g5XiMxG4(f} zLj&{EF{&@_qUd0}EB{6c1HAWyGwlm&^_$?iO&|FgcX*e_+=bk|;-Uj-H7AhP{48E{ zS`kcTxszuiIGq_U`dbo86$82GZy7I>C8YO(O0Cz59%-*BEF<8Zoq1&xg-x%MtH!3_euo;b;bd#673(BJo*CHtJv)2b9 zfp=_NDnM_CzCwI8WUaO#WxU=u>*%Mx=vx6)3O?Lv^9d4qe*o^t#o2$B){uqc|EwX6 zx4A<}1GDZIj-$Q;oXc0=2~oG{tHXovK~9!-&KSY)p`5CRIJL75w_i$@_bA3HsDyrS z0)73oJpj3sv3g#3l$INmrRR-O^w3ROE_&4%OmgSalEPQKoZ<3$Llzh=3e2Yhk0B=& z82SHJAl1<*Fk26eYb_7QVCT}4e9K4|m^THIE zrnvwe@4w_~YfZ`&)SBsK?(&r+_QqFS_!RL--DWt)+AD{UfDRBvgJdLpNbk*k=nz(_ z_(lg;)AhT+;qj@b+lpf1qnj-4G~5PzL^_oCqJr+xOjjIkiuR7GsWbhh6P~T<&C7PmGE*f(aQiwYq@w1*vIyHnrltob-j}inpqMz_pRe6VQ^X-W5A+ zGtS2F-6|QR@GQxLsr=4*oyUVHq}q|~jyls_h2hq!{!}@wFkGL6epgQ4L|pVl(P<$q z^G}xdr(>*KR5n0V_6r2{|3qayZ=-&+CdehjR? zj>NE-+WZe_AS%LrZ9S>jO!IXuR!SuH@@{GiG-6m)ckXy);b@C%)E3z6NQ3gLx?R$)@ zY;XPi-g-$U@m zvMpi;)M##b7}xsl2r8)g6A|A|^z$PAA;n)8@re{~5b+9%KPTcYjlgaJ9;NsrBA!L@ zS`kmCc(sTJQ+%a}7g4-e#P6YazKGAEc%FzaqPQyJ?kL1ZiuhX;kAK+3Yw#!mn@HGB z@o*7eLh%3*Z>G2+;++56Kk&Q`qI*O6xLGBdj+_M z66!>}h~f|ZflXa}i>tJ3(UPLFc?p(fMR((!D_|mriI##TrNxUDEGn2+xU{0A+%j<4 zyk#Xt%XnB?WLdJPWL~jlNx@3I3znD7EAFJ^CLmF<`@PmI_eBC!_Tv<_3WNE>ovSmoSqqykc{*ry2{NN7?d-62h6vT;33d#!?7Ric`w)oAk^FV1D%^FrkT0GSlRPd`|jtyM{ zMk1`XJq1=KCDbjVAj>X0BTJ(Mn~ejO=jFjaMAM^^PS?S7bTTb*L5gWJ-t3){Y?dw=Rx^uwvuuYOd; z*?8(6W+7{CH8uT_OxzNTK>vH*2Y@u z>O^`87n;A;Z1Ui5pVsyPq@5KQ0B_N+}Y+4EPsZX%QRTE4bpJ0cpN=#>Vvgqn@Ci^Z{Rz26$ zxQm^uPBE?A%{tXgHPt@J?x-oT)a@0Lx|8Kw(ExT7XrD~$!Gc|JrmcHf_WC}ijeFVR z^;0dC&x(AD+5WZR?4$MFO^2Rk*O7khS=MtyA5+vmb_;^keQf3iXt0kxwjsq7wVz!; zU_Zb@Hl~=)A7I%VODwye6Osx@1JkwV*oBSA_dL74vBb3TWwux=F?o)#3tFt{S_A8} zX^T-0W9;xIc*-$$VbdT} z-7#j;Q%q-$v0L;$rt`Rch{C8Lqzypi7mn>sc1yw)$=D>r^O9aE@k=rcl_7n-K?TxZ zb5Z!5#E}xG%J30M-$D4`(JiC9Y{~b_K5tf(`N(DbyzOvj3$8>Uceu~9S;Rvn#NxFN z2TK$mg>*U$+1G_-*Tsg|anVBLY)Q6T+2Z=RU`d@VsdZNN>XUI3g9LAdqy|Y$`E7U_ zDS{sb6Yy$_NrfgHq(ikGh4@z=l2+Ib!wyPlTl;qm3Y!k>zm>|C( z$x0ZJU8UUw`3*@nFqKETO%K2eKf_paS2Q-o7W=U>LWZ58B4i`dxkmSnY zAjbt`)F9CvJBv!jC$UX8sNE#BDT!C6E?F=SlH|H%PR_>#HOWYq4`zEY`{Sn zoFeN)@=S?s5-*lGO5#-#$4IxiY9LVh9A$x#Gm&+Lp2sZ~YNGMQAXvP(PB&RK%2 zOL9{di{2F*vM*bZcS!QSY_@n;N_Kk>u19iPy-ot(#DkT61BJLQ823r9eFItazPMmX z9V)2}1KIWct<-EuZ5+rhL8B(gJV%n72C`S-9+*GKc#9;pb`aE$3mz<}bc#&H#A%-*bv4jwO(ddQ^w z@x1>uNb(R#ZWzz9_Y8840wll9mwq>nFe+gGAKfMo{B0G^2fmrYmH76BD*r6fNnwfE zmrq&PwLMYU?cMREc5+|)FLF!A2)Pj$@=0##7#6)dE?82BN^0d8w&y7f78!zhq$D?H z@PWuaPLT5?**=a>B9dAtsdeMnrDx)TC3U%^wv1zY_Qr-p%3k4;c)*wly zKZU0%1`Xhy#xBYICD{)0zSxikcoWq;QIZ>MSZ57#IRUA!G;9~i#6k^V{My@pBKX^y zU?%X*Opq%rS|^J$Fo}jHN~9=&J+Qw=NU7xAD|t(Yu*3UfLxQ4(N-s)sP&BW0q$Iy8 z$&t})&(65up@O+dQtd<8ssosOVg&gsNp6Z^hYt*LnXojY5yaR~^dJl?G;J5`u?BuZ zVA8s+RoaiM8Q^bgmC3+28wBW+T*&II>;MC`*}l7>JciIRQO_W8xFj2xOhFBp zDH@Rb6!qY?`1eee26=6jbpqc+SyW++(Dp&8fHDSpwa!70NNObJpch)Hk4b9o7QxURrA6BjSV%|<%eJwBC1ANp-G zE^8<5UMa5q#8iooG^rI%NpY1^*`Aw-YiuX({C^RbJ41*YfXxzVmpg++*JEceQ;_2& zxppQNJaNI2I#N3IC8(dp;lj znPus9s{5#AhXrlK6d&ag!b+3C)rrUg94lHrCW8Sc3{Q z*3|SrZV2Z~{&2!=)(rzCHnwOZBsR8anS@-z~Ax<^N{zOA8&BxKzr2*GQKGUXzOm zsF5OTa0S>`{s%bd#s8NaS5O{#g!@W`F$7b3jKsz!=T?c0eS4n7#%^PQ#K!K$wN?_0 z$&HS$sX$`|`iOxOM1lJxHV*7wk=QubdsAX#3;emnb+VgZH`4oac`k)+B&a}RXB#YW zC+@O zRy_q08!P)ViSy-2%sRsGF>{^BuN(YX=>OzIJ0!u_`0kh3I9fg`v2i5#mccLQihoIL zoV{F@*x03Am)JNO>e4}204H-U?!^Nn!8nZ`B5{jcE)AF1*fNcl*x2|?k=WSL-6^rL zUs^7)eZH{3I*BW1!Tw}{4F&_wNeI(_aU!RzllXwd#!>z&61T|3-w6ZD%{2W(3d(Qn zJewpomeK!_xXH!6P*Hx81mo0~{`(UNFiyH7BsPveAW(s*$!WAhktH|>3?ChmDjl)?#l7d8yfa($1tEBj%IhC4RhV#AJHy- zbUU2c4o_)^^V{Kt?Qki_H!QZ2F#1cY#VXrn(Ar_v4*$6we!LxisvUm59ex>jSX+~x zYRB-pz|?{GZ!>Ftb+FG?7WmqLw8x>Q)JiGAF4EiLVJ$RnNvlovW&vrcb z<7p#f$p0*ZrM;%JzrVK8l#tA(y}ms%AxW86T2PMv<606sd_-cRGH==B^1Bx06f7&x zC@Wi9b};Ji**>;{`SXo0PVfy&QE|}{Wgckwss&_8VWn?G_qd~CQSp57HBT;mR5NaA z+3h7olZ);?xb=-Fli3i$UTlnK{%<|%SG;IhIotWxa7)>ul5+l)3;V}g?ygJkg6IWH z%lLodTd=5bQTaUw=br2B(*fTNm6R`FE8m{L-hBJXP8^DC%ikH%4Vv66=Tq-g`w^e E2cA;C0RR91 diff --git a/src/ecoprimer.c b/src/ecoprimer.c index b54ef97..fb6b9fb 100644 --- a/src/ecoprimer.c +++ b/src/ecoprimer.c @@ -75,7 +75,7 @@ void printcurrenttime () /* Format and print the time, "ddd yyyy-mm-dd hh:mm:ss zzz" */ ts = localtime(&now); strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", ts); - fprintf(stderr,"#%d#, %s\n",now, buf); + fprintf(stderr,"#%d#, %s\n",(int)now, buf); } void printcurrenttimeinmilli() @@ -90,6 +90,9 @@ void printcurrenttimeinmilli() } /*TR: Added*/ + +#ifdef MASKEDCODE + void printpairs (pairscount_t pairs, poptions_t options, int32_t rankdbstats, uint32_t seqdbsize) { uint32_t i; @@ -98,9 +101,9 @@ void printpairs (pairscount_t pairs, poptions_t options, int32_t rankdbstats, ui double sens; double speci; float avg; - + quorumseqs = seqdbsize * 70 / 100; - + printf("primer_1\tseq_1\tPrimer_2\tseq_2\tamplifia_count\t%s_snes\t%s_spe\tmin_l\tmax_l\tavr_l\n", options->taxonrank, options->taxonrank); for (i=0; i < pairs.paircount; i++) @@ -121,9 +124,12 @@ void printpairs (pairscount_t pairs, poptions_t options, int32_t rankdbstats, ui } } +#endif /* MASKEDCODE */ + /*updateseqparams: This function counts the insample and outsample sequences * and with each sequences adds a tag of the taxon to which the sequence beongs*/ -void updateseqparams (pecodnadb_t seqdb, uint32_t seqdbsize, ecotaxonomy_t *taxonomy, + +void updateseqparams (pecodnadb_t seqdb, uint32_t seqdbsize, ecotaxonomy_t *taxonomy, poptions_t options, int32_t *insamples, int32_t *outsamples) { uint32_t i; @@ -131,7 +137,7 @@ void updateseqparams (pecodnadb_t seqdb, uint32_t seqdbsize, ecotaxonomy_t *taxo ecotx_t *tmptaxon; for (i=0;iisexample=isGoodTaxon(taxonomy,seqdb[i]->taxid,options); if (seqdb[i]->isexample) (*insamples)++; @@ -139,7 +145,7 @@ void updateseqparams (pecodnadb_t seqdb, uint32_t seqdbsize, ecotaxonomy_t *taxo (*outsamples)++; taxid = taxonomy->taxons->taxon[seqdb[i]->taxid].taxid; - tmptaxon = eco_findtaxonbytaxid(taxonomy, taxid); + tmptaxon = eco_findtaxonbytaxid(taxonomy, taxid); if (tmptaxon) tmptaxon = eco_findtaxonatrank(tmptaxon, options->taxonrankidx); if (tmptaxon) @@ -154,7 +160,7 @@ void setresulttaxonrank (ecotaxonomy_t *taxonomy, poptions_t options) /*set taxon rank for which result is to be given*/ for (i = 0; i < taxonomy->ranks->count; i++) { - if (strcmp(taxonomy->ranks->label[i], options->taxonrank) == 0) + if (strcmp(taxonomy->ranks->label[i], options->taxonrank) == 0) { options->taxonrankidx = i; break; @@ -168,7 +174,7 @@ void setresulttaxonrank (ecotaxonomy_t *taxonomy, poptions_t options) } } /* to get db stats, totals of species, genus etc....*/ -int32_t getrankdbstats(pecodnadb_t seqdb, uint32_t seqdbsize, ecotaxonomy_t *taxonomy, +int32_t getrankdbstats(pecodnadb_t seqdb, uint32_t seqdbsize, ecotaxonomy_t *taxonomy, poptions_t options) { uint32_t i; @@ -177,7 +183,7 @@ int32_t getrankdbstats(pecodnadb_t seqdb, uint32_t seqdbsize, ecotaxonomy_t *tax uint32_t namesindex = 0; int32_t *ranktaxonids = ECOMALLOC(nameslots * sizeof(int32_t), "Error in taxon rank allocation"); int32_t taxid; - + ecotx_t *tmptaxon; for (i=0;itaxid == ranktaxonids[j]) break; } if (j < namesindex) continue; /* name is already in list, so no need to add it*/ - + if (namesindex == nameslots) { nameslots += 500; @@ -204,11 +210,13 @@ int32_t getrankdbstats(pecodnadb_t seqdb, uint32_t seqdbsize, ecotaxonomy_t *tax } } ECOFREE(ranktaxonids, "free rank taxon table"); - + return namesindex; } -void setoktaxforspecificity (ppairscount_t pairs) +#ifdef MASKEDCODE + +void setoktaxforspecificity (ppairtree_t pairs) { uint32_t i; uint32_t j; @@ -216,7 +224,7 @@ void setoktaxforspecificity (ppairscount_t pairs) uint32_t l; int taxcount; int32_t taxid; - + for (i = 0; i < pairs->paircount; i++) { for (j = 0; j < pairs->pairs[i].taxsetindex; j++) @@ -235,13 +243,13 @@ void setoktaxforspecificity (ppairscount_t pairs) taxcount += pairs->pairs[i].ampset[l].seqidindex; break; } - + if (taxid != pairs->pairs[i].ampset[l].taxonids[0]) { if (!taxid) taxid = pairs->pairs[i].ampset[l].taxonids[0]; - taxcount++; + taxcount++; } - + if (taxcount > 1) break; } } @@ -251,6 +259,8 @@ void setoktaxforspecificity (ppairscount_t pairs) } } +#endif + int main(int argc, char **argv) { pecodnadb_t seqdb; /* of type ecoseq_t */ @@ -264,11 +274,11 @@ int main(int argc, char **argv) int32_t insamples=0; int32_t outsamples=0; uint32_t i; - - pwordcount_t words; - pprimercount_t primers; - pairscount_t pairs; - + + pwordcount_t words; + pprimercount_t primers; + ppairtree_t pairs; + int32_t rankdbstats = 0; //printcurrenttime(); @@ -337,7 +347,7 @@ int main(int argc, char **argv) strncpy(options.taxonrank, optarg, 19); options.taxonrank[19] = 0; break; - + /* -------------------- */ case 'x': /* strict matching quorum */ /* -------------------- */ @@ -396,16 +406,16 @@ int main(int argc, char **argv) fprintf(stderr,"Reading taxonomy database ..."); taxonomy = read_taxonomy(options.prefix,0); fprintf(stderr,"Ok\n"); - + setresulttaxonrank(taxonomy, &options); /*TR: set rank level for statistics*/ - + fprintf(stderr,"Reading sequence database ...\n"); seqdb = readdnadb(options.prefix,&seqdbsize); fprintf(stderr,"Ok\n"); fprintf(stderr,"Sequence read : %d\n",(int32_t)seqdbsize); - + updateseqparams(seqdb, seqdbsize, taxonomy, &options, &insamples , &outsamples); rankdbstats = getrankdbstats(seqdb, seqdbsize, taxonomy, &options); @@ -419,7 +429,7 @@ int main(int argc, char **argv) printcurrenttimeinmilli(); words = lookforStrictPrimer(seqdb,seqdbsize,insamples,&options); printcurrenttimeinmilli(); - + fprintf(stderr,"\n Strict primer count : %d\n",words->size); if (options.no_multi_match) @@ -460,13 +470,14 @@ int main(int argc, char **argv) /*TR: Added*/ pairs = buildPrimerPairs(seqdb, seqdbsize, primers, &options); - setoktaxforspecificity (&pairs); - - printpairs (pairs, &options, rankdbstats, seqdbsize); - - - - ECOFREE(pairs.pairs,"Free pairs table"); + + // setoktaxforspecificity (&pairs); + + // printpairs (pairs, &options, rankdbstats, seqdbsize); + + + + //ECOFREE(pairs.pairs,"Free pairs table"); return 0; } diff --git a/src/global.mk b/src/global.mk index 94cf61d..7135690 100644 --- a/src/global.mk +++ b/src/global.mk @@ -3,7 +3,7 @@ LIBPATH= -Llibapat -LlibecoPCR -Llibecoprimer MAKEDEPEND = gcc -D$(MACHINE) -M $(CPPFLAGS) -o $*.d $< CC=gcc -CFLAGS= -W -Wall -O5 -m64 -fast -g +CFLAGS= -W -Wall -O3 -m64 -fast -g #CFLAGS= -W -Wall -O0 -m64 -g #CFLAGS= -W -Wall -O5 -fast -g diff --git a/src/libecoPCR/ecoError.P b/src/libecoPCR/ecoError.P new file mode 100644 index 0000000..7c7ae71 --- /dev/null +++ b/src/libecoPCR/ecoError.P @@ -0,0 +1,15 @@ +ecoError.o ecoError.P : ecoError.c ecoPCR.h /usr/include/stdio.h \ + /usr/include/_types.h /usr/include/sys/_types.h \ + /usr/include/sys/cdefs.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h diff --git a/src/libecoPCR/ecoIOUtils.P b/src/libecoPCR/ecoIOUtils.P new file mode 100644 index 0000000..fc34a70 --- /dev/null +++ b/src/libecoPCR/ecoIOUtils.P @@ -0,0 +1,15 @@ +ecoIOUtils.o ecoIOUtils.P : ecoIOUtils.c ecoPCR.h /usr/include/stdio.h \ + /usr/include/_types.h /usr/include/sys/_types.h \ + /usr/include/sys/cdefs.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h diff --git a/src/libecoPCR/ecoMalloc.P b/src/libecoPCR/ecoMalloc.P new file mode 100644 index 0000000..ea3767b --- /dev/null +++ b/src/libecoPCR/ecoMalloc.P @@ -0,0 +1,15 @@ +ecoMalloc.o ecoMalloc.P : ecoMalloc.c ecoPCR.h /usr/include/stdio.h \ + /usr/include/_types.h /usr/include/sys/_types.h \ + /usr/include/sys/cdefs.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h diff --git a/src/libecoPCR/ecodna.P b/src/libecoPCR/ecodna.P new file mode 100644 index 0000000..b9a71b9 --- /dev/null +++ b/src/libecoPCR/ecodna.P @@ -0,0 +1,5 @@ +ecodna.o ecodna.P : ecodna.c /usr/include/string.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/sys/cdefs.h \ + /usr/include/machine/_types.h /usr/include/i386/_types.h ecoPCR.h \ + /usr/include/stdio.h /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h diff --git a/src/libecoPCR/ecofilter.P b/src/libecoPCR/ecofilter.P new file mode 100644 index 0000000..d46d3e0 --- /dev/null +++ b/src/libecoPCR/ecofilter.P @@ -0,0 +1,5 @@ +ecofilter.o ecofilter.P : ecofilter.c ecoPCR.h /usr/include/stdio.h \ + /usr/include/_types.h /usr/include/sys/_types.h \ + /usr/include/sys/cdefs.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h diff --git a/src/libecoPCR/econame.P b/src/libecoPCR/econame.P new file mode 100644 index 0000000..4c9946c --- /dev/null +++ b/src/libecoPCR/econame.P @@ -0,0 +1,15 @@ +econame.o econame.P : econame.c ecoPCR.h /usr/include/stdio.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/sys/cdefs.h \ + /usr/include/machine/_types.h /usr/include/i386/_types.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/string.h /usr/include/stdlib.h /usr/include/available.h \ + /usr/include/sys/wait.h /usr/include/sys/signal.h \ + /usr/include/sys/appleapiopts.h /usr/include/machine/signal.h \ + /usr/include/i386/signal.h /usr/include/i386/_structs.h \ + /usr/include/sys/_structs.h /usr/include/machine/_structs.h \ + /usr/include/mach/i386/_structs.h /usr/include/sys/resource.h \ + /usr/include/machine/endian.h /usr/include/i386/endian.h \ + /usr/include/sys/_endian.h /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h diff --git a/src/libecoPCR/ecorank.P b/src/libecoPCR/ecorank.P new file mode 100644 index 0000000..75e09b9 --- /dev/null +++ b/src/libecoPCR/ecorank.P @@ -0,0 +1,15 @@ +ecorank.o ecorank.P : ecorank.c ecoPCR.h /usr/include/stdio.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/sys/cdefs.h \ + /usr/include/machine/_types.h /usr/include/i386/_types.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/string.h /usr/include/stdlib.h /usr/include/available.h \ + /usr/include/sys/wait.h /usr/include/sys/signal.h \ + /usr/include/sys/appleapiopts.h /usr/include/machine/signal.h \ + /usr/include/i386/signal.h /usr/include/i386/_structs.h \ + /usr/include/sys/_structs.h /usr/include/machine/_structs.h \ + /usr/include/mach/i386/_structs.h /usr/include/sys/resource.h \ + /usr/include/machine/endian.h /usr/include/i386/endian.h \ + /usr/include/sys/_endian.h /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h diff --git a/src/libecoPCR/ecoseq.P b/src/libecoPCR/ecoseq.P new file mode 100644 index 0000000..6222690 --- /dev/null +++ b/src/libecoPCR/ecoseq.P @@ -0,0 +1,19 @@ +ecoseq.o ecoseq.P : ecoseq.c ecoPCR.h /usr/include/stdio.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/sys/cdefs.h \ + /usr/include/machine/_types.h /usr/include/i386/_types.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/string.h /usr/include/zlib.h /usr/include/zconf.h \ + /usr/include/sys/types.h /usr/include/unistd.h \ + /usr/include/sys/unistd.h /usr/include/sys/select.h \ + /usr/include/sys/_select.h diff --git a/src/libecoPCR/ecotax.P b/src/libecoPCR/ecotax.P new file mode 100644 index 0000000..489fc97 --- /dev/null +++ b/src/libecoPCR/ecotax.P @@ -0,0 +1,15 @@ +ecotax.o ecotax.P : ecotax.c ecoPCR.h /usr/include/stdio.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/sys/cdefs.h \ + /usr/include/machine/_types.h /usr/include/i386/_types.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/string.h /usr/include/stdlib.h /usr/include/available.h \ + /usr/include/sys/wait.h /usr/include/sys/signal.h \ + /usr/include/sys/appleapiopts.h /usr/include/machine/signal.h \ + /usr/include/i386/signal.h /usr/include/i386/_structs.h \ + /usr/include/sys/_structs.h /usr/include/machine/_structs.h \ + /usr/include/mach/i386/_structs.h /usr/include/sys/resource.h \ + /usr/include/machine/endian.h /usr/include/i386/endian.h \ + /usr/include/sys/_endian.h /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h diff --git a/src/libecoprimer/Makefile b/src/libecoprimer/Makefile index d68202b..b4ae709 100644 --- a/src/libecoprimer/Makefile +++ b/src/libecoprimer/Makefile @@ -10,6 +10,7 @@ SOURCES = goodtaxon.c \ queue.c \ libstki.c \ sortmatch.c \ + pairtree.c \ pairs.c \ apat_search.c diff --git a/src/libecoprimer/amplifiatree.c b/src/libecoprimer/amplifiatree.c new file mode 100644 index 0000000..3698dea --- /dev/null +++ b/src/libecoprimer/amplifiatree.c @@ -0,0 +1,131 @@ +/* + * amplifiatree.c + * + * Created on: 7 mars 2009 + * Author: coissac + */ + +#include "ecoprimer.h" +#include + +static void cleanamplifia(pamplifia_t amplifia); +static void deleteamplifialist(pamplifialist_t list); +static int cmpamplifia(const void* p1,const void*p2); + + +static void cleanamplifiatlist(pamplifiacount_t list) +{ + if (list->amplifias) + ECOFREE(list->amplifias, + "Free amplifia list"); +} + +static void cleanamplifia(pamplifia_t amplifia) +{ + cleanamplifiatlist(&(amplifia->pcr)); +} + +static pamplifialist_t newamplifialist(pamplifialist_t parent, size_t size) +{ + pamplifialist_t tmp; + + tmp=ECOMALLOC(sizeof(amplifialist_t)+sizeof(amplifia_t)*(size-1), + "Cannot allocate new amplifia list"); + + tmp->amplifiaslots=size; + tmp->amplifiacount=0; + tmp->next=NULL; + + if (parent) + parent->next=(void*)tmp; + + return tmp; +} + +static void deleteamplifialist(pamplifialist_t list) +{ + size_t i; + + if (list) + { + if (list->next) + { + deleteamplifialist(list->next); + list->next=NULL; + } + for (i=0; i < list->amplifiacount; i++) + cleanamplifia((list->amplifias)+i); + + ECOFREE(list,"Delete amplifia list"); + } + +} + +static int cmpamplifia(const void* p1,const void*p2) +{ + pamplifia_t pr1,pr2; + + pr1=(pamplifia_t)p1; + pr2=(pamplifia_t)p2; + + if (pr1->p1 < pr2->p1) return -1; + if (pr1->p1 > pr2->p1) return 1; + + if (pr1->asdirect1 < pr2->asdirect1) return -1; + if (pr1->asdirect1 > pr2->asdirect1) return 1; + + if (pr1->p2 < pr2->p2) return -1; + if (pr1->p2 > pr2->p2) return 1; + + if (pr1->asdirect2 < pr2->asdirect2) return -1; + if (pr1->asdirect2 > pr2->asdirect2) return 1; + + return 0; +} + +pamplifia_t amplifiaintree (amplifia_t key, + pamplifiatree_t amplifialist) +{ + if (!amplifialist->tree) + return NULL; + + return *((pamplifia_t*)tsearch((const void *)(&key), + &(amplifialist->tree), + cmpamplifia + )); +} + +pamplifia_t insertamplifia(amplifia_t key, + pamplifiatree_t list) +{ + pamplifia_t current; + pamplifia_t found; + + if (list->last->amplifiacount==list->last->amplifiaslots) + { + list->last->next=newamplifialist(list,100); + list->last=list->last->next; + } + + current = list->last->amplifias + list->last->amplifiacount; + *current=key; + + found = *((pamplifia_t*)tsearch((const void *)current, + &(list->tree), + cmpamplifia)); + if (found==current) + list->last->amplifiacount++; + + return found; +} + +pamplifiatree_t initamplifiatree(pamplifiatree_t tree) +{ + if (!tree) + tree = ECOMALLOC(sizeof(amplifiatree_t),"Cannot allocate amplifia tree"); + + tree->first=newamplifialist(NULL,500); + tree->last=tree->first; + + tree->tree=NULL; +} diff --git a/src/libecoprimer/apat_search.P b/src/libecoprimer/apat_search.P new file mode 100644 index 0000000..bfc181f --- /dev/null +++ b/src/libecoprimer/apat_search.P @@ -0,0 +1,17 @@ +apat_search.o apat_search.P : apat_search.c /usr/include/stdio.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/sys/cdefs.h \ + /usr/include/machine/_types.h /usr/include/i386/_types.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/string.h libstki.h ecotype.h apat.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + ../libecoPCR/ecoPCR.h diff --git a/src/libecoprimer/aproxpattern.P b/src/libecoprimer/aproxpattern.P new file mode 100644 index 0000000..1b3ebf8 --- /dev/null +++ b/src/libecoprimer/aproxpattern.P @@ -0,0 +1,17 @@ +aproxpattern.o aproxpattern.P : aproxpattern.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h /usr/include/math.h /usr/include/architecture/i386/math.h diff --git a/src/libecoprimer/ecoprimer.h b/src/libecoprimer/ecoprimer.h index 5d26573..0feb6cb 100644 --- a/src/libecoprimer/ecoprimer.h +++ b/src/libecoprimer/ecoprimer.h @@ -79,28 +79,39 @@ typedef union { uint32_t value; } poslist_t, *ppostlist_t; -typedef struct { - word_t word; - uint32_t *directCount; - ppostlist_t directPos; +/** + * primer_t structure store fuzzy match positions for a primer + * on all sequences + */ - uint32_t *reverseCount; - ppostlist_t reversePos; - bool_t good; - uint32_t inexample; - uint32_t outexample; +typedef struct { + word_t word; //< code for the primer + uint32_t *directCount; //< Occurrence count on direct strand + ppostlist_t directPos; //< list of position list on direct strand + + uint32_t *reverseCount; //< Occurrence count on reverse strand + ppostlist_t reversePos; //< list of position list on reverse strand + + bool_t good; //< primer match more than quorum example and no + // more counterexample quorum. + + uint32_t inexample; //< count of example sequences matching primer + uint32_t outexample; //< count of counterexample sequences matching primer } primer_t, *pprimer_t; +/** + * primercount_t structure store fuzzy match positions for all primers + * on all sequences as a list of primer_t + */ typedef struct { pprimer_t primers; uint32_t size; } primercount_t, *pprimercount_t; typedef struct { - word_t word; + pprimer_t primer; uint32_t position; bool_t strand; - bool_t good; /*TR: Added*/ } primermatch_t, *pprimermatch_t; /*TR: Added*/ @@ -109,6 +120,19 @@ typedef struct { uint32_t matchcount; } primermatchcount_t, *pprimermatchcount_t; +typedef struct { + pecoseq_t sequence; + bool_t strand; + const char *amplifia; + int32_t length; +} amplifia_t, *pamplifia_t; + +typedef struct { + pamplifia_t amplifias; + uint32_t ampcount; + uint32_t ampslot; +} amplifiacount_t, *pamplifiacount_t; + typedef struct { char *amplifia; int32_t *taxonids; @@ -124,30 +148,51 @@ typedef struct { } taxampset_t, *ptaxampset_t; typedef struct { - word_t w1; - word_t w2; - uint32_t inexample; /*inexample count*/ - uint32_t outexample; /*outexample count*/ - - uint32_t mind; - uint32_t maxd; - - uint32_t ampsetcount; - uint32_t ampsetindex; - pampseqset_t ampset; - - uint32_t taxsetcount; - uint32_t taxsetindex; - ptaxampset_t taxset; - - uint32_t oktaxoncount; -} pairs_t, *ppairs_t; + pprimer_t p1; + bool_t asdirect1; + pprimer_t p2; + bool_t asdirect2; + + amplifiacount_t pcr; + + uint32_t inexample; //< example sequence count + uint32_t outexample; //< counterexample sequence count + + + + // these statistics are relative to inexample sequences + + uint32_t mind; //< minimum distance between primers + uint32_t maxd; //< maximum distance between primers + uint32_t sumd; //< distance sum + +// +// uint32_t ampsetcount; +// uint32_t ampsetindex; +// pampseqset_t ampset; +// +// uint32_t taxsetcount; +// uint32_t taxsetindex; +// ptaxampset_t taxset; +// +// uint32_t oktaxoncount; + +} pair_t, *ppair_t; /*TR: Added*/ + typedef struct { - ppairs_t pairs; - uint32_t paircount; -}pairscount_t, *ppairscount_t; + size_t paircount; + size_t pairslots; + void* next; + pair_t pairs[1]; +} pairlist_t, *ppairlist_t; + +typedef struct { + ppairlist_t first; + ppairlist_t last; + void *tree; +} pairtree_t, *ppairtree_t; typedef struct { pword_t words; @@ -232,7 +277,12 @@ pprimercount_t lookforAproxPrimer(pecodnadb_t database, uint32_t seqdbsize,uint3 void sortmatch(pprimermatch_t table,uint32_t N); +ppairtree_t initpairtree(ppairtree_t tree); +ppair_t pairintree (pair_t key,ppairtree_t pairlist); +ppair_t insertpair(pair_t key,ppairtree_t list); + + /*TR: Added*/ -pairscount_t buildPrimerPairs(pecodnadb_t seqdb,uint32_t seqdbsize,pprimercount_t primers,poptions_t options); +ppairtree_t buildPrimerPairs(pecodnadb_t seqdb,uint32_t seqdbsize,pprimercount_t primers,poptions_t options); #endif /* EPSORT_H_ */ diff --git a/src/libecoprimer/goodtaxon.P b/src/libecoprimer/goodtaxon.P new file mode 100644 index 0000000..a990580 --- /dev/null +++ b/src/libecoprimer/goodtaxon.P @@ -0,0 +1,17 @@ +goodtaxon.o goodtaxon.P : goodtaxon.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h diff --git a/src/libecoprimer/hashsequence.P b/src/libecoprimer/hashsequence.P new file mode 100644 index 0000000..d4be603 --- /dev/null +++ b/src/libecoprimer/hashsequence.P @@ -0,0 +1,17 @@ +hashsequence.o hashsequence.P : hashsequence.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h diff --git a/src/libecoprimer/libstki.P b/src/libecoprimer/libstki.P new file mode 100644 index 0000000..3b125ef --- /dev/null +++ b/src/libecoprimer/libstki.P @@ -0,0 +1,17 @@ +libstki.o libstki.P : libstki.c /usr/include/stdio.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/sys/cdefs.h \ + /usr/include/machine/_types.h /usr/include/i386/_types.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/string.h libstki.h ecotype.h ecoprimer.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + ../libecoPCR/ecoPCR.h apat.h debug.h diff --git a/src/libecoprimer/merge.P b/src/libecoprimer/merge.P new file mode 100644 index 0000000..fdb5796 --- /dev/null +++ b/src/libecoprimer/merge.P @@ -0,0 +1,17 @@ +merge.o merge.P : merge.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h diff --git a/src/libecoprimer/pairs.P b/src/libecoprimer/pairs.P new file mode 100644 index 0000000..61a7976 --- /dev/null +++ b/src/libecoprimer/pairs.P @@ -0,0 +1,17 @@ +pairs.o pairs.P : pairs.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h /usr/include/string.h diff --git a/src/libecoprimer/pairs.c b/src/libecoprimer/pairs.c index a5308a6..f01da82 100644 --- a/src/libecoprimer/pairs.c +++ b/src/libecoprimer/pairs.c @@ -7,34 +7,40 @@ #include "ecoprimer.h" #include +#include -primermatchcount_t buildPrimerPairsForOneSeq(uint32_t seqid,pprimercount_t primers,poptions_t options); +static void buildPrimerPairsForOneSeq(uint32_t seqid, + pecodnadb_t seqdb, + pprimercount_t primers, + ppairtree_t pairs, + poptions_t options); -int32_t pairinlist (ppairs_t pairlist, word_t w1, word_t w2, uint32_t size) -{ - uint32_t i; - - for (i = 0; i < size; i++) - { - if (w1 == pairlist[i].w1 && w2 == pairlist[i].w2) return i; - if (w1 == pairlist[i].w2 && w2 == pairlist[i].w1) return i; - } - return -1; -} -char *addamplifiasetelem (ppairs_t pair, char* amplifia, int32_t taxid) + + + + +/************************************* + * + * pair collection management + * + *************************************/ + +#ifdef MASKEDCODE + +char *addamplifiasetelem (ppair_t pair, char* amplifia, int32_t taxid) { uint32_t i; uint32_t j; char *ampused = NULL; - + if(pair->ampsetcount == 0) { pair->ampsetcount = 500; pair->ampsetindex = 0; pair->ampset = ECOMALLOC(pair->ampsetcount * sizeof(ampseqset_t),"Cannot allocate amplifia set"); } - + for (i = 0; i < pair->ampsetindex; i++) { if (strcmp (pair->ampset[i].amplifia, amplifia) == 0) @@ -43,43 +49,43 @@ char *addamplifiasetelem (ppairs_t pair, char* amplifia, int32_t taxid) break; } } - + if (i == 0) { pair->ampset[i].seqidcount = 100; pair->ampset[i].seqidindex = 0; pair->ampset[i].taxonids = ECOMALLOC(pair->ampset[i].seqidcount * sizeof(uint32_t),"Cannot allocate amplifia sequence table"); } - + if (pair->ampsetindex == pair->ampsetcount) { pair->ampsetcount += 500; pair->ampset = ECOREALLOC(pair->ampset, pair->ampsetcount * sizeof(ampseqset_t), "Cannot allocate amplifia set"); } - + if (pair->ampset[i].seqidindex == pair->ampset[i].seqidcount) { pair->ampset[i].seqidcount += 100; pair->ampset[i].taxonids = ECOREALLOC(pair->ampset[i].taxonids, pair->ampset[i].seqidcount * sizeof(int32_t), "Cannot allocate amplifia sequence table"); } - + if (pair->ampset[i].amplifia == NULL) { pair->ampset[i].amplifia = amplifia; pair->ampsetindex++; } - + for (j = 0; j < pair->ampset[i].seqidindex; j++) { if (pair->ampset[i].taxonids[j] == taxid) break; } - + if (j == pair->ampset[i].seqidindex) pair->ampset[i].taxonids[pair->ampset[i].seqidindex++] = taxid; return ampused; } -void addtaxampsetelem (ppairs_t pair, int32_t taxid, char *amplifia) +void addtaxampsetelem (ppair_t pair, int32_t taxid, char *amplifia) { uint32_t i; uint32_t j; @@ -90,42 +96,42 @@ void addtaxampsetelem (ppairs_t pair, int32_t taxid, char *amplifia) pair->taxsetindex = 0; pair->taxset = ECOMALLOC(pair->taxsetcount * sizeof(taxampset_t),"Cannot allocate taxon set"); } - + for (i = 0; i < pair->taxsetindex; i++) { if (pair->taxset[i].taxonid == taxid) break; } - + if (i == 0) { pair->taxset[i].amplifiacount = 100; pair->taxset[i].amplifiaindex = 0; pair->taxset[i].amplifia = ECOMALLOC(pair->taxset[i].amplifiacount * sizeof(char *),"Cannot allocate amplifia table"); } - + if (pair->taxsetindex == pair->taxsetcount) { pair->taxsetcount += 500; pair->taxset = ECOREALLOC(pair->taxset, pair->taxsetcount * sizeof(taxampset_t), "Cannot allocate taxon set"); } - + if (pair->taxset[i].amplifiaindex == pair->taxset[i].amplifiacount) { pair->taxset[i].amplifiacount += 100; pair->taxset[i].amplifia = ECOREALLOC(pair->taxset[i].amplifia, pair->taxset[i].amplifiacount * sizeof(char *), "Cannot allocate amplifia table"); } - + if (pair->taxset[i].taxonid == 0) { pair->taxset[i].taxonid = taxid; pair->taxsetindex++; } - + for (j = 0; j < pair->taxset[i].amplifiaindex; j++) { if (strcmp(pair->taxset[i].amplifia[j], amplifia) == 0) break; } - + if (j == pair->taxset[i].amplifiaindex) { pair->taxset[i].amplifia[j] = amplifia; @@ -135,16 +141,18 @@ void addtaxampsetelem (ppairs_t pair, int32_t taxid, char *amplifia) char *getamplifia (pecoseq_t seq, uint32_t start, uint32_t len) { + fprintf(stderr,"start : %d length : %d\n",start,len); char *amplifia = ECOMALLOC((len + 1) * sizeof(char),"Cannot allocate amplifia"); char *seqc = &seq->SQ[start]; - + strncpy(amplifia, seqc, len); return amplifia; } +#endif /*TR: Added*/ -pairscount_t buildPrimerPairs(pecodnadb_t seqdb,uint32_t seqdbsize,pprimercount_t primers,poptions_t options) +ppairtree_t buildPrimerPairs(pecodnadb_t seqdb,uint32_t seqdbsize,pprimercount_t primers,poptions_t options) { uint32_t i; uint32_t j; @@ -152,123 +160,131 @@ pairscount_t buildPrimerPairs(pecodnadb_t seqdb,uint32_t seqdbsize,pprimercount_ uint32_t d; uint32_t strt; uint32_t end; - uint32_t paircount = 0; - uint32_t pairslots = 500; - int32_t foundindex; - ppairs_t pairs; - pairscount_t primerpairs; + ppairtree_t primerpairs; primermatchcount_t seqmatchcount; word_t w1; word_t w2; char *amplifia; char *oldamp; - - pairs = ECOMALLOC(pairslots * sizeof(pairs_t),"Cannot allocate pairs table"); + + primerpairs = initpairtree(NULL); for (i=0; i < seqdbsize; i++) { - seqmatchcount = buildPrimerPairsForOneSeq(i, primers, options); - if (seqmatchcount.matchcount == 0) continue; - - for (j=0; j < seqmatchcount.matchcount; j++) - { - strt = 0; - w1 = seqmatchcount.matches[j].word; - /*first word should b on direct strand*/ - if (!seqmatchcount.matches[j].strand) - w1 = ecoComplementWord(w1, options->primer_length); - else - strt = options->primer_length; - - for (k=j+1; k < seqmatchcount.matchcount; k++) - { - end = 0; - w2 = seqmatchcount.matches[k].word; - /*second word should be on reverse strand*/ - if (seqmatchcount.matches[k].strand) - w2 = ecoComplementWord(w2, options->primer_length); - else - end = options->primer_length; - - if (!(seqmatchcount.matches[j].good || seqmatchcount.matches[k].good)) continue; - if (w1 == w2) continue; - - d = seqmatchcount.matches[k].position - seqmatchcount.matches[j].position; - if (d >= options->lmin && d <= options->lmax) - { - /*get amplified string*/ - amplifia = getamplifia (seqdb[i], seqmatchcount.matches[j].position + strt, d - strt - end); - - foundindex = pairinlist(pairs, w1, w2, paircount); - if (foundindex != -1) /*pair is found*/ - { - if (seqdb[i]->isexample) - pairs[foundindex].inexample++; - else - pairs[foundindex].outexample++; - - if (pairs[foundindex].mind > d) pairs[foundindex].mind = d; - else if (pairs[foundindex].maxd < d) pairs[foundindex].maxd = d; - - oldamp = addamplifiasetelem (&pairs[foundindex], amplifia, seqdb[i]->ranktaxonid); - /*if exact same string is already in amplifia set then use that for taxon set, it will help for - * calculating the fully identified taxons i.e specificity, we will compare pointrs instead of strings - * because same string means same pointer*/ - if (oldamp) - { - ECOFREE (amplifia, "free amplifia"); - amplifia = oldamp; - } - addtaxampsetelem (&pairs[foundindex], seqdb[i]->ranktaxonid, amplifia); - - continue; - } - - if (paircount == pairslots) - { - pairslots += 500; - pairs = ECOREALLOC(pairs, pairslots * sizeof(pairs_t), "Cannot allocate pairs table"); - } - pairs[paircount].w1 = w1; - pairs[paircount].w2 = w2; - if (seqdb[i]->isexample) pairs[paircount].inexample = 1; - else pairs[paircount].outexample = 1; - pairs[paircount].mind = d; - pairs[paircount].maxd = d; - oldamp = addamplifiasetelem (&pairs[paircount], amplifia, seqdb[i]->ranktaxonid); - addtaxampsetelem (&pairs[paircount], seqdb[i]->ranktaxonid, amplifia); - - paircount++; - } - else if (d > options->lmax) - break; /*once if the distance is greater than lmax then it will keep on increasing*/ - } - } - ECOFREE(seqmatchcount.matches, "Cannot free matches table"); + buildPrimerPairsForOneSeq(i, seqdb, primers, primerpairs, options); } - primerpairs.pairs = ECOREALLOC(pairs, paircount * sizeof(pairs_t), "Cannot allocate pairs table"); - primerpairs.paircount = paircount; - return primerpairs; +// if (seqmatchcount.matchcount == 0) continue; +// +// for (j=0; j < seqmatchcount.matchcount; j++) +// { +// strt = 0; +// w1 = seqmatchcount.matches[j].word; +// /*first word should b on direct strand*/ +// if (!seqmatchcount.matches[j].strand) +// w1 = ecoComplementWord(w1, options->primer_length); +// else +// strt = options->primer_length; +// +// for (k=j+1; k < seqmatchcount.matchcount; k++) +// { +// end = 0; +// w2 = seqmatchcount.matches[k].word; +// /*second word should be on reverse strand*/ +// if (seqmatchcount.matches[k].strand) +// w2 = ecoComplementWord(w2, options->primer_length); +// else +// end = options->primer_length; +// +// if (!(seqmatchcount.matches[j].good || seqmatchcount.matches[k].good)) continue; +// if (w1 == w2) continue; +// +// d = seqmatchcount.matches[k].position - seqmatchcount.matches[j].position; +// if (d >= options->lmin && d <= options->lmax) +// { +// /*get amplified string*/ +// amplifia = getamplifia (seqdb[i], seqmatchcount.matches[j].position + strt, d - strt - end); +// +// foundindex = pairinlist(pairs, w1, w2, paircount); +// if (foundindex != -1) /*pair is found*/ +// { +// if (seqdb[i]->isexample) +// pairs[foundindex].inexample++; +// else +// pairs[foundindex].outexample++; +// +// if (pairs[foundindex].mind > d) pairs[foundindex].mind = d; +// else if (pairs[foundindex].maxd < d) pairs[foundindex].maxd = d; +// +// oldamp = addamplifiasetelem (&pairs[foundindex], amplifia, seqdb[i]->ranktaxonid); +// /*if exact same string is already in amplifia set then use that for taxon set, it will help for +// * calculating the fully identified taxons i.e specificity, we will compare pointrs instead of strings +// * because same string means same pointer*/ +// if (oldamp) +// { +// ECOFREE (amplifia, "free amplifia"); +// amplifia = oldamp; +// } +// addtaxampsetelem (&pairs[foundindex], seqdb[i]->ranktaxonid, amplifia); +// +// continue; +// } +// +// if (paircount == pairslots) +// { +// pairslots += 500; +// pairs = ECOREALLOC(pairs, pairslots * sizeof(pairs_t), "Cannot allocate pairs table"); +// } +// pairs[paircount].w1 = w1; +// pairs[paircount].w2 = w2; +// if (seqdb[i]->isexample) pairs[paircount].inexample = 1; +// else pairs[paircount].outexample = 1; +// pairs[paircount].mind = d; +// pairs[paircount].maxd = d; +// oldamp = addamplifiasetelem (&pairs[paircount], amplifia, seqdb[i]->ranktaxonid); +// addtaxampsetelem (&pairs[paircount], seqdb[i]->ranktaxonid, amplifia); +// +// paircount++; +// } +// else if (d > options->lmax) +// break; /*once if the distance is greater than lmax then it will keep on increasing*/ +// } +// } +// ECOFREE(seqmatchcount.matches, "Cannot free matches table"); +// } +// primerpairs.pairs = ECOREALLOC(pairs, paircount * sizeof(pairs_t), "Cannot allocate pairs table"); +// primerpairs.paircount = paircount; +// return primerpairs; } -primermatchcount_t buildPrimerPairsForOneSeq(uint32_t seqid,pprimercount_t primers,poptions_t options) -{ - uint32_t i,j,k; - uint32_t matchcount=0; - pprimermatch_t matches = NULL; - primermatchcount_t seqmatchcount; +#define DMAX (2000000000) + +static void buildPrimerPairsForOneSeq(uint32_t seqid, + pecodnadb_t seqdb, + pprimercount_t primers, + ppairtree_t pairs, + poptions_t options) +{ + static uint32_t paircount=0; + uint32_t i,j,k; + uint32_t matchcount=0; + pprimermatch_t matches = NULL; + primermatchcount_t seqmatchcount; + ppair_t pcurrent; + pair_t current; + pprimer_t wswp; + bool_t bswp; + size_t distance; - seqmatchcount.matchcount = 0; - seqmatchcount.matches = NULL; - for (i=0;i < primers->size; i++) { matchcount+=primers->primers[i].directCount[seqid]; matchcount+=primers->primers[i].reverseCount[seqid]; } - - if (matchcount <= 0) return seqmatchcount; + + if (matchcount <= 0) + return; + matches = ECOMALLOC(matchcount * sizeof(primermatch_t),"Cannot allocate primers match table"); for (i=0,j=0;i < primers->size; i++) @@ -277,17 +293,15 @@ primermatchcount_t buildPrimerPairsForOneSeq(uint32_t seqid,pprimercount_t prime { if (primers->primers[i].directCount[seqid]==1) { - matches[j].word = primers->primers[i].word; + matches[j].primer = primers->primers+i; matches[j].strand=TRUE; - matches[j].good=primers->primers[i].good;/*TR: Added*/ matches[j].position=primers->primers[i].directPos[seqid].value; j++; } else for (k=0; k < primers->primers[i].directCount[seqid]; k++,j++) { - matches[j].word = primers->primers[i].word; + matches[j].primer = primers->primers+i; matches[j].strand=TRUE; - matches[j].good=primers->primers[i].good;/*TR: Added*/ matches[j].position=primers->primers[i].directPos[seqid].pointer[k]; } } @@ -296,26 +310,139 @@ primermatchcount_t buildPrimerPairsForOneSeq(uint32_t seqid,pprimercount_t prime { if (primers->primers[i].reverseCount[seqid]==1) { - matches[j].word = primers->primers[i].word; + matches[j].primer = primers->primers+i; matches[j].strand=FALSE; - matches[j].good=primers->primers[i].good;/*TR: Added*/ matches[j].position=primers->primers[i].reversePos[seqid].value; j++; } else for (k=0; k < primers->primers[i].reverseCount[seqid]; k++,j++) { - matches[j].word = primers->primers[i].word; + matches[j].primer = primers->primers+i; matches[j].strand=FALSE; - matches[j].good=primers->primers[i].good;/*TR: Added*/ matches[j].position=primers->primers[i].reversePos[seqid].pointer[k]; } } } - sortmatch(matches,matchcount); // sort in asscending order by position - - /*TR: Added*/ - seqmatchcount.matches = matches; - seqmatchcount.matchcount = matchcount; - return seqmatchcount; + if (matchcount>1) + { + fprintf(stderr,"\n====================================\n"); + + sortmatch(matches,matchcount); // sort in ascending order by position + + for (i=0; i < matchcount;i++) + { + // For all primers matching the sequence + + for(j=i+1; + (jprimer_length) < options->lmax); + j++ + ) + + // For all not too far primers + + if ( (matches[i].primer->good || matches[j].primer->good) + && (distance > options->lmin) + ) + { + + // If possible primer pair + + current.p1 = matches[i].primer; + current.asdirect1=matches[i].strand; + current.p2 = matches[j].primer; + current.asdirect2= !matches[j].strand; + current.maxd=DMAX; + current.mind=DMAX; + current.sumd=0; + current.inexample=0; + current.outexample=0; + + + // Standardize the pair + + if (current.p2->word < current.p1->word) + { + wswp = current.p1; + current.p1=current.p2; + current.p2=wswp; + + bswp = current.asdirect1; + current.asdirect1=current.asdirect2; + current.asdirect2=bswp; + } + + // Look for the new pair in already seen pairs + + pcurrent = insertpair(current,pairs); + + + if (seqdb[seqid]->isexample) + + { + pcurrent->inexample++; + pcurrent->sumd+=distance; + + if (pcurrent->maxd=DMAX || distance > pcurrent->maxd) + pcurrent->maxd = distance; + + if (distance < pcurrent->mind) + pcurrent->mind = distance; + } + else + pcurrent->outexample++; + + if ((pcurrent->outexample+pcurrent->inexample)==1) + { + paircount++; + pcurrent->pcr.ampslot=200; + pcurrent->pcr.ampcount=0; + pcurrent->pcr.amplifias = ECOMALLOC(sizeof(amplifia_t)*pcurrent->pcr.ampslot, + "Cannot allocate amplifia table"); + } + else + { + if (pcurrent->pcr.ampslot==pcurrent->pcr.ampcount) + { + pcurrent->pcr.ampslot+=200; + pcurrent->pcr.amplifias = ECOREALLOC(pcurrent->pcr.amplifias, + sizeof(amplifia_t)*pcurrent->pcr.ampslot, + "Cannot allocate amplifia table"); + } + } + + pcurrent->pcr.amplifias[pcr.ampcount].length=distance; + pcurrent->pcr.amplifias[pcr.ampcount].sequence=*(seqdb[seqid]); + // pcurrent->pcr.amplifias[pcr.ampcount].strand= ; + // pcurrent->pcr.amplifias[pcr.ampcount].amplifia= ; + + pcurrent->pcr.ampcount++; + + fprintf(stderr,"%c%c W1 : %s direct : %c", + "bG"[(int)pcurrent->p1->good], + "bG"[(int)pcurrent->p2->good], + ecoUnhashWord(pcurrent->p1->word, options->primer_length), + "><"[(int)pcurrent->asdirect1] + ); + + fprintf(stderr," W2 : %s direct : %c distance : %d (min/max/avg : %d/%d/%f) in/out: %d/%d %c (%d pairs)\n", + ecoUnhashWord(pcurrent->p2->word, options->primer_length), + "><"[(int)pcurrent->asdirect2], + distance, + pcurrent->mind,pcurrent->maxd, + (pcurrent->inexample) ? (float)pcurrent->sumd/pcurrent->inexample:0.0, + pcurrent->inexample,pcurrent->outexample, + " N"[(pcurrent->outexample+pcurrent->inexample)==1], + paircount + + ); + + + } + } + } + + + } diff --git a/src/libecoprimer/pairtree.P b/src/libecoprimer/pairtree.P new file mode 100644 index 0000000..e38e995 --- /dev/null +++ b/src/libecoprimer/pairtree.P @@ -0,0 +1,17 @@ +pairtree.o pairtree.P : pairtree.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h /usr/include/search.h diff --git a/src/libecoprimer/pairtree.c b/src/libecoprimer/pairtree.c new file mode 100644 index 0000000..53a38c3 --- /dev/null +++ b/src/libecoprimer/pairtree.c @@ -0,0 +1,133 @@ +/* + * pairtree.c + * + * Created on: 7 mars 2009 + * Author: coissac + */ + +#include "ecoprimer.h" +#include + +static void cleanpair(ppair_t pair); +static void deletepairlist(ppairlist_t list); +static int cmppair(const void* p1,const void*p2); + + +static void cleanamplifiatlist(pamplifiacount_t list) +{ + if (list->amplifias) + ECOFREE(list->amplifias, + "Free amplifia list"); +} + +static void cleanpair(ppair_t pair) +{ + cleanamplifiatlist(&(pair->pcr)); +} + +static ppairlist_t newpairlist(ppairlist_t parent, size_t size) +{ + ppairlist_t tmp; + + tmp=ECOMALLOC(sizeof(pairlist_t)+sizeof(pair_t)*(size-1), + "Cannot allocate new pair list"); + + tmp->pairslots=size; + tmp->paircount=0; + tmp->next=NULL; + + if (parent) + parent->next=(void*)tmp; + + return tmp; +} + +static void deletepairlist(ppairlist_t list) +{ + size_t i; + + if (list) + { + if (list->next) + { + deletepairlist(list->next); + list->next=NULL; + } + for (i=0; i < list->paircount; i++) + cleanpair((list->pairs)+i); + + ECOFREE(list,"Delete pair list"); + } + +} + +static int cmppair(const void* p1,const void*p2) +{ + ppair_t pr1,pr2; + + pr1=(ppair_t)p1; + pr2=(ppair_t)p2; + + if (pr1->p1 < pr2->p1) return -1; + if (pr1->p1 > pr2->p1) return 1; + + if (pr1->asdirect1 < pr2->asdirect1) return -1; + if (pr1->asdirect1 > pr2->asdirect1) return 1; + + if (pr1->p2 < pr2->p2) return -1; + if (pr1->p2 > pr2->p2) return 1; + + if (pr1->asdirect2 < pr2->asdirect2) return -1; + if (pr1->asdirect2 > pr2->asdirect2) return 1; + + return 0; +} + +ppair_t pairintree (pair_t key, + ppairtree_t pairlist) +{ + if (!pairlist->tree) + return NULL; + + return *((ppair_t*)tsearch((const void *)(&key), + &(pairlist->tree), + cmppair + )); +} + +ppair_t insertpair(pair_t key, + ppairtree_t list) +{ + ppair_t current; + ppair_t found; + + if (list->last->paircount==list->last->pairslots) + { + list->last->next=newpairlist(list,100); + list->last=list->last->next; + } + + current = list->last->pairs + list->last->paircount; + *current=key; + + found = *((ppair_t*)tsearch((const void *)current, + &(list->tree), + cmppair)); + if (found==current) + list->last->paircount++; + + return found; +} + +ppairtree_t initpairtree(ppairtree_t tree) +{ + fprintf(stderr,"coucou from initpairtree\n"); + + if (!tree) + tree = ECOMALLOC(sizeof(pairtree_t),"Cannot allocate pair tree"); + + tree->first=newpairlist(NULL,500); + tree->last=tree->first; + + tree->tree=NULL; +} diff --git a/src/libecoprimer/queue.P b/src/libecoprimer/queue.P new file mode 100644 index 0000000..e7a6bc9 --- /dev/null +++ b/src/libecoprimer/queue.P @@ -0,0 +1,17 @@ +queue.o queue.P : queue.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h diff --git a/src/libecoprimer/readdnadb.P b/src/libecoprimer/readdnadb.P new file mode 100644 index 0000000..9d16e11 --- /dev/null +++ b/src/libecoprimer/readdnadb.P @@ -0,0 +1,17 @@ +readdnadb.o readdnadb.P : readdnadb.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h diff --git a/src/libecoprimer/smothsort.P b/src/libecoprimer/smothsort.P new file mode 100644 index 0000000..2441cad --- /dev/null +++ b/src/libecoprimer/smothsort.P @@ -0,0 +1,10 @@ +smothsort.o smothsort.P : smothsort.c /usr/include/assert.h /usr/include/sys/cdefs.h \ + /usr/include/stdio.h /usr/include/_types.h /usr/include/sys/_types.h \ + /usr/include/machine/_types.h /usr/include/i386/_types.h \ + /usr/include/sys/types.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/machine/endian.h /usr/include/i386/endian.h \ + /usr/include/sys/_endian.h /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/sys/_structs.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h diff --git a/src/libecoprimer/sortmatch.P b/src/libecoprimer/sortmatch.P new file mode 100644 index 0000000..721cd46 --- /dev/null +++ b/src/libecoprimer/sortmatch.P @@ -0,0 +1,17 @@ +sortmatch.o sortmatch.P : sortmatch.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h /usr/include/math.h /usr/include/architecture/i386/math.h diff --git a/src/libecoprimer/sortword.P b/src/libecoprimer/sortword.P new file mode 100644 index 0000000..57df213 --- /dev/null +++ b/src/libecoprimer/sortword.P @@ -0,0 +1,17 @@ +sortword.o sortword.P : sortword.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h /usr/include/math.h /usr/include/architecture/i386/math.h diff --git a/src/libecoprimer/strictprimers.P b/src/libecoprimer/strictprimers.P new file mode 100644 index 0000000..cd887aa --- /dev/null +++ b/src/libecoprimer/strictprimers.P @@ -0,0 +1,18 @@ +strictprimers.o strictprimers.P : strictprimers.c ecoprimer.h /usr/include/inttypes.h \ + /usr/include/sys/cdefs.h /usr/include/_types.h \ + /usr/include/sys/_types.h /usr/include/machine/_types.h \ + /usr/include/i386/_types.h \ + /usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \ + /usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \ + /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \ + /usr/include/machine/signal.h /usr/include/i386/signal.h \ + /usr/include/i386/_structs.h /usr/include/sys/_structs.h \ + /usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \ + /usr/include/sys/resource.h /usr/include/machine/endian.h \ + /usr/include/i386/endian.h /usr/include/sys/_endian.h \ + /usr/include/libkern/_OSByteOrder.h \ + /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \ + /usr/include/machine/types.h /usr/include/i386/types.h \ + /usr/include/stdio.h ecotype.h ../libecoPCR/ecoPCR.h apat.h libstki.h \ + debug.h /usr/include/string.h /usr/include/math.h \ + /usr/include/architecture/i386/math.h