diff --git a/align.c b/align.c index f23114e..316af78 100644 --- a/align.c +++ b/align.c @@ -328,7 +328,7 @@ static void mm_align_pair(void *km, const mm_mapopt_t *opt, int qlen, const uint ez->zdropped = 1; } else if (opt->flag & MM_F_SPLICE) { int flag_tmp = flag; - if (opt->flag & MM_F_SPLICE_CMPLX) flag_tmp |= KSW_EZ_SPLICE_CMPLX; + if (!(opt->flag & MM_F_SPLICE_OLD)) flag_tmp |= KSW_EZ_SPLICE_CMPLX; ksw_exts2_sse(km, qlen, qseq, tlen, tseq, 5, mat, opt->q, opt->e, opt->q2, opt->noncan, zdrop, opt->junc_bonus, flag_tmp, junc, ez); } else if (opt->q == opt->q2 && opt->e == opt->e2) ksw_extz2_sse(km, qlen, qseq, tlen, tseq, 5, mat, opt->q, opt->e, w, zdrop, end_bonus, flag, ez); diff --git a/main.c b/main.c index fec4d9d..b68381a 100644 --- a/main.c +++ b/main.c @@ -33,7 +33,6 @@ static ko_longopt_t long_options[] = { { "min-dp-len", ko_required_argument, 308 }, { "print-aln-seq", ko_no_argument, 309 }, { "splice", ko_no_argument, 310 }, - { "splice-model", ko_no_argument, 'J' }, { "cost-non-gt-ag", ko_required_argument, 'C' }, { "no-long-join", ko_no_argument, 312 }, { "sr", ko_no_argument, 313 }, @@ -120,7 +119,7 @@ static inline void yes_or_no(mm_mapopt_t *opt, int64_t flag, int long_idx, const int main(int argc, char *argv[]) { - const char *opt_str = "2aSDw:k:K:t:r:f:Vv:g:G:I:d:XT:s:x:Hcp:M:n:z:A:B:O:E:m:N:Qu:R:hF:LC:yYPo:e:U:j:J"; + const char *opt_str = "2aSDw:k:K:t:r:f:Vv:g:G:I:d:XT:s:x:Hcp:M:n:z:A:B:O:E:m:N:Qu:R:hF:LC:yYPo:e:U:j:J:"; ketopt_t o = KETOPT_INIT; mm_mapopt_t opt; mm_idxopt_t ipt; @@ -187,8 +186,12 @@ int main(int argc, char *argv[]) else if (c == 'R') rg = o.arg; else if (c == 'h') fp_help = stdout; else if (c == '2') opt.flag |= MM_F_2_IO_THREADS; - else if (c == 'J') opt.flag |= MM_F_SPLICE_CMPLX; // --splice-model - else if (c == 'o') { + else if (c == 'J') { + int t; + t = atoi(o.arg); + if (t == 0) opt.flag |= MM_F_SPLICE_OLD; + else if (t == 1) opt.flag &= ~MM_F_SPLICE_OLD; + } else if (c == 'o') { if (strcmp(o.arg, "-") != 0) { if (freopen(o.arg, "wb", stdout) == NULL) { fprintf(stderr, "[ERROR]\033[1;31m failed to write the output to file '%s'\033[0m: %s\n", o.arg, strerror(errno)); @@ -347,6 +350,7 @@ int main(int argc, char *argv[]) fprintf(fp_help, " -z INT[,INT] Z-drop score and inversion Z-drop score [%d,%d]\n", opt.zdrop, opt.zdrop_inv); fprintf(fp_help, " -s INT minimal peak DP alignment score [%d]\n", opt.min_dp_max); fprintf(fp_help, " -u CHAR how to find GT-AG. f:transcript strand, b:both strands, n:don't match GT-AG [n]\n"); + fprintf(fp_help, " -J INT splice mode. 0: original minimap2 model; 1: miniprot model [1]\n"); fprintf(fp_help, " Input/Output:\n"); fprintf(fp_help, " -a output in the SAM format (PAF by default)\n"); fprintf(fp_help, " -o FILE output alignments to FILE [stdout]\n"); diff --git a/minimap.h b/minimap.h index 9c9741f..4ea81df 100644 --- a/minimap.h +++ b/minimap.h @@ -5,44 +5,44 @@ #include #include -#define MM_VERSION "2.24-r1163-dirty" +#define MM_VERSION "2.24-r1164-dirty" -#define MM_F_NO_DIAG 0x001 // no exact diagonal hit -#define MM_F_NO_DUAL 0x002 // skip pairs where query name is lexicographically larger than target name -#define MM_F_CIGAR 0x004 -#define MM_F_OUT_SAM 0x008 -#define MM_F_NO_QUAL 0x010 -#define MM_F_OUT_CG 0x020 -#define MM_F_OUT_CS 0x040 -#define MM_F_SPLICE 0x080 // splice mode -#define MM_F_SPLICE_FOR 0x100 // match GT-AG -#define MM_F_SPLICE_REV 0x200 // match CT-AC, the reverse complement of GT-AG -#define MM_F_NO_LJOIN 0x400 -#define MM_F_OUT_CS_LONG 0x800 -#define MM_F_SR 0x1000 -#define MM_F_FRAG_MODE 0x2000 -#define MM_F_NO_PRINT_2ND 0x4000 -#define MM_F_2_IO_THREADS 0x8000 -#define MM_F_LONG_CIGAR 0x10000 -#define MM_F_INDEPEND_SEG 0x20000 -#define MM_F_SPLICE_FLANK 0x40000 -#define MM_F_SOFTCLIP 0x80000 -#define MM_F_FOR_ONLY 0x100000 -#define MM_F_REV_ONLY 0x200000 -#define MM_F_HEAP_SORT 0x400000 -#define MM_F_ALL_CHAINS 0x800000 -#define MM_F_OUT_MD 0x1000000 -#define MM_F_COPY_COMMENT 0x2000000 -#define MM_F_EQX 0x4000000 // use =/X instead of M -#define MM_F_PAF_NO_HIT 0x8000000 // output unmapped reads to PAF -#define MM_F_NO_END_FLT 0x10000000 -#define MM_F_HARD_MLEVEL 0x20000000 -#define MM_F_SAM_HIT_ONLY 0x40000000 +#define MM_F_NO_DIAG (0x001LL) // no exact diagonal hit +#define MM_F_NO_DUAL (0x002LL) // skip pairs where query name is lexicographically larger than target name +#define MM_F_CIGAR (0x004LL) +#define MM_F_OUT_SAM (0x008LL) +#define MM_F_NO_QUAL (0x010LL) +#define MM_F_OUT_CG (0x020LL) +#define MM_F_OUT_CS (0x040LL) +#define MM_F_SPLICE (0x080LL) // splice mode +#define MM_F_SPLICE_FOR (0x100LL) // match GT-AG +#define MM_F_SPLICE_REV (0x200LL) // match CT-AC, the reverse complement of GT-AG +#define MM_F_NO_LJOIN (0x400LL) +#define MM_F_OUT_CS_LONG (0x800LL) +#define MM_F_SR (0x1000LL) +#define MM_F_FRAG_MODE (0x2000LL) +#define MM_F_NO_PRINT_2ND (0x4000LL) +#define MM_F_2_IO_THREADS (0x8000LL) +#define MM_F_LONG_CIGAR (0x10000LL) +#define MM_F_INDEPEND_SEG (0x20000LL) +#define MM_F_SPLICE_FLANK (0x40000LL) +#define MM_F_SOFTCLIP (0x80000LL) +#define MM_F_FOR_ONLY (0x100000LL) +#define MM_F_REV_ONLY (0x200000LL) +#define MM_F_HEAP_SORT (0x400000LL) +#define MM_F_ALL_CHAINS (0x800000LL) +#define MM_F_OUT_MD (0x1000000LL) +#define MM_F_COPY_COMMENT (0x2000000LL) +#define MM_F_EQX (0x4000000LL) // use =/X instead of M +#define MM_F_PAF_NO_HIT (0x8000000LL) // output unmapped reads to PAF +#define MM_F_NO_END_FLT (0x10000000LL) +#define MM_F_HARD_MLEVEL (0x20000000LL) +#define MM_F_SAM_HIT_ONLY (0x40000000LL) #define MM_F_RMQ (0x80000000LL) #define MM_F_QSTRAND (0x100000000LL) #define MM_F_NO_INV (0x200000000LL) #define MM_F_NO_HASH_NAME (0x400000000LL) -#define MM_F_SPLICE_CMPLX (0x800000000LL) +#define MM_F_SPLICE_OLD (0x800000000LL) #define MM_I_HPC 0x1 #define MM_I_NO_SEQ 0x2