bio-samtools 2.3.2 → 2.3.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/.travis.yml +1 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/bam_consensus.rb +1 -0
- data/bio-samtools.gemspec +5 -5
- data/ext/Rakefile +24 -30
- data/ext/mkrf_conf.rb +18 -22
- data/lib/bio/db/sam.rb +15 -10
- data/lib/bio/db/sam/external/VERSION +1 -1
- data/lib/bio/db/vcf.rb +7 -0
- data/test/test_sam.rb +92 -98
- data/test/test_vcf.rb +13 -0
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 775737792e8669adba78db39510bc7bfa13bb086
|
|
4
|
+
data.tar.gz: 3741d4320545bb862be52f603e7ac6018eb1601d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 11f21eab205187229b295bae05bc108a1ccec626b93f277e4e8c26f64dfd1a963c1ec741efef9476ab5717647a04e44079ffaeb14f99ae7561ceaca9e41060b5
|
|
7
|
+
data.tar.gz: d593004ccb8e0dbf6f1f8f37372745e6caffba5e6b27f1f8b97973e180acd4ef25245629dffb438a2888888b49763d364f3f4c9330c793e011820c3f196c10a2
|
data/.travis.yml
CHANGED
data/Rakefile
CHANGED
|
@@ -22,7 +22,7 @@ Jeweler::Tasks.new do |gem|
|
|
|
22
22
|
|
|
23
23
|
This project was born from the need to add support of BAM files to
|
|
24
24
|
the gee_fu genome browser (http://github.com/danmaclean/gee_fu).}
|
|
25
|
-
gem.email = "
|
|
25
|
+
gem.email = "Ricardo.Ramirez-Gonzalez@tgac.ac.uk"
|
|
26
26
|
gem.authors = ["Ricardo Ramirez-Gonzalez","Dan MacLean","Raoul J.P. Bonnal"]
|
|
27
27
|
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
|
28
28
|
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.3.
|
|
1
|
+
2.3.4
|
data/bin/bam_consensus.rb
CHANGED
data/bio-samtools.gemspec
CHANGED
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: bio-samtools 2.3.
|
|
5
|
+
# stub: bio-samtools 2.3.3 ruby lib
|
|
6
6
|
# stub: ext/mkrf_conf.rb
|
|
7
7
|
|
|
8
8
|
Gem::Specification.new do |s|
|
|
9
9
|
s.name = "bio-samtools"
|
|
10
|
-
s.version = "2.3.
|
|
10
|
+
s.version = "2.3.3"
|
|
11
11
|
|
|
12
12
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
13
13
|
s.require_paths = ["lib"]
|
|
14
14
|
s.authors = ["Ricardo Ramirez-Gonzalez", "Dan MacLean", "Raoul J.P. Bonnal"]
|
|
15
|
-
s.date = "2015-
|
|
15
|
+
s.date = "2015-06-19"
|
|
16
16
|
s.description = "Binder of samtools for ruby, on the top of FFI. \n\n This project was born from the need to add support of BAM files to \n the gee_fu genome browser (http://github.com/danmaclean/gee_fu)."
|
|
17
|
-
s.email = "
|
|
17
|
+
s.email = "Ricardo.Ramirez-Gonzalez@tgac.ac.uk"
|
|
18
18
|
s.executables = ["bam_consensus.rb"]
|
|
19
19
|
s.extensions = ["ext/mkrf_conf.rb"]
|
|
20
20
|
s.extra_rdoc_files = [
|
|
@@ -145,7 +145,7 @@ Gem::Specification.new do |s|
|
|
|
145
145
|
]
|
|
146
146
|
s.homepage = "http://github.com/helios/bioruby-samtools"
|
|
147
147
|
s.licenses = ["MIT"]
|
|
148
|
-
s.rubygems_version = "2.
|
|
148
|
+
s.rubygems_version = "2.4.6"
|
|
149
149
|
s.summary = "Binder of samtools for ruby, on the top of FFI."
|
|
150
150
|
|
|
151
151
|
if s.respond_to? :specification_version then
|
data/ext/Rakefile
CHANGED
|
@@ -4,53 +4,47 @@ require 'fileutils'
|
|
|
4
4
|
include FileUtils::Verbose
|
|
5
5
|
require 'rake/clean'
|
|
6
6
|
|
|
7
|
-
URL = "http://sourceforge.net/projects/samtools/files/samtools/
|
|
7
|
+
URL = "http://sourceforge.net/projects/samtools/files/samtools/1.2/samtools-1.2.tar.bz2/download"
|
|
8
|
+
URL2 = "https://github.com/samtools/bcftools/releases/download/1.2/bcftools-1.2.tar.bz2"
|
|
8
9
|
|
|
9
10
|
task :download do
|
|
10
11
|
open(URL) do |uri|
|
|
11
|
-
File.open("samtools-
|
|
12
|
+
File.open("samtools-1.2.tar.bz2",'wb') do |fout|
|
|
13
|
+
fout.write(uri.read)
|
|
14
|
+
end #fout
|
|
15
|
+
end #uri
|
|
16
|
+
|
|
17
|
+
open(URL2) do |uri|
|
|
18
|
+
File.open("bcftools-1.2.tar.bz2",'wb') do |fout|
|
|
12
19
|
fout.write(uri.read)
|
|
13
20
|
end #fout
|
|
14
21
|
end #uri
|
|
15
22
|
end
|
|
16
23
|
|
|
17
24
|
task :compile do
|
|
18
|
-
sh "tar xvfj samtools-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
case Config::CONFIG['host_os']
|
|
24
|
-
when /linux/
|
|
25
|
-
#sh "CFLAGS='-g -Wall -O2 -fPIC' make -e"
|
|
26
|
-
sh "make"
|
|
27
|
-
cp("libbam.a","/Users/ramirezr/Documents/public_code/helios/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
|
28
|
-
#sh "CFLAGS='-g -Wall -O2 -fPIC' make -e libbam.so.1-local"
|
|
29
|
-
sh "make libbam.so.1-local"
|
|
30
|
-
cp("samtools", "/Users/ramirezr/Documents/public_code/helios/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
|
31
|
-
cp("libbam.so.1","/Users/ramirezr/Documents/public_code/helios/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
|
32
|
-
when /darwin/
|
|
33
|
-
sh "make"
|
|
34
|
-
cp("libbam.a","/Users/ramirezr/Documents/public_code/helios/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
|
35
|
-
sh "make libbam.1.dylib-local"
|
|
36
|
-
cp("libbam.1.dylib","/Users/ramirezr/Documents/public_code/helios/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
|
37
|
-
sh "make"
|
|
38
|
-
cp('samtools', "/Users/ramirezr/Documents/public_code/helios/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
|
39
|
-
when /mswin|mingw/ then raise NotImplementedError, "BWA library is not available for Windows platform"
|
|
40
|
-
end #case
|
|
25
|
+
sh "tar xvfj samtools-1.2.tar.bz2"
|
|
26
|
+
sh "tar xvfj bcftools-1.2.tar.bz2"
|
|
27
|
+
cd("samtools-1.2") do
|
|
28
|
+
sh "make"
|
|
29
|
+
cp("samtools", "/Users/ramirezr/Documents/public_code/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
|
41
30
|
end #cd
|
|
42
|
-
cd("
|
|
31
|
+
cd("bcftools-1.2") do
|
|
43
32
|
sh "make"
|
|
44
|
-
cp('bcftools', "/Users/ramirezr/Documents/public_code/
|
|
33
|
+
cp('bcftools', "/Users/ramirezr/Documents/public_code/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
|
45
34
|
end
|
|
46
35
|
end
|
|
47
36
|
|
|
48
37
|
task :clean do
|
|
49
|
-
cd("samtools-
|
|
38
|
+
cd("samtools-1.2") do
|
|
39
|
+
sh "make clean"
|
|
40
|
+
end
|
|
41
|
+
cd("bcftools-1.2") do
|
|
50
42
|
sh "make clean"
|
|
51
43
|
end
|
|
52
|
-
rm("samtools-
|
|
53
|
-
rm_rf("samtools-
|
|
44
|
+
rm("samtools-1.2.tar.bz2")
|
|
45
|
+
rm_rf("samtools-1.2")
|
|
46
|
+
rm("bcftools-1.2.tar.bz2")
|
|
47
|
+
rm_rf("bcftools-1.2")
|
|
54
48
|
end
|
|
55
49
|
|
|
56
50
|
task :default => [:download, :compile, :clean]
|
data/ext/mkrf_conf.rb
CHANGED
|
@@ -14,6 +14,8 @@ version.close
|
|
|
14
14
|
|
|
15
15
|
url = "http://sourceforge.net/projects/samtools/files/samtools/#{Version}/samtools-#{Version}.tar.bz2/download"
|
|
16
16
|
SamToolsFile = "samtools-#{Version}.tar.bz2"
|
|
17
|
+
url2 = "https://github.com/samtools/bcftools/releases/download/#{Version}/bcftools-#{Version}.tar.bz2"
|
|
18
|
+
VcfToolsFile = "bcftools-#{Version}.tar.bz2"
|
|
17
19
|
|
|
18
20
|
File.open(File.join(path,"Rakefile"),"w") do |rakefile|
|
|
19
21
|
rakefile.write <<-RAKE
|
|
@@ -24,6 +26,7 @@ include FileUtils::Verbose
|
|
|
24
26
|
require 'rake/clean'
|
|
25
27
|
|
|
26
28
|
URL = "#{url}"
|
|
29
|
+
URL2 = "#{url2}"
|
|
27
30
|
|
|
28
31
|
task :download do
|
|
29
32
|
open(URL) do |uri|
|
|
@@ -31,34 +34,22 @@ task :download do
|
|
|
31
34
|
fout.write(uri.read)
|
|
32
35
|
end #fout
|
|
33
36
|
end #uri
|
|
37
|
+
|
|
38
|
+
open(URL2) do |uri|
|
|
39
|
+
File.open("#{VcfToolsFile}",'wb') do |fout|
|
|
40
|
+
fout.write(uri.read)
|
|
41
|
+
end #fout
|
|
42
|
+
end #uri
|
|
34
43
|
end
|
|
35
44
|
|
|
36
45
|
task :compile do
|
|
37
46
|
sh "tar xvfj #{SamToolsFile}"
|
|
47
|
+
sh "tar xvfj #{VcfToolsFile}"
|
|
38
48
|
cd("samtools-#{Version}") do
|
|
39
|
-
sh "
|
|
40
|
-
#
|
|
41
|
-
sh "patch < ../Makefile-suse.patch"
|
|
42
|
-
case Config::CONFIG['host_os']
|
|
43
|
-
when /linux/
|
|
44
|
-
#sh "CFLAGS='-g -Wall -O2 -fPIC' make -e"
|
|
45
|
-
sh "make"
|
|
46
|
-
cp("libbam.a","#{path_external}")
|
|
47
|
-
#sh "CFLAGS='-g -Wall -O2 -fPIC' make -e libbam.so.1-local"
|
|
48
|
-
sh "make libbam.so.1-local"
|
|
49
|
-
cp("samtools", "#{path_external}")
|
|
50
|
-
cp("libbam.so.1","#{path_external}")
|
|
51
|
-
when /darwin/
|
|
52
|
-
sh "make"
|
|
53
|
-
cp("libbam.a","#{path_external}")
|
|
54
|
-
sh "make libbam.1.dylib-local"
|
|
55
|
-
cp("libbam.1.dylib","#{path_external}")
|
|
56
|
-
sh "make"
|
|
57
|
-
cp('samtools', "#{path_external}")
|
|
58
|
-
when /mswin|mingw/ then raise NotImplementedError, "BWA library is not available for Windows platform"
|
|
59
|
-
end #case
|
|
49
|
+
sh "make"
|
|
50
|
+
cp("samtools", "#{path_external}")
|
|
60
51
|
end #cd
|
|
61
|
-
cd("
|
|
52
|
+
cd("bcftools-#{Version}") do
|
|
62
53
|
sh "make"
|
|
63
54
|
cp('bcftools', "#{path_external}")
|
|
64
55
|
end
|
|
@@ -68,8 +59,13 @@ task :clean do
|
|
|
68
59
|
cd("samtools-#{Version}") do
|
|
69
60
|
sh "make clean"
|
|
70
61
|
end
|
|
62
|
+
cd("bcftools-#{Version}") do
|
|
63
|
+
sh "make clean"
|
|
64
|
+
end
|
|
71
65
|
rm("#{SamToolsFile}")
|
|
72
66
|
rm_rf("samtools-#{Version}")
|
|
67
|
+
rm("#{VcfToolsFile}")
|
|
68
|
+
rm_rf("bcftools-#{Version}")
|
|
73
69
|
end
|
|
74
70
|
|
|
75
71
|
task :default => [:download, :compile, :clean]
|
data/lib/bio/db/sam.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'open3'
|
|
1
2
|
module Bio
|
|
2
3
|
class DB
|
|
3
4
|
class Sam
|
|
@@ -24,7 +25,7 @@ module Bio
|
|
|
24
25
|
|
|
25
26
|
@last_command = nil
|
|
26
27
|
raise ArgumentError, "Need Fasta and at least one BAM or SAM" if not @fasta or not @bam
|
|
27
|
-
raise IOError, "File not found #{
|
|
28
|
+
raise IOError, "File not found #{files}" if not files_ok?
|
|
28
29
|
@bams = [@bams] if @bams.instance_of? String
|
|
29
30
|
|
|
30
31
|
end
|
|
@@ -79,7 +80,7 @@ module Bio
|
|
|
79
80
|
end
|
|
80
81
|
command = String.new
|
|
81
82
|
command = form_opt_string(@samtools, 'view', opts, [:b, :h, :H, :S, :u, '1', :x, :X, :c, :B])
|
|
82
|
-
|
|
83
|
+
commad = command + " '#{region}'" if region.size > 0
|
|
83
84
|
@last_command = command
|
|
84
85
|
type = (opts[:u] or opts[:b]) ? :binary : :text
|
|
85
86
|
klass = (type == :binary) ? String : Bio::DB::Alignment
|
|
@@ -319,9 +320,11 @@ module Bio
|
|
|
319
320
|
end
|
|
320
321
|
|
|
321
322
|
#Index sorted alignment for fast random access. Index file <aln.bam>.bai will be created of no out_index is provided.
|
|
322
|
-
#* out_index - [STRING] name of index
|
|
323
|
+
#* out_index - [STRING] name of index Depreciated. It will fail now as
|
|
324
|
+
#* samtools doesn't support it anymore.
|
|
323
325
|
def index(opts={})
|
|
324
|
-
|
|
326
|
+
raise Exception.new "Index can't recieve parameters" if opts.size > 0
|
|
327
|
+
command = "#{@samtools} index #{@bam}"
|
|
325
328
|
puts stderr.read if $VERBOSE
|
|
326
329
|
@last_command = command
|
|
327
330
|
system(command)
|
|
@@ -330,13 +333,14 @@ module Bio
|
|
|
330
333
|
#Fill in mate coordinates, ISIZE and mate related flags from a name-sorted alignment
|
|
331
334
|
#* out_bam name of outfile
|
|
332
335
|
#* r - remove unmapped reads and secondary alignments
|
|
336
|
+
#* p - Disable FR proper pair check.
|
|
337
|
+
#* o - Add template cigar ct tag.
|
|
338
|
+
#* O FORMAT Write the final output as sam, bam, or cram.
|
|
333
339
|
def fix_mates(opts={})
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
end
|
|
339
|
-
command = "#{@samtools} fixmate #{remove_reads} #{@bam} #{opts[:out_bam]}"
|
|
340
|
+
out_bam = opts[:out_bam]
|
|
341
|
+
opts.delete(:out_bam)
|
|
342
|
+
command = form_opt_string(@samtools, "fixmate", opts, [:r,:p,:c])
|
|
343
|
+
command << " #{out_bam}"
|
|
340
344
|
puts stderr.read if $VERBOSE
|
|
341
345
|
@last_command = command
|
|
342
346
|
system(command)
|
|
@@ -478,6 +482,7 @@ module Bio
|
|
|
478
482
|
#* S - treat PE reads as SE in rmdup (force -s)
|
|
479
483
|
#* out - [FILE] output bam
|
|
480
484
|
def remove_duplicates(opts={})
|
|
485
|
+
raise Exception.new(), "Remove duplicates is unsuported in samtools 1.2. This function will come back onece rmdup is available again."
|
|
481
486
|
out = opts[:out]
|
|
482
487
|
opts.delete(:out)
|
|
483
488
|
command = "#{form_opt_string(@samtools, "rmdup", opts, [:s, :S])} #{out} #{@bam}"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
1.2
|
data/lib/bio/db/vcf.rb
CHANGED
|
@@ -24,6 +24,13 @@ module Bio
|
|
|
24
24
|
Integer.new(x) rescue x
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
def method_missing(method, *args)
|
|
28
|
+
method_name = method.to_s
|
|
29
|
+
return true if @info.has_key?(method_name) and @info[method_name] == nil
|
|
30
|
+
return @info[method_name] if @info[method_name]
|
|
31
|
+
return false
|
|
32
|
+
end
|
|
33
|
+
|
|
27
34
|
#returns vcf format line
|
|
28
35
|
def to_s
|
|
29
36
|
if !@chrom.nil?
|
data/test/test_sam.rb
CHANGED
|
@@ -10,12 +10,12 @@ gem 'test-unit'
|
|
|
10
10
|
|
|
11
11
|
class TestBioDbSam < Test::Unit::TestCase
|
|
12
12
|
# include RubyProf::Test
|
|
13
|
-
|
|
14
|
-
class << self
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
class << self
|
|
15
|
+
|
|
16
|
+
def shutdown
|
|
17
|
+
#File.delete("test/samples/small/different_index.bam.bai")
|
|
18
|
+
#File.delete("test/samples/small/dupes_rmdup.bam")
|
|
19
19
|
File.delete("test/samples/small/mates_fixed.bam")
|
|
20
20
|
File.delete("test/samples/small/reheader.bam")
|
|
21
21
|
File.delete("test/samples/small/test_chr.fasta.fai")
|
|
@@ -34,27 +34,15 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
34
34
|
@testReference = @test_folder + "/test_chr.fasta"
|
|
35
35
|
@bed_file = @test_folder + "/testu.bed"
|
|
36
36
|
@sam = Bio::DB::Sam.new(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
:fasta => @testReference,
|
|
38
|
+
:bam => @testBAMFile
|
|
39
|
+
)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
def test_new
|
|
45
45
|
assert_kind_of(Bio::DB::Sam, @sam)
|
|
46
|
-
|
|
47
|
-
assert_raise(IOError) do
|
|
48
|
-
Bio::DB::Sam.new(
|
|
49
|
-
:fasta => @testReference,
|
|
50
|
-
:bam => @testBAMFile + "ads"
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
end
|
|
54
|
-
assert_raise(ArgumentError) do
|
|
55
|
-
Bio::DB::Sam.new()
|
|
56
|
-
end
|
|
57
|
-
|
|
58
46
|
end
|
|
59
47
|
|
|
60
48
|
def test_index
|
|
@@ -64,7 +52,7 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
64
52
|
puts "bam index exists....deleting..."
|
|
65
53
|
File.delete(test_bai_file)
|
|
66
54
|
end
|
|
67
|
-
|
|
55
|
+
|
|
68
56
|
#No bam file
|
|
69
57
|
assert_equal(@sam.indexed?, false)
|
|
70
58
|
#index the bam file
|
|
@@ -77,11 +65,22 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
77
65
|
assert(File.size(test_bai_file) > 0, "From test_index: .bai file is empty")
|
|
78
66
|
#as above, but give the output a different name
|
|
79
67
|
test_bai_file = @test_folder+"/different_index.bam.bai"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
68
|
+
|
|
69
|
+
raised = false
|
|
70
|
+
begin
|
|
71
|
+
@sam.index(:out_index=> test_bai_file)
|
|
72
|
+
rescue Exception => e
|
|
73
|
+
raised = true
|
|
83
74
|
end
|
|
84
|
-
|
|
75
|
+
assert_equal(raised, true)
|
|
76
|
+
|
|
77
|
+
#puts "Writing: #{test_bai_file}"
|
|
78
|
+
#File.open(test_bai_file, "r") do |f|
|
|
79
|
+
# puts "Read"
|
|
80
|
+
# puts f.read
|
|
81
|
+
#end
|
|
82
|
+
|
|
83
|
+
#assert(File.size(test_bai_file) > 0, "From test_index: .bai file is empty")
|
|
85
84
|
end
|
|
86
85
|
|
|
87
86
|
def test_view
|
|
@@ -95,9 +94,9 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
95
94
|
|
|
96
95
|
def test_fetch
|
|
97
96
|
#puts @sam.inspect
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
97
|
+
i = 0
|
|
98
|
+
@sam.index
|
|
99
|
+
@sam.fetch("chr_1", 10,1000) do |sam|
|
|
101
100
|
#test that all the objects are Bio::DB::Alignment objects
|
|
102
101
|
assert_equal(sam.class, Bio::DB::Alignment)
|
|
103
102
|
assert_equal(sam.rname, "chr_1")
|
|
@@ -110,18 +109,8 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
110
109
|
|
|
111
110
|
def test_fetch_with_function
|
|
112
111
|
#pass the assert to method
|
|
113
|
-
|
|
114
|
-
block = Proc.new do |a|
|
|
115
|
-
assert_equal(a.class, Bio::DB::Alignment)
|
|
116
|
-
count += 1
|
|
117
|
-
end
|
|
118
|
-
|
|
112
|
+
block = Proc.new {|a| assert_equal(a.class, Bio::DB::Alignment)}
|
|
119
113
|
@sam.fetch_with_function("chr_1", 10, 1000, &block)
|
|
120
|
-
assert_equal(count, 9)
|
|
121
|
-
|
|
122
|
-
count = 0
|
|
123
|
-
@sam.fetch_with_function("chr_1", 82, 140, &block)
|
|
124
|
-
assert_equal(count, 4)
|
|
125
114
|
end
|
|
126
115
|
|
|
127
116
|
def test_chromosome_coverage
|
|
@@ -153,7 +142,7 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
153
142
|
#test that the file is not empty
|
|
154
143
|
assert(File.size(test_fai_file) > 0, "From test_faidx: .fai file is empty")
|
|
155
144
|
end
|
|
156
|
-
|
|
145
|
+
|
|
157
146
|
def test_index_stats
|
|
158
147
|
@sam.index_stats.each_pair do |seq, stat|
|
|
159
148
|
assert_send([['chr_1' , '*'], :member?, seq])
|
|
@@ -175,41 +164,41 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
175
164
|
@sam.sort(:prefix=>@test_folder + "/test_sorted")
|
|
176
165
|
#create a new Bio::DB::Sam from the sorted bam
|
|
177
166
|
@sortsam = Bio::DB::Sam.new(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
167
|
+
:fasta => @testReference,
|
|
168
|
+
:bam => sortedsam
|
|
169
|
+
)
|
|
181
170
|
pos = 0
|
|
182
171
|
#iterate over the sorted sam file and make sure that the it's sorted by checking the order of the start positions for each read.
|
|
183
172
|
@sortsam.view()do |sam|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
end
|
|
173
|
+
assert(sam.pos > pos, "Not sorted by position")
|
|
174
|
+
pos = sam.pos
|
|
187
175
|
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def test_reheader
|
|
179
|
+
sam_header = @test_folder + "/map_for_reheader.sam"
|
|
180
|
+
outfile = @test_folder + "/reheader.bam"
|
|
188
181
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
outfile = @test_folder + "/reheader.bam"
|
|
192
|
-
|
|
193
|
-
@sam.reheader(sam_header, :out=>outfile)
|
|
194
|
-
reheader_bam = Bio::DB::Sam.new(:fasta => @testReference, :bam => outfile)
|
|
182
|
+
@sam.reheader(sam_header, :out=>outfile)
|
|
183
|
+
reheader_bam = Bio::DB::Sam.new(:fasta => @testReference, :bam => outfile)
|
|
195
184
|
#check that the reference is 'chr_2'
|
|
196
185
|
reheader_bam.view()do |sam|
|
|
197
|
-
|
|
198
|
-
end
|
|
186
|
+
assert_equal(sam.rname, "chr_2")
|
|
199
187
|
end
|
|
188
|
+
end
|
|
200
189
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
end
|
|
190
|
+
def test_calmd
|
|
191
|
+
no_md_sam = @test_folder + "/no_md.sam"
|
|
192
|
+
md = Bio::DB::Sam.new(:fasta => @testReference, :bam => no_md_sam)
|
|
193
|
+
block = Proc.new {|a| assert(a.tags.has_key?('MD'), "From test_calmd: couldn't find the MD tag")}
|
|
194
|
+
md.calmd(:S=>true, &block)
|
|
208
195
|
|
|
209
|
-
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def test_mpileup
|
|
210
199
|
#create an mpileup
|
|
211
200
|
# @sam.index
|
|
212
|
-
|
|
201
|
+
@sam.mpileup(:g => false) do |pileup|
|
|
213
202
|
#test that all the objects are Bio::DB::Pileup objects
|
|
214
203
|
assert_kind_of(Bio::DB::Pileup, pileup)
|
|
215
204
|
#test that the reference name is 'chr_1' for all objects
|
|
@@ -245,13 +234,13 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
245
234
|
#puts pileup
|
|
246
235
|
assert_equal(pileup.ref_name, 'chr_1')
|
|
247
236
|
end
|
|
248
|
-
|
|
237
|
+
|
|
249
238
|
region = @sam.cached_regions[reg.to_s]
|
|
250
239
|
#puts "cahced_region: #{region.inspect}"
|
|
251
|
-
puts "AVG COV: #{region.average_coverage}"
|
|
252
|
-
puts "Reference: #{region.reference}"
|
|
253
|
-
puts "Consensus: #{region.consensus}"
|
|
254
|
-
puts "called: #{region.called}"
|
|
240
|
+
#puts "AVG COV: #{region.average_coverage}"
|
|
241
|
+
#puts "Reference: #{region.reference}"
|
|
242
|
+
#puts "Consensus: #{region.consensus}"
|
|
243
|
+
#puts "called: #{region.called}"
|
|
255
244
|
#, :snps, :reference, :base_ratios, :consensus, :coverages
|
|
256
245
|
snps_tot = Bio::Sequence.snps_between(region.reference, region.consensus)
|
|
257
246
|
assert_equal(snps_tot, 5)
|
|
@@ -267,9 +256,9 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
267
256
|
#test that the reference name is 'chr_1' for all objects
|
|
268
257
|
#puts pileup
|
|
269
258
|
assert_equal(pileup.ref_name, 'chr_1')
|
|
270
|
-
|
|
259
|
+
|
|
271
260
|
end
|
|
272
|
-
|
|
261
|
+
|
|
273
262
|
region = @sam.cached_regions[reg.to_s]
|
|
274
263
|
|
|
275
264
|
#, :snps, :reference, :base_ratios, :consensus, :coverages
|
|
@@ -287,7 +276,9 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
287
276
|
|
|
288
277
|
def test_fixmate
|
|
289
278
|
mates_fixed_bam = @test_folder + "/mates_fixed.bam"
|
|
290
|
-
@sam.fix_mates(:out_bam=>mates_fixed_bam)
|
|
279
|
+
@sam.fix_mates(:out_bam=>mates_fixed_bam, :r =>true, :p =>true, :c =>true)
|
|
280
|
+
puts "FIXMATE!!!"
|
|
281
|
+
puts @sam.last_command
|
|
291
282
|
assert_nothing_thrown do
|
|
292
283
|
File.open(mates_fixed_bam, "r")
|
|
293
284
|
end
|
|
@@ -313,18 +304,18 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
313
304
|
merged_bam_file = @test_folder + "/maps_merged.bam"
|
|
314
305
|
File.delete merged_bam_file if File.exists?(merged_bam_file)
|
|
315
306
|
# File.delete("test/samples/small/maps_merged.bam")
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
307
|
+
@sam.merge(:out=>merged_bam_file, :bams=>bam_files, :n=>true)
|
|
308
|
+
merged_bam = Bio::DB::Sam.new(:fasta => @testReference, :bam => merged_bam_file)
|
|
309
|
+
no_reads_mapped = 0;
|
|
310
|
+
|
|
311
|
+
merged_bam.view() do |al|
|
|
312
|
+
assert_kind_of(Bio::DB::Alignment, al)
|
|
313
|
+
no_reads_mapped+=1
|
|
314
|
+
end
|
|
315
|
+
assert_equal(no_reads_mapped, 10)
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def test_cat
|
|
328
319
|
#same files used for merge, but we'll cat them instead
|
|
329
320
|
bam1 = @test_folder + "/map_to_merge1.bam"
|
|
330
321
|
bam2 = @test_folder + "/map_to_merge2.bam"
|
|
@@ -350,26 +341,29 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
|
350
341
|
dupes = @test_folder + "/dupes.bam"
|
|
351
342
|
unduped = @test_folder + "/dupes_rmdup.bam"
|
|
352
343
|
bam_with_dupes = Bio::DB::Sam.new(:fasta => @testReference, :bam => dupes)
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
344
|
+
#This is a temporarry patch while samtools 1.+ restores rmdup
|
|
345
|
+
assert_raise do
|
|
346
|
+
bam_with_dupes.remove_duplicates(:s=>true, :out=>unduped)
|
|
347
|
+
|
|
348
|
+
unduped_bam = Bio::DB::Sam.new(:fasta => @testReference, :bam => unduped)
|
|
356
349
|
#rmdup should remove 267 of the 268 reads mapping to the same place, so producing a bam file with 5 reads
|
|
357
350
|
readcount = 0
|
|
358
351
|
unduped_bam.view()do |sam|
|
|
359
|
-
|
|
360
|
-
end
|
|
361
|
-
assert_equal(readcount, 5)
|
|
352
|
+
readcount +=1
|
|
362
353
|
end
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
354
|
+
assert_equal(readcount, 5)
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
def test_targetcut
|
|
359
|
+
sorted_bam = @test_folder + "/sorted.bam"
|
|
360
|
+
cut = Bio::DB::Sam.new(:fasta => @testReference, :bam => sorted_bam)
|
|
361
|
+
assert_nothing_thrown do
|
|
362
|
+
cut.targetcut
|
|
370
363
|
end
|
|
371
|
-
|
|
372
|
-
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
def test_docs
|
|
373
367
|
#force an error (use 'samtool' instead of 'samtools')
|
|
374
368
|
output = Bio::DB::Sam.docs('samtool', 'tview')
|
|
375
369
|
assert_equal(output, "program must be 'samtools' or 'bcftools'")
|
data/test/test_vcf.rb
CHANGED
|
@@ -41,6 +41,13 @@ class TestVcf < Test::Unit::TestCase
|
|
|
41
41
|
"2"=>{"DP"=>"8", "GT"=>"1|0", "HQ"=>"51,51", "GQ"=>"48"},
|
|
42
42
|
"3"=>{"DP"=>"5", "GT"=>"1/1", "HQ"=>"-1,-1", "GQ"=>"43"}}, @vcf2.samples)
|
|
43
43
|
|
|
44
|
+
assert_equal(true, @vcf2.H2)
|
|
45
|
+
assert_equal(true, @vcf2.DB)
|
|
46
|
+
assert_equal(false, @vcf2.XX)
|
|
47
|
+
assert_equal("14", @vcf2.DP)
|
|
48
|
+
assert_equal("0.5", @vcf2.AF)
|
|
49
|
+
assert_equal("3", @vcf2.NS)
|
|
50
|
+
|
|
44
51
|
assert_equal("19", @vcf3.chrom)
|
|
45
52
|
assert_equal(111, @vcf3.pos)
|
|
46
53
|
assert_equal(nil, @vcf3.id)
|
|
@@ -61,6 +68,12 @@ class TestVcf < Test::Unit::TestCase
|
|
|
61
68
|
assert_equal(29,@vcf4.qual)
|
|
62
69
|
assert_equal("PASS", @vcf4.filter)
|
|
63
70
|
assert_equal({"DP"=>"14", "AF"=>"0.5", "NS"=>"3", "DB"=>nil, "H2"=>nil}, @vcf4.info)
|
|
71
|
+
assert_equal(true, @vcf4.H2)
|
|
72
|
+
assert_equal(true, @vcf4.DB)
|
|
73
|
+
assert_equal(false, @vcf4.XX)
|
|
74
|
+
assert_equal("14", @vcf4.DP)
|
|
75
|
+
assert_equal("0.5", @vcf4.AF)
|
|
76
|
+
assert_equal("3", @vcf4.NS)
|
|
64
77
|
assert_equal({"1"=>{"DP"=>"1", "GT"=>"0|0", "HQ"=>"51,51", "GQ"=>"48"},
|
|
65
78
|
"2"=>{"DP"=>"8", "GT"=>"1|0", "HQ"=>"51,51", "GQ"=>"48"},
|
|
66
79
|
"3"=>{"DP"=>"5", "GT"=>"1/1", "HQ"=>".,", "GQ"=>"43"}}, @vcf4.samples)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bio-samtools
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.3.
|
|
4
|
+
version: 2.3.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ricardo Ramirez-Gonzalez
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2015-
|
|
13
|
+
date: 2015-06-19 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: bio-svgenes
|
|
@@ -183,7 +183,7 @@ dependencies:
|
|
|
183
183
|
description: "Binder of samtools for ruby, on the top of FFI. \n\n This project was
|
|
184
184
|
born from the need to add support of BAM files to \n the gee_fu genome browser
|
|
185
185
|
(http://github.com/danmaclean/gee_fu)."
|
|
186
|
-
email:
|
|
186
|
+
email: Ricardo.Ramirez-Gonzalez@tgac.ac.uk
|
|
187
187
|
executables:
|
|
188
188
|
- bam_consensus.rb
|
|
189
189
|
extensions:
|
|
@@ -332,7 +332,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
332
332
|
version: '0'
|
|
333
333
|
requirements: []
|
|
334
334
|
rubyforge_project:
|
|
335
|
-
rubygems_version: 2.
|
|
335
|
+
rubygems_version: 2.4.6
|
|
336
336
|
signing_key:
|
|
337
337
|
specification_version: 4
|
|
338
338
|
summary: Binder of samtools for ruby, on the top of FFI.
|