Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / mafft / core / newick2mafft.rb
diff --git a/website/archive/binaries/mac/src/mafft/core/newick2mafft.rb b/website/archive/binaries/mac/src/mafft/core/newick2mafft.rb
new file mode 100644 (file)
index 0000000..b74ba36
--- /dev/null
@@ -0,0 +1,132 @@
+#! /usr/bin/env ruby
+
+#version 2, 2009/01/24
+
+
+if ARGV.length == 1
+       scale = 1.0
+elsif ARGV.length == 2
+       scale = ARGV.shift.to_f
+else
+       STDERR.puts "USAGE: newick2mafft.rb scale input_tree > output"
+       exit
+end
+
+if scale <= 0.0 then
+       STDERR.puts "Inappropriate scale, #{scale.to_s}"
+       exit
+end
+
+STDERR.puts "scale = " + scale.to_s
+
+infp = File.open( ARGV.shift, "r" )
+
+tree = ""
+while line = infp.gets
+       tree += line.strip
+       break if tree =~ /;$/
+end
+infp.close
+
+
+#tree = tree.gsub( /_.*?:/, ":" ).gsub(/[0-9]\.[0-9]*e-[0-9][0-9]/, "0").gsub(/\[.*?\]/,"").gsub(/ /, "").gsub(/:\-[0-9\.]+/, ":0.0" )
+tree = tree.gsub( /_.*?:/, ":" ).gsub(/[0-9]\.[0-9]*e-[0-9][0-9]/, "0").gsub(/\[.*?\]/,"").gsub(/ /, "")
+
+
+STDERR.puts "Initial tree = " +  tree
+
+def resolve( tree )
+
+
+while 1
+#      p tree
+       tree.sub!( /\,([0-9]+):(\-?[0-9\.]+)\,([0-9]+):(\-?[0-9\.]+)/, ",XXX" )
+       hit1 = $1
+       hit2 = $2
+       hit3 = $3
+       hit4 = $4
+
+#      p hit1
+#      p hit2
+#      p hit3
+#      p hit4
+
+#      puts "introduce XXX"
+#      p tree
+
+       break unless tree.index(/XXX/)
+
+       poshit = tree.index(/XXX/)
+#      puts "poshit=" + poshit.to_s
+
+       i = poshit
+       height = 0
+       while i >= 0
+               break if height == 0 && tree[i..i] == '('
+               if tree[i..i] == ')' then
+                       height += 1
+               elsif tree[i..i] == '(' then
+                       height -= 1
+               end
+               i -= 1
+       end
+
+       poskakko = i
+#      puts "poskakko = " + poskakko.to_s
+       zenhan = tree[0..poskakko]
+       zenhan = "" if poskakko == -1
+#      puts "zenhan = " + zenhan
+
+       treelen = tree.length
+       tree = zenhan + "(" + tree[poskakko+1..treelen]
+#      puts "add ("
+#      p tree
+       tree.sub!( /XXX/, "#{hit1}:#{hit2}):0,#{hit3}:#{hit4}" )
+
+#      p tree
+end
+
+
+return tree
+
+end
+
+memi = [-1,-1]
+leni = [-1,-1]
+
+while tree.index( /\(/ ) 
+
+       tree = resolve( tree )
+
+       tree.sub!( /\(([0-9]+):(\-?[0-9\.]+),([0-9]+):(\-?[0-9\.]+)\)/, "XXX" )
+       memi[0] = $1.to_i
+       leni[0] = $2.to_f * scale
+       memi[1] = $3.to_i
+       leni[1] = $4.to_f * scale
+
+       if leni[0] > 10 || leni[1] > 10 then
+               STDERR.puts ""
+               STDERR.puts "Please check the scale of branch length!"
+               STDERR.puts "The unit of branch lengths must be 'substitution/site'"
+               STDERR.puts "If the unit is 'substition' in your tree, please"
+               STDERR.puts "use the scale argument,"
+               STDERR.puts "% newick2mafft scale in > out"
+               STDERR.puts "where scale = 1/(alignment length)"
+               STDERR.puts ""
+               exit 1
+       end
+
+#      STDERR.puts "subtree = " + $&
+
+       if memi[1] < memi[0] then
+               memi.reverse!
+               leni.reverse!
+       end
+
+       tree.sub!( /XXX/, memi[0].to_s )
+
+       STDERR.puts "Tree = " + tree
+
+       printf( "%5d %5d %10.5f %10.5f\n", memi[0], memi[1], leni[0], leni[1] )
+
+end