2016-04-15 10 views
1

私は、phyloxml形式の系統樹を凝縮しようとしています(すべての葉に同じラベルが付いているクレードを簡素化しようとしています)。 NewickのUtilsのと呼ばれるプログラムは、このツリーを凝縮、Newickのフォーマットの木でこれを行うことは非常に便利です。phyloxml系統樹の縮合

この一つに

Original Tree

Condensed tree

私は最終的に私を分割しようとしていたよう遺伝子ツリーを各重複ノードのすべてのサブツリーに入れることは、情報を失うことなくサブツリーの数を減らすのに有効な方法です。

誰でもphyloxmlツリーでこれを行う方法を知っていますか? Newick UtilsはNewick形式しか受け付けないので、Biopythonを使ってphyloxml形式を解析する方法が必要です。ありがとう。

答えて

2

迅速な答えとして、あなたは非常に簡単にNewickのにphyloxmlを変換することができます。

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に変換しようとしました(確かにbiopythonよりもarcheopteryxを使用していました)が、私はツリー構造を分割するために私のツリーが必要なphyloxmlに戻ったときに多くの情報を失いました。最も重要なのは、種別や重複が発生したかどうかを示す「イベント」タグを失ったことです。これが私のツリーをどのように分割しているかの根拠(clades.events.duplicationを使用して)を使用しているため、この例では理想的な解決策ではないでしょうか? – spiral01

+0

@ spiral01、答えに追加してください。 – xbello