basil 0.0.1 → 0.0.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/.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