我正在使用JEBL,并且在使用这个应用程序接口时步履蹒跚,因为我在任何地方都找不到非常清晰的文档或示例。
我想要做的是在树中读取,其中分支用长度注释,节点也用注释。然后,我应该能够获取树叶并向上遍历树,同时检查节点的注释(使用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正确读取它们以及如何访问注释的建议都将非常感谢!
发布于 2016-08-27 02:40:40
可能会离题,但您是否考虑过使用ETE Toolkit
除了搜索和遍历等一系列功能外,它还可以进行节点注释:
http://etetoolkit.org/docs/latest/tutorial/tutorial_trees.html#node-annotation
https://stackoverflow.com/questions/39153587
复制相似问题