Корень питона два дерева на одном корневом узле

Я написал программу, которая рассчитывает расстояние между двумя деревьями. Деревья уже укоренились.

Я хочу убедиться, что деревья имеют корни в одном корне или вне группы.

Насколько я знаю, в 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
Другие вопросы по тегам