Class: Iroki::Tree
- Inherits:
-
Object
- Object
- Iroki::Tree
- Defined in:
- lib/iroki/tree.rb
Class Method Summary collapse
-
.change_names(tree) ⇒ Hash
Iroki_name (string) => quoted_orig_name (string).
- .combine_hashes(h1, h2, nil_val = nil) ⇒ Object
- .gsub_iroki_newick_string(tre_str, iroki_to_name, name_map = nil) ⇒ Object
- .iroki_name(idx) ⇒ Object
- .iroki_to_color(iroki_to_name, color_map, name_map, nil_val = nil) ⇒ Object
- .quoted_vals(hash) ⇒ Object
Class Method Details
.change_names(tree) ⇒ Hash
Note:
The newick standard changes unquoted underscores to spaces
Note:
The reason we have to bother with this is because when the bioruby parser calls the __to_newick method, it does some annoying things to the output and changes the names. Making the names like this lets us easily gsub the names to what they should be after the name map.
Returns iroki_name (string) => quoted_orig_name (string).
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/iroki/tree.rb', line 18 def self.change_names tree idx = -1 realname = {} tree.each_node do |node| if node.name && !node.name.empty? idx += 1 realname[iroki_name(idx)] = %Q{#{node.name}} node.name = iroki_name(idx) end end realname end |
.combine_hashes(h1, h2, nil_val = nil) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/iroki/tree.rb', line 34 def self.combine_hashes h1, h2, nil_val=nil h_new = {} h1.each do |h1_key, h1_val| if h2.has_key? h1_val h_new[h1_key] = h2[h1_val] else h_new[h1_key] = nil_val end end h_new end |
.gsub_iroki_newick_string(tre_str, iroki_to_name, name_map = nil) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/iroki/tree.rb', line 53 def self.gsub_iroki_newick_string tre_str, iroki_to_name, name_map=nil if name_map vals = self.quoted_vals name_map name_map_quoted = Hash[name_map.keys.zip(vals)] iroki_to_new_name = self.combine_hashes iroki_to_name, name_map_quoted else vals = self.quoted_vals iroki_to_name iroki_to_new_name = Hash[iroki_to_name.keys.zip(vals)] end tre_str.gsub(/iroki[0-9]+iroki/, iroki_to_new_name) end |
.iroki_name(idx) ⇒ Object
3 4 5 |
# File 'lib/iroki/tree.rb', line 3 def self.iroki_name idx "iroki#{idx}iroki" end |
.iroki_to_color(iroki_to_name, color_map, name_map, nil_val = nil) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/iroki/tree.rb', line 68 def self.iroki_to_color iroki_to_name, color_map, name_map, nil_val=nil if name_map old_names = name_map.keys new_names = name_map.values color_map_is_for_old_names = color_map.keys.all? { |key| old_names.include? key } color_map_is_for_new_names = color_map.keys.all? { |key| new_names.include? key } if color_map_is_for_old_names iroki_to_color = self.combine_hashes iroki_to_name, color_map, nil_val elsif color_map_is_for_new_names iroki_to_new_name = self.combine_hashes iroki_to_name, name_map iroki_to_color = self.combine_hashes iroki_to_new_name, color_map, nil_val else # some old, some new abort_if true, "The color map has both old and new names in the first column." end iroki_to_color else # no name map self.combine_hashes iroki_to_name, color_map, nil_val end end |
.quoted_vals(hash) ⇒ Object
47 48 49 50 51 |
# File 'lib/iroki/tree.rb', line 47 def self.quoted_vals hash # p [:a, hash.values] # p [:b, hash.values.map(&:single_quote)] hash.values.map(&:single_quote) end |