Корень питона два дерева на одном корневом узле
Я написал программу, которая рассчитывает расстояние между двумя деревьями. Деревья уже укоренились.
Я хочу убедиться, что деревья имеют корни в одном корне или вне группы.
Насколько я знаю, в ete2 можно только установить корень, но не может найти корень и корень другого дерева на том же.
Я хочу найти корень в одном дереве и установить тот же корень в другом. Таким образом, деревья укоренены таким же образом.
#>>> print t1
#
# /-aaaaaaaaad
# /-|
# /-| \-aaaaaaaaae
# | |
#--| \-aaaaaaaaaa
# |
# | /-aaaaaaaaab
# \-|
# \-aaaaaaaaac
#>>> print t2
#
# /-aaaaaaaaaa
# /-|
# | | /-aaaaaaaaab
# | \-|
#--| \-aaaaaaaaac
# |
# | /-aaaaaaaaad
# \-|
# \-aaaaaaaaae
#
Таким образом, в t1 дерево коренится на внешней группе, оканчивающейся на b и c. Я хочу получить эту внешнюю группу и root t2 в той же группе.
Кто-нибудь знает, есть ли возможность убедиться, что деревья укоренены одинаково? Или другой пакет включает такой метод?
1 ответ
http://etetoolkit.org/ обеспечивает 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