bio-samtools 2.3.3 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +8 -3
- data/Gemfile +2 -1
- data/README.md +12 -0
- data/VERSION +1 -1
- data/bin/bam_consensus.rb +0 -1
- data/bio-samtools.gemspec +13 -8
- data/ext/Rakefile +25 -26
- data/ext/mkrf_conf.rb +22 -22
- data/lib/bio/db/sam.rb +53 -53
- data/lib/bio/db/sam/external/VERSION +1 -1
- data/lib/bio/db/vcf.rb +0 -7
- data/test/samples/LCI/NC_001988.ffn +2 -0
- data/test/samples/LCI/test.bam +0 -0
- data/test/samples/LCI/test.bam.bai +0 -0
- data/test/samples/small/test.tam +10 -10
- data/test/test_sam.rb +130 -92
- data/test/test_vcf.rb +0 -13
- metadata +22 -6
- data/test/samples/small/testu.bam.bai +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90e15e76b4d1f9b079ab0f3fd6ecca9833a67e99
|
4
|
+
data.tar.gz: 251a8a0a110617d3894cfa6e287bc06bbd24ed89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84b928dc4aeb6b96f7854beb4cf54bdc94d8a8e7b6a50e5a581d9a5d2d7d22f435f765ebae9ef4765701dd823c603ca84896714b5685269c9e4d33f7fceb1eff
|
7
|
+
data.tar.gz: 6eca1fbf0fcb285c2c4cf7a436eab0b087a697d1e858e8a4b491bd1ec13e2bc90fccec00c1c1d8c12c70b1bcb88ad4663271720c0b6de9fc5121c4b263cb4841
|
data/.travis.yml
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
language: ruby
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
sudo: false
|
3
|
+
addons:
|
4
|
+
apt:
|
5
|
+
packages:
|
6
|
+
- zlib1g-dev
|
7
|
+
- libncurses5-dev
|
8
|
+
- libtinfo-dev
|
5
9
|
before_script:
|
6
10
|
- cd ext
|
7
11
|
- ruby mkrf_conf.rb
|
@@ -12,3 +16,4 @@ rvm:
|
|
12
16
|
- 2.0.0
|
13
17
|
- 2.1.0
|
14
18
|
- 2.2.2
|
19
|
+
- 2.2.3
|
data/Gemfile
CHANGED
@@ -4,11 +4,12 @@ source "http://rubygems.org"
|
|
4
4
|
# gem "activesupport", ">= 2.3.5"
|
5
5
|
gem "bio-svgenes", ">= 0.4.1"
|
6
6
|
gem "bio", ">= 1.4.2"
|
7
|
+
gem 'open_uri_redirections'
|
7
8
|
|
8
9
|
# Add dependencies to develop your gem here.
|
9
10
|
# Include everything needed to run rake, tests, features, etc.
|
10
11
|
group :development do
|
11
|
-
gem "shoulda", "
|
12
|
+
gem "shoulda", "> 2.10"
|
12
13
|
gem "shoulda-context"
|
13
14
|
gem "shoulda-matchers"
|
14
15
|
gem "bundler", "> 1.0.21"
|
data/README.md
CHANGED
@@ -485,6 +485,18 @@ The latest I think is the easiest way, cause you are replicating the automatic p
|
|
485
485
|
|
486
486
|
For testing just run `rake test`. Tests must be improved.
|
487
487
|
|
488
|
+
####Travis integration###
|
489
|
+
If you are integrating this library into another tool and testing it with travis, add the follwing in ```.travis.yml```:
|
490
|
+
|
491
|
+
```yml
|
492
|
+
addons:
|
493
|
+
apt:
|
494
|
+
packages:
|
495
|
+
- zlib1g-dev
|
496
|
+
- libncurses5-dev
|
497
|
+
- libtinfo-dev
|
498
|
+
```
|
499
|
+
|
488
500
|
## Copyright
|
489
501
|
|
490
502
|
Copyright (c) 2011 Raoul J.P. Bonnal. See LICENSE.txt for
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.4.0
|
data/bin/bam_consensus.rb
CHANGED
data/bio-samtools.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
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.
|
5
|
+
# stub: bio-samtools 2.4.0 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.
|
10
|
+
s.version = "2.4.0"
|
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 = "
|
15
|
+
s.date = "2016-05-25"
|
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
17
|
s.email = "Ricardo.Ramirez-Gonzalez@tgac.ac.uk"
|
18
18
|
s.executables = ["bam_consensus.rb"]
|
@@ -101,6 +101,9 @@ Gem::Specification.new do |s|
|
|
101
101
|
"test/helper.rb",
|
102
102
|
"test/sample.vcf",
|
103
103
|
"test/samples/.gitignore",
|
104
|
+
"test/samples/LCI/NC_001988.ffn",
|
105
|
+
"test/samples/LCI/test.bam",
|
106
|
+
"test/samples/LCI/test.bam.bai",
|
104
107
|
"test/samples/small/dupes.bam",
|
105
108
|
"test/samples/small/dupes.sam",
|
106
109
|
"test/samples/small/ids2.txt",
|
@@ -133,7 +136,6 @@ Gem::Specification.new do |s|
|
|
133
136
|
"test/samples/small/test_chr.fasta.sa",
|
134
137
|
"test/samples/small/test_cov.svg",
|
135
138
|
"test/samples/small/testu.bam",
|
136
|
-
"test/samples/small/testu.bam.bai",
|
137
139
|
"test/samples/small/testu.bed",
|
138
140
|
"test/test_bio-samtools.rb",
|
139
141
|
"test/test_pileup.rb",
|
@@ -145,7 +147,7 @@ Gem::Specification.new do |s|
|
|
145
147
|
]
|
146
148
|
s.homepage = "http://github.com/helios/bioruby-samtools"
|
147
149
|
s.licenses = ["MIT"]
|
148
|
-
s.rubygems_version = "2.
|
150
|
+
s.rubygems_version = "2.2.2"
|
149
151
|
s.summary = "Binder of samtools for ruby, on the top of FFI."
|
150
152
|
|
151
153
|
if s.respond_to? :specification_version then
|
@@ -154,7 +156,8 @@ Gem::Specification.new do |s|
|
|
154
156
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
155
157
|
s.add_runtime_dependency(%q<bio-svgenes>, [">= 0.4.1"])
|
156
158
|
s.add_runtime_dependency(%q<bio>, [">= 1.4.2"])
|
157
|
-
s.
|
159
|
+
s.add_runtime_dependency(%q<open_uri_redirections>, [">= 0"])
|
160
|
+
s.add_development_dependency(%q<shoulda>, ["> 2.10"])
|
158
161
|
s.add_development_dependency(%q<shoulda-context>, [">= 0"])
|
159
162
|
s.add_development_dependency(%q<shoulda-matchers>, [">= 0"])
|
160
163
|
s.add_development_dependency(%q<bundler>, ["> 1.0.21"])
|
@@ -167,7 +170,8 @@ Gem::Specification.new do |s|
|
|
167
170
|
else
|
168
171
|
s.add_dependency(%q<bio-svgenes>, [">= 0.4.1"])
|
169
172
|
s.add_dependency(%q<bio>, [">= 1.4.2"])
|
170
|
-
s.add_dependency(%q<
|
173
|
+
s.add_dependency(%q<open_uri_redirections>, [">= 0"])
|
174
|
+
s.add_dependency(%q<shoulda>, ["> 2.10"])
|
171
175
|
s.add_dependency(%q<shoulda-context>, [">= 0"])
|
172
176
|
s.add_dependency(%q<shoulda-matchers>, [">= 0"])
|
173
177
|
s.add_dependency(%q<bundler>, ["> 1.0.21"])
|
@@ -181,7 +185,8 @@ Gem::Specification.new do |s|
|
|
181
185
|
else
|
182
186
|
s.add_dependency(%q<bio-svgenes>, [">= 0.4.1"])
|
183
187
|
s.add_dependency(%q<bio>, [">= 1.4.2"])
|
184
|
-
s.add_dependency(%q<
|
188
|
+
s.add_dependency(%q<open_uri_redirections>, [">= 0"])
|
189
|
+
s.add_dependency(%q<shoulda>, ["> 2.10"])
|
185
190
|
s.add_dependency(%q<shoulda-context>, [">= 0"])
|
186
191
|
s.add_dependency(%q<shoulda-matchers>, [">= 0"])
|
187
192
|
s.add_dependency(%q<bundler>, ["> 1.0.21"])
|
data/ext/Rakefile
CHANGED
@@ -1,51 +1,50 @@
|
|
1
1
|
require 'rbconfig'
|
2
2
|
require 'open-uri'
|
3
|
+
#require 'open_uri_redirections'
|
3
4
|
require 'fileutils'
|
4
5
|
include FileUtils::Verbose
|
5
6
|
require 'rake/clean'
|
6
7
|
|
7
|
-
URL = "
|
8
|
-
|
9
|
-
|
8
|
+
URL = "https://github.com/samtools/samtools/releases/download/1.3.1/samtools-1.3.1.tar.bz2"
|
9
|
+
URL_bcf = "https://github.com/samtools/bcftools/releases/download/1.3.1/bcftools-1.3.1.tar.bz2"
|
10
10
|
task :download do
|
11
11
|
open(URL) do |uri|
|
12
|
-
File.open("samtools-1.
|
12
|
+
File.open("samtools-1.3.1.tar.bz2",'wb') do |fout|
|
13
13
|
fout.write(uri.read)
|
14
|
-
end #fout
|
14
|
+
end #fout
|
15
15
|
end #uri
|
16
16
|
|
17
|
-
|
18
|
-
File.open("bcftools-1.
|
17
|
+
open(URL_bcf) do |uri|
|
18
|
+
File.open("bcftools-1.3.1.tar.bz2",'wb') do |fout|
|
19
19
|
fout.write(uri.read)
|
20
|
-
end #fout
|
20
|
+
end #fout
|
21
21
|
end #uri
|
22
|
+
|
22
23
|
end
|
23
|
-
|
24
|
+
|
24
25
|
task :compile do
|
25
|
-
sh "tar xvfj samtools-1.
|
26
|
-
|
27
|
-
cd("samtools-1.2") do
|
26
|
+
sh "tar xvfj samtools-1.3.1.tar.bz2"
|
27
|
+
cd("samtools-1.3.1") do
|
28
28
|
sh "make"
|
29
|
-
cp(
|
29
|
+
cp('samtools', "/Users/ramirezr/Documents/public_code/helios/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
30
30
|
end #cd
|
31
|
-
|
31
|
+
|
32
|
+
sh "tar xvfj bcftools-1.3.1.tar.bz2"
|
33
|
+
cd("bcftools-1.3.1") do
|
32
34
|
sh "make"
|
33
|
-
cp('bcftools', "/Users/ramirezr/Documents/public_code/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
34
|
-
end
|
35
|
+
cp('bcftools', "/Users/ramirezr/Documents/public_code/helios/bioruby-samtools/ext/../lib/bio/db/sam/external")
|
36
|
+
end #cd
|
35
37
|
end
|
36
|
-
|
38
|
+
|
37
39
|
task :clean do
|
38
|
-
cd("samtools-1.
|
40
|
+
cd("samtools-1.3.1") do
|
39
41
|
sh "make clean"
|
40
42
|
end
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
rm_rf("samtools-1.2")
|
46
|
-
rm("bcftools-1.2.tar.bz2")
|
47
|
-
rm_rf("bcftools-1.2")
|
43
|
+
rm("samtools-1.3.1.tar.bz2")
|
44
|
+
rm_rf("samtools-1.3.1")
|
45
|
+
rm("bcftools-1.3.1.tar.bz2")
|
46
|
+
rm_rf("bcftools-1.3.1")
|
48
47
|
end
|
49
48
|
|
50
49
|
task :default => [:download, :compile, :clean]
|
51
|
-
|
50
|
+
|
data/ext/mkrf_conf.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#(c) Copyright 2011 Raoul Bonnal. All Rights Reserved.
|
1
|
+
#(c) Copyright 2011 Raoul Bonnal. All Rights Reserved.
|
2
2
|
|
3
3
|
# create Rakefile for shared library compilation
|
4
4
|
|
@@ -12,64 +12,64 @@ version = File.open(File.join(path_external,"VERSION"),'r')
|
|
12
12
|
Version = version.read
|
13
13
|
version.close
|
14
14
|
|
15
|
-
url = "http://sourceforge.net/projects/samtools/files/samtools/#{Version}/samtools-#{Version}.tar.bz2/download"
|
15
|
+
#url = "http://sourceforge.net/projects/samtools/files/samtools/#{Version}/samtools-#{Version}.tar.bz2/download"
|
16
|
+
url="https://github.com/samtools/samtools/releases/download/#{Version}/samtools-#{Version}.tar.bz2"
|
16
17
|
SamToolsFile = "samtools-#{Version}.tar.bz2"
|
17
|
-
|
18
|
-
|
18
|
+
url_bcftools="https://github.com/samtools/bcftools/releases/download/#{Version}/bcftools-#{Version}.tar.bz2"
|
19
|
+
BcfToolsFile = "bcftools-#{Version}.tar.bz2"
|
19
20
|
|
20
21
|
File.open(File.join(path,"Rakefile"),"w") do |rakefile|
|
21
22
|
rakefile.write <<-RAKE
|
22
23
|
require 'rbconfig'
|
23
24
|
require 'open-uri'
|
25
|
+
#require 'open_uri_redirections'
|
24
26
|
require 'fileutils'
|
25
27
|
include FileUtils::Verbose
|
26
28
|
require 'rake/clean'
|
27
29
|
|
28
30
|
URL = "#{url}"
|
29
|
-
|
30
|
-
|
31
|
+
URL_bcf = "#{url_bcftools}"
|
31
32
|
task :download do
|
32
33
|
open(URL) do |uri|
|
33
34
|
File.open("#{SamToolsFile}",'wb') do |fout|
|
34
35
|
fout.write(uri.read)
|
35
|
-
end #fout
|
36
|
+
end #fout
|
36
37
|
end #uri
|
37
38
|
|
38
|
-
|
39
|
-
File.open("#{
|
39
|
+
open(URL_bcf) do |uri|
|
40
|
+
File.open("#{BcfToolsFile}",'wb') do |fout|
|
40
41
|
fout.write(uri.read)
|
41
|
-
end #fout
|
42
|
+
end #fout
|
42
43
|
end #uri
|
44
|
+
|
43
45
|
end
|
44
|
-
|
46
|
+
|
45
47
|
task :compile do
|
46
48
|
sh "tar xvfj #{SamToolsFile}"
|
47
|
-
sh "tar xvfj #{VcfToolsFile}"
|
48
49
|
cd("samtools-#{Version}") do
|
49
50
|
sh "make"
|
50
|
-
cp(
|
51
|
+
cp('samtools', "#{path_external}")
|
51
52
|
end #cd
|
53
|
+
|
54
|
+
sh "tar xvfj #{BcfToolsFile}"
|
52
55
|
cd("bcftools-#{Version}") do
|
53
56
|
sh "make"
|
54
57
|
cp('bcftools', "#{path_external}")
|
55
|
-
end
|
58
|
+
end #cd
|
56
59
|
end
|
57
|
-
|
60
|
+
|
58
61
|
task :clean do
|
59
62
|
cd("samtools-#{Version}") do
|
60
63
|
sh "make clean"
|
61
64
|
end
|
62
|
-
cd("bcftools-#{Version}") do
|
63
|
-
sh "make clean"
|
64
|
-
end
|
65
65
|
rm("#{SamToolsFile}")
|
66
66
|
rm_rf("samtools-#{Version}")
|
67
|
-
rm("#{
|
67
|
+
rm("#{BcfToolsFile}")
|
68
68
|
rm_rf("bcftools-#{Version}")
|
69
69
|
end
|
70
70
|
|
71
71
|
task :default => [:download, :compile, :clean]
|
72
|
-
|
72
|
+
|
73
73
|
RAKE
|
74
|
-
|
75
|
-
end
|
74
|
+
|
75
|
+
end
|
data/lib/bio/db/sam.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
require 'open3'
|
2
1
|
module Bio
|
3
2
|
class DB
|
4
3
|
class Sam
|
4
|
+
|
5
|
+
class SamException < StandardError; end
|
6
|
+
|
5
7
|
attr_accessor :bam, :fasta, :samtools, :bcftools, :last_command
|
6
8
|
attr_accessor :minumum_ratio_for_iup_consensus
|
7
9
|
attr_reader :cached_regions
|
@@ -25,7 +27,7 @@ module Bio
|
|
25
27
|
|
26
28
|
@last_command = nil
|
27
29
|
raise ArgumentError, "Need Fasta and at least one BAM or SAM" if not @fasta or not @bam
|
28
|
-
raise IOError, "File not found #{files}" if not files_ok?
|
30
|
+
raise IOError, "File not found #{@files}" if not files_ok?
|
29
31
|
@bams = [@bams] if @bams.instance_of? String
|
30
32
|
|
31
33
|
end
|
@@ -65,7 +67,7 @@ module Bio
|
|
65
67
|
region = String.new
|
66
68
|
if opts[:chr] and opts[:start] and opts[:stop]
|
67
69
|
has_e = self.has_entry? opts[:chr]
|
68
|
-
raise
|
70
|
+
raise SamException.new(), "[view] The sequence #{opts[:chr]} is not in the bam file" unless self.has_entry? opts[:chr]
|
69
71
|
region = "#{opts[:chr]}:#{opts[:start]}-#{opts[:stop]}"
|
70
72
|
[:chr, :start, :stop].each {|o| opts.delete(o)}
|
71
73
|
end
|
@@ -80,7 +82,7 @@ module Bio
|
|
80
82
|
end
|
81
83
|
command = String.new
|
82
84
|
command = form_opt_string(@samtools, 'view', opts, [:b, :h, :H, :S, :u, '1', :x, :X, :c, :B])
|
83
|
-
|
85
|
+
command = command + " '#{region}'" if region.size > 0
|
84
86
|
@last_command = command
|
85
87
|
type = (opts[:u] or opts[:b]) ? :binary : :text
|
86
88
|
klass = (type == :binary) ? String : Bio::DB::Alignment
|
@@ -258,7 +260,7 @@ module Bio
|
|
258
260
|
query = opts[:r].to_s
|
259
261
|
query = opts[:r].to_region.to_s if opts[:r].respond_to?(:to_region)
|
260
262
|
if not query.nil? and query.size > 0
|
261
|
-
raise
|
263
|
+
raise SamException.new(), "The sequence #{query} is not in the bam file" unless has_region? query
|
262
264
|
end
|
263
265
|
opts[:r] = query
|
264
266
|
|
@@ -268,7 +270,7 @@ module Bio
|
|
268
270
|
end
|
269
271
|
|
270
272
|
command = form_opt_string(@samtools, "mpileup", opts, [:R, :B, :E, "6", :A, :g, :u, :I] )
|
271
|
-
puts
|
273
|
+
puts "Running: #{command}" if $VERBOSE
|
272
274
|
if opts[:u]
|
273
275
|
command = command + " | #{@bcftools} view -cg -"
|
274
276
|
end
|
@@ -285,13 +287,13 @@ module Bio
|
|
285
287
|
#* stop - [INT] the stop position for the subsequence
|
286
288
|
#* as_bio - boolean stating if the returned object should be a Bio::Sequence::NA object
|
287
289
|
def fetch_reference(chr,start,stop, opts={:as_bio => false})
|
288
|
-
raise
|
290
|
+
raise SamException.new(), "The sequence #{chr} is not in the bam file" unless has_entry? chr
|
289
291
|
seq = ""
|
290
292
|
unless @fasta #We return a string of Ns if we don't know the reference.
|
291
293
|
seq = "n" * (stop-start)
|
292
294
|
else
|
293
|
-
command = "#{@samtools} faidx #{@fasta} '#{chr}:#{start}-#{stop}'"
|
294
|
-
puts
|
295
|
+
command = "#{@samtools} faidx \"#{@fasta}\" '#{chr}:#{start}-#{stop}'"
|
296
|
+
puts "Running: #{command}" if $VERBOSE
|
295
297
|
@last_command = command
|
296
298
|
seq = ""
|
297
299
|
yield_from_pipe(command, String, :text ) {|line| seq = seq + line unless line =~ /^>/}
|
@@ -313,19 +315,17 @@ module Bio
|
|
313
315
|
opts={:as_bio => false}
|
314
316
|
self.fetch_reference(:chr,:start,:stop,opts)
|
315
317
|
else
|
316
|
-
command = "#{@samtools} faidx #{@fasta}"
|
318
|
+
command = "#{@samtools} faidx \"#{@fasta}\""
|
317
319
|
@last_command = command
|
318
320
|
system(command)
|
319
321
|
end
|
320
322
|
end
|
321
323
|
|
322
324
|
#Index sorted alignment for fast random access. Index file <aln.bam>.bai will be created of no out_index is provided.
|
323
|
-
#* out_index - [STRING] name of index
|
324
|
-
#* samtools doesn't support it anymore.
|
325
|
+
#* out_index - [STRING] name of index
|
325
326
|
def index(opts={})
|
326
|
-
|
327
|
-
|
328
|
-
puts stderr.read if $VERBOSE
|
327
|
+
command = "#{@samtools} index \"#{@bam}\" #{opts[:out_index]}"
|
328
|
+
puts "Running: #{command}" if $VERBOSE
|
329
329
|
@last_command = command
|
330
330
|
system(command)
|
331
331
|
end
|
@@ -333,15 +333,14 @@ module Bio
|
|
333
333
|
#Fill in mate coordinates, ISIZE and mate related flags from a name-sorted alignment
|
334
334
|
#* out_bam name of outfile
|
335
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.
|
339
336
|
def fix_mates(opts={})
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
337
|
+
#opts.merge!({:out_index=>nil})
|
338
|
+
remove_reads = ""
|
339
|
+
if opts[:r]
|
340
|
+
remove_reads = "-r"
|
341
|
+
end
|
342
|
+
command = "#{@samtools} fixmate #{remove_reads} \"#{@bam}\" #{opts[:out_bam]}"
|
343
|
+
puts "Running: #{command}" if $VERBOSE
|
345
344
|
@last_command = command
|
346
345
|
system(command)
|
347
346
|
end
|
@@ -351,7 +350,7 @@ module Bio
|
|
351
350
|
#generate simple stats with regard to the number and pairing of reads mapped to a reference
|
352
351
|
def flag_stats(opts={})
|
353
352
|
command = form_opt_string(@samtools, "flagstat", opts, [])
|
354
|
-
puts
|
353
|
+
puts "Running: #{command}" if $VERBOSE
|
355
354
|
@last_command = command
|
356
355
|
strings = []
|
357
356
|
yield_from_pipe(command,String) {|line| strings << line.chomp}
|
@@ -366,7 +365,7 @@ module Bio
|
|
366
365
|
stats = {}
|
367
366
|
command = form_opt_string(@samtools, "idxstats", {}, [])
|
368
367
|
@last_command = command
|
369
|
-
puts
|
368
|
+
puts "Running: #{command}" if $VERBOSE
|
370
369
|
yield_from_pipe(command, String, :text, true, "#") do |line|
|
371
370
|
info = line.chomp.split(/\t/)
|
372
371
|
stats[ info[0] ] = {:length => info[1].to_i, :mapped_reads => info[2].to_i, :unmapped_reads => info[3].to_i }
|
@@ -447,7 +446,7 @@ module Bio
|
|
447
446
|
command = "#{@samtools} merge #{options} #{out} #{bam_list}"
|
448
447
|
|
449
448
|
@last_command = command
|
450
|
-
puts command
|
449
|
+
puts "Running: #{command}" if $VERBOSE
|
451
450
|
system(command)
|
452
451
|
|
453
452
|
end
|
@@ -482,10 +481,9 @@ module Bio
|
|
482
481
|
#* S - treat PE reads as SE in rmdup (force -s)
|
483
482
|
#* out - [FILE] output bam
|
484
483
|
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."
|
486
484
|
out = opts[:out]
|
487
485
|
opts.delete(:out)
|
488
|
-
command = "#{form_opt_string(@samtools, "rmdup", opts, [:s, :S])} #{out} #{@bam}"
|
486
|
+
command = "#{form_opt_string(@samtools, "rmdup", opts, [:s, :S])} #{out} \"#{@bam}\""
|
489
487
|
@last_command = command
|
490
488
|
system(command)
|
491
489
|
end
|
@@ -495,26 +493,28 @@ module Bio
|
|
495
493
|
#Sort alignments by leftmost coordinates
|
496
494
|
#* n - sort by read name
|
497
495
|
#* f - use <out.prefix> as full file name instead of prefix
|
498
|
-
#* o - final output to stdout returns bio::db::alignment
|
496
|
+
#* o - final output to stdout returns bio::db::alignment depreciated (samtools-1.x saves to a file)
|
499
497
|
#* l - [INT] compression level, from 0 to 9 [-1]
|
500
498
|
#* at - [INT] number of sorting and compression threads [1]
|
501
499
|
#* m - [INT] max memory per thread; suffix K/M/G recognized [768M]
|
502
|
-
#* prefix - [STRING] prefix for output bamfile
|
500
|
+
#* prefix - [STRING] prefix for output bamfile (for legacy, becomes "o" to use in samtools-1.x)
|
503
501
|
def sort(opts={})
|
504
502
|
if !opts.has_key?(:prefix)
|
505
|
-
opts.merge!({:
|
503
|
+
opts.merge!({:o => "sorted"})
|
504
|
+
else
|
505
|
+
opts[:o] = opts[:prefix] += ".bam"
|
506
506
|
end
|
507
|
-
|
507
|
+
|
508
508
|
opts.delete(:prefix)
|
509
|
-
command = form_opt_string(@samtools, "sort", opts, [:n, :f
|
510
|
-
command = command + " "
|
509
|
+
command = form_opt_string(@samtools, "sort", opts, [:n, :f])
|
510
|
+
command = command + " "
|
511
511
|
@last_command = command
|
512
|
-
puts
|
513
|
-
if opts[:o]
|
514
|
-
|
515
|
-
else
|
516
|
-
|
517
|
-
end
|
512
|
+
puts "Running: #{command}" if $VERBOSE
|
513
|
+
#if opts[:o]
|
514
|
+
# yield_from_pipe(command, Bio::DB::Alignment)
|
515
|
+
#else
|
516
|
+
system(command)
|
517
|
+
#end
|
518
518
|
end
|
519
519
|
|
520
520
|
#used to generate a text alignment viewer
|
@@ -535,7 +535,7 @@ module Bio
|
|
535
535
|
opts.delete(:s)
|
536
536
|
end
|
537
537
|
command = "#{form_opt_string(@samtools, "tview", opts)}"
|
538
|
-
puts
|
538
|
+
puts "Running: #{command}" if $VERBOSE
|
539
539
|
@last_command = command
|
540
540
|
system(command)
|
541
541
|
end
|
@@ -546,11 +546,11 @@ module Bio
|
|
546
546
|
def reheader(header_sam, opts={})
|
547
547
|
if opts.has_key?(:out)
|
548
548
|
out=opts[:out]
|
549
|
-
command = "#{@samtools} reheader #{header_sam} #{@bam} > #{out}"
|
549
|
+
command = "#{@samtools} reheader #{header_sam} \"#{@bam}\" > #{out}"
|
550
550
|
else
|
551
|
-
command = "#{@samtools} reheader #{header_sam} #{@bam}"
|
551
|
+
command = "#{@samtools} reheader #{header_sam} \"#{@bam}\""
|
552
552
|
end
|
553
|
-
puts
|
553
|
+
puts "Running: #{command}" if $VERBOSE
|
554
554
|
@last_command = command
|
555
555
|
system(command)
|
556
556
|
end
|
@@ -566,7 +566,7 @@ module Bio
|
|
566
566
|
#* E - Extended BAQ calculation. This option trades specificity for sensitivity, though the effect is minor.
|
567
567
|
def calmd(opts={}, &block)
|
568
568
|
command = form_opt_string(@samtools, "calmd", opts, [:E, :e, :u, :b, :S, :r] )+ " " + @fasta
|
569
|
-
puts
|
569
|
+
puts "Running: #{command}" if $VERBOSE
|
570
570
|
@last_command = command
|
571
571
|
type = :text
|
572
572
|
klass = Bio::DB::Alignment
|
@@ -587,7 +587,7 @@ module Bio
|
|
587
587
|
end
|
588
588
|
|
589
589
|
command = "#{form_opt_string(@samtools, "targetcut", opts, [] )}"
|
590
|
-
puts
|
590
|
+
puts "Running: #{command}" if $VERBOSE
|
591
591
|
@last_command = command
|
592
592
|
system(command)
|
593
593
|
end
|
@@ -601,7 +601,7 @@ module Bio
|
|
601
601
|
#* Q - [INT] Minimum base quality to be used in het calling. [13]
|
602
602
|
def phase(opts={})
|
603
603
|
command = "#{form_opt_string(@samtools, "phase", opts, [:A, :F] )}"
|
604
|
-
puts
|
604
|
+
puts "Running: #{command}" if $VERBOSE
|
605
605
|
@last_command = command
|
606
606
|
system(command)
|
607
607
|
end
|
@@ -646,7 +646,7 @@ module Bio
|
|
646
646
|
#
|
647
647
|
#TODO: It may be good to load partially the pileup
|
648
648
|
def mpileup_cached (opts={})
|
649
|
-
raise
|
649
|
+
raise SamException.new(), "A region must be provided" unless opts[:r] or opts[:region]
|
650
650
|
@cached_regions = Hash.new unless @cached_regions
|
651
651
|
region = opts[:r] ? opts[:r] : opts[:region]
|
652
652
|
@cached_regions[region.to_s] = fetch_region(opts) unless @cached_regions[region.to_s]
|
@@ -675,11 +675,11 @@ module Bio
|
|
675
675
|
#bam = opts[:bam]
|
676
676
|
if opts.has_key?(:out)
|
677
677
|
out=opts[:out]
|
678
|
-
command = "#{@samtools} bedcov #{bed} #{@bam} > #{out}"
|
678
|
+
command = "#{@samtools} bedcov \"#{bed}\" \"#{@bam}\" > \"#{out}\""
|
679
679
|
else
|
680
|
-
command = "#{@samtools} bedcov #{bed} #{@bam}"
|
680
|
+
command = "#{@samtools} bedcov \"#{bed}\" \"#{@bam}\""
|
681
681
|
end
|
682
|
-
|
682
|
+
puts "Running: #{command}" if $VERBOSE
|
683
683
|
#puts command
|
684
684
|
@last_command = command
|
685
685
|
system(command)
|
@@ -739,7 +739,7 @@ module Bio
|
|
739
739
|
end
|
740
740
|
end
|
741
741
|
exit_status = wait_thr.value # Process::Status object returned.
|
742
|
-
puts
|
742
|
+
puts "Running: #{command}" if $VERBOSE
|
743
743
|
stdin.close
|
744
744
|
pipe.close
|
745
745
|
stderr.close
|
@@ -753,7 +753,7 @@ module Bio
|
|
753
753
|
# @param singles `flag` options [Array] the options in `opts` that are single options
|
754
754
|
def form_opt_string(prog, command, opts, singles=[])
|
755
755
|
opts_string = commandify(opts, singles)
|
756
|
-
"#{prog} #{command} #{opts_string} #{@bam}"
|
756
|
+
"#{prog} #{command} #{opts_string} \"#{@bam}\""
|
757
757
|
end
|
758
758
|
|
759
759
|
# turns an opts hash into a string
|