From dbf284b2d926fc8ddb0d4a484b1ac21bea7f3a56 Mon Sep 17 00:00:00 2001 From: Heng Li Date: Mon, 5 Feb 2018 11:40:38 -0500 Subject: [PATCH] r684: separate end score from min_chain_score --- align.c | 6 +++--- main.c | 2 +- minimap.h | 1 + misc/mapstat.js | 2 ++ options.c | 1 + python/cmappy.pxd | 1 + 6 files changed, 9 insertions(+), 4 deletions(-) mode change 100644 => 100755 misc/mapstat.js diff --git a/align.c b/align.c index f096bae..a6d4817 100644 --- a/align.c +++ b/align.c @@ -307,7 +307,7 @@ static void mm_fix_bad_ends(const mm_reg1_t *r, const mm128_t *a, int bw, int mi if (max - min > l >> 1) *as = i; l += min; m += min < q_span? min : q_span; - if (l >= bw << 1 || m >= min_match) break; + if (l >= bw << 1 || m >= min_match || m >= r->mlen >> 1) break; } *cnt = r->as + r->cnt - *as; m = l = a[r->as + r->cnt - 1].y >> 32 & 0xff; @@ -321,7 +321,7 @@ static void mm_fix_bad_ends(const mm_reg1_t *r, const mm128_t *a, int bw, int mi if (max - min > l >> 1) *cnt = i + 1 - *as; l += min; m += min < q_span? min : q_span; - if (l >= bw << 1 || m >= min_match) break; + if (l >= bw << 1 || m >= min_match || m >= r->mlen >> 1) break; } } @@ -422,7 +422,7 @@ static void mm_align1(void *km, const mm_mapopt_t *opt, const mm_idx_t *mi, int if (is_splice) { mm_fix_bad_ends_splice(km, opt, mi, r, mat, qlen, qseq0, a, &as1, &cnt1); } else { - mm_fix_bad_ends(r, a, opt->bw, opt->min_chain_score, &as1, &cnt1); + mm_fix_bad_ends(r, a, opt->bw, opt->min_end_match, &as1, &cnt1); } mm_filter_bad_seeds(km, as1, cnt1, a, 10, 40, opt->max_gap>>1, 10); mm_adjust_minier(mi, qseq0, &a[as1], &rs, &qs); diff --git a/main.c b/main.c index f45655f..1bc34b1 100644 --- a/main.c +++ b/main.c @@ -6,7 +6,7 @@ #include "mmpriv.h" #include "getopt.h" -#define MM_VERSION "2.8-r677-dirty" +#define MM_VERSION "2.8-r684-dirty" #ifdef __linux__ #include diff --git a/minimap.h b/minimap.h index 6907387..333c188 100644 --- a/minimap.h +++ b/minimap.h @@ -120,6 +120,7 @@ typedef struct { int end_bonus; int min_dp_max; // drop an alignment if the score of the max scoring segment is below this threshold int min_ksw_len; + int min_end_match; int anchor_ext_len, anchor_ext_shift; int pe_ori, pe_bonus; diff --git a/misc/mapstat.js b/misc/mapstat.js old mode 100644 new mode 100755 index 98e42c3..4a11851 --- a/misc/mapstat.js +++ b/misc/mapstat.js @@ -1,3 +1,5 @@ +#!/usr/bin/env k8 + var getopt = function(args, ostr) { var oli; // option letter list index if (typeof(getopt.place) == 'undefined') diff --git a/options.c b/options.c index 4b67ab2..e202a67 100644 --- a/options.c +++ b/options.c @@ -28,6 +28,7 @@ void mm_mapopt_init(mm_mapopt_t *opt) opt->end_bonus = -1; opt->min_dp_max = opt->min_chain_score * opt->a; opt->min_ksw_len = 200; + opt->min_end_match = 200; opt->anchor_ext_len = 20, opt->anchor_ext_shift = 6; opt->mini_batch_size = 500000000; diff --git a/python/cmappy.pxd b/python/cmappy.pxd index 6d1b931..de7f5f0 100644 --- a/python/cmappy.pxd +++ b/python/cmappy.pxd @@ -30,6 +30,7 @@ cdef extern from "minimap.h": int end_bonus int min_dp_max int min_ksw_len + int min_end_match; int anchor_ext_len, anchor_ext_shift int pe_ori, pe_bonus float mid_occ_frac