利用ete3的set_outgroup函数批量对基因树定根并利用check_monophyly函数检测单系性

对溯祖法得到的多个基因树进行定根,将多个基因树文件cat到一个文件中,得到alltree.txt,利用以下脚本对其批量定根。
1
2
3
4
5
6
7
8
9
10
11
12
13
###首先下载ete3工具包
from ete3 import Tree
for i in range(7121): #提前创建7122个文件,用于写入定根后的树文件,修改为基因的数量减一
f = open('./%s'%i + '.txt',"a")
f.write("")

n=0
with open('alltree.txt','r') as f:
for line in f:
t = Tree(line)
t.set_outgroup(t&"mcap") #设置外群,修改双引号之间的物种名即可,若歪群为两个物种则改为t.set_outgroup("mcap1"&"mcap2")
t.write(outfile=str(n)+".txt") #将每一行的树定根后写入到每一个文件中
n=n+1

写为python脚本并运行,然后将其合并方便后续分析。

1
sed '' *.txt > alltree.rooted.txt
检测单系性
1
2
3
4
5
from ete3 import Tree
with open('alltree.rooted.txt','r') as f: #此处alltree.rooted.txt为包含所有基因树的文件,每行一个基因树
for line in f:
t = Tree(line)
print(t.check_monophyly(values=["aawi", "asub", "aflo", "agem", "aint", "apal", "adig", "alor", "aacu", "anas", "amic", "amil", "asel", "acyt", "ahya", "amur", "aech"], target_attr="name")) #利用check_monophyly函数检测单系性,修改方括号内的物种名即可

将上述写为python脚本并运行,输出内容为true或者false,便可判断所列物种在每个基因树中是否为单系。

参考

使用树数据结构 — ETE 工具包 - 树的分析和可视化 (etetoolkit.org)