From: Heng Li Date: Tue, 19 Oct 2010 23:44:31 +0000 (+0000) Subject: * Minor code changes. No real effect. X-Git-Url: https://git.donarmstrong.com/?p=samtools.git;a=commitdiff_plain;h=eba7ecb49032b6e1657a1a6aaf95b5abeaf49c94 * Minor code changes. No real effect. * change quality to 30 in toy.sam --- diff --git a/examples/toy.sam b/examples/toy.sam index eae1e2d..c6d0570 100644 --- a/examples/toy.sam +++ b/examples/toy.sam @@ -6,9 +6,9 @@ r003 0 ref 9 30 5H6M * 0 0 AGCTAA * r004 0 ref 16 30 6M14N1I5M * 0 0 ATAGCTCTCAGC * r003 16 ref 29 30 6H5M * 0 0 TAGGC * r001 83 ref 37 30 9M = 7 -39 CAGCGCCAT * -x1 0 ref2 1 30 20M * 0 0 aggttttataaaacaaataa :::::::::::::::::::: -x2 0 ref2 2 30 21M * 0 0 ggttttataaaacaaataatt ::::::::::::::::::::: -x3 0 ref2 6 30 9M4I13M * 0 0 ttataaaacAAATaattaagtctaca :::::::::::::::::::::::::: -x4 0 ref2 10 30 25M * 0 0 CaaaTaattaagtctacagagcaac ::::::::::::::::::::::::: -x5 0 ref2 12 30 24M * 0 0 aaTaattaagtctacagagcaact :::::::::::::::::::::::: -x6 0 ref2 14 30 23M * 0 0 Taattaagtctacagagcaacta ::::::::::::::::::::::: +x1 0 ref2 1 30 20M * 0 0 aggttttataaaacaaataa ???????????????????? +x2 0 ref2 2 30 21M * 0 0 ggttttataaaacaaataatt ????????????????????? +x3 0 ref2 6 30 9M4I13M * 0 0 ttataaaacAAATaattaagtctaca ?????????????????????????? +x4 0 ref2 10 30 25M * 0 0 CaaaTaattaagtctacagagcaac ????????????????????????? +x5 0 ref2 12 30 24M * 0 0 aaTaattaagtctacagagcaact ???????????????????????? +x6 0 ref2 14 30 23M * 0 0 Taattaagtctacagagcaacta ??????????????????????? diff --git a/kaln.c b/kaln.c index 331fbb0..6807791 100644 --- a/kaln.c +++ b/kaln.c @@ -377,6 +377,8 @@ uint32_t *ka_global_core(uint8_t *seq1, int len1, uint8_t *seq2, int len2, const static float g_qual2prob[256]; +#define EI .25 +#define EM .3333333333333 #define set_u(u, b, i, k) { int x=(i)-(b); x=x>0?x:0; (u)=((k)-x+1)*3; } ka_probpar_t ka_probpar_def = { 0.001, 0.1, 10 }; @@ -450,9 +452,9 @@ int ka_prob_glocal(const uint8_t *_ref, int l_ref, const uint8_t *_query, int l_ int beg = 1, end = l_ref < bw + 1? l_ref : bw + 1, _beg, _end; for (k = beg, sum = 0.; k <= end; ++k) { int u; - double e = (ref[k] > 3 || query[1] > 3)? 1. : ref[k] == query[1]? 1. - qual[1] : qual[1] / 3.; + double e = (ref[k] > 3 || query[1] > 3)? 1. : ref[k] == query[1]? 1. - qual[1] : qual[1] * EM; set_u(u, bw, 1, k); - fi[u+0] = e * bM; fi[u+1] = .25 * bI; + fi[u+0] = e * bM; fi[u+1] = EI * bI; sum += fi[u] + fi[u+1]; } // rescale @@ -470,10 +472,10 @@ int ka_prob_glocal(const uint8_t *_ref, int l_ref, const uint8_t *_query, int l_ for (k = beg, sum = 0.; k <= end; ++k) { int u, v11, v01, v10; double e; - e = (ref[k] > 3 || qyi > 3)? 1. : ref[k] == qyi? 1. - qli : qli / 3.; + e = (ref[k] > 3 || qyi > 3)? 1. : ref[k] == qyi? 1. - qli : qli * EM; set_u(u, bw, i, k); set_u(v11, bw, i-1, k-1); set_u(v10, bw, i-1, k); set_u(v01, bw, i, k-1); fi[u+0] = e * (m[0] * fi1[v11+0] + m[3] * fi1[v11+1] + m[6] * fi1[v11+2]); - fi[u+1] = .25 * (m[1] * fi1[v10+0] + m[4] * fi1[v10+1]); + fi[u+1] = EI * (m[1] * fi1[v10+0] + m[4] * fi1[v10+1]); fi[u+2] = m[2] * fi[v01+0] + m[8] * fi[v01+2]; sum += fi[u] + fi[u+1] + fi[u+2]; // fprintf(stderr, "F (%d,%d;%d): %lg,%lg,%lg\n", i, k, u, fi[u], fi[u+1], fi[u+2]); // DEBUG @@ -513,9 +515,9 @@ int ka_prob_glocal(const uint8_t *_ref, int l_ref, const uint8_t *_query, int l_ int u, v11, v01, v10; double e; set_u(u, bw, i, k); set_u(v11, bw, i+1, k+1); set_u(v10, bw, i+1, k); set_u(v01, bw, i, k+1); - e = (k >= l_ref? 0 : (ref[k+1] > 3 || qyi1 > 3)? 1. : ref[k+1] == qyi1? 1. - qli1 : qli1 / 3.) * bi1[v11]; - bi[u+0] = e * m[0] + .25 * m[1] * bi1[v10+1] + m[2] * bi[v01+2]; // bi1[v11] has been foled into e. - bi[u+1] = e * m[3] + .25 * m[4] * bi1[v10+1]; + e = (k >= l_ref? 0 : (ref[k+1] > 3 || qyi1 > 3)? 1. : ref[k+1] == qyi1? 1. - qli1 : qli1 * EM) * bi1[v11]; + bi[u+0] = e * m[0] + EI * m[1] * bi1[v10+1] + m[2] * bi[v01+2]; // bi1[v11] has been foled into e. + bi[u+1] = e * m[3] + EI * m[4] * bi1[v10+1]; bi[u+2] = (e * m[6] + m[8] * bi[v01+2]) * y; // fprintf(stderr, "B (%d,%d;%d): %lg,%lg,%lg\n", i, k, u, bi[u], bi[u+1], bi[u+2]); // DEBUG } @@ -528,10 +530,10 @@ int ka_prob_glocal(const uint8_t *_ref, int l_ref, const uint8_t *_query, int l_ double sum = 0.; for (k = end; k >= beg; --k) { int u; - double e = (ref[k] > 3 || query[1] > 3)? 1. : ref[k] == query[1]? 1. - qual[1] : qual[1] / 3.; + double e = (ref[k] > 3 || query[1] > 3)? 1. : ref[k] == query[1]? 1. - qual[1] : qual[1] * EM; set_u(u, bw, 1, k); if (u < 3 || u >= bw2*3+3) continue; - sum += e * b[1][u+0] * bM + .25 * b[1][u+1] * bI; + sum += e * b[1][u+0] * bM + EI * b[1][u+1] * bI; } set_u(k, bw, 0, 0); pb = b[0][k] = sum / s[0]; // if everything works as is expected, pb == 1.0