2019-06-02 04:36:25 -07:00
|
|
|
from ete3 import Tree
|
|
|
|
|
import numpy as np
|
2019-06-17 03:17:47 -07:00
|
|
|
import progressbar
|
|
|
|
|
|
|
|
|
|
def create_branch_length_padding(bl):
|
|
|
|
|
maxlen=0
|
|
|
|
|
for x in bl:
|
|
|
|
|
if len(x)>maxlen:
|
|
|
|
|
maxlen=len(x)
|
|
|
|
|
|
|
|
|
|
for x in bl:
|
|
|
|
|
for i in range(len(x),maxlen):
|
|
|
|
|
x.append(0)
|
2019-06-02 04:36:25 -07:00
|
|
|
|
|
|
|
|
def create_tree_data(treename,df):
|
|
|
|
|
t=Tree(treename)
|
|
|
|
|
branch_lengths_s=[]
|
|
|
|
|
branch_lengths_hs=[]
|
|
|
|
|
dist=[]
|
|
|
|
|
ns=[]
|
|
|
|
|
nhs=[]
|
2019-06-17 03:17:47 -07:00
|
|
|
for index,row in progressbar.progressbar(df.iterrows()):
|
2019-06-02 04:36:25 -07:00
|
|
|
d=0
|
|
|
|
|
x=row["species"]
|
|
|
|
|
y=row["homology_species"]
|
|
|
|
|
bl=[]
|
|
|
|
|
c=0
|
|
|
|
|
mca=t.get_common_ancestor(x,y)
|
|
|
|
|
node=t&x
|
|
|
|
|
while node.up!=mca:
|
|
|
|
|
d+=node.dist
|
|
|
|
|
bl.append(node.dist)
|
|
|
|
|
node=node.up
|
|
|
|
|
c+=1
|
|
|
|
|
ns.append(c)
|
|
|
|
|
c=0
|
|
|
|
|
branch_lengths_s.append(bl)
|
|
|
|
|
bl=[]
|
|
|
|
|
node=t&y
|
|
|
|
|
while node.up!=mca:
|
|
|
|
|
d+=node.dist
|
|
|
|
|
bl.append(node.dist)
|
|
|
|
|
node=node.up
|
|
|
|
|
c+=1
|
|
|
|
|
nhs.append(c)
|
|
|
|
|
branch_lengths_hs.append(bl)
|
|
|
|
|
dist.append(d)
|
2019-06-17 03:17:47 -07:00
|
|
|
create_branch_length_padding(branch_lengths_s)
|
|
|
|
|
create_branch_length_padding(branch_lengths_hs)
|
2019-06-02 04:36:25 -07:00
|
|
|
return np.array(branch_lengths_s),np.array(branch_lengths_hs),np.array(dist),np.array(ns),np.array(nhs)
|