htslib 0.0.1 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,