From cdc2a1e29faa502f4172ef01dd2e9b3d75757a21 Mon Sep 17 00:00:00 2001 From: Heng Li Date: Tue, 27 Jun 2017 22:03:31 -0400 Subject: [PATCH] r92: fixed a bug for overlapping alignment On the PBcR example E. coli reads, miniasm gives one circular unitig. --- main.c | 6 +++--- map.c | 1 + mmpriv.h | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/main.c b/main.c index 101bbaa..c81f747 100644 --- a/main.c +++ b/main.c @@ -10,7 +10,7 @@ #include "minimap.h" #include "mmpriv.h" -#define MM_VERSION "2.0-r90-pre" +#define MM_VERSION "2.0-r92-pre" void liftrlimit() { @@ -112,7 +112,7 @@ int main(int argc, char *argv[]) } else if (c == 'x') { if (strcmp(optarg, "ava10k") == 0) { opt.flag |= MM_F_AVA | MM_F_NO_SELF; - opt.min_score = 100; + opt.min_score = 100, opt.pri_ratio = 0.0f; is_hpc = 1, k = 19, w = 5; } } @@ -138,7 +138,7 @@ int main(int argc, char *argv[]) fprintf(stderr, " -S skip self and dual mappings\n"); fprintf(stderr, " -p FLOAT threshold to output a mapping [%g]\n", opt.pri_ratio); fprintf(stderr, " -x STR preset (recommended to be applied before other options) []\n"); - fprintf(stderr, " ava10k: -Hk19 -Sw5 -s100 (PacBio/ONT all-vs-all read mapping)\n"); + fprintf(stderr, " ava10k: -Hk19 -Sw5 -p0 -s100 (PacBio/ONT all-vs-all read mapping)\n"); fprintf(stderr, " Alignment:\n"); fprintf(stderr, " -A INT matching score [%d]\n", opt.a); fprintf(stderr, " -B INT mismatch penalty [%d]\n", opt.b); diff --git a/map.c b/map.c index 9657915..c1ac90e 100644 --- a/map.c +++ b/map.c @@ -281,6 +281,7 @@ mm_reg1_t *mm_map_frag(const mm_mapopt_t *opt, const mm_idx_t *mi, mm_tbuf_t *b, } } } + n_a = j; radix_sort_128x(a, a + n_a); for (i = 0; i < n; ++i) if (m[i].is_alloc) kfree(b->km, m[i].x.r); diff --git a/mmpriv.h b/mmpriv.h index cc56ad0..164e050 100644 --- a/mmpriv.h +++ b/mmpriv.h @@ -1,6 +1,7 @@ #ifndef MMPRIV2_H #define MMPRIV2_H +#include #include "minimap.h" #include "bseq.h" @@ -41,6 +42,7 @@ static inline void mm_reg_set_coor(mm_reg1_t *r, int32_t qlen, const mm128_t *a) int32_t k = r->as; r->rev = a[k].x>>63; r->rid = a[k].x<<1>>33; + assert(r->rid != 0x7fffffff); r->rs = (int32_t)a[k].x + 1 > (int32_t)(a[k].y>>32)? (int32_t)a[k].x + 1 - (int32_t)(a[k].y>>32) : 0; r->re = (int32_t)a[k + r->cnt - 1].x + 1; if (!r->rev) {