sorting chains while filtering chains

This commit is contained in:
Heng Li 2013-02-05 21:58:33 -05:00
parent a61288c768
commit 797a8c147e
1 changed files with 11 additions and 1 deletions

View File

@ -220,7 +220,7 @@ void mem_chain_flt(const mem_opt_t *opt, mem_chain_t *chn)
for (i = 0; i < chn->n; ++i) { for (i = 0; i < chn->n; ++i) {
mem_chain1_t *c = &chn->chains[i]; mem_chain1_t *c = &chn->chains[i];
int w = 0; int w = 0;
for (j = 0; j < c->n; ++j) w += c->seeds[j].len; for (j = 0; j < c->n; ++j) w += c->seeds[j].len; // FIXME: take care of seed overlaps
a[i].beg = c->seeds[0].qbeg; a[i].beg = c->seeds[0].qbeg;
a[i].end = c->seeds[c->n-1].qbeg + c->seeds[c->n-1].len; a[i].end = c->seeds[c->n-1].qbeg + c->seeds[c->n-1].len;
a[i].w = w; a[i].w = w;
@ -228,6 +228,16 @@ void mem_chain_flt(const mem_opt_t *opt, mem_chain_t *chn)
a[i].p2 = 0; a[i].p2 = 0;
} }
ks_introsort(mem_flt, chn->n, a); ks_introsort(mem_flt, chn->n, a);
{ // reorder chains such that the best chain appears first
mem_chain1_t *swap;
swap = malloc(sizeof(mem_chain1_t) * chn->n);
for (i = 0; i < chn->n; ++i) {
swap[i] = *((mem_chain1_t*)a[i].p);
a[i].p = &chn->chains[i]; // as we will memcpy() below, a[i].p is changed
}
memcpy(chn->chains, swap, sizeof(mem_chain1_t) * chn->n);
free(swap);
}
for (i = 1, n = 1; i < chn->n; ++i) { for (i = 1, n = 1; i < chn->n; ++i) {
for (j = 0; j < n; ++j) { for (j = 0; j < n; ++j) {
int b_max = a[j].beg > a[i].beg? a[j].beg : a[i].beg; int b_max = a[j].beg > a[i].beg? a[j].beg : a[i].beg;