Poy在生成一致树时,会在文件开始处写入一串字符串(比如: Strict Consensus Tree),如果要用read命令将一致树调入内存则会失败,必须手动去除开始处的字符串,才能用read读入一致树。这导致一些关于一致树的计算很不方便,不能在一个Session中完成。比如计算一致树的bremer支持值,先要搜索出一致树,然后手动修改一致树,最后计算一致树的bremer支持值;这个过程需要停下来人工干预修改一致树,导致计算过程不能全自动一次完成。解决的方法就是修改POY源码,让它在用report命令报告一致树时不要写入第一行的字符串(为了明确一致树的意义,你可以把字符串用作一致树的文件名),这样在以后的计算过程中就可以直接通过read命令读入一致树并进行后续的bremer支持值计算了。
只需修改一个源文件treeSearch.ml,改动地方如下:
$ svn diff treeSearch.ml
Index: treeSearch.ml
===================================================================
--- treeSearch.ml (版本 193)
+++ treeSearch.ml (工作副本)
@@ -804,9 +804,9 @@
in
let fo = Status.Output (filename, false, []) in
if not graphic then begin
- Status.user_message fo "@[<v>";
+ (*Status.user_message fo "@[<v>";
Status.user_message fo
- ("@[" ^ majority_text ^ "@ Majority@ Consensus Tree@]@,@[");
+ ("@[" ^ majority_text ^ "@ Majority@ Consensus Tree@]@,@["); *)
Status.user_message fo (AsciiTree.for_formatter false true false
res);
Status.user_message fo "@]@]\n%!";
Index: treeSearch.ml
===================================================================
--- treeSearch.ml (版本 193)
+++ treeSearch.ml (工作副本)
@@ -804,9 +804,9 @@
in
let fo = Status.Output (filename, false, []) in
if not graphic then begin
- Status.user_message fo "@[<v>";
+ (*Status.user_message fo "@[<v>";
Status.user_message fo
- ("@[" ^ majority_text ^ "@ Majority@ Consensus Tree@]@,@[");
+ ("@[" ^ majority_text ^ "@ Majority@ Consensus Tree@]@,@["); *)
Status.user_message fo (AsciiTree.for_formatter false true false
res);
Status.user_message fo "@]@]\n%!";
希望读者看得懂上面的diff结果。看不懂也没关系,实际内容就是修改treeSearch.ml,在807行前加入 (* ,在809行后加入 *),意思就是将这三行注释掉。实际修改时要注意您的源代码的版本,我的版本是从svn库中取出的build 193。如果版本不一样,要修改的行数可能有偏移。
浙公网安备 33010602011771号