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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3fc633cd9166010a55ea892edc4737c2f3221ccf
4
- data.tar.gz: 2e9729a73f4128503d992b39c9711e15c89bae7b
3
+ metadata.gz: 0f6903da751cadec5102d2fa7e9c2381a9c39a25
4
+ data.tar.gz: bf9b30c2e334ae98ad6d959b085d521d43e5daf4
5
5
  SHA512:
6
- metadata.gz: ef6f9cc4be67ec2b5d09fc9ab7487e3b21b0409e0af63752f33cf977e1d3f50f1644622af76cfba54d6b28c63b36a3607842d38ce0fdec51ff6c4d67063b571f
7
- data.tar.gz: d4cc715ba05d3a332882a492fd99ea4ad79f48198dce550b7c1cefed3025663ff88ed7257554e9f4897fbb20f23c337135d72e6a8f3ac142182162875ff6dafa
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, info, warn, debug]",
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 opts.profile
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 opts.profile
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
- snap:
28
+ bowtie2:
29
29
  binaries:
30
- - snap
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: '1.0beta.13'
33
- command: 'snap'
40
+ number: '2.2.3'
41
+ command: 'bowtie2 --version'
34
42
  url:
35
43
  64bit:
36
- linux: https://github.com/HibberdLab/snap/raw/master/bin/linux/snap.tar.gz
37
- macosx: https://github.com/HibberdLab/snap/raw/osx_1.0beta.13/bin/macosx/snap.tar.gz
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.2'
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.1'
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
@@ -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 * # scaled 1 - mean per-base edit distance
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
@@ -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
- raise ExpressError.new("Express failed\n" +
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 = Snap.new
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, threads)
51
- bamfile = @mapper.map_reads(@assembly.file, left, right,
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
- unless File.exist? sorted_bam
62
- unless File.exist? readsorted_bam
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
- logger.warn "Couldn't split bam file: #{bamfile}" +
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
- logger.warn "Splitting failed to create valid bam: #{valid}"
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
- coverage = expr[:eff_count] * @read_length / expr[:eff_len]
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 bamfile, csv_output
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
- logger.warn "couldn't find bamfile: #{bamfile}"
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
- logger.warn "couldn't get information from bam file: #{bamfile}"
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
@@ -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
- # cmd << " -C++" # trim low-quality bases from front and back of reads
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
- raise SnapError.new("Snap failed\n#{runner.stderr}\n#{runner.stdout}")
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+/)
@@ -11,7 +11,7 @@ module Transrate
11
11
  MAJOR = 1
12
12
  MINOR = 0
13
13
  PATCH = 0
14
- BUILD = 'alpha.5'
14
+ BUILD = 'alpha.8.bowtie'
15
15
 
16
16
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
17
17
  end
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
1
+ @read1/1
2
2
  AAGCACAACTTCCGTGTCCCCTTCGTCTGTGGCTGCCGTGACCTTGGTGAGGCGCTCCGGAGGGTCCGTGAGGGCGCCGCCATGATCCGCACCAAGGGGG
3
3
  +
4
4
  gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
5
- @read2:1
5
+ @read2/1
6
6
  CACATCAACAAGCACAACTTCCGTGTCCCCTTCGTCTGTGGCTGCCGTGACCTTGGTGAGGCGCTCCGGAGGGTCCGTGAGGGCGCCGCCATGATCCGCA
7
7
  +
8
8
  gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
9
- @read3:1
9
+ @read3/1
10
10
  CACATCAACAAGCACAACTTCCGTGTCCCCTTCGTCTGTGGCTGCCGTGACCTTGGTGAGGCGCTCCGGAGGGTCCGTGAGGGCGCCGCCATGATCCGCA
11
11
  +
12
12
  gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
13
- @read4:1
13
+ @read4/1
14
14
  CTTCCGTGTCCCCTTCGTCTGTGGCTGCCGTGACCTTGGTGAGGCGCTCCGGAGGGTCCGTGAGGGCGCCGCCATGATCCGCACCAAGGG
15
15
  +
16
16
  gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
17
- @read5:1
17
+ @read5/1
18
18
  ACGACGCGCACCACATCAACAAGCACAACTTCCGTGTCCCCTTCGTCTGTGGCTGCCGTGACCTTGGTGAGGCGCTCCGGAGGGTCCGTGAGGGCGCCGC
19
19
  +
20
20
  gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
@@ -1,20 +1,20 @@
1
- @read1:2
1
+ @read1/2
2
2
  AGGCCGGGACCGGCAACATCGTCGAGGCCGTCAGGCATGTGCGGTCCGTCATGGGCGATGTCCGTGCGCTCCGGAACATGGATGATGATGAGGTGTTCGC
3
3
  +
4
4
  gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
5
- @read2:2
5
+ @read2/2
6
6
  GGGACCGGCAACATCGTCGAGGCCGTCAGGCATGTGCGGTCCGTCATGGGCGATGTCCGTGCGCTCCGGAACATGGATGATGATGAGGTGT
7
7
  +
8
8
  ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
9
- @read3:2
9
+ @read3/2
10
10
  CGGGACCGGCAACATCGTCGAGGCCGTCAGGCATGTGCGGTCCGTCATGGGCGATGTCCGTGCGCTCCGGAACATGGATGATGATGAGGTGTTCGCGTAT
11
11
  +
12
12
  gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
13
- @read4:2
13
+ @read4/2
14
14
  ACATCGTCGAGGCCGTCAGGCATGTGCGGTCCGTCATGGGCGATGTCCGTGCGCTCCGGAACATGGATGATGATGAGGTGTTCGCGTATGCTAAG
15
15
  +
16
16
  ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
17
- @read5:2
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|
@@ -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 217, stats[:fragments_mapped], 'number mapping'
36
- assert_equal 0.9731, stats[:p_fragments_mapped].round(4),
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 129, stats[:good_mappings], 'good mapping'
39
- assert_equal 0.5785, stats[:p_good_mapping].round(4),
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 88, stats[:bad_mappings], 'bad mapping'
42
- assert_equal 2, stats[:potential_bridges], 'bridges'
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 0, stats[:contigs_good], 'good contigs'
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.98342, edit_a, "edit distance 1"
67
- assert_equal 0.96645, edit_b, "edit distance 2"
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.59524, a[:p_good].round(5), "proportion of good mappings"
70
- assert_equal 0.59398, b[:p_good].round(5), "proportion of good mappings"
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 11, unc_a, "uncovered bases"
76
- assert_equal 2, unc_b, "uncovered bases"
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.98497, prop_unc_a.round(5), "proportion covered bases"
81
- assert_equal 0.99757, prop_unc_b.round(5), "proportion covered bases"
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.11444, edit_a, "probability not segmented 1"
103
- assert_equal 0.82779, edit_b, "probability not segmented 2"
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
@@ -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.10231, score.round(5) # regression test
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.5
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-10-22 00:00:00.000000000 Z
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: " a library and command-line tool for quality assessment of de-novo transcriptome
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
- - ".gitignore"
272
- - ".travis.yml"
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.2.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: