transrate 1.0.0.alpha.5 → 1.0.0.alpha.8.bowtie
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/transrate +5 -5
- data/deps/deps.yaml +16 -8
- data/lib/transrate/bowtie.rb +103 -0
- data/lib/transrate/contig.rb +2 -9
- data/lib/transrate/express.rb +15 -3
- data/lib/transrate/read_metrics.rb +19 -18
- data/lib/transrate/sam_checker.rb +99 -0
- data/lib/transrate/snap.rb +36 -3
- data/lib/transrate/version.rb +1 -1
- data/lib/transrate.rb +2 -0
- data/test/data/bridging_reads.l.fastq +5 -5
- data/test/data/bridging_reads.r.fastq +5 -5
- data/test/test_bin.rb +9 -1
- data/test/test_read_metrics.rb +30 -17
- data/test/test_transrater.rb +1 -1
- data/transrate.gemspec +1 -0
- metadata +80 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f6903da751cadec5102d2fa7e9c2381a9c39a25
|
4
|
+
data.tar.gz: bf9b30c2e334ae98ad6d959b085d521d43e5daf4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97cdf2d6c922b1c0a901a1aa8f6e85013a8ec0c9cff54795b8bba3fa903efa7ef2ae4673c8e71e8ee292326eaadbf3ee617094c978a4fd39c836f6d8fb0d0672
|
7
|
+
data.tar.gz: 08ae932477980abe97b2b7fe874a14bd170688b1f8f60472971f21cc2ae0c7bb742d9a5c89ee923ccf5c476c4e59c5863a02a2e1994b4deb74e13e228e792136
|
data/bin/transrate
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
PROFILE = false
|
2
3
|
|
3
4
|
require 'trollop'
|
4
5
|
require 'transrate'
|
@@ -57,10 +58,9 @@ opts = Trollop::options do
|
|
57
58
|
opt :outfile, "prefix filename to use for CSV output",
|
58
59
|
:default => 'transrate'
|
59
60
|
opt :loglevel, "the amount of information to print. " +
|
60
|
-
"one of [error,
|
61
|
+
"one of [error, warn, info, debug]",
|
61
62
|
:default => 'info'
|
62
63
|
opt :install_deps, "install any missing dependencies"
|
63
|
-
opt :profile, "debug option: profile the code as it runs"
|
64
64
|
end
|
65
65
|
gem_dir = Gem.loaded_specs['transrate'].full_gem_path
|
66
66
|
gem_deps = File.join(gem_dir, 'deps', 'deps.yaml')
|
@@ -111,7 +111,7 @@ if opts.left and opts.right
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
-
if
|
114
|
+
if PROFILE
|
115
115
|
logger.info "Starting profiler"
|
116
116
|
RubyProf.start
|
117
117
|
end
|
@@ -176,7 +176,7 @@ opts.assembly.split(',').each do |assembly|
|
|
176
176
|
pretty_print_hash(contig_results, report_width)
|
177
177
|
end
|
178
178
|
|
179
|
-
logger.info "Contig metrics done in #{Time.now - t0} seconds"
|
179
|
+
logger.info "Contig metrics done in #{(Time.now - t0).round(1)} seconds"
|
180
180
|
|
181
181
|
read_results = {}
|
182
182
|
|
@@ -269,7 +269,7 @@ CSV.open(outfile, 'wb') do |file|
|
|
269
269
|
end
|
270
270
|
end
|
271
271
|
|
272
|
-
if
|
272
|
+
if PROFILE
|
273
273
|
logger.info "Writing profiling results to transrate_profile.txt"
|
274
274
|
result = RubyProf.stop
|
275
275
|
printer = RubyProf::FlatPrinter.new(result)
|
data/deps/deps.yaml
CHANGED
@@ -25,16 +25,24 @@ blastplus:
|
|
25
25
|
64bit:
|
26
26
|
macosx: ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.2.29/ncbi-blast-2.2.29+-universal-macosx.tar.gz
|
27
27
|
linux: ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.2.29/ncbi-blast-2.2.29+-x64-linux.tar.gz
|
28
|
-
|
28
|
+
bowtie2:
|
29
29
|
binaries:
|
30
|
-
-
|
30
|
+
- bowtie2
|
31
|
+
- bowtie2-align-l
|
32
|
+
- bowtie2-align-s
|
33
|
+
- bowtie2-build
|
34
|
+
- bowtie2-build-l
|
35
|
+
- bowtie2-build-s
|
36
|
+
- bowtie2-inspect
|
37
|
+
- bowtie2-inspect-l
|
38
|
+
- bowtie2-inspect-s
|
31
39
|
version:
|
32
|
-
number: '
|
33
|
-
command: '
|
40
|
+
number: '2.2.3'
|
41
|
+
command: 'bowtie2 --version'
|
34
42
|
url:
|
35
43
|
64bit:
|
36
|
-
linux:
|
37
|
-
macosx:
|
44
|
+
linux: http://downloads.sourceforge.net/project/bowtie-bio/bowtie2/2.2.3/bowtie2-2.2.3-linux-x86_64.zip
|
45
|
+
macosx: http://downloads.sourceforge.net/project/bowtie-bio/bowtie2/2.2.3/bowtie2-2.2.3-macos-x86_64.zip
|
38
46
|
samtools:
|
39
47
|
binaries:
|
40
48
|
- samtools
|
@@ -50,7 +58,7 @@ bam-read:
|
|
50
58
|
binaries:
|
51
59
|
- bam-read
|
52
60
|
version:
|
53
|
-
number: '0.3.
|
61
|
+
number: '0.3.4'
|
54
62
|
command: 'bam-read'
|
55
63
|
url:
|
56
64
|
64bit:
|
@@ -61,7 +69,7 @@ bam-split:
|
|
61
69
|
binaries:
|
62
70
|
- bam-split
|
63
71
|
version:
|
64
|
-
number: '0.
|
72
|
+
number: '0.2'
|
65
73
|
command: 'bam-split'
|
66
74
|
url:
|
67
75
|
64bit:
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module Transrate
|
2
|
+
|
3
|
+
class Bowtie2Error < StandardError
|
4
|
+
end
|
5
|
+
|
6
|
+
class Bowtie2
|
7
|
+
|
8
|
+
attr_reader :index_name, :sam, :read_count
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@bowtie2 = get_bin_path("bowtie2")
|
12
|
+
@bowtie2_build = get_bin_path("bowtie2-build")
|
13
|
+
|
14
|
+
@index_built = false
|
15
|
+
@index_name = ""
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_bin_path bin
|
19
|
+
which_bin = Cmd.new("which #{bin}")
|
20
|
+
which_bin.run
|
21
|
+
if !which_bin.status.success?
|
22
|
+
raise IOError.new("ReadMetrics: could not find #{bin} in path")
|
23
|
+
end
|
24
|
+
which_bin.stdout.split("\n").first
|
25
|
+
end
|
26
|
+
|
27
|
+
def map_reads(file, left, right,
|
28
|
+
insertsize: 200, insertsd: 50, threads: 8)
|
29
|
+
raise Bowtie2Error.new("Index not built") if !@index_built
|
30
|
+
lbase = File.basename(left.split(",").first)
|
31
|
+
rbase = File.basename(right.split(",").first)
|
32
|
+
index = File.basename(@index_name)
|
33
|
+
@sam = File.expand_path("#{lbase}.#{rbase}.#{index}.sam")
|
34
|
+
realistic_dist = insertsize + (5 * insertsd)
|
35
|
+
unless File.exists? @sam
|
36
|
+
# construct bowtie command
|
37
|
+
bowtiecmd = "#{@bowtie2} --very-sensitive"
|
38
|
+
bowtiecmd << " -x #{@index_name}"
|
39
|
+
bowtiecmd << " -a"
|
40
|
+
bowtiecmd << " -p #{threads} -X #{realistic_dist}"
|
41
|
+
bowtiecmd << " --no-unal"
|
42
|
+
bowtiecmd << " --seed 1337"
|
43
|
+
bowtiecmd << " --rdg 6,5"
|
44
|
+
bowtiecmd << " --rfg 6,5"
|
45
|
+
bowtiecmd << " --score-min L,-.6,-.4"
|
46
|
+
bowtiecmd << " -1 #{left}"
|
47
|
+
# paired end?
|
48
|
+
bowtiecmd << " -2 #{right}" if right
|
49
|
+
bowtiecmd << " -S #{@sam}"
|
50
|
+
# run bowtie
|
51
|
+
runner = Cmd.new bowtiecmd
|
52
|
+
runner.run
|
53
|
+
# parse bowtie output
|
54
|
+
if runner.stderr=~/([0-9]+)\ reads\;\ of\ these\:/
|
55
|
+
@read_count = $1.to_i
|
56
|
+
# save read_count to file
|
57
|
+
File.open("#{@sam}-read_count.txt", "wb") do |out|
|
58
|
+
out.write("#{@read_count}\n")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
if !runner.status.success?
|
62
|
+
raise Bowtie2Error.new("Bowtie2 failed\n#{runner.stderr}")
|
63
|
+
end
|
64
|
+
else
|
65
|
+
@read_count = 0
|
66
|
+
if File.exist?("#{@sam}-read_count.txt")
|
67
|
+
@read_count = File.open("#{@sam}-read_count.txt").readlines.join.to_i
|
68
|
+
else
|
69
|
+
left.split(",").each do |l|
|
70
|
+
cmd = "wc -l #{l}"
|
71
|
+
count = Cmd.new(cmd)
|
72
|
+
count.run
|
73
|
+
if count.status.success?
|
74
|
+
@read_count += count.stdout.strip.split(/\s+/).first.to_i/4
|
75
|
+
File.open("#{@sam}-read_count.txt", "wb") do |out|
|
76
|
+
out.write("#{@read_count}\n")
|
77
|
+
end
|
78
|
+
else
|
79
|
+
logger.warn "couldn't get number of reads from #{l}"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
@sam
|
85
|
+
end
|
86
|
+
|
87
|
+
def build_index file
|
88
|
+
@index_name = File.basename(file).split(".")[0..-2].join(".")
|
89
|
+
unless File.exists?(@index_name + '.1.bt2')
|
90
|
+
cmd = "#{@bowtie2_build} --quiet --offrate 1 #{file} #{@index_name}"
|
91
|
+
runner = Cmd.new cmd
|
92
|
+
runner.run
|
93
|
+
if !runner.status.success?
|
94
|
+
msg = "Failed to build Bowtie2 index\n#{runner.stderr}"
|
95
|
+
raise Bowtie2Error.new(msg)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
@index_built = true
|
99
|
+
end
|
100
|
+
|
101
|
+
end # Bowtie2
|
102
|
+
|
103
|
+
end # Transrate
|
data/lib/transrate/contig.rb
CHANGED
@@ -12,8 +12,7 @@ module Transrate
|
|
12
12
|
# read-based metrics
|
13
13
|
attr_accessor :eff_length, :eff_count, :tpm
|
14
14
|
attr_accessor :coverage, :uncovered_bases, :p_uncovered_bases
|
15
|
-
attr_accessor :p_seq_true, :p_unique
|
16
|
-
attr_accessor :low_uniqueness_bases, :in_bridges
|
15
|
+
attr_accessor :p_seq_true, :p_unique, :in_bridges
|
17
16
|
attr_accessor :p_good, :p_not_segmented
|
18
17
|
# reference-based metrics
|
19
18
|
attr_accessor :has_crb, :reference_coverage
|
@@ -30,7 +29,6 @@ module Transrate
|
|
30
29
|
@in_bridges = 0
|
31
30
|
@p_good = 0
|
32
31
|
@p_seq_true = 0
|
33
|
-
@low_uniqueness_bases = 0
|
34
32
|
@uncovered_bases = length
|
35
33
|
@p_uncovered_bases = 1
|
36
34
|
@p_unique = 0
|
@@ -227,10 +225,6 @@ module Transrate
|
|
227
225
|
@p_uncovered_bases = n / length.to_f
|
228
226
|
end
|
229
227
|
|
230
|
-
def p_unique_bases
|
231
|
-
(length - low_uniqueness_bases) / length.to_f
|
232
|
-
end
|
233
|
-
|
234
228
|
# Contig score (product of all score components)
|
235
229
|
def score
|
236
230
|
return @score if @score != -1
|
@@ -238,8 +232,7 @@ module Transrate
|
|
238
232
|
[p_bases_covered, 0.01].max.to_f * # proportion of bases covered
|
239
233
|
[p_not_segmented, 0.01].max.to_f * # prob contig has 0 changepoints
|
240
234
|
[p_good, 0.01].max.to_f * # proportion of reads that mapped good
|
241
|
-
[p_seq_true, 0.01].max.to_f
|
242
|
-
[p_unique, 0.01].max.to_f # prop mapQ >= 5
|
235
|
+
[p_seq_true, 0.01].max.to_f
|
243
236
|
@score = [prod, 0.01].max
|
244
237
|
end
|
245
238
|
end
|
data/lib/transrate/express.rb
CHANGED
@@ -32,9 +32,7 @@ module Transrate
|
|
32
32
|
runner = Cmd.new build_command(assembly, bamfile)
|
33
33
|
runner.run
|
34
34
|
unless runner.status.success?
|
35
|
-
|
36
|
-
runner.stderr + "\n" +
|
37
|
-
runner.stdout)
|
35
|
+
abort "express failed on the bam file\n#{runner.stderr}"
|
38
36
|
end
|
39
37
|
File.rename(ex_output, fin_output)
|
40
38
|
end
|
@@ -80,6 +78,20 @@ module Transrate
|
|
80
78
|
expression
|
81
79
|
end
|
82
80
|
|
81
|
+
# def fix_problem_snap_output bam
|
82
|
+
# # express failed, probably because of temporary snap error
|
83
|
+
# # convert bam to sam
|
84
|
+
# sam = "#{File.expand_path(File.basename(bam, File.extname(bam)))}.sam"
|
85
|
+
# Samtools.run "view -h #{bam} > #{sam}"
|
86
|
+
# # run sam fixer on sam
|
87
|
+
# checker = SamChecker.new
|
88
|
+
# fixed_sam = "#{File.expand_path(File.basename(sam, File.extname(sam)))}.fixed.sam"
|
89
|
+
# checker.fix_sam(sam, fixed_sam)
|
90
|
+
# # convert sam to bam
|
91
|
+
# Samtools.run "view -bS #{fixed_sam} > #{bam}"
|
92
|
+
# bam
|
93
|
+
# end
|
94
|
+
|
83
95
|
end # Express
|
84
96
|
|
85
97
|
end # Transrate
|
@@ -11,7 +11,7 @@ module Transrate
|
|
11
11
|
|
12
12
|
def initialize assembly
|
13
13
|
@assembly = assembly
|
14
|
-
@mapper =
|
14
|
+
@mapper = Bowtie2.new
|
15
15
|
self.initial_values
|
16
16
|
|
17
17
|
load_executables
|
@@ -47,29 +47,24 @@ module Transrate
|
|
47
47
|
@read_length = get_read_length(left, right)
|
48
48
|
|
49
49
|
# map reads
|
50
|
-
@mapper.build_index(@assembly.file
|
51
|
-
|
50
|
+
@mapper.build_index(@assembly.file)
|
51
|
+
samfile = @mapper.map_reads(@assembly.file, left, right,
|
52
52
|
insertsize: insertsize,
|
53
53
|
insertsd: insertsd,
|
54
54
|
threads: threads)
|
55
55
|
@fragments = @mapper.read_count
|
56
|
+
bamfile = Samtools.sam_to_bam(samfile)
|
57
|
+
File.delete samfile
|
56
58
|
|
57
59
|
# classify bam file into valid and invalid alignments
|
58
60
|
sorted_bam = "#{File.basename(bamfile, '.bam')}.merged.sorted.bam"
|
59
|
-
readsorted_bam = "#{File.basename(bamfile, '.bam')}.valid.sorted.bam"
|
60
61
|
merged_bam = "#{File.basename(bamfile, '.bam')}.merged.bam"
|
61
|
-
|
62
|
-
|
63
|
-
valid_bam, invalid_bam = split_bam bamfile
|
64
|
-
readsorted_bam = Samtools.readsort_bam valid_bam
|
65
|
-
File.delete valid_bam
|
66
|
-
end
|
67
|
-
end
|
62
|
+
valid_bam, invalid_bam = split_bam bamfile
|
63
|
+
readsorted_bam = Samtools.readsort_bam valid_bam
|
68
64
|
|
69
65
|
# pass valid alignments to eXpress for assignment
|
70
66
|
# always have to run the eXpress command to load the results
|
71
67
|
assigned_bam = assign_and_quantify readsorted_bam
|
72
|
-
File.delete readsorted_bam if File.exist? readsorted_bam
|
73
68
|
|
74
69
|
# merge the assigned alignments back with the invalid ones
|
75
70
|
unless File.exist? sorted_bam
|
@@ -142,12 +137,12 @@ module Transrate
|
|
142
137
|
splitter = Cmd.new cmd
|
143
138
|
splitter.run
|
144
139
|
if !splitter.status.success?
|
145
|
-
|
140
|
+
raise StandardError.new "Couldn't split bam file: #{bamfile}" +
|
146
141
|
"\n#{splitter.stdout}\n#{splitter.stderr}"
|
147
142
|
end
|
148
143
|
end
|
149
144
|
if !File.exist? valid
|
150
|
-
|
145
|
+
raise StandardError.new "Splitting failed to create valid bam: #{valid}"
|
151
146
|
end
|
152
147
|
[valid, invalid]
|
153
148
|
end
|
@@ -162,7 +157,11 @@ module Transrate
|
|
162
157
|
def analyse_expression express_output
|
163
158
|
express_output.each_pair do |name, expr|
|
164
159
|
contig = @assembly[name]
|
165
|
-
|
160
|
+
if expr[:eff_len]==0
|
161
|
+
coverage = 0
|
162
|
+
else
|
163
|
+
coverage = expr[:eff_count] * @read_length / expr[:eff_len]
|
164
|
+
end
|
166
165
|
@contigs_uncovered += 1 if coverage < 1
|
167
166
|
@contigs_lowcovered += 1 if coverage < 10
|
168
167
|
contig.coverage = coverage.round(2)
|
@@ -177,7 +176,7 @@ module Transrate
|
|
177
176
|
csv_output = "#{File.basename(@assembly.file)}_bam_info.csv"
|
178
177
|
csv_output = File.expand_path(csv_output)
|
179
178
|
|
180
|
-
analyse_bam
|
179
|
+
analyse_bam(bamfile, csv_output)
|
181
180
|
# open output csv file
|
182
181
|
@potential_bridges = 0
|
183
182
|
|
@@ -188,7 +187,7 @@ module Transrate
|
|
188
187
|
end
|
189
188
|
@bad = @fragments_mapped - @good
|
190
189
|
else
|
191
|
-
|
190
|
+
raise "couldn't find bamfile: #{bamfile}"
|
192
191
|
end
|
193
192
|
@assembly.assembly.each_pair do |name, contig|
|
194
193
|
@contigs_good += 1 if contig.score >= 0.5
|
@@ -217,7 +216,9 @@ module Transrate
|
|
217
216
|
reader = Cmd.new cmd
|
218
217
|
reader.run
|
219
218
|
if !reader.status.success?
|
220
|
-
|
219
|
+
msg = "Couldn't get information from bam file: #{bamfile}\n"
|
220
|
+
msg << "#{reader.stdout}\n#{reader.stderr}"
|
221
|
+
raise msg
|
221
222
|
end
|
222
223
|
end
|
223
224
|
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
module Transrate
|
2
|
+
|
3
|
+
class SamChecker
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@contigs = {}
|
7
|
+
@reference = ""
|
8
|
+
@count = 0
|
9
|
+
@percent = 0
|
10
|
+
@first = true
|
11
|
+
end
|
12
|
+
|
13
|
+
def check sam
|
14
|
+
cols = sam.split("\t")
|
15
|
+
|
16
|
+
reference = cols[2]
|
17
|
+
length = @contigs[reference]
|
18
|
+
|
19
|
+
seq_length = cols[9].length
|
20
|
+
position = cols[3].to_i
|
21
|
+
cigar = cols[5]
|
22
|
+
# this generates a list of pairs in the form [ ["10", "M"], ["1", "D"] ]
|
23
|
+
list = cigar.split(/[MDIS]/).zip(cigar.scan(/[MDIS]/))
|
24
|
+
list.each_with_index do |a, i|
|
25
|
+
c=a[0].to_i
|
26
|
+
t=a[1]
|
27
|
+
if t=="M" or t=="D"
|
28
|
+
position += c
|
29
|
+
elsif i==0 and t=="S"
|
30
|
+
position += c
|
31
|
+
end
|
32
|
+
end
|
33
|
+
if position > length + 1
|
34
|
+
# `diff` is how much the cigar makes the read overlap the end
|
35
|
+
diff = position - (length + 1)
|
36
|
+
if list[-1][1] == "S" # the last item in the cigar is "S"
|
37
|
+
# increase the number in the last item in the cigar
|
38
|
+
list[-1][0] = (list[-1][0].to_i + diff).to_s
|
39
|
+
if list[-2][0].to_i > diff
|
40
|
+
# decrease the penultimate item in the cigar
|
41
|
+
list[-2][0] = (list[-2][0].to_i - diff).to_s
|
42
|
+
elsif list[-2][0].to_i == diff
|
43
|
+
# just delete the penultimate item if
|
44
|
+
list.delete_at(-2) # delete_at changes `list`
|
45
|
+
else
|
46
|
+
# this didn't happen in the rice/oases sam file, but it might
|
47
|
+
end
|
48
|
+
elsif list[-1][1] == "M"
|
49
|
+
if list[-1][0].to_i > diff
|
50
|
+
# decrease the number of the last item in the cigar
|
51
|
+
list[-1][0] = (list[-1][0].to_i - diff).to_s
|
52
|
+
# add a new soft mask item to the end of the cigar
|
53
|
+
list << [diff.to_s, "S"]
|
54
|
+
elsif list[-1][0].to_i == diff
|
55
|
+
# just change the last item to soft mask if it's the same length
|
56
|
+
# as the difference
|
57
|
+
list[-1][1] = "S"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
cols[5] = list.join("")
|
61
|
+
return cols.join("\t")
|
62
|
+
else
|
63
|
+
return sam
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def fix_sam input, output
|
68
|
+
sam1 = ""
|
69
|
+
File.open("#{output}", "wb") do |out|
|
70
|
+
File.open("#{input}").each_line do |sam|
|
71
|
+
if sam =~ /^@/
|
72
|
+
# header
|
73
|
+
# @SQ SN:Locus_1_Transcript_13/342_Confidence_1.000_Length_1605 LN:1605
|
74
|
+
if sam[0..2]=="@SQ"
|
75
|
+
cols = sam.split("\t")
|
76
|
+
name = cols[1][3..-1]
|
77
|
+
length = cols[2][3..-1].to_i
|
78
|
+
@contigs[name] = length
|
79
|
+
end
|
80
|
+
out.write sam
|
81
|
+
else
|
82
|
+
# alignment
|
83
|
+
if @first
|
84
|
+
sam1 = sam.dup
|
85
|
+
@first = false
|
86
|
+
else
|
87
|
+
out.write(check(sam1))
|
88
|
+
out.write(check(sam))
|
89
|
+
@first = true
|
90
|
+
end
|
91
|
+
@count+=1
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
data/lib/transrate/snap.rb
CHANGED
@@ -5,6 +5,8 @@ module Transrate
|
|
5
5
|
|
6
6
|
class Snap
|
7
7
|
|
8
|
+
require 'fix-trinity-output'
|
9
|
+
|
8
10
|
attr_reader :index_name, :sam, :read_count
|
9
11
|
|
10
12
|
def initialize
|
@@ -32,13 +34,14 @@ module Transrate
|
|
32
34
|
cmd << " -s 0 1000" # min and max distance between paired-read starts
|
33
35
|
cmd << " -H 300000" # max seed hits to consider in paired mode
|
34
36
|
cmd << " -h 2000" # max seed hits to consider when reverting to single
|
35
|
-
cmd << " -I" # ignore read IDs
|
36
37
|
cmd << " -d 30" # max edit distance (function of read length?)
|
37
38
|
cmd << " -t #{threads}"
|
38
39
|
cmd << " -b" # bind threads to cores
|
39
40
|
cmd << " -M" # format cigar string
|
40
41
|
cmd << " -sa" # keep all alignments, don't discard 0x100
|
41
|
-
|
42
|
+
cmd << " -D 5" # edit distance to search for mapq calculation
|
43
|
+
cmd << " -om 5" # Output multiple alignments. extra edit distance
|
44
|
+
cmd << " -omax 10" # max alignments per pair/read
|
42
45
|
cmd
|
43
46
|
end
|
44
47
|
|
@@ -52,13 +55,19 @@ module Transrate
|
|
52
55
|
@bam = File.expand_path("#{lbase}.#{rbase}.#{index}.bam")
|
53
56
|
@read_count_file = "#{lbase}-#{rbase}-read_count.txt"
|
54
57
|
|
58
|
+
@fixer = Fixer.new # from the fix-trinity-output gem
|
55
59
|
unless File.exists? @bam
|
56
60
|
snapcmd = build_paired_cmd(left, right, threads)
|
57
61
|
runner = Cmd.new snapcmd
|
58
62
|
runner.run
|
59
63
|
save_readcount runner.stdout
|
60
64
|
unless runner.status.success?
|
61
|
-
|
65
|
+
if runner.stderr=~/Unmatched\sread\sIDs/
|
66
|
+
logger.warn "Unmatched read IDs. Fixing input files..."
|
67
|
+
remap_reads(left, right, threads)
|
68
|
+
else
|
69
|
+
raise SnapError.new("Snap failed\n#{runner.stderr}")
|
70
|
+
end
|
62
71
|
end
|
63
72
|
else
|
64
73
|
load_readcount left
|
@@ -66,6 +75,30 @@ module Transrate
|
|
66
75
|
@bam
|
67
76
|
end
|
68
77
|
|
78
|
+
def remap_reads(left, right, threads)
|
79
|
+
fixedleft = []
|
80
|
+
fixedright = []
|
81
|
+
i = 0
|
82
|
+
left.split(",").zip(right.split(",")).each do |l, r|
|
83
|
+
prefix = "reads-#{i}"
|
84
|
+
@fixer.run(l, r, "#{prefix}")
|
85
|
+
fixedleft << "#{prefix}-fixed.1.fastq"
|
86
|
+
fixedright << "#{prefix}-fixed.2.fastq"
|
87
|
+
i+=1
|
88
|
+
end
|
89
|
+
left = fixedleft.join(",")
|
90
|
+
right = fixedright.join(",")
|
91
|
+
File.delete(@bam)
|
92
|
+
logger.info "Fixed input files"
|
93
|
+
snapcmd = build_paired_cmd(left, right, threads)
|
94
|
+
runner = Cmd.new snapcmd
|
95
|
+
runner.run
|
96
|
+
save_readcount runner.stdout
|
97
|
+
unless runner.status.success?
|
98
|
+
raise SnapError.new("Snap failed\n#{runner.stderr}")
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
69
102
|
def save_readcount stdout
|
70
103
|
stdout.split("\n").each do |line|
|
71
104
|
cols = line.split(/\s+/)
|
data/lib/transrate/version.rb
CHANGED
data/lib/transrate.rb
CHANGED
@@ -8,12 +8,14 @@ require 'transrate/version'
|
|
8
8
|
require 'transrate/contig'
|
9
9
|
require 'transrate/assembly'
|
10
10
|
require 'transrate/snap'
|
11
|
+
require 'transrate/bowtie'
|
11
12
|
require 'transrate/express'
|
12
13
|
require 'transrate/read_metrics'
|
13
14
|
require 'transrate/comparative_metrics'
|
14
15
|
require 'transrate/contig_metrics'
|
15
16
|
require 'transrate/samtools'
|
16
17
|
require 'transrate/cmd'
|
18
|
+
require 'transrate/sam_checker'
|
17
19
|
require 'transrate/transrate.so'
|
18
20
|
|
19
21
|
# Transrate is a comprehensive transcriptome assembly
|
@@ -1,20 +1,20 @@
|
|
1
|
-
@read1
|
1
|
+
@read1/1
|
2
2
|
AAGCACAACTTCCGTGTCCCCTTCGTCTGTGGCTGCCGTGACCTTGGTGAGGCGCTCCGGAGGGTCCGTGAGGGCGCCGCCATGATCCGCACCAAGGGGG
|
3
3
|
+
|
4
4
|
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
5
|
-
@read2
|
5
|
+
@read2/1
|
6
6
|
CACATCAACAAGCACAACTTCCGTGTCCCCTTCGTCTGTGGCTGCCGTGACCTTGGTGAGGCGCTCCGGAGGGTCCGTGAGGGCGCCGCCATGATCCGCA
|
7
7
|
+
|
8
8
|
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
9
|
-
@read3
|
9
|
+
@read3/1
|
10
10
|
CACATCAACAAGCACAACTTCCGTGTCCCCTTCGTCTGTGGCTGCCGTGACCTTGGTGAGGCGCTCCGGAGGGTCCGTGAGGGCGCCGCCATGATCCGCA
|
11
11
|
+
|
12
12
|
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
13
|
-
@read4
|
13
|
+
@read4/1
|
14
14
|
CTTCCGTGTCCCCTTCGTCTGTGGCTGCCGTGACCTTGGTGAGGCGCTCCGGAGGGTCCGTGAGGGCGCCGCCATGATCCGCACCAAGGG
|
15
15
|
+
|
16
16
|
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
17
|
-
@read5
|
17
|
+
@read5/1
|
18
18
|
ACGACGCGCACCACATCAACAAGCACAACTTCCGTGTCCCCTTCGTCTGTGGCTGCCGTGACCTTGGTGAGGCGCTCCGGAGGGTCCGTGAGGGCGCCGC
|
19
19
|
+
|
20
20
|
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
@@ -1,20 +1,20 @@
|
|
1
|
-
@read1
|
1
|
+
@read1/2
|
2
2
|
AGGCCGGGACCGGCAACATCGTCGAGGCCGTCAGGCATGTGCGGTCCGTCATGGGCGATGTCCGTGCGCTCCGGAACATGGATGATGATGAGGTGTTCGC
|
3
3
|
+
|
4
4
|
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
5
|
-
@read2
|
5
|
+
@read2/2
|
6
6
|
GGGACCGGCAACATCGTCGAGGCCGTCAGGCATGTGCGGTCCGTCATGGGCGATGTCCGTGCGCTCCGGAACATGGATGATGATGAGGTGT
|
7
7
|
+
|
8
8
|
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
9
|
-
@read3
|
9
|
+
@read3/2
|
10
10
|
CGGGACCGGCAACATCGTCGAGGCCGTCAGGCATGTGCGGTCCGTCATGGGCGATGTCCGTGCGCTCCGGAACATGGATGATGATGAGGTGTTCGCGTAT
|
11
11
|
+
|
12
12
|
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
13
|
-
@read4
|
13
|
+
@read4/2
|
14
14
|
ACATCGTCGAGGCCGTCAGGCATGTGCGGTCCGTCATGGGCGATGTCCGTGCGCTCCGGAACATGGATGATGATGAGGTGTTCGCGTATGCTAAG
|
15
15
|
+
|
16
16
|
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
17
|
-
@read5
|
17
|
+
@read5/2
|
18
18
|
GGACCGGCAACATCGTCGAGGCCGTCAGGCATGTGCGGTCCGTCATGGGCGATGTCCGTGCGCTCCGGAACATGGATGATGATGAGGTGTTCGCGTATGC
|
19
19
|
+
|
20
20
|
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
data/test/test_bin.rb
CHANGED
@@ -24,7 +24,11 @@ class TestTransrateBin < Test::Unit::TestCase
|
|
24
24
|
"sorghum_transcript.fa_bam_info.csv",
|
25
25
|
"transrate_sorghum_transcript.fa_contigs.csv",
|
26
26
|
"150uncovered.l.fq-150uncovered.r.fq-read_count.txt",
|
27
|
-
"150uncovered.l.fq.150uncovered.r.fq.sorghum_transcript.merged.sorted.bam"
|
27
|
+
"150uncovered.l.fq.150uncovered.r.fq.sorghum_transcript.merged.sorted.bam",
|
28
|
+
"150uncovered.l.fq.150uncovered.r.fq.sorghum_transcript.merged.valid.bam",
|
29
|
+
"150uncovered.l.fq.150uncovered.r.fq.sorghum_transcript.valid.bam",
|
30
|
+
"150uncovered.l.fq.150uncovered.r.fq.sorghum_transcript.valid.sorted.bam",
|
31
|
+
"150uncovered.l.fq.150uncovered.r.fq.sorghum_transcript.sam-read_count.txt"]
|
28
32
|
files.each do |file|
|
29
33
|
File.delete(file) if File.exist?(file)
|
30
34
|
end
|
@@ -66,6 +70,10 @@ class TestTransrateBin < Test::Unit::TestCase
|
|
66
70
|
assert File.exist?("transrate_sorghum_transcript.fa_contigs.csv"),
|
67
71
|
"contig csv file doesn't exist"
|
68
72
|
hash = {}
|
73
|
+
if !c.status.success?
|
74
|
+
puts c.stderr
|
75
|
+
puts c.stdout
|
76
|
+
end
|
69
77
|
CSV.foreach("transrate_assemblies.csv", :headers => true,
|
70
78
|
:header_converters => :symbol,
|
71
79
|
:converters => :all) do |row|
|
data/test/test_read_metrics.rb
CHANGED
@@ -27,23 +27,36 @@ class TestReadMetrics < Test::Unit::TestCase
|
|
27
27
|
left = File.join(File.dirname(__FILE__), 'data', '150uncovered.l.fq')
|
28
28
|
right = File.join(File.dirname(__FILE__), 'data', '150uncovered.r.fq')
|
29
29
|
Dir.mktmpdir do |tmpdir|
|
30
|
+
# tmpdir = Dir.mktmpdir
|
31
|
+
# puts tmpdir
|
30
32
|
Dir.chdir tmpdir do
|
31
33
|
@read_metrics.run(left, right)
|
32
34
|
stats = @read_metrics.read_stats
|
33
35
|
assert @read_metrics.has_run, "has run"
|
34
36
|
assert_equal 223, stats[:fragments], 'number of read pairs'
|
35
|
-
assert_equal
|
36
|
-
assert_equal 0.
|
37
|
+
assert_equal 219, stats[:fragments_mapped], 'number mapping'
|
38
|
+
assert_equal 0.9821, stats[:p_fragments_mapped].round(4),
|
37
39
|
'proportion mapping'
|
38
|
-
assert_equal
|
39
|
-
assert_equal 0.
|
40
|
+
assert_equal 184, stats[:good_mappings], 'good mapping'
|
41
|
+
assert_equal 0.8251, stats[:p_good_mapping].round(4),
|
40
42
|
'percent good mapping'
|
41
|
-
assert_equal
|
42
|
-
|
43
|
+
assert_equal 35, stats[:bad_mappings], 'bad mapping'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
should "calculate more read mapping statistics" do
|
49
|
+
left = File.join(File.dirname(__FILE__), 'data', '150uncovered.l.fq')
|
50
|
+
right = File.join(File.dirname(__FILE__), 'data', '150uncovered.r.fq')
|
51
|
+
Dir.mktmpdir do |tmpdir|
|
52
|
+
Dir.chdir tmpdir do
|
53
|
+
@read_metrics.run(left, right)
|
54
|
+
stats = @read_metrics.read_stats
|
55
|
+
assert_equal 0, stats[:potential_bridges], 'bridges'
|
43
56
|
assert_equal 2, stats[:contigs_uncovbase], 'uncovered base contig'
|
44
57
|
assert_equal 0, stats[:contigs_uncovered], 'uncovered contig'
|
45
58
|
assert_equal 0, stats[:contigs_lowcovered], 'lowcovered contig'
|
46
|
-
assert_equal
|
59
|
+
assert_equal 1, stats[:contigs_good], 'good contigs'
|
47
60
|
end
|
48
61
|
end
|
49
62
|
end
|
@@ -63,22 +76,22 @@ class TestReadMetrics < Test::Unit::TestCase
|
|
63
76
|
|
64
77
|
edit_a = a[:p_seq_true].round(5)
|
65
78
|
edit_b = b[:p_seq_true].round(5)
|
66
|
-
assert_equal 0.
|
67
|
-
assert_equal 0.
|
79
|
+
assert_equal 0.98618, edit_a, "edit distance 1"
|
80
|
+
assert_equal 0.9749, edit_b, "edit distance 2"
|
68
81
|
|
69
|
-
assert_equal 0.
|
70
|
-
assert_equal 0.
|
82
|
+
assert_equal 0.83146, a[:p_good].round(5), "proportion of good mappings"
|
83
|
+
assert_equal 0.84615, b[:p_good].round(5), "proportion of good mappings"
|
71
84
|
|
72
85
|
# uncovered bases
|
73
86
|
unc_a = contigs[0].uncovered_bases
|
74
87
|
unc_b = contigs[1].uncovered_bases
|
75
|
-
assert_equal
|
76
|
-
assert_equal
|
88
|
+
assert_equal 12, unc_a, "uncovered bases"
|
89
|
+
assert_equal 4, unc_b, "uncovered bases"
|
77
90
|
|
78
91
|
prop_unc_a = a[:p_bases_covered]
|
79
92
|
prop_unc_b = b[:p_bases_covered]
|
80
|
-
assert_equal 0.
|
81
|
-
assert_equal 0.
|
93
|
+
assert_equal 0.98361, prop_unc_a.round(5), "proportion covered bases"
|
94
|
+
assert_equal 0.99514, prop_unc_b.round(5), "proportion covered bases"
|
82
95
|
|
83
96
|
end
|
84
97
|
end
|
@@ -99,8 +112,8 @@ class TestReadMetrics < Test::Unit::TestCase
|
|
99
112
|
|
100
113
|
edit_a = a[:p_not_segmented].round(5)
|
101
114
|
edit_b = b[:p_not_segmented].round(5)
|
102
|
-
assert_equal 0.
|
103
|
-
assert_equal 0.
|
115
|
+
assert_equal 0.47635, edit_a, "probability not segmented 1"
|
116
|
+
assert_equal 0.77451, edit_b, "probability not segmented 2"
|
104
117
|
|
105
118
|
end
|
106
119
|
end
|
data/test/test_transrater.rb
CHANGED
@@ -59,7 +59,7 @@ class TestTransrater < Test::Unit::TestCase
|
|
59
59
|
Dir.chdir tmpdir do
|
60
60
|
all = @rater.all_metrics(@left, @right)
|
61
61
|
score = @rater.assembly_score
|
62
|
-
assert_equal 0.
|
62
|
+
assert_equal 0.4078, score.round(5) # regression test
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
data/transrate.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.add_dependency 'bio', '~> 1.4', '>= 1.4.3'
|
24
24
|
gem.add_dependency 'crb-blast', '~> 0.4', '>= 0.4.2'
|
25
25
|
gem.add_dependency 'ruby-prof', '~> 0.15', '>= 0.15.1'
|
26
|
+
gem.add_dependency 'fix-trinity-output', '~> 1.0', '>= 1.0'
|
26
27
|
|
27
28
|
gem.add_development_dependency 'rake', '~> 10.3', '>= 10.3.2'
|
28
29
|
gem.add_development_dependency 'rake-compiler', '~> 0.9', '>= 0.9.2'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: transrate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.alpha.
|
4
|
+
version: 1.0.0.alpha.8.bowtie
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Smith-Unna
|
@@ -9,258 +9,278 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-11-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: yell
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '2.0'
|
21
|
-
- -
|
21
|
+
- - '>='
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 2.0.4
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- -
|
28
|
+
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '2.0'
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 2.0.4
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: trollop
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.0'
|
41
41
|
type: :runtime
|
42
42
|
prerelease: false
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '2.0'
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: bindeps
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.1'
|
55
|
-
- -
|
55
|
+
- - '>='
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: 0.1.3
|
58
58
|
type: :runtime
|
59
59
|
prerelease: false
|
60
60
|
version_requirements: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
|
-
- -
|
62
|
+
- - ~>
|
63
63
|
- !ruby/object:Gem::Version
|
64
64
|
version: '0.1'
|
65
|
-
- -
|
65
|
+
- - '>='
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: 0.1.3
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
69
|
name: bio
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- -
|
72
|
+
- - ~>
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '1.4'
|
75
|
-
- -
|
75
|
+
- - '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: 1.4.3
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
|
-
- -
|
82
|
+
- - ~>
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '1.4'
|
85
|
-
- -
|
85
|
+
- - '>='
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: 1.4.3
|
88
88
|
- !ruby/object:Gem::Dependency
|
89
89
|
name: crb-blast
|
90
90
|
requirement: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
|
-
- -
|
92
|
+
- - ~>
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '0.4'
|
95
|
-
- -
|
95
|
+
- - '>='
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: 0.4.2
|
98
98
|
type: :runtime
|
99
99
|
prerelease: false
|
100
100
|
version_requirements: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ~>
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0.4'
|
105
|
-
- -
|
105
|
+
- - '>='
|
106
106
|
- !ruby/object:Gem::Version
|
107
107
|
version: 0.4.2
|
108
108
|
- !ruby/object:Gem::Dependency
|
109
109
|
name: ruby-prof
|
110
110
|
requirement: !ruby/object:Gem::Requirement
|
111
111
|
requirements:
|
112
|
-
- -
|
112
|
+
- - ~>
|
113
113
|
- !ruby/object:Gem::Version
|
114
114
|
version: '0.15'
|
115
|
-
- -
|
115
|
+
- - '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: 0.15.1
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ~>
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0.15'
|
125
|
-
- -
|
125
|
+
- - '>='
|
126
126
|
- !ruby/object:Gem::Version
|
127
127
|
version: 0.15.1
|
128
|
+
- !ruby/object:Gem::Dependency
|
129
|
+
name: fix-trinity-output
|
130
|
+
requirement: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ~>
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '1.0'
|
135
|
+
- - '>='
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '1.0'
|
138
|
+
type: :runtime
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ~>
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '1.0'
|
145
|
+
- - '>='
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: '1.0'
|
128
148
|
- !ruby/object:Gem::Dependency
|
129
149
|
name: rake
|
130
150
|
requirement: !ruby/object:Gem::Requirement
|
131
151
|
requirements:
|
132
|
-
- -
|
152
|
+
- - ~>
|
133
153
|
- !ruby/object:Gem::Version
|
134
154
|
version: '10.3'
|
135
|
-
- -
|
155
|
+
- - '>='
|
136
156
|
- !ruby/object:Gem::Version
|
137
157
|
version: 10.3.2
|
138
158
|
type: :development
|
139
159
|
prerelease: false
|
140
160
|
version_requirements: !ruby/object:Gem::Requirement
|
141
161
|
requirements:
|
142
|
-
- -
|
162
|
+
- - ~>
|
143
163
|
- !ruby/object:Gem::Version
|
144
164
|
version: '10.3'
|
145
|
-
- -
|
165
|
+
- - '>='
|
146
166
|
- !ruby/object:Gem::Version
|
147
167
|
version: 10.3.2
|
148
168
|
- !ruby/object:Gem::Dependency
|
149
169
|
name: rake-compiler
|
150
170
|
requirement: !ruby/object:Gem::Requirement
|
151
171
|
requirements:
|
152
|
-
- -
|
172
|
+
- - ~>
|
153
173
|
- !ruby/object:Gem::Version
|
154
174
|
version: '0.9'
|
155
|
-
- -
|
175
|
+
- - '>='
|
156
176
|
- !ruby/object:Gem::Version
|
157
177
|
version: 0.9.2
|
158
178
|
type: :development
|
159
179
|
prerelease: false
|
160
180
|
version_requirements: !ruby/object:Gem::Requirement
|
161
181
|
requirements:
|
162
|
-
- -
|
182
|
+
- - ~>
|
163
183
|
- !ruby/object:Gem::Version
|
164
184
|
version: '0.9'
|
165
|
-
- -
|
185
|
+
- - '>='
|
166
186
|
- !ruby/object:Gem::Version
|
167
187
|
version: 0.9.2
|
168
188
|
- !ruby/object:Gem::Dependency
|
169
189
|
name: turn
|
170
190
|
requirement: !ruby/object:Gem::Requirement
|
171
191
|
requirements:
|
172
|
-
- -
|
192
|
+
- - ~>
|
173
193
|
- !ruby/object:Gem::Version
|
174
194
|
version: '0.9'
|
175
|
-
- -
|
195
|
+
- - '>='
|
176
196
|
- !ruby/object:Gem::Version
|
177
197
|
version: 0.9.7
|
178
198
|
type: :development
|
179
199
|
prerelease: false
|
180
200
|
version_requirements: !ruby/object:Gem::Requirement
|
181
201
|
requirements:
|
182
|
-
- -
|
202
|
+
- - ~>
|
183
203
|
- !ruby/object:Gem::Version
|
184
204
|
version: '0.9'
|
185
|
-
- -
|
205
|
+
- - '>='
|
186
206
|
- !ruby/object:Gem::Version
|
187
207
|
version: 0.9.7
|
188
208
|
- !ruby/object:Gem::Dependency
|
189
209
|
name: minitest
|
190
210
|
requirement: !ruby/object:Gem::Requirement
|
191
211
|
requirements:
|
192
|
-
- -
|
212
|
+
- - ~>
|
193
213
|
- !ruby/object:Gem::Version
|
194
214
|
version: '4'
|
195
|
-
- -
|
215
|
+
- - '>='
|
196
216
|
- !ruby/object:Gem::Version
|
197
217
|
version: 4.7.5
|
198
218
|
type: :development
|
199
219
|
prerelease: false
|
200
220
|
version_requirements: !ruby/object:Gem::Requirement
|
201
221
|
requirements:
|
202
|
-
- -
|
222
|
+
- - ~>
|
203
223
|
- !ruby/object:Gem::Version
|
204
224
|
version: '4'
|
205
|
-
- -
|
225
|
+
- - '>='
|
206
226
|
- !ruby/object:Gem::Version
|
207
227
|
version: 4.7.5
|
208
228
|
- !ruby/object:Gem::Dependency
|
209
229
|
name: simplecov
|
210
230
|
requirement: !ruby/object:Gem::Requirement
|
211
231
|
requirements:
|
212
|
-
- -
|
232
|
+
- - ~>
|
213
233
|
- !ruby/object:Gem::Version
|
214
234
|
version: '0.8'
|
215
|
-
- -
|
235
|
+
- - '>='
|
216
236
|
- !ruby/object:Gem::Version
|
217
237
|
version: 0.8.2
|
218
238
|
type: :development
|
219
239
|
prerelease: false
|
220
240
|
version_requirements: !ruby/object:Gem::Requirement
|
221
241
|
requirements:
|
222
|
-
- -
|
242
|
+
- - ~>
|
223
243
|
- !ruby/object:Gem::Version
|
224
244
|
version: '0.8'
|
225
|
-
- -
|
245
|
+
- - '>='
|
226
246
|
- !ruby/object:Gem::Version
|
227
247
|
version: 0.8.2
|
228
248
|
- !ruby/object:Gem::Dependency
|
229
249
|
name: shoulda-context
|
230
250
|
requirement: !ruby/object:Gem::Requirement
|
231
251
|
requirements:
|
232
|
-
- -
|
252
|
+
- - ~>
|
233
253
|
- !ruby/object:Gem::Version
|
234
254
|
version: '1.2'
|
235
|
-
- -
|
255
|
+
- - '>='
|
236
256
|
- !ruby/object:Gem::Version
|
237
257
|
version: 1.2.1
|
238
258
|
type: :development
|
239
259
|
prerelease: false
|
240
260
|
version_requirements: !ruby/object:Gem::Requirement
|
241
261
|
requirements:
|
242
|
-
- -
|
262
|
+
- - ~>
|
243
263
|
- !ruby/object:Gem::Version
|
244
264
|
version: '1.2'
|
245
|
-
- -
|
265
|
+
- - '>='
|
246
266
|
- !ruby/object:Gem::Version
|
247
267
|
version: 1.2.1
|
248
268
|
- !ruby/object:Gem::Dependency
|
249
269
|
name: coveralls
|
250
270
|
requirement: !ruby/object:Gem::Requirement
|
251
271
|
requirements:
|
252
|
-
- -
|
272
|
+
- - ~>
|
253
273
|
- !ruby/object:Gem::Version
|
254
274
|
version: '0.7'
|
255
275
|
type: :development
|
256
276
|
prerelease: false
|
257
277
|
version_requirements: !ruby/object:Gem::Requirement
|
258
278
|
requirements:
|
259
|
-
- -
|
279
|
+
- - ~>
|
260
280
|
- !ruby/object:Gem::Version
|
261
281
|
version: '0.7'
|
262
|
-
description:
|
263
|
-
assemblies
|
282
|
+
description: ' a library and command-line tool for quality assessment of de-novo transcriptome
|
283
|
+
assemblies '
|
264
284
|
email: rds45@cam.ac.uk
|
265
285
|
executables:
|
266
286
|
- transrate
|
@@ -268,8 +288,8 @@ extensions:
|
|
268
288
|
- ext/transrate/extconf.rb
|
269
289
|
extra_rdoc_files: []
|
270
290
|
files:
|
271
|
-
-
|
272
|
-
-
|
291
|
+
- .gitignore
|
292
|
+
- .travis.yml
|
273
293
|
- Gemfile
|
274
294
|
- LICENSE
|
275
295
|
- README.md
|
@@ -281,12 +301,14 @@ files:
|
|
281
301
|
- ext/transrate/transrate.c
|
282
302
|
- lib/transrate.rb
|
283
303
|
- lib/transrate/assembly.rb
|
304
|
+
- lib/transrate/bowtie.rb
|
284
305
|
- lib/transrate/cmd.rb
|
285
306
|
- lib/transrate/comparative_metrics.rb
|
286
307
|
- lib/transrate/contig.rb
|
287
308
|
- lib/transrate/contig_metrics.rb
|
288
309
|
- lib/transrate/express.rb
|
289
310
|
- lib/transrate/read_metrics.rb
|
311
|
+
- lib/transrate/sam_checker.rb
|
290
312
|
- lib/transrate/samtools.rb
|
291
313
|
- lib/transrate/snap.rb
|
292
314
|
- lib/transrate/transrater.rb
|
@@ -325,18 +347,19 @@ require_paths:
|
|
325
347
|
- ext
|
326
348
|
required_ruby_version: !ruby/object:Gem::Requirement
|
327
349
|
requirements:
|
328
|
-
- -
|
350
|
+
- - '>='
|
329
351
|
- !ruby/object:Gem::Version
|
330
352
|
version: '0'
|
331
353
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
332
354
|
requirements:
|
333
|
-
- -
|
355
|
+
- - '>'
|
334
356
|
- !ruby/object:Gem::Version
|
335
357
|
version: 1.3.1
|
336
358
|
requirements: []
|
337
359
|
rubyforge_project:
|
338
|
-
rubygems_version: 2.
|
360
|
+
rubygems_version: 2.1.4
|
339
361
|
signing_key:
|
340
362
|
specification_version: 4
|
341
363
|
summary: quality assessment of de-novo transcriptome assemblies
|
342
364
|
test_files: []
|
365
|
+
has_rdoc:
|