bugfix: bug in the new ksw.c
On my test data, one alignment is different, caused by polyA
This commit is contained in:
parent
28a7d501f2
commit
557daabf38
|
|
@ -128,17 +128,23 @@ void bsw2_pair1(const bsw2opt_t *opt, int64_t l_pac, const uint8_t *pac, const b
|
||||||
}
|
}
|
||||||
#ifndef _NO_SSE2
|
#ifndef _NO_SSE2
|
||||||
{ // FIXME!!! The following block has not been tested since the update of the ksw library
|
{ // FIXME!!! The following block has not been tested since the update of the ksw library
|
||||||
int flag = KSW_XSUBO | KSW_XSTOP | KSW_XSTART | (l_mseq * g_mat[0] < 250? KSW_XBYTE : 0);
|
int flag = KSW_XSUBO | KSW_XSTART | (l_mseq * g_mat[0] < 250? KSW_XBYTE : 0) | opt->t;
|
||||||
kswr_t aln;
|
kswr_t aln;
|
||||||
aln = ksw_align(l_mseq, seq, end - beg, ref, 5, g_mat, opt->q, opt->r, flag, 0);
|
aln = ksw_align(l_mseq, seq, end - beg, ref, 5, g_mat, opt->q, opt->r, flag, 0);
|
||||||
a->G = aln.score;
|
a->G = aln.score;
|
||||||
a->G2 = aln.score2;
|
a->G2 = aln.score2;
|
||||||
|
if (a->G < opt->t) a->G = 0;
|
||||||
if (a->G2 < opt->t) a->G2 = 0;
|
if (a->G2 < opt->t) a->G2 = 0;
|
||||||
if (a->G2) a->flag |= BSW2_FLAG_TANDEM;
|
if (a->G2) a->flag |= BSW2_FLAG_TANDEM;
|
||||||
a->k = beg + aln.tb;
|
a->k = beg + aln.tb;
|
||||||
a->len = aln.te - aln.tb;
|
a->len = aln.te - aln.tb + 1;
|
||||||
a->beg = aln.qb;
|
a->beg = aln.qb;
|
||||||
a->end = aln.qe;
|
a->end = aln.qe + 1;
|
||||||
|
/*
|
||||||
|
printf("[Q] "); for (i = 0; i < l_mseq; ++i) putchar("ACGTN"[(int)seq[i]]); putchar('\n');
|
||||||
|
printf("[R] "); for (i = 0; i < end - beg; ++i) putchar("ACGTN"[(int)ref[i]]); putchar('\n');
|
||||||
|
printf("G=%d,G2=%d,beg=%d,end=%d,k=%lld,len=%d\n", a->G, a->G2, a->beg, a->end, a->k, a->len);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
6
ksw.c
6
ksw.c
|
|
@ -211,7 +211,7 @@ end_loop16:
|
||||||
low = te - i; high = te + i;
|
low = te - i; high = te + i;
|
||||||
for (i = 0; i < n_b; ++i) {
|
for (i = 0; i < n_b; ++i) {
|
||||||
int e = (int32_t)b[i];
|
int e = (int32_t)b[i];
|
||||||
if ((e < low || e > high) && b[i]>>32 > (uint32_t)r.score2)
|
if ((e < low || e > high) && (int)(b[i]>>32) > r.score2)
|
||||||
r.score2 = b[i]>>32, r.te2 = e;
|
r.score2 = b[i]>>32, r.te2 = e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -311,7 +311,7 @@ end_loop8:
|
||||||
low = te - i; high = te + i;
|
low = te - i; high = te + i;
|
||||||
for (i = 0; i < n_b; ++i) {
|
for (i = 0; i < n_b; ++i) {
|
||||||
int e = (int32_t)b[i];
|
int e = (int32_t)b[i];
|
||||||
if ((e < low || e > high) && b[i]>>32 > (uint32_t)r.score2)
|
if ((e < low || e > high) && (int)(b[i]>>32) > r.score2)
|
||||||
r.score2 = b[i]>>32, r.te2 = e;
|
r.score2 = b[i]>>32, r.te2 = e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -587,7 +587,7 @@ int main(int argc, char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (minsc > 0xffff) minsc = 0xffff;
|
if (minsc > 0xffff) minsc = 0xffff;
|
||||||
if (minsc > 0) xtra |= KSW_XSUBO | minsc;
|
xtra |= KSW_XSUBO | minsc;
|
||||||
// initialize scoring matrix
|
// initialize scoring matrix
|
||||||
for (i = k = 0; i < 4; ++i) {
|
for (i = k = 0; i < 4; ++i) {
|
||||||
for (j = 0; j < 4; ++j)
|
for (j = 0; j < 4; ++j)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue