StupidBeauty
Read times:1245Posted at:Mon Apr 25 04:52:11 2011
- no title specified

PHYLIP3.69文档翻译:主文档(一)

节选了其中的部分内容进行翻译 。此文章的原文可在Kate dNA的博客上找到: http://stupidbeauty.com/KNA/2011/04/ phylip3-69文档翻译:主文档(一)/

第二部分 http://stupidbeauty.com/KNA/2011/04/ phylip3-69文档翻译:主文档( )/

第三部分: http://stupidbeauty.com/KNA/2011/04/ phylip3-69文档翻译:主文档( )/

PHYLIP

系统发生推论软件包(Phylogeny Inference Package

PHYLIP Logo

版本号3.69

2009年9月

作者Joseph Felsenstein

基因科学系与生物系
华盛顿大学
355065信箱
西 雅图,华盛顿 98195-5065
米国

电子邮件地址 joe (at) gs.washington.edu

对这些程序的简短介绍

PHYLIP,系统发生推论软件包,是一个由那些进行系统发生论(进化树)推论的程序组成的软件包。它是从1980 年开始发布的,有 20,000 多个注册用户,使得它成为与系统发生论有关的发布得最广泛的软件包。可以从它的网站免费获得:

http://evolution.gs.washington.edu/phylip.html

PHYLIP以C 源代码的方式发布,另外还以某些常用的系统的可执行程序的方式发布。它可使用以下方法进行系统发生论的推论:简约法、兼容性法、距离矩阵法和似然性法。它还可以计算一致树(consensus trees)、计算树之间的距离、画树、通过自举(bootstrapping)或剪切(jackknifing)来对数据集进行重新抽样、编辑树、以及计算距离矩阵。它可以处理以下数据:核苷酸序列、蛋白质序列、基因频率、限制性内切位点、限制酶断片、距离、离散字符、和连续性字符。

文档文件以及如何阅读它们

PHYLIP带有丰富的文档。其中包括主文档(就是你在读的这个),你应当完整地读一读它。另外,还有针对那些程序组的文档,包括针对 分子序列 程序组、 距离矩阵 程序组、 基因频率及连续性字符 程序组、 离散字符 程序组、和 画树 程序组的文档。最后,每个程序都有它自己的文档。对所有文档的引用都位于这个主文档里。你可以这样阅读它们:

  1. 1.阅读这个主文档

  2. 2.试着决定哪些程序是你感兴趣的。

  3. 3.阅读包含这些程序的程序组的文档

  4. 4.阅读针对那些单个程序的文档

另外还有一个关于使用PHYLIP 3.6 的优秀教程。它是芬兰的埃斯坡的科学计算中心的Jarno Tuimala 写的,是PDF 文档,在 这里 下载。

这些程序做什么用

这里有一个针对每个程序的简短描述。对于更详细的说明,你当然应该阅读那个程序自己的文档以及那个程序所在的程序组的文档。在这个列表中,每个程序的名字都是一个链接,会带你到达那个程序的文档。注意,在PHYLIP 软件包中没有叫PHYLIP 的程序。

Protpars

使用简约法从蛋白质序列(使用标准的单个字母的氨基酸代码作为输入)估计系统发生史,并且以一种改动过 的方法来进行处理:只对那些会改变氨基酸的核苷酸变化进行计数,假设隐性变异 (silent changes)更容易发生。

Dnapars

使用简约法从核酸序列估计系统发生史。允许使用完整的 国际生物化学联合会(IUB)的模糊代码,并且估计祖先的核苷酸状态 。缺口被当作第五种核苷酸状态。它还可以对颠换使用简约法进行计算 。可处理多叉 (multifurcations)、重构祖先的状态 、使用0/1 的字符权重 、和推论分支长度

Dnamove

从核酸序列交互式地构建系统发生史,通过简约法和兼容性法来评估,并且显示出重构过的祖先的基(ancestral bases)。这个可以用来手动寻找简约法或者兼容性法的估计值。

Dnapenny

通过使用分支定界法来针对核酸序列寻找全部的最简约的系统发生史。(取决于数据)这个程序对于多于10-11 个种族的情况可能不实用。

Dnacomp

使用兼容性标准从核酸序列估计出系统发生史,这个标准会搜索个数最多的能够让所有状态(核苷酸)在同一棵树上唯一地进化的位点。当位点各自之间的进化概率差别很大时,兼容性就尤其适用,但是我们不能预先知道哪些是不那么可靠的位点。

Dnainvar

在4种种族上,针对核酸序列,计算Lake的和Cavender的系统发生论不变量,它们将会测试不同的树的拓扑。这个程序还会将不同的核苷酸模式的出现频率列成表格。Lake的不变量方法被他自己称作“进化简约法”。

Dnaml

针对核苷酸序列,使用最大似然法估计系统发生史。所使用的模型允许4种核苷酸有不同的期望频率、不同的转换和颠换概率、对不同种类的位点有不同(预定义)的变化概率,还使用了一个隐式(Hidden)马尔可夫(Markov)概率模型,程序使用它来推断什么位点有什么概率。这也允许位点之间的概率的伽马分布(gamma-distribution)和伽马加不变量位点分布(gamma-plus-invariant sites distributions)。

Dnamlk

与Dnaml 相同,但是会假设有一个分子时钟。同时使用这2个程序就能够为分子时钟假设进行一个似然性测试。

Proml

使用最大似然法从蛋白质氨基酸序列估计系统发生史。可使用PAM 、JTT 或者PMB 模型, 还使用了一个 隐式(Hidden)马尔可夫(Markov)概率模型,程序使用它来推断什么位点有什么概率。这也允许位点之间的概率的伽马分布 (gamma-distribution)和伽马加不变量位点分布(gamma-plus-invariant sites distributions)。它还允许在已知的位点有着不同的改变概率

Promlk

与Proml 相同,但是 会假设有一个分子时钟。同时使用这 2个程序就能够为分子时钟假设进行一个似然性测试。

Dnadist

从核酸序列计算种族之间的4种不同的距离。这些距离可以用于那些距离矩阵程序 。这些距离是 Jukes-Cantor公式、一个基于Kimura的2-参数 (2- parameter 方法的距离、Dnaml 中使 用的F84 模型 、和LogDet 距离。这些距离还可以在不同的位点针对伽马分布的和伽马加不变量分布的变化概率作修正 。进化概率可能按照一个预定义的方式依据不同的位点而发生变化 ,同时也依据一个隐式马尔可夫模型而变化。这个程序还可以列出序列之间的相似度的一个表格

Protdist

为蛋白质序列计算一个距离度量值,使用基于Dayhoff PAM矩阵、JTT矩阵模型、PBM模型、Kimura的1983近似法、或者是一个基于基因代码的模型加上一个变化为另一种氨基酸的约束的最大似然性估计。 这些距离还可以在不同的位点针对伽马分布的和伽马加不变量分布的变化概率作修正 。进化概率可能按照一个预定义的方式依据不同的位点而发生变化 ,同时也依据一个隐式马尔可夫模型而变化。这个程序还可以列出序列之间的相似度的一个表格 这些距离可以用于那些距离矩阵程序

Restdist

从限制性位点数据或者限制性片断数据计算出来的距离。限制性位点选项也被用来为RAPD或者AFLP计算距离。

Restml

使用限制性位点数据(不是限制性片断而是单个位点的存在 /缺失 )通过最大似然性方法估计出来的系统发生史。它使用Jukes-Cantor 核苷酸变化对称模型 ,这个模型不允许转换和颠换有不同的概率 。这个程序 慢。

Seqboot

读入一个数据集,再使用自举重取样来从这个数据集产生多个数据集 。由于这个软件包的当前版本中大部分程序 都允许处理多个数据集,所以这个程序可以与一致树程序Consense 一起使用 ,与软件包中的大部分方法配合进行自举(或者半删除式剪切 delete-half-jackknife )分析。这个 程序还允许在字符之间的种族的排列的Archie/Faith 技术 。它还可以重写一个数据集 ,将它从PHYLIP 的交错 (Interleaved) 及序列化 (Sequential) 格式转换成一个新的初级版本的XML 序列比对格式 ,它个格式正在开发当中 ,并且在 Seqboot文档网页 中描述。

Fitch

“可添加的树模型”下的距离矩阵数据中估计系统发生史,根据这个模型 ,距离预期与种族之间的分支长度的和相等。使用Fitch-Margoliash 标准和某些相关的平方标准 ,或者是最小进化距离矩阵方法。不假设有一个进化时钟。这个程序对以下东西有用 :从分子序列 、限制性位点或者片断距离中计算出来的距离,DNA 杂交度量值,以及从基因频率中计算出来的基因距离。

Kitsch

“超度量(ultrametric)”模型下的距离矩阵数据中估计系统发生史,这个模型与可添加的树模型相同 ,唯一的不同就是假设有一个进化时钟。还可能使用Fitch-Margoliash 标准和其它的最小平方标准 ,或者是最小进化标准。 这个程序对以下东西有用 :从分子序列 、限制性位点或者片断距离中计算出来的距离,DNA 杂交度量值,以及从基因频率中计算出来的基因距离。

Neighbor

由Mary Kuhner 和John Yamato 做的对Saitou 和Nei的“邻居连接方法”和UPGMA(平均连接簇)方法的实现。邻居连接是一个距离矩阵方法 ,它在不假设有一个时钟的情况下产生一个无根树。UPGMA假设有一个时钟。分支长度没有使用最小平方标准进行优化,但是这些方法很快,因此可 以处理很大的数据集。

Contml

在某个模型下使用最大似然法从基因频率中估计系统发生史,在那个模型中 ,所有的分支 都是由于在没有新的变异的情况下发生的基因漂移而产生的。不假设有一个分子时钟。另一个分析这种数据 的方法就是计算Nei的基因距离 ,并且使用那些距离矩阵程序中的一个。这个程序还可以针对按照布朗运动模型进化的连续字符进行最大似然性分析 ,但是它假设那些基因 型按照相同的概率和不相关的方式进化,所以它不把通常的相关性基因型计算在内

Gendist

从基因频率数据计算3种不同的基因距离公式中的1种。这些公式是 Nei的基因距离、Cavalli-Sforza 弦测量 、和Reynolds 等人的基因距离。前者适合于那种新的变异在一个无限同 等位基因中性变异模型中出现的数据,后两者适合于那种没有变异只有单纯的基因漂移的模型 。距离 被写到一个文件里,所采用的格式适合于作为那些距离矩阵程序的输入。

Contrast

从一个树文件中读取一个树,并且读取一个有着连续性基因 型数据的数据集,再产生针对那些基因 型的独立比对,以用于任何的多变量的统计软件包 。还会为那些比对产生协方差 、回归和基因 型之间的相关性。当一个种群中有独立的显 型时,还可以为种间抽样变化而进行校正

Pars

多状态离散基因型简约法。最多允许8 个状态 (包括" ? ")。无法做Camin-Sokal 和Dollo 简约法计算 。可以处理多个分叉 、重构祖先的状态 、使用基因 型权重、以及推断分支长度。

Mix

使用某些针对有2个状态(0和1)的离散基因型数据的简约法来估计系统发生史。允许使用 Wagner 简约法 、Camin-Sokal 简约法或者这两者的任意混合。还重构祖先的状态并且允许基因 型的权重(不推断分支长度)。

Move

交互式地从有2个状态(0和1)的离散基因型数据中构造系统发生史。为那些系统发生史评估简约性和兼容性指标 ,并且显示出整棵树上的重构状态。这个程序可用来手动寻找简约性或者兼容性评估值。

Penny

为有2个状态的离散基因型数据寻找全部的最简约的系统发生史,针对Wagner 、Camin-Sokal 和混合的简约法指标使用分支定界法的精确搜索。对于多于10-11 个物种的数据 (取决于数据)可能不实用。

Dollop

针对有2个状态(0和1)的离散基因型数据使用Dollo 或者多态性简约法标准来估计系统发生史。 还重构祖先的状态并且允许基因 型的权重。Dollo简约法尤其适合于限制性位点数据;在将祖先的状态指定为未知的情况下它可能适用于限制性片断数据

Dolmove

交互式地针对有2个状态(0和1)的离散基因型数据使用Dollo 或者多态性简约法标准来估计系统发生史 为那些系统发生史评估简约性和兼容性指标 ,并且显示出整棵树上的重构状态。这个程序可用来手动寻找简约性或者兼容性评估值。

Dolpenny

为有2个状态的离散基因型数据寻找全部的最简约的系统发生史,针对Dollo或者多态 的简约法指标使用分支定界法的精确搜索。对于多于10-11 个物种的数据 (取决于数据)可能不实用。

Clique

针对有2个状态的离散基因型,寻找互相兼容的最大集团,以及它们所导向的系统发生史。最大集团(或者与最大的那个相差指定范围的大小的全部集团 )是使用一个非常快的分支定界搜索方法找到的。这个方法不允许有丢失的数据存在 。对那种情况 ,Pars 或者Mix 的 T (阈值 (Threshold) )选项可能是一个有用的替代品。兼容性方法在这种情况下尤其有用 :有些基因 型的质量很差,其它的质量很好,但是却不能预先知道哪些好、哪些差。

Factor

读入离散的多状态数据以及基因型状态树,再产生对应的有 2个状态(0和1)的数据集。由Christopher Meacham 编写 。这个程序以前用在Mix 中调整多状态的基因型,但是现在不必这么做了 ,因为有了PARS。

Drawgram

用多种用户可控制的格式来绘制有根的系统发生史、进化树 、环形树和物候图 。这个程序是交互式的 ,允许在PC 、Macintosh 或者X Windows 屏幕、或者在Tektronix 或Digital 图形终端上预览那棵树。最终的输出可以是一个为以下东西而格式化的文件 :那些绘图程序中的一个 、一个光线跟踪或者VRML 浏览器 、送往一个激光打印机 (例如Postscript 或者PCL 兼容打印机) 、图形屏幕或者终端 、笔式绘图器或者兼容图象的点阵打印机

Drawtree

与Drawgram 类似,但是绘制无根的系统发生史。

Treedist

计算树之间的分支分数(Branch Score)距离,它允许树的拓扑不相同 它还会使用分支长度。它还计算树之间的Robinson-Foulds 对称差异距离 ,这个距离也允许树的拓扑不相同 ,但是不使用分支长度。

Consense

使用多数规则一致树方法来计算一致树,它也使得你能轻松地找到严格一致树 。无法计算Adams 一致树 。树是以一种标准的嵌套式括号格式写在一个树文件里的 ,这个文件是由这个软件包中的很多树估计程序产生的 。这个程序可以用来在使用这个软件包中的很多方法进行自举分析时作为最后一步

Retree

读入一棵树(有必要的话会带有分支长度),让你重新指定树根、翻转某些分支 、改变物种名字和分支长度,再将结果输出。 可以用来在有根树和无根树之间转换,还可以将树输出到一个试验性的新的XML 树文件格式当中 ,这个格式还在开发当中 ,具体的描述在 Retree文档网页

运行这些程序

这一小节假设你已经拿到咯预编译版的PHYLIP(Windows Mac OS X 、或者 Linux版),或者你拿到咯源代码并且自己把它编译咯(Linux Unix Mac OS X Windows或者OpenVMS版本)。对于 那些有预编译版的机器来说 ,通常不需要你搞到一个编译器或者亲自编译那些程序 。这个小节说的是怎 么运行那些程序 。在本文档稍后的地方会说明怎么下载并且安装PHYLIP (假如你还没做那个就已经在阅读这个文档的话)。一般地 ,你只会在下载并且安装咯PHYLIP 之后再读这个文档。

说说输入文件

对于所有这些类型的机器,很重点的一点是提前准备好将要给这些程序的输入文件(典型地是数据文件)。可以在任何编辑器中准备它们 ,但是要注意将它们保存为 纯文本 格式 (“平文本 ASCII”),而不是用像微软的Word 那样的文字编辑器所写的格式 (在微软Word 中 ,确保数据编码是 "US ASCII" ,因为使用任何的 Unicode 编码 都可能引起问题 )。你要自己阅读那些描述在程序中所使用的文件的格式的PHYLIP 文档 。在本文档的下一节里有一个部分的描述 。还可以通过运行一个以PHYLIP 格式输出的程序来获取这些输入文件 (这些程序中的某一些本身就能输出 ,还有别人写的一些程序 ,例如序列比对程序 ClustalW 和序列格式转换程序 Readseq)。在PHYLIP 里面 没有 任何程序提供输入文件的编辑器( 指望着启动其中某个程序再点一下鼠标就能创建一个数据文件)。

当这些程序开始运行时,它们首先寻找特定文件名 (例如 infile treefile intree或者fontfile 的输入文件。不同程序会寻找不同的文件名 ,你应当阅读对应程序的文档来搞清楚它们要用什么文件名 。如果你准备好咯拥有那些名字的文件 ,那么程序就会使用它们,不再向你询问文件名。如果它们没有找到拥有那些文件名的文件 ,那么程序就会告诉你说它们找不到某个名字的文件,并且要求 你输入文件名。例如 ,如果DnaML 寻找 infile 这个文件却没有找到,那么它会输出这条消息:

dnaml: can't find input file "infile"
Please enter a new file name>

这并不是说出现咯某个错误 你所需要做的就是输入文件名

程序在与自身相同的文件夹里寻找输入文件(文件夹跟 “目录”是同一个东西 。在WindowsMac OS XLinux或者Unix里,当程序向你询问文件名时 ,你可以将到达那个文件的路径作为文件名的一部分输入(比如 ,如果那个文件是在当前文件夹的上级文件夹里,那么你可以输入 ../myfile.dna 作为文件名 )。如果你不知道什么是 “文件夹”,或者什么叫“上级”,那么你就是一个只知道点鼠标并且希望会导致一堆文件名会神奇般地出现的新人类 (典型地,这样的人根本不知道文件在他她的系统中的什么地方,并且把他她们的文件系统弄得很乱 )如果是这样的话,你应该找个人跟你解释一下什么叫文件夹。

在一个Unix 或者Linux 系统上运行这些程序

以小写字符输入程序的名字(比如 dnaml )。要在程序正在运行的时候终结它 ,就按Control-C(先按住 Ctrl 键,再按 C )。

在某些系统中,你可能需要在程序名之前输入 ./ ,那样的话,上面的例子就是./dnaml。这个主要是因 为有些时候用户的PATH 中不包含当前目录 ,这通常是出于安全性考虑。

在后台运行或者通过一个脚本文件来控制这些程序的运行

在运行这些程序时,你可能会想要让它们在后台运行,这样你就可能去做别的东西咯 。在那些有窗口环 境的系统中 ,可以将它们放到单独的窗口中去执行,而像Unix 和Linux 的 nice 命令那样的命令可以用来让它们拥有更低的优先级 ,这样它们就不会干扰其它窗口中的交互式的程序咯。这一部分的说明会假设你使用一个Windows 系统或者一个Unix /Linux 系统。假如某些命令只在一个系统上有效而在另 一个系统上无效,那么我会提示。Mac OS X实际上是Unix(有木有!有木有!),所以你可以按照Unix 系统的方法去操作,必要的时候可以使用一个终端窗口。

如果没有窗口环境的话,那么在Unix 或者Linux 系统中,你可以在运行程序的时候在后面跟上一个 & 符号,这样就可以将这个任务(job)放到后台去运行咯。你需要将对那个交互式菜单进行响应的全部内容放到一个文件里 ,并且告诉那个后台任务要从那个文件里面读取它的输入。

在Windows 系统中没有&nice 命令,但是输入输出的重定向和脚本文件在命令提示符(Command)窗口里能够很好地工作。一个脚本文件可以通过单击它的图标或者在一个命令提示符窗口中输入它的名字的方式来调用 。一个脚本文件必须以 .bat 作为扩展名 ,比如 foofile.bat 。你可以在一个命令提示符窗口中输入批处理文件的文件名 (比如 foofile )来运行它,不用带 .bat

下面是一个对于Windows、Linux 或者在 Mac OS X 上使用终端(Terminal)窗口的例子:假设你想在后台运行Dnapars sequences.dat 文件中取得输入数据 将交互式的输出写入到 screenout 文件中 使用 input 文件来存储交互式的输入内容 input 文件只需要包含 2行:

sequences.dat

Y

这些就是你在以交互式的方式运行程序的时候会输入的内容,第一行是当程序找不到 infile 文件时对它的文件名请求的响应,第二行是对菜单进行响应。

要将程序放在后台运行的话,在Unix 或者Linux 系统中只需要简单地执行以下命令:

dnapars < input > screenout &

这样的话,就会启动这个程序,并且将 input 文件中的内容当作输入响应,将交互式的输出写入到 screenout 文件中 。这次运行也会创建常规的输出文件和树文件 (记住 ,如果你在这个程序正在后台运行的时候 ,在同一个目录中启动任何其它的 PHYLIP 程序,那么可能会导致一个程序的输出覆盖咯另一个程序的输出 )。

如果你想赋予这个程序比较低的优先级 便让它不要干扰其它工作,并且在你的Unix 或者Linux 系统里面有伯克利(Berkeley)Unix 类型的任务控制工具的话(通常会有的),那么你可以使用 nice 命令:

nice +10 dnapars < input > screenout &

这条命令会降低当前运行的这个程序的优先级。如果还想计时 ,并且将计时信息放到 screenout 文件 的末尾的话,你可以这样做:

nice +10 ( time dnapars < input ) >& screenout &

这条命令,我不解释。

在Unix 或者Linux 系统上,你还可以试试把交互式的输出内容斗转星移到黑洞文件 /dev/null ,这 样就不用管它咯 (但是那样的话你也没法去看它以 便搞清楚 到底是哪里出咯问题)。 如果你发现不能创建太大的文件,那么你可以试试关掉所启动的程序的某些选项。

如果你要一次性运行多个程序,比如说 ,要使用 Seqboot 、Dnapars(比如说哈) 和Consense 来做一个自举分析 ,你可以用个编辑器来创建一个包含以下命令的脚本:

seqboot < input1 > screenout

mv outfile infile

dnapars < input2 >> screenout

mv outtree intree

consense < input3 >> screenout

上面这个是Unix 或者Linux 版本--在Windows 版本里,对文件的重命名和将输出附加到 screenout 文件中去的操作是用另外的方法来做的

在Unix 或者Linux 系统中,脚本文件可以起像 foofile 这样的名字;在系统中,脚本文件的名字会是像 foofile.bat 这样的。

在Unix 或者Linux 系统上,必须使用 chmod +x foofile 命令再加上 rehash 命令来给这个脚本赋予可执行权限。 foofile 所控制的任务可在Unix 或者Linux 系统上使用以下命令来在后台运行

foofile &

在Windows 系统上,可单击这个脚本文件的图标以运行它。它的图标上会有一个小小的齿轮符号。

注意,你还必须在单独的文件 input1 、input2 input3 中为Seqboot(包括随机数种子) 、Dnapars 和Consense 准备好交互式的输入命令。还要注意 ,当 PHYLIP 中的程序在试图打开一个新的输出文件 (比如 outfile outtree 或者 plotfile )时,如果发现那个文件已经存在咯,那么它们会向你询问:覆盖它 、写到另一个文件里、将输出内容附加到那个文件的末尾、还是什么都不写干脆退出?这就意味着 ,在写脚本文件时,要注意搞清楚会不会有这种提示冒出来。你必须预先知道那个文件是不是存在 。你可能会在脚本文件中加上一些语句 来测试输出文件是不是已经存在 ,如果存在的话就删除它 ,比如说 ,在Unix 、Linux 或者Mac OS X 系统上可写上这样的指令:

if test -e fubarfile

then

rm fubarfile

fi

你甚至还可以加上一条指令来创建一个拥有那个名字的目录,这样你就可以确信它真的存在 !无论怎样,你 都会知道是否要在你的响应文件中对覆盖已有输出文件的问题进行回答咯

准备输入文件

PHYLIP 中的程序所使用的输入文件必须单独准备-在PHYLIP 中没有数据编辑器。你可以自己使用一个 文字处理器 (或者文本编辑器)来准备输入文件,或者可以使用一个产生PHYLIP 格式的输出的程序。

像 ClustalW 这样的序列比对程序一般都提供咯输出PHYLIP 格式的文件的选项,而某些其它的系统发生推论程序 ,例如MacClade 和TreeView,都能生成PHYLIP 格式的文件。

注意,一定要确保那些输入文件是“纯文本”或者"ASCII"格式的。这就意味着它们只包含可打印的ASCII/ISO 字符,不包含任何不可打印的字符。很多文字处理器 ,比如说微软的Word,都会以一种包含不可打印字符的格式来保存文件,除非是你叫它们不要这么做 。在微软的Word 及类似的字处理器中 ,如果是你第一次编辑某个文件,那么当你执行文件菜单中的保存命令时 ,程序实际上会执行一个另存为命令 ,询问你要以什么格式来保存那个文件。

  • •.如果你使用的是微软的Word,那么就选择纯文本 Plain Text )。将会弹出一个对话框 (或者,在Mac OS X 版本的Word 中,会出现一个选项( Option )按钮 ,你可以在那里选择 US-ASCII 选项。那些以 Western European (西欧) 开头的选项应当也没问题 。而其它的编码就不见得有效咯

  • •.如果你使用的是写字板(WordPad),那么就选择文本文档( Text Document (*.txt) 不要 选择 Unicode 文本文档 Unicode Text Document )。

  • •.如果你使用的是记事本(Notepad),那么就选择文本文档 Text Document )再选择 ANSI 编码,不要选择 Unicode 或者 UTF8 编码。

下一次你编辑这个文件时,使用保存命令,程序应当使用那些现有的设置而不再询问你 。如果本软件包中的程序无法读取你搞出来的输入文件 ,那么你就检查一下你是否把这些选项搞正确咯 。执行文件菜单中的另存为命令 ,再做出正确的设置。

文本编辑器,比如Unix 和Linux 系统上的vi 和emacs 编辑器、Mac OS 上的 SimpleText 、或者是 pine 邮件程序自带的编辑器 pico ,都会将输出文件保存为纯文本格式,所以不会引起问题。

输入文件的格式在下面说明,另外你还应当阅读与你将要使用的数据及程序相关的PHYLIP 文档,因为在那里能找到更详细的说明。

输入和输出文件

对于大部分PHYLIP 程序来说,都是这样的 :信息从一堆输入文件里来 ,到一堆输出文件中去 (下面这个图是原作者用纯文本画的,需要用等宽字体来看)

---- ---------------

| |

infile ---------> | |

| |

intree ---------> | | -----------> outfile

| |

weights --------> | program | -----------> outtree

| |

categories -----> | | -----------> plotfile

| |

fontfile -------> | |

| |

-------------------

这些程序通过显示出一个菜单来与用户交互。除咯用户在菜单中进行的选择以外,它们从文件中读取它们其它的所有输入信息 。这些文件都有默认的名字。程序会尝试着找到一个叫默认名字的文件-如果没找到,它会让用户提供一个文件名。输入数据,例如DNA 序列的默认文件名是 infile 。如果用户提供的是一个树 ,那么默认文件名是 intree 。基因型的权重是在文件 weights ,画树的程序需要数字化的字体 ,那是放在文件 fontfile 中(这些都是默认名字)。

例如,如果Dnaml 需要文件infile 却没找到,那么它会输出这条消息

dnaml: can't find input file "infile"
Please enter a new file name>

这很简单,就是要你输入那个输入文件的名字。

数据文件的格式

我一直试图保持一个固定的输入和输出文件格式。对于简约法、兼容性法和最大似然法的程序,不包括距离向量程序,最简单的输入数据是这样的

6 13

Archaeopt CGATGCTTAC CGC

HesperorniCGTTACTCGT TGT

BaluchitheTAATGTTAAT TGT

B. virginiTAATGTTCGT TGT

BrontosaurCAAAACCCAT CAT

B.subtilisGGCAGCCAAT CAC

输入文件的第一行中写的是物种和字符(在这个例子中是位点)的个数。这 2个字段是以随意格式写的 ,以空格隔开。接下来是每个物种的信息 ,开头部分是 10个字符的物种名字(其中可以包含空格和标点符号),再接下来就是那个物种的字符串咯 。名字必须与那个物种的数据中的首字符位于同一行 (对于树来说,我会使用"物种"这个术语,因为在某些情况下 ,这些东西会是种群或者单个的基因序列).

名字应当包含10个字符,如果长度不够的话 ,就用空格补满。除咯以下字符之外,其它的可打印ASCII/ISO 字符都允许出现在名字中 :括号 (" ( "和" ) ")、方括号("["和"]")、冒号(":")、分号(";")和逗号(",")。如果你忘记咯用空格将名字补充到 10个字符的长度,那么程序就会因为数据文件的内容没有对齐而出错,最后向你报告一个错误。

注意,在物种名字中,制表符只算做一个字符。如果包含咯制表符的话 ,可能会引起麻烦。可能你看起来那个名字已经有 10个字符咯,但是在程序看来却没有10个字符。如果你使用文字处理器 ,例如Word,来制作数据文件,那么严重建议你检查一下以确保其中没有制表符 。你可以这样检查:在名字中 使用方向键来移动光标,看看是不是会突然向前移动 2个或者更多的字符的距离。最好是用空格来填充 名字,而不是用制表符

在离散字符程序、DNA 序列程序和蛋白质序列程序中,每个字符都是一个单个的字母或者数字,有些时 候是由空格分隔开的 。在连续性字符程序中 ,它们是带小数点的实数,中间用空格分隔:

Latimeria 2.03 3.457 100.2 0.0 -3.7

对于那些包含咯超过一行的数据的处理方法,分子序列程序和其它程序是不同的 。分子序列程序可以接受 “对齐”或者“交错”格式的数据,在后一种格式中 ,我们首先有一些行给出每个序列的第一部分,接下来又有一些行给出每个序列的下一部分,如此下去。所以 ,序列看起来是这样的:

6 39

Archaeopt CGATGCTTAC CGCCGATGCT

HesperorniCGTTACTCGT TGTCGTTACT

BaluchitheTAATGTTAAT TGTTAATGTT

B. virginiTAATGTTCGT TGTTAATGTT

BrontosaurCAAAACCCAT CATCAAAACC

B.subtilisGGCAGCCAAT CACGGCAGCC

TACCGCCGAT GCTTACCGC

CGTTGTCGTT ACTCGTTGT

AATTGTTAAT GTTAATTGT

CGTTGTTAAT GTTCGTTGT

CATCATCAAA ACCCATCAT

AATCACGGCA GCCAATCAC

注意,在这些序列中,每隔10个位点就有一个空格,这样就更容易读取:任意个空格都可以 。那个用来分隔 2组文字行(包含1-20 位点的那些行和包含21-39 位点的那些行)的空行可以有也可以没有。有一点很重要 ,每个组中 ,所有物种的位点个数都要是相同的(也就是说 ,不可能出现这样的情况:第一个物种的那一行有 20 个碱基 ,第二个物种的那一行有 21 个碱基,而程序竟然正确地运行咯 )。

或者,可以在菜单中选择另一个选项,以让程序按照 “串行化”格式来解释数据,首先是第一个物种的全部数据,接下来是第二个物种的全部字符,如此下去。这也是那些离散字符程序和 基因频率及数量字符程序 读取数据的方式。它们不接受交错格式。

在串行化格式中,字符数据可以延伸到新的行中 (除非是在一个物种名字的中间 ,或者,在连续字符和距离矩阵程序中 ,不能在一个实数的中间换行 )。所以可以写上这样的内容:

Archaeopt 001100
1101

甚至是这样的

Archaeopt
0011001101

但是,要注意,物种名字还是必须整整 10个字符的长度:在上面的例子中 ,"t"的后面必须有一个空格。在任何情况下 ,都可以向字符值中添加空格,所以

Archaeopt 0011001101 0111011100

是允许的

注意,你可以在Seqboot 中的J 菜单项里使用Rewrite(重写)选项来将分子序列数据在交错格式和串行化格式中转换。

如果你的输入文件中的格式有错误,那些程序有些时候能够探测到数据中有非法字符或者非法数值出现,那样就会输出像BAD CHARACTER STATE: (不可接受的字符状态 这样的错误消息,通常会输出那个错误的值,有些时候还会输出错误所在的物种和字符的序号。很快,程序会终止。导致错误的原因之一就是文件中在前面的某个地方缺少咯东西,或者是多咯某些东西 ,结果导致对文件的读取发生错乱。然后程序就读取咯那些自己意想不到的东西,并且认为它们是错误的 。所以 ,如果你看到咯这条错误信息,那么你可能需要看一下前面所发生的问题,它们可能就是导致程序发生错误的原因。

在下面说明咯某些选项,但是你还是应当读一下那些程序组和单个程序的文档。

PHYLIP3.69文档翻译:主文档(一)

节选了其中的部分内容进行翻译 。此文章的原文可在Kate dNA的博客上找到: http://stupidbeauty.com/KNA/2011/04/ phylip3-69文档翻译:主文档(一)/

第二部分 http://stupidbeauty.com/KNA/2011/04/ phylip3-69文档翻译:主文档( )/

第三部分: http://stupidbeauty.com/KNA/2011/04/ phylip3-69文档翻译:主文档( )/

PHYLIP

系统发生推论软件包(Phylogeny Inference Package

PHYLIP Logo

版本号3.69

2009年9月

作者Joseph Felsenstein

基因科学系与生物系
华盛顿大学
355065信箱
西 雅图,华盛顿 98195-5065
米国

电子邮件地址 joe (at) gs.washington.edu

对这些程序的简短介绍

PHYLIP,系统发生推论软件包,是一个由那些进行系统发生论(进化树)推论的程序组成的软件包。它是从1980 年开始发布的,有 20,000 多个注册用户,使得它成为与系统发生论有关的发布得最广泛的软件包。可以从它的网站免费获得:

http://evolution.gs.washington.edu/phylip.html

PHYLIP以C 源代码的方式发布,另外还以某些常用的系统的可执行程序的方式发布。它可使用以下方法进行系统发生论的推论:简约法、兼容性法、距离矩阵法和似然性法。它还可以计算一致树(consensus trees)、计算树之间的距离、画树、通过自举(bootstrapping)或剪切(jackknifing)来对数据集进行重新抽样、编辑树、以及计算距离矩阵。它可以处理以下数据:核苷酸序列、蛋白质序列、基因频率、限制性内切位点、限制酶断片、距离、离散字符、和连续性字符。

文档文件以及如何阅读它们

PHYLIP带有丰富的文档。其中包括主文档(就是你在读的这个),你应当完整地读一读它。另外,还有针对那些程序组的文档,包括针对 分子序列 程序组、 距离矩阵 程序组、 基因频率及连续性字符 程序组、 离散字符 程序组、和 画树 程序组的文档。最后,每个程序都有它自己的文档。对所有文档的引用都位于这个主文档里。你可以这样阅读它们:

  1. 1.阅读这个主文档

  2. 2.试着决定哪些程序是你感兴趣的。

  3. 3.阅读包含这些程序的程序组的文档

  4. 4.阅读针对那些单个程序的文档

另外还有一个关于使用PHYLIP 3.6 的优秀教程。它是芬兰的埃斯坡的科学计算中心的Jarno Tuimala 写的,是PDF 文档,在 这里 下载。

这些程序做什么用

这里有一个针对每个程序的简短描述。对于更详细的说明,你当然应该阅读那个程序自己的文档以及那个程序所在的程序组的文档。在这个列表中,每个程序的名字都是一个链接,会带你到达那个程序的文档。注意,在PHYLIP 软件包中没有叫PHYLIP 的程序。

Protpars

使用简约法从蛋白质序列(使用标准的单个字母的氨基酸代码作为输入)估计系统发生史,并且以一种改动过 的方法来进行处理:只对那些会改变氨基酸的核苷酸变化进行计数,假设隐性变异 (silent changes)更容易发生。

Dnapars

使用简约法从核酸序列估计系统发生史。允许使用完整的 国际生物化学联合会(IUB)的模糊代码,并且估计祖先的核苷酸状态 。缺口被当作第五种核苷酸状态。它还可以对颠换使用简约法进行计算 。可处理多叉 (multifurcations)、重构祖先的状态 、使用0/1 的字符权重 、和推论分支长度

Dnamove

从核酸序列交互式地构建系统发生史,通过简约法和兼容性法来评估,并且显示出重构过的祖先的基(ancestral bases)。这个可以用来手动寻找简约法或者兼容性法的估计值。

Dnapenny

通过使用分支定界法来针对核酸序列寻找全部的最简约的系统发生史。(取决于数据)这个程序对于多于10-11 个种族的情况可能不实用。

Dnacomp

使用兼容性标准从核酸序列估计出系统发生史,这个标准会搜索个数最多的能够让所有状态(核苷酸)在同一棵树上唯一地进化的位点。当位点各自之间的进化概率差别很大时,兼容性就尤其适用,但是我们不能预先知道哪些是不那么可靠的位点。

Dnainvar

在4种种族上,针对核酸序列,计算Lake的和Cavender的系统发生论不变量,它们将会测试不同的树的拓扑。这个程序还会将不同的核苷酸模式的出现频率列成表格。Lake的不变量方法被他自己称作“进化简约法”。

Dnaml

针对核苷酸序列,使用最大似然法估计系统发生史。所使用的模型允许4种核苷酸有不同的期望频率、不同的转换和颠换概率、对不同种类的位点有不同(预定义)的变化概率,还使用了一个隐式(Hidden)马尔可夫(Markov)概率模型,程序使用它来推断什么位点有什么概率。这也允许位点之间的概率的伽马分布(gamma-distribution)和伽马加不变量位点分布(gamma-plus-invariant sites distributions)。

Dnamlk

与Dnaml 相同,但是会假设有一个分子时钟。同时使用这2个程序就能够为分子时钟假设进行一个似然性测试。

Proml

使用最大似然法从蛋白质氨基酸序列估计系统发生史。可使用PAM 、JTT 或者PMB 模型, 还使用了一个 隐式(Hidden)马尔可夫(Markov)概率模型,程序使用它来推断什么位点有什么概率。这也允许位点之间的概率的伽马分布 (gamma-distribution)和伽马加不变量位点分布(gamma-plus-invariant sites distributions)。它还允许在已知的位点有着不同的改变概率

Promlk

与Proml 相同,但是 会假设有一个分子时钟。同时使用这 2个程序就能够为分子时钟假设进行一个似然性测试。

Dnadist

从核酸序列计算种族之间的4种不同的距离。这些距离可以用于那些距离矩阵程序 。这些距离是 Jukes-Cantor公式、一个基于Kimura的2-参数 (2- parameter 方法的距离、Dnaml 中使 用的F84 模型 、和LogDet 距离。这些距离还可以在不同的位点针对伽马分布的和伽马加不变量分布的变化概率作修正 。进化概率可能按照一个预定义的方式依据不同的位点而发生变化 ,同时也依据一个隐式马尔可夫模型而变化。这个程序还可以列出序列之间的相似度的一个表格

Protdist

为蛋白质序列计算一个距离度量值,使用基于Dayhoff PAM矩阵、JTT矩阵模型、PBM模型、Kimura的1983近似法、或者是一个基于基因代码的模型加上一个变化为另一种氨基酸的约束的最大似然性估计。 这些距离还可以在不同的位点针对伽马分布的和伽马加不变量分布的变化概率作修正 。进化概率可能按照一个预定义的方式依据不同的位点而发生变化 ,同时也依据一个隐式马尔可夫模型而变化。这个程序还可以列出序列之间的相似度的一个表格 这些距离可以用于那些距离矩阵程序

Restdist

从限制性位点数据或者限制性片断数据计算出来的距离。限制性位点选项也被用来为RAPD或者AFLP计算距离。

Restml

使用限制性位点数据(不是限制性片断而是单个位点的存在 /缺失 )通过最大似然性方法估计出来的系统发生史。它使用Jukes-Cantor 核苷酸变化对称模型 ,这个模型不允许转换和颠换有不同的概率 。这个程序 慢。

Seqboot

读入一个数据集,再使用自举重取样来从这个数据集产生多个数据集 。由于这个软件包的当前版本中大部分程序 都允许处理多个数据集,所以这个程序可以与一致树程序Consense 一起使用 ,与软件包中的大部分方法配合进行自举(或者半删除式剪切 delete-half-jackknife )分析。这个 程序还允许在字符之间的种族的排列的Archie/Faith 技术 。它还可以重写一个数据集 ,将它从PHYLIP 的交错 (Interleaved) 及序列化 (Sequential) 格式转换成一个新的初级版本的XML 序列比对格式 ,它个格式正在开发当中 ,并且在 Seqboot文档网页 中描述。

Fitch

“可添加的树模型”下的距离矩阵数据中估计系统发生史,根据这个模型 ,距离预期与种族之间的分支长度的和相等。使用Fitch-Margoliash 标准和某些相关的平方标准 ,或者是最小进化距离矩阵方法。不假设有一个进化时钟。这个程序对以下东西有用 :从分子序列 、限制性位点或者片断距离中计算出来的距离,DNA 杂交度量值,以及从基因频率中计算出来的基因距离。

Kitsch

“超度量(ultrametric)”模型下的距离矩阵数据中估计系统发生史,这个模型与可添加的树模型相同 ,唯一的不同就是假设有一个进化时钟。还可能使用Fitch-Margoliash 标准和其它的最小平方标准 ,或者是最小进化标准。 这个程序对以下东西有用 :从分子序列 、限制性位点或者片断距离中计算出来的距离,DNA 杂交度量值,以及从基因频率中计算出来的基因距离。

Neighbor

由Mary Kuhner 和John Yamato 做的对Saitou 和Nei的“邻居连接方法”和UPGMA(平均连接簇)方法的实现。邻居连接是一个距离矩阵方法 ,它在不假设有一个时钟的情况下产生一个无根树。UPGMA假设有一个时钟。分支长度没有使用最小平方标准进行优化,但是这些方法很快,因此可 以处理很大的数据集。

Contml

在某个模型下使用最大似然法从基因频率中估计系统发生史,在那个模型中 ,所有的分支 都是由于在没有新的变异的情况下发生的基因漂移而产生的。不假设有一个分子时钟。另一个分析这种数据 的方法就是计算Nei的基因距离 ,并且使用那些距离矩阵程序中的一个。这个程序还可以针对按照布朗运动模型进化的连续字符进行最大似然性分析 ,但是它假设那些基因 型按照相同的概率和不相关的方式进化,所以它不把通常的相关性基因型计算在内

Gendist

从基因频率数据计算3种不同的基因距离公式中的1种。这些公式是 Nei的基因距离、Cavalli-Sforza 弦测量 、和Reynolds 等人的基因距离。前者适合于那种新的变异在一个无限同 等位基因中性变异模型中出现的数据,后两者适合于那种没有变异只有单纯的基因漂移的模型 。距离 被写到一个文件里,所采用的格式适合于作为那些距离矩阵程序的输入。

Contrast

从一个树文件中读取一个树,并且读取一个有着连续性基因 型数据的数据集,再产生针对那些基因 型的独立比对,以用于任何的多变量的统计软件包 。还会为那些比对产生协方差 、回归和基因 型之间的相关性。当一个种群中有独立的显 型时,还可以为种间抽样变化而进行校正

Pars

多状态离散基因型简约法。最多允许8 个状态 (包括" ? ")。无法做Camin-Sokal 和Dollo 简约法计算 。可以处理多个分叉 、重构祖先的状态 、使用基因 型权重、以及推断分支长度。

Mix

使用某些针对有2个状态(0和1)的离散基因型数据的简约法来估计系统发生史。允许使用 Wagner 简约法 、Camin-Sokal 简约法或者这两者的任意混合。还重构祖先的状态并且允许基因 型的权重(不推断分支长度)。

Move

交互式地从有2个状态(0和1)的离散基因型数据中构造系统发生史。为那些系统发生史评估简约性和兼容性指标 ,并且显示出整棵树上的重构状态。这个程序可用来手动寻找简约性或者兼容性评估值。

Penny

为有2个状态的离散基因型数据寻找全部的最简约的系统发生史,针对Wagner 、Camin-Sokal 和混合的简约法指标使用分支定界法的精确搜索。对于多于10-11 个物种的数据 (取决于数据)可能不实用。

Dollop

针对有2个状态(0和1)的离散基因型数据使用Dollo 或者多态性简约法标准来估计系统发生史。 还重构祖先的状态并且允许基因 型的权重。Dollo简约法尤其适合于限制性位点数据;在将祖先的状态指定为未知的情况下它可能适用于限制性片断数据

Dolmove

交互式地针对有2个状态(0和1)的离散基因型数据使用Dollo 或者多态性简约法标准来估计系统发生史 为那些系统发生史评估简约性和兼容性指标 ,并且显示出整棵树上的重构状态。这个程序可用来手动寻找简约性或者兼容性评估值。

Dolpenny

为有2个状态的离散基因型数据寻找全部的最简约的系统发生史,针对Dollo或者多态 的简约法指标使用分支定界法的精确搜索。对于多于10-11 个物种的数据 (取决于数据)可能不实用。

Clique

针对有2个状态的离散基因型,寻找互相兼容的最大集团,以及它们所导向的系统发生史。最大集团(或者与最大的那个相差指定范围的大小的全部集团 )是使用一个非常快的分支定界搜索方法找到的。这个方法不允许有丢失的数据存在 。对那种情况 ,Pars 或者Mix 的 T (阈值 (Threshold) )选项可能是一个有用的替代品。兼容性方法在这种情况下尤其有用 :有些基因 型的质量很差,其它的质量很好,但是却不能预先知道哪些好、哪些差。

Factor

读入离散的多状态数据以及基因型状态树,再产生对应的有 2个状态(0和1)的数据集。由Christopher Meacham 编写 。这个程序以前用在Mix 中调整多状态的基因型,但是现在不必这么做了 ,因为有了PARS。

Drawgram

用多种用户可控制的格式来绘制有根的系统发生史、进化树 、环形树和物候图 。这个程序是交互式的 ,允许在PC 、Macintosh 或者X Windows 屏幕、或者在Tektronix 或Digital 图形终端上预览那棵树。最终的输出可以是一个为以下东西而格式化的文件 :那些绘图程序中的一个 、一个光线跟踪或者VRML 浏览器 、送往一个激光打印机 (例如Postscript 或者PCL 兼容打印机) 、图形屏幕或者终端 、笔式绘图器或者兼容图象的点阵打印机

Drawtree

与Drawgram 类似,但是绘制无根的系统发生史。

Treedist

计算树之间的分支分数(Branch Score)距离,它允许树的拓扑不相同 它还会使用分支长度。它还计算树之间的Robinson-Foulds 对称差异距离 ,这个距离也允许树的拓扑不相同 ,但是不使用分支长度。

Consense

使用多数规则一致树方法来计算一致树,它也使得你能轻松地找到严格一致树 。无法计算Adams 一致树 。树是以一种标准的嵌套式括号格式写在一个树文件里的 ,这个文件是由这个软件包中的很多树估计程序产生的 。这个程序可以用来在使用这个软件包中的很多方法进行自举分析时作为最后一步

Retree

读入一棵树(有必要的话会带有分支长度),让你重新指定树根、翻转某些分支 、改变物种名字和分支长度,再将结果输出。 可以用来在有根树和无根树之间转换,还可以将树输出到一个试验性的新的XML 树文件格式当中 ,这个格式还在开发当中 ,具体的描述在 Retree文档网页

运行这些程序

这一小节假设你已经拿到咯预编译版的PHYLIP(Windows Mac OS X 、或者 Linux版),或者你拿到咯源代码并且自己把它编译咯(Linux Unix Mac OS X Windows或者OpenVMS版本)。对于 那些有预编译版的机器来说 ,通常不需要你搞到一个编译器或者亲自编译那些程序 。这个小节说的是怎 么运行那些程序 。在本文档稍后的地方会说明怎么下载并且安装PHYLIP (假如你还没做那个就已经在阅读这个文档的话)。一般地 ,你只会在下载并且安装咯PHYLIP 之后再读这个文档。

说说输入文件

对于所有这些类型的机器,很重点的一点是提前准备好将要给这些程序的输入文件(典型地是数据文件)。可以在任何编辑器中准备它们 ,但是要注意将它们保存为 纯文本 格式 (“平文本 ASCII”),而不是用像微软的Word 那样的文字编辑器所写的格式 (在微软Word 中 ,确保数据编码是 "US ASCII" ,因为使用任何的 Unicode 编码 都可能引起问题 )。你要自己阅读那些描述在程序中所使用的文件的格式的PHYLIP 文档 。在本文档的下一节里有一个部分的描述 。还可以通过运行一个以PHYLIP 格式输出的程序来获取这些输入文件 (这些程序中的某一些本身就能输出 ,还有别人写的一些程序 ,例如序列比对程序 ClustalW 和序列格式转换程序 Readseq)。在PHYLIP 里面 没有 任何程序提供输入文件的编辑器( 指望着启动其中某个程序再点一下鼠标就能创建一个数据文件)。

当这些程序开始运行时,它们首先寻找特定文件名 (例如 infile treefile intree或者fontfile 的输入文件。不同程序会寻找不同的文件名 ,你应当阅读对应程序的文档来搞清楚它们要用什么文件名 。如果你准备好咯拥有那些名字的文件 ,那么程序就会使用它们,不再向你询问文件名。如果它们没有找到拥有那些文件名的文件 ,那么程序就会告诉你说它们找不到某个名字的文件,并且要求 你输入文件名。例如 ,如果DnaML 寻找 infile 这个文件却没有找到,那么它会输出这条消息:

dnaml: can't find input file "infile"
Please enter a new file name>

这并不是说出现咯某个错误 你所需要做的就是输入文件名

程序在与自身相同的文件夹里寻找输入文件(文件夹跟 “目录”是同一个东西 。在WindowsMac OS XLinux或者Unix里,当程序向你询问文件名时 ,你可以将到达那个文件的路径作为文件名的一部分输入(比如 ,如果那个文件是在当前文件夹的上级文件夹里,那么你可以输入 ../myfile.dna 作为文件名 )。如果你不知道什么是 “文件夹”,或者什么叫“上级”,那么你就是一个只知道点鼠标并且希望会导致一堆文件名会神奇般地出现的新人类 (典型地,这样的人根本不知道文件在他她的系统中的什么地方,并且把他她们的文件系统弄得很乱 )如果是这样的话,你应该找个人跟你解释一下什么叫文件夹。

在一个Unix 或者Linux 系统上运行这些程序

以小写字符输入程序的名字(比如 dnaml )。要在程序正在运行的时候终结它 ,就按Control-C(先按住 Ctrl 键,再按 C )。

在某些系统中,你可能需要在程序名之前输入 ./ ,那样的话,上面的例子就是./dnaml。这个主要是因 为有些时候用户的PATH 中不包含当前目录 ,这通常是出于安全性考虑。

在后台运行或者通过一个脚本文件来控制这些程序的运行

在运行这些程序时,你可能会想要让它们在后台运行,这样你就可能去做别的东西咯 。在那些有窗口环 境的系统中 ,可以将它们放到单独的窗口中去执行,而像Unix 和Linux 的 nice 命令那样的命令可以用来让它们拥有更低的优先级 ,这样它们就不会干扰其它窗口中的交互式的程序咯。这一部分的说明会假设你使用一个Windows 系统或者一个Unix /Linux 系统。假如某些命令只在一个系统上有效而在另 一个系统上无效,那么我会提示。Mac OS X实际上是Unix(有木有!有木有!),所以你可以按照Unix 系统的方法去操作,必要的时候可以使用一个终端窗口。

如果没有窗口环境的话,那么在Unix 或者Linux 系统中,你可以在运行程序的时候在后面跟上一个 & 符号,这样就可以将这个任务(job)放到后台去运行咯。你需要将对那个交互式菜单进行响应的全部内容放到一个文件里 ,并且告诉那个后台任务要从那个文件里面读取它的输入。

在Windows 系统中没有&nice 命令,但是输入输出的重定向和脚本文件在命令提示符(Command)窗口里能够很好地工作。一个脚本文件可以通过单击它的图标或者在一个命令提示符窗口中输入它的名字的方式来调用 。一个脚本文件必须以 .bat 作为扩展名 ,比如 foofile.bat 。你可以在一个命令提示符窗口中输入批处理文件的文件名 (比如 foofile )来运行它,不用带 .bat

下面是一个对于Windows、Linux 或者在 Mac OS X 上使用终端(Terminal)窗口的例子:假设你想在后台运行Dnapars sequences.dat 文件中取得输入数据 将交互式的输出写入到 screenout 文件中 使用 input 文件来存储交互式的输入内容 input 文件只需要包含 2行:

sequences.dat

Y

这些就是你在以交互式的方式运行程序的时候会输入的内容,第一行是当程序找不到 infile 文件时对它的文件名请求的响应,第二行是对菜单进行响应。

要将程序放在后台运行的话,在Unix 或者Linux 系统中只需要简单地执行以下命令:

dnapars < input > screenout &

这样的话,就会启动这个程序,并且将 input 文件中的内容当作输入响应,将交互式的输出写入到 screenout 文件中 。这次运行也会创建常规的输出文件和树文件 (记住 ,如果你在这个程序正在后台运行的时候 ,在同一个目录中启动任何其它的 PHYLIP 程序,那么可能会导致一个程序的输出覆盖咯另一个程序的输出 )。

如果你想赋予这个程序比较低的优先级 便让它不要干扰其它工作,并且在你的Unix 或者Linux 系统里面有伯克利(Berkeley)Unix 类型的任务控制工具的话(通常会有的),那么你可以使用 nice 命令:

nice +10 dnapars < input > screenout &

这条命令会降低当前运行的这个程序的优先级。如果还想计时 ,并且将计时信息放到 screenout 文件 的末尾的话,你可以这样做:

nice +10 ( time dnapars < input ) >& screenout &

这条命令,我不解释。

在Unix 或者Linux 系统上,你还可以试试把交互式的输出内容斗转星移到黑洞文件 /dev/null ,这 样就不用管它咯 (但是那样的话你也没法去看它以 便搞清楚 到底是哪里出咯问题)。 如果你发现不能创建太大的文件,那么你可以试试关掉所启动的程序的某些选项。

如果你要一次性运行多个程序,比如说 ,要使用 Seqboot 、Dnapars(比如说哈) 和Consense 来做一个自举分析 ,你可以用个编辑器来创建一个包含以下命令的脚本:

seqboot < input1 > screenout

mv outfile infile

dnapars < input2 >> screenout

mv outtree intree

consense < input3 >> screenout

上面这个是Unix 或者Linux 版本--在Windows 版本里,对文件的重命名和将输出附加到 screenout 文件中去的操作是用另外的方法来做的

在Unix 或者Linux 系统中,脚本文件可以起像 foofile 这样的名字;在系统中,脚本文件的名字会是像 foofile.bat 这样的。

在Unix 或者Linux 系统上,必须使用 chmod +x foofile 命令再加上 rehash 命令来给这个脚本赋予可执行权限。 foofile 所控制的任务可在Unix 或者Linux 系统上使用以下命令来在后台运行

foofile &

在Windows 系统上,可单击这个脚本文件的图标以运行它。它的图标上会有一个小小的齿轮符号。

注意,你还必须在单独的文件 input1 、input2 input3 中为Seqboot(包括随机数种子) 、Dnapars 和Consense 准备好交互式的输入命令。还要注意 ,当 PHYLIP 中的程序在试图打开一个新的输出文件 (比如 outfile outtree 或者 plotfile )时,如果发现那个文件已经存在咯,那么它们会向你询问:覆盖它 、写到另一个文件里、将输出内容附加到那个文件的末尾、还是什么都不写干脆退出?这就意味着 ,在写脚本文件时,要注意搞清楚会不会有这种提示冒出来。你必须预先知道那个文件是不是存在 。你可能会在脚本文件中加上一些语句 来测试输出文件是不是已经存在 ,如果存在的话就删除它 ,比如说 ,在Unix 、Linux 或者Mac OS X 系统上可写上这样的指令:

if test -e fubarfile

then

rm fubarfile

fi

你甚至还可以加上一条指令来创建一个拥有那个名字的目录,这样你就可以确信它真的存在 !无论怎样,你 都会知道是否要在你的响应文件中对覆盖已有输出文件的问题进行回答咯

准备输入文件

PHYLIP 中的程序所使用的输入文件必须单独准备-在PHYLIP 中没有数据编辑器。你可以自己使用一个 文字处理器 (或者文本编辑器)来准备输入文件,或者可以使用一个产生PHYLIP 格式的输出的程序。

像 ClustalW 这样的序列比对程序一般都提供咯输出PHYLIP 格式的文件的选项,而某些其它的系统发生推论程序 ,例如MacClade 和TreeView,都能生成PHYLIP 格式的文件。

注意,一定要确保那些输入文件是“纯文本”或者"ASCII"格式的。这就意味着它们只包含可打印的ASCII/ISO 字符,不包含任何不可打印的字符。很多文字处理器 ,比如说微软的Word,都会以一种包含不可打印字符的格式来保存文件,除非是你叫它们不要这么做 。在微软的Word 及类似的字处理器中 ,如果是你第一次编辑某个文件,那么当你执行文件菜单中的保存命令时 ,程序实际上会执行一个另存为命令 ,询问你要以什么格式来保存那个文件。

  • •.如果你使用的是微软的Word,那么就选择纯文本 Plain Text )。将会弹出一个对话框 (或者,在Mac OS X 版本的Word 中,会出现一个选项( Option )按钮 ,你可以在那里选择 US-ASCII 选项。那些以 Western European (西欧) 开头的选项应当也没问题 。而其它的编码就不见得有效咯

  • •.如果你使用的是写字板(WordPad),那么就选择文本文档( Text Document (*.txt) 不要 选择 Unicode 文本文档 Unicode Text Document )。

  • •.如果你使用的是记事本(Notepad),那么就选择文本文档 Text Document )再选择 ANSI 编码,不要选择 Unicode 或者 UTF8 编码。

下一次你编辑这个文件时,使用保存命令,程序应当使用那些现有的设置而不再询问你 。如果本软件包中的程序无法读取你搞出来的输入文件 ,那么你就检查一下你是否把这些选项搞正确咯 。执行文件菜单中的另存为命令 ,再做出正确的设置。

文本编辑器,比如Unix 和Linux 系统上的vi 和emacs 编辑器、Mac OS 上的 SimpleText 、或者是 pine 邮件程序自带的编辑器 pico ,都会将输出文件保存为纯文本格式,所以不会引起问题。

输入文件的格式在下面说明,另外你还应当阅读与你将要使用的数据及程序相关的PHYLIP 文档,因为在那里能找到更详细的说明。

输入和输出文件

对于大部分PHYLIP 程序来说,都是这样的 :信息从一堆输入文件里来 ,到一堆输出文件中去 (下面这个图是原作者用纯文本画的,需要用等宽字体来看)

---- ---------------

| |

infile ---------> | |

| |

intree ---------> | | -----------> outfile

| |

weights --------> | program | -----------> outtree

| |

categories -----> | | -----------> plotfile

| |

fontfile -------> | |

| |

-------------------

这些程序通过显示出一个菜单来与用户交互。除咯用户在菜单中进行的选择以外,它们从文件中读取它们其它的所有输入信息 。这些文件都有默认的名字。程序会尝试着找到一个叫默认名字的文件-如果没找到,它会让用户提供一个文件名。输入数据,例如DNA 序列的默认文件名是 infile 。如果用户提供的是一个树 ,那么默认文件名是 intree 。基因型的权重是在文件 weights ,画树的程序需要数字化的字体 ,那是放在文件 fontfile 中(这些都是默认名字)。

例如,如果Dnaml 需要文件infile 却没找到,那么它会输出这条消息

dnaml: can't find input file "infile"
Please enter a new file name>

这很简单,就是要你输入那个输入文件的名字。

数据文件的格式

我一直试图保持一个固定的输入和输出文件格式。对于简约法、兼容性法和最大似然法的程序,不包括距离向量程序,最简单的输入数据是这样的

6 13

Archaeopt CGATGCTTAC CGC

HesperorniCGTTACTCGT TGT

BaluchitheTAATGTTAAT TGT

B. virginiTAATGTTCGT TGT

BrontosaurCAAAACCCAT CAT

B.subtilisGGCAGCCAAT CAC

输入文件的第一行中写的是物种和字符(在这个例子中是位点)的个数。这 2个字段是以随意格式写的 ,以空格隔开。接下来是每个物种的信息 ,开头部分是 10个字符的物种名字(其中可以包含空格和标点符号),再接下来就是那个物种的字符串咯 。名字必须与那个物种的数据中的首字符位于同一行 (对于树来说,我会使用"物种"这个术语,因为在某些情况下 ,这些东西会是种群或者单个的基因序列).

名字应当包含10个字符,如果长度不够的话 ,就用空格补满。除咯以下字符之外,其它的可打印ASCII/ISO 字符都允许出现在名字中 :括号 (" ( "和" ) ")、方括号("["和"]")、冒号(":")、分号(";")和逗号(",")。如果你忘记咯用空格将名字补充到 10个字符的长度,那么程序就会因为数据文件的内容没有对齐而出错,最后向你报告一个错误。

注意,在物种名字中,制表符只算做一个字符。如果包含咯制表符的话 ,可能会引起麻烦。可能你看起来那个名字已经有 10个字符咯,但是在程序看来却没有10个字符。如果你使用文字处理器 ,例如Word,来制作数据文件,那么严重建议你检查一下以确保其中没有制表符 。你可以这样检查:在名字中 使用方向键来移动光标,看看是不是会突然向前移动 2个或者更多的字符的距离。最好是用空格来填充 名字,而不是用制表符

在离散字符程序、DNA 序列程序和蛋白质序列程序中,每个字符都是一个单个的字母或者数字,有些时 候是由空格分隔开的 。在连续性字符程序中 ,它们是带小数点的实数,中间用空格分隔:

Latimeria 2.03 3.457 100.2 0.0 -3.7

对于那些包含咯超过一行的数据的处理方法,分子序列程序和其它程序是不同的 。分子序列程序可以接受 “对齐”或者“交错”格式的数据,在后一种格式中 ,我们首先有一些行给出每个序列的第一部分,接下来又有一些行给出每个序列的下一部分,如此下去。所以 ,序列看起来是这样的:

6 39

Archaeopt CGATGCTTAC CGCCGATGCT

HesperorniCGTTACTCGT TGTCGTTACT

BaluchitheTAATGTTAAT TGTTAATGTT

B. virginiTAATGTTCGT TGTTAATGTT

BrontosaurCAAAACCCAT CATCAAAACC

B.subtilisGGCAGCCAAT CACGGCAGCC

TACCGCCGAT GCTTACCGC

CGTTGTCGTT ACTCGTTGT

AATTGTTAAT GTTAATTGT

CGTTGTTAAT GTTCGTTGT

CATCATCAAA ACCCATCAT

AATCACGGCA GCCAATCAC

注意,在这些序列中,每隔10个位点就有一个空格,这样就更容易读取:任意个空格都可以 。那个用来分隔 2组文字行(包含1-20 位点的那些行和包含21-39 位点的那些行)的空行可以有也可以没有。有一点很重要 ,每个组中 ,所有物种的位点个数都要是相同的(也就是说 ,不可能出现这样的情况:第一个物种的那一行有 20 个碱基 ,第二个物种的那一行有 21 个碱基,而程序竟然正确地运行咯 )。

或者,可以在菜单中选择另一个选项,以让程序按照 “串行化”格式来解释数据,首先是第一个物种的全部数据,接下来是第二个物种的全部字符,如此下去。这也是那些离散字符程序和 基因频率及数量字符程序 读取数据的方式。它们不接受交错格式。

在串行化格式中,字符数据可以延伸到新的行中 (除非是在一个物种名字的中间 ,或者,在连续字符和距离矩阵程序中 ,不能在一个实数的中间换行 )。所以可以写上这样的内容:

Archaeopt 001100
1101

甚至是这样的

Archaeopt
0011001101

但是,要注意,物种名字还是必须整整 10个字符的长度:在上面的例子中 ,"t"的后面必须有一个空格。在任何情况下 ,都可以向字符值中添加空格,所以

Archaeopt 0011001101 0111011100

是允许的

注意,你可以在Seqboot 中的J 菜单项里使用Rewrite(重写)选项来将分子序列数据在交错格式和串行化格式中转换。

如果你的输入文件中的格式有错误,那些程序有些时候能够探测到数据中有非法字符或者非法数值出现,那样就会输出像BAD CHARACTER STATE: (不可接受的字符状态 这样的错误消息,通常会输出那个错误的值,有些时候还会输出错误所在的物种和字符的序号。很快,程序会终止。导致错误的原因之一就是文件中在前面的某个地方缺少咯东西,或者是多咯某些东西 ,结果导致对文件的读取发生错乱。然后程序就读取咯那些自己意想不到的东西,并且认为它们是错误的 。所以 ,如果你看到咯这条错误信息,那么你可能需要看一下前面所发生的问题,它们可能就是导致程序发生错误的原因。

在下面说明咯某些选项,但是你还是应当读一下那些程序组和单个程序的文档。

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands