使用Java Evolutionary Biology Library(JEBL)分析带有数据的树节点

时间:2016-08-25 19:46:00

标签: java tree bioinformatics

我正在使用JEBL,并且我在API上遇到了绊脚石,因为我无法在任何地方找到非常清晰的文档或示例。

我想要做的是在树中读取带有注释长度和节点注释的分支。然后,我应该能够获取树叶并向上遍历树,在我去的时候检查节点的注释(使用JEBL,遍历很容易,我的问题实际上是注释)。

它们是系统发育树,其中每个节点都是一个物种,注释将标记特定节点上是否存在某些基因,并且可能没有足够的基因使得一个字符串就足够了(例如,如果有三个基因A, B和C可能的节点注释可能是" AB"," AC"或""),这必须被允许是非唯一的(因为两个节点可能具有相同的基因集。)

目前我正在以Newick格式阅读树木 - 我可以阅读树木并拥有树枝长度并遍历树木,但我不知道如何以有用的方式标记节点(它们必须能够以读入它们的格式进行注释,而不是在读入后以编程方式进行注释):

import java.io.IOException;
import java.io.StringReader;
import java.util.Set;
import jebl.evolution.trees.SimpleRootedTree;
import jebl.evolution.graphs.Node;
import jebl.evolution.io.ImportException;
import jebl.evolution.io.NewickImporter;
import jebl.gui.trees.treeviewer.TreeViewer;
import jebl.evolution.trees.Tree;

public class TreeLoader {  
    public static void main(String[] args) {
        String newick = "(A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5)F;";
        StringReader sr = new StringReader(newick);
        NewickImporter ni = new NewickImporter(sr, true);
        try {
            SimpleRootedTree srt = (SimpleRootedTree) ni.importNextTree();
            Set<Node> leaves = srt.getExternalNodes();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ImportException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }           
    }   
    }

我无法看到在Newick表示中包含节点注释以便正确读取的方法。 (我不能使用节点名称(上例中的A,B等),因为它们必须是唯一的)。我一直在关注Nexus format,但并不是很了解它。我下载了Tree Graph以尝试创建相应的Nexus文件,但我无法根据需要弄清楚如何进行注释。然后,我不确定他们是否会以有用的方式被JEBL读入。我想前进的方法是利用JEBL的Attributable功能(因为Node实现了这个功能),但我不确定它是如何工作的。

有关如何设置我的Nexus文件和/或如何让JEBL正确阅读以及如何访问注释的任何建议都将非常感激!

1 个答案:

答案 0 :(得分:0)

可能偏离主题,但您是否考虑过使用ETE Toolkit

除了一系列功能,例如搜索和遍历,它还可以进行节点注释:

http://etetoolkit.org/docs/latest/tutorial/tutorial_trees.html#node-annotation