vienna_rna 0.6.0 → 0.7.0

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: 16cb73b2fcfe880d27bc3754363cb986f12b9e93
4
- data.tar.gz: a18ea5d222722e5512e8d46b3ecdb4a837c44bf8
3
+ metadata.gz: 80d4f6159bca186181c792f0a09d696db387a4e3
4
+ data.tar.gz: 50bc4db672365259c1c25f78659b268e5d3c60c6
5
5
  SHA512:
6
- metadata.gz: 1e33cfffbe0538c3e6c887a8b18f65f9e74c2f26d1aa0255ffd079710770df8c4118804f9183969568cde1f65a703563a501cf899e136e312bc58e4bc0360c5c
7
- data.tar.gz: 83153eae6e5c83f85cb30772ac1ae3134a99c226e4e84cd0a96ad1157087a633ef54cb66b5402bb99095d685bde334d7703c4fbf7738a9c8a964de8b98e10d9e
6
+ metadata.gz: e534a3181b7c41f6536a7e49ea2458d015944f1c7d6f0c66020839004a28c33d0004d649f237c1bb82d8bf8ec17bce7fd8d58f516307a58d0dc48aba2ee98d3c
7
+ data.tar.gz: c16e11c3a1e79b2b909692b173b90bf2a20568823376d270859fcbd5133ba09d751d409531ae5c8b1d9c4f44d1f6aced99148791ab98b9690cef5dbf511e73ee
@@ -65,10 +65,10 @@ module ViennaRna
65
65
  data = [data] unless data.is_a?(Array)
66
66
 
67
67
  @data = case data.map(&:class)
68
- when [Rna] then data.first
69
- when [String], [String, String] then Rna.init_from_string(*data)
70
- when [Hash] then Rna.init_from_hash(*data)
71
- when [Array] then Rna.init_from_array(*data)
68
+ when [Rna] then data.first
69
+ when *(1..3).map { |i| [String] * i } then Rna.init_from_string(*data)
70
+ when [Hash] then Rna.init_from_hash(*data)
71
+ when [Array] then Rna.init_from_array(*data)
72
72
  else raise TypeError.new("Unsupported ViennaRna::Rna#initialize format: #{data}")
73
73
  end
74
74
  end
@@ -4,11 +4,6 @@ require "diverge"
4
4
 
5
5
  module ViennaRna
6
6
  class Fftbor < Xbor
7
- MODES = {
8
- dispatch: "RNAcentral",
9
- standalone: "FFTbor"
10
- }
11
-
12
7
  def partition
13
8
  response.split(/\n/).find { |line| line =~ /^Scaling factor.*:\s+(\d+\.\d+)/ }
14
9
  BigDecimal.new($1)
@@ -1,5 +1,28 @@
1
1
  module ViennaRna
2
- class Fftbor2d < Fftbor
2
+ class Fftbor2d < Base
3
+ BASE_FLAGS = {
4
+ E: "/usr/local/bin/rna_turner1999.par",
5
+ P: 8,
6
+ S: :empty
7
+ }
8
+
9
+ self.executable_name = "FFTbor2D"
10
+
11
+ def run_command(flags = {})
12
+ ViennaRna.debugger { "Running FFTbor2D on #{data.inspect}" }
13
+
14
+ "%s %s %s" % [
15
+ exec_name,
16
+ stringify_flags(BASE_FLAGS.merge(self.class.const_defined?(:FLAGS) ? self.class.const_get(:FLAGS) : {}).merge(flags)),
17
+ data.temp_fa_file!
18
+ ]
19
+ end
3
20
 
21
+ def distribution
22
+ response.split(/\n/).map do |line|
23
+ i, j, p, ensemble = line.split(/\t/)
24
+ [i, j].map(&:to_i) + [p, ensemble].map(&:to_f)
25
+ end
26
+ end
4
27
  end
5
28
  end
@@ -2,70 +2,97 @@ module ViennaRna
2
2
  class Rna
3
3
  include ViennaRna::RnaExtensions
4
4
 
5
- attr_reader :sequence, :structure, :raw_data
5
+ attr_reader :sequence, :structure, :second_structure, :raw_data
6
6
 
7
7
  class << self
8
- def init_from_string(sequence, structure = nil)
9
- new(sequence, structure)
8
+ def init_from_string(sequence, structure = nil, second_structure = nil)
9
+ new(
10
+ sequence: sequence,
11
+ structure: structure,
12
+ second_structure: second_structure
13
+ )
10
14
  end
11
15
 
12
16
  def init_from_hash(hash)
13
- new(hash[:sequence] || hash[:seq], hash[:structure] || hash[:str], hash)
17
+ new(
18
+ sequence: hash[:sequence] || hash[:seq],
19
+ structure: hash[:structure] || hash[:str_1] || hash[:str],
20
+ second_structure: hash[:second_structure] || hash[:str_2],
21
+ raw_data: hash
22
+ )
14
23
  end
15
24
 
16
25
  def init_from_array(array)
17
- new(*array)
26
+ init_from_string(*array)
18
27
  end
19
28
 
20
29
  def init_from_fasta(string)
21
30
  string = File.read(string).chomp if File.exist?(string)
22
- init_from_string(*string.split(/\n/).reject { |line| line.start_with?(">") }[0, 2])
31
+ init_from_string(*string.split(/\n/).reject { |line| line.start_with?(">") }[0, 3])
23
32
  end
24
33
 
25
34
  def init_from_self(rna)
26
35
  # This happens when you call a ViennaRna library function with the output of something like ViennaRna::Fold.run(...).mfe
27
- new(rna.sequence, rna.structure, rna.raw_data)
36
+ new(
37
+ sequence: rna.sequence,
38
+ strucutre: rna.structure,
39
+ second_strucutre: rna.second_structure,
40
+ raw_data: rna.raw_data
41
+ )
28
42
  end
29
43
  end
30
44
 
31
- def initialize(sequence, structure, raw_data = {})
45
+ def initialize(sequence: "", structure: "", second_structure: "", raw_data: {})
32
46
  @sequence, @raw_data = sequence, raw_data
33
47
 
34
- @structure = case structure
35
- when :empty then empty_structure
36
- when :mfe then ViennaRna::Fold.run(Rna.init_from_string(seq)).structure
37
- when String then structure
48
+ [:structure, :second_structure].each do |structure_symbol|
49
+ instance_variable_set(
50
+ :"@#{structure_symbol}",
51
+ case structure_value = eval("#{structure_symbol}")
52
+ when :empty then empty_structure
53
+ when :mfe then RNA(sequence).run(:fold).mfe_rna.structure
54
+ when String then structure_value
55
+ end
56
+ )
38
57
  end
39
58
 
40
59
  if str && seq.length != str.length
41
- ViennaRna.debugger { "The sequence length (%d) doesn't match the structure length (%d)" % [seq.length, str.length] }
60
+ ViennaRna.debugger { "The sequence length (%d) doesn't match the structure length (%d)" % [seq, str].map(&:length) }
61
+ end
62
+
63
+ if str_2 && str_1.length != str_2.length
64
+ ViennaRna.debugger { "The first structure length (%d) doesn't match the second structure length (%d)" % [str_1, str_2].map(&:length) }
42
65
  end
43
66
  end
44
67
 
45
- alias :seq :sequence
46
- alias :str :structure
47
-
68
+ alias :seq :sequence
69
+ alias :str :structure
70
+ alias :str_1 :structure
71
+ alias :str_2 :second_structure
48
72
 
49
73
  def inspect
50
- case [!(seq || "").empty?, !(str || "").empty?]
51
- when [true, true] then
52
- "#<#{self.class.name} #{seq[0, 20] + (seq.length > 20 ? '...' : '')} #{str[0, 20] + (str.length > 20 ? ' [truncated]' : '')}>"
53
- when [true, false] then
54
- "#<#{self.class.name} #{seq[0, 20] + (seq.length > 20 ? '...' : '')}>"
55
- when [false, false] then
56
- "#<#{self.class.name}>"
57
- end
74
+ "#<%s>" % [
75
+ "#{self.class.name}",
76
+ ("#{seq[0, 20] + (seq.length > 20 ? '...' : '')}" if seq),
77
+ ("#{str_1[0, 20] + (str_1.length > 20 ? ' [truncated]' : '')}" if str_1),
78
+ ("#{str_2[0, 20] + (str_2.length > 20 ? ' [truncated]' : '')}" if str_2),
79
+ ].compact.join(" ")
58
80
  end
59
81
 
60
82
  def write_fa!(filename, comment = "")
61
- (File.basename(filename, ".fa") + ".fa").tap do |filename|
62
- File.open(filename, "w") do |file|
83
+ filename.tap do |filename|
84
+ File.open(filename, ?w) do |file|
63
85
  file.write("> %s\n" % comment) if comment
64
86
  file.write("%s\n" % seq) if seq
65
- file.write("%s\n" % str) if str
87
+ file.write("%s\n" % str_1) if str_1
88
+ file.write("%s\n" % str_2) if str_2
66
89
  end
67
90
  end
68
91
  end
92
+
93
+ def temp_fa_file!
94
+ write_fa!(Tempfile.new("")).path
95
+ end
69
96
 
70
97
  def run(module_name, options = {})
71
98
  if rna_module = ViennaRna.const_missing("#{module_name}".camelize)
@@ -74,11 +101,11 @@ module ViennaRna
74
101
  raise ArgumentError.new("#{module_name} can't be resolved as an executable")
75
102
  end
76
103
  end
77
-
78
- private
79
-
104
+
80
105
  def empty_structure
81
106
  "." * seq.length
82
107
  end
108
+
109
+ alias :empty_str :empty_structure
83
110
  end
84
111
  end
data/lib/vienna_rna.rb CHANGED
@@ -44,8 +44,8 @@ end
44
44
 
45
45
  # This dirties up the public namespace, but I use it so many times that I want a shorthand to it
46
46
  unless defined? RNA
47
- def RNA(sequence, structure = nil)
48
- RNA.from_string(sequence, structure)
47
+ def RNA(*args)
48
+ RNA.from_array(args)
49
49
  end
50
50
  end
51
51
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vienna_rna
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.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-07-30 00:00:00.000000000 Z
11
+ date: 2013-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bio
@@ -94,7 +94,7 @@ dependencies:
94
94
  - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.1.1
97
- description: A Ruby API for interacting with the Vienna RNA package.
97
+ description: A Ruby 2.0 API for interacting with the Vienna RNA package.
98
98
  email: evansenter@gmail.com
99
99
  executables: []
100
100
  extensions: []
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  version: '0'
139
139
  requirements: []
140
140
  rubyforge_project:
141
- rubygems_version: 2.0.5
141
+ rubygems_version: 2.0.6
142
142
  signing_key:
143
143
  specification_version: 4
144
144
  summary: Bindings to the Vienna RNA package.