transrate 1.0.0.alpha.5 → 1.0.0.alpha.8.bowtie
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.
- 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:
|