minimap2 0.0.2 → 0.2.22.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '09e4267638f072ee219b2af3ef1afd3938c3a6d02f5370aa9454b25b871652b7'
4
- data.tar.gz: ab035c12eb6d6bda353ffab1b5f5923ec8327fea9a4552259b01b02523b7f934
3
+ metadata.gz: 7ceb411a88448c6ed13e6d842450264e91569260c9b19d77e699a93736768522
4
+ data.tar.gz: 76c1f3466375b73c54db6cd2574ffe19a817b11994d50e9e8473a209566b14f5
5
5
  SHA512:
6
- metadata.gz: 8f24c1f2d8e07e1be825fbc2a67049d378c1e1d5f3d23312d474e796fa7968b7d85b58b061226dbf4a14e637c27708667a5737da246e4874f03cadf9df4f013e
7
- data.tar.gz: 5e92b4c08e02416b0385c9a5a6b6c7b46381469ae70447fea80a9269a06e1ac11155a06de3d3a4a97995880f542d8adf9cd6063afa2c133be474644dd6d3245f
6
+ metadata.gz: 05a313f05984e2afab772da3971249327a9461a92d8b1fbcf53329ea5cd9d421e4ab8a137bd16213b86d6912bf1d43fd7f22c1bb5408a36004a64296fab294d9
7
+ data.tar.gz: 7739312455aba2b14192eef634623f351fc4cea721d142b815ce41d651bc3de84e0fe413de6d24e8551ed90a2d71bcbf82a3df5b87685cb1474e6a134ed9fefe
data/README.md CHANGED
@@ -1,20 +1,23 @@
1
- # Minimap2
1
+ # ruby-minimap2
2
2
 
3
3
  [![Gem Version](https://img.shields.io/gem/v/minimap2?color=brightgreen)](https://rubygems.org/gems/minimap2)
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
 
10
13
  ## Installation
11
14
 
12
- You need to install ruby-minimap2 from the source code. Because you need to build minimap2 and create a shared library. Open your terminal and type the following commands in order.
15
+ Open your terminal and type the following commands in order. You need to build minimap2 on your own because you need to create a shared library that contains cmappy functions.
13
16
 
14
17
  Build
15
18
 
16
19
  ```sh
17
- git clone --recurse-submodules https://github.com/kojix2/ruby-minimap2
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
@@ -26,108 +29,136 @@ Install
26
29
  bundle exec rake install
27
30
  ```
28
31
 
29
- Ruby-minimap2 is tested on Ubuntu and macOS.
32
+ Ruby-minimap2 is [tested on Ubuntu and macOS](https://github.com/kojix2/ruby-minimap2/actions).
30
33
 
31
34
  ## Quick Start
32
35
 
33
36
  ```ruby
34
37
  require "minimap2"
38
+ ```
35
39
 
36
- # load or build index
40
+ Create aligner
41
+
42
+ ```ruby
37
43
  aligner = Minimap2::Aligner.new("minimap2/test/MT-human.fa")
44
+ ```
38
45
 
39
- # retrieve a subsequence from the index
46
+ Retrieve a subsequence from the index
47
+
48
+ ```ruby
40
49
  seq = aligner.seq("MT_human", 100, 200)
50
+ ```
41
51
 
42
- # mapping
43
- aligner.align(seq) do |h|
44
- pp h.to_h
45
- # {:ctg => "MT_human",
46
- # :ctg_len => 16569,
47
- # :r_st => 100,
48
- # :r_en => 200,
49
- # :strand => 1,
50
- # :trans_strand => 0,
51
- # :blen => 100,
52
- # :mlen => 100,
53
- # :nm => 0,
54
- # :primary => 1,
55
- # :q_st => 0,
56
- # :q_en => 100,
57
- # :mapq => 60,
58
- # :cigar => [[100, 0]],
59
- # :read_num => 1,
60
- # :cs => "",
61
- # :md => "",
62
- # :cigar_str => "100M"}
63
- end
52
+ Mapping
53
+
54
+ ```ruby
55
+ hits = aligner.align(seq)
56
+ pp hits[0]
57
+ ```
58
+
59
+ ```
60
+ =>
61
+ #<Minimap2::Alignment:0x000055fe18223f50
62
+ @blen=100,
63
+ @cigar=[[100, 0]],
64
+ @cigar_str="100M",
65
+ @cs="",
66
+ @ctg="MT_human",
67
+ @ctg_len=16569,
68
+ @mapq=60,
69
+ @md="",
70
+ @mlen=100,
71
+ @nm=0,
72
+ @primary=1,
73
+ @q_en=100,
74
+ @q_st=0,
75
+ @r_en=200,
76
+ @r_st=100,
77
+ @read_num=1,
78
+ @strand=1,
79
+ @trans_strand=0>
64
80
  ```
65
81
 
66
82
  ## APIs Overview
67
83
 
68
- See the [RubyDoc.info document](https://rubydoc.info/gems/minimap2) for details.
84
+ API is based on [Mappy](https://github.com/lh3/minimap2/tree/master/python), the official Python binding for Minimap2.
85
+
86
+ Note: `Aligner#map` has been changed to `aligne`, because `map` means iterator in Ruby.
69
87
 
70
88
  ```markdown
71
89
  * Minimap2 module
72
- - fastx_read
73
- - revcomp
90
+ - fastx_read Read fasta/fastq file.
91
+ - revcomp Reverse complement sequence.
74
92
 
75
93
  * Aligner class
76
94
  * attributes
77
- - index
78
- - idx_opt
79
- - map_opt
95
+ - index Returns the value of attribute index.
96
+ - idx_opt Returns the value of attribute idx_opt.
97
+ - map_opt Returns the value of attribute map_opt.
80
98
  * methods
81
- - new(path, preset: nil)
82
- - align
99
+ - new(path, preset: nil) Create a new aligner. (presets: sr, map-pb, map-out, map-hifi, splice, asm5, etc.)
100
+ - align Maps and returns alignments.
101
+ - seq Retrieve a subsequence from the index.
83
102
 
84
103
  * Alignment class
85
104
  * attributes
86
- - ctg
87
- - ctg_len
88
- - r_st
89
- - r_en
90
- - strand
91
- - trans_strand
92
- - blen
93
- - mlen
94
- - nm
95
- - primary
96
- - q_st
97
- - q_en
98
- - mapq
99
- - cigar
100
- - read_num
101
- - cs
102
- - md
103
- - cigar_str
105
+ - ctg Returns name of the reference sequence the query is mapped to.
106
+ - ctg_len Returns total length of the reference sequence.
107
+ - r_st Returns start positions on the reference.
108
+ - r_en Returns end positions on the reference.
109
+ - strand Returns +1 if on the forward strand; -1 if on the reverse strand.
110
+ - trans_strand Returns transcript strand. +1 if on the forward strand; -1 if on the reverse strand; 0 if unknown.
111
+ - blen Returns length of the alignment, including both alignment matches and gaps but excluding ambiguous bases.
112
+ - mlen Returns length of the matching bases in the alignment, excluding ambiguous base matches.
113
+ - nm Returns number of mismatches, gaps and ambiguous poistions in the alignment.
114
+ - primary Returns if the alignment is primary (typically the best and the first to generate).
115
+ - q_st Returns start positions on the query.
116
+ - q_en Returns end positions on the query.
117
+ - mapq Returns mapping quality.
118
+ - cigar Returns CIGAR returned as an array of shape (n_cigar,2). The two numbers give the length and the operator of each CIGAR operation.
119
+ - read_num Returns read number that the alignment corresponds to; 1 for the first read and 2 for the second read.
120
+ - cs Returns the cs tag.
121
+ - md Returns the MD tag as in the SAM format. It is an empty string unless the md argument is applied when calling Aligner#align.
122
+ - cigar_str Returns CIGAR string.
104
123
  * methods
105
- - to_h
106
- - to_s
124
+ - to_h Convert Alignment to hash.
125
+ - to_s Convert to the PAF format without the QueryName and QueryLength columns.
107
126
 
108
- * FFI module
109
- * IdxOpt class
110
- * MapOpt class
127
+ ## FFI module
128
+ * IdxOpt class Indexing options.
129
+ * MapOpt class Mapping options.
111
130
  ```
112
131
 
113
- The ruby-minimap2 API is compliant with mappy, the official Python binding for Minimap2. However, there are a few differences. For example, the `map` method has been renamed to `align` since map is the common name for iterators in Ruby.
132
+ This is not all. See the [RubyDoc.info documentation](https://rubydoc.info/gems/minimap2/) for more details.
114
133
 
115
- * [Mappy: Minimap2 Python Binding](https://github.com/lh3/minimap2/tree/master/python)
134
+ ruby-minimap2 is built on top of [Ruby-FFI](https://github.com/ffi/ffi).
135
+ Native functions can be called from the FFI module. FFI also provides the way to access some C structs.
116
136
 
117
- ruby-minimap2 is built on top of [Ruby-FFI](https://github.com/ffi/ffi). Native functions can be called from the FFI module, which also provides a way to access some C structs such as IdxOpt and MapOpt.
137
+ ```ruby
138
+ aligner.idx_opt.members
139
+ # => [:k, :w, :flag, :bucket_bits, :mini_batch_size, :batch_size]
140
+ aligner.kds_opt.values
141
+ # => [15, 10, 0, 14, 50000000, 9223372036854775807]
142
+ aligner.idx_opt[:k]
143
+ # => 15
144
+ aligner.idx_opt[:k] = 14
145
+ aligner.idx_opt[:k]
146
+ # => 14
147
+ ```
118
148
 
119
149
  ## Development
120
150
 
121
- Fork your repository and clone.
151
+ Fork your repository.
152
+ then clone.
122
153
 
123
154
  ```sh
124
- git clone --recurse-submodules https://github.com/kojix2/ruby-minimap2
155
+ git clone --recursive https://github.com/kojix2/ruby-minimap2
125
156
  # git clone https://github.com/kojix2/ruby-minimap2
126
157
  # cd ruby-minimap2
127
158
  # git submodule update -i
128
159
  ```
129
160
 
130
- Build.
161
+ Build Minimap2 and Mappy.
131
162
 
132
163
  ```sh
133
164
  cd ruby-minimap2
@@ -135,6 +166,13 @@ bundle install # Install dependent packages including Ruby-FFI
135
166
  bundle exec rake minimap2:build
136
167
  ```
137
168
 
169
+ A shared library will be created in the vendor directory.
170
+
171
+ ```
172
+ └── vendor
173
+ └── libminimap2.so
174
+ ```
175
+
138
176
  Run tests.
139
177
 
140
178
  ```
@@ -155,3 +193,7 @@ ruby-minimap2 is a library under development and there are many points to be imp
155
193
  ## License
156
194
 
157
195
  [MIT License](https://opensource.org/licenses/MIT).
196
+
197
+ ## Acknowledgements
198
+
199
+ I would like to thank Heng Li for making Minimap2, and all the readers who read the README to the end.
data/lib/minimap2.rb CHANGED
@@ -34,30 +34,34 @@ module Minimap2
34
34
 
35
35
  # methods from mappy
36
36
  class << self
37
- # read fasta/fastq file
37
+ # Set verbosity level.
38
+ # @param [Integer] level
39
+
40
+ def verbose(level = -1)
41
+ FFI.mm_verbose_level(level)
42
+ end
43
+
44
+ # Read fasta/fastq file.
38
45
  # @param [String] file_path
39
- # @param [Boolean] read_comment If false or nil, the comment will not be read.
46
+ # @param [Boolean] comment If True, the comment will be read.
40
47
  # @yield [name, seq, qual, comment]
41
- # Note: You can also use a generic library such as BioRuby instead of this method.
48
+ # @return [Enumerator] enum Retrun Enumerator if not block given.
49
+ # Note: You can BioRuby instead of this method.
42
50
 
43
- def fastx_read(file_path, read_comment = false)
51
+ def fastx_read(file_path, comment: false, &block)
44
52
  path = File.expand_path(file_path)
45
53
  ks = FFI.mm_fastx_open(path)
46
- while FFI.kseq_read(ks) >= 0
47
- qual = ks[:qual][:s] if (ks[:qual][:l]).positive?
48
- name = ks[:name][:s]
49
- seq = ks[:seq][:s]
50
- if read_comment
51
- comment = ks[:comment][:s] if (ks[:comment][:l]).positive?
52
- yield [name, seq, qual, comment]
53
- else
54
- yield [name, seq, qual]
54
+ if block_given?
55
+ fastx_each(ks, comment, &block)
56
+ else
57
+ Enumerator.new do |y|
58
+ # rewind not work
59
+ fastx_each(ks, comment) { |r| y << r }
55
60
  end
56
61
  end
57
- FFI.mm_fastx_close(ks)
58
62
  end
59
63
 
60
- # reverse complement sequence
64
+ # Reverse complement sequence.
61
65
  # @param [String] seq
62
66
  # @return [string] seq
63
67
 
@@ -68,11 +72,23 @@ module Minimap2
68
72
  FFI.mappy_revcomp(l, bseq)
69
73
  end
70
74
 
71
- # set verbosity level
72
- # @param [Integer] level
75
+ private
73
76
 
74
- def verbose(level = -1)
75
- FFI.mm_verbose_level(level)
77
+ def fastx_each(ks, comment)
78
+ yield fastx_next(ks, comment) while FFI.kseq_read(ks) >= 0
79
+ FFI.mm_fastx_close(ks)
80
+ end
81
+
82
+ def fastx_next(ks, read_comment)
83
+ qual = ks[:qual][:s] if (ks[:qual][:l]).positive?
84
+ name = ks[:name][:s]
85
+ seq = ks[:seq][:s]
86
+ if read_comment
87
+ comment = ks[:comment][:s] if (ks[:comment][:l]).positive?
88
+ [name, seq, qual, comment]
89
+ else
90
+ [name, seq, qual]
91
+ end
76
92
  end
77
93
  end
78
94
  end
@@ -4,11 +4,21 @@ module Minimap2
4
4
  class Aligner
5
5
  attr_reader :idx_opt, :map_opt, :index
6
6
 
7
- # Create a new aligner
7
+ # Create a new aligner.
8
8
  #
9
9
  # @param fn_idx_in [String] index or sequence file name.
10
10
  # @param seq [String] a single sequence to index.
11
11
  # @param preset [String] minimap2 preset.
12
+ # * map-pb : PacBio CLR genomic reads
13
+ # * map-ont : Oxford Nanopore genomic reads
14
+ # * map-hifi : PacBio HiFi/CCS genomic reads (v2.19 or later)
15
+ # * asm20 : PacBio HiFi/CCS genomic reads (v2.18 or earlier)
16
+ # * sr : short genomic paired-end reads
17
+ # * splice : spliced long reads (strand unknown)
18
+ # * splice:hq : Final PacBio Iso-seq or traditional cDNA
19
+ # * asm5 : intra-species asm-to-asm alignment
20
+ # * ava-pb : PacBio read overlap
21
+ # * ava-ont : Nanopore read overlap
12
22
  # @param k [Integer] k-mer length, no larger than 28.
13
23
  # @param w [Integer] minimizer window size, no larger than 255.
14
24
  # @param min_cnt [Integer] mininum number of minimizers on a chain.
@@ -80,7 +90,7 @@ module Minimap2
80
90
  end
81
91
 
82
92
  if fn_idx_in
83
- warn "Since fn_idx_in is specified, the seq argument will be ignored." if seq
93
+ warn 'Since fn_idx_in is specified, the seq argument will be ignored.' if seq
84
94
  reader = FFI.mm_idx_reader_open(fn_idx_in, idx_opt, fn_idx_out)
85
95
 
86
96
  # The Ruby version raises an error here
@@ -101,6 +111,7 @@ module Minimap2
101
111
  end
102
112
 
103
113
  # Explicitly releases the memory of the index object.
114
+
104
115
  def free_index
105
116
  FFI.mm_idx_destroy(index) unless index.null?
106
117
  end
@@ -116,6 +127,7 @@ module Minimap2
116
127
  # In the Ruby language, the name map means iterator.
117
128
  # The original name is map, but here I use the method name align.
118
129
  # @note The use of Enumerator is being considered. The method names may change again.
130
+ # @return [Array] alignments
119
131
 
120
132
  def align(
121
133
  seq, seq2 = nil,
@@ -133,25 +145,29 @@ module Minimap2
133
145
 
134
146
  buf ||= FFI::TBuf.new
135
147
  km = FFI.mm_tbuf_get_km(buf)
136
- n_regs_ptr = ::FFI::MemoryPointer.new :int
137
148
 
138
- ptr = FFI.mm_map_aux(index, seq, seq2, n_regs_ptr, buf, map_opt)
149
+ n_regs_ptr = ::FFI::MemoryPointer.new :int
150
+ regs_ptr = FFI.mm_map_aux(index, seq, seq2, n_regs_ptr, buf, map_opt)
139
151
  n_regs = n_regs_ptr.read_int
140
152
 
141
- regs = Array.new(n_regs) { |i| FFI::Reg1.new(ptr + i * FFI::Reg1.size) }
153
+ regs = Array.new(n_regs) do |i|
154
+ FFI::Reg1.new(regs_ptr + i * FFI::Reg1.size)
155
+ end
142
156
 
143
157
  hit = FFI::Hit.new
158
+
144
159
  cs_str = ::FFI::MemoryPointer.new(::FFI::MemoryPointer.new(:string))
145
160
  m_cs_str = ::FFI::MemoryPointer.new :int
161
+
162
+ alignments = []
163
+
146
164
  i = 0
147
165
  begin
148
166
  while i < n_regs
149
167
  FFI.mm_reg2hitpy(index, regs[i], hit)
150
- cigar = []
151
168
 
152
169
  c = hit[:cigar32].read_array_of_uint32(hit[:n_cigar32])
153
- # convert the 32-bit CIGAR encoding to Ruby array
154
- cigar = c.map { |x| [x >> 4, x & 0xf] }
170
+ cigar = c.map { |x| [x >> 4, x & 0xf] } # 32-bit CIGAR encoding -> Ruby array
155
171
 
156
172
  _cs = ''
157
173
  if cs
@@ -165,7 +181,7 @@ module Minimap2
165
181
  _md = cs_str.read_pointer.read_string(l_cs_str)
166
182
  end
167
183
 
168
- yield Alignment.new(hit, cigar, _cs, _md)
184
+ alignments << Alignment.new(hit, cigar, _cs, _md)
169
185
 
170
186
  FFI.mm_free_reg1(regs[i])
171
187
  i += 1
@@ -176,12 +192,13 @@ module Minimap2
176
192
  i += 1
177
193
  end
178
194
  end
195
+ alignments
179
196
  end
180
197
 
181
- # retrieve a subsequence from the index.
182
- # @params name
183
- # @params start
184
- # @params stop
198
+ # Retrieve a subsequence from the index.
199
+ # @param name
200
+ # @param start
201
+ # @param stop
185
202
 
186
203
  def seq(name, start = 0, stop = 0x7fffffff)
187
204
  lp = ::FFI::MemoryPointer.new(:int)
@@ -193,11 +210,13 @@ module Minimap2
193
210
  end
194
211
 
195
212
  # k-mer length, no larger than 28
213
+
196
214
  def k
197
215
  index[:k]
198
216
  end
199
217
 
200
218
  # minimizer window size, no larger than 255
219
+
201
220
  def w
202
221
  index[:w]
203
222
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minimap2
4
- # Alignment result
4
+ # Alignment result.
5
5
  #
6
6
  # @!attribute ctg
7
7
  # @return [String] name of the reference sequence the query is mapped to.
@@ -73,17 +73,21 @@ module Minimap2
73
73
  @cs = cs
74
74
  @md = md
75
75
 
76
- @cigar_str = cigar.map { |x| x[0].to_s + 'MIDNSH'[x[1]] }.join
76
+ @cigar_str = cigar.map { |x| x[0].to_s + FFI::CIGAR_STR[x[1]] }.join
77
77
  end
78
78
 
79
79
  def primary?
80
80
  @primary == 1
81
81
  end
82
82
 
83
+ # Convert Alignment to hash.
84
+
83
85
  def to_h
84
86
  self.class.keys.map { |k| [k, __send__(k)] }.to_h
85
87
  end
86
88
 
89
+ # Convert to the PAF format without the QueryName and QueryLength columns.
90
+
87
91
  def to_s
88
92
  strand = if @strand.positive?
89
93
  '+'
@@ -3,45 +3,60 @@
3
3
  module Minimap2
4
4
  module FFI
5
5
  # flags
6
- NO_DIAG = 0x001 # no exact diagonal hit
7
- NO_DUAL = 0x002 # skip pairs where query name is lexicographically larger than target name
8
- CIGAR = 0x004
9
- OUT_SAM = 0x008
10
- NO_QUAL = 0x010
11
- OUT_CG = 0x020
12
- OUT_CS = 0x040
13
- SPLICE = 0x080 # splice mode
14
- SPLICE_FOR = 0x100 # match GT-AG
15
- SPLICE_REV = 0x200 # match CT-AC, the reverse complement of GT-AG
16
- NO_LJOIN = 0x400
17
- OUT_CS_LONG = 0x800
18
- SR = 0x1000
19
- FRAG_MODE = 0x2000
20
- NO_PRINT_2ND = 0x4000
21
- TWO_IO_THREADS = 0x8000 # Translator's Note. MM_F_2_IO_THREADS. Constants starting with numbers cannot be defined.
22
- LONG_CIGAR = 0x10000
23
- INDEPEND_SEG = 0x20000
24
- SPLICE_FLANK = 0x40000
25
- SOFTCLIP = 0x80000
26
- FOR_ONLY = 0x100000
27
- REV_ONLY = 0x200000
28
- HEAP_SORT = 0x400000
29
- ALL_CHAINS = 0x800000
30
- OUT_MD = 0x1000000
31
- COPY_COMMENT = 0x2000000
32
- EQX = 0x4000000 # use =/X instead of M
33
- PAF_NO_HIT = 0x8000000 # output unmapped reads to PAF
34
- NO_END_FLT = 0x10000000
35
- HARD_MLEVEL = 0x20000000
36
- SAM_HIT_ONLY = 0x40000000
37
-
38
- HPC = 0x1
39
- NO_SEQ = 0x2
40
- NO_NAME = 0x4
41
-
42
- IDX_MAGIC = "MMI\2"
43
-
44
- MAX_SEG = 255
6
+ NO_DIAG = 0x001 # no exact diagonal hit
7
+ NO_DUAL = 0x002 # skip pairs where query name is lexicographically larger than target name
8
+ CIGAR = 0x004
9
+ OUT_SAM = 0x008
10
+ NO_QUAL = 0x010
11
+ OUT_CG = 0x020
12
+ OUT_CS = 0x040
13
+ SPLICE = 0x080 # splice mode
14
+ SPLICE_FOR = 0x100 # match GT-AG
15
+ SPLICE_REV = 0x200 # match CT-AC, the reverse complement of GT-AG
16
+ NO_LJOIN = 0x400
17
+ OUT_CS_LONG = 0x800
18
+ SR = 0x1000
19
+ FRAG_MODE = 0x2000
20
+ NO_PRINT_2ND = 0x4000
21
+ TWO_IO_THREADS = 0x8000 # Translator's Note. MM_F_2_IO_THREADS. Constants starting with numbers cannot be defined.
22
+ LONG_CIGAR = 0x10000
23
+ INDEPEND_SEG = 0x20000
24
+ SPLICE_FLANK = 0x40000
25
+ SOFTCLIP = 0x80000
26
+ FOR_ONLY = 0x100000
27
+ REV_ONLY = 0x200000
28
+ HEAP_SORT = 0x400000
29
+ ALL_CHAINS = 0x800000
30
+ OUT_MD = 0x1000000
31
+ COPY_COMMENT = 0x2000000
32
+ EQX = 0x4000000 # use =/X instead of M
33
+ PAF_NO_HIT = 0x8000000 # output unmapped reads to PAF
34
+ NO_END_FLT = 0x10000000
35
+ HARD_MLEVEL = 0x20000000
36
+ SAM_HIT_ONLY = 0x40000000
37
+ RMQ = 0x80000000 # LL
38
+ QSTRAND = 0x100000000 # LL
39
+ NO_INV = 0x200000000
40
+
41
+ HPC = 0x1
42
+ NO_SEQ = 0x2
43
+ NO_NAME = 0x4
44
+
45
+ IDX_MAGIC = "MMI\2"
46
+
47
+ MAX_SEG = 255
48
+
49
+ CIGAR_MATCH = 0
50
+ CIGAR_INS = 1
51
+ CIGAR_DEL = 2
52
+ CIGAR_N_SKIP = 3
53
+ CIGAR_SOFTCLIP = 4
54
+ CIGAR_HARDCLIP = 5
55
+ CIGAR_PADDING = 6
56
+ CIGAR_EQ_MATCH = 7
57
+ CIGAR_X_MISMATCH = 8
58
+
59
+ CIGAR_STR = 'MIDNSHP=XB'
45
60
 
46
61
  # emulate 128-bit integers
47
62
  class MM128 < ::FFI::Struct
@@ -77,6 +92,7 @@ module Minimap2
77
92
  :sdust_thres, :int, # score threshold for SDUST; 0 to disable
78
93
  :max_qlen, :int, # max query length
79
94
  :bw, :int, # bandwidth
95
+ :bw_long, :int,
80
96
  :max_gap, :int, # break a chain if there are no minimizers in a max_gap window
81
97
  :max_gap_ref, :int,
82
98
  :max_frag_len, :int,
@@ -85,14 +101,14 @@ module Minimap2
85
101
  :min_cnt, :int, # min number of minimizers on each chain
86
102
  :min_chain_score, :int, # min chaining score
87
103
  :chain_gap_scale, :float,
104
+ :rmq_size_cap, :int,
105
+ :rmq_inner_dist, :int,
106
+ :rmq_rescue_size, :int,
107
+ :rmq_rescue_ratio, :float,
88
108
  :mask_level, :float,
89
109
  :mask_len, :int,
90
110
  :pri_ratio, :float,
91
111
  :best_n, :int, # top best_n chains are subjected to DP alignment
92
- :max_join_long, :int,
93
- :max_join_short, :int,
94
- :min_join_flank_sc, :int,
95
- :min_join_flank_ratio, :float,
96
112
  :alt_drop, :float,
97
113
  :a, :int, # matching score
98
114
  :b, :int, # mismatch
@@ -111,6 +127,8 @@ module Minimap2
111
127
  :anchor_ext_len, :int,
112
128
  :anchor_ext_shift, :int,
113
129
  :max_clip_ratio, :float, # drop an alignment if BOTH ends are clipped above this ratio
130
+ :rank_min_len, :int,
131
+ :rank_frac, :float,
114
132
  :pe_ori, :int,
115
133
  :pe_bonus, :int,
116
134
  :mid_occ_frac, :float, # only used by mm_mapopt_update(); see below
@@ -119,6 +137,7 @@ module Minimap2
119
137
  :max_occ, :int32_t,
120
138
  :mini_batch_size, :int64_t, # size of a batch of query bases to process in parallel
121
139
  :max_sw_mat, :int64_t,
140
+ :cap_kalloc, :int64_t,
122
141
  :split_prefix, :string
123
142
  end
124
143
 
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minimap2
4
- VERSION = '0.0.2'
4
+ # Minimap2-2.22 (r1101)
5
+ VERSION = '0.2.22.0'
5
6
  end
Binary file
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.2
4
+ version: 0.2.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kojix2
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-14 00:00:00.000000000 Z
11
+ date: 2021-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: irb
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: minitest
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -112,6 +126,7 @@ files:
112
126
  - lib/minimap2/ffi/mappy.rb
113
127
  - lib/minimap2/ffi_helper.rb
114
128
  - lib/minimap2/version.rb
129
+ - vendor/libminimap2.so
115
130
  homepage: https://github.com/kojix2/ruby-minimap2
116
131
  licenses:
117
132
  - MIT
@@ -131,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
146
  - !ruby/object:Gem::Version
132
147
  version: '0'
133
148
  requirements: []
134
- rubygems_version: 3.2.3
149
+ rubygems_version: 3.2.22
135
150
  signing_key:
136
151
  specification_version: 4
137
152
  summary: minimap2