This commit is contained in:
Heng Li 2017-06-29 11:11:15 -04:00
parent 9fbf7e41e1
commit c8d122bcdb
5 changed files with 22 additions and 9 deletions

View File

@ -19,9 +19,10 @@ static inline int ilog2_32(uint32_t v)
return (t = v>>8) ? 8 + LogTable256[t] : LogTable256[v];
}
int mm_chain_dp(int max_dist, int bw, int max_skip, int min_cnt, int min_sc, int n, mm128_t *a, uint64_t **_u, void *km)
{
int32_t st = 0, i, j, k, *f, *p, *t, *v, n_u, n_v;
int mm_chain_dp(int max_dist, int bw, int max_skip, int min_cnt, int min_sc, int64_t n, mm128_t *a, uint64_t **_u, void *km)
{ // TODO: make sure this works when n has more than 32 bits
int32_t st = 0, j, k, *f, *p, *t, *v, n_u, n_v;
int64_t i;
uint64_t *u;
mm128_t *b;

View File

@ -71,7 +71,7 @@ void ksw_extz2_sse(void *km, int qlen, const uint8_t *query, int tlen, const uin
wl = wr = w;
tlen_ = (tlen + 15) / 16;
n_col_ = ((w + 1 < tlen? w + 1 : tlen) + 15) / 16 + 1;
n_col_ = ((w + 1 < tlen? (w + 1 < qlen? w + 1 : qlen): tlen) + 15) / 16 + 1;
qlen_ = (qlen + 15) / 16;
for (t = 1, max_sc = mat[0]; t < m * m; ++t)
max_sc = max_sc > mat[t]? max_sc : mat[t];

10
map.c
View File

@ -23,6 +23,10 @@ void mm_mapopt_init(mm_mapopt_t *opt)
opt->pri_ratio = 2.0f;
opt->mask_level = 0.5f;
opt->max_join_long = 20000;
opt->max_join_short = 2000;
opt->min_join_flank_sc = 1000;
opt->a = 1, opt->b = 1, opt->q = 1, opt->e = 1;
opt->zdrop = 100;
opt->min_dp_score = 0;
@ -223,7 +227,8 @@ void mm_select_sub(float mask_level, float pri_ratio, int *n_, mm_reg1_t *r, voi
mm_reg1_t *mm_map_frag(const mm_mapopt_t *opt, const mm_idx_t *mi, mm_tbuf_t *b, uint32_t m_st, uint32_t m_en, const char *qname, int qlen, const char *seq, int *n_regs)
{
int i, n = m_en - m_st, j, n_a, n_u;
int i, n = m_en - m_st, j, n_u;
int64_t n_a;
uint64_t *u;
mm_match_t *m;
mm128_t *a;
@ -293,7 +298,8 @@ mm_reg1_t *mm_map_frag(const mm_mapopt_t *opt, const mm_idx_t *mi, mm_tbuf_t *b,
n_u = mm_chain_dp(opt->max_gap, opt->bw, opt->max_chain_skip, opt->min_cnt, opt->min_chain_score, n_a, a, &u, b->km);
regs = mm_gen_reg(qlen, n_u, u, a);
*n_regs = n_u;
mm_select_sub(opt->mask_level, opt->pri_ratio, n_regs, regs, b->km);
if (!(opt->flag & MM_F_AVA)) // don't choose primary mapping(s) for read overlap
mm_select_sub(opt->mask_level, opt->pri_ratio, n_regs, regs, b->km);
if (opt->flag & MM_F_CIGAR)
regs = mm_align_skeleton(b->km, opt, mi, qlen, seq, n_regs, regs, a);

View File

@ -69,20 +69,26 @@ typedef struct {
float mid_occ_frac;
int sdust_thres; // score threshold for SDUST; 0 to disable
int flag; // see MM_F_* macros
int bw; // bandwidth
int max_gap; // break a chain if there are no minimizers in a max_gap window
int max_chain_skip;
int min_cnt;
int min_chain_score;
int min_dp_score;
float pri_ratio;
float mask_level;
int max_join_long, max_join_short;
int min_join_flank_sc;
int a, b, q, e; // matching score, mismatch, gap-open and gap-ext penalties
int zdrop;
int min_dp_score;
int min_ksw_len;
int max_occ;
int mid_occ;
int min_ksw_len;
} mm_mapopt_t;
extern int mm_verbose;

View File

@ -30,7 +30,7 @@ uint32_t ks_ksmall_uint32_t(size_t n, uint32_t arr[], size_t kk);
void mm_write_paf(kstring_t *s, const mm_idx_t *mi, bseq1_t *t, int which, mm_reg1_t *r);
void mm_write_sam(kstring_t *s, const mm_idx_t *mi, bseq1_t *t, int which, mm_reg1_t *r);
int mm_chain_dp(int max_dist, int bw, int max_skip, int min_cnt, int min_sc, int n, mm128_t *a, uint64_t **_u, void *km);
int mm_chain_dp(int max_dist, int bw, int max_skip, int min_cnt, int min_sc, int64_t n, mm128_t *a, uint64_t **_u, void *km);
mm_reg1_t *mm_align_skeleton(void *km, const mm_mapopt_t *opt, const mm_idx_t *mi, int qlen, const char *qstr, int *n_regs_, mm_reg1_t *regs, mm128_t *a);
#ifdef __cplusplus