annotate phylorelatives.py @ 31:75dcc9910f6d draft

Uploaded
author boris
date Mon, 10 Jun 2013 00:43:11 -0400
parents 29ca7d28f6c7
children 8d663949bdc8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
1 #!/usr/bin/env python
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
2 #
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
3 # Boris Rebolledo-Jaramillo (boris-at-bx.psu.edu)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
4 #usage: phylorelatives.py [-h] [-i FASTA] [-b INT] [-p] [-r FASTA]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
5 #
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
6 #Constructs relatedness of a set of sequences based on the pairwise proportion
31
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
7 #of different sites. It reports the test sequences relatives, tree plot and
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
8 #tree in Newick format. One or more test sequences are accepted as long as
0
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
9 #their name includes the strict suffix "_minor" or "_test" (i.e. >seq1_minor).
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
10 #IMPORTANT: Sequences must have the same length!
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
11 #
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
12 #optional arguments:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
13 # -h, --help show this help message and exit
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
14 # -i FASTA, --input FASTA
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
15 # This option can be specified multiple times. Sequences
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
16 # will be added to "multi-fasta.fa". (e.g. -i major1.fa
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
17 # -i major2.fa -i minor1.fa)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
18 # -b INT, --bootstrap INT
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
19 # Change number of replicas. 0 to deactivate. (Default:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
20 # 1000)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
21 # -p, --pairwise Use pairwise deletion of gaps/missing data. (Default:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
22 # Complete deletion)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
23 # -r FASTA, --root FASTA
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
24 # Root trees using FASTA sequence as outgroup. (Default:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
25 # Display unrooted trees)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
26
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
27 import sys
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
28 import argparse
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
29 import array
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
30 import dendropy
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
31 import rpy2.rinterface
25
29ca7d28f6c7 added --vanilla to rpy2 init options
boris
parents: 23
diff changeset
32 rpy2.rinterface.set_initoptions(('rpy2','--vanilla','--quiet'))
0
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
33 import rpy2.robjects as robjects
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
34 from rpy2.robjects.packages import importr
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
35
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
36
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
37 def ape_read_dna(infasta):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
38 """Read multi-fasta into phylo object"""
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
39 ape = importr('ape')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
40 data = ape.read_dna(file=infasta,format="fasta")
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
41 return data
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
42
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
43 def ape_nj(data,missing_info_option=0):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
44 """Return ape nj tree"""
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
45 ape = importr('ape')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
46 dist = ape.dist_dna(data,model="raw",pairwise=missing_info_option)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
47 nj_tree = ape.nj(dist)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
48 return nj_tree
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
49
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
50 def ape_consensus(tree,tree_function,data,iters=1000):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
51 """Return majority rule consensus tree"""
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
52 ape = importr('ape')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
53 tree_func = robjects.r(tree_function)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
54 bootstrap = ape.boot_phylo(tree, data, tree_func,
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
55 B=iters, quiet=1, trees=1)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
56 bs_trees = bootstrap.rx('trees')[0]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
57 cons_tree = ape.consensus(bs_trees,p=0.5)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
58 return cons_tree
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
59
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
60
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
61 def dendro_relatives(tree,minor):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
62 """Return minor allele sequence relatives in tree"""
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
63 ape = importr('ape')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
64 newick = list(ape.write_tree(tree))[0]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
65 t = dendropy.Tree.get_from_string(newick,"newick")
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
66 minor_leaf = [node for node in t.leaf_nodes()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
67 if node.get_node_str() == minor][0]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
68 parent = minor_leaf.parent_node
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
69 relatives = []
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
70 while len(relatives) == 0:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
71 output = [relative.get_node_str() for relative in parent.leaf_nodes()]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
72 relatives = [relative for relative in output if not (relative.endswith('minor') or relative.endswith('test'))]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
73 parent = parent.parent_node
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
74 return output
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
75
31
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
76
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
77 def dendro_plot(tree, root=False ):
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
78 """Plot tree to file in ascii format"""
0
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
79 ape = importr('ape')
31
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
80 if root:
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
81 newick = list(ape.write_tree(ape.root(tree,root)))[0]
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
82 else:
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
83 newick = list(ape.write_tree(tree))[0]
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
84 t = dendropy.Tree.get_from_string(newick,"newick")
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
85 ascii_tree = t.as_ascii_plot()
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
86 return ascii_tree
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
87
0
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
88
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
89 def write_nwk(tree):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
90 "Write proper Newick string"
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
91 ape = importr('ape')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
92 nwk = list(ape.write_tree(tree))[0]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
93 return nwk
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
94
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
95 def main():
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
96 # Parse command line options
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
97 parser = argparse.ArgumentParser(description='Constructs relatedness of a set of sequences based on the pairwise proportion of different sites. It reports the test sequences relatives, tree plots and trees in Newick format. One or more test sequences are accepted as long as their name includes the strict suffix "_minor" or "_test" (i.e. >seq1_minor). IMPORTANT: Sequences must have the same length!', epilog='Boris Rebolledo-Jaramillo (boris-at-bx.psu.edu)')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
98 parser.add_argument('-i', '--input', metavar='FASTA', action='append', type=str, help='This option can be specified multiple times. Sequences will be added to "multi-fasta.fa". (e.g. -i major1.fa -i major2.fa -i minor1.fa)')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
99 parser.add_argument('-b', '--bootstrap', type=int, metavar='INT',default=1000, help='Change number of replicas. 0 to deactivate. (Default: 1000)')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
100 parser.add_argument('-p', '--pairwise', action='store_true', help='Use pairwise deletion of gaps/missing data. (Default: Complete deletion)')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
101 parser.add_argument('-r', '--root', type=str, metavar='FASTA', default=False, help='Root trees using FASTA sequence as outgroup. (Default: Display unrooted trees)')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
102 parser.add_argument('--relatives-out', type=str, metavar='FILE', default=None, help=argparse.SUPPRESS)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
103 parser.add_argument('--newick-out', type=str, metavar='FILE', default=None, help=argparse.SUPPRESS)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
104 parser.add_argument('--trees-out', type=str, metavar='FILE', default=None, help=argparse.SUPPRESS)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
105 parser.add_argument('-m', '--multi-fasta', type=str, default='multi-fasta.fa', help=argparse.SUPPRESS)
31
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
106 args = parser.parse_args('-i multi.fa -b 0 -r RSRS.fasta'.split())
0
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
107
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
108
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
109 if args.input:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
110 for fasta in args.input:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
111 try:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
112 open(fasta)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
113 except:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
114 sys.exit("\nERROR: Could not open %s\n" % fasta)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
115 try:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
116 multi = open(args.multi_fasta, 'w+')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
117 except:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
118 sys.exit("\nERROR: Could not create %s\n" % args.multi_fasta)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
119
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
120 for fasta in args.input:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
121 for line in list(open(fasta)):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
122 multi.write(line.replace('-', '_'))
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
123
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
124
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
125 if args.root:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
126 try:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
127 root = list(open(args.root))
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
128 root_id = [line.strip()[1:].replace('-', '_') for line in root if line.strip().startswith(">")][0]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
129 for line in root:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
130 multi.write(line.replace('-', '_'))
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
131 except:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
132 sys.exit("\nERROR: Could not open %s\n" % args.root)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
133 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
134 root_id = args.root
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
135 multi.close()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
136
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
137 try:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
138 data = ape_read_dna(args.multi_fasta)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
139 except:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
140 sys.exit("\nERROR: Check existence or proper format of %s\n" % args.multi_fasta)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
141
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
142 # Get sequence ids in alignment and identify test sequences
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
143 fasta_ids = [seqname.strip()[1:] for seqname in list(open(args.multi_fasta)) if seqname.startswith('>')]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
144 minor_ids = [seqname for seqname in fasta_ids if seqname.endswith('minor') or seqname.endswith('test')]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
145
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
146 if len(minor_ids) == 0:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
147 sys.exit("\nERROR: No test sequences found. _minor or _test suffixes are required in the sequence name!\n")
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
148 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
149 pass
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
150
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
151 if args.pairwise:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
152 nj_tree = ape_nj(data,1)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
153 nj_func = 'function (xx) nj(dist.dna(xx, model="raw", pair=1))'
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
154 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
155 nj_tree = ape_nj(data)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
156 nj_func = 'function (xx) nj(dist.dna(xx, model="raw"))'
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
157
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
158 if args.bootstrap == 0:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
159 cons_tree = nj_tree
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
160 elif args.bootstrap !=1000:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
161 cons_tree = ape_consensus(nj_tree,nj_func,data,iters=args.bootstrap)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
162 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
163 cons_tree = ape_consensus(nj_tree,nj_func,data)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
164
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
165 # Generate report, trees, and Newick strings
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
166 if args.relatives_out is not None:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
167 relatives = open(args.relatives_out,'w+')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
168 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
169 relatives = open(args.multi_fasta+'-relatives.tab','w+')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
170 if args.newick_out is not None:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
171 newick = open(args.newick_out,'w+')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
172 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
173 newick = open(args.multi_fasta+'-newick.txt','w+')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
174 if args.trees_out is not None:
31
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
175 tree_plot_file = open(args.trees_out, 'w+')
0
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
176 else:
31
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
177 tree_plot_file = open(args.multi_fasta+'-tree-ascii.txt', 'w+')
0
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
178
31
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
179 newick.write('%s\n' % (write_nwk(cons_tree)))
0
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
180 relatives.write('#source\tsample\trelatives\n')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
181 for node in minor_ids:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
182 nj_relatives = [relative for relative in dendro_relatives(cons_tree,node) if relative != node]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
183 relatives.write( 'Neighbor_Joining_tree\t%s\t%s\n' % (node,','.join(sorted(nj_relatives))) )
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
184
31
75dcc9910f6d Uploaded
boris
parents: 25
diff changeset
185 tree_plot_file.write(dendro_plot(cons_tree,root=root_id))
0
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
186
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
187 newick.close()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
188 relatives.close()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
189
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
190 if __name__ == "__main__": main()