From 372c90ceb5e168ed764fc5f38cd8fd68723ec3ef Mon Sep 17 00:00:00 2001 From: Heng Li Date: Tue, 10 Apr 2018 09:11:49 -0400 Subject: [PATCH] r764: fixed incorrect inversion mapq (#148) --- hit.c | 14 +++++++------- main.c | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/hit.c b/hit.c index ae74941..1c87851 100644 --- a/hit.c +++ b/hit.c @@ -412,23 +412,23 @@ void mm_seg_free(void *km, int n_segs, mm_seg_t *segs) static void mm_set_inv_mapq(void *km, int n_regs, mm_reg1_t *regs) { int i, n_aux; - uint64_t *aux; + mm128_t *aux; if (n_regs < 3) return; for (i = 0; i < n_regs; ++i) if (regs[i].inv) break; if (i == n_regs) return; // no inversion hits - aux = (uint64_t*)kmalloc(km, n_regs * 8); + aux = (mm128_t*)kmalloc(km, n_regs * 16); for (i = n_aux = 0; i < n_regs; ++i) if (regs[i].parent == i || regs[i].parent < 0) - aux[n_aux++] = (uint64_t)regs[i].as << 32 | i; - radix_sort_64(aux, aux + n_aux); + aux[n_aux].y = i, aux[n_aux++].x = (uint64_t)regs[i].rid << 32 | regs[i].rs; + radix_sort_128x(aux, aux + n_aux); for (i = 1; i < n_aux - 1; ++i) { - mm_reg1_t *inv = ®s[(int32_t)aux[i]]; + mm_reg1_t *inv = ®s[aux[i].y]; if (inv->inv) { - mm_reg1_t *l = ®s[(int32_t)aux[i-1]]; - mm_reg1_t *r = ®s[(int32_t)aux[i+1]]; + mm_reg1_t *l = ®s[aux[i-1].y]; + mm_reg1_t *r = ®s[aux[i+1].y]; inv->mapq = l->mapq < r->mapq? l->mapq : r->mapq; } } diff --git a/main.c b/main.c index 755fffe..7fba060 100644 --- a/main.c +++ b/main.c @@ -10,7 +10,7 @@ #include "getopt.h" #endif -#define MM_VERSION "2.10-r763-dirty" +#define MM_VERSION "2.10-r764-dirty" #ifdef __linux__ #include