htslib 0.0.2 → 0.0.3
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 +25 -16
- data/lib/hts/bam.rb +38 -32
- data/lib/hts/bam/cigar.rb +3 -3
- data/lib/hts/bam/flag.rb +91 -0
- data/lib/hts/bam/header.rb +2 -2
- data/lib/hts/bam/{alignment.rb → record.rb} +49 -43
- data/lib/hts/fai.rb +8 -8
- data/lib/hts/libhts.rb +141 -0
- data/lib/hts/{ffi → libhts}/bgzf.rb +1 -1
- data/lib/hts/{ffi → libhts}/constants.rb +114 -43
- data/lib/hts/{ffi → libhts}/faidx.rb +1 -1
- data/lib/hts/{ffi → libhts}/hfile.rb +1 -1
- data/lib/hts/{ffi → libhts}/hts.rb +7 -1
- data/lib/hts/{ffi → libhts}/kfunc.rb +1 -1
- data/lib/hts/{ffi → libhts}/sam.rb +25 -25
- data/lib/hts/{ffi → libhts}/tbx.rb +1 -1
- data/lib/hts/{ffi → libhts}/vcf.rb +1 -1
- data/lib/hts/vcf.rb +17 -17
- data/lib/hts/vcf/format.rb +24 -0
- data/lib/hts/vcf/header.rb +2 -2
- data/lib/hts/vcf/info.rb +24 -0
- data/lib/hts/vcf/{variant.rb → record.rb} +2 -2
- data/lib/hts/version.rb +1 -1
- data/lib/htslib.rb +16 -19
- metadata +20 -17
- data/lib/hts/ffi.rb +0 -85
@@ -1,11 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module HTS
|
4
|
-
module
|
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
17
|
[],
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module HTS
|
4
|
-
module
|
4
|
+
module LibHTS
|
5
5
|
# constants
|
6
6
|
BAM_CMATCH = 0
|
7
7
|
BAM_CINS = 1
|
@@ -14,8 +14,8 @@ module HTS
|
|
14
14
|
BAM_CDIFF = 8
|
15
15
|
BAM_CBACK = 9
|
16
16
|
|
17
|
-
BAM_CIGAR_STR =
|
18
|
-
BAM_CIGAR_STR_PADDED =
|
17
|
+
BAM_CIGAR_STR = "MIDNSHP=XB"
|
18
|
+
BAM_CIGAR_STR_PADDED = "MIDNSHP=XB??????"
|
19
19
|
BAM_CIGAR_SHIFT = 4
|
20
20
|
BAM_CIGAR_MASK = 0xf
|
21
21
|
BAM_CIGAR_TYPE = 0x3C1A7
|
@@ -441,7 +441,7 @@ module HTS
|
|
441
441
|
# Get the next read from a SAM/BAM/CRAM iterator
|
442
442
|
def self.sam_itr_next(htsfp, itr, r)
|
443
443
|
# FIXME: check if htsfp is compressed BGZF
|
444
|
-
hts_log_error(
|
444
|
+
hts_log_error("Null iterator") if itr.null?
|
445
445
|
# FIXME: check multi
|
446
446
|
hts_itr_next(htsfp[:fp][:bgzf], itr, r, htsfp)
|
447
447
|
end
|
@@ -584,52 +584,52 @@ module HTS
|
|
584
584
|
attach_function \
|
585
585
|
:bam_plp_init,
|
586
586
|
%i[bam_plp_auto_f pointer],
|
587
|
-
|
587
|
+
:bam_plp
|
588
588
|
|
589
589
|
attach_function \
|
590
590
|
:bam_plp_destroy,
|
591
|
-
[
|
591
|
+
[:bam_plp],
|
592
592
|
:void
|
593
593
|
|
594
594
|
attach_function \
|
595
595
|
:bam_plp_push,
|
596
|
-
[
|
596
|
+
[:bam_plp, Bam1],
|
597
597
|
:int
|
598
598
|
|
599
599
|
attach_function \
|
600
600
|
:bam_plp_next,
|
601
|
-
[
|
602
|
-
|
601
|
+
%i[bam_plp pointer pointer pointer],
|
602
|
+
BamPileup1.by_ref
|
603
603
|
|
604
604
|
attach_function \
|
605
605
|
:bam_plp_auto,
|
606
|
-
[
|
607
|
-
|
606
|
+
%i[bam_plp pointer pointer pointer],
|
607
|
+
BamPileup1.by_ref
|
608
608
|
|
609
609
|
attach_function \
|
610
610
|
:bam_plp64_next,
|
611
|
-
[
|
612
|
-
|
611
|
+
%i[bam_plp pointer pointer pointer],
|
612
|
+
BamPileup1.by_ref
|
613
613
|
|
614
614
|
attach_function \
|
615
615
|
:bam_plp64_auto,
|
616
|
-
[
|
617
|
-
|
616
|
+
%i[bam_plp pointer pointer pointer],
|
617
|
+
BamPileup1.by_ref
|
618
618
|
|
619
619
|
attach_function \
|
620
620
|
:bam_plp_set_maxcnt,
|
621
|
-
[
|
621
|
+
%i[bam_plp int],
|
622
622
|
:void
|
623
623
|
|
624
624
|
attach_function \
|
625
625
|
:bam_plp_reset,
|
626
|
-
[
|
626
|
+
[:bam_plp],
|
627
627
|
:void
|
628
628
|
|
629
629
|
# sets a callback to initialise any per-pileup1_t fields.
|
630
630
|
attach_function \
|
631
631
|
:bam_plp_insertion,
|
632
|
-
[
|
632
|
+
[BamPileup1, KString, :pointer],
|
633
633
|
:int
|
634
634
|
|
635
635
|
# sets a callback to initialise any per-pileup1_t fields.
|
@@ -643,36 +643,36 @@ module HTS
|
|
643
643
|
attach_function \
|
644
644
|
:bam_mplp_init,
|
645
645
|
%i[int bam_plp_auto_f pointer],
|
646
|
-
|
646
|
+
:bam_mplp
|
647
647
|
|
648
648
|
attach_function \
|
649
649
|
:bam_mplp_init_overlaps,
|
650
|
-
[
|
650
|
+
[:bam_mplp],
|
651
651
|
:int
|
652
652
|
|
653
653
|
attach_function \
|
654
654
|
:bam_mplp_destroy,
|
655
|
-
[
|
655
|
+
[:bam_mplp],
|
656
656
|
:void
|
657
657
|
|
658
658
|
attach_function \
|
659
659
|
:bam_mplp_set_maxcnt,
|
660
|
-
[
|
660
|
+
%i[bam_mplp int],
|
661
661
|
:void
|
662
662
|
|
663
663
|
attach_function \
|
664
664
|
:bam_mplp_auto,
|
665
|
-
[
|
665
|
+
%i[bam_mplp pointer pointer pointer pointer], # BamPileup1T
|
666
666
|
:int
|
667
667
|
|
668
668
|
attach_function \
|
669
669
|
:bam_mplp64_auto,
|
670
|
-
[
|
670
|
+
%i[bam_mplp pointer pointer pointer pointer], # BamPileup1T
|
671
671
|
:int
|
672
672
|
|
673
673
|
attach_function \
|
674
674
|
:bam_mplp_reset,
|
675
|
-
[
|
675
|
+
[:bam_mplp],
|
676
676
|
:void
|
677
677
|
|
678
678
|
# bam_mplp_constructor
|
data/lib/hts/vcf.rb
CHANGED
@@ -3,40 +3,40 @@
|
|
3
3
|
# Based on hts-python
|
4
4
|
# https://github.com/quinlan-lab/hts-python
|
5
5
|
|
6
|
-
require_relative
|
7
|
-
require_relative
|
6
|
+
require_relative "vcf/header"
|
7
|
+
require_relative "vcf/record"
|
8
8
|
|
9
9
|
module HTS
|
10
10
|
class VCF
|
11
11
|
include Enumerable
|
12
|
-
attr_reader :file_path, :mode, :
|
12
|
+
attr_reader :file_path, :mode, :htf, :header
|
13
13
|
|
14
|
-
def initialize(file_path, mode =
|
15
|
-
|
16
|
-
|
14
|
+
def initialize(file_path, mode = "r")
|
15
|
+
file_path = File.expand_path(file_path)
|
16
|
+
raise("No such VCF/BCF file - #{file_path}") unless File.exist?(file_path)
|
17
17
|
|
18
|
-
@
|
19
|
-
@
|
18
|
+
@file_path = file_path
|
19
|
+
@mode = mode
|
20
|
+
@htf = LibHTS.hts_open(file_path, mode)
|
21
|
+
@header = VCF::Header.new(LibHTS.bcf_hdr_read(htf))
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
@c = FFI.bcf_init
|
23
|
+
# FIXME: should be defined here?
|
24
|
+
@c = LibHTS.bcf_init
|
24
25
|
end
|
25
26
|
|
26
27
|
# def inspect; end
|
27
28
|
|
28
29
|
def each(&block)
|
29
|
-
|
30
|
+
while LibHTS.bcf_read(htf, header.h, @c) != -1
|
31
|
+
record = Record.new(@c, self)
|
32
|
+
block.call(record)
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
36
|
def seq(tid); end
|
33
37
|
|
34
38
|
def n_samples
|
35
|
-
|
39
|
+
LibHTS.bcf_hdr_nsamples(header.h)
|
36
40
|
end
|
37
41
|
end
|
38
|
-
|
39
|
-
class Format
|
40
|
-
def initialize; end
|
41
|
-
end
|
42
42
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# https://github.com/brentp/hts-nim/blob/master/src/hts/vcf.nim
|
4
|
+
# This is a port from Nim.
|
5
|
+
# TODO: Make it more like Ruby.
|
6
|
+
|
7
|
+
module HTS
|
8
|
+
class VCF
|
9
|
+
class Format
|
10
|
+
def initialize; end
|
11
|
+
|
12
|
+
def delete; end
|
13
|
+
|
14
|
+
def get; end
|
15
|
+
|
16
|
+
def set; end
|
17
|
+
|
18
|
+
# def fields # iterator
|
19
|
+
# end
|
20
|
+
|
21
|
+
def genotypes; end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/hts/vcf/header.rb
CHANGED
@@ -12,12 +12,12 @@ module HTS
|
|
12
12
|
# FIXME: better name?
|
13
13
|
def seqs
|
14
14
|
Array.new(@h[:n_targets]) do |i|
|
15
|
-
|
15
|
+
LibHTS.sam_hdr_tid2name(@h, i)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
def text
|
20
|
-
|
20
|
+
LibHTS.sam_hdr_str(@h)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
data/lib/hts/vcf/info.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# https://github.com/brentp/hts-nim/blob/master/src/hts/vcf.nim
|
4
|
+
# This is a port from Nim.
|
5
|
+
# TODO: Make it more like Ruby.
|
6
|
+
|
7
|
+
module HTS
|
8
|
+
class VCF
|
9
|
+
class Info
|
10
|
+
def initialize; end
|
11
|
+
|
12
|
+
def has_flag?; end
|
13
|
+
|
14
|
+
def get; end
|
15
|
+
|
16
|
+
def set; end
|
17
|
+
|
18
|
+
def delete; end
|
19
|
+
|
20
|
+
# def fields # iterator
|
21
|
+
# end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/hts/version.rb
CHANGED
data/lib/htslib.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "ffi"
|
4
4
|
|
5
|
-
require
|
5
|
+
require "hts/version"
|
6
6
|
|
7
7
|
module HTS
|
8
8
|
class Error < StandardError; end
|
9
9
|
|
10
10
|
class << self
|
11
|
-
attr_accessor :
|
11
|
+
attr_accessor :lib_path
|
12
12
|
|
13
13
|
def search_htslib(name = nil)
|
14
|
-
name ||= "libhts.#{
|
15
|
-
lib_path = if ENV[
|
16
|
-
File.expand_path(name, ENV[
|
14
|
+
name ||= "libhts.#{FFI::Platform::LIBSUFFIX}"
|
15
|
+
lib_path = if ENV["HTSLIBDIR"]
|
16
|
+
File.expand_path(name, ENV["HTSLIBDIR"])
|
17
17
|
else
|
18
18
|
File.expand_path("../vendor/#{name}", __dir__)
|
19
19
|
end
|
20
20
|
return lib_path if File.exist?(lib_path)
|
21
21
|
|
22
22
|
begin
|
23
|
-
require
|
24
|
-
lib_dir = PKGConfig.variable(
|
23
|
+
require "pkg-config"
|
24
|
+
lib_dir = PKGConfig.variable("htslib", "libdir")
|
25
25
|
lib_path = File.expand_path(name, lib_dir)
|
26
26
|
rescue PackageConfig::NotFoundError
|
27
27
|
warn "htslib.pc was not found in the pkg-config search path."
|
@@ -32,17 +32,14 @@ module HTS
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
self.
|
35
|
+
self.lib_path = search_htslib
|
36
36
|
|
37
|
-
# You can change the path of the shared library with `HTS.
|
38
|
-
# before calling the
|
39
|
-
autoload :
|
37
|
+
# You can change the path of the shared library with `HTS.lib_path=`
|
38
|
+
# before calling the LibHTS module.
|
39
|
+
autoload :LibHTS, "hts/libhts"
|
40
40
|
end
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
require_relative
|
46
|
-
require_relative 'hts/fai'
|
47
|
-
require_relative 'hts/tbx'
|
48
|
-
require_relative 'hts/vcf'
|
42
|
+
require_relative "hts/bam"
|
43
|
+
require_relative "hts/fai"
|
44
|
+
require_relative "hts/tbx"
|
45
|
+
require_relative "hts/vcf"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: htslib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: irb
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: minitest
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -118,24 +118,27 @@ files:
|
|
118
118
|
- LICENSE.txt
|
119
119
|
- README.md
|
120
120
|
- lib/hts/bam.rb
|
121
|
-
- lib/hts/bam/alignment.rb
|
122
121
|
- lib/hts/bam/cigar.rb
|
122
|
+
- lib/hts/bam/flag.rb
|
123
123
|
- lib/hts/bam/header.rb
|
124
|
+
- lib/hts/bam/record.rb
|
124
125
|
- lib/hts/fai.rb
|
125
|
-
- lib/hts/
|
126
|
-
- lib/hts/
|
127
|
-
- lib/hts/
|
128
|
-
- lib/hts/
|
129
|
-
- lib/hts/
|
130
|
-
- lib/hts/
|
131
|
-
- lib/hts/
|
132
|
-
- lib/hts/
|
133
|
-
- lib/hts/
|
134
|
-
- lib/hts/
|
126
|
+
- lib/hts/libhts.rb
|
127
|
+
- lib/hts/libhts/bgzf.rb
|
128
|
+
- lib/hts/libhts/constants.rb
|
129
|
+
- lib/hts/libhts/faidx.rb
|
130
|
+
- lib/hts/libhts/hfile.rb
|
131
|
+
- lib/hts/libhts/hts.rb
|
132
|
+
- lib/hts/libhts/kfunc.rb
|
133
|
+
- lib/hts/libhts/sam.rb
|
134
|
+
- lib/hts/libhts/tbx.rb
|
135
|
+
- lib/hts/libhts/vcf.rb
|
135
136
|
- lib/hts/tbx.rb
|
136
137
|
- lib/hts/vcf.rb
|
138
|
+
- lib/hts/vcf/format.rb
|
137
139
|
- lib/hts/vcf/header.rb
|
138
|
-
- lib/hts/vcf/
|
140
|
+
- lib/hts/vcf/info.rb
|
141
|
+
- lib/hts/vcf/record.rb
|
139
142
|
- lib/hts/version.rb
|
140
143
|
- lib/htslib.rb
|
141
144
|
homepage: https://github.com/kojix2/ruby-htslib
|