htslib 0.2.5 → 0.2.6
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 +41 -43
- data/TUTORIAL.md +270 -0
- data/lib/hts/bam/auxi.rb +28 -2
- data/lib/hts/bam/cigar.rb +46 -6
- data/lib/hts/bam/flag.rb +43 -4
- data/lib/hts/bam/record.rb +2 -1
- data/lib/hts/bam.rb +21 -13
- data/lib/hts/bcf/format.rb +28 -24
- data/lib/hts/bcf/info.rb +28 -24
- data/lib/hts/bcf.rb +34 -23
- data/lib/hts/faidx/sequence.rb +64 -0
- data/lib/hts/faidx.rb +64 -15
- data/lib/hts/hts.rb +10 -7
- data/lib/hts/libhts/constants.rb +14 -14
- data/lib/hts/libhts/cram.rb +1 -1
- data/lib/hts/libhts/sam.rb +4 -4
- data/lib/hts/libhts/tbx.rb +2 -0
- data/lib/hts/libhts/tbx_funcs.rb +1 -1
- data/lib/hts/libhts/vcf.rb +1 -1
- data/lib/hts/tbx.rb +49 -0
- data/lib/hts/version.rb +1 -1
- metadata +5 -3
data/lib/hts/bam.rb
CHANGED
@@ -59,7 +59,7 @@ module HTS
|
|
59
59
|
@start_position = tell
|
60
60
|
end
|
61
61
|
|
62
|
-
def build_index(index_name = nil, min_shift: 0)
|
62
|
+
def build_index(index_name = nil, min_shift: 0, threads: 2)
|
63
63
|
check_closed
|
64
64
|
|
65
65
|
if index_name
|
@@ -67,10 +67,15 @@ module HTS
|
|
67
67
|
else
|
68
68
|
warn "Create index for #{@file_name}"
|
69
69
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
70
|
+
case LibHTS.sam_index_build3(@file_name, index_name, min_shift, (@nthreads || threads))
|
71
|
+
when 0 # successful
|
72
|
+
when -1 then raise "indexing failed"
|
73
|
+
when -2 then raise "opening #{@file_name} failed"
|
74
|
+
when -3 then raise "format not indexable"
|
75
|
+
when -4 then raise "failed to create and/or save the index"
|
76
|
+
else raise "unknown error"
|
77
|
+
end
|
78
|
+
self # for method chaining
|
74
79
|
end
|
75
80
|
|
76
81
|
def load_index(index_name = nil)
|
@@ -95,11 +100,6 @@ module HTS
|
|
95
100
|
super
|
96
101
|
end
|
97
102
|
|
98
|
-
def fai=(fai)
|
99
|
-
check_closed
|
100
|
-
LibHTS.hts_set_fai_filename(@hts_file, fai) > 0 || raise
|
101
|
-
end
|
102
|
-
|
103
103
|
def write_header(header)
|
104
104
|
check_closed
|
105
105
|
|
@@ -107,14 +107,22 @@ module HTS
|
|
107
107
|
LibHTS.sam_hdr_write(@hts_file, header)
|
108
108
|
end
|
109
109
|
|
110
|
-
def
|
110
|
+
def header=(header)
|
111
|
+
write_header(header)
|
112
|
+
end
|
113
|
+
|
114
|
+
def write(record)
|
111
115
|
check_closed
|
112
116
|
|
113
|
-
|
114
|
-
r = LibHTS.sam_write1(@hts_file, header,
|
117
|
+
# record = record.dup
|
118
|
+
r = LibHTS.sam_write1(@hts_file, header, record)
|
115
119
|
raise "Failed to write record" if r < 0
|
116
120
|
end
|
117
121
|
|
122
|
+
def <<(aln)
|
123
|
+
write(aln)
|
124
|
+
end
|
125
|
+
|
118
126
|
def each(copy: false, &block)
|
119
127
|
if copy
|
120
128
|
each_record_copy(&block)
|
data/lib/hts/bcf/format.rb
CHANGED
@@ -8,30 +8,10 @@ module HTS
|
|
8
8
|
@p1 = FFI::MemoryPointer.new(:pointer) # FIXME: naming
|
9
9
|
end
|
10
10
|
|
11
|
-
#
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
# For compatibility with HTS.cr.
|
17
|
-
def get_float(key)
|
18
|
-
get(key, :float)
|
19
|
-
end
|
20
|
-
|
21
|
-
# For compatibility with HTS.cr.
|
22
|
-
def get_flag(key)
|
23
|
-
get(key, :flag)
|
24
|
-
end
|
25
|
-
|
26
|
-
# For compatibility with HTS.cr.
|
27
|
-
def get_string(key)
|
28
|
-
get(key, :string)
|
29
|
-
end
|
30
|
-
|
31
|
-
def [](key)
|
32
|
-
get(key)
|
33
|
-
end
|
34
|
-
|
11
|
+
# @note: Why is this method named "get" instead of "fetch"?
|
12
|
+
# This is for compatibility with the Crystal language
|
13
|
+
# which provides methods like `get_int`, `get_float`, etc.
|
14
|
+
# I think they are better than `fetch_int`` and `fetch_float`.
|
35
15
|
def get(key, type = nil)
|
36
16
|
n = FFI::MemoryPointer.new(:int)
|
37
17
|
p1 = @p1
|
@@ -73,6 +53,30 @@ module HTS
|
|
73
53
|
end
|
74
54
|
end
|
75
55
|
|
56
|
+
# For compatibility with HTS.cr.
|
57
|
+
def get_int(key)
|
58
|
+
get(key, :int)
|
59
|
+
end
|
60
|
+
|
61
|
+
# For compatibility with HTS.cr.
|
62
|
+
def get_float(key)
|
63
|
+
get(key, :float)
|
64
|
+
end
|
65
|
+
|
66
|
+
# For compatibility with HTS.cr.
|
67
|
+
def get_flag(key)
|
68
|
+
get(key, :flag)
|
69
|
+
end
|
70
|
+
|
71
|
+
# For compatibility with HTS.cr.
|
72
|
+
def get_string(key)
|
73
|
+
get(key, :string)
|
74
|
+
end
|
75
|
+
|
76
|
+
def [](key)
|
77
|
+
get(key)
|
78
|
+
end
|
79
|
+
|
76
80
|
def fields
|
77
81
|
ids.map do |id|
|
78
82
|
name = LibHTS.bcf_hdr_int2id(@record.header.struct, LibHTS::BCF_DT_ID, id)
|
data/lib/hts/bcf/info.rb
CHANGED
@@ -9,31 +9,11 @@ module HTS
|
|
9
9
|
@p1 = FFI::MemoryPointer.new(:pointer) # FIXME: naming
|
10
10
|
end
|
11
11
|
|
12
|
-
# For compatibility with HTS.cr.
|
13
|
-
def get_int(key)
|
14
|
-
get(key, :int)
|
15
|
-
end
|
16
|
-
|
17
|
-
# For compatibility with HTS.cr.
|
18
|
-
def get_float(key)
|
19
|
-
get(key, :float)
|
20
|
-
end
|
21
|
-
|
22
|
-
# For compatibility with HTS.cr.
|
23
|
-
def get_string(key)
|
24
|
-
get(key, :string)
|
25
|
-
end
|
26
|
-
|
27
|
-
# For compatibility with HTS.cr.
|
28
|
-
def get_flag(key)
|
29
|
-
get(key, :flag)
|
30
|
-
end
|
31
|
-
|
32
|
-
def [](key)
|
33
|
-
get(key)
|
34
|
-
end
|
35
|
-
|
36
12
|
# @note Specify the type. If you don't specify a type, it will still work, but it will be slower.
|
13
|
+
# @note: Why is this method named "get" instead of "fetch"?
|
14
|
+
# This is for compatibility with the Crystal language
|
15
|
+
# which provides methods like `get_int`, `get_float`, etc.
|
16
|
+
# I think they are better than `fetch_int`` and `fetch_float`.
|
37
17
|
def get(key, type = nil)
|
38
18
|
n = FFI::MemoryPointer.new(:int)
|
39
19
|
p1 = @p1
|
@@ -70,6 +50,30 @@ module HTS
|
|
70
50
|
end
|
71
51
|
end
|
72
52
|
|
53
|
+
# For compatibility with HTS.cr.
|
54
|
+
def get_int(key)
|
55
|
+
get(key, :int)
|
56
|
+
end
|
57
|
+
|
58
|
+
# For compatibility with HTS.cr.
|
59
|
+
def get_float(key)
|
60
|
+
get(key, :float)
|
61
|
+
end
|
62
|
+
|
63
|
+
# For compatibility with HTS.cr.
|
64
|
+
def get_string(key)
|
65
|
+
get(key, :string)
|
66
|
+
end
|
67
|
+
|
68
|
+
# For compatibility with HTS.cr.
|
69
|
+
def get_flag(key)
|
70
|
+
get(key, :flag)
|
71
|
+
end
|
72
|
+
|
73
|
+
def [](key)
|
74
|
+
get(key)
|
75
|
+
end
|
76
|
+
|
73
77
|
# FIXME: naming? room for improvement.
|
74
78
|
def fields
|
75
79
|
keys.map do |key|
|
data/lib/hts/bcf.rb
CHANGED
@@ -54,7 +54,7 @@ module HTS
|
|
54
54
|
@start_position = tell
|
55
55
|
end
|
56
56
|
|
57
|
-
def build_index(index_name = nil, min_shift: 14)
|
57
|
+
def build_index(index_name = nil, min_shift: 14, threads: 2)
|
58
58
|
check_closed
|
59
59
|
|
60
60
|
if index_name
|
@@ -62,10 +62,15 @@ module HTS
|
|
62
62
|
else
|
63
63
|
warn "Create index for #{@file_name}"
|
64
64
|
end
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
case LibHTS.bcf_index_build3(@file_name, index_name, min_shift, (@nthreads || threads))
|
66
|
+
when 0 # sccessful
|
67
|
+
when -1 then raise "indexing failed"
|
68
|
+
when -2 then raise "opening #{@file_name} failed"
|
69
|
+
when -3 then raise "format not indexable"
|
70
|
+
when -4 then raise "failed to create and/or save the index"
|
71
|
+
else raise "unknown error"
|
72
|
+
end
|
73
|
+
self # for method chaining
|
69
74
|
end
|
70
75
|
|
71
76
|
def load_index(index_name = nil)
|
@@ -97,15 +102,21 @@ module HTS
|
|
97
102
|
LibHTS.bcf_hdr_write(@hts_file, header)
|
98
103
|
end
|
99
104
|
|
100
|
-
def
|
105
|
+
def header=(header)
|
106
|
+
write_header(header)
|
107
|
+
end
|
108
|
+
|
109
|
+
def write(record)
|
101
110
|
check_closed
|
102
111
|
|
103
|
-
|
104
|
-
r = LibHTS.bcf_write(@hts_file, header,
|
112
|
+
# record = record.dup
|
113
|
+
r = LibHTS.bcf_write(@hts_file, header, record)
|
105
114
|
raise "Failed to write record" if r < 0
|
106
115
|
end
|
107
116
|
|
108
|
-
|
117
|
+
def <<(var)
|
118
|
+
write(var)
|
119
|
+
end
|
109
120
|
|
110
121
|
def nsamples
|
111
122
|
check_closed
|
@@ -164,13 +175,13 @@ module HTS
|
|
164
175
|
def info(key = nil)
|
165
176
|
check_closed
|
166
177
|
position = tell
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
178
|
+
raise NotImplementedError unless key
|
179
|
+
|
180
|
+
ary = map { |r| r.info(key) }
|
181
|
+
|
182
|
+
# ary = each_copy.map { |r| r.info }
|
183
|
+
# ary = map { |r| r.info.clone }
|
184
|
+
|
174
185
|
seek(position)
|
175
186
|
ary
|
176
187
|
end
|
@@ -178,13 +189,13 @@ module HTS
|
|
178
189
|
def format(key = nil)
|
179
190
|
check_closed
|
180
191
|
position = tell
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
192
|
+
raise NotImplementedError unless key
|
193
|
+
|
194
|
+
ary = map { |r| r.format(key) }
|
195
|
+
|
196
|
+
# ary = each_copy.map { |r| r.format }
|
197
|
+
# ary = map { |r| r.format.clone }
|
198
|
+
|
188
199
|
seek(position)
|
189
200
|
ary
|
190
201
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require_relative "../faidx"
|
2
|
+
|
3
|
+
module HTS
|
4
|
+
class Faidx
|
5
|
+
class Sequence
|
6
|
+
attr_reader :name, :faidx
|
7
|
+
|
8
|
+
def initialize(faidx, name)
|
9
|
+
raise unless faidx.has_key?(name)
|
10
|
+
|
11
|
+
@faidx = faidx
|
12
|
+
@name = name
|
13
|
+
end
|
14
|
+
|
15
|
+
def length
|
16
|
+
faidx.seq_len(name)
|
17
|
+
end
|
18
|
+
alias size length
|
19
|
+
|
20
|
+
def seq(start = nil, stop = nil)
|
21
|
+
faidx.seq(name, start, stop)
|
22
|
+
end
|
23
|
+
|
24
|
+
def qual(start = nil, stop = nil)
|
25
|
+
faidx.qual(name, start, stop)
|
26
|
+
end
|
27
|
+
|
28
|
+
def [](arg)
|
29
|
+
case arg
|
30
|
+
when Integer
|
31
|
+
if arg >= 0
|
32
|
+
start = arg
|
33
|
+
stop = arg
|
34
|
+
else
|
35
|
+
start = length + arg
|
36
|
+
stop = length + arg
|
37
|
+
end
|
38
|
+
when Range
|
39
|
+
arg = Range.new(arg.begin, arg.end + length, arg.exclude_end?) if arg.end&.<(0)
|
40
|
+
arg = Range.new(arg.begin + length, arg.end, arg.exclude_end?) if arg.begin&.<(0)
|
41
|
+
if arg.begin.nil?
|
42
|
+
if arg.end.nil?
|
43
|
+
start = nil
|
44
|
+
stop = nil
|
45
|
+
else
|
46
|
+
start = 0
|
47
|
+
stop = arg.exclude_end? ? arg.end - 1 : arg.end
|
48
|
+
end
|
49
|
+
elsif arg.end.nil?
|
50
|
+
# always include the first base
|
51
|
+
start = arg.begin
|
52
|
+
stop = length - 1
|
53
|
+
else
|
54
|
+
start = arg.begin
|
55
|
+
stop = arg.exclude_end? ? arg.end - 1 : arg.end
|
56
|
+
end
|
57
|
+
else
|
58
|
+
raise ArgumentError
|
59
|
+
end
|
60
|
+
seq(start, stop)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/hts/faidx.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "../htslib"
|
4
|
+
require_relative "faidx/sequence"
|
4
5
|
|
5
6
|
module HTS
|
6
7
|
class Faidx
|
@@ -25,7 +26,11 @@ module HTS
|
|
25
26
|
end
|
26
27
|
|
27
28
|
@file_name = file_name
|
28
|
-
@fai =
|
29
|
+
@fai = if [".fq", ".fastq"].include? File.extname(@file_name)
|
30
|
+
LibHTS.fai_load_format(@file_name, 2)
|
31
|
+
else
|
32
|
+
LibHTS.fai_load(@file_name)
|
33
|
+
end
|
29
34
|
|
30
35
|
raise Errno::ENOENT, "Failed to open #{@file_name}" if @fai.null?
|
31
36
|
end
|
@@ -38,10 +43,9 @@ module HTS
|
|
38
43
|
LibHTS.fai_destroy(@fai)
|
39
44
|
end
|
40
45
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
# end
|
46
|
+
def file_format
|
47
|
+
@fai[:format]
|
48
|
+
end
|
45
49
|
|
46
50
|
# the number of sequences in the index.
|
47
51
|
def length
|
@@ -50,31 +54,48 @@ module HTS
|
|
50
54
|
alias size length
|
51
55
|
|
52
56
|
# return the length of the requested chromosome.
|
53
|
-
def
|
57
|
+
def names
|
58
|
+
Array.new(length) { |i| LibHTS.faidx_iseq(@fai, i) }
|
59
|
+
end
|
60
|
+
|
61
|
+
alias keys names
|
62
|
+
|
63
|
+
def has_key?(key)
|
64
|
+
raise ArgumentError, "Expect chrom to be String or Symbol" unless key.is_a?(String) || key.is_a?(Symbol)
|
65
|
+
|
66
|
+
key = key.to_s
|
67
|
+
case LibHTS.faidx_has_seq(@fai, key)
|
68
|
+
when 1 then true
|
69
|
+
when 0 then false
|
70
|
+
else raise
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def [](name)
|
75
|
+
name = LibHTS.faidx_iseq(@fai, name) if name.is_a?(Integer)
|
76
|
+
Sequence.new(self, name)
|
77
|
+
end
|
78
|
+
|
79
|
+
# return the length of the requested chromosome.
|
80
|
+
def seq_len(chrom)
|
54
81
|
raise ArgumentError, "Expect chrom to be String or Symbol" unless chrom.is_a?(String) || chrom.is_a?(Symbol)
|
55
82
|
|
56
83
|
chrom = chrom.to_s
|
57
84
|
result = LibHTS.faidx_seq_len(@fai, chrom)
|
58
85
|
result == -1 ? nil : result
|
59
86
|
end
|
60
|
-
alias chrom_length chrom_size
|
61
87
|
|
62
|
-
#
|
63
|
-
def chrom_names
|
64
|
-
Array.new(length) { |i| LibHTS.faidx_iseq(@fai, i) }
|
65
|
-
end
|
66
|
-
|
67
|
-
# @overload fetch(name)
|
88
|
+
# @overload seq(name)
|
68
89
|
# Fetch the sequence as a String.
|
69
90
|
# @param name [String] chr1:0-10
|
70
|
-
# @overload
|
91
|
+
# @overload seq(name, start, stop)
|
71
92
|
# Fetch the sequence as a String.
|
72
93
|
# @param name [String] the name of the chromosome
|
73
94
|
# @param start [Integer] the start position of the sequence (0-based)
|
74
95
|
# @param stop [Integer] the end position of the sequence (0-based)
|
75
96
|
# @return [String] the sequence
|
76
97
|
|
77
|
-
def
|
98
|
+
def fetch_seq(name, start = nil, stop = nil)
|
78
99
|
name = name.to_s
|
79
100
|
rlen = FFI::MemoryPointer.new(:int)
|
80
101
|
|
@@ -84,6 +105,7 @@ module HTS
|
|
84
105
|
start < 0 && raise(ArgumentError, "Expect start to be >= 0")
|
85
106
|
stop < 0 && raise(ArgumentError, "Expect stop to be >= 0")
|
86
107
|
start > stop && raise(ArgumentError, "Expect start to be <= stop")
|
108
|
+
stop >= seq_len(name) && raise(ArgumentError, "Expect stop to be < seq_len")
|
87
109
|
|
88
110
|
result = LibHTS.faidx_fetch_seq(@fai, name, start, stop, rlen)
|
89
111
|
end
|
@@ -95,5 +117,32 @@ module HTS
|
|
95
117
|
|
96
118
|
result
|
97
119
|
end
|
120
|
+
|
121
|
+
alias seq fetch_seq
|
122
|
+
|
123
|
+
def fetch_qual(name, start = nil, stop = nil)
|
124
|
+
name = name.to_s
|
125
|
+
rlen = FFI::MemoryPointer.new(:int)
|
126
|
+
|
127
|
+
if start.nil? && stop.nil?
|
128
|
+
result = LibHTS.fai_fetchqual(@fai, name, rlen)
|
129
|
+
else
|
130
|
+
start < 0 && raise(ArgumentError, "Expect start to be >= 0")
|
131
|
+
stop < 0 && raise(ArgumentError, "Expect stop to be >= 0")
|
132
|
+
start > stop && raise(ArgumentError, "Expect start to be <= stop")
|
133
|
+
stop >= seq_len(name) && raise(ArgumentError, "Expect stop to be < seq_len")
|
134
|
+
|
135
|
+
result = LibHTS.faidx_fetch_qual(@fai, name, start, stop, rlen)
|
136
|
+
end
|
137
|
+
|
138
|
+
case rlen.read_int
|
139
|
+
when -2 then raise "Invalid chromosome name: #{name}"
|
140
|
+
when -1 then raise "Error fetching sequence: #{name}:#{start}-#{stop}"
|
141
|
+
end
|
142
|
+
|
143
|
+
result
|
144
|
+
end
|
145
|
+
|
146
|
+
alias qual fetch_qual
|
98
147
|
end
|
99
148
|
end
|
data/lib/hts/hts.rb
CHANGED
@@ -69,6 +69,11 @@ module HTS
|
|
69
69
|
@hts_file.nil? || @hts_file.null?
|
70
70
|
end
|
71
71
|
|
72
|
+
def fai=(fai)
|
73
|
+
check_closed
|
74
|
+
LibHTS.hts_set_fai_filename(@hts_file, fai) > 0 || raise
|
75
|
+
end
|
76
|
+
|
72
77
|
def set_threads(n = nil)
|
73
78
|
if n.nil?
|
74
79
|
require "etc"
|
@@ -107,14 +112,12 @@ module HTS
|
|
107
112
|
end
|
108
113
|
|
109
114
|
def rewind
|
110
|
-
|
111
|
-
r = seek(@start_position)
|
112
|
-
raise "Failed to rewind: #{r}" if r < 0
|
115
|
+
raise "Cannot rewind: no start position" unless @start_position
|
113
116
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
117
|
+
r = seek(@start_position)
|
118
|
+
raise "Failed to rewind: #{r}" if r < 0
|
119
|
+
|
120
|
+
tell
|
118
121
|
end
|
119
122
|
|
120
123
|
private
|
data/lib/hts/libhts/constants.rb
CHANGED
@@ -158,7 +158,7 @@ module HTS
|
|
158
158
|
:specific, :pointer
|
159
159
|
end
|
160
160
|
|
161
|
-
class HtsIdx < FFI::Struct
|
161
|
+
class HtsIdx < FFI::Struct # FIXME: ManagedStruct
|
162
162
|
layout \
|
163
163
|
:fmt, :int,
|
164
164
|
:min_shift, :int,
|
@@ -205,7 +205,7 @@ module HTS
|
|
205
205
|
end
|
206
206
|
|
207
207
|
# HtsFile
|
208
|
-
class SamHdr < FFI::
|
208
|
+
class SamHdr < FFI::ManagedStruct
|
209
209
|
layout \
|
210
210
|
:n_targets, :int32,
|
211
211
|
:ignore_sam_err, :int32,
|
@@ -255,7 +255,7 @@ module HTS
|
|
255
255
|
|
256
256
|
SamFile = HtsFile
|
257
257
|
|
258
|
-
class HtsTpool < FFI::
|
258
|
+
class HtsTpool < FFI::ManagedStruct
|
259
259
|
layout \
|
260
260
|
:pool, :pointer,
|
261
261
|
:qsize, :int
|
@@ -277,7 +277,7 @@ module HTS
|
|
277
277
|
:next, HtsOpt.ptr
|
278
278
|
end
|
279
279
|
|
280
|
-
class HtsItr < FFI::BitStruct
|
280
|
+
class HtsItr < FFI::BitStruct # FIXME: ManagedBitStruct
|
281
281
|
layout \
|
282
282
|
:_flags, :uint32, # bit_fields
|
283
283
|
:tid, :int,
|
@@ -358,14 +358,14 @@ module HTS
|
|
358
358
|
class BamPileupCd < FFI::Union
|
359
359
|
layout \
|
360
360
|
:p, :pointer,
|
361
|
-
:i, :
|
361
|
+
:i, :int64,
|
362
362
|
:f, :double
|
363
363
|
end
|
364
364
|
|
365
365
|
class BamPileup1 < FFI::BitStruct
|
366
366
|
layout \
|
367
367
|
:b, Bam1.ptr,
|
368
|
-
:qpos, :
|
368
|
+
:qpos, :int32,
|
369
369
|
:indel, :int,
|
370
370
|
:level, :int,
|
371
371
|
:_flags, :uint32, # bit_fields
|
@@ -391,9 +391,9 @@ module HTS
|
|
391
391
|
:line_skip, :int32
|
392
392
|
end
|
393
393
|
|
394
|
-
class Tbx < FFI::
|
394
|
+
class Tbx < FFI::ManagedStruct
|
395
395
|
layout \
|
396
|
-
:conf, TbxConf
|
396
|
+
:conf, TbxConf,
|
397
397
|
:idx, HtsIdx.ptr,
|
398
398
|
:dict, :pointer
|
399
399
|
|
@@ -406,8 +406,8 @@ module HTS
|
|
406
406
|
|
407
407
|
FaiFormatOptions = enum(:FAI_NONE, :FAI_FASTA, :FAI_FASTQ)
|
408
408
|
|
409
|
-
class Faidx < FFI::Struct
|
410
|
-
layout :bgzf, BGZF,
|
409
|
+
class Faidx < FFI::Struct # FIXME: ManagedStruct
|
410
|
+
layout :bgzf, BGZF.ptr,
|
411
411
|
:n, :int,
|
412
412
|
:m, :int,
|
413
413
|
:name, :pointer,
|
@@ -428,7 +428,7 @@ module HTS
|
|
428
428
|
end
|
429
429
|
|
430
430
|
# Complete textual representation of a header line
|
431
|
-
class BcfHrec < FFI::
|
431
|
+
class BcfHrec < FFI::ManagedStruct
|
432
432
|
layout \
|
433
433
|
:type, :int,
|
434
434
|
:key, :string,
|
@@ -463,7 +463,7 @@ module HTS
|
|
463
463
|
|
464
464
|
class BcfIdinfo < FFI::Struct
|
465
465
|
layout \
|
466
|
-
:info, [:
|
466
|
+
:info, [:uint64, 3],
|
467
467
|
:hrec, [BcfHrec.ptr, 3],
|
468
468
|
:id, :int
|
469
469
|
end
|
@@ -474,7 +474,7 @@ module HTS
|
|
474
474
|
:val, BcfIdinfo.ptr
|
475
475
|
end
|
476
476
|
|
477
|
-
class BcfHdr < FFI::
|
477
|
+
class BcfHdr < FFI::ManagedStruct
|
478
478
|
layout \
|
479
479
|
:n, [:int, 3],
|
480
480
|
:id, [:pointer, 3], # BcfIdpair.ptr
|
@@ -536,7 +536,7 @@ module HTS
|
|
536
536
|
layout \
|
537
537
|
:pos, :hts_pos_t,
|
538
538
|
:rlen, :hts_pos_t,
|
539
|
-
:rid, :
|
539
|
+
:rid, :int32,
|
540
540
|
:qual, :float,
|
541
541
|
:_n_info_allele, :uint32,
|
542
542
|
:_n_fmt_sample, :uint32,
|
data/lib/hts/libhts/cram.rb
CHANGED
data/lib/hts/libhts/sam.rb
CHANGED
@@ -242,13 +242,13 @@ module HTS
|
|
242
242
|
[Bam1,
|
243
243
|
:size_t,
|
244
244
|
:string,
|
245
|
-
:
|
246
|
-
:
|
245
|
+
:uint16,
|
246
|
+
:int32,
|
247
247
|
:hts_pos_t,
|
248
|
-
:
|
248
|
+
:uint8,
|
249
249
|
:size_t,
|
250
250
|
:string,
|
251
|
-
:
|
251
|
+
:int32,
|
252
252
|
:hts_pos_t,
|
253
253
|
:hts_pos_t,
|
254
254
|
:size_t,
|
data/lib/hts/libhts/tbx.rb
CHANGED
data/lib/hts/libhts/tbx_funcs.rb
CHANGED