annotate phylorelatives.py @ 25:29ca7d28f6c7 draft

added --vanilla to rpy2 init options
author boris
date Fri, 07 Jun 2013 10:03:39 -0400
parents 90da8b21438c
children 75dcc9910f6d
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
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
7 #of different sites. It reports the test sequences relatives, tree plots and
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
8 #trees in Newick format. One or more test sequences are accepted as long as
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 #def parsimony_tree(tree,data):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
61 # """Return Maximum Parsimony tree from supplied tree"""
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
62 # phangorn = importr('phangorn')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
63 # mp_tree = phangorn.optim_parsimony(tree,phangorn.phyDat(data), trace=0)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
64 # return mp_tree
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
65
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
66
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
67 def dendro_relatives(tree,minor):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
68 """Return minor allele sequence relatives in tree"""
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
69 ape = importr('ape')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
70 newick = list(ape.write_tree(tree))[0]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
71 t = dendropy.Tree.get_from_string(newick,"newick")
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
72 minor_leaf = [node for node in t.leaf_nodes()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
73 if node.get_node_str() == minor][0]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
74 parent = minor_leaf.parent_node
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
75 relatives = []
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
76 while len(relatives) == 0:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
77 output = [relative.get_node_str() for relative in parent.leaf_nodes()]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
78 relatives = [relative for relative in output if not (relative.endswith('minor') or relative.endswith('test'))]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
79 parent = parent.parent_node
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
80 return output
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
81
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
82 def plot_tree(outfile, tree1, tree2=None, root=False):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
83 """Generate tree(s) plot"""
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
84 ape = importr('ape')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
85 graphics = importr('graphics')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
86 grdevices = importr('grDevices')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
87 if tree2 is None:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
88 grdevices.png(file=outfile, width=1024, height=768)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
89 if root:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
90 ape.plot_phylo(ape.root(tree1,root),edge_width=2,cex=1,underscore=1)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
91 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
92 ape.plot_phylo(tree1,edge_width=2,cex=1,underscore=1)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
93 graphics.title(main='Neighbor Joining')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
94 grdevices.dev_off()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
95 elif tree2 is not None:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
96 grdevices.png(file=outfile, width=1024, height=768)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
97 graphics.par(mfcol=array.array('i',[1,2]))
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
98 if root:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
99 ape.plot_phylo(ape.root(tree1,root),edge_width=2,cex=1,underscore=1)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
100 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
101 ape.plot_phylo(tree1,edge_width=2,cex=1,underscore=1)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
102 graphics.title(main='Neighbor Joining', cex=1.5, font=2)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
103 if root:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
104 ape.plot_phylo(ape.root(tree2,root),edge_width=2,cex=1,underscore=1)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
105 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
106 ape.plot_phylo(tree2,edge_width=2,cex=1,underscore=1)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
107 graphics.title(main='Maximum Parsimony',cex=1.5, font=2)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
108 grdevices.dev_off()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
109 return
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
110
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
111 def write_nwk(tree):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
112 "Write proper Newick string"
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
113 ape = importr('ape')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
114 nwk = list(ape.write_tree(tree))[0]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
115 return nwk
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
116
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
117 def main():
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
118 # Parse command line options
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
119 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
120 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
121 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
122 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
123 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
124 parser.add_argument('--relatives-out', type=str, metavar='FILE', default=None, help=argparse.SUPPRESS)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
125 parser.add_argument('--newick-out', type=str, metavar='FILE', default=None, help=argparse.SUPPRESS)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
126 parser.add_argument('--trees-out', type=str, metavar='FILE', default=None, help=argparse.SUPPRESS)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
127 parser.add_argument('-m', '--multi-fasta', type=str, default='multi-fasta.fa', help=argparse.SUPPRESS)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
128 args = parser.parse_args()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
129
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
130
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
131 if args.input:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
132 for fasta in args.input:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
133 try:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
134 open(fasta)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
135 except:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
136 sys.exit("\nERROR: Could not open %s\n" % fasta)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
137 try:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
138 multi = open(args.multi_fasta, 'w+')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
139 except:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
140 sys.exit("\nERROR: Could not create %s\n" % args.multi_fasta)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
141
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
142 for fasta in args.input:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
143 for line in list(open(fasta)):
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
144 multi.write(line.replace('-', '_'))
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
145
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
146
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
147 if args.root:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
148 try:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
149 root = list(open(args.root))
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
150 root_id = [line.strip()[1:].replace('-', '_') for line in root if line.strip().startswith(">")][0]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
151 for line in root:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
152 multi.write(line.replace('-', '_'))
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
153 except:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
154 sys.exit("\nERROR: Could not open %s\n" % args.root)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
155 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
156 root_id = args.root
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
157 multi.close()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
158
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
159 try:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
160 data = ape_read_dna(args.multi_fasta)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
161 except:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
162 sys.exit("\nERROR: Check existence or proper format of %s\n" % args.multi_fasta)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
163
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
164 # Get sequence ids in alignment and identify test sequences
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
165 fasta_ids = [seqname.strip()[1:] for seqname in list(open(args.multi_fasta)) if seqname.startswith('>')]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
166 minor_ids = [seqname for seqname in fasta_ids if seqname.endswith('minor') or seqname.endswith('test')]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
167
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
168 if len(minor_ids) == 0:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
169 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
170 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
171 pass
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
172
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
173 if args.pairwise:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
174 nj_tree = ape_nj(data,1)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
175 nj_func = 'function (xx) nj(dist.dna(xx, model="raw", pair=1))'
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
176 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
177 nj_tree = ape_nj(data)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
178 nj_func = 'function (xx) nj(dist.dna(xx, model="raw"))'
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
179
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
180 if args.bootstrap == 0:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
181 cons_tree = nj_tree
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
182 elif args.bootstrap !=1000:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
183 cons_tree = ape_consensus(nj_tree,nj_func,data,iters=args.bootstrap)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
184 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
185 cons_tree = ape_consensus(nj_tree,nj_func,data)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
186
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
187 # Generate report, trees, and Newick strings
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
188 if args.relatives_out is not None:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
189 relatives = open(args.relatives_out,'w+')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
190 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
191 relatives = open(args.multi_fasta+'-relatives.tab','w+')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
192 if args.newick_out is not None:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
193 newick = open(args.newick_out,'w+')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
194 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
195 newick = open(args.multi_fasta+'-newick.txt','w+')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
196 if args.trees_out is not None:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
197 tree_plot_file = args.trees_out
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
198 else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
199 tree_plot_file = args.multi_fasta+'-tree.png'
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
200
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
201 newick.write('>Neighbor_Joining\n%s\n' % (write_nwk(cons_tree)))
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
202 relatives.write('#source\tsample\trelatives\n')
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
203 for node in minor_ids:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
204 nj_relatives = [relative for relative in dendro_relatives(cons_tree,node) if relative != node]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
205 relatives.write( 'Neighbor_Joining_tree\t%s\t%s\n' % (node,','.join(sorted(nj_relatives))) )
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
206 plot_tree(tree_plot_file,cons_tree,root=root_id)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
207
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
208
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
209 # Parsimony requires X11 related dependencies. Tricky
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
210 # if args.max_parsimony:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
211 # mp_tree = parsimony_tree(cons_tree,data)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
212 # newick.write('>Maximum_Parsimony\n%s\n' % (write_nwk(mp_tree)))
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
213 # for node in minor_ids:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
214 # mp_relatives = [relative for relative in dendro_leaves(mp_tree,node) if relative != node]
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
215 # relatives.write( 'Maximum_Parsimony_tree\t%s\t%s\n' % (node,','.join(sorted(mp_relatives))) )
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
216 # plot_tree(tree_plot_file, tree1=cons_tree, tree2=mp_tree, root=args.root)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
217 # else:
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
218 # plot_tree(tree_plot_file,cons_tree,root=args.root)
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
219
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
220 newick.close()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
221 relatives.close()
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
222
5a077cdba2f6 Uploaded phylorelatives.py
boris
parents:
diff changeset
223 if __name__ == "__main__": main()