transrate 1.0.0.alpha.2 → 1.0.0.alpha.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42c9c17a154a468377a5175f9937eb849c97e796
4
- data.tar.gz: ddf0feca917a5d832ddf10143622ef121cd0cb73
3
+ metadata.gz: e36efc13482215880b40860b64a69253f3dc886b
4
+ data.tar.gz: 89f65043547cedb0552a7b620ea845c003f77637
5
5
  SHA512:
6
- metadata.gz: 995833e4d14e1ceddebfd4c6f8f4c6a53fe1267a0ed53017844161803d575e7a3eaf17761315211b750fdf81c297179d17a975e737f1d2d17ca79e1a590f945e
7
- data.tar.gz: 97f1ec6b36ec186e67c2c8b0550c6e90ac6ac4e59364a9c95c12b6c3ed516543a7143306ad641b8176c5da3148e0e762ddc03a42fc1c1236891832f5af73ba44
6
+ metadata.gz: 4e3ce4a80fc7bf7ef37f4a2322101f375b6efcf8bbed5dc8034f1bcbf871d2349292e2cc1a22f393bcabe3cddff60f4e1afd25d5267b1d3a2a7ea12e8a09ebf0
7
+ data.tar.gz: ee91ff26631d3204f43698a3afc4acfd0fc34a2068bde2c868897e347ff2bd8ca05225bc878267fc8454d58bd3a628fd7636735f9e8bd0472a7e3f90d1d829b9
data/bin/transrate CHANGED
@@ -6,11 +6,14 @@ require 'csv'
6
6
  require 'bindeps'
7
7
  require 'ruby-prof'
8
8
 
9
+ ARGV[0] = "--help" if ARGV.length() == 0
10
+
9
11
  opts = Trollop::options do
10
12
  version Transrate::VERSION::STRING.dup
11
13
  banner <<-EOS
12
14
 
13
- Transrate v#{Transrate::VERSION::STRING.dup} by Richard Smith-Unna <rds45@cam.ac.uk>
15
+ Transrate v#{Transrate::VERSION::STRING.dup}
16
+ by Richard Smith-Unna <rds45@cam.ac.uk> and Chris Boursnell
14
17
 
15
18
  DESCRIPTION:
16
19
  Analyse a de-novo transcriptome assembly using three kinds of metrics:
@@ -26,8 +29,10 @@ opts = Trollop::options do
26
29
  transrate <options>
27
30
 
28
31
  EXAMPLES:
29
- # just check dependencies and install any that are missing
32
+ # check dependencies and install any that are missing
30
33
  transrate --install-deps
34
+ # get the transrate score for the assembly and each contig
35
+ transrate --assembly contigs.fa --left left.fq --right right.fq
31
36
  # contig metrics only
32
37
  transrate --assembly contigs.fa
33
38
  # contig and reference-based metrics with 8 threads
@@ -57,7 +62,6 @@ opts = Trollop::options do
57
62
  opt :install_deps, "install any missing dependencies"
58
63
  opt :profile, "debug option: profile the code as it runs"
59
64
  end
60
-
61
65
  gem_dir = Gem.loaded_specs['transrate'].full_gem_path
62
66
  gem_deps = File.join(gem_dir, 'deps', 'deps.yaml')
63
67
  if opts.install_deps
@@ -70,7 +74,7 @@ else
70
74
  if missing.length > 0
71
75
  puts "Dependencies are missing:"
72
76
  missing.each do |dep|
73
- puts " - #{dep}"
77
+ puts " - #{dep.name} (#{dep.version})"
74
78
  end
75
79
  puts "To install all missing dependencies, run `transrate --install-deps`"
76
80
  exit(1)
data/deps/deps.yaml CHANGED
@@ -50,7 +50,7 @@ bam-read:
50
50
  binaries:
51
51
  - bam-read
52
52
  version:
53
- number: '0.3\.1'
53
+ number: '0.3.2'
54
54
  command: 'bam-read'
55
55
  url:
56
56
  64bit:
data/lib/transrate.rb CHANGED
@@ -22,7 +22,9 @@ module Transrate
22
22
 
23
23
  # Create the universal logger and include it in Object
24
24
  # making the logger object available everywhere
25
- Yell.new(:format => "[%5L]: %m") do |l|
25
+ format = Yell::Formatter.new("[%5L] %d : %m", "%Y-%m-%d %H:%M:%S")
26
+ # http://xkcd.com/1179/
27
+ Yell.new(:format => format) do |l|
26
28
  l.level = :info
27
29
  l.name = Object
28
30
  l.adapter STDOUT, level: [:debug, :info, :warn]
@@ -10,6 +10,7 @@ module Transrate
10
10
  def_delegators :@seq, :size, :length
11
11
  attr_accessor :seq, :name
12
12
  # read-based metrics
13
+ attr_accessor :eff_length, :eff_count, :tpm
13
14
  attr_accessor :coverage, :uncovered_bases, :p_uncovered_bases
14
15
  attr_accessor :p_seq_true, :p_unique
15
16
  attr_accessor :low_uniqueness_bases, :in_bridges
@@ -64,7 +65,10 @@ module Transrate
64
65
  :score => score,
65
66
  :p_unique => p_unique,
66
67
  :p_not_segmented => p_not_segmented,
67
- :expression => coverage
68
+ :eff_length => eff_length,
69
+ :eff_count => eff_count,
70
+ :tpm => tpm,
71
+ :coverage => coverage
68
72
  }
69
73
  end
70
74
 
@@ -68,8 +68,14 @@ module Transrate
68
68
  end
69
69
  line = line.chomp.split("\t")
70
70
  target = line[1]
71
+ effective_length = line[3]
71
72
  effective_count = line[7]
72
- expression[target] = effective_count.to_f
73
+ tpm = line[14]
74
+ expression[target] = {
75
+ :eff_len => effective_length.to_i,
76
+ :eff_count => effective_count.to_f,
77
+ :tpm => tpm.to_f
78
+ }
73
79
  end
74
80
  expression
75
81
  end
@@ -57,24 +57,30 @@ module Transrate
57
57
  # classify bam file into valid and invalid alignments
58
58
  sorted_bam = "#{File.basename(bamfile, '.bam')}.merged.sorted.bam"
59
59
  readsorted_bam = "#{File.basename(bamfile, '.bam')}.valid.sorted.bam"
60
- unless File.exist? readsorted_bam
61
- valid_bam, invalid_bam = split_bam bamfile
62
- readsorted_bam = Samtools.readsort_bam(valid_bam, threads)
63
- File.delete valid_bam
60
+ 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
64
67
  end
65
68
 
66
69
  # pass valid alignments to eXpress for assignment
67
70
  # always have to run the eXpress command to load the results
68
71
  assigned_bam = assign_and_quantify readsorted_bam
72
+ File.delete readsorted_bam if File.exist? readsorted_bam
69
73
 
70
74
  # merge the assigned alignments back with the invalid ones
71
75
  unless File.exist? sorted_bam
72
- File.delete readsorted_bam
73
- merged_bam = "#{File.basename(bamfile, '.bam')}.merged.bam"
74
- Samtools.merge_bam(invalid_bam, assigned_bam, merged_bam, threads=threads)
75
- File.delete invalid_bam
76
- File.delete assigned_bam
77
- sorted_bam = Samtools.sort_bam(merged_bam, threads)
76
+ unless File.exist? merged_bam
77
+ Samtools.merge_bam(invalid_bam, assigned_bam,
78
+ merged_bam, threads=threads)
79
+
80
+ File.delete invalid_bam
81
+ File.delete assigned_bam
82
+ end
83
+ sorted_bam = Samtools.sort_bam(merged_bam, [4, threads].min)
78
84
  File.delete merged_bam
79
85
  end
80
86
 
@@ -154,11 +160,15 @@ module Transrate
154
160
  end
155
161
 
156
162
  def analyse_expression express_output
157
- express_output.each_pair do |name, eff_count|
158
- @contigs_uncovered += 1 if eff_count < 1
159
- @contigs_lowcovered += 1 if eff_count < 10
163
+ express_output.each_pair do |name, expr|
160
164
  contig = @assembly[name]
161
- contig.coverage = eff_count
165
+ coverage = expr[:eff_count] * @read_length / expr[:eff_len]
166
+ @contigs_uncovered += 1 if coverage < 1
167
+ @contigs_lowcovered += 1 if coverage < 10
168
+ contig.coverage = coverage.round(2)
169
+ contig.eff_length = expr[:eff_len]
170
+ contig.eff_count = expr[:eff_count]
171
+ contig.tpm = expr[:tpm]
162
172
  end
163
173
  end
164
174
 
@@ -47,7 +47,7 @@ module Transrate
47
47
  sorted = File.basename(bamfile, '.bam') + '.sorted'
48
48
  if !File.exist?("#{sorted}.bam")
49
49
  cmd = "sort"
50
- cmd << " -l #{threads}"
50
+ cmd << " -@ #{threads}"
51
51
  cmd << " #{File.expand_path bamfile} #{sorted}"
52
52
  Samtools.run cmd
53
53
  end
@@ -63,7 +63,7 @@ module Transrate
63
63
  sorted = File.basename(bamfile, '.bam') + '.sorted'
64
64
  if !File.exist?("#{sorted}.bam")
65
65
  cmd = "sort"
66
- cmd << " -l #{threads}"
66
+ cmd << " -@ #{threads}"
67
67
  cmd << " -n" # sort by read name only
68
68
  cmd << " #{File.expand_path bamfile} #{sorted}"
69
69
  Samtools.run cmd
@@ -11,7 +11,7 @@ module Transrate
11
11
  MAJOR = 1
12
12
  MINOR = 0
13
13
  PATCH = 0
14
- BUILD = 'alpha.2'
14
+ BUILD = 'alpha.3'
15
15
 
16
16
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
17
17
  end
data/test/test_bin.rb CHANGED
@@ -93,6 +93,10 @@ class TestTransrateBin < Test::Unit::TestCase
93
93
  cmd << " --right #{right.join(",")}"
94
94
  c = Transrate::Cmd.new("#{cmd}")
95
95
  c.run
96
+ if !(c.status.success?)
97
+ puts c.stdout
98
+ puts c.stderr
99
+ end
96
100
  assert_equal true, c.status.success?, "exit status"
97
101
  assert File.exist?("transrate_assemblies.csv")
98
102
  assert File.exist?("transrate_sorghum_transcript.fa_contigs.csv"),
@@ -73,12 +73,12 @@ class TestReadMetrics < Test::Unit::TestCase
73
73
  unc_a = contigs[0].uncovered_bases
74
74
  unc_b = contigs[1].uncovered_bases
75
75
  assert_equal 11, unc_a, "uncovered bases"
76
- assert_equal 1, unc_b, "uncovered bases"
76
+ assert_equal 2, unc_b, "uncovered bases"
77
77
 
78
78
  prop_unc_a = a[:p_bases_covered]
79
79
  prop_unc_b = b[:p_bases_covered]
80
80
  assert_equal 0.98497, prop_unc_a.round(5), "proportion covered bases"
81
- assert_equal 0.99878, prop_unc_b.round(5), "proportion covered bases"
81
+ assert_equal 0.99757, prop_unc_b.round(5), "proportion covered bases"
82
82
 
83
83
  end
84
84
  end
@@ -100,7 +100,7 @@ class TestReadMetrics < Test::Unit::TestCase
100
100
  edit_a = a[:p_not_segmented].round(5)
101
101
  edit_b = b[:p_not_segmented].round(5)
102
102
  assert_equal 0.11444, edit_a, "probability not segmented 1"
103
- assert_equal 0.79629, edit_b, "probability not segmented 2"
103
+ assert_equal 0.82779, edit_b, "probability not segmented 2"
104
104
 
105
105
  end
106
106
  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.40755, score.round(5) # regression test
62
+ assert_equal 0.40908, score.round(5) # regression test
63
63
  end
64
64
  end
65
65
  end
data/transrate.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
19
19
 
20
20
  gem.add_dependency 'yell', '~> 2.0', '>= 2.0.4'
21
21
  gem.add_dependency 'trollop', '~> 2.0'
22
- gem.add_dependency 'bindeps', '~> 0.1', '>= 0.1.2'
22
+ gem.add_dependency 'bindeps', '~> 0.1', '>= 0.1.3'
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'
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.2
4
+ version: 1.0.0.alpha.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Smith-Unna
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-17 00:00:00.000000000 Z
12
+ date: 2014-10-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yell
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0.1'
55
55
  - - ">="
56
56
  - !ruby/object:Gem::Version
57
- version: 0.1.2
57
+ version: 0.1.3
58
58
  type: :runtime
59
59
  prerelease: false
60
60
  version_requirements: !ruby/object:Gem::Requirement
@@ -64,7 +64,7 @@ dependencies:
64
64
  version: '0.1'
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: 0.1.2
67
+ version: 0.1.3
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: bio
70
70
  requirement: !ruby/object:Gem::Requirement