Skip to content

Commit 4483f89

Browse files
committed
Release minimap2-2.25 (r1173)
1 parent f1b3c7a commit 4483f89

File tree

13 files changed

+52
-74
lines changed

13 files changed

+52
-74
lines changed

NEWS.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
1+
Release 2.25-r1173 (25 April 2023)
2+
----------------------------------
3+
4+
Notable changes:
5+
6+
* Improvement: use the miniprot splice model for RNA-seq alignment by default.
7+
This model considers non-GT-AG splice sites and leads to slightly higher
8+
(<0.1%) accuracy and sensitivity on real human data.
9+
10+
* Change: increased the default `-I` to `8G` such that minimap2 would create a
11+
uni-part index for a pair of mammalian genomes. This change may increase the
12+
memory for all-vs-all read overlap alignment given large datasets.
13+
14+
* New feature: output the sequences in secondary alignments with option
15+
`--secondary-seq` (#687).
16+
17+
* Bugfix: --rmq was not parsed correctly (#1010)
18+
19+
* Bugfix: possibly incorrect coordinate when applying end bonus to the target
20+
sequence (#1025). This is a ksw2 bug. It does not affect minimap2 as
21+
minimap2 is not using the affected feature.
22+
23+
* Improvement: incorporated several changes for better compatibility with
24+
Windows (#1051) and for minimap2 integration at Oxford Nanopore Technologies
25+
(#1048 and #1033).
26+
27+
* Improvement: output the HD-line in SAM output (#1019).
28+
29+
* Improvement: check minimap2 index file in mappy to prevent segmentation
30+
fault for certain indices (#1008).
31+
32+
For genomic sequences, minimap2 should give identical output to v2.24.
33+
Long-read RNA-seq alignment may occasionally differ from previous versions.
34+
35+
(2.25: 25 April 2023, r1173)
36+
37+
38+
139
Release 2.24-r1122 (26 December 2021)
240
-------------------------------------
341

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ Detailed evaluations are available from the [minimap2 paper][doi] or the
7474
Minimap2 is optimized for x86-64 CPUs. You can acquire precompiled binaries from
7575
the [release page][release] with:
7676
```sh
77-
curl -L https://github.com/lh3/minimap2/releases/download/v2.24/minimap2-2.24_x64-linux.tar.bz2 | tar -jxvf -
78-
./minimap2-2.24_x64-linux/minimap2
77+
curl -L https://github.com/lh3/minimap2/releases/download/v2.25/minimap2-2.25_x64-linux.tar.bz2 | tar -jxvf -
78+
./minimap2-2.25_x64-linux/minimap2
7979
```
8080
If you want to compile from the source, you need to have a C compiler, GNU make
8181
and zlib development files installed. Then type `make` in the source code

cookbook.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ To acquire the data used in this cookbook and to install minimap2 and paftools,
3131
please follow the command lines below:
3232
```sh
3333
# install minimap2 executables
34-
curl -L https://github.com/lh3/minimap2/releases/download/v2.24/minimap2-2.24_x64-linux.tar.bz2 | tar jxf -
35-
cp minimap2-2.24_x64-linux/{minimap2,k8,paftools.js} . # copy executables
34+
curl -L https://github.com/lh3/minimap2/releases/download/v2.25/minimap2-2.25_x64-linux.tar.bz2 | tar jxf -
35+
cp minimap2-2.25_x64-linux/{minimap2,k8,paftools.js} . # copy executables
3636
export PATH="$PATH:"`pwd` # put the current directory on PATH
3737
# download example datasets
3838
curl -L https://github.com/lh3/minimap2/releases/download/v2.10/cookbook-data.tgz | tar zxf -

index.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ static void *worker_pipeline(void *shared, int step, void *in)
358358
for (i = 0; i < s->n_seq; ++i) {
359359
mm_bseq1_t *t = &s->seq[i];
360360
if (t->l_seq > 0)
361-
mm_sketch2(0, t->seq, t->l_seq, p->mi->w, p->mi->k, t->rid, p->mi->flag&MM_I_HPC, p->mi->flag&MM_I_SYNCMER, &s->a);
361+
mm_sketch(0, t->seq, t->l_seq, p->mi->w, p->mi->k, t->rid, p->mi->flag&MM_I_HPC, &s->a);
362362
else if (mm_verbose >= 2)
363363
fprintf(stderr, "[WARNING] the length database sequence '%s' is 0\n", t->name);
364364
free(t->seq); free(t->name);
@@ -446,7 +446,7 @@ mm_idx_t *mm_idx_str(int w, int k, int is_hpc, int bucket_bits, int n, const cha
446446
sum_len += p->len;
447447
if (p->len > 0) {
448448
a.n = 0;
449-
mm_sketch2(0, s, p->len, w, k, i, is_hpc, 0, &a); // TODO: mm_idx_str() doesn't support syncmer
449+
mm_sketch(0, s, p->len, w, k, i, is_hpc, &a);
450450
mm_idx_add(mi, a.n, a.a);
451451
}
452452
}

main.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ static inline void yes_or_no(mm_mapopt_t *opt, int64_t flag, int long_idx, const
120120

121121
int main(int argc, char *argv[])
122122
{
123-
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:";
123+
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:";
124124
ketopt_t o = KETOPT_INIT;
125125
mm_mapopt_t opt;
126126
mm_idxopt_t ipt;
@@ -152,8 +152,7 @@ int main(int argc, char *argv[])
152152
o = KETOPT_INIT;
153153

154154
while ((c = ketopt(&o, argc, argv, 1, opt_str, long_options)) >= 0) {
155-
if (c == 'w') ipt.w = atoi(o.arg), ipt.flag &= ~MM_I_SYNCMER;
156-
else if (c == 'j') ipt.w = atoi(o.arg), ipt.flag |= MM_I_SYNCMER;
155+
if (c == 'w') ipt.w = atoi(o.arg);
157156
else if (c == 'k') ipt.k = atoi(o.arg);
158157
else if (c == 'H') ipt.flag |= MM_I_HPC;
159158
else if (c == 'd') fnw = o.arg; // the above are indexing related options, except -I
@@ -329,7 +328,6 @@ int main(int argc, char *argv[])
329328
fprintf(fp_help, " -H use homopolymer-compressed k-mer (preferrable for PacBio)\n");
330329
fprintf(fp_help, " -k INT k-mer size (no larger than 28) [%d]\n", ipt.k);
331330
fprintf(fp_help, " -w INT minimizer window size [%d]\n", ipt.w);
332-
// fprintf(fp_help, " -j INT syncmer submer size (overriding -w) []\n");
333331
fprintf(fp_help, " -I NUM split index for every ~NUM input bases [8G]\n");
334332
fprintf(fp_help, " -d FILE dump index to FILE []\n");
335333
fprintf(fp_help, " Mapping:\n");

map.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ static void collect_minimizers(void *km, const mm_mapopt_t *opt, const mm_idx_t
6262
mv->n = 0;
6363
for (i = n = 0; i < n_segs; ++i) {
6464
size_t j;
65-
mm_sketch2(km, seqs[i], qlens[i], mi->w, mi->k, i, mi->flag&MM_I_HPC, mi->flag&MM_I_SYNCMER, mv);
65+
mm_sketch(km, seqs[i], qlens[i], mi->w, mi->k, i, mi->flag&MM_I_HPC, mv);
6666
for (j = n; j < mv->n; ++j)
6767
mv->a[j].y += sum << 1;
6868
if (opt->sdust_thres > 0) // mask low-complexity minimizers

minimap.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include <stdio.h>
66
#include <sys/types.h>
77

8-
#define MM_VERSION "2.24-r1171-dirty"
8+
#define MM_VERSION "2.25-r1173"
99

1010
#define MM_F_NO_DIAG (0x001LL) // no exact diagonal hit
1111
#define MM_F_NO_DUAL (0x002LL) // skip pairs where query name is lexicographically larger than target name
@@ -48,7 +48,6 @@
4848
#define MM_I_HPC 0x1
4949
#define MM_I_NO_SEQ 0x2
5050
#define MM_I_NO_NAME 0x4
51-
#define MM_I_SYNCMER 0x8
5251

5352
#define MM_IDX_MAGIC "MMI\2"
5453

minimap2.1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.TH minimap2 1 "18 December 2021" "minimap2-2.24 (r1122)" "Bioinformatics tools"
1+
.TH minimap2 1 "25 April 2023" "minimap2-2.25 (r1173)" "Bioinformatics tools"
22
.SH NAME
33
.PP
44
minimap2 - mapping and alignment between collections of DNA sequences

misc/paftools.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env k8
22

3-
var paftools_version = '2.24-r1152-dirty';
3+
var paftools_version = '2.25-r1173';
44

55
/*****************************
66
***** Library functions *****

mmpriv.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ void radix_sort_64(uint64_t *beg, uint64_t *end);
6060
uint32_t ks_ksmall_uint32_t(size_t n, uint32_t arr[], size_t kk);
6161

6262
void mm_sketch(void *km, const char *str, int len, int w, int k, uint32_t rid, int is_hpc, mm128_v *p);
63-
void mm_sketch_syncmer(void *km, const char *str, int len, int smer, int k, uint32_t rid, int is_hpc, mm128_v *p);
64-
void mm_sketch2(void *km, const char *str, int len, int w, int k, uint32_t rid, int is_hpc, int is_syncmer, mm128_v *p);
6563

6664
mm_seed_t *mm_collect_matches(void *km, int *_n_m, int qlen, int max_occ, int max_max_occ, int dist, const mm_idx_t *mi, const mm128_v *mv, int64_t *n_a, int *rep_len, int *n_mini_pos, uint64_t **mini_pos);
6765
void mm_seed_mz_flt(void *km, mm128_v *mv, int32_t q_occ_max, float q_occ_frac);

python/mappy.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ from libc.stdlib cimport free
33
cimport cmappy
44
import sys
55

6-
__version__ = '2.24'
6+
__version__ = '2.25'
77

88
cmappy.mm_reset_timer()
99

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def compile_libminimap2(*args, **kwargs):
3434

3535
setup(
3636
name = 'mappy',
37-
version = '2.24',
37+
version = '2.25',
3838
url = 'https://github.com/lh3/minimap2',
3939
description = 'Minimap2 python binding',
4040
long_description = readme(),

sketch.c

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -141,58 +141,3 @@ void mm_sketch(void *km, const char *str, int len, int w, int k, uint32_t rid, i
141141
if (min.x != UINT64_MAX)
142142
kv_push(mm128_t, km, *p, min);
143143
}
144-
145-
void mm_sketch_syncmer(void *km, const char *str, int len, int smer, int k, uint32_t rid, int is_hpc, mm128_v *p)
146-
{
147-
uint64_t shift1 = 2 * (k - 1), mask = (1ULL<<2*k) - 1, smask = (1ULL<<2*smer) - 1, kmer[2] = {0,0};
148-
int i, j, l, buf_pos, min_pos, kmer_span = 0;
149-
tiny_queue_t tq;
150-
151-
assert(len > 0 && (smer > 0 && smer <= k) && (k > 0 && k <= 28)); // 56 bits for k-mer; could use long k-mers, but 28 enough in practice
152-
memset(&tq, 0, sizeof(tiny_queue_t));
153-
kv_resize(mm128_t, km, *p, p->n + len/(k - smer));
154-
155-
for (i = l = buf_pos = min_pos = 0; i < len; ++i) {
156-
int c = seq_nt4_table[(uint8_t)str[i]];
157-
if (c < 4) { // not an ambiguous base
158-
int z;
159-
if (is_hpc) {
160-
int skip_len = 1;
161-
if (i + 1 < len && seq_nt4_table[(uint8_t)str[i + 1]] == c) {
162-
for (skip_len = 2; i + skip_len < len; ++skip_len)
163-
if (seq_nt4_table[(uint8_t)str[i + skip_len]] != c)
164-
break;
165-
i += skip_len - 1; // put $i at the end of the current homopolymer run
166-
}
167-
tq_push(&tq, skip_len);
168-
kmer_span += skip_len;
169-
if (tq.count > k) kmer_span -= tq_shift(&tq);
170-
} else kmer_span = l + 1 < k? l + 1 : k;
171-
kmer[0] = (kmer[0] << 2 | c) & mask; // forward k-mer
172-
kmer[1] = (kmer[1] >> 2) | (3ULL^c) << shift1; // reverse k-mer
173-
if (kmer[0] == kmer[1]) continue; // skip "symmetric k-mers" as we don't know it strand
174-
z = kmer[0] < kmer[1]? 0 : 1; // strand
175-
++l;
176-
if (l >= k && kmer_span < 256) {
177-
uint64_t x, min = UINT64_MAX;
178-
x = hash64(kmer[z], mask);
179-
for (j = 0; j <= k - smer; ++j) {
180-
uint64_t y = x >> (j + j) & smask;
181-
min = min < y? min : y;
182-
}
183-
if ((x & smask) == min) {
184-
mm128_t t;
185-
t.x = x << 8 | kmer_span;
186-
t.y = (uint64_t)rid<<32 | (uint32_t)i<<1 | z;
187-
kv_push(mm128_t, km, *p, t);
188-
}
189-
}
190-
} else l = 0, tq.count = tq.front = 0, kmer_span = 0;
191-
}
192-
}
193-
194-
void mm_sketch2(void *km, const char *str, int len, int w, int k, uint32_t rid, int is_hpc, int is_syncmer, mm128_v *p)
195-
{
196-
if (is_syncmer) mm_sketch_syncmer(km, str, len, w, k, rid, is_hpc, p);
197-
else mm_sketch(km, str, len, w, k, rid, is_hpc, p);
198-
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy