2016-04-15 78 views
1

我想凝聚(簡化所有葉子具有相同標籤的進化枝)phyloxml格式的系統發育樹。所謂Newick utils的程序是非常有用的與newick格式樹要做到這一點,冷凝樹:凝聚phyloxml系統發育樹

Original Tree

到這一個:

Condensed tree

由於我最終試圖分裂我的基因樹分解到每個複製節點的所有子樹中,這是減少子樹數量而不丟失信息的有用方法。

有沒有人知道這樣做與phyloxml樹的方式? Newick Utils只接受Newick格式,所以我需要一種使用Biopython解析phyloxml格式的方法。謝謝。

回答

2

作爲一個快速的回答,您可以將phyloxml到newick很容易:

from Bio import Phylo 

Phylo.convert("original.xml", "phyloxml", "converted.newick", "newick") 

現在你可以打電話給你的Newick utils的凝結樹。


如果你想刪除的葉子時,他們有同一個名字:

for clade in tree.find_clades(): 
    if clade.count_terminals() > 1: 
     leafs = clade.get_terminals() 
     if len(set([t.name for t in leafs])) == 1: 
      # All the leafs in this clade have the same name. 
      # Cut them all except the first one. 
      for leaf in leafs[1:]:        
       tree.prune(leaf) 

理想情況下,你就會把上面的代碼中,返回新修剪樹的功能,且每次調用該函數修剪一片葉子。

+0

我確實嘗試轉換爲Newick(承認使用archeopteryx而不是biopython),但是當我轉換回phyloxml(我需要我的樹進行子樹分割過程)時,丟失了大量信息。最重要的是,我丟失了「事件」標籤,這表明是否出現了物種形成或重複。由於這是我如何分割我的樹(使用if clades.events.duplication)的基礎,我認爲這不是一個理想的解決方案在這種情況下? – spiral01

+0

@ spiral01,檢查答案的補充。 – xbello