mirror of
https://github.com/lh3/minimap2.git
synced 2026-10-06 04:18:12 +08:00
r1206: enabled RMQ for lr:hqae
Also fixed a bug in determining inner_dist for RMQ. It should have no effect on previous presets.
This commit is contained in:
@@ -933,14 +933,14 @@ double mm_event_identity(const mm_reg1_t *r)
|
|||||||
static int32_t mm_recal_max_dp(const mm_reg1_t *r, double b2, int32_t match_sc)
|
static int32_t mm_recal_max_dp(const mm_reg1_t *r, double b2, int32_t match_sc)
|
||||||
{
|
{
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
int32_t n_gap = 0, n_gapo = 0, n_mis;
|
int32_t n_gap = 0, n_mis;
|
||||||
double gap_cost = 0.0;
|
double gap_cost = 0.0;
|
||||||
if (r->p == 0) return -1;
|
if (r->p == 0) return -1;
|
||||||
for (i = 0; i < r->p->n_cigar; ++i) {
|
for (i = 0; i < r->p->n_cigar; ++i) {
|
||||||
int32_t op = r->p->cigar[i] & 0xf, len = r->p->cigar[i] >> 4;
|
int32_t op = r->p->cigar[i] & 0xf, len = r->p->cigar[i] >> 4;
|
||||||
if (op == MM_CIGAR_INS || op == MM_CIGAR_DEL) {
|
if (op == MM_CIGAR_INS || op == MM_CIGAR_DEL) {
|
||||||
gap_cost += b2 + (double)mg_log2(1.0 + len);
|
gap_cost += b2 + (double)mg_log2(1.0 + len);
|
||||||
++n_gapo, n_gap += len;
|
n_gap += len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
n_mis = r->blen + r->p->n_ambi - r->mlen - n_gap;
|
n_mis = r->blen + r->p->n_ambi - r->mlen - n_gap;
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ mm128_t *mg_lchain_dp(int max_dist_x, int max_dist_y, int bw, int max_skip, int
|
|||||||
if (max_ii < 0 || (a[i].x - a[max_ii].x <= (int64_t)max_dist_x && f[max_ii] < f[i]))
|
if (max_ii < 0 || (a[i].x - a[max_ii].x <= (int64_t)max_dist_x && f[max_ii] < f[i]))
|
||||||
max_ii = i;
|
max_ii = i;
|
||||||
if (mmax_f < max_f) mmax_f = max_f;
|
if (mmax_f < max_f) mmax_f = max_f;
|
||||||
//fprintf(stderr, "X1\t%ld\t%ld:%d\t%ld\t%ld:%d\t%ld\t%ld\t%ld\n", (long)i, (long)(a[i].x>>32), (int32_t)a[i].x, (long)max_j, max_j<0?-1L:(long)(a[max_j].x>>32), max_j<0?-1:(int32_t)a[max_j].x, (long)max_f, (long)v[i], (long)mmax_f);
|
//fprintf(stderr, "X1\t%ld\t%ld:%d\t%ld\t%ld:%d\t%ld\t%ld\n", (long)i, (long)(a[i].x>>32), (int32_t)a[i].x, (long)max_j, max_j<0?-1L:(long)(a[max_j].x>>32), max_j<0?-1:(int32_t)a[max_j].x, (long)max_f, (long)v[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
u = mg_chain_backtrack(km, n, f, p, v, t, min_cnt, min_sc, max_drop, &n_u, &n_v);
|
u = mg_chain_backtrack(km, n, f, p, v, t, min_cnt, min_sc, max_drop, &n_u, &n_v);
|
||||||
@@ -263,7 +263,8 @@ mm128_t *mg_lchain_rmq(int max_dist, int max_dist_inner, int bw, int max_chn_ski
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (max_dist < bw) max_dist = bw;
|
if (max_dist < bw) max_dist = bw;
|
||||||
if (max_dist_inner <= 0 || max_dist_inner >= max_dist) max_dist_inner = 0;
|
if (max_dist_inner < 0) max_dist_inner = 0;
|
||||||
|
if (max_dist_inner > max_dist) max_dist_inner = max_dist;
|
||||||
p = Kmalloc(km, int64_t, n);
|
p = Kmalloc(km, int64_t, n);
|
||||||
f = Kmalloc(km, int32_t, n);
|
f = Kmalloc(km, int32_t, n);
|
||||||
t = Kcalloc(km, int32_t, n);
|
t = Kcalloc(km, int32_t, n);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#define MM_VERSION "2.27-r1205-dirty"
|
#define MM_VERSION "2.27-r1206-dirty"
|
||||||
|
|
||||||
#define MM_F_NO_DIAG (0x001LL) // no exact diagonal hit
|
#define MM_F_NO_DIAG (0x001LL) // no exact diagonal hit
|
||||||
#define MM_F_NO_DUAL (0x002LL) // skip pairs where query name is lexicographically larger than target name
|
#define MM_F_NO_DUAL (0x002LL) // skip pairs where query name is lexicographically larger than target name
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ int mm_set_opt(const char *preset, mm_idxopt_t *io, mm_mapopt_t *mo)
|
|||||||
}
|
}
|
||||||
} else if (strcmp(preset, "lr:hqae") == 0) { // high-quality assembly evaluation
|
} else if (strcmp(preset, "lr:hqae") == 0) { // high-quality assembly evaluation
|
||||||
io->flag = 0, io->k = 25, io->w = 51;
|
io->flag = 0, io->k = 25, io->w = 51;
|
||||||
|
mo->flag |= MM_F_RMQ;
|
||||||
mo->min_mid_occ = 50, mo->max_mid_occ = 500;
|
mo->min_mid_occ = 50, mo->max_mid_occ = 500;
|
||||||
mo->rmq_inner_dist = 5000;
|
mo->rmq_inner_dist = 5000;
|
||||||
mo->occ_dist = 200;
|
mo->occ_dist = 200;
|
||||||
|
|||||||
Reference in New Issue
Block a user