本文严禁在未征得作者同意的情况下进行转载
原文链接:HMMER 官方文档学习笔记系列——HMMER 简介及安装
“MMER 官方文档学习笔记系列”是本人在阅读 HMMER 官方文档来学习 HMMER 使用方法的过程中整理的学习笔记类教程。该系列主要以 HMMER 官方文档为参考,因此包含很多对原文档的直接翻译和直接摘录。旨在通过转述官方文档说明,帮助需要使用该软件的人更快的上手使用。但本人并非生信专业出身,计算机相关知识也仅处于起步水平,业余时间也比较有限。因此在对原文档的理解、转译和论述会存在很多错误,在此欢迎有兴趣的小伙伴对次批评指正,一起探讨学习。官方文档下载地址:HMMER 官方文档。
这一部分将对安装过程做简要概括,如果嫌弃本文章过长而又拥有比较扎实的 Linux 系统使用基础的话,可以选择仅看此处的安装概要;如果 Linux 系统相关使用技能比较薄弱的话,建议跳过该部分,从第 3 小节开始阅读全文。
$ sudo brew install hmmer # OS/X, HomeBrew $ sudo port install hmmer # OS/X, MacPorts $ sudo apt install hmmer # Linux (Ubuntu, Debian...) $ sudo dnf install hmmer # Linux (Fedora) $ sudo yum install hmmer # Linux (older Fedora) $ sudo conda install -c biocore hmmer # Anaconda
$ wget http://eddylab.org/software/hmmer/hmmer-3.3.2.tar.gz $ tar xf hmmer-3.3.2.tar.gz $ cd hmmer-3.3.2 $ ./configure --prefix=自定义目录 $ make $ make install $ cd easel #最后这两行代码为可选步骤,执行的话会安装一套被成为迷你应用(miniapps)的额外小工具 $ make install #最后这两行代码为可选步骤,执行的话会安装一套被成为迷你应用(miniapps)的额外小工具安装后,修改
/etc/profile
文件,将软件添加到 PATH 环境变量中,以方便调用:$ sudo cp /etc/profile /etc/profile.bubackup $ sudo vim /etc/profile #在文档末尾加入: export PATH=自定义目录/bin:$PATH export MANPATH=自定义目录/share/man:$MANPATH
HMMER是一个软件包,提供了一类被称为轮廓隐马尔可夫模型(此处中文名为直译,英文原称为 profile hidden Markov models, profile HMMs 或 profiles)的工具,这些工具用于制作蛋白质和DNA序列域家族概率模型,以及可以使用这些工具来注释新的序列。不同于 Blast 等工具,HMMER 使用的是集成算法(ensemble algorithms),而不是最佳对齐 (optimal alignment)。进一步来说,HMMER 使用的是基于隐马尔可夫模型的一种算法,但具体的算法原理过于理论,本人目前难以深入理解,因此不过多论述。
轮廓隐马尔可夫模型的最初是通过计算密集型的算法来实现的,包括之前的 HMMER1(1995)和 HMMER2(1998)这两个版本,但最新的 HMMER3 版本通常比 BLASTP 或 FASTA 搜索的更快,即使它使用的模型比二者更复杂。HMMER 可用于进行灵敏的同源搜索、蛋白结构域的自动注释、深度多重比较数据集的管理等领域。此外 HMMER 3 不仅仅适用于多个比对,也适用于单序列比较。两两序列比较只是轮廓隐马尔可夫模型的一个特例。HMMER 可以使用 BLOSUM 替换矩阵来参数化仅从一个序列构建的序列谱隐马尔可夫模型。HMMER3 包含两个用于使用单个查询序列搜索蛋白质数据库的程序:phmmer 和 jackhmmer。研究人员相信 phmmer 在很多方面都优于 BLASTP,而 jackhmmer 在很多方面也优于 PSI-BLAST。
当然,任何方法都不可能是完美无缺的。HMMER 的算法没有考虑不同个体对象间的更高一级的相互作用,因此不适合应用于存在相互作用的模型分析(如:碱基和碱基之间的相互作用,会使一些 RNA 形成特殊结构,对于这些结构 RNA(此处为直译,英文原称:structural RNAs)的分析,HMMER 工具便不再适用了)。此外,HMMER 的算法也缺乏系统发育的相关模型,因此不适合用于进化树的构建。
关于命令输入的一些说明:文中每条命令的前面都会带有 $
或 #
,这两个符号不是命令的组成部分,而是类似于身份标识(具体专业描述不知道是什么),比如我们打开终端,默认会有用户名@localhost:~$
的前缀,而最后的 $
符号便是提示使用者身份的标识。在下面所有的命令中,也采用 $
或 #
进行身份标识,其中代码前带有 $
符号的命令表示以普通用户身份执行命令代码;前标识为 #
的命令表示在超级管理员(root)身份下运行命令。而代码中其他地方带有的 #
多数情况下表示对命令的解释说明,也就是注释命令,同样也不属于命令的组成部分。
简言之,,每一条命令前的 $
或 #
,以及其他位置的 #
和这个 #
后面紧跟的同一行内容都是类似解释说明一类的东西,不属于命令本身,复制粘贴的话请忽略。
$ sudo apt install hmmer在 Debian 系统中的安装命令于此类似,但默认情况下,要先切换为管理员用户,再执行安装命令,而不能直接通过
sudo
命令安装:$ su - # apt install hmmer
第一行
su -
命令即代表切换到超级管理员模式,并且切换后位于相应管理员用户的用户目录,即/root
目录,如果要在当前目录切换使用超级管理员,需要输入su root
进行切换。安装软件则通常使用su -
命令切换。
$ sudo dnf install hmmer较老版本的 Fedora 系统使用如下命令安装:
$ sudo yum install hmmer
由于本人目前仅在 openSUSE 系统上尝试安装成功,因此以上操作本人没有进行确认,仅将官方说明摘录于此。
$ sudo conda install -c biocore hmmer
由于本人目前仅在 openSUSE 系统上尝试安装成功,因此以上操作本人没有进行确认,仅将官方说明摘录于此。
HMMER 软件的源码编译安装十分简单,而且在多种 Linux 系统下通用,因此个人也比较推荐通过源码安装。而且通过源码安装,可以同时方便的同时安装 HMMER 2 版本和 HMMER 3 版本,这样就可以使用一些 HMMER 3 不具有的,而 HMMER 2 具有的功能。源码安装具体步骤如下:
下载源码安装压缩包
首先,通过 weget 命
令行在 eddylab.org/software/hmmer/hmmer-3.3.2.tar.gz
路径获得,随后解压缩并通过 cd
命令进入解压后的 hmmer-3.3.2 目录:
$ wget http://eddylab.org/software/hmmer/hmmer-3.3.2.tar.gz $ tar xf hmmer-3.3.2.tar.gz $ cd hmmer-3.3.2
也可以去软件官网下载
.tar.gz
格式的安装包,然后解压缩并进入 解压目录。
安装前配置
然后,通过 ./configure
命令对 HMMER 的安装进行配置。命令格式如下:
$ ./configure 参数
这里的参数是可选项,也就是可以选择添加参数,也可以选择不添加。参数之间,以及参数和其他命令之间要有空格分开。参数的话主要有 3 类:
第一类类参数可以自定义安装目录。
如--prefix
参数可以自定义总的程序安装目录,如:
$ ./configure --prefix=/your/install/path
如上所示,如果自定义路径为 /your/install/path
,那么程序和程序操作说明则会分别安装在 /your/install/path/bin
和 /your/install/path/share/man/man1/
目录下。如果不设置该参数,程序和操作说明则会分别安装在默认的 /usr/local/bin
和 /usr/local/share/man/man1/
目录。默认目录是按照 GNU 编码标准进行分布的,其他的目录也可以通过不同的参数修改,具体如下:
变量(Variable) | 默认安装路径 | ./configure 参数 |
---|---|---|
prefix | /usr/local | --prefix |
exec_prefix | prefix | --exec_prefix |
bindir | exec_prefix/bi | --bindir |
datarootdir | prefix/share | --datarootdir |
mandir | datarootdir/man | --mandir |
man1dir | mandir/man1 | --man1dir |
不过个人不建议进行复杂的目录修改,仅仅使用 --prefix
自定义安装目录就够了。
第二类参数可以设置是否开启多线程模式。默认情况安装的软件是开启多线程的,如果想禁用多线程,可添加参数 –disable-threads
,开启多线程后,在安装后的软件使用中,线程数默认是 2,在每次使用时,可以通过添加参数 –cpu <n>
或 HMMER_NCPU
环境变量来设置线程数 n。(这里我没有完全搞懂,不过像我一样似懂非懂或者不懂的话可以不使用该参数)
第三类参数可以控制 MPI(Message Passing Interface,消息传递接口)的开启或关闭。除了 nhmmer 和 nhmmscan 两个程序外,其他的程序都支持 MPI(Message Passing Interface,消息传递接口),但该服务默认是关闭的,如需启用,除了需要安装相应的 MPI 库外,还需要在执行 ./configure
命令时添加 –enable-mpi
参数。在使用 MPI 并行化( MPI parallelization)时,每次添加 –mpi
参数可以开启主/辅并行模式。hmmbuild 的 MPI 实现可以扩展到数百个处理器,hmmsearch 也可以进行类似扩展。其他搜索程序(hmmscan、phmmer 和 jackhmmer)的扩展性非常差,最多不应该在数十个处理器上使用。
进行编译
执行完上述 ./configure
命令后,等待终端执行完毕后,接着就可以执行 make
命令进行编译:
$ make
同样,make
命令也可以选择带参数运行,如:通过添加 check
参数,会在编译的时候同时运行检测程序:
$ make check
make
命令可以带的参数归纳如下:
all
:建造完整的程序。就像单独使用 make 命令一样;
check
: 在 HMMER 和 Easel 库中运行自动测试检查模块;
pdf
:编译该软件的用户指南;
install
:安装程序和相应的程序说明文档;
uninstall
:卸载 install 命令参数安装的程序和相应的程序说明文档;
clean
:删除编译(来自于 make 命令)生成的所有文件,但保留配置文件(由 ./configure 命令生成的文件);
distclean
:删除所有编译(来自于 make 命令)生成的所有文件,和配置文件(由 ./configure 命令生成的文件)。
默认情况下,make 使用从 git 源代码中"偷来"的漂亮包装来隐藏编译过程的实际情况。如果希望看到命令行在其编译时的真实丑陋的外观,请传递一个 V=1 参数(V表示“verbose”)来实现(来自官方文档作者的幽默自述):
$ make V=1
HMMER 的 make install 支持分阶段安装,支持打包程序用于指定 buildroot 的传统 DESTDIR 变量(这个没有用过,所以具体的意思也没有很明白,不过一般情况下,为了使用方便,还是推荐不使用此参数的完整安装):
$ make DESTDIR=/rpm/tmp/buildroot install
安装 HMMER 程序和程序说明文档
执行上述编译后, 便会在解压目录的 src
文件夹得到二进制程序文件,可以直接运行这些文件来运行程序,但是通常为了便于使用,会通过以下命令进行安装,以将应用程序和程序的说明文档安装在我们上面通过 ./configure
命令自定义的文件夹下:
$ make install`
安装时如果选择了自定义路径,此时最好将自定义目录加入 PATH 环境变量。
如果通过 --prefix=
重新自定义了安装路径,为了以后在终端下的任何文件路径下都快可以直接调用,需要将自定义的 自定义目录/bin
添加到 PATH 路径中,将 自定义目录/share/man
添加到 MANPATH 路径中,以方便在命令行使用软件和调出帮助文档。比如上面的例子我们的自定义目录为/your/install/path
,则可以在终端执行下面的命令来完成该操作:
$ export PATH=/your/install/path/bin:$PATH $ export MANPATH=/your/install/path/share/man:$MANPATH
但是用种方法添加之后,仅仅对当前用户生效,而且重启电脑后需要重新配置。若想对全部用户生效,需要修改 /etc/profile
文件(下面第一行是复制命令,以实现在操作前对该文件进行备份;vim 是一种比较方便的命令行文本编辑器,虽然好用,但是和我们平常的文本编辑器的使用有差异,在执行下面命令之前,最好确保自己已经会一些 vim 编辑器的基本操作):
$ sudo cp /etc/profile /etc/profile.bubackup $ sudo vim /etc/profile #在文档末尾加入: export PATH=/your/install/path/bin:$PATH export MANPATH=/your/install/path/share/man:$MANPATH
如果不进行此设置,每次使用需要使用 cd
命令切换到自定义文件夹下的 bin
目录调用相关程序。到这里,HMMER 程序就基本安装好了。
可选步骤:安装额外的小工具
另外,还可以选择安装一套被成为迷你应用(miniapps)的额外小工具,安装时先通过 cd
进入解压目录下的 easel
文件夹,然后执行 make install
命令安装 miniapps 及其使用说明:
$ cd easel $ make install
源码编译常见错误
make
版本不支持自定义目录的构建,可尝试默认目录安装,或尝试安装 GNU make;GREP
设置为可工作的路径:$ ./configure GREP=/usr/xpg4/bin/grep
$ ./configure --disable-threads
常见错误这一部分,由于本人安装过程比较顺利,没有遇到什么问题,因此也只是将官方文档提到的常见错误摘录出来。
同时安装 HMMER2 和 HMMER3
虽然 HMMER3 绝大部分功能都优于 HMMER2,但是 HMMER2 是可以进行全局和全局比对(global and glocal alignment),而 HMMER3 仅支持局部比对(local alignment),有时候,全局比对也是我们需要的,因此安装两个版本可以拓展适用范围(这里提到的全局比对和局部比对涉及到算法问题,本人水平还没涉及此高度,因此也没有完全理解,为了避免个人翻译错误,将原英文名称标注在括号里)。作者表示,在未来的 HMMER4 中,将同时支持两种比对方式。但是 HMMER2 和 HMMER3 由于存在相同的程序名,因此直接安装会出现程序名冲突,为了解决冲突,作者给了两个建议方案:
/home/my/install/path/hmmer2
,自定义安装 HMMER 3 的目录为 /home/my/install/path/HMMER3
,则可以先将 HMMER 3 的相应目录按照上面的方法加入 PATH 环境变量,然后通过 cd
命令先进入 HMMER 2 的安装目录,然后通过 cp
命令复制并重命名到 HMMER 3 的安装目录:$ cd /home/my/install/path/hmmer2/bin $ cp hmmalign /home/my/install/path/HMMER3/bin/h2-hmmalign $ cp hmmconvert /home/my/install/path/HMMER3/bin/h2-hmmconvert $ cp …… ……但是一个一个的复制比较麻烦,所以可以优化一下方案:首先通过
cd
先进入 HMMER 2 的安装目录,然后批量重命名,接着移动文件到 HMMER 3 目录。这时重命名和移动命令可以如下(批量重命名的命令在第二行代码和第五行代码,这两行代码都是在当前目录下的所有文件名之前添加“v2-”的前缀,另外注意这两行代码中的单引号不是普通单引号,而是反引号):$ cd /home/ligareen/Documents/software/hmmer/hmmer2/bin/ $ for i in `ls`; do mv -f $i `echo "v2-"$i`; done $ mv * /home/ligareen/Documents/software/hmmer/bin/ $ cd /home/ligareen/Documents/software/hmmer/hummer2/man/man1/ $ for i in `ls`; do mv -f $i `echo "v2-"$i`; done $ mv * /home/ligareen/Documents/software/hmmer/share/man/man1/
此处的批量重命名操作参考:Linux 批量修改文件名(前缀或后缀)_@羲凡—只为更好的活着-CSDN博客_linux批量修改文件名前缀。
安装后简单调试
解压目录下的 tutorial
文件夹下,是一些示例文件,在其中,有一个 Stockholm 格式(后缀为 .sto
)的序列比对文件,可以通过 hmmbuild 命令从这一份序列比对文件中构建一个轮廓隐马尔可夫模型(profile):
$ cd tutorial $ hmmbuild globins4.hmm globins4.sto
上述命令时在已经进入了解压目录后进行的操作。
正常的话会有以下输出:
hmmsearch 命令可以针对数据库,基于已有的轮廓隐马尔可夫模型库进行轮廓隐马尔可夫模型的搜索。在解压目录下的 tutorial/globins45.fa
文件是包含45个珠蛋白序列的一个小型 FASTA 文件,利用上一条产生的轮廓隐马尔可夫模型(profile),可以通过以下命令对该文件进行序列谱隐马尔可夫模型的搜索:
$ hmmsearch globins4.hmm globins45.fa
这将直接显示一个搜索结果的输出,以表格的形式显示它们的对齐信息(输出结果过长。下图仅截取开头部分):
说明:由于本人没有使用过 Mac 系统,因此仅将官方文档中描述的安装方法摘录展示于此。
$ brew install hmmer
$ port install hmmer
win
+R
快捷键调出“运行”窗口后输入“cmd”后按回车键。)cd
命令进入解压文件夹使用,如通过 hmmpress,exe -h
命令查看 hmmpress,exe
程序的帮助信息(下列代码中,“>”号不是命令的组成部分):> cd C:\Users\username\Downloads\hmmer-3.0-windows > hmmpress,exe -h
第一期的 HMMER 简介和安装到此就结束了,后面几期会介绍 HMMER 的使用方法。希望大家都能从我的文章中有所收获~
[1] HMMER 官网
[2] HMMER 官方文档
[3] linux增加自定义path和manpath_flora_yao的博客-CSDN博客
[4] inux 批量修改文件名(前缀或后缀)_@羲凡—只为更好的活着-CSDN博客_linux批量修改文件名前缀
[5] HMMer在Windows环境下的安装_我就叫陌了这还能重名的博客-CSDN博客_hmmer安装