class Bio::Tree

Here we add to BioRuby's Bio::Tree classes

Public Instance Methods

clone() click to toggle source
# File lib/bio-alignment/tree.rb, line 164
def clone
  new_tree = self.class.new
  nodes.each do |x|
    new_tree.add_node(x)
  end
  self.each_edge do |node1, node2, edge|
    if new_tree.include?(node1) and new_tree.include?(node2) then
      new_tree.add_edge(node1, node2, edge)
    end
  end
  new_tree
end
clone_subtree(start_node) click to toggle source

Create a deep clone of the tree

# File lib/bio-alignment/tree.rb, line 128
def clone_subtree start_node 
  new_tree = self.class.new
  list = [start_node] + start_node.descendents
  list.each do |x|
    new_tree.add_node(x)
  end
  each_edge do |node1, node2, edge|
    if new_tree.include?(node1) and new_tree.include?(node2) 
      new_tree.add_edge(node1, node2, edge)
    end
  end
  new_tree
end
clone_tree_without_branch(node) click to toggle source

Clone a tree without the branch starting at node

# File lib/bio-alignment/tree.rb, line 143
def clone_tree_without_branch node
  new_tree = self.class.new
  original = [root] + root.descendents
  # p "Original",original
  skip = [node] + node.descendents
  # p "Skip",skip
  # p "Retain",root.descendents - skip
  nodes.each do |x|
    if not skip.include?(x)
      new_tree.add_node(x) 
    else
    end
  end
  each_edge do |node1, node2, edge|
    if new_tree.include?(node1) and new_tree.include?(node2) 
      new_tree.add_edge(node1, node2, edge)
    end
  end
  new_tree
end
find(name) click to toggle source
# File lib/bio-alignment/tree.rb, line 118
def find name
  get_node_by_name(name)
end
map() { |leaf| ... } click to toggle source

Walk the ordered tree leaves, calling into the block, and return an array

# File lib/bio-alignment/tree.rb, line 123
def map 
  leaves.map { | leaf | yield leaf }
end