From ab345e600b33897d563c5fea2e50ca1006e878fe Mon Sep 17 00:00:00 2001 From: Heng Li Date: Wed, 13 Dec 2017 12:23:43 -0500 Subject: [PATCH] r626: function to check incorrect scoring system --- main.c | 4 +++- map.c | 15 +++++++++++++++ minimap.h | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index df996e7..da8ac7e 100644 --- a/main.c +++ b/main.c @@ -6,7 +6,7 @@ #include "mmpriv.h" #include "getopt.h" -#define MM_VERSION "2.6-r625-dirty" +#define MM_VERSION "2.6-r626-dirty" #ifdef __linux__ #include @@ -202,6 +202,8 @@ int main(int argc, char *argv[]) } if (!fnw && !(opt.flag&MM_F_CIGAR)) ipt.flag |= MM_I_NO_SEQ; + if (mm_check_opt(&ipt, &opt) < 0) + return 1; if (argc == optind || fp_help == stdout) { fprintf(fp_help, "Usage: minimap2 [options] | [query.fa] [...]\n"); diff --git a/map.c b/map.c index 45e933c..b233211 100644 --- a/map.c +++ b/map.c @@ -115,6 +115,21 @@ int mm_set_opt(const char *preset, mm_idxopt_t *io, mm_mapopt_t *mo) return 0; } +int mm_check_opt(const mm_idxopt_t *io, const mm_mapopt_t *mo) +{ + if (mo->a + 2 * (mo->q + mo->e) > 127 || mo->a + 2 * (mo->q2 + mo->e2) > 127) { + if (mm_verbose >= 1) + fprintf(stderr, "[ERROR]\033[1;31m scoring system violating {-A}+2*({-O}+{-E}) <= 127\033[0m\n"); + return -1; + } + if ((mo->q != mo->q2 || mo->e != mo->e2) && !(mo->e > mo->e2 && mo->q + mo->e < mo->q2 + mo->e2)) { + if (mm_verbose >= 1) + fprintf(stderr, "[ERROR]\033[1;31m dual gap penalties violating E1>E2 and O1+E1