minimap2 0.2.24.6 → 0.2.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -3
- data/ext/minimap2/Makefile +6 -2
- data/ext/minimap2/NEWS.md +38 -0
- data/ext/minimap2/README.md +9 -3
- data/ext/minimap2/align.c +5 -3
- data/ext/minimap2/cookbook.md +2 -2
- data/ext/minimap2/format.c +7 -4
- data/ext/minimap2/kalloc.c +20 -1
- data/ext/minimap2/kalloc.h +13 -2
- data/ext/minimap2/ksw2.h +1 -0
- data/ext/minimap2/ksw2_extd2_sse.c +1 -1
- data/ext/minimap2/ksw2_exts2_sse.c +79 -40
- data/ext/minimap2/ksw2_extz2_sse.c +1 -1
- data/ext/minimap2/lchain.c +15 -16
- data/ext/minimap2/main.c +13 -6
- data/ext/minimap2/map.c +0 -5
- data/ext/minimap2/minimap.h +40 -31
- data/ext/minimap2/minimap2.1 +19 -5
- data/ext/minimap2/misc/paftools.js +545 -24
- data/ext/minimap2/options.c +1 -1
- data/ext/minimap2/pyproject.toml +2 -0
- data/ext/minimap2/python/mappy.pyx +3 -1
- data/ext/minimap2/seed.c +1 -1
- data/ext/minimap2/setup.py +32 -22
- data/ext/minimap2.patch +3 -3
- data/lib/minimap2/aligner.rb +4 -0
- data/lib/minimap2/ffi/constants.rb +90 -88
- data/lib/minimap2/version.rb +2 -2
- metadata +4 -3
data/ext/minimap2/options.c
CHANGED
@@ -3,7 +3,7 @@ from libc.stdlib cimport free
|
|
3
3
|
cimport cmappy
|
4
4
|
import sys
|
5
5
|
|
6
|
-
__version__ = '2.
|
6
|
+
__version__ = '2.25'
|
7
7
|
|
8
8
|
cmappy.mm_reset_timer()
|
9
9
|
|
@@ -172,6 +172,7 @@ cdef class Aligner:
|
|
172
172
|
cdef cmappy.mm_mapopt_t map_opt
|
173
173
|
|
174
174
|
if self._idx == NULL: return
|
175
|
+
if ((self.map_opt.flag & 4) and (self._idx.flag & 2)): return
|
175
176
|
map_opt = self.map_opt
|
176
177
|
if max_frag_len is not None: map_opt.max_frag_len = max_frag_len
|
177
178
|
if extra_flags is not None: map_opt.flag |= extra_flags
|
@@ -217,6 +218,7 @@ cdef class Aligner:
|
|
217
218
|
cdef int l
|
218
219
|
cdef char *s
|
219
220
|
if self._idx == NULL: return
|
221
|
+
if ((self.map_opt.flag & 4) and (self._idx.flag & 2)): return
|
220
222
|
s = cmappy.mappy_fetch_seq(self._idx, name.encode(), start, end, &l)
|
221
223
|
if l == 0: return None
|
222
224
|
r = s[:l] if isinstance(s, str) else s[:l].decode()
|
data/ext/minimap2/seed.c
CHANGED
@@ -7,7 +7,7 @@ void mm_seed_mz_flt(void *km, mm128_v *mv, int32_t q_occ_max, float q_occ_frac)
|
|
7
7
|
mm128_t *a;
|
8
8
|
size_t i, j, st;
|
9
9
|
if (mv->n <= q_occ_max || q_occ_frac <= 0.0f || q_occ_max <= 0) return;
|
10
|
-
|
10
|
+
a = Kmalloc(km, mm128_t, mv->n);
|
11
11
|
for (i = 0; i < mv->n; ++i)
|
12
12
|
a[i].x = mv->a[i].x, a[i].y = i;
|
13
13
|
radix_sort_128x(a, a + mv->n);
|
data/ext/minimap2/setup.py
CHANGED
@@ -1,29 +1,40 @@
|
|
1
1
|
try:
|
2
2
|
from setuptools import setup, Extension
|
3
|
+
from setuptools.command.build_ext import build_ext
|
3
4
|
except ImportError:
|
4
5
|
from distutils.core import setup
|
5
6
|
from distutils.extension import Extension
|
7
|
+
from distutils.command.build_ext import build_ext
|
6
8
|
|
7
|
-
import sys, platform
|
9
|
+
import sys, platform, subprocess
|
8
10
|
|
9
|
-
sys.path.append('python')
|
10
|
-
|
11
|
-
extra_compile_args = ['-DHAVE_KALLOC']
|
12
|
-
include_dirs = ["."]
|
13
|
-
|
14
|
-
if platform.machine() in ["aarch64", "arm64"]:
|
15
|
-
include_dirs.append("sse2neon/")
|
16
|
-
extra_compile_args.extend(['-ftree-vectorize', '-DKSW_SSE2_ONLY', '-D__SSE2__'])
|
17
|
-
else:
|
18
|
-
extra_compile_args.append('-msse4.1') # WARNING: ancient x86_64 CPUs don't have SSE4
|
19
11
|
|
20
12
|
def readme():
|
21
13
|
with open('python/README.rst') as f:
|
22
14
|
return f.read()
|
23
15
|
|
16
|
+
|
17
|
+
class LibMM2Build(build_ext):
|
18
|
+
# Uses Makefile to build library, avoids duplicating logic
|
19
|
+
# determining which objects to compile but does require
|
20
|
+
# end users to have Make (since precompiled wheels are not
|
21
|
+
# distributed on PyPI).
|
22
|
+
def run(self):
|
23
|
+
def compile_libminimap2(*args, **kwargs):
|
24
|
+
cmd = ['make', 'libminimap2.a'] + list(args)
|
25
|
+
subprocess.check_call(cmd)
|
26
|
+
options = []
|
27
|
+
if platform.machine() in ["aarch64", "arm64"]:
|
28
|
+
options = ["arm_neon=1", "aarch64=1"]
|
29
|
+
self.execute(
|
30
|
+
compile_libminimap2, options,
|
31
|
+
'Compiling libminimap2 using Makefile')
|
32
|
+
build_ext.run(self)
|
33
|
+
|
34
|
+
|
24
35
|
setup(
|
25
36
|
name = 'mappy',
|
26
|
-
version = '2.
|
37
|
+
version = '2.25',
|
27
38
|
url = 'https://github.com/lh3/minimap2',
|
28
39
|
description = 'Minimap2 python binding',
|
29
40
|
long_description = readme(),
|
@@ -32,16 +43,15 @@ setup(
|
|
32
43
|
license = 'MIT',
|
33
44
|
keywords = 'sequence-alignment',
|
34
45
|
scripts = ['python/minimap2.py'],
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
libraries = ['z', 'm', 'pthread'])],
|
46
|
+
cmdclass = {'build_ext': LibMM2Build},
|
47
|
+
ext_modules = [
|
48
|
+
Extension(
|
49
|
+
'mappy',
|
50
|
+
sources = ['python/mappy.pyx'],
|
51
|
+
depends = ['python/cmappy.h', 'python/cmappy.pxd'],
|
52
|
+
include_dirs = ['.'],
|
53
|
+
extra_objects = ['libminimap2.a'],
|
54
|
+
libraries = ['z', 'm', 'pthread'])],
|
45
55
|
classifiers = [
|
46
56
|
'Development Status :: 5 - Production/Stable',
|
47
57
|
'License :: OSI Approved :: MIT License',
|
data/ext/minimap2.patch
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
--- Makefile
|
2
|
-
+++ Makefile
|
1
|
+
--- a/Makefile
|
2
|
+
+++ b/Makefile
|
3
3
|
@@ -1,9 +1,9 @@
|
4
4
|
-CFLAGS= -g -Wall -O2 -Wc++-compat #-Wextra
|
5
5
|
+CFLAGS= -g -Wall -O2 -Wc++-compat -fPIC #-Wextra
|
@@ -12,7 +12,7 @@
|
|
12
12
|
PROG= minimap2
|
13
13
|
PROG_EXTRA= sdust minimap2-lite
|
14
14
|
LIBS= -lm -lz -lpthread
|
15
|
-
@@ -
|
15
|
+
@@ -134,3 +134,4 @@ sdust.o: kalloc.h kdq.h kvec.h sdust.h
|
16
16
|
seed.o: mmpriv.h minimap.h bseq.h kseq.h kalloc.h ksort.h
|
17
17
|
sketch.o: kvec.h kalloc.h mmpriv.h minimap.h bseq.h kseq.h
|
18
18
|
splitidx.o: mmpriv.h minimap.h bseq.h kseq.h
|
data/lib/minimap2/aligner.rb
CHANGED
@@ -139,6 +139,7 @@ module Minimap2
|
|
139
139
|
)
|
140
140
|
|
141
141
|
return if index.null?
|
142
|
+
return if (map_opt[:flag] & 4).zero? && (index[:flag] & 2).zero?
|
142
143
|
|
143
144
|
map_opt[:max_frag_len] = max_frag_len if max_frag_len
|
144
145
|
map_opt[:flag] |= extra_flags if extra_flags
|
@@ -201,6 +202,9 @@ module Minimap2
|
|
201
202
|
# @param stop
|
202
203
|
|
203
204
|
def seq(name, start = 0, stop = 0x7fffffff)
|
205
|
+
return if index.null?
|
206
|
+
return if (map_opt[:flag] & 4).zero? && (index[:flag] & 2).zero?
|
207
|
+
|
204
208
|
lp = ::FFI::MemoryPointer.new(:int)
|
205
209
|
s = FFI.mappy_fetch_seq(index, name, start, stop, lp)
|
206
210
|
l = lp.read_int
|
@@ -34,10 +34,12 @@ module Minimap2
|
|
34
34
|
NO_END_FLT = 0x10000000
|
35
35
|
HARD_MLEVEL = 0x20000000
|
36
36
|
SAM_HIT_ONLY = 0x40000000
|
37
|
-
RMQ = 0x80000000
|
38
|
-
QSTRAND = 0x100000000
|
39
|
-
NO_INV = 0x200000000
|
40
|
-
NO_HASH_NAME = 0x400000000
|
37
|
+
RMQ = 0x80000000
|
38
|
+
QSTRAND = 0x100000000
|
39
|
+
NO_INV = 0x200000000
|
40
|
+
NO_HASH_NAME = 0x400000000
|
41
|
+
SPLICE_OLD = 0x800000000
|
42
|
+
SECONDARY_SEQ = 0x1000000000 # output SEQ field for seqondary alignments using hard clipping
|
41
43
|
|
42
44
|
HPC = 0x1
|
43
45
|
NO_SEQ = 0x2
|
@@ -74,79 +76,6 @@ module Minimap2
|
|
74
76
|
:a, MM128.ptr
|
75
77
|
end
|
76
78
|
|
77
|
-
# indexing option
|
78
|
-
class IdxOpt < ::FFI::Struct
|
79
|
-
layout \
|
80
|
-
:k, :short,
|
81
|
-
:w, :short,
|
82
|
-
:flag, :short,
|
83
|
-
:bucket_bits, :short,
|
84
|
-
:mini_batch_size, :int64_t,
|
85
|
-
:batch_size, :uint64_t
|
86
|
-
end
|
87
|
-
|
88
|
-
# mapping option
|
89
|
-
class MapOpt < ::FFI::Struct
|
90
|
-
layout \
|
91
|
-
:flag, :int64_t, # see MM_F_* macros
|
92
|
-
:seed, :int,
|
93
|
-
:sdust_thres, :int, # score threshold for SDUST; 0 to disable
|
94
|
-
:max_qlen, :int, # max query length
|
95
|
-
:bw, :int, # bandwidth
|
96
|
-
:bw_long, :int,
|
97
|
-
:max_gap, :int, # break a chain if there are no minimizers in a max_gap window
|
98
|
-
:max_gap_ref, :int,
|
99
|
-
:max_frag_len, :int,
|
100
|
-
:max_chain_skip, :int,
|
101
|
-
:max_chain_iter, :int,
|
102
|
-
:min_cnt, :int, # min number of minimizers on each chain
|
103
|
-
:min_chain_score, :int, # min chaining score
|
104
|
-
:chain_gap_scale, :float,
|
105
|
-
:chain_skip_scale, :float,
|
106
|
-
:rmq_size_cap, :int,
|
107
|
-
:rmq_inner_dist, :int,
|
108
|
-
:rmq_rescue_size, :int,
|
109
|
-
:rmq_rescue_ratio, :float,
|
110
|
-
:mask_level, :float,
|
111
|
-
:mask_len, :int,
|
112
|
-
:pri_ratio, :float,
|
113
|
-
:best_n, :int, # top best_n chains are subjected to DP alignment
|
114
|
-
:alt_drop, :float,
|
115
|
-
:a, :int, # matching score
|
116
|
-
:b, :int, # mismatch
|
117
|
-
:q, :int, # gap-open
|
118
|
-
:e, :int, # gap-ext
|
119
|
-
:q2, :int, # gap-open
|
120
|
-
:e2, :int, # gap-ext
|
121
|
-
:sc_ambi, :int, # score when one or both bases are "N"
|
122
|
-
:noncan, :int, # cost of non-canonical splicing sites
|
123
|
-
:junc_bonus, :int,
|
124
|
-
:zdrop, :int, # break alignment if alignment score drops too fast along the diagonal
|
125
|
-
:zdrop_inv, :int,
|
126
|
-
:end_bonus, :int,
|
127
|
-
:min_dp_max, :int, # drop an alignment if the score of the max scoring segment is below this threshold
|
128
|
-
:min_ksw_len, :int,
|
129
|
-
:anchor_ext_len, :int,
|
130
|
-
:anchor_ext_shift, :int,
|
131
|
-
:max_clip_ratio, :float, # drop an alignment if BOTH ends are clipped above this ratio
|
132
|
-
:rank_min_len, :int,
|
133
|
-
:rank_frac, :float,
|
134
|
-
:pe_ori, :int,
|
135
|
-
:pe_bonus, :int,
|
136
|
-
:mid_occ_frac, :float, # only used by mm_mapopt_update(); see below
|
137
|
-
:q_occ_frac, :float,
|
138
|
-
:min_mid_occ, :int32,
|
139
|
-
:max_mid_occ, :int32,
|
140
|
-
:mid_occ, :int32, # ignore seeds with occurrences above this threshold
|
141
|
-
:max_occ, :int32,
|
142
|
-
:max_max_occ, :int32,
|
143
|
-
:occ_dist, :int32,
|
144
|
-
:mini_batch_size, :int64_t, # size of a batch of query bases to process in parallel
|
145
|
-
:max_sw_mat, :int64_t,
|
146
|
-
:cap_kalloc, :int64_t,
|
147
|
-
:split_prefix, :string
|
148
|
-
end
|
149
|
-
|
150
79
|
# minimap2 index
|
151
80
|
class IdxSeq < ::FFI::Struct
|
152
81
|
layout \
|
@@ -173,17 +102,6 @@ module Minimap2
|
|
173
102
|
:h, :pointer
|
174
103
|
end
|
175
104
|
|
176
|
-
# index reader
|
177
|
-
class IdxReader < ::FFI::Struct
|
178
|
-
layout \
|
179
|
-
:is_idx, :int,
|
180
|
-
:n_parts, :int,
|
181
|
-
:idx_size, :int64_t,
|
182
|
-
:opt, IdxOpt,
|
183
|
-
:fp_out, :pointer, # FILE
|
184
|
-
:seq_or_idx, :pointer # FIXME: Union mm_bseq_files or FILE
|
185
|
-
end
|
186
|
-
|
187
105
|
# minimap2 alignment
|
188
106
|
class Extra < ::FFI::BitStruct
|
189
107
|
layout \
|
@@ -242,6 +160,90 @@ module Minimap2
|
|
242
160
|
:dummy, 5
|
243
161
|
end
|
244
162
|
|
163
|
+
# indexing option
|
164
|
+
class IdxOpt < ::FFI::Struct
|
165
|
+
layout \
|
166
|
+
:k, :short,
|
167
|
+
:w, :short,
|
168
|
+
:flag, :short,
|
169
|
+
:bucket_bits, :short,
|
170
|
+
:mini_batch_size, :int64_t,
|
171
|
+
:batch_size, :uint64_t
|
172
|
+
end
|
173
|
+
|
174
|
+
# mapping option
|
175
|
+
class MapOpt < ::FFI::Struct
|
176
|
+
layout \
|
177
|
+
:flag, :int64_t, # see MM_F_* macros
|
178
|
+
:seed, :int,
|
179
|
+
:sdust_thres, :int, # score threshold for SDUST; 0 to disable
|
180
|
+
:max_qlen, :int, # max query length
|
181
|
+
:bw, :int, # bandwidth
|
182
|
+
:bw_long, :int,
|
183
|
+
:max_gap, :int, # break a chain if there are no minimizers in a max_gap window
|
184
|
+
:max_gap_ref, :int,
|
185
|
+
:max_frag_len, :int,
|
186
|
+
:max_chain_skip, :int,
|
187
|
+
:max_chain_iter, :int,
|
188
|
+
:min_cnt, :int, # min number of minimizers on each chain
|
189
|
+
:min_chain_score, :int, # min chaining score
|
190
|
+
:chain_gap_scale, :float,
|
191
|
+
:chain_skip_scale, :float,
|
192
|
+
:rmq_size_cap, :int,
|
193
|
+
:rmq_inner_dist, :int,
|
194
|
+
:rmq_rescue_size, :int,
|
195
|
+
:rmq_rescue_ratio, :float,
|
196
|
+
:mask_level, :float,
|
197
|
+
:mask_len, :int,
|
198
|
+
:pri_ratio, :float,
|
199
|
+
:best_n, :int, # top best_n chains are subjected to DP alignment
|
200
|
+
:alt_drop, :float,
|
201
|
+
:a, :int, # matching score
|
202
|
+
:b, :int, # mismatch
|
203
|
+
:q, :int, # gap-open
|
204
|
+
:e, :int, # gap-ext
|
205
|
+
:q2, :int, # gap-open
|
206
|
+
:e2, :int, # gap-ext
|
207
|
+
:sc_ambi, :int, # score when one or both bases are "N"
|
208
|
+
:noncan, :int, # cost of non-canonical splicing sites
|
209
|
+
:junc_bonus, :int,
|
210
|
+
:zdrop, :int, # break alignment if alignment score drops too fast along the diagonal
|
211
|
+
:zdrop_inv, :int,
|
212
|
+
:end_bonus, :int,
|
213
|
+
:min_dp_max, :int, # drop an alignment if the score of the max scoring segment is below this threshold
|
214
|
+
:min_ksw_len, :int,
|
215
|
+
:anchor_ext_len, :int,
|
216
|
+
:anchor_ext_shift, :int,
|
217
|
+
:max_clip_ratio, :float, # drop an alignment if BOTH ends are clipped above this ratio
|
218
|
+
:rank_min_len, :int,
|
219
|
+
:rank_frac, :float,
|
220
|
+
:pe_ori, :int,
|
221
|
+
:pe_bonus, :int,
|
222
|
+
:mid_occ_frac, :float, # only used by mm_mapopt_update(); see below
|
223
|
+
:q_occ_frac, :float,
|
224
|
+
:min_mid_occ, :int32,
|
225
|
+
:max_mid_occ, :int32,
|
226
|
+
:mid_occ, :int32, # ignore seeds with occurrences above this threshold
|
227
|
+
:max_occ, :int32,
|
228
|
+
:max_max_occ, :int32,
|
229
|
+
:occ_dist, :int32,
|
230
|
+
:mini_batch_size, :int64_t, # size of a batch of query bases to process in parallel
|
231
|
+
:max_sw_mat, :int64_t,
|
232
|
+
:cap_kalloc, :int64_t,
|
233
|
+
:split_prefix, :string
|
234
|
+
end
|
235
|
+
|
236
|
+
# index reader
|
237
|
+
class IdxReader < ::FFI::Struct
|
238
|
+
layout \
|
239
|
+
:is_idx, :int,
|
240
|
+
:n_parts, :int,
|
241
|
+
:idx_size, :int64_t,
|
242
|
+
:opt, IdxOpt,
|
243
|
+
:fp_out, :pointer, # FILE
|
244
|
+
:seq_or_idx, :pointer # FIXME: Union mm_bseq_files or FILE
|
245
|
+
end
|
246
|
+
|
245
247
|
# memory buffer for thread-local storage during mapping
|
246
248
|
class TBuf < ::FFI::Struct
|
247
249
|
layout \
|
data/lib/minimap2/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minimap2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.25.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -194,6 +194,7 @@ files:
|
|
194
194
|
- ext/minimap2/mmpriv.h
|
195
195
|
- ext/minimap2/options.c
|
196
196
|
- ext/minimap2/pe.c
|
197
|
+
- ext/minimap2/pyproject.toml
|
197
198
|
- ext/minimap2/python/README.rst
|
198
199
|
- ext/minimap2/python/cmappy.h
|
199
200
|
- ext/minimap2/python/cmappy.pxd
|
@@ -260,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
260
261
|
- !ruby/object:Gem::Version
|
261
262
|
version: '0'
|
262
263
|
requirements: []
|
263
|
-
rubygems_version: 3.4.
|
264
|
+
rubygems_version: 3.4.6
|
264
265
|
signing_key:
|
265
266
|
specification_version: 4
|
266
267
|
summary: minimap2
|