From 797a8c147e266458d1ea8c1790ea4e1b5666ffc3 Mon Sep 17 00:00:00 2001 From: Heng Li Date: Tue, 5 Feb 2013 21:58:33 -0500 Subject: [PATCH] sorting chains while filtering chains --- bwamem.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/bwamem.c b/bwamem.c index 54355e3..69f9e81 100644 --- a/bwamem.c +++ b/bwamem.c @@ -220,7 +220,7 @@ void mem_chain_flt(const mem_opt_t *opt, mem_chain_t *chn) for (i = 0; i < chn->n; ++i) { mem_chain1_t *c = &chn->chains[i]; 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].end = c->seeds[c->n-1].qbeg + c->seeds[c->n-1].len; 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; } 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 (j = 0; j < n; ++j) { int b_max = a[j].beg > a[i].beg? a[j].beg : a[i].beg;