added --chain-skip-scale
This commit is contained in:
parent
7ee62dae1d
commit
aefa2c0d86
2
main.c
2
main.c
|
|
@ -75,6 +75,7 @@ static ko_longopt_t long_options[] = {
|
||||||
{ "qstrand", ko_no_argument, 348 },
|
{ "qstrand", ko_no_argument, 348 },
|
||||||
{ "cap-kalloc", ko_required_argument, 349 },
|
{ "cap-kalloc", ko_required_argument, 349 },
|
||||||
{ "q-occ-frac", ko_required_argument, 350 },
|
{ "q-occ-frac", ko_required_argument, 350 },
|
||||||
|
{ "chain-skip-scale",ko_required_argument,351 },
|
||||||
{ "help", ko_no_argument, 'h' },
|
{ "help", ko_no_argument, 'h' },
|
||||||
{ "max-intron-len", ko_required_argument, 'G' },
|
{ "max-intron-len", ko_required_argument, 'G' },
|
||||||
{ "version", ko_no_argument, 'V' },
|
{ "version", ko_no_argument, 'V' },
|
||||||
|
|
@ -225,6 +226,7 @@ int main(int argc, char *argv[])
|
||||||
else if (c == 341) opt.junc_bonus = atoi(o.arg); // --junc-bonus
|
else if (c == 341) opt.junc_bonus = atoi(o.arg); // --junc-bonus
|
||||||
else if (c == 342) opt.flag |= MM_F_SAM_HIT_ONLY; // --sam-hit-only
|
else if (c == 342) opt.flag |= MM_F_SAM_HIT_ONLY; // --sam-hit-only
|
||||||
else if (c == 343) opt.chain_gap_scale = atof(o.arg); // --chain-gap-scale
|
else if (c == 343) opt.chain_gap_scale = atof(o.arg); // --chain-gap-scale
|
||||||
|
else if (c == 351) opt.chain_skip_scale = atof(o.arg); // --chain-skip-scale
|
||||||
else if (c == 344) alt_list = o.arg; // --alt
|
else if (c == 344) alt_list = o.arg; // --alt
|
||||||
else if (c == 345) opt.alt_drop = atof(o.arg); // --alt-drop
|
else if (c == 345) opt.alt_drop = atof(o.arg); // --alt-drop
|
||||||
else if (c == 346) opt.mask_len = mm_parse_num(o.arg); // --mask-len
|
else if (c == 346) opt.mask_len = mm_parse_num(o.arg); // --mask-len
|
||||||
|
|
|
||||||
11
map.c
11
map.c
|
|
@ -240,6 +240,7 @@ void mm_map_frag(const mm_idx_t *mi, int n_segs, const int *qlens, const char **
|
||||||
mm128_v mv = {0,0,0};
|
mm128_v mv = {0,0,0};
|
||||||
mm_reg1_t *regs0;
|
mm_reg1_t *regs0;
|
||||||
km_stat_t kmst;
|
km_stat_t kmst;
|
||||||
|
float chn_pen_gap, chn_pen_skip;
|
||||||
|
|
||||||
for (i = 0, qlen_sum = 0; i < n_segs; ++i)
|
for (i = 0, qlen_sum = 0; i < n_segs; ++i)
|
||||||
qlen_sum += qlens[i], n_regs[i] = 0, regs[i] = 0;
|
qlen_sum += qlens[i], n_regs[i] = 0, regs[i] = 0;
|
||||||
|
|
@ -274,12 +275,14 @@ void mm_map_frag(const mm_idx_t *mi, int n_segs, const int *qlens, const char **
|
||||||
if (max_chain_gap_ref < opt->max_gap) max_chain_gap_ref = opt->max_gap;
|
if (max_chain_gap_ref < opt->max_gap) max_chain_gap_ref = opt->max_gap;
|
||||||
} else max_chain_gap_ref = opt->max_gap;
|
} else max_chain_gap_ref = opt->max_gap;
|
||||||
|
|
||||||
|
chn_pen_gap = opt->chain_gap_scale * 0.01 * mi->k;
|
||||||
|
chn_pen_skip = opt->chain_skip_scale * 0.01 * mi->k;
|
||||||
if (opt->flag & MM_F_RMQ) {
|
if (opt->flag & MM_F_RMQ) {
|
||||||
a = mg_lchain_rmq(opt->max_gap, opt->rmq_inner_dist, opt->bw, opt->max_chain_skip, opt->rmq_size_cap, opt->min_cnt, opt->min_chain_score,
|
a = mg_lchain_rmq(opt->max_gap, opt->rmq_inner_dist, opt->bw, opt->max_chain_skip, opt->rmq_size_cap, opt->min_cnt, opt->min_chain_score,
|
||||||
opt->chain_gap_scale * 0.01 * mi->k, 0.0f, n_a, a, &n_regs0, &u, b->km);
|
chn_pen_gap, chn_pen_skip, n_a, a, &n_regs0, &u, b->km);
|
||||||
} else {
|
} else {
|
||||||
a = mg_lchain_dp(max_chain_gap_ref, max_chain_gap_qry, opt->bw, opt->max_chain_skip, opt->max_chain_iter, opt->min_cnt, opt->min_chain_score,
|
a = mg_lchain_dp(max_chain_gap_ref, max_chain_gap_qry, opt->bw, opt->max_chain_skip, opt->max_chain_iter, opt->min_cnt, opt->min_chain_score,
|
||||||
opt->chain_gap_scale * 0.01 * mi->k, 0.0f, is_splice, n_segs, n_a, a, &n_regs0, &u, b->km);
|
chn_pen_gap, chn_pen_skip, is_splice, n_segs, n_a, a, &n_regs0, &u, b->km);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt->bw_long > opt->bw && (opt->flag & (MM_F_SPLICE|MM_F_SR|MM_F_NO_LJOIN)) == 0 && n_segs == 1 && n_regs0 > 1) { // re-chain/long-join for long sequences
|
if (opt->bw_long > opt->bw && (opt->flag & (MM_F_SPLICE|MM_F_SR|MM_F_NO_LJOIN)) == 0 && n_segs == 1 && n_regs0 > 1) { // re-chain/long-join for long sequences
|
||||||
|
|
@ -290,7 +293,7 @@ void mm_map_frag(const mm_idx_t *mi, int n_segs, const int *qlens, const char **
|
||||||
kfree(b->km, u);
|
kfree(b->km, u);
|
||||||
radix_sort_128x(a, a + n_a);
|
radix_sort_128x(a, a + n_a);
|
||||||
a = mg_lchain_rmq(opt->max_gap, opt->rmq_inner_dist, opt->bw_long, opt->max_chain_skip, opt->rmq_size_cap, opt->min_cnt, opt->min_chain_score,
|
a = mg_lchain_rmq(opt->max_gap, opt->rmq_inner_dist, opt->bw_long, opt->max_chain_skip, opt->rmq_size_cap, opt->min_cnt, opt->min_chain_score,
|
||||||
opt->chain_gap_scale * 0.01 * mi->k, 0.0f, n_a, a, &n_regs0, &u, b->km);
|
chn_pen_gap, chn_pen_skip, n_a, a, &n_regs0, &u, b->km);
|
||||||
}
|
}
|
||||||
} else if (opt->max_occ > opt->mid_occ && rep_len > 0 && !(opt->flag & MM_F_RMQ)) { // re-chain, mostly for short reads
|
} else if (opt->max_occ > opt->mid_occ && rep_len > 0 && !(opt->flag & MM_F_RMQ)) { // re-chain, mostly for short reads
|
||||||
int rechain = 0;
|
int rechain = 0;
|
||||||
|
|
@ -313,7 +316,7 @@ void mm_map_frag(const mm_idx_t *mi, int n_segs, const int *qlens, const char **
|
||||||
if (opt->flag & MM_F_HEAP_SORT) a = collect_seed_hits_heap(b->km, opt, opt->max_occ, mi, qname, &mv, qlen_sum, &n_a, &rep_len, &n_mini_pos, &mini_pos);
|
if (opt->flag & MM_F_HEAP_SORT) a = collect_seed_hits_heap(b->km, opt, opt->max_occ, mi, qname, &mv, qlen_sum, &n_a, &rep_len, &n_mini_pos, &mini_pos);
|
||||||
else a = collect_seed_hits(b->km, opt, opt->max_occ, mi, qname, &mv, qlen_sum, &n_a, &rep_len, &n_mini_pos, &mini_pos);
|
else a = collect_seed_hits(b->km, opt, opt->max_occ, mi, qname, &mv, qlen_sum, &n_a, &rep_len, &n_mini_pos, &mini_pos);
|
||||||
a = mg_lchain_dp(max_chain_gap_ref, max_chain_gap_qry, opt->bw, opt->max_chain_skip, opt->max_chain_iter, opt->min_cnt, opt->min_chain_score,
|
a = mg_lchain_dp(max_chain_gap_ref, max_chain_gap_qry, opt->bw, opt->max_chain_skip, opt->max_chain_iter, opt->min_cnt, opt->min_chain_score,
|
||||||
opt->chain_gap_scale * 0.01 * mi->k, 0.0f, is_splice, n_segs, n_a, a, &n_regs0, &u, b->km);
|
chn_pen_gap, chn_pen_skip, is_splice, n_segs, n_a, a, &n_regs0, &u, b->km);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
b->frag_gap = max_chain_gap_ref;
|
b->frag_gap = max_chain_gap_ref;
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,7 @@ typedef struct {
|
||||||
int min_cnt; // min number of minimizers on each chain
|
int min_cnt; // min number of minimizers on each chain
|
||||||
int min_chain_score; // min chaining score
|
int min_chain_score; // min chaining score
|
||||||
float chain_gap_scale;
|
float chain_gap_scale;
|
||||||
|
float chain_skip_scale;
|
||||||
int rmq_size_cap, rmq_inner_dist;
|
int rmq_size_cap, rmq_inner_dist;
|
||||||
int rmq_rescue_size;
|
int rmq_rescue_size;
|
||||||
float rmq_rescue_ratio;
|
float rmq_rescue_ratio;
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ void mm_mapopt_init(mm_mapopt_t *opt)
|
||||||
opt->rmq_rescue_size = 1000;
|
opt->rmq_rescue_size = 1000;
|
||||||
opt->rmq_rescue_ratio = 0.1f;
|
opt->rmq_rescue_ratio = 0.1f;
|
||||||
opt->chain_gap_scale = 0.8f;
|
opt->chain_gap_scale = 0.8f;
|
||||||
|
opt->chain_skip_scale = 0.04f;
|
||||||
opt->max_max_occ = 4095;
|
opt->max_max_occ = 4095;
|
||||||
opt->occ_dist = 500;
|
opt->occ_dist = 500;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ cdef extern from "minimap.h":
|
||||||
int min_cnt
|
int min_cnt
|
||||||
int min_chain_score
|
int min_chain_score
|
||||||
float chain_gap_scale
|
float chain_gap_scale
|
||||||
|
float chain_skip_scale
|
||||||
int rmq_size_cap, rmq_inner_dist
|
int rmq_size_cap, rmq_inner_dist
|
||||||
int rmq_rescue_size
|
int rmq_rescue_size
|
||||||
float rmq_rescue_ratio
|
float rmq_rescue_ratio
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue