r92: fixed a bug for overlapping alignment

On the PBcR example E. coli reads, miniasm gives one circular unitig.
This commit is contained in:
Heng Li 2017-06-27 22:03:31 -04:00
parent 51057ab673
commit cdc2a1e29f
3 changed files with 6 additions and 3 deletions

6
main.c
View File

@ -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);

1
map.c
View File

@ -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);

View File

@ -1,6 +1,7 @@
#ifndef MMPRIV2_H
#define MMPRIV2_H
#include <assert.h>
#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) {