2014-03-31 44 views
1

我写了一个计算两棵树之间距离的程序。 树木已经扎根。python根在同一根节点上的两棵树

我想确保树根扎根于同一个根或outgroup。

据我所知,在ete2中只能设置根目录,但无法找到同一根目录上的根目录和根目录。

我想在一棵树中找到根,并在另一棵树中设置相同的根。所以树木也以同样的方式扎根。

#>>> print t1 
# 
#   /-aaaaaaaaad 
#  /-| 
# /-| \-aaaaaaaaae 
# | | 
#--| \-aaaaaaaaaa 
# | 
# | /-aaaaaaaaab 
# \-| 
#  \-aaaaaaaaac 
#>>> print t2 
# 
#  /-aaaaaaaaaa 
# /-| 
# | | /-aaaaaaaaab 
# | \-| 
#--|  \-aaaaaaaaac 
# | 
# | /-aaaaaaaaad 
# \-| 
#  \-aaaaaaaaae 
# 

因此,在t1中,树以b和c结尾的outgroup为根。我想在同一组中获得这个outgroup和root t2。

有谁知道是否有可能性,以确保树根扎根?或者是否有另一个软件包包含这种方法?

+2

一如既往,请包括一些代码以及您的问题。谢谢 – sshashank124

回答

1

etetoolkit提供了用于生根树的set_outgroup方法。如果您只想在两棵树中使用相同的根进行拓扑比较,最简单的方法是在两棵树中选取与根相同的提示名称。

from ete2 import Tree 
# generate 2 random trees 
t1 = Tree() 
t2 = Tree() 
t1.populate(5) 
t2.populate(5) 
# root both to the same tip name 
root = t1.get_leaf_names()[0] 
t1.set_outgroup(root) 
t2.set_outgroup(root) 

print t1 
print t2 
# 
# /-aaaaaaaaaa 
#-| 
# | /-aaaaaaaaab 
# \-| 
# | /-aaaaaaaaac 
#  \-| 
#  | /-aaaaaaaaad 
#  \-| 
#   \-aaaaaaaaae 
# 
# /-aaaaaaaaaa 
# | 
#-|  /-aaaaaaaaad 
# | /-| 
# | | \-aaaaaaaaae 
# \-| 
# | /-aaaaaaaaab 
#  \-| 
#  \-aaaaaaaaac 
+0

非常感谢。我也在想这个。但我的问题不是设置根目录,而是获取根目录。 我在上面指定了我的问题,也许这有帮助。谢谢 – IssnKissn

+0

你可以使用tree.search_nodes()方法来定位一个特定的叶子。然后,根源。或者,tree.get_common_ancestor()允许您查找连接给定终端节点集的第一个内部节点,因此您可以使用它在两棵树中选择相同的生根点。 – jhc