import os
os.environ['R_HOME'] = '/home/cfriedline/lib64/R'
import rpy2.robjects
import random
import string
import tempfile
import dendropy
from multiprocessing import Pool
from IPython.parallel import Client
rc = Client(profile='sge')
dview = rc[:]
lview = rc.load_balanced_view()
len(rc)
10
with dview.sync_imports():
import os
import rpy2
import rpy2.robjects
import random
import string
import tempfile
import dendropy
import socket
from multiprocessing import Pool
def setup_cluster_engines():
os.environ['R_HOME'] = '/home/cfriedline/lib64/R'
r = rpy2.robjects.r
ape = r('library(ape)')
return socket.gethostname(), os.getpid(), os.environ['R_HOME'], rpy2.__version__
dview['setup_cluster_engines'] = setup_cluster_engines
dview.apply(setup_cluster_engines).get()
importing os on engine(s) importing rpy2 on engine(s) importing rpy2.robjects on engine(s) importing random on engine(s) importing string on engine(s) importing tempfile on engine(s) importing dendropy on engine(s) importing socket on engine(s) importing Pool from multiprocessing on engine(s)
[('godel97', 26811, '/home/cfriedline/lib64/R', '2.4.0'), ('godel97', 26870, '/home/cfriedline/lib64/R', '2.4.0'), ('godel97', 26819, '/home/cfriedline/lib64/R', '2.4.0'), ('godel97', 26866, '/home/cfriedline/lib64/R', '2.4.0'), ('godel97', 26873, '/home/cfriedline/lib64/R', '2.4.0'), ('godel199', 17510, '/home/cfriedline/lib64/R', '2.4.0'), ('godel199', 17464, '/home/cfriedline/lib64/R', '2.4.0'), ('godel199', 17512, '/home/cfriedline/lib64/R', '2.4.0'), ('godel199', 17511, '/home/cfriedline/lib64/R', '2.4.0'), ('godel199', 17507, '/home/cfriedline/lib64/R', '2.4.0')]
r = rpy2.robjects.r
ape = r('library(ape)')
def create_tree(num_tips, type):
"""
creates the taxa tree in R
@param num_tips: number of taxa to create
@param type: type for naming (e.g., 'taxa')
@return: a dendropy Tree
@rtype: dendropy.Tree
"""
r = rpy2.robjects.r
rpy2.robjects.globalenv['numtips'] = num_tips
rpy2.robjects.globalenv['treetype'] = type
name = _get_random_string(20)
if type == "T":
r("%s = rtree(numtips, rooted=T, tip.label=paste(treetype, seq(1:(numtips)), sep=''))" % name)
else:
r("%s = rtree(numtips, rooted=F, tip.label=paste(treetype, seq(1:(numtips)), sep=''))" % name)
tree = r[name]
return ape_to_dendropy(tree)
def ape_to_dendropy(phylo):
"""
converts an ape tree to dendropy tree
@param phylo: ape instance from rpy2
@return: a dendropy tree
@rtype: dendropy.Tree
"""
f = tempfile.NamedTemporaryFile()
rpy2.robjects.r['write.nexus'](phylo, file=f.name)
tree = dendropy.Tree.get_from_path(f.name, "nexus")
f.close()
return tree
def _get_random_string(length):
"""
gets a random string of letters/numbers, ensuring that it does not start with a
number
@param length: length of the string
@return: the random string
@rtype: string
"""
s = ''.join(random.choice(string.letters + string.digits) for i in xrange(length))
if not s[0] in string.letters:
return _get_random_string(length)
return s
tree = create_tree(100, "T")
tree.as_newick_string()[0:80]
'(((T6:0.3194573249,T88:0.7137461954):0.426507879,T42:0.09966852632):0.2807099563'
def create_tree_mp(num_taxa):
t = create_tree(num_taxa, "T")
return t
def get_taxa_trees(num_trees, num_taxa):
jobs_mp = []
jobs_ip = []
jobs = []
res = []
pool = Pool(num_trees)
for i in xrange(num_trees):
jobs_mp.append(pool.apply_async(create_tree_mp, (num_taxa,)))
jobs.append(create_tree_mp(num_taxa))
jobs_ip.append(lview.apply_async(create_tree_mp, num_taxa))
pool.close()
pool.join()
res.append(jobs)
res.append([x.get() for x in jobs_mp])
res.append([x.get() for x in jobs_ip])
return res
dview['create_tree'] = create_tree
dview['_get_random_string'] = _get_random_string
dview['ape_to_dendropy'] = ape_to_dendropy
dview['create_tree_mp'] = create_tree_mp
dview['get_taxa_trees'] = get_taxa_trees
trees = get_taxa_trees(5, 10)
for t in trees[0]:
print t.as_newick_string()[0:80]
(((T2:0.7014786459,(((T10:0.1535879213,(T6:0.9837731475,T8:0.2049651504):0.79080 ((T7:0.5806423163,(T5:0.007633442292,T2:0.2177157113):0.09601430735):0.305033218 ((((((T6:0.2959137154,T7:0.4578026251):0.8627177938,(T8:0.08809919422,T3:0.10175 (T7:0.2577645453,((T10:0.1396945077,T4:0.6536828352):0.7271465769,(T2:0.26139505 ((T10:0.01782502211,T5:0.9478464343):0.4384911573,((T1:0.201613334,T9:0.52947913
for t in trees[1]:
print t.as_newick_string()[0:80]
(((T2:0.7014786459,(((T10:0.1535879213,(T6:0.9837731475,T8:0.2049651504):0.79080 (((T2:0.7014786459,(((T10:0.1535879213,(T6:0.9837731475,T8:0.2049651504):0.79080 (((T2:0.7014786459,(((T10:0.1535879213,(T6:0.9837731475,T8:0.2049651504):0.79080 (((T2:0.7014786459,(((T10:0.1535879213,(T6:0.9837731475,T8:0.2049651504):0.79080 (((T2:0.7014786459,(((T10:0.1535879213,(T6:0.9837731475,T8:0.2049651504):0.79080
for t in trees[2]:
print t.as_newick_string()[0:80]
(((T1:0.1959578383,(T4:0.4092330183,T5:0.1314637179):0.6633579263):0.07092879713 ((((T10:0.5492198297,(T9:0.8054336836,T8:0.9056934002):0.6771697227):0.465427928 (((T9:0.06959938002,((T10:0.05167591712,T1:0.7737517059):0.6082972996,T7:0.63657 (T6:0.5223825315,((((T10:0.3305313124,T3:0.1639568484):0.5333597104,(T1:0.155836 ((T4:0.9040003123,(T1:0.7009222899,(T9:0.5908546504,T7:0.3244189187):0.872680337