Skip to content

Instantly share code, notes, and snippets.

@benb
Created December 18, 2012 12:58
Show Gist options
  • Save benb/4327736 to your computer and use it in GitHub Desktop.
Save benb/4327736 to your computer and use it in GitHub Desktop.
Compare metal distances across internal nodes of a tree
#!/usr/bin/env ruby
require 'bio'
require 'tempfile'
@tmp=Dir.mktmpdir
@tree=Bio::Newick.new(File.read(ARGV.shift)).tree
@s1={}
@s2={}
Bio::FlatFile.auto(ARGV.shift).each_entry do |e|
@s1[e.entry_id.gsub('_',' ')]=e
end
Bio::FlatFile.auto(ARGV.shift).each_entry do |e|
@s2[e.entry_id.gsub('_',' ')]=e
end
def calc_score(node)
return 0 if (@tree.children(node).length==0)
seqs = @tree.leaves(node).map{|x| x.name}
File.open(@tmp + "/f1","w") do |f|
seqs.each do |s|
f.puts @s1[s]
end
end
File.open(@tmp + "/f2","w") do |f|
seqs.each do |s|
f.puts @s2[s]
end
end
print seqs.join(",") + " "
puts `metal #{ARGV.join(" ")} #{@tmp}/f1 #{@tmp}/f2`
end
@tree.nodes.map{|x| calc_score(x)}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment