bio-samtools 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -0
- data/README.rdoc +1 -0
- data/VERSION +1 -1
- data/bio-samtools.gemspec +19 -19
- data/doc/Bio.html +71 -4
- data/doc/Bio/DB.html +6 -4
- data/doc/Bio/DB/Alignment.html +8 -8
- data/doc/Bio/DB/Pileup.html +515 -0
- data/doc/Bio/DB/SAM.html +37 -37
- data/doc/Bio/DB/SAM/Library.html +4 -4
- data/doc/Bio/DB/SAM/Tools.html +4 -4
- data/doc/Bio/DB/SAM/Tools/Bam1CoreT.html +4 -4
- data/doc/Bio/DB/SAM/Tools/Bam1T.html +4 -4
- data/doc/Bio/DB/SAM/Tools/BamHeaderT.html +4 -4
- data/doc/Bio/DB/SAM/Tools/BamPileup1T.html +4 -4
- data/doc/Bio/DB/SAM/Tools/SamfileT.html +4 -4
- data/doc/Bio/DB/SAM/Tools/SamfileTX.html +4 -4
- data/doc/Bio/DB/SAMException.html +5 -5
- data/doc/Bio/DB/Tag.html +5 -5
- data/doc/Bio/DB/Vcf.html +467 -0
- data/doc/LICENSE_txt.html +57 -60
- data/doc/LibC.html +6 -4
- data/doc/created.rid +7 -7
- data/doc/index.html +4 -4
- data/doc/js/search_index.js +1 -1
- data/doc/lib/bio-samtools_rb.html +4 -4
- data/doc/lib/bio/db/pileup_rb.html +171 -0
- data/doc/lib/bio/db/sam/bam_rb.html +4 -4
- data/doc/lib/bio/db/sam/faidx_rb.html +4 -4
- data/doc/lib/bio/db/sam/library_rb.html +4 -4
- data/doc/lib/bio/db/sam/sam_rb.html +4 -4
- data/doc/lib/bio/db/sam_rb.html +4 -4
- data/doc/lib/bio/db/vcf_rb.html +124 -0
- data/doc/table_of_contents.html +16 -26
- data/doc/tutorial.html +26 -1
- data/doc/tutorial.pdf +0 -0
- data/lib/bio/db/{sam/pileup.rb → pileup.rb} +6 -4
- data/lib/bio/db/sam.rb +13 -12
- data/lib/bio/db/{sam/vcf.rb → vcf.rb} +6 -2
- data/test/samples/small/sorted.bam.bai +0 -0
- data/test/test_basic.rb +7 -5
- data/test/test_vcf.rb +5 -5
- metadata +29 -26
- data/test/basictest.rb +0 -322
- data/test/pileup.rb +0 -68
@@ -4,12 +4,14 @@
|
|
4
4
|
# Forked from vcfruby at https://github.com/jesserod/vcfruby
|
5
5
|
# Modified and tests written by Dan MacLean (dan.maclean@tsl.ac.uk)
|
6
6
|
# VCF is described at http://www.1000genomes.org/node/101
|
7
|
-
|
7
|
+
module Bio
|
8
|
+
class DB
|
8
9
|
class Vcf
|
9
10
|
public
|
10
11
|
attr_accessor :chrom, :pos, :id, :ref, :alt, :qual, :filter, :info, :format, :samples
|
11
12
|
|
12
13
|
#create the vcf object, use the ordered list of sample names to label samples if provided ['A', 'B', 'C'], otherwise uses, 1,2,3 etc
|
14
|
+
#vcf = Bio::DB::Vcf("19 111 . A C 9.6 . . GT:HQ 0|0:10,10 0|0:10,10 0/1:3,3")
|
13
15
|
def initialize(line=nil, sample_names=nil)
|
14
16
|
@info = {}
|
15
17
|
@samples = {}
|
@@ -20,7 +22,7 @@ public
|
|
20
22
|
Integer.new(x) rescue x
|
21
23
|
end
|
22
24
|
|
23
|
-
#gets the info in the Vcf lines and parses the
|
25
|
+
#gets the info in the Vcf lines and parses it, setting the attributes
|
24
26
|
def parse_line(line, sample_names=nil)
|
25
27
|
return false if line[0,1] == '#'
|
26
28
|
|
@@ -75,3 +77,5 @@ public
|
|
75
77
|
end
|
76
78
|
|
77
79
|
end
|
80
|
+
end
|
81
|
+
end
|
Binary file
|
data/test/test_basic.rb
CHANGED
@@ -5,7 +5,8 @@ require 'ffi'
|
|
5
5
|
require "test/unit"
|
6
6
|
require "bio/db/sam"
|
7
7
|
require "bio/db/sam/sam"
|
8
|
-
|
8
|
+
require "bio/db/pileup"
|
9
|
+
require "bio/db/vcf"
|
9
10
|
|
10
11
|
class TestBioDbSam < Test::Unit::TestCase
|
11
12
|
|
@@ -168,6 +169,7 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
168
169
|
#node_7263 238 60 has 550+, query from 0 to 500, something shall come....
|
169
170
|
end
|
170
171
|
|
172
|
+
=begin ##these tests are correct-ish but the functionality isnt implemented yet ...
|
171
173
|
def test_read_invalid_reference
|
172
174
|
sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
|
173
175
|
sam.open
|
@@ -223,7 +225,7 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
223
225
|
assert(true, "Exception generated and catched")
|
224
226
|
end
|
225
227
|
end
|
226
|
-
|
228
|
+
=end
|
227
229
|
def test_fasta_load_index
|
228
230
|
sam = Bio::DB::Sam.new({:fasta=>@testReference})
|
229
231
|
sam.load_reference
|
@@ -289,7 +291,7 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
289
291
|
end
|
290
292
|
assert_equal(10,pileup_list.length)
|
291
293
|
pileup_list.each do |p|
|
292
|
-
assert_kind_of(Pileup, p)
|
294
|
+
assert_kind_of(Bio::DB::Pileup, p)
|
293
295
|
end
|
294
296
|
end
|
295
297
|
|
@@ -302,13 +304,13 @@ class TestBioDbSam < Test::Unit::TestCase
|
|
302
304
|
list << pile
|
303
305
|
end
|
304
306
|
assert_equal(10,list.length)
|
305
|
-
list.each {|p| assert_kind_of(Pileup, p)}
|
307
|
+
list.each {|p| assert_kind_of(Bio::DB::Pileup, p)}
|
306
308
|
vcf_list = []
|
307
309
|
sam.mpileup_plus(:region => "chr_1:100-109", :g => true) do |vcf|
|
308
310
|
vcf_list << vcf
|
309
311
|
end
|
310
312
|
assert_equal(10,vcf_list.length)
|
311
|
-
vcf_list.each {|p| assert_kind_of(Vcf, p)}
|
313
|
+
vcf_list.each {|p| assert_kind_of(Bio::DB::Vcf, p)}
|
312
314
|
end
|
313
315
|
|
314
316
|
#test whether the call to mpileup returns a vcf object if :g => true is used on the command-line
|
data/test/test_vcf.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
|
2
2
|
$: << File.expand_path('.')
|
3
3
|
require 'rubygems'
|
4
|
-
require 'bio/db/
|
4
|
+
require 'bio/db/vcf'
|
5
5
|
require "test/unit"
|
6
6
|
|
7
7
|
|
8
8
|
class TestVcf < Test::Unit::TestCase
|
9
9
|
|
10
10
|
def setup
|
11
|
-
@vcf1 = Vcf.new("19 111 . A C 9.6 . . GT:HQ 0|0:10,10 0|0:10,10 0/1:3,3",["a","b","c"]) #from a 3.3 vcf file
|
12
|
-
@vcf2 = Vcf.new("20 14370 rs6054257 G A 29 0 NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:-1,-1") #from a 3.3 vcf file
|
13
|
-
@vcf3 = Vcf.new("19 111 . A C 9.6 . . GT:HQ 0|0:10,10 0|0:10,10 0/1:3,3") #from a 4.0 vcf file
|
14
|
-
@vcf4 = Vcf.new("20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,") #from a 4.0 vcf file
|
11
|
+
@vcf1 = Bio::DB::Vcf.new("19 111 . A C 9.6 . . GT:HQ 0|0:10,10 0|0:10,10 0/1:3,3",["a","b","c"]) #from a 3.3 vcf file
|
12
|
+
@vcf2 = Bio::DB::Vcf.new("20 14370 rs6054257 G A 29 0 NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:-1,-1") #from a 3.3 vcf file
|
13
|
+
@vcf3 = Bio::DB::Vcf.new("19 111 . A C 9.6 . . GT:HQ 0|0:10,10 0|0:10,10 0/1:3,3") #from a 4.0 vcf file
|
14
|
+
@vcf4 = Bio::DB::Vcf.new("20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,") #from a 4.0 vcf file
|
15
15
|
end
|
16
16
|
|
17
17
|
|
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: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2012-01-13 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: ffi
|
18
|
-
requirement: &
|
18
|
+
requirement: &2153534240 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *2153534240
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bio
|
29
|
-
requirement: &
|
29
|
+
requirement: &2153533620 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ! '>='
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: 1.4.2
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *2153533620
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: shoulda
|
40
|
-
requirement: &
|
40
|
+
requirement: &2153531760 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '0'
|
46
46
|
type: :development
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *2153531760
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: bundler
|
51
|
-
requirement: &
|
51
|
+
requirement: &2153529440 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: 1.0.0
|
57
57
|
type: :development
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *2153529440
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: jeweler
|
62
|
-
requirement: &
|
62
|
+
requirement: &2153526840 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ! '>='
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: '0'
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *2153526840
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rcov
|
73
|
-
requirement: &
|
73
|
+
requirement: &2153524760 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ! '>='
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: '0'
|
79
79
|
type: :development
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *2153524760
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: bio
|
84
|
-
requirement: &
|
84
|
+
requirement: &2153522840 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ! '>='
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: 1.4.2
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *2153522840
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: ffi
|
95
|
-
requirement: &
|
95
|
+
requirement: &2153483000 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ! '>='
|
@@ -100,10 +100,10 @@ dependencies:
|
|
100
100
|
version: '0'
|
101
101
|
type: :development
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *2153483000
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: rdoc
|
106
|
-
requirement: &
|
106
|
+
requirement: &2153482380 !ruby/object:Gem::Requirement
|
107
107
|
none: false
|
108
108
|
requirements:
|
109
109
|
- - ! '>='
|
@@ -111,7 +111,7 @@ dependencies:
|
|
111
111
|
version: '0'
|
112
112
|
type: :development
|
113
113
|
prerelease: false
|
114
|
-
version_requirements: *
|
114
|
+
version_requirements: *2153482380
|
115
115
|
description: ! "Binder of samtools for ruby, on the top of FFI. \n\n This project
|
116
116
|
was born from the need to add support of BAM files to \n the gee_fu genome browser
|
117
117
|
(http://github.com/danmaclean/gee_fu)."
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- doc/Bio.html
|
135
135
|
- doc/Bio/DB.html
|
136
136
|
- doc/Bio/DB/Alignment.html
|
137
|
+
- doc/Bio/DB/Pileup.html
|
137
138
|
- doc/Bio/DB/SAM.html
|
138
139
|
- doc/Bio/DB/SAM/Library.html
|
139
140
|
- doc/Bio/DB/SAM/Tools.html
|
@@ -145,6 +146,7 @@ files:
|
|
145
146
|
- doc/Bio/DB/SAM/Tools/SamfileTX.html
|
146
147
|
- doc/Bio/DB/SAMException.html
|
147
148
|
- doc/Bio/DB/Tag.html
|
149
|
+
- doc/Bio/DB/Vcf.html
|
148
150
|
- doc/LICENSE_txt.html
|
149
151
|
- doc/LibC.html
|
150
152
|
- doc/Pileup.html
|
@@ -241,6 +243,7 @@ files:
|
|
241
243
|
- doc/js/search_index.js
|
242
244
|
- doc/js/searcher.js
|
243
245
|
- doc/lib/bio-samtools_rb.html
|
246
|
+
- doc/lib/bio/db/pileup_rb.html
|
244
247
|
- doc/lib/bio/db/sam/bam_rb.html
|
245
248
|
- doc/lib/bio/db/sam/faidx_rb.html
|
246
249
|
- doc/lib/bio/db/sam/library_rb.html
|
@@ -248,6 +251,7 @@ files:
|
|
248
251
|
- doc/lib/bio/db/sam/sam_rb.html
|
249
252
|
- doc/lib/bio/db/sam/vcf_rb.html
|
250
253
|
- doc/lib/bio/db/sam_rb.html
|
254
|
+
- doc/lib/bio/db/vcf_rb.html
|
251
255
|
- doc/rdoc-style.css
|
252
256
|
- doc/rdoc.css
|
253
257
|
- doc/table_of_contents.html
|
@@ -258,20 +262,19 @@ files:
|
|
258
262
|
- ext/mkrf_conf.rb
|
259
263
|
- lib/bio-samtools.rb
|
260
264
|
- lib/bio/.DS_Store
|
265
|
+
- lib/bio/db/pileup.rb
|
261
266
|
- lib/bio/db/sam.rb
|
262
267
|
- lib/bio/db/sam/bam.rb
|
263
268
|
- lib/bio/db/sam/external/COPYING
|
264
269
|
- lib/bio/db/sam/external/VERSION
|
265
270
|
- lib/bio/db/sam/faidx.rb
|
266
271
|
- lib/bio/db/sam/library.rb
|
267
|
-
- lib/bio/db/sam/pileup.rb
|
268
272
|
- lib/bio/db/sam/sam.rb
|
269
|
-
- lib/bio/db/
|
270
|
-
- test/basictest.rb
|
273
|
+
- lib/bio/db/vcf.rb
|
271
274
|
- test/helper.rb
|
272
|
-
- test/pileup.rb
|
273
275
|
- test/samples/small/ids2.txt
|
274
276
|
- test/samples/small/sorted.bam
|
277
|
+
- test/samples/small/sorted.bam.bai
|
275
278
|
- test/samples/small/test
|
276
279
|
- test/samples/small/test.bam
|
277
280
|
- test/samples/small/test.fa
|
@@ -307,7 +310,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
307
310
|
version: '0'
|
308
311
|
segments:
|
309
312
|
- 0
|
310
|
-
hash:
|
313
|
+
hash: 2724404510118255875
|
311
314
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
312
315
|
none: false
|
313
316
|
requirements:
|
@@ -316,7 +319,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
316
319
|
version: '0'
|
317
320
|
requirements: []
|
318
321
|
rubyforge_project:
|
319
|
-
rubygems_version: 1.8.
|
322
|
+
rubygems_version: 1.8.10
|
320
323
|
signing_key:
|
321
324
|
specification_version: 3
|
322
325
|
summary: Binder of samtools for ruby, on the top of FFI.
|
data/test/basictest.rb
DELETED
@@ -1,322 +0,0 @@
|
|
1
|
-
$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
|
2
|
-
$: << File.expand_path('.')
|
3
|
-
require "test/unit"
|
4
|
-
require "bio/db/sam"
|
5
|
-
require "bio/db/sam/sam"
|
6
|
-
|
7
|
-
|
8
|
-
class TestBioDbSam < Test::Unit::TestCase
|
9
|
-
|
10
|
-
#Set up the paths
|
11
|
-
def setup
|
12
|
-
@test_folder = "test/samples/small"
|
13
|
-
@testTAMFile = @test_folder + "/test.tam"
|
14
|
-
@testBAMFile = @test_folder + "/testu.bam"
|
15
|
-
@testReference = @test_folder + "/test_chr.fasta"
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
#Removing the index files
|
20
|
-
def teardown
|
21
|
-
begin
|
22
|
-
File.delete(@testReference + ".fai")
|
23
|
-
p "deleted: " + @testReference + ".fai "
|
24
|
-
rescue
|
25
|
-
end
|
26
|
-
begin
|
27
|
-
File.delete(@testBAMFile + ".fai")
|
28
|
-
p "deleted: " + @testBAMFile + ".bai "
|
29
|
-
rescue
|
30
|
-
end
|
31
|
-
end
|
32
|
-
=begi
|
33
|
-
def default_test
|
34
|
-
puts $LOAD_PATH
|
35
|
-
assert(true, "Unit test test")
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_openSAMFile
|
39
|
-
bamfile = Bio::DB::SAM::Tools.samopen(@testTAMFile,"r",nil)
|
40
|
-
Bio::DB::SAM::Tools.samclose(bamfile)
|
41
|
-
assert(true, "file open and closed")
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_new_class_empty
|
45
|
-
begin
|
46
|
-
bam = Bio::DB::Sam.new({})
|
47
|
-
assert(false, "Should fail while opening without parameters")
|
48
|
-
rescue Bio::DB::SAMException => e
|
49
|
-
puts e.message
|
50
|
-
assert(true, e.message)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_new_class_empty_invalid_path
|
55
|
-
begin
|
56
|
-
sam = Bio::DB::Sam.new({:bam=>"INVALID"})
|
57
|
-
sam.open
|
58
|
-
sam.close
|
59
|
-
assert(false, "Should fail with an invalid path")
|
60
|
-
rescue Bio::DB::SAMException => e
|
61
|
-
puts e.message
|
62
|
-
assert(true, e.message)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_class_text_read_no_faidx
|
67
|
-
sam = Bio::DB::Sam.new({:tam=>@testTAMFile})
|
68
|
-
sam.open
|
69
|
-
sam.close
|
70
|
-
assert(true, "file open and closed with the class")
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_class_text_read_no_close
|
74
|
-
|
75
|
-
fam = Bio::DB::Sam.new({:tam=>@testTAMFile})
|
76
|
-
fam.open
|
77
|
-
fam = nil
|
78
|
-
ObjectSpace.garbage_collect
|
79
|
-
|
80
|
-
assert(true, "file openend but not closed")
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_class_binary_read_no_close
|
84
|
-
|
85
|
-
Bio::DB::Sam.new({:bam=>@testBAMFile}).open
|
86
|
-
ObjectSpace.garbage_collect
|
87
|
-
assert(true, "BINARY file openend but not closed")
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_read_coverage
|
91
|
-
sam = Bio::DB::Sam.new({:bam=>@testBAMFile, :fasta=>@testReference})
|
92
|
-
sam.open
|
93
|
-
File.open( @test_folder +"/ids2.txt", "r") do |file|
|
94
|
-
puts "file opened"
|
95
|
-
file.each_line{|line|
|
96
|
-
fetching = line.split(' ')[0]
|
97
|
-
puts "fetching: " + fetching
|
98
|
-
sam.load_reference
|
99
|
-
seq = sam.fetch_reference(fetching, 0, 16000)
|
100
|
-
# puts seq
|
101
|
-
# puts seq.length
|
102
|
-
als = sam.fetch(fetching, 0, seq.length)
|
103
|
-
# p als
|
104
|
-
if als.length() > 0 then
|
105
|
-
p fetching
|
106
|
-
p als
|
107
|
-
end
|
108
|
-
}
|
109
|
-
|
110
|
-
end
|
111
|
-
sam.close
|
112
|
-
assert(true, "Finish")
|
113
|
-
end
|
114
|
-
# def test_read_TAM_as_BAM
|
115
|
-
# begin
|
116
|
-
# sam = Bio::DB::Sam.new({:bam=>@testTAMFile})
|
117
|
-
# sam.open
|
118
|
-
# sam.close
|
119
|
-
# assert(false, "Should raise an exception for reading a BAM as TAM")
|
120
|
-
# rescue Bio::DB::SAMException => e
|
121
|
-
# assert(true, "Properly handled")
|
122
|
-
# end
|
123
|
-
# end
|
124
|
-
|
125
|
-
# def test_read_BAM_as_TAM
|
126
|
-
# begin
|
127
|
-
# sam = Bio::DB::Sam.new({:tam=>@testBAMFile})
|
128
|
-
# sam.open
|
129
|
-
# sam.close
|
130
|
-
# assert(false, "Should raise an exception for reading a BAM as TAM")
|
131
|
-
# rescue Bio::DB::SAMException => e
|
132
|
-
# assert(true, "Properly handled")
|
133
|
-
# end
|
134
|
-
# end
|
135
|
-
|
136
|
-
def test_bam_load_index
|
137
|
-
sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
|
138
|
-
sam.open
|
139
|
-
index = sam.load_index
|
140
|
-
sam.close
|
141
|
-
assert(true, "BAM index loaded")
|
142
|
-
# attach_function :bam_index_build, [ :string ], :int
|
143
|
-
# attach_function :bam_index_load, [ :string ], :pointer
|
144
|
-
# attach_function :bam_index_destroy, [ :pointer ], :void
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_tam_load_index
|
148
|
-
begin
|
149
|
-
sam = Bio::DB::Sam.new({:tam=>@testTAMFile})
|
150
|
-
sam.open
|
151
|
-
sam.load_index
|
152
|
-
sam.close
|
153
|
-
assert(false, "TAM index loaded")
|
154
|
-
rescue Bio::DB::SAMException => e
|
155
|
-
assert(true, "Unable to load an index for a TAM file")
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
def test_read_segment
|
160
|
-
sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
|
161
|
-
sam.open
|
162
|
-
als = sam.fetch("chr_1", 0, 500)
|
163
|
-
p als
|
164
|
-
sam.close
|
165
|
-
assert(true, "Seems it ran the query")
|
166
|
-
#node_7263 238 60 has 550+, query from 0 to 500, something shall come....
|
167
|
-
end
|
168
|
-
=end
|
169
|
-
def test_read_invalid_reference
|
170
|
-
sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
|
171
|
-
sam.open
|
172
|
-
begin
|
173
|
-
als = sam.fetch("Chr1", 0, 500)
|
174
|
-
p als
|
175
|
-
sam.close
|
176
|
-
assert(false, "Seems it ran the query")
|
177
|
-
rescue Bio::DB::SAMException => e
|
178
|
-
p e
|
179
|
-
assert(true, "Exception generated and catched")
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
def test_read_invalid_reference_start_coordinate
|
184
|
-
sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
|
185
|
-
sam.open
|
186
|
-
begin
|
187
|
-
als = sam.fetch("chr", -1, 500)
|
188
|
-
p als
|
189
|
-
sam.close
|
190
|
-
assert(false, "Seems it ran the query")
|
191
|
-
rescue Bio::DB::SAMException => e
|
192
|
-
p e
|
193
|
-
assert(true, "Exception generated and catched")
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
def test_read_invalid_reference_end_coordinate
|
198
|
-
sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
|
199
|
-
sam.open
|
200
|
-
begin
|
201
|
-
als = sam.fetch("chr", 0, 50000)
|
202
|
-
p als
|
203
|
-
sam.close
|
204
|
-
assert(false, "Seems it ran the query")
|
205
|
-
rescue Bio::DB::SAMException => e
|
206
|
-
p e
|
207
|
-
assert(true, "Exception generated and catched")
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
def test_read_invalid_reference_swaped_coordinates
|
212
|
-
sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
|
213
|
-
sam.open
|
214
|
-
begin
|
215
|
-
als = sam.fetch("chr", 500, 0)
|
216
|
-
p als
|
217
|
-
sam.close
|
218
|
-
assert(false, "Seems it ran the query")
|
219
|
-
rescue Bio::DB::SAMException => e
|
220
|
-
p e
|
221
|
-
assert(true, "Exception generated and catched")
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
def test_fasta_load_index
|
226
|
-
sam = Bio::DB::Sam.new({:fasta=>@testReference})
|
227
|
-
sam.load_reference
|
228
|
-
seq = sam.fetch_reference("chr_1", 0, 500)
|
229
|
-
p seq
|
230
|
-
sam.close
|
231
|
-
assert(true, "The reference was loaded")
|
232
|
-
end
|
233
|
-
|
234
|
-
def test_fasta_load_index
|
235
|
-
sam = Bio::DB::Sam.new({:fasta=>@testReference})
|
236
|
-
sam.load_reference
|
237
|
-
begin
|
238
|
-
seq = sam.fetch_reference("chr1", 0, 500)
|
239
|
-
p "Error seq:"+ seq
|
240
|
-
sam.close
|
241
|
-
assert(false, "The reference was loaded")
|
242
|
-
rescue Bio::DB::SAMException => e
|
243
|
-
p e
|
244
|
-
assert(true, "The references was not loaded")
|
245
|
-
end
|
246
|
-
end
|
247
|
-
|
248
|
-
def test_load_feature
|
249
|
-
|
250
|
-
fs = Feature.find_by_bam("chr_1", 0, 500,@testBAMFile)
|
251
|
-
|
252
|
-
p fs
|
253
|
-
assert(true, "Loaded as features")
|
254
|
-
end
|
255
|
-
|
256
|
-
def test_avg_coverage
|
257
|
-
sam = Bio::DB::Sam.new({:fasta=>@testReference, :bam=>@testBAMFile })
|
258
|
-
sam.open
|
259
|
-
cov = sam.average_coverage("chr_1", 60, 30)
|
260
|
-
p "Coverage: " + cov.to_s
|
261
|
-
sam.close
|
262
|
-
assert(true, "Average coverage ran")
|
263
|
-
assert(3 == cov, "The coverage is 3")
|
264
|
-
end
|
265
|
-
|
266
|
-
|
267
|
-
def test_chromosome_coverage
|
268
|
-
sam = Bio::DB::Sam.new({:fasta=>@testReference, :bam=>@testBAMFile })
|
269
|
-
sam.open
|
270
|
-
covs = sam.chromosome_coverage("chr_1", 0, 60)
|
271
|
-
p "Coverage: "
|
272
|
-
p covs
|
273
|
-
puts "POS\tCOV"
|
274
|
-
covs.each_with_index{ |cov, i| puts "#{i}\t#{cov}" }
|
275
|
-
sam.close
|
276
|
-
assert(true, "Average coverage ran")
|
277
|
-
#assert(3 == cov, "The coverage is 3")
|
278
|
-
end
|
279
|
-
|
280
|
-
#test whether the call to mpileup works and returns 10 objects of class pileup
|
281
|
-
def test_pileup
|
282
|
-
sam = Bio::DB::Sam.new(:fasta=>@testReference, :bam=>@testBAMFile )
|
283
|
-
pileup_list = []
|
284
|
-
sam.mpileup(:region => "chr_1:100-1100") do |pile|
|
285
|
-
next unless pile.ref_name == 'chr_1' ##required because in the test environment stdout gets mixed in with the captured stdout in the function and non pileup lines are passed...
|
286
|
-
pileup_list << pile
|
287
|
-
end
|
288
|
-
assert_equal(1000,pileup_list.length)
|
289
|
-
pileup_list.each do |p|
|
290
|
-
assert_kind_of(Pileup, p)
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
end
|
295
|
-
|
296
|
-
class Feature
|
297
|
-
attr_reader :start, :end, :strand, :sequence, :quality
|
298
|
-
|
299
|
-
def initialize(a={})
|
300
|
-
p a
|
301
|
-
@start = a[:start]
|
302
|
-
@end = a[:enf]
|
303
|
-
@strand = a[:strand]
|
304
|
-
@sequence = a[:sequence]
|
305
|
-
@quality = a[:quality]
|
306
|
-
end
|
307
|
-
|
308
|
-
def self.find_by_bam(reference,start,stop,bam_file_path)
|
309
|
-
|
310
|
-
sam = Bio::DB::Sam.new({:bam=>bam_file_path})
|
311
|
-
features = []
|
312
|
-
sam.open
|
313
|
-
|
314
|
-
fetchAlignment = Proc.new do |a|
|
315
|
-
a.query_strand ? strand = '+' : strand = '-'
|
316
|
-
features << Feature.new({:start=>a.pos,:end=>a.calend,:strand=>strand,:sequence=>a.seq,:quality=>a.qual})
|
317
|
-
end
|
318
|
-
sam.fetch_with_function(reference, start, stop, fetchAlignment)
|
319
|
-
sam.close
|
320
|
-
features
|
321
|
-
end
|
322
|
-
end
|