Basil 0.1.0
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/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +7 -0
- data/Rakefile +1 -0
- data/basil.gemspec +74 -0
- data/bin/basil +5 -0
- data/lib/basil.rb +8 -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 +102 -0
- data/readme.md +49 -0
- data/spec/basil_spec.rb +57 -0
- data/spec/buffer_spec.rb +15 -0
- 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
- data/spec/spec_helper.rb +3 -0
- metadata +170 -0
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,74 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "Basil"
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Austin G. Davis-Richardson"]
|
12
|
+
s.date = "2012-09-18"
|
13
|
+
s.description = "Separate Illumin and 454 sequence output by barcode"
|
14
|
+
s.email = "harekrishna@gmail.com"
|
15
|
+
s.executables = ["basil"]
|
16
|
+
s.files = [
|
17
|
+
".rspec",
|
18
|
+
".rvmrc",
|
19
|
+
"Gemfile",
|
20
|
+
"Rakefile",
|
21
|
+
"basil.gemspec",
|
22
|
+
"bin/basil",
|
23
|
+
"lib/basil.rb",
|
24
|
+
"lib/basil/barcodes.rb",
|
25
|
+
"lib/basil/basil.rb",
|
26
|
+
"lib/basil/buffer.rb",
|
27
|
+
"lib/basil/cli.rb",
|
28
|
+
"readme.md",
|
29
|
+
"spec/basil_spec.rb",
|
30
|
+
"spec/buffer_spec.rb",
|
31
|
+
"spec/cli_spec.rb",
|
32
|
+
"spec/data/barcodes.csv",
|
33
|
+
"spec/data/illumina/s_1_1_001_qseq.txt",
|
34
|
+
"spec/data/illumina/s_1_2_001_qseq.txt",
|
35
|
+
"spec/data/illumina/s_1_3_001_qseq.txt",
|
36
|
+
"spec/data/test.fasta",
|
37
|
+
"spec/data/test.fastq",
|
38
|
+
"spec/data/test.qseq",
|
39
|
+
"spec/spec_helper.rb"
|
40
|
+
]
|
41
|
+
s.homepage = "http://audy.github.com/basil"
|
42
|
+
s.licenses = ["MIT"]
|
43
|
+
s.require_paths = ["lib"]
|
44
|
+
s.rubygems_version = "1.8.24"
|
45
|
+
s.summary = "HTPS Demultiplexer"
|
46
|
+
|
47
|
+
if s.respond_to? :specification_version then
|
48
|
+
s.specification_version = 3
|
49
|
+
|
50
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
51
|
+
s.add_runtime_dependency(%q<Basil>, [">= 0"])
|
52
|
+
s.add_runtime_dependency(%q<dna>, [">= 0"])
|
53
|
+
s.add_runtime_dependency(%q<trollop>, [">= 0"])
|
54
|
+
s.add_runtime_dependency(%q<progressbar>, [">= 0"])
|
55
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
56
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
57
|
+
else
|
58
|
+
s.add_dependency(%q<Basil>, [">= 0"])
|
59
|
+
s.add_dependency(%q<dna>, [">= 0"])
|
60
|
+
s.add_dependency(%q<trollop>, [">= 0"])
|
61
|
+
s.add_dependency(%q<progressbar>, [">= 0"])
|
62
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
63
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
64
|
+
end
|
65
|
+
else
|
66
|
+
s.add_dependency(%q<Basil>, [">= 0"])
|
67
|
+
s.add_dependency(%q<dna>, [">= 0"])
|
68
|
+
s.add_dependency(%q<trollop>, [">= 0"])
|
69
|
+
s.add_dependency(%q<progressbar>, [">= 0"])
|
70
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
71
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
data/bin/basil
ADDED
data/lib/basil.rb
ADDED
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,102 @@
|
|
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
|
+
afttrim = -1*opts[:afttrim] || -1
|
24
|
+
end
|
25
|
+
|
26
|
+
if File.exist? out_dir
|
27
|
+
$stderr.puts "#{out_dir} already exists -- delete or move!"
|
28
|
+
exit
|
29
|
+
else
|
30
|
+
Dir.mkdir(out_dir)
|
31
|
+
end
|
32
|
+
|
33
|
+
records.each do |record|
|
34
|
+
|
35
|
+
match = basil.recognize record.sequence
|
36
|
+
barcode, sequence = match if match
|
37
|
+
|
38
|
+
unless match
|
39
|
+
barcode = 'unknown'
|
40
|
+
trimmed_sequence = record.sequence
|
41
|
+
end
|
42
|
+
|
43
|
+
trimmed_sequence = record.sequence[pretrim..afttrim]
|
44
|
+
|
45
|
+
new_record = Fasta.new :name => record.name, :sequence => trimmed_sequence
|
46
|
+
buffer.add_to File.join(out_dir, barcode + ".#{records_format}"), new_record
|
47
|
+
end
|
48
|
+
|
49
|
+
# Finish up
|
50
|
+
buffer.finalize
|
51
|
+
handles.collect { |x| x.close }
|
52
|
+
end
|
53
|
+
|
54
|
+
def parse_barcodes barcodes
|
55
|
+
File.open(barcodes) { |h| Basil.parse_barcodes h }
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# For parsing illumina-generated output directories containing
|
60
|
+
# paired QSEQ files
|
61
|
+
#
|
62
|
+
def parse_illumina_directory dir
|
63
|
+
files = Dir[File.join(dir, '*')]
|
64
|
+
|
65
|
+
files.collect do |x|
|
66
|
+
m = File.basename(x).match(/s_(\d)_(\d)_(\d*)_qseq\.txt/)
|
67
|
+
{ :lane => m[1], :pair => m[2], :n => m[3], :filename => File.join(dir, m[0]) }
|
68
|
+
end.group_by { |x| x[:n] }
|
69
|
+
end
|
70
|
+
|
71
|
+
def parse_arguments
|
72
|
+
opts = Trollop::options do
|
73
|
+
|
74
|
+
version "PRE-RELEASE"
|
75
|
+
banner <<-EOS
|
76
|
+
Basil is an HTPS demultiplexer
|
77
|
+
|
78
|
+
Version: #{version}
|
79
|
+
|
80
|
+
Usage:
|
81
|
+
basil [options] -i <reads/directory> -o <output directory>
|
82
|
+
where [options] are:
|
83
|
+
EOS
|
84
|
+
|
85
|
+
opt :barcodes, 'barcodes definition file', :short => 'b', :type => String
|
86
|
+
opt :reads, 'reads (fastq/fasta/qseq)', :short => 'i', :type => String
|
87
|
+
opt :illumina, 'Illumina output directory', :short => 'd'
|
88
|
+
opt :out_fmt, 'Output format (default: same format as input)', :short => 'f'
|
89
|
+
opt :pretrim, 'trim N nucleotides from start before searching for barcode', :type => Integer
|
90
|
+
opt :out, 'output directory', :short => 'o', :type => String
|
91
|
+
end
|
92
|
+
|
93
|
+
filename = ARGV.shift
|
94
|
+
Trollop::die :barcodes, "must specify barcodes" if opts[:barcodes].nil?
|
95
|
+
Trollop::die :reads, "must specify reads or Illumina directory" if !(opts[:reads] || opts[:illumina])
|
96
|
+
Trollop::die "cannot specify both reads and Illumina directory" if opts[:reads] && opts[:illumina]
|
97
|
+
Trollop::die :out, "must specify output directory" if !opts[:out]
|
98
|
+
opts
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/readme.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Basil
|
2
|
+
|
3
|
+
Yet another tool for splitting barcoded sequences. It had to be done.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
You're gonna need Ruby 1.8.7 or better.
|
8
|
+
|
9
|
+
(sudo) gem install basil
|
10
|
+
|
11
|
+
## Features
|
12
|
+
|
13
|
+
**Demultiplexes multiplexed high-throughput sequencing data for Illumina, Roche 454, IonTorrent, _etc_... sequence data in their native formats**
|
14
|
+
|
15
|
+
- Supports unlimited number of barcodes
|
16
|
+
- Trimming from left end of read
|
17
|
+
- Barcodes provided as simple .csv file
|
18
|
+
- Support input filetypes:
|
19
|
+
- Fastq
|
20
|
+
- Fasta
|
21
|
+
|
22
|
+
## TODO
|
23
|
+
|
24
|
+
- Support regexp in barcodes input.
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
Usage:
|
29
|
+
basil [options] -i <reads/directory> -o <output directory>
|
30
|
+
where [options] are:
|
31
|
+
--barcodes, -b <s>: barcodes definition file
|
32
|
+
--reads, -i: reads (fastq/fasta/qseq)
|
33
|
+
--illumina, -d: Illumina output directory
|
34
|
+
--pretrim, -p <i>: trim N nucleotides from start
|
35
|
+
--afttrim, -a <i>: trim N nucleotides from end
|
36
|
+
--out, -o <s>: output directory
|
37
|
+
--version, -v: Print version and exit
|
38
|
+
--help, -h: Show this message
|
39
|
+
|
40
|
+
## Barcodes file
|
41
|
+
|
42
|
+
Barcodes are specified in a simple CSV file:
|
43
|
+
|
44
|
+
barcode_name,barcode_sequence
|
45
|
+
my_awesome_barcode,gggggggg
|
46
|
+
my_awesomer_barcode,aaaaaaaa
|
47
|
+
my_awesomest_barcode,cccccccc
|
48
|
+
|
49
|
+
(Eventually, I will add built-in support for commonly-used barcodes)
|
data/spec/basil_spec.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Basil::Basil do
|
4
|
+
|
5
|
+
let (:barcodes) {
|
6
|
+
{
|
7
|
+
1 => 'gggg',
|
8
|
+
2 => 'aaaa',
|
9
|
+
3 => 'tttt',
|
10
|
+
4 => 'cccc',
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
let (:basil) { Basil::Basil.new barcodes }
|
15
|
+
|
16
|
+
let (:dna) { 'ggggnnnn' }
|
17
|
+
|
18
|
+
it 'can be created' do
|
19
|
+
barcodes.should_not raise_error TypeError
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'raises an error if duplicate barcodes are specified' do
|
23
|
+
Basil::Basil.new({ 1 => 'gggg', 2 => 'gggg' }).should raise_error
|
24
|
+
end
|
25
|
+
|
26
|
+
it '#recognize returns the name of matched barcode' do
|
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
|
38
|
+
end
|
39
|
+
|
40
|
+
it '#recognize is case insensitive' do
|
41
|
+
basil.recognize(dna.upcase!).first.should == 1
|
42
|
+
end
|
43
|
+
|
44
|
+
it '#recognize ^ is prepended to barcode regexp if strings are provided' do
|
45
|
+
basil.recognize('aggggaaa').should be_nil
|
46
|
+
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
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Basil::Buffer do
|
4
|
+
|
5
|
+
let (:buffer) { Basil::Buffer.new }
|
6
|
+
|
7
|
+
it 'can be created' do
|
8
|
+
buffer.should_not raise_error TypeError
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'can be given stuff' do
|
12
|
+
buffer['thing'] << 'another thing'
|
13
|
+
buffer['thing'].first.should == 'another thing'
|
14
|
+
end
|
15
|
+
end
|
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
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: Basil
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Austin G. Davis-Richardson
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-09-18 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: Basil
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: dna
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: trollop
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: progressbar
|
64
|
+
prerelease: false
|
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
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: jeweler
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
|
+
type: :development
|
89
|
+
version_requirements: *id005
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: jeweler
|
92
|
+
prerelease: false
|
93
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
hash: 3
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
102
|
+
type: :development
|
103
|
+
version_requirements: *id006
|
104
|
+
description: Separate Illumin and 454 sequence output by barcode
|
105
|
+
email: harekrishna@gmail.com
|
106
|
+
executables:
|
107
|
+
- basil
|
108
|
+
extensions: []
|
109
|
+
|
110
|
+
extra_rdoc_files: []
|
111
|
+
|
112
|
+
files:
|
113
|
+
- .rspec
|
114
|
+
- .rvmrc
|
115
|
+
- Gemfile
|
116
|
+
- Rakefile
|
117
|
+
- basil.gemspec
|
118
|
+
- bin/basil
|
119
|
+
- lib/basil.rb
|
120
|
+
- lib/basil/barcodes.rb
|
121
|
+
- lib/basil/basil.rb
|
122
|
+
- lib/basil/buffer.rb
|
123
|
+
- lib/basil/cli.rb
|
124
|
+
- readme.md
|
125
|
+
- spec/basil_spec.rb
|
126
|
+
- spec/buffer_spec.rb
|
127
|
+
- spec/cli_spec.rb
|
128
|
+
- spec/data/barcodes.csv
|
129
|
+
- spec/data/illumina/s_1_1_001_qseq.txt
|
130
|
+
- spec/data/illumina/s_1_2_001_qseq.txt
|
131
|
+
- spec/data/illumina/s_1_3_001_qseq.txt
|
132
|
+
- spec/data/test.fasta
|
133
|
+
- spec/data/test.fastq
|
134
|
+
- spec/data/test.qseq
|
135
|
+
- spec/spec_helper.rb
|
136
|
+
homepage: http://audy.github.com/basil
|
137
|
+
licenses:
|
138
|
+
- MIT
|
139
|
+
post_install_message:
|
140
|
+
rdoc_options: []
|
141
|
+
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
hash: 3
|
150
|
+
segments:
|
151
|
+
- 0
|
152
|
+
version: "0"
|
153
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
hash: 3
|
159
|
+
segments:
|
160
|
+
- 0
|
161
|
+
version: "0"
|
162
|
+
requirements: []
|
163
|
+
|
164
|
+
rubyforge_project:
|
165
|
+
rubygems_version: 1.8.24
|
166
|
+
signing_key:
|
167
|
+
specification_version: 3
|
168
|
+
summary: HTPS Demultiplexer
|
169
|
+
test_files: []
|
170
|
+
|