minimap2 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +25 -23
- data/lib/minimap2/aligner.rb +16 -8
- data/lib/minimap2/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c74321430e1bfb742b2717a27967cc9a801ac2d65308831cecb7824ca7553b8
|
4
|
+
data.tar.gz: 92950765d1d18ca0855ee5de981e56e33be4499015e7a1e28ee52409d68845e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 339fa71b957f497298422d4c5f21554e9cf7ea01036ba64c7b34fadc44e16ecb34125f5ec92aca91eb0e103a443a349b78d4613f07a7e94f35f2a5e745ab17d5
|
7
|
+
data.tar.gz: 0230b2e2b1bea4aebf9611012de44781a56bd94e42a5208604e64c7892df9547a6e67d5db4547f546e227abc4d9010a393d6d0d8506e2e8162e1099172edecd1
|
data/README.md
CHANGED
@@ -4,6 +4,9 @@
|
|
4
4
|
[![CI](https://github.com/kojix2/ruby-minimap2/workflows/CI/badge.svg)](https://github.com/kojix2/ruby-minimap2/actions)
|
5
5
|
[![The MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE.txt)
|
6
6
|
[![Docs Latest](https://img.shields.io/badge/docs-stable-blue.svg)](https://rubydoc.info/gems/minimap2)
|
7
|
+
[![DOI](https://zenodo.org/badge/325711305.svg)](https://zenodo.org/badge/latestdoi/325711305)
|
8
|
+
|
9
|
+
|
7
10
|
|
8
11
|
:dna: [minimap2](https://github.com/lh3/minimap2) - the long-read mapper - for [Ruby](https://github.com/ruby/ruby)
|
9
12
|
|
@@ -14,7 +17,7 @@ You need to install ruby-minimap2 from the source code. Because you need to buil
|
|
14
17
|
Build
|
15
18
|
|
16
19
|
```sh
|
17
|
-
git clone --
|
20
|
+
git clone --recursive https://github.com/kojix2/ruby-minimap2
|
18
21
|
cd ruby-minimap2
|
19
22
|
bundle install
|
20
23
|
bundle exec rake minimap2:build
|
@@ -40,27 +43,26 @@ aligner = Minimap2::Aligner.new("minimap2/test/MT-human.fa")
|
|
40
43
|
seq = aligner.seq("MT_human", 100, 200)
|
41
44
|
|
42
45
|
# mapping
|
43
|
-
aligner.align(seq)
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
46
|
+
hits = aligner.align(seq)
|
47
|
+
pp hits[0].to_h
|
48
|
+
# {:ctg => "MT_human",
|
49
|
+
# :ctg_len => 16569,
|
50
|
+
# :r_st => 100,
|
51
|
+
# :r_en => 200,
|
52
|
+
# :strand => 1,
|
53
|
+
# :trans_strand => 0,
|
54
|
+
# :blen => 100,
|
55
|
+
# :mlen => 100,
|
56
|
+
# :nm => 0,
|
57
|
+
# :primary => 1,
|
58
|
+
# :q_st => 0,
|
59
|
+
# :q_en => 100,
|
60
|
+
# :mapq => 60,
|
61
|
+
# :cigar => [[100, 0]],
|
62
|
+
# :read_num => 1,
|
63
|
+
# :cs => "",
|
64
|
+
# :md => "",
|
65
|
+
# :cigar_str => "100M"}
|
64
66
|
```
|
65
67
|
|
66
68
|
## APIs Overview
|
@@ -121,7 +123,7 @@ ruby-minimap2 is built on top of [Ruby-FFI](https://github.com/ffi/ffi). Native
|
|
121
123
|
Fork your repository and clone.
|
122
124
|
|
123
125
|
```sh
|
124
|
-
git clone --
|
126
|
+
git clone --recursive https://github.com/kojix2/ruby-minimap2
|
125
127
|
# git clone https://github.com/kojix2/ruby-minimap2
|
126
128
|
# cd ruby-minimap2
|
127
129
|
# git submodule update -i
|
data/lib/minimap2/aligner.rb
CHANGED
@@ -80,7 +80,7 @@ module Minimap2
|
|
80
80
|
end
|
81
81
|
|
82
82
|
if fn_idx_in
|
83
|
-
warn
|
83
|
+
warn 'Since fn_idx_in is specified, the seq argument will be ignored.' if seq
|
84
84
|
reader = FFI.mm_idx_reader_open(fn_idx_in, idx_opt, fn_idx_out)
|
85
85
|
|
86
86
|
# The Ruby version raises an error here
|
@@ -116,6 +116,7 @@ module Minimap2
|
|
116
116
|
# In the Ruby language, the name map means iterator.
|
117
117
|
# The original name is map, but here I use the method name align.
|
118
118
|
# @note The use of Enumerator is being considered. The method names may change again.
|
119
|
+
# @return [Array] alignments
|
119
120
|
|
120
121
|
def align(
|
121
122
|
seq, seq2 = nil,
|
@@ -133,25 +134,29 @@ module Minimap2
|
|
133
134
|
|
134
135
|
buf ||= FFI::TBuf.new
|
135
136
|
km = FFI.mm_tbuf_get_km(buf)
|
136
|
-
n_regs_ptr = ::FFI::MemoryPointer.new :int
|
137
137
|
|
138
|
-
|
138
|
+
n_regs_ptr = ::FFI::MemoryPointer.new :int
|
139
|
+
regs_ptr = FFI.mm_map_aux(index, seq, seq2, n_regs_ptr, buf, map_opt)
|
139
140
|
n_regs = n_regs_ptr.read_int
|
140
141
|
|
141
|
-
regs = Array.new(n_regs)
|
142
|
+
regs = Array.new(n_regs) do |i|
|
143
|
+
FFI::Reg1.new(regs_ptr + i * FFI::Reg1.size)
|
144
|
+
end
|
142
145
|
|
143
146
|
hit = FFI::Hit.new
|
147
|
+
|
144
148
|
cs_str = ::FFI::MemoryPointer.new(::FFI::MemoryPointer.new(:string))
|
145
149
|
m_cs_str = ::FFI::MemoryPointer.new :int
|
150
|
+
|
151
|
+
alignments = []
|
152
|
+
|
146
153
|
i = 0
|
147
154
|
begin
|
148
155
|
while i < n_regs
|
149
156
|
FFI.mm_reg2hitpy(index, regs[i], hit)
|
150
|
-
cigar = []
|
151
157
|
|
152
158
|
c = hit[:cigar32].read_array_of_uint32(hit[:n_cigar32])
|
153
|
-
|
154
|
-
cigar = c.map { |x| [x >> 4, x & 0xf] }
|
159
|
+
cigar = c.map { |x| [x >> 4, x & 0xf] } # 32-bit CIGAR encoding -> Ruby array
|
155
160
|
|
156
161
|
_cs = ''
|
157
162
|
if cs
|
@@ -165,7 +170,7 @@ module Minimap2
|
|
165
170
|
_md = cs_str.read_pointer.read_string(l_cs_str)
|
166
171
|
end
|
167
172
|
|
168
|
-
|
173
|
+
alignments << Alignment.new(hit, cigar, _cs, _md)
|
169
174
|
|
170
175
|
FFI.mm_free_reg1(regs[i])
|
171
176
|
i += 1
|
@@ -176,6 +181,7 @@ module Minimap2
|
|
176
181
|
i += 1
|
177
182
|
end
|
178
183
|
end
|
184
|
+
alignments
|
179
185
|
end
|
180
186
|
|
181
187
|
# retrieve a subsequence from the index.
|
@@ -193,11 +199,13 @@ module Minimap2
|
|
193
199
|
end
|
194
200
|
|
195
201
|
# k-mer length, no larger than 28
|
202
|
+
|
196
203
|
def k
|
197
204
|
index[:k]
|
198
205
|
end
|
199
206
|
|
200
207
|
# minimizer window size, no larger than 255
|
208
|
+
|
201
209
|
def w
|
202
210
|
index[:w]
|
203
211
|
end
|
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.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|