vienna_rna 0.9.2 → 0.10.0

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: 75269157e25be08827f08546fffdb90af43be397
4
- data.tar.gz: a8b2094c492af287894e3219e3328233ecf31340
3
+ metadata.gz: 064267b829cc8e40a82c40eec4db4acb4f710fb8
4
+ data.tar.gz: 2e6ec0c50d34abe789ea52cb2a77c9e6ab248840
5
5
  SHA512:
6
- metadata.gz: 26a7068d00b8181041fc0ea12d38a25b65724ff3eb0dd2e910821bbea27c4bfa7317835956242881cac3e1cc64442e6cfc3a23e3135d5e16f2382c0648dbaa7a
7
- data.tar.gz: bd6799d8ca85f2ddf712fac00e97eb17700b01218e2a99579a0aba94ee2d0fd7a899bff56a473b8b719f7eec8112ab110dd02372a43f5326b19d107aac4ea829
6
+ metadata.gz: 9e0a39db0c7c85a01604f2bea3bff2ca5dd7119556d25c734883805f8d22fd2ea50511f4d446bdd91f3dff4947caf7f5e1a2abcba06c3e0f0d0c660a89a97174
7
+ data.tar.gz: cdc48b4f2457ed25eac73a3d8031662b5bad97de71c38980b3d9780dccef4e96120801f35cb9a183dc33a989eb2629156d6221ac123c1d3f201eca8487e80289
data/README.md CHANGED
@@ -20,3 +20,18 @@ Simple use case:
20
20
  #=> echo CCUCGAGGGGAACCCGAAAGGGACCCGAGAGG | rnafold --noPS
21
21
  #=> Total runtime: 0.013 sec.
22
22
  #=> #<ViennaRna::Rna CCUCGAGGGGAACCCGAAAG... ((((..(((...(((....) [truncated]>
23
+
24
+ ... and now you can even do crazy stuff like this (taking a sequence, inferring the MFE, calculating the 2D energy landscape and computing the MFPT by chaining commands)!
25
+
26
+ RNA("GGGGGCCCCC", :empty, fold: { d: 0 }).run(:fftbor2d).chain(:mfpt).mfpt
27
+ #=> ViennaRna::Package::Fold: {"-noPS"=>:empty, :d=>0}
28
+ #=> echo 'GGGGGCCCCC' | RNAfold --noPS -d 0
29
+ #=> Total runtime: 0.014 sec.
30
+ #=> ViennaRna::Package::Fftbor2d: {:S=>:empty}
31
+ #=> Running FFTbor2D on #<ViennaRna::Global::Rna GGGGGCCCCC .......... (((....)))>
32
+ #=> FFTbor2D -S /var/folders/_2/0js_xvm95zz8jv0lxlh8p__40000gn/T/rna20131103-7845-1ok9xnt
33
+ #=> Total runtime: 0.041 sec.
34
+ #=> ViennaRna::Package::Mfpt: {:X=>:empty, :H=>:empty, :N=>10, :Q=>"1e-8"}
35
+ #=> RNAmfpt -X -H -N 10 -Q 1e-8 /var/folders/_2/0js_xvm95zz8jv0lxlh8p__40000gn/T/rna20131103-7845-1h1uz0l
36
+ #=> Total runtime: 0.012 sec.
37
+ #=> 2160.58769316
@@ -1,31 +1,29 @@
1
1
  require "benchmark"
2
2
  require "set"
3
- require "bio"
4
3
  require "shuffle"
5
- require "matrix"
6
4
  require "rinruby"
7
- require "rroc"
8
5
  require "tempfile"
9
6
  require "bigdecimal"
10
7
  require "diverge"
11
8
  require "active_support/inflector"
12
9
  require "active_support/core_ext/class"
13
- require "active_support/core_ext/module/aliasing"
14
10
 
15
11
  require "vienna_rna/global/rna_extensions"
16
12
  require "vienna_rna/global/rna"
17
13
  require "vienna_rna/global/parser"
14
+ require "vienna_rna/global/run_extensions"
15
+ require "vienna_rna/global/chain_extensions"
18
16
  require "vienna_rna/graphing/r"
19
17
  require "vienna_rna/package/base"
20
18
 
21
19
  begin; R.quit; rescue IOError; end
22
20
 
23
21
  module ViennaRna
22
+ RT = 1e-3 * 1.9872041 * (273.15 + 37) # kcal / K / mol @ 37C
24
23
  @debug = true
25
24
 
26
25
  module Package
27
26
  Dir[File.join(File.dirname(__FILE__), "vienna_rna", "package", "*.rb")].reject { |file| file =~ /\/base.rb/ }.each do |file|
28
- # Doesn't support autoloading modules that are of the form: TwoWords
29
27
  autoload(File.basename(file, ".rb").camelize.to_sym, "vienna_rna/package/#{File.basename(file, '.rb')}")
30
28
  end
31
29
 
@@ -0,0 +1,29 @@
1
+ module ViennaRna
2
+ module Global
3
+ module ChainExtensions
4
+ def self.included(base)
5
+ base.send(:include, InstanceMethods)
6
+ end
7
+
8
+ module InstanceMethods
9
+ def chain(package, flags = {})
10
+ class_chaining_to = ViennaRna::Package.lookup(package)
11
+
12
+ unless instance_variable_defined?(:@response)
13
+ raise ArgumentError.new("Can only chain a package that is not the first to be called")
14
+ end
15
+
16
+ unless class_chaining_to.instance_methods.include?(:transform_for_chaining)
17
+ raise ArgumentError.new("#{class_chaining_to.name} doesn't support chaining because it doesn't define transform_for_chaining")
18
+ end
19
+
20
+ unless [chains_from].flatten.any? { |chaining_from| kind_of?(chaining_from) }
21
+ raise ArgumentError.new("#{class_chaining_to.name} doesn't support chaining from #{self.class.name} because it isn't in the chains_from list")
22
+ end
23
+
24
+ class_chaining_to.new(self, chaining: true).run(flags)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -97,15 +97,11 @@ module ViennaRna
97
97
  end
98
98
 
99
99
  def temp_fa_file!
100
- write_fa!(Tempfile.new("")).path
100
+ write_fa!(Tempfile.new("rna")).path
101
101
  end
102
102
 
103
- def run(module_name, options = {})
104
- if rna_module = ViennaRna::Package.const_missing("#{module_name}".camelize)
105
- rna_module.run(self, options)
106
- else
107
- raise ArgumentError.new("#{module_name} can't be resolved as an executable")
108
- end
103
+ def run(package_name, options = {})
104
+ ViennaRna::Package.lookup(package_name).run(self, options)
109
105
  end
110
106
 
111
107
  def inspect
@@ -89,21 +89,7 @@ module ViennaRna
89
89
 
90
90
  ((bp_set_1 - bp_set_2) + (bp_set_2 - bp_set_1)).count
91
91
  end
92
-
93
- def symmetric_bp_distance(structure_1, structure_2)
94
- # Takes two structures and calculates the distance between them by: sum { ((x_j - x_i) - (y_j - y_i)).abs }
95
- raise "The two structures are not the same length" unless structure_1.length == structure_2.length
96
-
97
- bp_dist = ->(array, i) { array[i] == -1 ? 0 : array[i] - i }
98
-
99
- structure_1_pairings = get_pairings(structure_1)
100
- structure_2_pairings = get_pairings(structure_2)
101
-
102
- structure_1.length.times.inject(0) do |distance, i|
103
- distance + (bp_dist[structure_1_pairings, i] - bp_dist[structure_2_pairings, i]).abs
104
- end
105
- end
106
92
  end
107
93
  end
108
94
  end
109
- end
95
+ end
@@ -0,0 +1,86 @@
1
+ module ViennaRna
2
+ module Global
3
+ module RunExtensions
4
+ def self.included(base)
5
+ base.send(:include, InstanceMethods)
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+ module ClassMethods
10
+ def exec_exists?(name)
11
+ !%x[which RNA#{name.to_s.downcase}].empty?
12
+ end
13
+
14
+ def run(*data)
15
+ flags = data.length > 1 && data.last.is_a?(Hash) ? data.pop : {}
16
+ new(data).run(flags)
17
+ end
18
+ end
19
+
20
+ module InstanceMethods
21
+ def run(flags = {})
22
+ unless @response
23
+ tap do
24
+ @runtime = Benchmark.measure do
25
+ pre_run_check
26
+ merged_flags = recursively_merge_flags(flags)
27
+ runnable_command = run_command(merged_flags)
28
+
29
+ ViennaRna.debugger { runnable_command }
30
+
31
+ @response = %x[#{runnable_command}]
32
+ post_process if respond_to?(:post_process)
33
+ end
34
+
35
+ ViennaRna.debugger { "Total runtime: %.3f sec." % runtime.real }
36
+ end
37
+ else
38
+ self
39
+ end
40
+ end
41
+
42
+ def pre_run_check
43
+ if %x[which #{exec_name}].empty?
44
+ raise RuntimeError.new("#{exec_name} is not defined on this machine")
45
+ end
46
+ end
47
+
48
+ def exec_name
49
+ executable_name.respond_to?(:call) ? executable_name[self] : executable_name
50
+ end
51
+
52
+ def recursively_merge_flags(flags)
53
+ rmerge = ->(old_hash, new_hash) do
54
+ inner_hash = {}
55
+
56
+ old_hash.merge(new_hash) do |key, old_value, new_value|
57
+ inner_hash[key] = [old_value, new_value].map(&:class).uniq == [Hash] ? rmerge[old_value, new_value] : new_value
58
+ end
59
+ end
60
+
61
+ rmerge[base_flags(flags), flags].tap do |merged_flags|
62
+ ViennaRna.debugger { "%s: %s" % [self.class.name, merged_flags.inspect] }
63
+ end
64
+ end
65
+
66
+ def base_flags(flags)
67
+ default_flags.respond_to?(:call) ? default_flags[self, flags] : default_flags
68
+ end
69
+
70
+ def run_command(flags)
71
+ "echo %s | %s %s" % [
72
+ "'%s'" % call_with.map { |datum| data.send(datum) }.join(?\n),
73
+ exec_name,
74
+ stringify_flags(flags)
75
+ ]
76
+ end
77
+
78
+ def stringify_flags(flags)
79
+ flags.inject("") do |string, (flag, value)|
80
+ (string + (value == :empty ? " -%s" % flag : " -%s %s" % [flag, value])).strip
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -77,6 +77,10 @@ module ViennaRna
77
77
  overlay([{ data: data }], title: title, type: type, x_label: x_label, y_label: y_label, legend: false, filename: filename)
78
78
  end
79
79
 
80
+ def scatterplot(data, title: nil, x_label: "Independent", y_label: "Dependent", filename: false)
81
+ line_graph(data, title: title, type: ?p, x_label: x_label, y_label: y_label, filename: filename)
82
+ end
83
+
80
84
  def histogram(data, title: nil, x_label: "Bins", num_bins: false, bin_size: 1, x_arrow: false, relative: false, filename: false)
81
85
  half = bin_size / 2.0
82
86
  range = Range.new((data.min - half).floor, (data.max + half).ceil)
@@ -1,29 +1,26 @@
1
1
  module ViennaRna
2
2
  module Package
3
+ def self.lookup(package_name)
4
+ const_missing("#{package_name}".camelize) || raise(ArgumentError.new("#{package_name} can't be resolved as an executable"))
5
+ end
6
+
3
7
  class Base
8
+ include ViennaRna::Global::RunExtensions
9
+ include ViennaRna::Global::ChainExtensions
10
+
4
11
  class_attribute :executable_name
5
-
6
- class << self
7
- def method_added(name)
8
- if name == :run
9
- unless @chaining
10
- @chaining = true
11
- alias_method_chain :run, :hooks
12
- else
13
- remove_instance_variable(:@chaining)
14
- end
15
- end
16
- end
12
+ self.executable_name = ->(context) { "RNA#{context.class.name.split('::').last.underscore}" }
17
13
 
18
- def exec_exists?(name)
19
- !%x[which RNA#{name.to_s.downcase}].empty?
20
- end
14
+ class_attribute :call_with
15
+ self.call_with = [:seq]
21
16
 
22
- def run(*data)
23
- flags = data.length > 1 && data.last.is_a?(Hash) ? data.pop : {}
24
- new(data).run(flags)
25
- end
17
+ class_attribute :default_flags
18
+ self.default_flags = {}
26
19
 
20
+ class_attribute :chains_from
21
+ self.chains_from = Object
22
+
23
+ class << self
27
24
  def bootstrap(data: nil, output: "")
28
25
  new(data).tap do |object|
29
26
  object.instance_variable_set(:@response, File.exist?(output) ? File.read(output).chomp : output)
@@ -33,78 +30,23 @@ module ViennaRna
33
30
 
34
31
  attr_reader :data, :response, :runtime
35
32
 
36
- def exec_name
37
- if executable_name
38
- executable_name.respond_to?(:call) ? self.class.module_exec(&executable_name) : executable_name
39
- else
40
- "RNA#{self.class.name.split('::').last.underscore}"
41
- end
42
- end
43
-
44
- def exec_sequence_format
45
- if data.str
46
- '"%s
47
- %s"' % [data.seq, data.str]
48
- else
49
- data.seq
50
- end
51
- end
52
-
53
- def initialize(data)
54
- data = [data] unless data.is_a?(Array)
33
+ def initialize(data, chaining: false)
34
+ unless chaining
35
+ data = [data] unless data.is_a?(Array)
55
36
 
56
- @data = case data.map(&:class)
57
- when [ViennaRna::Global::Rna] then data.first
58
- when *(1..3).map { |i| [String] * i } then RNA.from_string(*data)
59
- when [Hash] then RNA.from_hash(*data)
60
- when [Array] then RNA.from_array(*data)
61
- when [NilClass] then ViennaRna::Global::Rna.placeholder
62
- else raise TypeError.new("Unsupported ViennaRna::Global::Rna#initialize format: #{data}")
63
- end
64
- end
65
-
66
- def run_with_hooks(flags = {})
67
- unless @response
68
- tap do
69
- @runtime = Benchmark.measure do
70
- pre_run_check unless respond_to?(:run_command)
71
- @response = run_without_hooks(flags)
72
- post_process if respond_to?(:post_process)
73
- end
74
-
75
- ViennaRna.debugger { "Total runtime: %.3f sec." % runtime.real }
37
+ @data = case data.map(&:class)
38
+ when [ViennaRna::Global::Rna] then data.first
39
+ when *(1..3).map { |i| [String] * i } then RNA.from_string(*data)
40
+ when [Hash] then RNA.from_hash(*data)
41
+ when [Array] then RNA.from_array(*data)
42
+ when [NilClass] then ViennaRna::Global::Rna.placeholder
43
+ else raise TypeError.new("Unsupported ViennaRna::Global::Rna#initialize format: #{data}")
76
44
  end
77
45
  else
78
- self
46
+ @data = transform_for_chaining(data)
79
47
  end
80
48
  end
81
49
 
82
- def pre_run_check
83
- if %x[which #{exec_name}].empty?
84
- raise RuntimeError.new("#{exec_name} is not defined on this machine")
85
- end
86
- end
87
-
88
- def stringify_flags(flags)
89
- base_flags = self.class.const_defined?(:BASE_FLAGS) ? self.class.const_get(:BASE_FLAGS) : {}
90
-
91
- flags.merge(base_flags).inject("") do |string, (flag, value)|
92
- (string + (value == :empty ? " -%s" % flag : " -%s %s" % [flag, value])).strip
93
- end
94
- end
95
-
96
- def run(flags = {})
97
- command = if respond_to?(:run_command)
98
- method(:run_command).arity.zero? ? run_command : run_command(flags)
99
- else
100
- "echo #{exec_sequence_format} | #{exec_name} #{stringify_flags(flags)}"
101
- end
102
-
103
- ViennaRna.debugger { command }
104
-
105
- %x[#{command}]
106
- end
107
-
108
50
  def serialize
109
51
  YAML.dump(self)
110
52
  end
@@ -114,4 +56,4 @@ module ViennaRna
114
56
  end
115
57
  end
116
58
  end
117
- end
59
+ end
@@ -27,6 +27,10 @@ module ViennaRna
27
27
  def <=>(other_row)
28
28
  i == other_row.i ? j <=> other_row.j : i <=> other_row.i
29
29
  end
30
+
31
+ def to_csv(energy_term: :p)
32
+ "%d,%d,%.8f" % [i, j, instance_variable_get(:"@#{energy_term}")]
33
+ end
30
34
 
31
35
  def inspect
32
36
  "#<Row2d (%d, %d), p: %s, ensemble: %s>" % [i, j, p, ensemble]
@@ -60,6 +64,14 @@ module ViennaRna
60
64
  num_colors: num_colors
61
65
  )
62
66
  end
67
+
68
+ def to_csv(energy_term: :p)
69
+ map { |row| row.to_csv(energy_term: energy_term) }.join(?\n) + ?\n
70
+ end
71
+
72
+ def to_csv!(filename, energy_term: :p)
73
+ File.open(filename, ?w) { |file| file.write(to_csv(energy_term: energy_term)) }
74
+ end
63
75
 
64
76
  def inspect
65
77
  "#<#{self.class.name} on #{data.inspect}>"
@@ -1,6 +1,8 @@
1
1
  module ViennaRna
2
2
  module Package
3
3
  class Eval < Base
4
+ self.call_with = [:seq, :str]
5
+
4
6
  attr_reader :mfe
5
7
 
6
8
  def post_process
@@ -1,18 +1,15 @@
1
1
  module ViennaRna
2
2
  module Package
3
3
  class Fftbor2d < EnergyGrid2d
4
- BASE_FLAGS = {
5
- S: :empty
6
- }
7
-
8
4
  self.executable_name = "FFTbor2D"
5
+ self.default_flags = ->(_, flags) { (flags.keys & %i|X M S|).empty? ? { S: :empty } : {} }
9
6
 
10
- def run_command(flags = {})
7
+ def run_command(flags)
11
8
  ViennaRna.debugger { "Running #{exec_name} on #{data.inspect}" }
12
9
 
13
10
  "%s %s %s" % [
14
11
  exec_name,
15
- stringify_flags(BASE_FLAGS.merge(self.class.const_defined?(:FLAGS) ? self.class.const_get(:FLAGS) : {}).merge(flags)),
12
+ stringify_flags(flags),
16
13
  data.temp_fa_file!
17
14
  ]
18
15
  end
@@ -1,7 +1,7 @@
1
1
  module ViennaRna
2
2
  module Package
3
3
  class Fold < Base
4
- BASE_FLAGS = {
4
+ self.default_flags = {
5
5
  "-noPS" => :empty
6
6
  }
7
7
 
@@ -16,16 +16,6 @@ module ViennaRna
16
16
  @mfe_rna, @structure, @mfe = RNA.from_string(data.seq, structure), structure, ViennaRna::Global::Parser.rnafold_mfe(@response)
17
17
  end
18
18
  end
19
-
20
- module Batch
21
- def with_different_structures
22
- run.inject(Hash.new { |hash, key| hash[key] = [] }) do |hash, folded_sequence|
23
- hash.tap do
24
- hash[folded_sequence.structure] << folded_sequence
25
- end
26
- end.values.map(&:first)
27
- end
28
- end
29
19
  end
30
20
  end
31
21
  end
@@ -0,0 +1,35 @@
1
+ module ViennaRna
2
+ module Package
3
+ class Mfpt < Base
4
+ self.chains_from = ViennaRna::Package::EnergyGrid2d
5
+ self.default_flags = ->(context, flags) { { X: :empty, H: :empty, N: context.data.seq.length, Q: "1e-8" } }
6
+ # These flags aren't well setup for alternative options at the moment.
7
+
8
+ attr_reader :mfpt
9
+
10
+ def transform_for_chaining(previous_package)
11
+ previous_package.data.tap do |data|
12
+ data.instance_eval do
13
+ @energy_grid_csv = Tempfile.new("rna").path.tap do |energy_grid_csv|
14
+ previous_package.to_csv!(energy_grid_csv)
15
+ end
16
+
17
+ def energy_grid_csv; @energy_grid_csv; end
18
+ end
19
+ end
20
+ end
21
+
22
+ def run_command(flags)
23
+ "%s %s %s" % [
24
+ exec_name,
25
+ stringify_flags(flags),
26
+ data.energy_grid_csv
27
+ ]
28
+ end
29
+
30
+ def post_process
31
+ @mfpt = @response.to_f
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,7 +1,7 @@
1
1
  module ViennaRna
2
2
  module Package
3
3
  class Rna2dfold < EnergyGrid2d
4
- BASE_FLAGS = {
4
+ self.default_flags = {
5
5
  d: 0,
6
6
  p: :empty,
7
7
  "-noBT" => :empty
@@ -9,13 +9,13 @@ module ViennaRna
9
9
 
10
10
  self.executable_name = "RNA2Dfold"
11
11
 
12
- def run_command(flags = {})
12
+ def run_command(flags)
13
13
  ViennaRna.debugger { "Running RNA2Dfold on #{data.inspect}" }
14
14
 
15
- "cat %s | %s %s" % [
15
+ "cat %s | %s %s" % [
16
16
  data.temp_fa_file!,
17
17
  exec_name,
18
- stringify_flags(BASE_FLAGS.merge(self.class.const_defined?(:FLAGS) ? self.class.const_get(:FLAGS) : {}).merge(flags))
18
+ stringify_flags(flags)
19
19
  ]
20
20
  end
21
21
 
@@ -1,13 +1,13 @@
1
1
  module ViennaRna
2
2
  module Package
3
3
  class Xbor < Base
4
- BASE_FLAGS = {
4
+ self.default_flags = {
5
5
  E: "/usr/local/bin/energy.par"
6
6
  }
7
7
 
8
- self.executable_name = -> { name.demodulize.gsub(/^([A-Z].*)bor$/) { |match| $1.upcase + "bor" } }
8
+ self.executable_name = ->(context) { context.class.name.demodulize.gsub(/^([A-Z].*)bor$/) { |match| $1.upcase + "bor" } }
9
9
 
10
- def run_command(flags = {})
10
+ def run_command(flags)
11
11
  file = Tempfile.new("rna")
12
12
  file.write("%s\n" % data.seq)
13
13
  file.write("%s\n" % data.str)
@@ -17,7 +17,7 @@ module ViennaRna
17
17
 
18
18
  "%s %s %s" % [
19
19
  exec_name,
20
- stringify_flags(BASE_FLAGS.merge(self.class.const_defined?(:FLAGS) ? self.class.const_get(:FLAGS) : {}).merge(flags)),
20
+ stringify_flags(flags),
21
21
  file.path
22
22
  ]
23
23
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vienna_rna
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Senter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-07 00:00:00.000000000 Z
11
+ date: 2013-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bio
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 1.4.2
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 1.4.2
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: activesupport
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -66,20 +52,6 @@ dependencies:
66
52
  - - ">="
67
53
  - !ruby/object:Gem::Version
68
54
  version: 2.0.3
69
- - !ruby/object:Gem::Dependency
70
- name: rroc
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: 0.1.1
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 0.1.1
83
55
  description: A Ruby 2.0 API for interacting with command line tools involving RNA
84
56
  molecules through a standard interface.
85
57
  email: evansenter@gmail.com
@@ -87,9 +59,11 @@ executables: []
87
59
  extensions: []
88
60
  extra_rdoc_files: []
89
61
  files:
62
+ - lib/vienna_rna/global/chain_extensions.rb
90
63
  - lib/vienna_rna/global/parser.rb
91
64
  - lib/vienna_rna/global/rna.rb
92
65
  - lib/vienna_rna/global/rna_extensions.rb
66
+ - lib/vienna_rna/global/run_extensions.rb
93
67
  - lib/vienna_rna/graphing/r.rb
94
68
  - lib/vienna_rna/package/base.rb
95
69
  - lib/vienna_rna/package/energy_grid_2d.rb
@@ -98,6 +72,7 @@ files:
98
72
  - lib/vienna_rna/package/fftbor2d.rb
99
73
  - lib/vienna_rna/package/fold.rb
100
74
  - lib/vienna_rna/package/heat.rb
75
+ - lib/vienna_rna/package/mfpt.rb
101
76
  - lib/vienna_rna/package/rna2dfold.rb
102
77
  - lib/vienna_rna/package/rnabor.rb
103
78
  - lib/vienna_rna/package/subopt.rb
@@ -123,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
98
  version: '0'
124
99
  requirements: []
125
100
  rubyforge_project:
126
- rubygems_version: 2.1.4
101
+ rubygems_version: 2.1.9
127
102
  signing_key:
128
103
  specification_version: 4
129
104
  summary: Bindings to the Vienna RNA package, and other major command line utilities