bio-faster 0.4.2 → 0.4.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.
- data/VERSION +1 -1
- data/bio-faster.gemspec +3 -2
- data/ext/faster.c +8 -3
- data/lib/bio/faster.rb +5 -1
- data/spec/parser_spec.rb +35 -0
- data/test/test_stdin.rb +7 -0
- metadata +19 -18
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.3
|
data/bio-faster.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "bio-faster"
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Francesco Strozzi"]
|
@@ -75,7 +75,8 @@ Gem::Specification.new do |s|
|
|
75
75
|
"test/data/formats/solexa_full_range_original_solexa.fastq",
|
76
76
|
"test/data/formats/wrapping_as_illumina.fastq",
|
77
77
|
"test/data/formats/wrapping_as_sanger.fastq",
|
78
|
-
"test/data/formats/wrapping_as_solexa.fastq"
|
78
|
+
"test/data/formats/wrapping_as_solexa.fastq",
|
79
|
+
"test/test_stdin.rb"
|
79
80
|
]
|
80
81
|
s.homepage = "http://github.com/fstrozzi/bioruby-faster"
|
81
82
|
s.licenses = ["MIT"]
|
data/ext/faster.c
CHANGED
@@ -8,7 +8,6 @@
|
|
8
8
|
#include <stdlib.h>
|
9
9
|
|
10
10
|
#define _BSIZE 100000
|
11
|
-
|
12
11
|
typedef struct {
|
13
12
|
char *id;
|
14
13
|
char *seq;
|
@@ -67,8 +66,13 @@ int check_header(char *header, char *firstline) {
|
|
67
66
|
int fastQ_iterator(FastQRecord *seq, int scale_factor) {
|
68
67
|
// initialization of structure elements.
|
69
68
|
char *header = "@"; // FastQ header
|
70
|
-
if (!seq->stream)
|
71
|
-
|
69
|
+
if (!seq->stream) {
|
70
|
+
if(strcmp(seq->filename,"stdin") == 0) {
|
71
|
+
seq->stream = stdin;
|
72
|
+
}
|
73
|
+
else
|
74
|
+
seq->stream = fopen(seq->filename,"r");
|
75
|
+
}
|
72
76
|
if (!seq->line)
|
73
77
|
seq->line = malloc(sizeof (char)* _BSIZE);
|
74
78
|
if (!seq->bad_chars)
|
@@ -81,6 +85,7 @@ int fastQ_iterator(FastQRecord *seq, int scale_factor) {
|
|
81
85
|
for (int i = 0; i < 4; i++)
|
82
86
|
{
|
83
87
|
if (fgets(seq->line, _BSIZE, seq->stream) == NULL) {
|
88
|
+
fclose(seq->stream);
|
84
89
|
// if either sequence or quality is missing the record is truncated
|
85
90
|
if((seq->seq != NULL && seq->raw_quality == NULL) || (seq->raw_quality != NULL && seq->seq == NULL)) return -2;
|
86
91
|
else return 0;
|
data/lib/bio/faster.rb
CHANGED
@@ -33,7 +33,11 @@ module Bio
|
|
33
33
|
attach_function :fastQ_iterator, [FastQRecord, :int], :int
|
34
34
|
|
35
35
|
def each_record
|
36
|
-
|
36
|
+
if self.file == :stdin
|
37
|
+
self.file = "stdin"
|
38
|
+
elsif !File.exists? self.file
|
39
|
+
raise ArgumentError, "File #{self.file} does not exist"
|
40
|
+
end
|
37
41
|
record = FastQRecord.new
|
38
42
|
scale_factor = nil
|
39
43
|
case self.encoding
|
data/spec/parser_spec.rb
CHANGED
@@ -42,6 +42,41 @@ describe Bio::Faster do
|
|
42
42
|
|
43
43
|
end
|
44
44
|
|
45
|
+
it "can read also gzipped FastQ files" do
|
46
|
+
gz_files = Dir.glob(TEST_DATA+"/formats/gzipped/*.fastq.gz").sort
|
47
|
+
gz_seq = []
|
48
|
+
gz_files.each do |file|
|
49
|
+
Bio::Faster.new(file).each_record do |seq|
|
50
|
+
gz_seq << seq
|
51
|
+
end
|
52
|
+
end
|
53
|
+
files = Dir.glob(TEST_DATA+"/formats/gzipped/*.fastq").sort
|
54
|
+
norm_seq = []
|
55
|
+
files.each do |file|
|
56
|
+
Bio::Faster.new(file).each_record do |seq|
|
57
|
+
norm_seq << seq
|
58
|
+
end
|
59
|
+
end
|
60
|
+
gz_seq.should == norm_seq
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
it "can read from the standard input" do
|
65
|
+
require 'digest/md5'
|
66
|
+
file = TEST_DATA+"/formats/illumina_full_range_as_illumina.fastq"
|
67
|
+
TEST = File.join(File.dirname(File.dirname(__FILE__)),"test")
|
68
|
+
system("cat "+file+" | ruby "+TEST+"/test_stdin.rb > stdin_test.out")
|
69
|
+
out = File.open("expected.out","w")
|
70
|
+
Bio::Faster.new(file).each_record do |seq|
|
71
|
+
out.write seq.to_s+"\n"
|
72
|
+
end
|
73
|
+
out.close()
|
74
|
+
md5_stdin = Digest::MD5.file("stdin_test.out")
|
75
|
+
md5_expected = Digest::MD5.file("expected.out")
|
76
|
+
md5_stdin.should == md5_expected
|
77
|
+
FileUtils.rm "stdin_test.out"
|
78
|
+
FileUtils.rm "expected.out"
|
79
|
+
end
|
45
80
|
|
46
81
|
end
|
47
82
|
|
data/test/test_stdin.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bio-faster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-04-27 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
16
|
-
requirement: &
|
16
|
+
requirement: &2157623240 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2157623240
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: shoulda
|
27
|
-
requirement: &
|
27
|
+
requirement: &2157622320 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2157622320
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &2157621820 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2157621820
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &2157621200 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2157621200
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rcov
|
60
|
-
requirement: &
|
60
|
+
requirement: &2157620460 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2157620460
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bio
|
71
|
-
requirement: &
|
71
|
+
requirement: &2157619740 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.4.2
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2157619740
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec
|
82
|
-
requirement: &
|
82
|
+
requirement: &2157619000 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2157619000
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: ffi
|
93
|
-
requirement: &
|
93
|
+
requirement: &2157618200 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2157618200
|
102
102
|
description: A fast parser for FastQ files
|
103
103
|
email: francesco.strozzi@gmail.com
|
104
104
|
executables: []
|
@@ -166,6 +166,7 @@ files:
|
|
166
166
|
- test/data/formats/wrapping_as_illumina.fastq
|
167
167
|
- test/data/formats/wrapping_as_sanger.fastq
|
168
168
|
- test/data/formats/wrapping_as_solexa.fastq
|
169
|
+
- test/test_stdin.rb
|
169
170
|
homepage: http://github.com/fstrozzi/bioruby-faster
|
170
171
|
licenses:
|
171
172
|
- MIT
|
@@ -181,7 +182,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
181
182
|
version: '0'
|
182
183
|
segments:
|
183
184
|
- 0
|
184
|
-
hash:
|
185
|
+
hash: -1208999662832865297
|
185
186
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
187
|
none: false
|
187
188
|
requirements:
|