htslib 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|