htslib 0.0.1 → 0.0.5

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.
@@ -1,24 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTS
4
- module FFI
4
+ module LibHTS
5
5
  typedef :pointer, :HFILE
6
6
  typedef :int64, :hts_pos_t
7
7
  typedef :pointer, :bam_plp_auto_f
8
8
 
9
9
  # kstring
10
10
 
11
- class Kstring < ::FFI::Struct
11
+ class KString < FFI::Struct
12
12
  layout \
13
13
  :l, :size_t,
14
14
  :m, :size_t,
15
15
  :s, :string
16
16
  end
17
17
 
18
+ class KSeq < FFI::Struct
19
+ layout \
20
+ :name, KString,
21
+ :comment, KString,
22
+ :seq, KString,
23
+ :qual, KString,
24
+ :last_char, :int,
25
+ :f, :pointer # kstream_t
26
+ end
27
+
18
28
  # BGZF
19
- class BGZF < ::FFI::Struct
29
+ class BGZF < FFI::BitStruct
20
30
  layout \
21
- :piyo1, :uint, # FIXME
31
+ :_flags, :uint, # bit_fields
22
32
  :cache_size, :int,
23
33
  :block_length, :int,
24
34
  :block_clength, :int,
@@ -34,9 +44,29 @@ module HTS
34
44
  :idx_build_otf, :int,
35
45
  :gz_stream, :pointer,
36
46
  :seeked, :int64
47
+
48
+ bit_fields :_flags,
49
+ :errcode, 16,
50
+ :_reserved, 1,
51
+ :is_write, 1,
52
+ :no_eof_block, 1,
53
+ :is_be, 1,
54
+ :compress_level, 9,
55
+ :last_block_eof, 1,
56
+ :is_compressed, 1,
57
+ :is_gzip, 1
37
58
  end
38
59
 
39
60
  # hts
61
+ HtsLogLevel = enum(
62
+ :off, # All logging disabled.
63
+ :error, # Logging of errors only.
64
+ :warning, 3, # Logging of errors and warnings.
65
+ :info, # Logging of errors, warnings, and normal but significant events.
66
+ :debug, # Logging of all except the most detailed debug events.
67
+ :trace # All logging enabled.
68
+ )
69
+
40
70
  HtsFormatCategory = enum(
41
71
  :unknown_category,
42
72
  :sequence_data, # Sequence data -- SAM, BAM, CRAM, etc
@@ -95,7 +125,7 @@ module HTS
95
125
  :HTS_OPT_BLOCK_SIZE
96
126
  )
97
127
 
98
- class HtsFormat < ::FFI::Struct
128
+ class HtsFormat < FFI::Struct
99
129
  layout \
100
130
  :category, HtsFormatCategory,
101
131
  :format, HtsExactFormat,
@@ -109,7 +139,7 @@ module HTS
109
139
  :specific, :pointer
110
140
  end
111
141
 
112
- class HtsIdx < ::FFI::Struct
142
+ class HtsIdx < FFI::Struct
113
143
  layout \
114
144
  :fmt, :int,
115
145
  :min_shift, :int,
@@ -142,7 +172,7 @@ module HTS
142
172
  end
143
173
 
144
174
  # HtsFile
145
- class SamHdr < ::FFI::Struct
175
+ class SamHdr < FFI::Struct
146
176
  layout \
147
177
  :n_targets, :int32,
148
178
  :ignore_sam_err, :int32,
@@ -158,11 +188,11 @@ module HTS
158
188
 
159
189
  BamHdr = SamHdr
160
190
 
161
- class HtsFile < ::FFI::Struct
191
+ class HtsFile < FFI::BitStruct
162
192
  layout \
163
- :bitfields, :uint32, # FIXME
193
+ :_flags, :uint32, # bit_fields
164
194
  :lineno, :int64,
165
- :line, Kstring,
195
+ :line, KString,
166
196
  :fn, :string,
167
197
  :fn_aux, :string,
168
198
  :fp,
@@ -176,17 +206,25 @@ module HTS
176
206
  :idx, HtsIdx.ptr,
177
207
  :fnidx, :string,
178
208
  :bam_header, SamHdr.ptr
209
+
210
+ bit_fields :_flags,
211
+ :is_bin, 1,
212
+ :is_write, 1,
213
+ :is_be, 1,
214
+ :is_cram, 1,
215
+ :is_bgzf, 1,
216
+ :dummy, 27
179
217
  end
180
218
 
181
219
  SamFile = HtsFile
182
220
 
183
- class HtsThreadPool < ::FFI::Struct
221
+ class HtsThreadPool < FFI::Struct
184
222
  layout \
185
223
  :pool, :pointer,
186
224
  :qsize, :int
187
225
  end
188
226
 
189
- class HtsOpt < ::FFI::Struct
227
+ class HtsOpt < FFI::Struct
190
228
  layout \
191
229
  :arg, :string,
192
230
  :opt, HtsFmtOption,
@@ -198,9 +236,9 @@ module HTS
198
236
  :next, HtsOpt.ptr
199
237
  end
200
238
 
201
- class HtsItr < ::FFI::Struct
239
+ class HtsItr < FFI::BitStruct
202
240
  layout \
203
- :foo, :uint32, # FIXME
241
+ :_flags, :uint32, # bit_fields
204
242
  :tid, :int,
205
243
  :n_off, :int,
206
244
  :i, :int,
@@ -225,9 +263,17 @@ module HTS
225
263
  :m, :int,
226
264
  :a, :pointer
227
265
  )
266
+
267
+ bit_fields :_flags,
268
+ :read_rest, 1,
269
+ :finished, 1,
270
+ :is_cram, 1,
271
+ :nocoor, 1,
272
+ :multi, 1,
273
+ :dummy, 27
228
274
  end
229
275
 
230
- class Bam1Core < ::FFI::Struct
276
+ class Bam1Core < FFI::Struct
231
277
  layout \
232
278
  :pos, :hts_pos_t,
233
279
  :tid, :int32,
@@ -243,53 +289,54 @@ module HTS
243
289
  :isize, :hts_pos_t
244
290
  end
245
291
 
246
- class Bam1 < ::FFI::Struct
292
+ class Bam1 < FFI::ManagedStruct
247
293
  layout \
248
294
  :core, Bam1Core,
249
295
  :id, :uint64,
250
296
  :data, :pointer, # uint8_t
251
297
  :l_data, :int,
252
298
  :m_data, :uint32,
253
- :mempolicy, :uint32
299
+ :_mempolicy, :uint32 # bit_fields
300
+
301
+ # bit_fields :_mempolicy,
302
+ # :mempolicy, 2,
303
+ # :_reserved, 30
304
+
305
+ def self.release(ptr)
306
+ LibHTS.bam_destroy1(ptr) unless ptr.null?
307
+ end
254
308
  end
255
309
 
256
- class BamPlp < ::FFI::Struct
310
+ typedef :pointer, :bam_plp
311
+ typedef :pointer, :bam_mplp
312
+
313
+ class BamPileupCd < FFI::Union
314
+ layout \
315
+ :p, :pointer,
316
+ :i, :int64_t,
317
+ :f, :double
257
318
  end
258
319
 
259
- class BamMplp < ::FFI::Struct
320
+ class BamPileup1 < FFI::BitStruct
321
+ layout \
322
+ :b, Bam1.ptr,
323
+ :qpos, :int32_t,
324
+ :indel, :int,
325
+ :level, :int,
326
+ :_flags, :uint32_t, # bit_fields
327
+ :cd, BamPileupCd,
328
+ :cigar_ind, :int
329
+
330
+ bit_fields :_flags,
331
+ :is_del, 1,
332
+ :is_head, 1,
333
+ :is_tail, 1,
334
+ :is_refskip, 1,
335
+ :_reserved, 1,
336
+ :aux, 27
260
337
  end
261
338
 
262
- BAM_CMATCH = 0
263
- BAM_CINS = 1
264
- BAM_CDEL = 2
265
- BAM_CREF_SKIP = 3
266
- BAM_CSOFT_CLIP = 4
267
- BAM_CHARD_CLIP = 5
268
- BAM_CPAD = 6
269
- BAM_CEQUAL = 7
270
- BAM_CDIFF = 8
271
- BAM_CBACK = 9
272
-
273
- BAM_CIGAR_STR = 'MIDNSHP=XB'
274
- BAM_CIGAR_STR_PADDED = 'MIDNSHP=XB??????'
275
- BAM_CIGAR_SHIFT = 4
276
- BAM_CIGAR_MASK = 0xf
277
- BAM_CIGAR_TYPE = 0x3C1A7
278
-
279
- BAM_FPAIRED = 1
280
- BAM_FPROPER_PAIR = 2
281
- BAM_FUNMAP = 4
282
- BAM_FMUNMAP = 8
283
- BAM_FREVERSE = 16
284
- BAM_FMREVERSE = 32
285
- BAM_FREAD1 = 64
286
- BAM_FREAD2 = 128
287
- BAM_FSECONDARY = 256
288
- BAM_FQCFAIL = 512
289
- BAM_FDUP = 1024
290
- BAM_FSUPPLEMENTARY = 2048
291
-
292
- class TbxConf < ::FFI::Struct
339
+ class TbxConf < FFI::Struct
293
340
  layout \
294
341
  :preset, :int32,
295
342
  :sc, :int32,
@@ -299,7 +346,7 @@ module HTS
299
346
  :line_skip, :int32
300
347
  end
301
348
 
302
- class Tbx < ::FFI::Struct
349
+ class Tbx < FFI::Struct
303
350
  layout \
304
351
  :conf, TbxConf.ptr,
305
352
  :idx, HtsIdx.ptr,
@@ -310,7 +357,7 @@ module HTS
310
357
 
311
358
  FaiFormatOptions = enum(:FAI_NONE, :FAI_FASTA, :FAI_FASTQ)
312
359
 
313
- class Faidx < ::FFI::Struct
360
+ class Faidx < FFI::Struct
314
361
  layout :bgzf, BGZF,
315
362
  :n, :int,
316
363
  :m, :int,
@@ -319,15 +366,15 @@ module HTS
319
366
  :format, FaiFormatOptions
320
367
  end
321
368
 
322
- # vcf
369
+ # bcf
323
370
 
324
- class Variant < ::FFI::Struct
371
+ class BcfVariant < FFI::Struct
325
372
  layout \
326
373
  :type, :int,
327
374
  :n, :int
328
375
  end
329
376
 
330
- class BcfHrec < ::FFI::Struct
377
+ class BcfHrec < FFI::Struct
331
378
  layout \
332
379
  :type, :int,
333
380
  :key, :string,
@@ -337,7 +384,7 @@ module HTS
337
384
  :vals, :pointer
338
385
  end
339
386
 
340
- class BcfFmt < ::FFI::Struct
387
+ class BcfFmt < FFI::BitStruct
341
388
  layout \
342
389
  :id, :int,
343
390
  :n, :int,
@@ -345,10 +392,14 @@ module HTS
345
392
  :type, :int,
346
393
  :p, :pointer, # uint8_t
347
394
  :p_len, :uint32,
348
- :piyo, :uint32 # FIXME
395
+ :_p_off_free, :uint32 # bit_fields
396
+
397
+ bit_fields :_p_off_free,
398
+ :p_off, 31,
399
+ :p_free, 1
349
400
  end
350
401
 
351
- class BcfInfo < ::FFI::Struct
402
+ class BcfInfo < FFI::BitStruct
352
403
  layout \
353
404
  :key, :int,
354
405
  :type, :int,
@@ -359,41 +410,45 @@ module HTS
359
410
  ),
360
411
  :vptr, :pointer,
361
412
  :vptr_len, :uint32,
362
- :piyo, :uint32, # FIXME
413
+ :_vptr_off_free, :uint32, # bit_fields
363
414
  :len, :int
415
+
416
+ bit_fields :_vptr_off_free,
417
+ :vptr_off, 31,
418
+ :vptr_free, 1
364
419
  end
365
420
 
366
- class BcfIdinfo < ::FFI::Struct
421
+ class BcfIdinfo < FFI::Struct
367
422
  layout \
368
- :info, [:uint8, 3],
423
+ :info, [:uint64_t, 3],
369
424
  :hrec, [BcfHrec.ptr, 3],
370
425
  :id, :int
371
426
  end
372
427
 
373
- class BcfIdpair < ::FFI::Struct
428
+ class BcfIdpair < FFI::Struct
374
429
  layout \
375
430
  :key, :string,
376
431
  :val, BcfIdinfo.ptr
377
432
  end
378
433
 
379
- class BcfHdr < ::FFI::Struct
434
+ class BcfHdr < FFI::Struct
380
435
  layout \
381
436
  :n, [:int, 3],
382
- :id, [BcfIdpair.ptr, 3],
437
+ :id, [:pointer, 3], # BcfIdpair.ptr
383
438
  :dict, [:pointer, 3],
384
439
  :samples, :pointer,
385
440
  :hrec, :pointer,
386
441
  :nhrec, :int,
387
442
  :dirty, :int,
388
443
  :ntransl, :int,
389
- :transl, :pointer,
444
+ :transl, [:pointer, 2],
390
445
  :nsamples_ori, :int,
391
446
  :keep_samples, :pointer,
392
- :mem, Kstring,
447
+ :mem, KString,
393
448
  :m, [:int, 3]
394
449
  end
395
450
 
396
- class BcfDec < ::FFI::Struct
451
+ class BcfDec < FFI::Struct
397
452
  layout \
398
453
  :m_fmt, :int,
399
454
  :m_info, :int,
@@ -401,34 +456,47 @@ module HTS
401
456
  :m_als, :int,
402
457
  :m_allele, :int,
403
458
  :m_flt, :int,
459
+ :n_flt, :int,
404
460
  :flt, :pointer,
405
461
  :id, :string,
406
- :als, :string,
462
+ :als, :pointer, # (\\0-separated string)
407
463
  :allele, :pointer,
408
- :info, BcfInfo.ptr,
464
+ :info, :pointer, # BcfInfo.ptr,
409
465
  :fmt, BcfFmt.ptr,
410
- :var, Variant.ptr,
466
+ :var, BcfVariant.ptr,
411
467
  :n_var, :int,
412
468
  :var_type, :int,
413
469
  :shared_dirty, :int,
414
470
  :indiv_dirty, :int
415
471
  end
416
472
 
417
- class Bcf1 < ::FFI::Struct
473
+ class Bcf1 < FFI::ManagedBitStruct
418
474
  layout \
419
475
  :pos, :hts_pos_t,
420
476
  :rlen, :hts_pos_t,
421
- :rid, :int,
477
+ :rid, :int32_t,
422
478
  :qual, :float,
423
- :piyo, :int, # FIXME
424
- :fuga, :int, # FIXME
425
- :shared, Kstring,
426
- :indiv, Kstring,
479
+ :_n_info_allele, :uint32_t,
480
+ :_n_fmt_sample, :uint32_t,
481
+ :shared, KString,
482
+ :indiv, KString,
427
483
  :d, BcfDec,
428
484
  :max_unpack, :int,
429
485
  :unpacked, :int,
430
486
  :unpack_size, [:int, 3],
431
487
  :errcode, :int
488
+
489
+ bit_fields :_n_info_allele,
490
+ :n_info, 16,
491
+ :n_allele, 16
492
+
493
+ bit_fields :_n_fmt_sample,
494
+ :n_fmt, 8,
495
+ :n_sample, 24
496
+
497
+ def self.release(ptr)
498
+ LibHTS.bcf_destroy(ptr) unless ptr.null?
499
+ end
432
500
  end
433
501
  end
434
502
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTS
4
- module FFI
4
+ module LibHTS
5
5
  # Build index for a FASTA or FASTQ or bgzip-compressed FASTA or FASTQ file.
6
6
  attach_function \
7
7
  :fai_build3,
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTS
4
- module FFI
4
+ module LibHTS
5
5
  # Open the named file or URL as a stream
6
6
  attach_function \
7
7
  :hopen,
@@ -23,7 +23,7 @@ module HTS
23
23
  # Append an extension or replace an existing extension
24
24
  attach_function \
25
25
  :haddextension,
26
- [Kstring, :string, :int, :string],
26
+ [KString, :string, :int, :string],
27
27
  :string
28
28
 
29
29
  # Flush (for output streams) and close the stream
@@ -1,14 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTS
4
- module FFI
4
+ module LibHTS
5
5
  # hts_expand
6
6
  # hts_expand3
7
7
  # hts_resize
8
8
 
9
+ # hts_log.h
10
+ attach_function \
11
+ :hts_get_log_level,
12
+ [],
13
+ HtsLogLevel
14
+
9
15
  attach_function \
10
16
  :hts_lib_shutdown,
11
- [:void],
17
+ [],
12
18
  :void
13
19
 
14
20
  attach_function \
@@ -110,7 +116,7 @@ module HTS
110
116
  # Read a line (and its \n or \r\n terminator) from a file
111
117
  attach_function \
112
118
  :hts_getline,
113
- [HtsFile, :int, Kstring],
119
+ [HtsFile, :int, KString],
114
120
  :int
115
121
 
116
122
  attach_function \
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTS
4
- module FFI
4
+ module LibHTS
5
5
  # Log gamma function
6
6
  attach_function \
7
7
  :kf_lgamma,