Files hmmer-2.3.2-original/squid/libsquid.a and hmmer-2.3.2/squid/libsquid.a differ diff -uNr hmmer-2.3.2-original/src/fast_algorithms.c hmmer-2.3.2/src/fast_algorithms.c --- hmmer-2.3.2-original/src/fast_algorithms.c 2003-10-04 15:01:08.000000000 -0400 +++ hmmer-2.3.2/src/fast_algorithms.c 2006-05-02 22:58:02.418721750 -0400 @@ -82,6 +82,8 @@ int *dpp; /* ptr into dmx[i-1] (previous row) */ int *tpmm, *tpmi, *tpmd, *tpim, *tpii, *tpdm, *tpdd; /* ptrs into tsc */ int M; + /* JL changes to break some inter-line dependencies */ + int sc1,sc2,sc3,sc4,sc5,sc6,sc7,sc8; /* Make sure we have space for a DP matrix with 0..L rows, 0..M-1 columns. */ @@ -127,61 +129,84 @@ dc[0] = -INFTY; ic[0] = -INFTY; - for (k = 1; k <= M; k++) { - mc[k] = mpp[k-1] + tpmm[k-1]; - if ((sc = ip[k-1] + tpim[k-1]) > mc[k]) mc[k] = sc; - if ((sc = dpp[k-1] + tpdm[k-1]) > mc[k]) mc[k] = sc; - if ((sc = xmb + bp[k]) > mc[k]) mc[k] = sc; - mc[k] += ms[k]; - if (mc[k] < -INFTY) mc[k] = -INFTY; - - dc[k] = dc[k-1] + tpdd[k-1]; - if ((sc = mc[k-1] + tpmd[k-1]) > dc[k]) dc[k] = sc; - if (dc[k] < -INFTY) dc[k] = -INFTY; - - if (k < M) { - ic[k] = mpp[k] + tpmi[k]; - if ((sc = ip[k] + tpii[k]) > ic[k]) ic[k] = sc; - ic[k] += is[k]; - if (ic[k] < -INFTY) ic[k] = -INFTY; - } + for (k = 1; k < M; k++) { + /* mc[k] = mpp[k-1] + tpmm[k-1]; */ + sc1 = mpp[k-1] + tpmm[k-1]; + if (( ip[k-1] + tpim[k-1]) > sc1) sc1 = ip[k-1] + tpim[k-1] ; + if (( dpp[k-1] + tpdm[k-1]) > sc1) sc1 = dpp[k-1] + tpdm[k-1] ; + if (( xmb + bp[k]) > sc1) sc1 = xmb + bp[k] ; + sc1 += ms[k]; + if (sc1 < -INFTY) sc1 = -INFTY; + mc[k] = sc1; + } + + for (k = 1; k < M; k++) { + /* dc[k] = dc[k-1] + tpdd[k-1]; */ + sc2 = dc[k-1] + tpdd[k-1]; + if (( mc[k-1] + tpmd[k-1]) > sc2) sc2 = mc[k-1] + tpmd[k-1] ; + if (sc2 < -INFTY) sc2 = -INFTY; + dc[k] = sc2; } + for (k = 1; k < M; k++) { + /* ic[k] = mpp[k] + tpmi[k]; */ + sc3 = mpp[k] + tpmi[k]; + if ((ip[k] + tpii[k]) > sc3) sc3 = ip[k] + tpii[k] ; + sc3 += is[k]; + if (sc3 < -INFTY) sc3 = -INFTY; + ic[k]=sc3 ; + } + + k = M; + sc4 = mpp[k-1] + tpmm[k-1]; + if (( ip[k-1] + tpim[k-1]) > sc4) sc4 = ip[k-1] + tpim[k-1] ; + if (( dpp[k-1] + tpdm[k-1]) > sc4) sc4 = dpp[k-1] + tpdm[k-1] ; + if (( xmb + bp[k]) > sc4) sc4 = xmb + bp[k] ; + sc4 += ms[k]; + if (sc4 < -INFTY) sc1 = -INFTY; + mc[k] = sc4; + + dc[k] = dc[k-1] + tpdd[k-1]; + if (( mc[k-1] + tpmd[k-1]) > dc[k]) dc[k] = mc[k-1] + tpmd[k-1] ; + if (dc[k] < -INFTY) dc[k] = -INFTY; + + + /* Now the special states. Order is important here. * remember, C and J emissions are zero score by definition, */ /* N state */ xmx[i][XMN] = -INFTY; - if ((sc = xmx[i-1][XMN] + hmm->xsc[XTN][LOOP]) > -INFTY) - xmx[i][XMN] = sc; + if (( xmx[i-1][XMN] + hmm->xsc[XTN][LOOP]) > -INFTY) + xmx[i][XMN] = xmx[i-1][XMN] + hmm->xsc[XTN][LOOP]; /* E state */ xme = -INFTY; mpc = mmx[i]; ep = hmm->esc; for (k = 1; k <= hmm->M; k++) - if ((sc = mpc[k] + ep[k]) > xme) xme = sc; + if ((mpc[k] + ep[k]) > xme) xme = mpc[k] + ep[k] ; xmx[i][XME] = xme; /* J state */ xmx[i][XMJ] = -INFTY; - if ((sc = xmx[i-1][XMJ] + hmm->xsc[XTJ][LOOP]) > -INFTY) - xmx[i][XMJ] = sc; - if ((sc = xmx[i][XME] + hmm->xsc[XTE][LOOP]) > xmx[i][XMJ]) - xmx[i][XMJ] = sc; + if (( xmx[i-1][XMJ] + hmm->xsc[XTJ][LOOP]) > -INFTY) + xmx[i][XMJ] = xmx[i-1][XMJ] + hmm->xsc[XTJ][LOOP]; + if (( xmx[i][XME] + hmm->xsc[XTE][LOOP]) > xmx[i][XMJ]) + xmx[i][XMJ] = xmx[i][XME] + hmm->xsc[XTE][LOOP] ; /* B state */ xmx[i][XMB] = -INFTY; - if ((sc = xmx[i][XMN] + hmm->xsc[XTN][MOVE]) > -INFTY) - xmx[i][XMB] = sc; - if ((sc = xmx[i][XMJ] + hmm->xsc[XTJ][MOVE]) > xmx[i][XMB]) - xmx[i][XMB] = sc; + if (( xmx[i][XMN] + hmm->xsc[XTN][MOVE]) > -INFTY) + xmx[i][XMB] = xmx[i][XMN] + hmm->xsc[XTN][MOVE]; + if (( xmx[i][XMJ] + hmm->xsc[XTJ][MOVE]) > xmx[i][XMB]) + xmx[i][XMB] = xmx[i][XMJ] + hmm->xsc[XTJ][MOVE]; /* C state */ xmx[i][XMC] = -INFTY; - if ((sc = xmx[i-1][XMC] + hmm->xsc[XTC][LOOP]) > -INFTY) - xmx[i][XMC] = sc; - if ((sc = xmx[i][XME] + hmm->xsc[XTE][MOVE]) > xmx[i][XMC]) - xmx[i][XMC] = sc; + if (( xmx[i-1][XMC] + hmm->xsc[XTC][LOOP]) > -INFTY) + xmx[i][XMC] = xmx[i-1][XMC] + hmm->xsc[XTC][LOOP]; + if (( xmx[i][XME] + hmm->xsc[XTE][MOVE]) > xmx[i][XMC]) + xmx[i][XMC] = xmx[i][XME] + hmm->xsc[XTE][MOVE]; } /* T state (not stored) */ sc = xmx[L][XMC] + hmm->xsc[XTC][MOVE]; Files hmmer-2.3.2-original/testsuite/sreaa15511.OPT.HMM.ssi and hmmer-2.3.2/testsuite/sreaa15511.OPT.HMM.ssi differ