bio-faster 0.2.2 → 0.4.2
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/.travis.yml +2 -3
- data/Gemfile +2 -0
- data/Gemfile.lock +2 -0
- data/LICENSE.txt +1 -1
- data/README.md +2 -3
- data/Rakefile +9 -15
- data/VERSION +1 -1
- data/bio-faster.gemspec +56 -12
- data/ext/faster.c +115 -52
- data/ext/mkrf_conf.rb +40 -0
- data/lib/bio-faster.rb +5 -4
- data/lib/bio/faster.rb +57 -0
- data/lib/bio/faster/library.rb +26 -0
- data/spec/fastq_error_spec.rb +55 -0
- data/spec/parser_spec.rb +28 -116
- data/test/data/errors/error_header.fastq +20 -0
- data/test/data/errors/error_long_qual.fastq +20 -0
- data/test/data/errors/error_qual_del.fastq +20 -0
- data/test/data/errors/error_qual_escape.fastq +20 -0
- data/test/data/errors/error_qual_null.fastq +0 -0
- data/test/data/errors/error_qual_space.fastq +20 -0
- data/test/data/errors/error_qual_tab.fastq +20 -0
- data/test/data/errors/error_qual_unit_sep.fastq +20 -0
- data/test/data/errors/error_qual_vtab.fastq +20 -0
- data/test/data/errors/error_spaces.fastq +20 -0
- data/test/data/errors/error_tabs.fastq +21 -0
- data/test/data/errors/error_trunc_at_qual.fastq +19 -0
- data/test/data/errors/error_trunc_at_seq.fastq +18 -0
- data/test/data/errors/error_trunc_in_qual.fastq +20 -0
- data/test/data/errors/error_trunc_in_seq.fastq +18 -0
- data/test/data/formats/illumina_full_range_as_illumina.fastq +8 -0
- data/test/data/formats/illumina_full_range_as_sanger.fastq +8 -0
- data/test/data/formats/illumina_full_range_as_solexa.fastq +8 -0
- data/test/data/formats/illumina_full_range_original_illumina.fastq +8 -0
- data/test/data/formats/longreads_as_illumina.fastq +40 -0
- data/test/data/formats/longreads_as_sanger.fastq +40 -0
- data/test/data/formats/longreads_as_solexa.fastq +40 -0
- data/test/data/formats/misc_dna_as_illumina.fastq +16 -0
- data/test/data/formats/misc_dna_as_sanger.fastq +16 -0
- data/test/data/formats/misc_dna_as_solexa.fastq +16 -0
- data/test/data/formats/misc_dna_original_sanger.fastq +16 -0
- data/test/data/formats/misc_rna_as_illumina.fastq +16 -0
- data/test/data/formats/misc_rna_as_sanger.fastq +16 -0
- data/test/data/formats/misc_rna_as_solexa.fastq +16 -0
- data/test/data/formats/misc_rna_original_sanger.fastq +16 -0
- data/test/data/formats/sanger_full_range_as_illumina.fastq +8 -0
- data/test/data/formats/sanger_full_range_as_sanger.fastq +8 -0
- data/test/data/formats/sanger_full_range_as_solexa.fastq +8 -0
- data/test/data/formats/sanger_full_range_original_sanger.fastq +8 -0
- data/test/data/formats/solexa_full_range_as_illumina.fastq +8 -0
- data/test/data/formats/solexa_full_range_as_sanger.fastq +8 -0
- data/test/data/formats/solexa_full_range_as_solexa.fastq +8 -0
- data/test/data/formats/solexa_full_range_original_solexa.fastq +8 -0
- data/test/data/formats/wrapping_as_illumina.fastq +12 -0
- data/test/data/formats/wrapping_as_sanger.fastq +12 -0
- data/test/data/formats/wrapping_as_solexa.fastq +12 -0
- metadata +88 -24
- data/ext/extconf.rb +0 -7
- data/ext/kseq.h +0 -223
- data/test/data/sample.fasta +0 -10
- data/test/data/sample.fastq +0 -24
- data/test/data/sample.fastq.gz +0 -0
- data/test/data/sff_sample.fastq +0 -16
data/lib/bio-faster.rb
CHANGED
data/lib/bio/faster.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# Copyright(C) 2012 Francesco Strozzi <francesco.strozzi@gmail.com>
|
4
|
+
#
|
5
|
+
|
6
|
+
module Bio
|
7
|
+
|
8
|
+
class Faster
|
9
|
+
|
10
|
+
extend FFI::Library
|
11
|
+
|
12
|
+
ffi_lib Bio::Faster::Library.load
|
13
|
+
|
14
|
+
attr_accessor :file
|
15
|
+
attr_accessor :encoding
|
16
|
+
def initialize(file, encoding = :sanger)
|
17
|
+
self.file = file
|
18
|
+
self.encoding = encoding
|
19
|
+
end
|
20
|
+
|
21
|
+
class FastQRecord < FFI::Struct
|
22
|
+
layout :id, :pointer,
|
23
|
+
:seq, :pointer,
|
24
|
+
:quality, :pointer,
|
25
|
+
:raw_quality, :pointer,
|
26
|
+
:filename, :pointer,
|
27
|
+
:stream, :pointer,
|
28
|
+
:line, :pointer,
|
29
|
+
:bad_chars, :pointer
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
attach_function :fastQ_iterator, [FastQRecord, :int], :int
|
34
|
+
|
35
|
+
def each_record
|
36
|
+
raise ArgumentError, "File #{self.file} does not exist" unless File.exists? self.file
|
37
|
+
record = FastQRecord.new
|
38
|
+
scale_factor = nil
|
39
|
+
case self.encoding
|
40
|
+
when :sanger then scale_factor = 33
|
41
|
+
when :solexa then scale_factor = 64
|
42
|
+
end
|
43
|
+
record[:filename] = FFI::MemoryPointer.from_string self.file
|
44
|
+
while (result = Bio::Faster.fastQ_iterator(record,scale_factor)) == 1
|
45
|
+
yield [record[:id].read_string,record[:seq].read_string,record[:quality].read_array_of_int(record[:raw_quality].read_string.length)]
|
46
|
+
end
|
47
|
+
case result
|
48
|
+
when -1 then raise RuntimeError, "Bad formatted FastQ file!"
|
49
|
+
when -2 then raise RuntimeError, "Sequence or quality is truncated!"
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Bio
|
2
|
+
class Faster
|
3
|
+
class Library
|
4
|
+
|
5
|
+
require 'rbconfig'
|
6
|
+
|
7
|
+
def self.lib_extension
|
8
|
+
case RbConfig::CONFIG['host_os']
|
9
|
+
when /linux/ then return 'so'
|
10
|
+
when /darwin/ then return 'dylib'
|
11
|
+
else raise NotImplementedError, "Native library is not available for Windows platform"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Load the correct library for the OS system in use
|
16
|
+
# @return [String] the absolute path for the filename of the shared library
|
17
|
+
# @note this method is called automatically when the module is loaded
|
18
|
+
def self.load
|
19
|
+
path = File.expand_path File.dirname(__FILE__)
|
20
|
+
path.gsub!(/lib\/bio\/faster/,'ext')
|
21
|
+
File.join(path,"libfaster.#{self.lib_extension}")
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Bio::Faster do
|
4
|
+
|
5
|
+
describe "#each_record error handling" do
|
6
|
+
|
7
|
+
it "should raise an error if the header is wrong" do
|
8
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_header.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should raise and error if there is a space in the quality string" do
|
12
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_qual_space.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should raise and error if there is a tab in the quality string" do
|
16
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_qual_tab.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should raise and error if there is a v-tab in the quality string" do
|
20
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_qual_vtab.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should raise and error if there is a space in the sequence string" do
|
24
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_spaces.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should raise and error if there is a tab in the sequence string" do
|
28
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_tabs.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should raise and error if there is a delete char in the quality string" do
|
32
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_qual_del.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should raise and error if there is an escape in the quality string" do
|
36
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_qual_escape.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should raise and error if there is a unit separator char in the quality string" do
|
40
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_qual_unit_sep.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should raise an error if sequence and quality are truncated or different in length" do
|
44
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_trunc_at_qual.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
45
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_trunc_at_seq.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
46
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_qual_null.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
47
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_long_qual.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
48
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_trunc_in_seq.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
49
|
+
expect {Bio::Faster.new(File.join(TEST_DATA+"/errors/","error_trunc_in_qual.fastq")).each_record {|seq|}}.to raise_error(RuntimeError)
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
data/spec/parser_spec.rb
CHANGED
@@ -2,136 +2,48 @@ require 'helper'
|
|
2
2
|
|
3
3
|
describe Bio::Faster do
|
4
4
|
|
5
|
-
describe "#
|
6
|
-
|
7
|
-
it "
|
8
|
-
|
9
|
-
res.should == true
|
10
|
-
res = Bio::Faster.parse(File.join(TEST_DATA,"sample.fasta")) {|seq|}
|
11
|
-
res.should == true
|
12
|
-
end
|
13
|
-
|
14
|
-
it "needs a valid block to parse files" do
|
15
|
-
expect { Bio::Faster.parse(File.join(TEST_DATA,"sample.fastq")) }.to raise_error(ArgumentError)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "throws an error if file does not exists" do
|
19
|
-
expect { Bio::Faster.parse(File.join(TEST_DATA,"dummy.fastq")) }.to raise_error(ArgumentError)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "returns an array with id, comment, sequence and an array with qualities (FastQ only)" do
|
23
|
-
Bio::Faster.parse(File.join(TEST_DATA,"sample.fastq")) do |seq|
|
24
|
-
seq.class.should == Array
|
25
|
-
seq.size.should == 4
|
26
|
-
seq[-1].class.should == Array
|
27
|
-
end
|
28
|
-
|
29
|
-
Bio::Faster.parse(File.join(TEST_DATA,"sample.fasta")) do |seq|
|
5
|
+
describe "#each_record" do
|
6
|
+
|
7
|
+
it "should read a FastQ file returning an array with sequence data" do
|
8
|
+
Bio::Faster.new(TEST_DATA+"/formats/illumina_full_range_as_illumina.fastq").each_record do |seq|
|
30
9
|
seq.class.should == Array
|
31
|
-
seq.size.should == 3
|
32
10
|
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
it "reads gzipped files" do
|
37
|
-
res = Bio::Faster.parse(File.join(TEST_DATA,"sample.fastq")) {|seq|}
|
38
|
-
res.should == true
|
39
|
-
end
|
40
|
-
|
41
|
-
it "parse correctly FastQ files" do
|
42
|
-
faster_res = []
|
43
|
-
Bio::Faster.parse(File.join(TEST_DATA,"sample.fastq")) {|seq| faster_res << seq}
|
44
|
-
faster_res[0][0].should == "HISEQ1:86:D0306ACXX:2:1101:20970:17588"
|
45
|
-
faster_res[0][1].should == "1:N:0:CTTGTA"
|
46
|
-
faster_res[0][2].should == "CGGTGCTGTTGTTATGCTGATGCTTATTAGTGCAAGTGTAGCTCCTCCGATTAGATGAATTAACAGGTGTCCTGCAGTAATGTTGGCTGTTAGTCGTAC"
|
47
|
-
|
48
|
-
faster_res[-1][0].should == "HISEQ1:86:D0306ACXX:2:1101:1411:17830"
|
49
|
-
faster_res[-1][1].should == "1:Y:0:CTTGTA"
|
50
|
-
faster_res[-1][2].should == "CGGCGGGCGTGGGGAGAGAGCTATGAAGGCCTCAGGGAAGCTTCGAGAGTATAAGGTGTTGGGGTGCTGCCTGCCAACCCCCAAATTCCACACACCACC"
|
51
11
|
end
|
52
|
-
|
53
|
-
it "parse correctly compressed FastQ files" do
|
54
|
-
faster_res = []
|
55
|
-
Bio::Faster.parse(File.join(TEST_DATA,"sample.fastq.gz")) {|seq| faster_res << seq}
|
56
|
-
faster_res[0][0].should == "HISEQ1:86:D0306ACXX:2:1101:20970:17588"
|
57
|
-
faster_res[0][1].should == "1:N:0:CTTGTA"
|
58
|
-
faster_res[0][2].should == "CGGTGCTGTTGTTATGCTGATGCTTATTAGTGCAAGTGTAGCTCCTCCGATTAGATGAATTAACAGGTGTCCTGCAGTAATGTTGGCTGTTAGTCGTAC"
|
59
|
-
|
60
|
-
faster_res[-1][0].should == "HISEQ1:86:D0306ACXX:2:1101:1411:17830"
|
61
|
-
faster_res[-1][1].should == "1:Y:0:CTTGTA"
|
62
|
-
faster_res[-1][2].should == "CGGCGGGCGTGGGGAGAGAGCTATGAAGGCCTCAGGGAAGCTTCGAGAGTATAAGGTGTTGGGGTGCTGCCTGCCAACCCCCAAATTCCACACACCACC"
|
63
|
-
end
|
64
|
-
|
65
12
|
|
66
|
-
it "
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
faster_res[-1][0].should == "seq4"
|
74
|
-
faster_res[-1][1].should == nil
|
75
|
-
faster_res[-1][2].should == "mgltrrealssiaavggekalkdalavlggps"
|
76
|
-
end
|
77
|
-
|
78
|
-
it "can return the sequence data in a more friendly way" do
|
79
|
-
Bio::Faster.parse(File.join(TEST_DATA,"sample.fastq")) do |sequence_id, comment, sequence, quality|
|
80
|
-
sequence_id.should == "HISEQ1:86:D0306ACXX:2:1101:20970:17588"
|
81
|
-
comment.should == "1:N:0:CTTGTA"
|
82
|
-
sequence.should == "CGGTGCTGTTGTTATGCTGATGCTTATTAGTGCAAGTGTAGCTCCTCCGATTAGATGAATTAACAGGTGTCCTGCAGTAATGTTGGCTGTTAGTCGTAC"
|
83
|
-
quality.class.should == Array
|
84
|
-
break
|
13
|
+
it "should handle correctly Phred64 qualities (Solexa)" do
|
14
|
+
file = TEST_DATA+"/formats/misc_rna_as_solexa.fastq"
|
15
|
+
bioruby_data = []
|
16
|
+
Bio::FlatFile.open(File.open(file)).each_entry do |seq|
|
17
|
+
seq.format = "fastq-solexa"
|
18
|
+
bioruby_data << [seq.entry_id,seq.seq,seq.qualities]
|
85
19
|
end
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
quality.should == nil # it is a Fasta file, so no quality
|
91
|
-
sequence_id.should == "seq1"
|
92
|
-
comment.should == "comment1"
|
93
|
-
sequence.should == "AGCAATTTCCCTTTTCCTGTCCTTTTTATAACATTGTGGAGGAAGACGGCAGCATAAAAAGGACAGTATTTGATTAAAAAATGATAAAAATTTTCAAAC"
|
94
|
-
break
|
20
|
+
faster_data = []
|
21
|
+
Bio::Faster.new(file, :solexa).each_record do |seq|
|
22
|
+
seq[0] = seq[0].split(" ").first
|
23
|
+
faster_data << seq
|
95
24
|
end
|
25
|
+
faster_data.should == bioruby_data
|
96
26
|
end
|
97
|
-
|
98
|
-
|
99
|
-
describe "quality conversion for FastQ files (Sanger/Phred only)" do
|
100
27
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
Bio::FlatFile.open(Bio::Fastq,File.open(
|
106
|
-
|
28
|
+
it "should read different FastQ formats" do
|
29
|
+
files = Dir.glob(TEST_DATA+"/formats/*.fastq")
|
30
|
+
files.each do |file|
|
31
|
+
bioruby_data = []
|
32
|
+
Bio::FlatFile.open(Bio::Fastq,File.open(file)).each_entry do |seq|
|
33
|
+
bioruby_data << [seq.entry_id,seq.seq,seq.qualities]
|
107
34
|
end
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
35
|
+
faster_data = []
|
36
|
+
Bio::Faster.new(file).each_record do |seq|
|
37
|
+
seq[0] = seq[0].split(" ").first
|
38
|
+
faster_data << seq
|
112
39
|
end
|
113
|
-
|
114
|
-
|
40
|
+
faster_data.should == bioruby_data
|
115
41
|
end
|
116
42
|
|
117
|
-
|
118
|
-
|
119
|
-
bioruby_quals = []
|
120
|
-
# standard Quality conversion as done in BioRuby Bio::FastQ
|
121
|
-
Bio::FlatFile.open(Bio::Fastq,File.open(File.join(TEST_DATA,"sff_sample.fastq"))).each_entry do |seq|
|
122
|
-
bioruby_quals << seq.qualities
|
123
|
-
end
|
43
|
+
end
|
124
44
|
|
125
|
-
faster_quals = []
|
126
|
-
Bio::Faster.parse(File.join(TEST_DATA,"sff_sample.fastq")) do |sequence_id, comment, sequence, quality|
|
127
|
-
faster_quals << quality
|
128
|
-
end
|
129
|
-
faster_quals.should == bioruby_quals
|
130
45
|
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
134
|
-
|
135
46
|
end
|
47
|
+
|
136
48
|
|
137
49
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
SLXA-B3_649_FC8437_R1_1_1_610_79
|
2
|
+
GATGTGCAATACCTTTGTAGAGGAA
|
3
|
+
+SLXA-B3_649_FC8437_R1_1_1_610_79
|
4
|
+
YYYYYYYYYYYYYYYYYYWYWYYSU
|
5
|
+
@SLXA-B3_649_FC8437_R1_1_1_397_389
|
6
|
+
GGTTTGAGAAAGAGAAATGAGATAA
|
7
|
+
+SLXA-B3_649_FC8437_R1_1_1_397_389
|
8
|
+
YYYYYYYYYWYYYYWWYYYWYWYWW
|
9
|
+
@SLXA-B3_649_FC8437_R1_1_1_850_123
|
10
|
+
GAGGGTGTTGATCATGATGATGGCG
|
11
|
+
+SLXA-B3_649_FC8437_R1_1_1_850_123
|
12
|
+
YYYYYYYYYYYYYWYYWYYSYYYSY
|
13
|
+
@SLXA-B3_649_FC8437_R1_1_1_362_549
|
14
|
+
GGAAACAAAGTTTTTCTCAACATAG
|
15
|
+
+SLXA-B3_649_FC8437_R1_1_1_362_549
|
16
|
+
YYYYYYYYYYYYYYYYYYWWWWYWYY
|
17
|
+
@SLXA-B3_649_FC8437_R1_1_1_183_714
|
18
|
+
GTATTATTTAATGGCATACACTCAA
|
19
|
+
+SLXA-B3_649_FC8437_R1_1_1_183_714
|
20
|
+
YYYYYYYYYYWYYYYWYWWUWWWQQ
|
@@ -0,0 +1,20 @@
|
|
1
|
+
@SLXA-B3_649_FC8437_R1_1_1_610_79
|
2
|
+
GATGTGCAATACCTTTGTAGAGGAA
|
3
|
+
+SLXA-B3_649_FC8437_R1_1_1_610_79
|
4
|
+
YYYYYYYYYYYYYYYYYYWYWYYSU
|
5
|
+
@SLXA-B3_649_FC8437_R1_1_1_397_389
|
6
|
+
GGTTTGAGAAAGAGAAATGAGATAA
|
7
|
+
+SLXA-B3_649_FC8437_R1_1_1_397_389
|
8
|
+
YYYYYYYYYWYYYYWWYYYWYWYWW
|
9
|
+
@SLXA-B3_649_FC8437_R1_1_1_850_123
|
10
|
+
GAGGGTGTTGATCATGATGATGGCG
|
11
|
+
+SLXA-B3_649_FC8437_R1_1_1_850_123
|
12
|
+
YYYYYYYYYYYYYWYYWYYSYYYSY
|
13
|
+
@SLXA-B3_649_FC8437_R1_1_1_362_549
|
14
|
+
GGAAACAAAGTTTTTCTCAACATAG
|
15
|
+
+SLXA-B3_649_FC8437_R1_1_1_362_549
|
16
|
+
YYYYYYYYYYYYYYYYYYWWWWYWYY
|
17
|
+
@SLXA-B3_649_FC8437_R1_1_1_183_714
|
18
|
+
GTATTATTTAATGGCATACACTCAA
|
19
|
+
+SLXA-B3_649_FC8437_R1_1_1_183_714
|
20
|
+
YYYYYYYYYYWYYYYWYWWUWWWQQ
|
@@ -0,0 +1,20 @@
|
|
1
|
+
@SLXA-B3_649_FC8437_R1_1_1_610_79
|
2
|
+
GATGTGCAATACCTTTGTAGAGGAA
|
3
|
+
+SLXA-B3_649_FC8437_R1_1_1_610_79
|
4
|
+
YYYYYYYYYYYYYYYYYYWYWYYSU
|
5
|
+
@SLXA-B3_649_FC8437_R1_1_1_397_389
|
6
|
+
GGTTTGAGAAAGAGAAATGAGATAA
|
7
|
+
+SLXA-B3_649_FC8437_R1_1_1_397_389
|
8
|
+
YYYYYYYYYWYYYYWWYYYWYWYWW
|
9
|
+
@SLXA-B3_649_FC8437_R1_1_1_850_123
|
10
|
+
GAGGGTGTTGATCATGATGATGGCG
|
11
|
+
+SLXA-B3_649_FC8437_R1_1_1_850_123
|
12
|
+
YYYYYYYYYYYYYWYYWYYSYYYSY
|
13
|
+
@SLXA-B3_649_FC8437_R1_1_1_362_549
|
14
|
+
GGAAACAAAGTTTTTCTCAACATAG
|
15
|
+
+SLXA-B3_649_FC8437_R1_1_1_362_549
|
16
|
+
YYYYYYYYYYYYYYYYYWWWWYWY
|
17
|
+
@SLXA-B3_649_FC8437_R1_1_1_183_714
|
18
|
+
GTATTATTTAATGGCATACACTCAA
|
19
|
+
+SLXA-B3_649_FC8437_R1_1_1_183_714
|
20
|
+
YYYYYYYYYYWYYYYWYWWUWWWQQ
|
@@ -0,0 +1,20 @@
|
|
1
|
+
@SLXA-B3_649_FC8437_R1_1_1_610_79
|
2
|
+
GATGTGCAATACCTTTGTAGAGGAA
|
3
|
+
+SLXA-B3_649_FC8437_R1_1_1_610_79
|
4
|
+
YYYYYYYYYYYYYYYYYYWYWYYSU
|
5
|
+
@SLXA-B3_649_FC8437_R1_1_1_397_389
|
6
|
+
GGTTTGAGAAAGAGAAATGAGATAA
|
7
|
+
+SLXA-B3_649_FC8437_R1_1_1_397_389
|
8
|
+
YYYYYYYYYWYYYYWWYYYWYWYWW
|
9
|
+
@SLXA-B3_649_FC8437_R1_1_1_850_123
|
10
|
+
GAGGGTGTTGATCATGATGATGGCG
|
11
|
+
+SLXA-B3_649_FC8437_R1_1_1_850_123
|
12
|
+
YYYYYYYYYYYYYWYYWYYSYYYSY
|
13
|
+
@SLXA-B3_649_FC8437_R1_1_1_362_549
|
14
|
+
GGAAACAAAGTTTTTCTCAACATAG
|
15
|
+
+SLXA-B3_649_FC8437_R1_1_1_362_549
|
16
|
+
YYYYYYYYYYYYYYYYYYWWWWYWY
|
17
|
+
@SLXA-B3_649_FC8437_R1_1_1_183_714
|
18
|
+
GTATTATTTAATGGCATACACTCAA
|
19
|
+
+SLXA-B3_649_FC8437_R1_1_1_183_714
|
20
|
+
YYYYYYYYYWYYYYWYWWUWWWQQ
|
Binary file
|
@@ -0,0 +1,20 @@
|
|
1
|
+
@SLXA-B3_649_FC8437_R1_1_1_610_79
|
2
|
+
GATGTGCAATACCTTTGTAGAGGAA
|
3
|
+
+SLXA-B3_649_FC8437_R1_1_1_610_79
|
4
|
+
YYYYYYYYYYYYYYYYYYWYWYYSU
|
5
|
+
@SLXA-B3_649_FC8437_R1_1_1_397_389
|
6
|
+
GGTTTGAGAAAGAGAAATGAGATAA
|
7
|
+
+SLXA-B3_649_FC8437_R1_1_1_397_389
|
8
|
+
YYYYYYYYYWYYYYWWYYYWYWYWW
|
9
|
+
@SLXA-B3_649_FC8437_R1_1_1_850_123
|
10
|
+
GAGGGTGTTGATCATGATGATGGCG
|
11
|
+
+SLXA-B3_649_FC8437_R1_1_1_850_123
|
12
|
+
YYYYYYYYYYYYYWYYWYYSYYYSY
|
13
|
+
@SLXA-B3_649_FC8437_R1_1_1_362_549
|
14
|
+
GGAAACAAAGTTTTTCTCAACATAG
|
15
|
+
+SLXA-B3_649_FC8437_R1_1_1_362_549
|
16
|
+
YYYYYYYYYYYYYYYYYY WWWYWY
|
17
|
+
@SLXA-B3_649_FC8437_R1_1_1_183_714
|
18
|
+
GTATTATTTAATGGCATACACTCAA
|
19
|
+
+SLXA-B3_649_FC8437_R1_1_1_183_714
|
20
|
+
YYYYYYYYYYWYYYYWYWWUWWWQQ
|
@@ -0,0 +1,20 @@
|
|
1
|
+
@SLXA-B3_649_FC8437_R1_1_1_610_79
|
2
|
+
GATGTGCAATACCTTTGTAGAGGAA
|
3
|
+
+SLXA-B3_649_FC8437_R1_1_1_610_79
|
4
|
+
YYYYYYYYYYYYYYYYYYWYWYYSU
|
5
|
+
@SLXA-B3_649_FC8437_R1_1_1_397_389
|
6
|
+
GGTTTGAGAAAGAGAAATGAGATAA
|
7
|
+
+SLXA-B3_649_FC8437_R1_1_1_397_389
|
8
|
+
YYYYYYYYYWYYYYWWYYYWYWYWW
|
9
|
+
@SLXA-B3_649_FC8437_R1_1_1_850_123
|
10
|
+
GAGGGTGTTGATCATGATGATGGCG
|
11
|
+
+SLXA-B3_649_FC8437_R1_1_1_850_123
|
12
|
+
YYYYYYYYYYYYYWYYWYYSYYYSY
|
13
|
+
@SLXA-B3_649_FC8437_R1_1_1_362_549
|
14
|
+
GGAAACAAAGTTTTTCTCAACATAG
|
15
|
+
+SLXA-B3_649_FC8437_R1_1_1_362_549
|
16
|
+
YYYYYYYYYYYYYYYYYYWWWWYWY
|
17
|
+
@SLXA-B3_649_FC8437_R1_1_1_183_714
|
18
|
+
GTATTATTTAATGGCATACACTCAA
|
19
|
+
+SLXA-B3_649_FC8437_R1_1_1_183_714
|
20
|
+
YYYYYYYYYY YYYYWYWWUWWWQQ
|