From 254280b8af11ef193adf83d7b77b9247d395e465 Mon Sep 17 00:00:00 2001 From: Heng Li Date: Fri, 28 Jul 2017 11:54:18 -0400 Subject: [PATCH] r216: a bit cleanup; identical output to r215 --- align.c | 8 ++++---- hit.c | 2 +- main.c | 2 +- map.c | 5 ++++- mmpriv.h | 4 ++++ 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/align.c b/align.c index b515abd..9749b80 100644 --- a/align.c +++ b/align.c @@ -179,7 +179,7 @@ static void mm_filter_bad_seeds(void *km, int as1, int cnt1, mm128_t *a, int min if (k == n || k >= max_en) { if (max_en > 0) for (i = K[max_st]; i < K[max_en]; ++i) - a[as1 + i].y |= 1ULL << 41; + a[as1 + i].y |= MM_SEED_IGNORE; max = 0, max_st = max_en = -1; if (k == n) break; } @@ -299,12 +299,12 @@ static void mm_align1(void *km, const mm_mapopt_t *opt, const mm_idx_t *mi, int assert(qs1 >= 0 && rs1 >= 0); for (i = 1; i < cnt1; ++i) { // gap filling - if (a[as1+i].y>>41&1) continue; + if (a[as1+i].y & MM_SEED_IGNORE) continue; mm_adjust_minier(mi, qseq0, &a[as1 + i], &re, &qe); re1 = re, qe1 = qe; - if (i == cnt1 - 1 || (a[as1+i].y>>40&1) || qe - qs >= opt->min_ksw_len || re - rs >= opt->min_ksw_len) { + if (i == cnt1 - 1 || (a[as1+i].y&MM_SEED_LONG_JOIN) || qe - qs >= opt->min_ksw_len || re - rs >= opt->min_ksw_len) { int bw1 = bw; - if (a[as1+i].y>>40&1) + if (a[as1+i].y & MM_SEED_LONG_JOIN) bw1 = qe - qs > re - rs? qe - qs : re - rs; qseq = &qseq0[rev][qs]; mm_idx_getseq(mi, rid, rs, re, tseq); diff --git a/hit.c b/hit.c index ba6bb76..e452d18 100644 --- a/hit.c +++ b/hit.c @@ -266,7 +266,7 @@ void mm_join_long(void *km, const mm_mapopt_t *opt, int qlen, int *n_regs_, mm_r if (r1->re - r1->rs < max_gap>>1 || r1->qe - r1->qs < max_gap>>1) continue; // all conditions satisfied; join - a[r1->as].y |= 1ULL<<40; + a[r1->as].y |= MM_SEED_LONG_JOIN; r0->cnt += r1->cnt, r0->score += r1->score; mm_reg_set_coor(r0, qlen, a); r1->cnt = 0; diff --git a/main.c b/main.c index f5cc530..c7529aa 100644 --- a/main.c +++ b/main.c @@ -8,7 +8,7 @@ #include "minimap.h" #include "mmpriv.h" -#define MM_VERSION "2.0-r215-dirty" +#define MM_VERSION "2.0-r216-dirty" void liftrlimit() { diff --git a/map.c b/map.c index 6a7d373..b3f3924 100644 --- a/map.c +++ b/map.c @@ -209,8 +209,10 @@ mm_reg1_t *mm_map_frag(const mm_mapopt_t *opt, const mm_idx_t *mi, mm_tbuf_t *b, mm128_t *p = &b->mini.a[i + m_st]; mm_match_t *q = &m[i]; const uint64_t *r = q->x.cr; - int k, q_span = p->x & 0xff; + int k, q_span = p->x & 0xff, is_tandem = 0; if (q->n >= opt->mid_occ) continue; + if (i > 0 && p->x>>8 == b->mini.a[m_st + i - 1].x>>8) is_tandem = 1; + if (i < n - 1 && p->x>>8 == b->mini.a[m_st + i + 1].x>>8) is_tandem = 1; for (k = 0; k < q->n; ++k) { const char *tname = mi->seq[r[k]>>32].name; int32_t rpos = (uint32_t)r[k] >> 1; @@ -227,6 +229,7 @@ mm_reg1_t *mm_map_frag(const mm_mapopt_t *opt, const mm_idx_t *mi, mm_tbuf_t *b, p->x = 1ULL<<63 | (r[k]&0xffffffff00000000ULL) | (uint32_t)r[k]>>1; p->y = (uint64_t)q_span << 32 | (qlen - ((q->qpos>>1) + 1 - q_span) - 1); } + if (is_tandem) p->y |= MM_SEED_TANDEM; } } n_a = j; diff --git a/mmpriv.h b/mmpriv.h index 6135172..dcf49ea 100644 --- a/mmpriv.h +++ b/mmpriv.h @@ -12,6 +12,10 @@ #define MM_DBG_PRINT_QNAME 0x2 #define MM_DBG_PRINT_SEED 0x4 +#define MM_SEED_LONG_JOIN (1ULL<<40) +#define MM_SEED_IGNORE (1ULL<<41) +#define MM_SEED_TANDEM (1ULL<<42) + #ifndef kroundup32 #define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) #endif