我正在使用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正确阅读以及如何访问注释的任何建议都将非常感激!
答案 0 :(得分:0)
可能偏离主题,但您是否考虑过使用ETE Toolkit:
除了一系列功能,例如搜索和遍历,它还可以进行节点注释:
http://etetoolkit.org/docs/latest/tutorial/tutorial_trees.html#node-annotation