2015-03-18 2 views
1

У меня проблема с экспортом объектов BioPython Tree (от Bio.Phylo) с значениями начальной загрузки. Деревья создаются непосредственно в моем сценарии BioPython на основе матриц расстояний.Запись загруженных филогенетических деревьев, сгенерированных с помощью Biopython, в файл с использованием Bio.Phylo.write()

Деревья в основном выглядят хорошо, но когда я использую функцию Bio.Phylo.write(), чтобы экспортировать их в файл (Newick, NEXUS или phyloXML-формат), значения поддержки bootstrap, похоже, будут экспортированы в неисправном формате.

Топология дерева может быть хорошо отображена, например. с ITOL или Dendroscope, но значения bootstrap не могут отображаться.

Примеры древовидных объектов и полученных файлов newick и phyloxml приведены ниже. Что я могу сделать, чтобы экспортировать деревья с правильными (читаемыми) значениями начальной загрузки?


Пример:

это то, что дерево-объекты выглядят как в BioPython (например, дерево с 5 "видами" имени А.Ф.):

Tree(rooted=False) 
    Clade(branch_length=0, confidence=100.0, name='Inner3') 
     Clade(branch_length=-0.0791666666667, name='A') 
     Clade(branch_length=0.0375, confidence=10.0, name='Inner2') 
      Clade(branch_length=0.0625, name='C') 
      Clade(branch_length=0.104166666667, confidence=40.0, name='Inner1') 
       Clade(branch_length=-0.15, name='D') 
       Clade(branch_length=0.15, name='B') 
     Clade(branch_length=0.0791666666667, name='E') 

при экспорте это newick format (->Bio.Phylo.write(mytree,outfile,"newick")), файл заканчивается следующим образом:

(A:-0.07917,(C:0.06250,(D:-0.15000,B:0.15000)Inner140.00:0.10417)Inner210.00:0.03750,E:0.07917)Inner3100.00:0.00000; 

Как вы можете видеть, значения доверия объединяются с ярлыками внутренней ветви и, таким образом, нечитабельны (например, «Inner140.00» для name = «Inner1» и trust = 40.0).

В phyloXML-формате, дерево-файлы выглядеть следующим образом:

<phyloxml xmlns="http://www.phyloxml.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.phyloxml.org http://www.phyloxml.org/1.10/phyloxml.xsd"> 
<phylogeny rooted="false"> 
<clade> 
    <name>Inner3</name> 
    <branch_length>0</branch_length> 
    <confidence type="unknown">100.0</confidence> 
    <clade> 
    <name>A</name> 
    <branch_length>-0.0791666666667</branch_length> 
    </clade> 
    <clade> 
    <name>Inner2</name> 
    <branch_length>0.0375</branch_length> 
    <confidence type="unknown">10.0</confidence> 
    <clade> 
     <name>C</name> 
     <branch_length>0.0625</branch_length> 
    </clade> 
    <clade> 
     <name>Inner1</name> 
     <branch_length>0.104166666667</branch_length> 
     <confidence type="unknown">40.0</confidence> 
     <clade> 
     <name>D</name> 
     <branch_length>-0.15</branch_length> 
     </clade> 
     <clade> 
     <name>B</name> 
     <branch_length>0.15</branch_length> 
     </clade> 
    </clade> 
    </clade> 
    <clade> 
    <name>E</name> 
    <branch_length>0.0791666666667</branch_length> 
    </clade> 
</clade> 

Это выглядит намного лучше, но ценности доверия еще не распознаются дерево ВИЗУАЛИЗАЦИЯ инструменты, такие как ITOL (возможно, из-за типа доверия = «неизвестные»?)

Что мне делать? Изменение окончательных файлов результатов кажется рискованным (что, если я действительно хочу листовые метки с такими ключевыми словами, как «внутренний»?)

Кроме того, я хотел бы ограничить себя модулями BioPython, добавив дополнительные внешние модули Python, поскольку зависимости делают инструмент, сложный для реализации для партнеров по сотрудничеству.

+0

Ваш PhyoXML является неполным (отсутствует XML-теги и закрытия филогении и phyloxml теги), но как только они будут добавлены я могу воспроизвести вывод Newick: $ питона -c «из Био импорта Фило; Phylo.convert ('internal_names. xml ',' phyloxml ','/dev/stdout ',' newick ') " – peterjc

+0

Это похоже на ошибку в писателе Newick. Я сообщил об этом здесь: https://github.com/biopython/biopython/issues/488 –

ответ

2

Nevermind: Наконец-то найден обходной путь!

Для тех, кто с той же проблемой: Вы можете перебрать все внутренние узлы объекта дерева BioPython данной командой tree.get_nonterminals() и установить внутренние имена узлов для None. Поскольку этот tree.get_nonterminals() выводит только внутренних узлов (а не на листья), оставшиеся имена остаются нетронутыми.

Пример:

for node in example_tree.get_nonterminals(): 
    node.name = None 

Это должно исправить выход при записи Newick Format!

Смежные вопросы