basil 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ pkg/
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ rspec -c -f d
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.8.7@basil --create
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+ gemspec
3
+ gem "dna"
4
+ gem "awesome_print"
5
+ gem "trollop"
6
+ gem "rspec"
7
+ gem "awesome_print"
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/basil.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require 'basil/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'basil'
7
+ s.version = Basil::VERSION
8
+ s.authors = ["Austin G. Davis-Richardson"]
9
+ s.email = ["harekrishna@gmail.com"]
10
+ s.homepage = "http://github.com/audy/basil"
11
+ s.summary = 'HTPS demultiplexer'
12
+ s.description = 'Split multiplexed high-throughput sequencing reads by barcode.'
13
+ s.rubyforge_project = "basil"
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+ s.add_dependency('dna')
19
+ s.add_dependency('trollop')
20
+ s.add_dependency('rspec')
21
+ s.add_dependency('bundler')
22
+ end
data/bin/basil CHANGED
@@ -1,29 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'ostruct'
4
- require 'optparse'
5
- require 'pp'
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'basil'))
6
4
 
7
- require 'bundler'
8
- Bundler.require :default
9
-
10
- opts = Trollop::options do
11
-
12
- version "Basil PRE-RELEASE"
13
- banner <<-EOS
14
- Basil is an HTPS demultiplexer
15
-
16
- Usage:
17
- basil [options] -i <reads/directory> -o <output directory>
18
- where [options] are:
19
- EOS
20
-
21
- opt :barcodes, 'barcodes definition file', short: 'b', type: String
22
- opt :reads, 'reads (fastq/fasta/qseq)', short: 'i'
23
- opt :illumina, 'Illumina output directory', short: 'd'
24
- opt :pretrim, 'trim N nucleotides from start', type: Integer
25
- opt :afttrim, 'trim N nucleotides from end', type: Integer
26
- opt :out, 'output directory', short: 'o', type: String
27
- end
28
-
29
- filename = ARGV.shift
5
+ Basil::CLI.run!
data/lib/basil.rb CHANGED
@@ -1,3 +1,10 @@
1
+ require 'pp'
2
+ require 'awesome_print'
3
+ require 'bundler'
4
+
5
+ Bundler.require :default
6
+
7
+
1
8
  Dir.glob(File.join(File.dirname(__FILE__), 'basil', '*.rb')).each do |f|
2
9
  require f
3
10
  end
@@ -0,0 +1,3 @@
1
+ class Barcodes
2
+ # TODO add commonly used barcodes where copyright permits.
3
+ end
@@ -0,0 +1,60 @@
1
+ module Basil
2
+
3
+ class Basil
4
+
5
+ #
6
+ # Gets Basil ready, must specify a barcodes hash with Basil.new barcodes
7
+ #
8
+ # Barcodes hash has regexp for values. If not, strings are converted to regexp
9
+ # Barcode names are keys, used to generate filenames.
10
+ #
11
+ def initialize(barcodes)
12
+ @barcodes = Hash.new
13
+ barcodes.each_pair do |k, v|
14
+ @barcodes[k] = Regexp.new "^#{v}", true
15
+ end
16
+ @barcodes
17
+ end
18
+
19
+ #
20
+ # Finds the barcode (if present)
21
+ #
22
+ # If the barcode is present, returns 'name',
23
+ # and the sequence with the barcode removed
24
+ # If not, returns nil
25
+ #
26
+ def recognize(string)
27
+ matches = @barcodes.each_pair.collect do |k, v|
28
+ k if string[v]
29
+ end
30
+
31
+ matches.compact!
32
+
33
+ if matches.length > 1
34
+ raise Exception, "sequence #{string} has more than one match"
35
+ elsif matches.length == 0
36
+ nil
37
+ else
38
+ barcode = matches.first
39
+ sequence = string.gsub(@barcodes[barcode], '')
40
+ [barcode, sequence]
41
+ end
42
+ end
43
+
44
+ #
45
+ # Parses a barcodes file
46
+ #
47
+ # barcodes are specified in CSV file
48
+ # (unless specified otherwise with :sep => '')
49
+ # barcode_name,sequence
50
+ # the barcode_name will be used to generate the filename
51
+ #
52
+ def self.parse_barcodes(handle, args={})
53
+ sep = args[:sep] || ","
54
+ barcodes = handle.each.collect do |line|
55
+ name, barcode = line.strip.split(sep)
56
+ end
57
+ Hash[*barcodes.flatten]
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,50 @@
1
+ module Basil
2
+ class Buffer
3
+
4
+ #
5
+ # Create a new buffer
6
+ #
7
+ def initialize(args={})
8
+ @buffer = Hash.new { |h, k| h[k] = Array.new }
9
+ @buffer_max = args[:buffer_max] || 100_000
10
+ end
11
+
12
+ #
13
+ # Add an object to the buffer
14
+ #
15
+ def add_to(bucket, obj)
16
+
17
+ @buffer[bucket] << obj
18
+
19
+ if @buffer[bucket].length > @buffer_max
20
+ # write out
21
+ File.open(bucket, 'a+') do |out|
22
+ @buffer[bucket].each do |v|
23
+ out.puts v
24
+ end
25
+ end
26
+
27
+ # clear that bucket
28
+ @buffer[bucket].clear
29
+ end
30
+ end
31
+
32
+ def [](k)
33
+ @buffer[k]
34
+ end
35
+
36
+ #
37
+ # Writes out leftover objects
38
+ #
39
+ def finalize
40
+ @buffer.each_key do |bucket|
41
+ File.open(bucket, 'a+') do |out|
42
+ @buffer[bucket].each do |v|
43
+ out.puts v
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ end
50
+ end
data/lib/basil/cli.rb ADDED
@@ -0,0 +1,99 @@
1
+ module Basil
2
+ class CLI
3
+ class << self
4
+
5
+ def run!
6
+
7
+ opts = parse_arguments
8
+ barcodes = parse_barcodes opts[:barcodes]
9
+ out_dir = opts[:out]
10
+ buffer = Buffer.new
11
+ basil = Basil.new(barcodes)
12
+ handles = Array.new
13
+
14
+ if opts[:illumina]
15
+ if pretrim
16
+ raise "pretrim is not supported with paired-end data"
17
+ end
18
+ else
19
+ reads_handle = File.open(opts[:reads])
20
+ handles << reads_handle
21
+ records_format = records.format
22
+ pretrim = opts[:pretrim] || 0
23
+ end
24
+
25
+ if File.exist? out_dir
26
+ $stderr.puts "#{out_dir} already exists -- delete or move!"
27
+ exit
28
+ else
29
+ Dir.mkdir(out_dir)
30
+ end
31
+
32
+ records.each do |record|
33
+
34
+ match = basil.recognize record.sequence
35
+ barcode, trimmed_sequence = match if match
36
+
37
+ unless match
38
+ barcode = 'unknown'
39
+ trimmed_sequence = record.sequence
40
+ end
41
+
42
+ new_record = Fasta.new :name => record.name, :sequence => trimmed_sequence
43
+ buffer.add_to File.join(out_dir, barcode + ".#{records_format}"), new_record
44
+ end
45
+
46
+ # Finish up
47
+ buffer.finalize
48
+ handles.collect { |x| x.close }
49
+ end
50
+
51
+ def parse_barcodes barcodes
52
+ File.open(barcodes) { |h| Basil.parse_barcodes h }
53
+ end
54
+
55
+ #
56
+ # For parsing illumina-generated output directories containing
57
+ # paired QSEQ files
58
+ #
59
+ def parse_illumina_directory dir
60
+ files = Dir[File.join(dir, '*')]
61
+
62
+ files.collect do |x|
63
+ m = File.basename(x).match(/s_(\d)_(\d)_(\d*)_qseq\.txt/)
64
+ { :lane => m[1], :pair => m[2], :n => m[3], :filename => File.join(dir, m[0]) }
65
+ end.group_by { |x| x[:n] }
66
+ end
67
+
68
+ def parse_arguments
69
+ opts = Trollop::options do
70
+
71
+ version "PRE-RELEASE"
72
+ banner <<-EOS
73
+ Basil is an HTPS demultiplexer
74
+
75
+ Version: #{version}
76
+
77
+ Usage:
78
+ basil [options] -i <reads/directory> -o <output directory>
79
+ where [options] are:
80
+ EOS
81
+
82
+ opt :barcodes, 'barcodes definition file', :short => 'b', :type => String
83
+ opt :reads, 'reads (fastq/fasta/qseq)', :short => 'i', :type => String
84
+ opt :illumina, 'Illumina output directory', :short => 'd'
85
+ opt :out_fmt, 'Output format (default: same format as input)', :short => 'f'
86
+ opt :pretrim, 'trim N nucleotides from start before searching for barcode', :type => Integer
87
+ opt :out, 'output directory', :short => 'o', :type => String
88
+ end
89
+
90
+ filename = ARGV.shift
91
+ Trollop::die :barcodes, "must specify barcodes" if opts[:barcodes].nil?
92
+ Trollop::die :reads, "must specify reads or Illumina directory" if !(opts[:reads] || opts[:illumina])
93
+ Trollop::die "cannot specify both reads and Illumina directory" if opts[:reads] && opts[:illumina]
94
+ Trollop::die :out, "must specify output directory" if !opts[:out]
95
+ opts
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,3 @@
1
+ module Basil
2
+ VERSION = "0.0.2"
3
+ end
data/readme.md CHANGED
@@ -6,6 +6,42 @@ Yet another tool for splitting barcoded sequences. It had to be done.
6
6
 
7
7
  gem install basil
8
8
 
9
+ ## Features
10
+
11
+ - Trims and separates by barcode
12
+ - Supports unlimited number of barcodes
13
+ - Trimming from left/right end of read
14
+ - Barcodes provided as simple .csv file
15
+ - Support input filetypes:
16
+ - Fastq
17
+ - Fasta
18
+
19
+ ## TODO
20
+
21
+ - Support regexp in barcodes input.
22
+ - QSEQ (Illumina)
23
+
9
24
  ## Usage
10
25
 
11
- basil -h
26
+ Usage:
27
+ basil [options] -i <reads/directory> -o <output directory>
28
+ where [options] are:
29
+ --barcodes, -b <s>: barcodes definition file
30
+ --reads, -i: reads (fastq/fasta/qseq)
31
+ --illumina, -d: Illumina output directory
32
+ --pretrim, -p <i>: trim N nucleotides from start
33
+ --afttrim, -a <i>: trim N nucleotides from end
34
+ --out, -o <s>: output directory
35
+ --version, -v: Print version and exit
36
+ --help, -h: Show this message
37
+
38
+ ## Barcodes file
39
+
40
+ Barcodes are specified in a simple CSV file:
41
+
42
+ barcode_name,barcode_sequence
43
+ my_awesome_barcode,gggggggg
44
+ my_awesomer_barcode,aaaaaaaa
45
+ my_awesomest_barcode,cccccccc
46
+
47
+ (Eventually, I will add built-in support for commonly-used barcodes)
data/spec/basil_spec.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Basil do
3
+ describe Basil::Basil do
4
4
 
5
5
  let (:barcodes) {
6
6
  {
@@ -11,28 +11,47 @@ describe Basil do
11
11
  }
12
12
  }
13
13
 
14
- let (:basil) { Basil.new barcodes }
14
+ let (:basil) { Basil::Basil.new barcodes }
15
15
 
16
- let (:dna) { 'ggggtcatcatcatcatcatcatca' }
16
+ let (:dna) { 'ggggnnnn' }
17
17
 
18
18
  it 'can be created' do
19
19
  barcodes.should_not raise_error TypeError
20
20
  end
21
21
 
22
22
  it 'raises an error if duplicate barcodes are specified' do
23
- Basil.new({ 1 => 'gggg', 2 => 'gggg' }).should raise_error
23
+ Basil::Basil.new({ 1 => 'gggg', 2 => 'gggg' }).should raise_error
24
24
  end
25
25
 
26
26
  it '#recognize returns the name of matched barcode' do
27
- basil.recognize(dna).should == 1
27
+ basil.recognize(dna).first.should == 1
28
+ end
29
+
30
+ it 'accepts regexp for barcodes' do
31
+ basil = Basil::Basil.new({ 1 => /^.GATC/i})
32
+ basil.recognize("NGATC").first.should == 1
33
+ end
34
+
35
+ it 'preserves case sensitivity of regexp' do
36
+ basil = Basil::Basil.new(1 => /^.GATC/)
37
+ basil.recognize("Ngatc").should be_nil
28
38
  end
29
39
 
30
40
  it '#recognize is case insensitive' do
31
- basil.recognize(dna.upcase!).should == 1
41
+ basil.recognize(dna.upcase!).first.should == 1
32
42
  end
33
43
 
34
- it '#recognize does not recognize barcodes in the middle of sequences' do
44
+ it '#recognize ^ is prepended to barcode regexp if strings are provided' do
35
45
  basil.recognize('aggggaaa').should be_nil
36
46
  end
37
-
38
- end
47
+
48
+ it 'trims barcode from sequence' do
49
+ basil.recognize(dna).last.should == 'nnnn'
50
+ end
51
+
52
+ it 'can parse a barcodes.csv file producing a hash' do
53
+ parsed_barcodes = File.open('spec/data/barcodes.csv') { |h| Basil::Basil.parse_barcodes h }
54
+ parsed_barcodes.should == { 'a' => 'a'*7, 'g' => 'g'*7, 'c' => 'c'*7, 't' => 't'*7 }
55
+ end
56
+
57
+ end
data/spec/buffer_spec.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Buffer do
3
+ describe Basil::Buffer do
4
4
 
5
- let (:buffer) { Buffer.new }
5
+ let (:buffer) { Basil::Buffer.new }
6
6
 
7
7
  it 'can be created' do
8
8
  buffer.should_not raise_error TypeError
data/spec/cli_spec.rb ADDED
@@ -0,0 +1,28 @@
1
+ describe Basil::CLI do
2
+
3
+ it 'should be executable' do
4
+ `bin/basil 2> /dev/null`
5
+ $?.should_not == 0
6
+ end
7
+
8
+ it 'should have a help menu' do
9
+ `bin/basil --help`.include?('help').should be_true
10
+ end
11
+
12
+ it 'should parse barcodes.csv files' do
13
+ barcodes = Basil::CLI.parse_barcodes 'spec/data/barcodes.csv'
14
+ barcodes.should == { "a" => "aaaaaaa", "g" => "ggggggg", "c" => "ccccccc", "t" => "ttttttt"}
15
+ end
16
+
17
+ it 'can parse an illumina output directory' do
18
+ files = Basil::CLI.parse_illumina_directory 'spec/data/illumina'
19
+ directory = {
20
+ "001" => [
21
+ {:lane=>"1", :pair=>"1", :n=>"001", :filename=>"spec/data/illumina/s_1_1_001_qseq.txt"},
22
+ {:lane=>"1", :pair=>"2", :n=>"001", :filename=>"spec/data/illumina/s_1_2_001_qseq.txt"},
23
+ {:lane=>"1", :pair=>"3", :n=>"001", :filename=>"spec/data/illumina/s_1_3_001_qseq.txt"}
24
+ ]
25
+ }
26
+ files.should == directory
27
+ end
28
+ end
@@ -0,0 +1,4 @@
1
+ a,aaaaaaa
2
+ g,ggggggg
3
+ c,ccccccc
4
+ t,ttttttt
@@ -0,0 +1,5 @@
1
+ HWUSI-EAS1700R 5 4 1 975 930 0 2 ....... BBBBBBB 0
2
+ HWUSI-EAS1700R 5 4 1 1051 933 0 2 ....... BBBBBBB 0
3
+ HWUSI-EAS1700R 5 4 1 1233 932 0 2 ....... BBBBBBB 0
4
+ HWUSI-EAS1700R 5 4 1 1266 945 0 2 ....... BBBBBBB 0
5
+ HWUSI-EAS1700R 5 4 1 1373 940 0 2 ....... BBBBBBB 0
@@ -0,0 +1,5 @@
1
+ HWUSI-EAS1700R 5 4 1 975 930 0 2 ....... BBBBBBB 0
2
+ HWUSI-EAS1700R 5 4 1 1051 933 0 2 ....... BBBBBBB 0
3
+ HWUSI-EAS1700R 5 4 1 1233 932 0 2 ....... BBBBBBB 0
4
+ HWUSI-EAS1700R 5 4 1 1266 945 0 2 ....... BBBBBBB 0
5
+ HWUSI-EAS1700R 5 4 1 1373 940 0 2 ....... BBBBBBB 0
@@ -0,0 +1,5 @@
1
+ HWUSI-EAS1700R 5 4 1 975 930 0 2 ....... BBBBBBB 0
2
+ HWUSI-EAS1700R 5 4 1 1051 933 0 2 ....... BBBBBBB 0
3
+ HWUSI-EAS1700R 5 4 1 1233 932 0 2 ....... BBBBBBB 0
4
+ HWUSI-EAS1700R 5 4 1 1266 945 0 2 ....... BBBBBBB 0
5
+ HWUSI-EAS1700R 5 4 1 1373 940 0 2 ....... BBBBBBB 0
@@ -0,0 +1,20 @@
1
+ >1
2
+ AAAAAA
3
+ >2
4
+ GGGGGG
5
+ >3
6
+ TTTTTT
7
+ >4
8
+ CCCCCC
9
+ >5
10
+ AAATTT
11
+ >6
12
+ TTTAAA
13
+ >7
14
+ GGGCCC
15
+ >8
16
+ CCCGGG
17
+ >9
18
+ GAAAAA
19
+ >10
20
+ CAAAAA
@@ -0,0 +1,20 @@
1
+ @a
2
+ aaaaaaa
3
+ +a
4
+ BBBBBBB
5
+ @b
6
+ ttttttt
7
+ +b
8
+ BBBBBBB
9
+ @c
10
+ ccccccc
11
+ @c
12
+ BBBBBBB
13
+ @d
14
+ ggggggg
15
+ @d
16
+ BBBBBBB
17
+ @e
18
+ gagagag
19
+ @e
20
+ BBBBBBB
@@ -0,0 +1,5 @@
1
+ HWUSI-EAS1700R 5 4 1 975 930 0 2 ....... BBBBBBB 0
2
+ HWUSI-EAS1700R 5 4 1 1051 933 0 2 ....... BBBBBBB 0
3
+ HWUSI-EAS1700R 5 4 1 1233 932 0 2 ....... BBBBBBB 0
4
+ HWUSI-EAS1700R 5 4 1 1266 945 0 2 ....... BBBBBBB 0
5
+ HWUSI-EAS1700R 5 4 1 1373 940 0 2 ....... BBBBBBB 0
metadata CHANGED
@@ -1,84 +1,155 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: basil
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Austin G. Davis-Richardson
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2010-02-10 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2012-05-14 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: dna
16
- requirement: &70286137539700 !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
17
24
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: 0.0.0
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
22
32
  type: :runtime
23
- prerelease: false
24
- version_requirements: *70286137539700
25
- - !ruby/object:Gem::Dependency
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
26
35
  name: trollop
27
- requirement: &70286137539140 !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
28
38
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0'
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
33
46
  type: :runtime
34
- prerelease: false
35
- version_requirements: *70286137539140
36
- - !ruby/object:Gem::Dependency
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
37
49
  name: rspec
38
- requirement: &70286137538460 !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
39
52
  none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: '0'
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
44
60
  type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: bundler
45
64
  prerelease: false
46
- version_requirements: *70286137538460
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ type: :runtime
75
+ version_requirements: *id004
47
76
  description: Split multiplexed high-throughput sequencing reads by barcode.
48
- email: harekrishna@gmail.com
49
- executables:
77
+ email:
78
+ - harekrishna@gmail.com
79
+ executables:
50
80
  - basil
51
81
  extensions: []
82
+
52
83
  extra_rdoc_files: []
53
- files:
84
+
85
+ files:
86
+ - .gitignore
87
+ - .rspec
88
+ - .rvmrc
89
+ - Gemfile
90
+ - Rakefile
91
+ - basil.gemspec
92
+ - bin/basil
54
93
  - lib/basil.rb
94
+ - lib/basil/barcodes.rb
95
+ - lib/basil/basil.rb
96
+ - lib/basil/buffer.rb
97
+ - lib/basil/cli.rb
98
+ - lib/basil/version.rb
99
+ - readme.md
55
100
  - spec/basil_spec.rb
56
101
  - spec/buffer_spec.rb
102
+ - spec/cli_spec.rb
103
+ - spec/data/barcodes.csv
104
+ - spec/data/illumina/s_1_1_001_qseq.txt
105
+ - spec/data/illumina/s_1_2_001_qseq.txt
106
+ - spec/data/illumina/s_1_3_001_qseq.txt
107
+ - spec/data/test.fasta
108
+ - spec/data/test.fastq
109
+ - spec/data/test.qseq
57
110
  - spec/spec_helper.rb
58
- - readme.md
59
- - bin/basil
60
111
  homepage: http://github.com/audy/basil
61
112
  licenses: []
113
+
62
114
  post_install_message:
63
115
  rdoc_options: []
64
- require_paths:
116
+
117
+ require_paths:
65
118
  - lib
66
- required_ruby_version: !ruby/object:Gem::Requirement
119
+ required_ruby_version: !ruby/object:Gem::Requirement
67
120
  none: false
68
- requirements:
69
- - - ! '>='
70
- - !ruby/object:Gem::Version
71
- version: '0'
72
- required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ hash: 3
125
+ segments:
126
+ - 0
127
+ version: "0"
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
129
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ hash: 3
134
+ segments:
135
+ - 0
136
+ version: "0"
78
137
  requirements: []
79
- rubyforge_project:
80
- rubygems_version: 1.8.15
138
+
139
+ rubyforge_project: basil
140
+ rubygems_version: 1.8.24
81
141
  signing_key:
82
142
  specification_version: 3
83
143
  summary: HTPS demultiplexer
84
- test_files: []
144
+ test_files:
145
+ - spec/basil_spec.rb
146
+ - spec/buffer_spec.rb
147
+ - spec/cli_spec.rb
148
+ - spec/data/barcodes.csv
149
+ - spec/data/illumina/s_1_1_001_qseq.txt
150
+ - spec/data/illumina/s_1_2_001_qseq.txt
151
+ - spec/data/illumina/s_1_3_001_qseq.txt
152
+ - spec/data/test.fasta
153
+ - spec/data/test.fastq
154
+ - spec/data/test.qseq
155
+ - spec/spec_helper.rb