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%!";

 

 

  希望读者看得懂上面的diff结果。看不懂也没关系,实际内容就是修改treeSearch.ml,在807行前加入 (* ,在809行后加入 *),意思就是将这三行注释掉。实际修改时要注意您的源代码的版本,我的版本是从svn库中取出的build 193。如果版本不一样,要修改的行数可能有偏移。

posted on 2010-05-31 16:27  玛瑙河  阅读(628)  评论(0)    收藏  举报