source: branches/items/GDE/MAFFT/mafft-7.055-with-extensions/core/newick2mafft.rb

Last change on this file was 10371, checked in by aboeckma, 11 years ago

updated mafft version. Added extensions (no svn ignore, yet)

  • Property svn:executable set to *
File size: 2.4 KB
Line 
1#! /usr/bin/env ruby
2
3#version 2, 2009/01/24
4
5
6if ARGV.length == 1
7        scale = 1.0
8elsif ARGV.length == 2
9        scale = ARGV.shift.to_f
10else
11        STDERR.puts "USAGE: newick2mafft.rb scale input_tree > output"
12        exit
13end
14
15if scale <= 0.0 then
16        STDERR.puts "Inappropriate scale, #{scale.to_s}"
17        exit
18end
19
20STDERR.puts "scale = " + scale.to_s
21
22infp = File.open( ARGV.shift, "r" )
23
24tree = ""
25while line = infp.gets
26        tree += line.strip
27        break if tree =~ /;$/
28end
29infp.close
30
31
32#tree = tree.gsub( /_.*?:/, ":" ).gsub(/[0-9]\.[0-9]*e-[0-9][0-9]/, "0").gsub(/\[.*?\]/,"").gsub(/ /, "").gsub(/:\-[0-9\.]+/, ":0.0" )
33tree = tree.gsub( /_.*?:/, ":" ).gsub(/[0-9]\.[0-9]*e-[0-9][0-9]/, "0").gsub(/\[.*?\]/,"").gsub(/ /, "")
34
35
36STDERR.puts "Initial tree = " +  tree
37
38def resolve( tree )
39
40
41while 1
42#       p tree
43        tree.sub!( /\,([0-9]+):(\-?[0-9\.]+)\,([0-9]+):(\-?[0-9\.]+)/, ",XXX" )
44        hit1 = $1
45        hit2 = $2
46        hit3 = $3
47        hit4 = $4
48
49#       p hit1
50#       p hit2
51#       p hit3
52#       p hit4
53
54#       puts "introduce XXX"
55#       p tree
56
57        break unless tree.index(/XXX/)
58
59        poshit = tree.index(/XXX/)
60#       puts "poshit=" + poshit.to_s
61
62        i = poshit
63        height = 0
64        while i >= 0
65                break if height == 0 && tree[i..i] == '('
66                if tree[i..i] == ')' then
67                        height += 1
68                elsif tree[i..i] == '(' then
69                        height -= 1
70                end
71                i -= 1
72        end
73
74        poskakko = i
75#       puts "poskakko = " + poskakko.to_s
76        zenhan = tree[0..poskakko]
77        zenhan = "" if poskakko == -1
78#       puts "zenhan = " + zenhan
79
80        treelen = tree.length
81        tree = zenhan + "(" + tree[poskakko+1..treelen]
82#       puts "add ("
83#       p tree
84        tree.sub!( /XXX/, "#{hit1}:#{hit2}):0,#{hit3}:#{hit4}" )
85
86#       p tree
87end
88
89
90return tree
91
92end
93
94memi = [-1,-1]
95leni = [-1,-1]
96
97while tree.index( /\(/ ) 
98
99        tree = resolve( tree )
100
101        tree.sub!( /\(([0-9]+):(\-?[0-9\.]+),([0-9]+):(\-?[0-9\.]+)\)/, "XXX" )
102        memi[0] = $1.to_i
103        leni[0] = $2.to_f * scale
104        memi[1] = $3.to_i
105        leni[1] = $4.to_f * scale
106
107        if leni[0] > 10 || leni[1] > 10 then
108                STDERR.puts ""
109                STDERR.puts "Please check the scale of branch length!"
110                STDERR.puts "The unit of branch lengths must be 'substitution/site'"
111                STDERR.puts "If the unit is 'substition' in your tree, please"
112                STDERR.puts "use the scale argument,"
113                STDERR.puts "% newick2mafft scale in > out"
114                STDERR.puts "where scale = 1/(alignment length)"
115                STDERR.puts ""
116                exit 1
117        end
118
119#       STDERR.puts "subtree = " + $&
120
121        if memi[1] < memi[0] then
122                memi.reverse!
123                leni.reverse!
124        end
125
126        tree.sub!( /XXX/, memi[0].to_s )
127
128#       STDERR.puts "Tree = " + tree
129
130        printf( "%5d %5d %10.5f %10.5f\n", memi[0], memi[1], leni[0], leni[1] )
131
132end
Note: See TracBrowser for help on using the repository browser.