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 +2 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +7 -0
- data/Rakefile +1 -0
- data/basil.gemspec +22 -0
- data/bin/basil +2 -26
- data/lib/basil.rb +7 -0
- data/lib/basil/barcodes.rb +3 -0
- data/lib/basil/basil.rb +60 -0
- data/lib/basil/buffer.rb +50 -0
- data/lib/basil/cli.rb +99 -0
- data/lib/basil/version.rb +3 -0
- data/readme.md +37 -1
- data/spec/basil_spec.rb +28 -9
- data/spec/buffer_spec.rb +2 -2
- data/spec/cli_spec.rb +28 -0
- data/spec/data/barcodes.csv +4 -0
- data/spec/data/illumina/s_1_1_001_qseq.txt +5 -0
- data/spec/data/illumina/s_1_2_001_qseq.txt +5 -0
- data/spec/data/illumina/s_1_3_001_qseq.txt +5 -0
- data/spec/data/test.fasta +20 -0
- data/spec/data/test.fastq +20 -0
- data/spec/data/test.qseq +5 -0
- metadata +119 -48
data/.gitignore
ADDED
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
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 '
|
4
|
-
require 'optparse'
|
5
|
-
require 'pp'
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'basil'))
|
6
4
|
|
7
|
-
|
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
data/lib/basil/basil.rb
ADDED
@@ -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
|
data/lib/basil/buffer.rb
ADDED
@@ -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
|
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
|
-
|
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) { '
|
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
|
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
|
-
|
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
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
|
data/spec/data/test.qseq
ADDED
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
|
-
|
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
|
-
|
13
|
-
|
14
|
-
|
17
|
+
|
18
|
+
date: 2012-05-14 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: dna
|
16
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
24
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
22
32
|
type: :runtime
|
23
|
-
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
26
35
|
name: trollop
|
27
|
-
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
38
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
33
46
|
type: :runtime
|
34
|
-
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
37
49
|
name: rspec
|
38
|
-
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
52
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
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
|
-
|
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:
|
49
|
-
|
77
|
+
email:
|
78
|
+
- harekrishna@gmail.com
|
79
|
+
executables:
|
50
80
|
- basil
|
51
81
|
extensions: []
|
82
|
+
|
52
83
|
extra_rdoc_files: []
|
53
|
-
|
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
|
-
|
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
|
-
|
72
|
-
|
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
|
-
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
hash: 3
|
134
|
+
segments:
|
135
|
+
- 0
|
136
|
+
version: "0"
|
78
137
|
requirements: []
|
79
|
-
|
80
|
-
|
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
|