htslib 0.0.5 → 0.0.10
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 +71 -29
- data/lib/hts/bam/cigar.rb +7 -4
- data/lib/hts/bam/flag.rb +7 -3
- data/lib/hts/bam/header.rb +22 -7
- data/lib/hts/bam/record.rb +27 -21
- data/lib/hts/bam.rb +97 -52
- data/lib/hts/bcf/format.rb +28 -6
- data/lib/hts/bcf/header.rb +33 -5
- data/lib/hts/bcf/info.rb +28 -6
- data/lib/hts/bcf/record.rb +21 -13
- data/lib/hts/bcf.rb +69 -31
- data/lib/hts/faidx.rb +6 -4
- data/lib/hts/ffi_ext/struct.rb +1 -1
- data/lib/hts/hts.rb +56 -0
- data/lib/hts/libhts/bgzf.rb +10 -5
- data/lib/hts/libhts/constants.rb +23 -5
- data/lib/hts/libhts/cram.rb +297 -0
- data/lib/hts/libhts/hfile.rb +19 -11
- data/lib/hts/libhts/hts.rb +9 -3
- data/lib/hts/libhts/sam.rb +2 -590
- data/lib/hts/libhts/sam_funcs.rb +596 -0
- data/lib/hts/libhts/thread_pool.rb +139 -0
- data/lib/hts/libhts/vcf.rb +32 -439
- data/lib/hts/libhts/vcf_funcs.rb +430 -0
- data/lib/hts/libhts.rb +5 -3
- data/lib/hts/tabix.rb +42 -17
- data/lib/hts/version.rb +1 -1
- data/lib/htslib.rb +5 -5
- metadata +8 -3
@@ -0,0 +1,297 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HTS
|
4
|
+
module LibHTS
|
5
|
+
|
6
|
+
=begin
|
7
|
+
|
8
|
+
attach_function \
|
9
|
+
:cram_fd_get_header,
|
10
|
+
[CramFd],
|
11
|
+
SamHdr.by_ref
|
12
|
+
|
13
|
+
attach_function \
|
14
|
+
:cram_fd_set_header,
|
15
|
+
[CramFd, SamHdr.by_ref],
|
16
|
+
:void
|
17
|
+
|
18
|
+
attach_function \
|
19
|
+
:cram_fd_get_version,
|
20
|
+
[CramFd],
|
21
|
+
:int
|
22
|
+
|
23
|
+
attach_function \
|
24
|
+
:cram_fd_set_version,
|
25
|
+
[CramFd, :int],
|
26
|
+
:void
|
27
|
+
|
28
|
+
attach_function \
|
29
|
+
:cram_major_vers,
|
30
|
+
[CramFd],
|
31
|
+
:int
|
32
|
+
|
33
|
+
attach_function \
|
34
|
+
:cram_minor_vers,
|
35
|
+
[CramFd],
|
36
|
+
:int
|
37
|
+
|
38
|
+
attach_function \
|
39
|
+
:cram_fd_get_fp,
|
40
|
+
[CramFd],
|
41
|
+
HFile.by_ref
|
42
|
+
|
43
|
+
attach_function \
|
44
|
+
:cram_fd_set_fp,
|
45
|
+
[CramFd, HFile],
|
46
|
+
:void
|
47
|
+
|
48
|
+
attach_function \
|
49
|
+
:cram_container_get_length,
|
50
|
+
[CramContainer],
|
51
|
+
:int32
|
52
|
+
|
53
|
+
attach_function \
|
54
|
+
:cram_container_set_length,
|
55
|
+
[CramContainer, :int32],
|
56
|
+
:void
|
57
|
+
|
58
|
+
attach_function \
|
59
|
+
:cram_container_get_num_blocks,
|
60
|
+
[CramContainer],
|
61
|
+
:int32
|
62
|
+
|
63
|
+
attach_function \
|
64
|
+
:cram_container_set_num_blocks,
|
65
|
+
[CramContainer, :int32],
|
66
|
+
:void
|
67
|
+
|
68
|
+
attach_function \
|
69
|
+
:cram_container_get_landmarks,
|
70
|
+
[CramContainer, :int32],
|
71
|
+
:pointer
|
72
|
+
|
73
|
+
attach_function \
|
74
|
+
:cram_container_set_landmarks,
|
75
|
+
[CramContainer, :Int32, :pointer],
|
76
|
+
:void
|
77
|
+
|
78
|
+
attach_function \
|
79
|
+
:cram_container_is_empty,
|
80
|
+
[CramFd],
|
81
|
+
:int
|
82
|
+
|
83
|
+
attach_function \
|
84
|
+
:cram_block_get_content_id,
|
85
|
+
[CramBlock],
|
86
|
+
:int32
|
87
|
+
|
88
|
+
attach_function \
|
89
|
+
:cram_block_get_comp_size,
|
90
|
+
[CramBlock],
|
91
|
+
:int32
|
92
|
+
|
93
|
+
attach_function \
|
94
|
+
:cram_block_get_uncomp_size,
|
95
|
+
[CramBlock],
|
96
|
+
:int32
|
97
|
+
|
98
|
+
attach_function \
|
99
|
+
:cram_block_get_crc32,
|
100
|
+
[CramBlock],
|
101
|
+
:int32
|
102
|
+
|
103
|
+
attach_function \
|
104
|
+
:cram_block_get_data,
|
105
|
+
[CramBlock],
|
106
|
+
:pointer
|
107
|
+
|
108
|
+
attach_function \
|
109
|
+
:cram_block_get_content_type,
|
110
|
+
[CramBlock],
|
111
|
+
CramContentType # ?
|
112
|
+
|
113
|
+
attach_function \
|
114
|
+
:cram_block_set_content_id,
|
115
|
+
[CramBlock, :int32],
|
116
|
+
:void
|
117
|
+
|
118
|
+
attach_function \
|
119
|
+
:cram_block_set_comp_size,
|
120
|
+
[CramBlock, :int32],
|
121
|
+
:void
|
122
|
+
|
123
|
+
attach_function \
|
124
|
+
:cram_block_set_uncomp_size,
|
125
|
+
[CramBlock, :int32],
|
126
|
+
:void
|
127
|
+
|
128
|
+
attach_function \
|
129
|
+
:cram_block_set_crc32,
|
130
|
+
[CramBlock, :int32],
|
131
|
+
:void
|
132
|
+
|
133
|
+
attach_function \
|
134
|
+
:cram_block_set_data,
|
135
|
+
[CramBlock, :pointer],
|
136
|
+
:void
|
137
|
+
|
138
|
+
attach_function \
|
139
|
+
:cram_block_append,
|
140
|
+
[CramBlock, :pointer, :int],
|
141
|
+
:int
|
142
|
+
|
143
|
+
attach_function \
|
144
|
+
:cram_block_update_size,
|
145
|
+
[CramBlock],
|
146
|
+
:void
|
147
|
+
|
148
|
+
attach_function \
|
149
|
+
:cram_block_get_offset,
|
150
|
+
[CramBlock],
|
151
|
+
:size_t
|
152
|
+
|
153
|
+
attach_function \
|
154
|
+
:cram_block_set_offset,
|
155
|
+
[CramBlock, :size_t],
|
156
|
+
:void
|
157
|
+
|
158
|
+
attach_function \
|
159
|
+
:cram_block_size,
|
160
|
+
[CramBlock],
|
161
|
+
:uint32
|
162
|
+
|
163
|
+
attach_function \
|
164
|
+
:cram_transcode_rg,
|
165
|
+
[CramFd, CramFd, CramContainer, :int, :pointer, :pointer],
|
166
|
+
:int
|
167
|
+
|
168
|
+
attach_function \
|
169
|
+
:cram_copy_slice,
|
170
|
+
[CramFd, CramFd, :int32],
|
171
|
+
:int
|
172
|
+
|
173
|
+
attach_function \
|
174
|
+
:cram_new_block,
|
175
|
+
[CramContentType, :int],
|
176
|
+
CramBlock
|
177
|
+
|
178
|
+
attach_function \
|
179
|
+
:cram_read_block,
|
180
|
+
[CramFd],
|
181
|
+
CramBlock
|
182
|
+
|
183
|
+
attach_function \
|
184
|
+
:cram_write_block,
|
185
|
+
[CramFd, CramBlock],
|
186
|
+
:int
|
187
|
+
|
188
|
+
attach_function \
|
189
|
+
:cram_free_block,
|
190
|
+
[CramBlock],
|
191
|
+
:void
|
192
|
+
|
193
|
+
attach_function \
|
194
|
+
:cram_uncompress_block,
|
195
|
+
[CramBlock],
|
196
|
+
:int
|
197
|
+
|
198
|
+
attach_function \
|
199
|
+
:cram_compress_block,
|
200
|
+
[CramFd, CramBlock, CramMetrics, :int, :int],
|
201
|
+
:int
|
202
|
+
|
203
|
+
attach_function \
|
204
|
+
:cram_compress_block2,
|
205
|
+
[CramFd, CramSlice, CramBlock, CramMetrics, :int, :int],
|
206
|
+
:int
|
207
|
+
|
208
|
+
attach_function \
|
209
|
+
:cram_new_container,
|
210
|
+
[:int, :int],
|
211
|
+
CramContainer
|
212
|
+
|
213
|
+
attach_function \
|
214
|
+
:cram_free_container,
|
215
|
+
[CramContainer],
|
216
|
+
:void
|
217
|
+
|
218
|
+
attach_function \
|
219
|
+
:cram_read_container,
|
220
|
+
[CramFd],
|
221
|
+
CramContainer
|
222
|
+
|
223
|
+
attach_function \
|
224
|
+
:cram_write_container,
|
225
|
+
[CramFd, CramContainer],
|
226
|
+
:int
|
227
|
+
|
228
|
+
attach_function \
|
229
|
+
:cram_store_container,
|
230
|
+
[CramFd, CramContainer, :string, :pointer],
|
231
|
+
:int
|
232
|
+
|
233
|
+
attach_function \
|
234
|
+
:cram_container_size,
|
235
|
+
[CramContainer],
|
236
|
+
:int
|
237
|
+
|
238
|
+
attach_function \
|
239
|
+
:cram_open,
|
240
|
+
[:string, :string],
|
241
|
+
CramFd
|
242
|
+
|
243
|
+
attach_function \
|
244
|
+
:cram_dopen,
|
245
|
+
[:pointer, :string, :string],
|
246
|
+
CramFd
|
247
|
+
|
248
|
+
attach_function \
|
249
|
+
:cram_close,
|
250
|
+
[CramFd],
|
251
|
+
:int
|
252
|
+
|
253
|
+
=end
|
254
|
+
|
255
|
+
attach_function \
|
256
|
+
:cram_seek,
|
257
|
+
[:pointer, :off_t, :int], :int # FIXME pointer should be CramFd
|
258
|
+
|
259
|
+
=begin
|
260
|
+
|
261
|
+
attach_function \
|
262
|
+
:cram_flush,
|
263
|
+
[CramFd],
|
264
|
+
:int
|
265
|
+
|
266
|
+
attach_function \
|
267
|
+
:cram_eof,
|
268
|
+
[CramFd],
|
269
|
+
:int
|
270
|
+
|
271
|
+
attach_function \
|
272
|
+
:cram_set_option,
|
273
|
+
[CramFd, HtsFmtOption, ...], # vararg!
|
274
|
+
:int
|
275
|
+
|
276
|
+
attach_function \
|
277
|
+
:cram_set_voption,
|
278
|
+
[CramFd, HtsFmtOption, VaList],
|
279
|
+
:int
|
280
|
+
|
281
|
+
attach_function \
|
282
|
+
:cram_set_header,
|
283
|
+
[CramFd, SamHdr.by_ref],
|
284
|
+
:int
|
285
|
+
|
286
|
+
attach_function \
|
287
|
+
:cram_check_eof = :cram_check_EOF,
|
288
|
+
[CramFd], :int
|
289
|
+
|
290
|
+
attach_function \
|
291
|
+
:cram_get_refs,
|
292
|
+
[HtsFile],
|
293
|
+
RefsT # what is RefsT
|
294
|
+
|
295
|
+
=end
|
296
|
+
end
|
297
|
+
end
|
data/lib/hts/libhts/hfile.rb
CHANGED
@@ -6,13 +6,13 @@ module HTS
|
|
6
6
|
attach_function \
|
7
7
|
:hopen,
|
8
8
|
%i[string string varargs],
|
9
|
-
|
9
|
+
HFILE.by_ref
|
10
10
|
|
11
11
|
# Associate a stream with an existing open file descriptor
|
12
12
|
attach_function \
|
13
13
|
:hdopen,
|
14
14
|
%i[int string],
|
15
|
-
|
15
|
+
HFILE.by_ref
|
16
16
|
|
17
17
|
# Report whether the file name or URL denotes remote storage
|
18
18
|
attach_function \
|
@@ -29,55 +29,63 @@ module HTS
|
|
29
29
|
# Flush (for output streams) and close the stream
|
30
30
|
attach_function \
|
31
31
|
:hclose,
|
32
|
-
[
|
32
|
+
[HFILE],
|
33
33
|
:int
|
34
34
|
|
35
35
|
# Close the stream, without flushing or propagating errors
|
36
36
|
attach_function \
|
37
37
|
:hclose_abruptly,
|
38
|
-
[
|
38
|
+
[HFILE],
|
39
39
|
:void
|
40
40
|
|
41
41
|
# Reposition the read/write stream offset
|
42
42
|
attach_function \
|
43
43
|
:hseek,
|
44
|
-
|
44
|
+
[HFILE, :off_t, :int],
|
45
45
|
:off_t
|
46
46
|
|
47
|
+
# Report the current stream offset
|
48
|
+
def self.htell(fp)
|
49
|
+
# TODO: This is a hack. Is this OK?
|
50
|
+
bg = FFI::Pointer.new(:int, fp.pointer.address + fp.offset_of(:begin)).read_int
|
51
|
+
bf = FFI::Pointer.new(:int, fp.pointer.address + fp.offset_of(:buffer)).read_int
|
52
|
+
fp[:offset] + (bg - bf)
|
53
|
+
end
|
54
|
+
|
47
55
|
# Read from the stream until the delimiter, up to a maximum length
|
48
56
|
attach_function \
|
49
57
|
:hgetdelim,
|
50
|
-
|
58
|
+
[:string, :size_t, :int, HFILE],
|
51
59
|
:ssize_t
|
52
60
|
|
53
61
|
# Read a line from the stream, up to a maximum length
|
54
62
|
attach_function \
|
55
63
|
:hgets,
|
56
|
-
|
64
|
+
[:string, :int, HFILE],
|
57
65
|
:string
|
58
66
|
|
59
67
|
# Peek at characters to be read without removing them from buffers
|
60
68
|
attach_function \
|
61
69
|
:hpeek,
|
62
|
-
|
70
|
+
[HFILE, :pointer, :size_t],
|
63
71
|
:ssize_t
|
64
72
|
|
65
73
|
# For writing streams, flush buffered output to the underlying stream
|
66
74
|
attach_function \
|
67
75
|
:hflush,
|
68
|
-
[
|
76
|
+
[HFILE],
|
69
77
|
:int
|
70
78
|
|
71
79
|
# For hfile_mem: get the internal buffer and it's size from a hfile
|
72
80
|
attach_function \
|
73
81
|
:hfile_mem_get_buffer,
|
74
|
-
|
82
|
+
[HFILE, :pointer],
|
75
83
|
:string
|
76
84
|
|
77
85
|
# For hfile_mem: get the internal buffer and it's size from a hfile.
|
78
86
|
attach_function \
|
79
87
|
:hfile_mem_steal_buffer,
|
80
|
-
|
88
|
+
[HFILE, :pointer],
|
81
89
|
:string
|
82
90
|
end
|
83
91
|
end
|
data/lib/hts/libhts/hts.rb
CHANGED
@@ -61,7 +61,7 @@ module HTS
|
|
61
61
|
# Determine format by peeking at the start of a file
|
62
62
|
attach_function \
|
63
63
|
:hts_detect_format,
|
64
|
-
[
|
64
|
+
[HFILE, HtsFormat],
|
65
65
|
:int
|
66
66
|
|
67
67
|
# Get a human-readable description of the file format
|
@@ -86,9 +86,15 @@ module HTS
|
|
86
86
|
# Open an existing stream as a SAM/BAM/CRAM/VCF/BCF/etc file
|
87
87
|
attach_function \
|
88
88
|
:hts_hopen,
|
89
|
-
|
89
|
+
[HFILE, :string, :string],
|
90
90
|
HtsFile.by_ref
|
91
91
|
|
92
|
+
# For output streams, flush any buffered data
|
93
|
+
attach_function \
|
94
|
+
:hts_flush,
|
95
|
+
[HtsFile],
|
96
|
+
:int
|
97
|
+
|
92
98
|
# Close a file handle, flushing buffered data for output streams
|
93
99
|
attach_function \
|
94
100
|
:hts_close,
|
@@ -139,7 +145,7 @@ module HTS
|
|
139
145
|
# Create extra threads to aid compress/decompression for this file
|
140
146
|
attach_function \
|
141
147
|
:hts_set_thread_pool,
|
142
|
-
[HtsFile,
|
148
|
+
[HtsFile, HtsTpool],
|
143
149
|
:int
|
144
150
|
|
145
151
|
# Adds a cache of decompressed blocks, potentially speeding up seeks.
|