Overview
在对氨基酸序列进行机器学习建模时,需要对氨基酸序列做特征提取,越丰富的特征通常可以带来越精准的预测结果,因此可以由原始的氨基酸序列预测出蛋白质的2级结构,水溶性等,丰富特征提取时的特征。
PSIPRED
作为一个常用的蛋白质二级结构预测工具,常见于各种蛋白质序列的预测论文中,这里主要记录一下PSIPRED
的安装和使用。
其实
PSIPRED
官方的README文档已经很清楚了,按步骤可以很顺利的安装,只是因为PSIPRED
本身运行需要一些额外的软件安装,因此在这里一并记录下来。
1.下载PSIPRED
通过http://bioinfadmin.cs.ucl.ac.uk/downloads/psipred/,可以找到PSIPRED
的下载页面,最新的版本为3.5,下载psipred3.5.tar.gz
即可。如果有特别的需要,可以去old
文件夹里下载对应的版本。
2.安装PSIPRED
下载的psipred3.5.tar.gz
是一个源代码包,因此需要自己编译安装一下,步骤如下:
解压压缩文件,得到
psipred
文件夹。tar -xvzf psipred3.5.tar.gz
进入
psipred
文件夹,代码和编译代码的脚本在其中的src
文件夹中,继续进入src
文件夹cd psipred cd src
使用
make
命令编译源代码make make install
编译通过之后,会生成该软件的可执行程序,在
psipred/bin
中,查看这个文件夹,就会发现其中的可执行文件psipred
。同时,在psipred
目录下,还得到了一个运行psipred
的脚本文件runpsipred
,这个脚本文件设置了运行psipred
的一些默认参数,使用runpsipred
可以很方便地运行psipred
,命令如下:./runpsipred example.fasta
这里的example.fasta就是需要预测的蛋白质序列文件,确保你的电脑安装了tcsh解释器,因为
runpsipred
是一个tcsh脚本
,mac下已经默认安装,ubuntu下使用:sudo apt-get install tcsh
就可以安装
tcsh
解释器。如果你想先测试下
psipred
,可以使用psipred/example
文件夹中的测试文件,这个文件夹下共有三个文件:example.fasta
,example.horiz
,example.ss
和example.ss2
。其中example.fasta
为输入示例文件,example.horiz
,example.ss
和example.ss2
为输出结果。有了运行脚本和示例输入,看起来可以试一下了,运行一下命令
./runpsipred example/example.fasta
发现报了以下错误:
/usr/local/bin/blastpgp: Command not found. FATAL: Error whilst running blastpgp - script terminated!
错误提示找不到
blastpgp
,因此我们需要先安装这个程序。
3.安装BLAST
我们先看一下README中的说明:
You must also install the PSI-BLAST and Impala software from the
NCBI toolkit, and also install appropriate sequence data banks.
The NCBI toolkit can be obtained from URL ftp://ftp.ncbi.nih.gov
PSI-BLAST executables can be obtained from ftp://ftp.ncbi.nih.gov/blast
尽管在运行./runpsipred example/example.fasta
时,报的错误是找不到blastpgp
,但是查看runpsipred
文件会发现这个脚本中调用了BLAST中的blastpgp
和makemat
程序,因此我们需要安装BLAST软件。
其实在另一篇文章SCRATCH的安装和使用中,已经提到了怎样下载BLAST
,但是我们也只是下载之后解压缩,替换了SCRATCH-1D_1.1
套件中原有的blast-2.2.26
文件夹而已,BLAST
的安装由SCRATCH-1D_1.1
套件统一安装。而PSIPRED
本身并未配置和安装BLAST
,因此我们需要先自己下载和安装BLAST
。
3.1 下载BLAST
BLAST
原本的实现是C语言实现,官方已经使用了C++重新实现了新的版本BLAST+
,并强烈推荐用户使用心的BLAST+
,而非原来的BLAST
。
但是,PSIPRED
官方却强烈推荐用户继续使用BLAST
,看看下面的文档:
NCBI are now trying to move users to the new BLAST+ package. Please
see the README file in the BLAST+ subdirectory for more information
on PSIPRED's support for BLAST+. For now the preferred option is
to stick with the classic BLAST package as the default. If the tar
or rpm file you are downloading from NCBI has "+" in the filename,
then you are downloading BLAST+ rather than BLAST.
究其原因,主要是BLAST+在处理蛋白质序列的打分矩阵时做了精度上的降低,因此我们也还是选择一个BLAST
版本。
下面我们依然选择下载一个2.2.26
版本的BLAST
,对于mac和64位的linux,有两个不同的版本下载,点击网址ftp://ftp.ncbi.nih.gov/blast/executables/release/2.2.26/
- 对于Mac用户:
下载 blast-2.2.26-universal-macosx.tar.gz - 对于64位Linux用户:
下载 blast-2.2.26-x64-linux.tar.gz
下载完之后解压缩,就会得到一个blast-2.2.26
文件夹,把这个文件夹放在一个你习惯上放置软件的地方,比如我的,放在了/Users/wangjiawei/Bioinformatics/Softwares
中。
3.2 安装BLAST
尽管这节的标题叫做安装BLAST
,但其实BLAST不用安装,进入blast-2.2.26
文件夹,会发现里面有以下文件:
VERSION #文本文件,里面是当前BLAST的版本说明信息
bin #文件夹,编译好的可执行文件,直接可运行,所以不同的操作系统必须下载匹配的BLAST版本
data #文件夹,暂时不知道是干嘛的,不过不影响理解和使用BLAST
doc #文件夹,html格式的说明文档,有你所有想了解的BLAST资料。
3.3 配置BLAST
可执行程序
我们已经知道了bin中所有的程序都是可执行程序,共有
bl2seq blastclust copymat formatdb impala megablast seedtop blastall blastpgp fastacmd formatrpsdb makemat rpsblast
13种程序,其中的blastpgp
和makeat
就是PSIPRED
软件需要调用的程序。
以blastpgp
为例,我们在运行时,可以每次来到当前的bin
文件夹内运行./blastpgp + 参数
,也可以在任何地方运行/Users/wangjiawei/Bioinformatics/Softwares/blast-2.2.26/bin/blastpgp + 参数
。都不是很方便,我们想在任何地方都可以很简洁地运行程序,而不是带一大长串前缀。
有两种方法,可以实现(先说方法,后面再解释为什么):
为
bin
文件夹中所有的可执行程序在/usr/local/bin
下建立一个软链接。但是不推荐,最重要的原因在于通过这种方式在运行runpsipred
时会奇怪的错误。在根目录下编辑shell的配置文件:
在我的电脑上根目录是
/Users/wangjiawei
,在任何位置,输入命令cd
,就可以跳转到根目录。在根目录下使用
ls -la
,就发现有一个文件叫.zshrc
,这个是zshell的配置文件,如果你使用的是系统默认的bshell,也会发现与bsh相对应的配置文件。用
vim
或者别的软件编辑.zshrc
:vim .zshrc
添加下面这一行语句,将可执行文件的完整路径添加到
PATH
变量中。export PATH=/Users/wangjiawei/Bioinformatics/Softwares/blast-2.2.26/bin:$PATH
重启命令行窗口,或者使用命令
source .zshrc
使配置生效。
现在我们可以使用blastpgp + 参数
直接运行可执行程序。
那么疑问也就来了...
当我们运行blastpgp + 参数
时,系统在哪里查找blastpgp
程序呢
实际上,当我们直接运行blastpgp
时,系统会在/usr/bin
,/usr/local/bin
,PATH
变量包含的路径中查找blastpgp
。
- 上面第一种方式通过添加一个软连接,
/usr/local/bin/blastpgp
指向/Users/wangjiawei/Bioinformatics/Softwares/blast-2.2.26/bin/blastpgp
,因此如果使用第一种方式,系统实际上是通过/usr/local/bin/blastpgp
访问了/Users/wangjiawei/Bioinformatics/Softwares/blast-2.2.26/bin/blastpgp
。 - 上面第二种方式下,系统能够在
PATH
中找到/Users/wangjiawei/Bioinformatics/Softwares/blast-2.2.26/bin/
,并在这个目录下查找到blastpgp
,因此一样会访问/Users/wangjiawei/Bioinformatics/Softwares/blast-2.2.26/bin/blastpgp
。
3.4 配置BLAST
本地数据库
我们知道,BLAST
作为一种基于局部比对算法的搜索工具,最大的作用就是从数据库中搜索匹配输入的蛋白质或者核苷酸序列。而我们之所以用本地版的BLAST
,很大程度上是因为可以把数据库下载到本地,这样我们可以使用本地数据库来搜索匹配蛋白质序列。
在这里就不再介绍如何下载需要的数据库,格式化数据库等信息,因为在我们下载的SCRATCH-1D
套件中正好包含了一个格式化了之后的数据库SCRATCH-1D_1.1/pkg/PROFILpro_1.1/data/uniref50
,因为我们经常要使用到数据库,因此推荐把这个数据库放在一个单独的位置,比如我的放在了/Users/wangjiawei/Bioinformatics/Data/blast
。
注意:blast
文件夹中就是uniref50.**
等数据库文件了,而不是文件夹uniref50
!!
在根目录下建立一个新的文件,名字为.ncbirc
cd
vim .ncbirc
并将下列内容保存进这个文件:
; Start the section for BLAST configuration
[BLAST]
; Specifies the path where BLAST databases are installed
BLASTDB=/Users/wangjiawei/Bioinformatics/Data/blast
; Specifies the data sources to use for automatic resolution
; for sequence identifiers
DATA_LOADERS=blastdb
注意:官方的说明文档是将下列内容写入.ncbirc
,结果BLAST
的程序找不到指定位置的数据库。
[NCBI]
Data=/Users/wangjiawei/Bioinformatics/Data/blast
3.5 测试BLAST
程序
到了这一步,我们总算设置好了BLAST
的可执行程序的数据库,现在我们测试下BLAST
是否正常运行。
建立一个名字叫
example.fasta
的文件,可以在任何目录下,将下面的测试序列内容保存到example.fasta
中:> 26SPS9_Hs IHAAEEKDWKTAYSYFYEAFEGYDSIDSPKAITSLKYMLLCKIMLNTPEDVQALVSGKLALRYAGRQTEALKCVAQASKNRSLADFEKALTDYRAELRDDPIISTHLAKLYDNLLEQNLIRVIEPFSRVQIEHISSLIKLSKADVERKLSQMILDKKFHGILDQGEGVLIIFDEPP
在
example.fasta
所在的文件夹下,执行命令:blastpgp -i example.fasta -d uniref50
-i
:选项是指定输入文件,如果fasta文件不在当前的目录下,可以用绝对路径指定。
-d
:指定输入的序列所要查找对比的数据库,同样可以用绝对路径,指定一个数据库,也可以像上面一样只写uniref50
,因为我们已经配置了.ncbirc
,因此程序会找到/Users/wangjiawei/Bioinformatics/Data/blast/
文件夹中的uniref50
数据库。如果一切顺利,上面的命令会产生匹配结果序列。
如果数据库没正确配置,程序没能找到数据库的话,上面的命令会没有任何输出,也不会提供错误或者警告信息,非常坑。
到此为止,我们搞定了BLAST
的安装和配置,并测试了BLAST可以正常使用,现在继续回到PSIPRED
上。
4.使用PSIPRED
首先,进入文件夹psipred
,在使用之前,我们先来了解下psipred
的目录结构
4.1 psipred
目录说明
这里并不列出psipred
目录下的每一个文件,而是这其中的主要文件:
BLAST+
文件夹,尽管PSIPRED官方强烈用户使用BLAST而非BLAST+,但还是为想使用的BLAST+的用户提供了方法,BLAST+文件夹中的runpsipredplus脚本就是为这一目的而存在的。bin
文件夹,里面包含了编译之后可直接运行的psipred程序,但通常我们并不需要访问这个文件夹,因为官方提供了方便好用的runpsipred和runpsipred_single脚本,简化了参数,由它们调用bin中的程序。data
文件夹,抱歉我也暂时不知道里面的内容是干嘛的。example
文件夹,里面提供了示例输入,以及示例输出,方便用户检测程序可以正确执行。src
文件夹,里面包含了psipred程序的源代码,只有在第一次编译时women需要进去一次。runpsipred
tcsh
脚本,我们使用psipred程序,当我们使用这个脚本时,这个脚本会先调用BLAST中的blastpgp和makemat,在数据库中查找相似的序列,然后才进行蛋白质的二级结构预测。runpsipred_single
tcsh
脚本,如果你已经知道你的输入序列是一个孤儿,那么使用这个脚本,它不要查找数据库,而是直接进行蛋白质的二级结构预测,因此速度非常快,但是准确度也可能不如runpsipred。
4.1 运行runpsipred_single
我们开始尝试运行runpsipred
和runpsipred_single
,上面已经提到,如果我们已经知道输入序列在数据库中没有匹配的数据,那么使用runpsipred_single
会极大地提高运行效率,因为runpsipred_single
不需要去数据库中先去迭代查找匹配序列,而是直接预测。
在psipred
目录下,为了方便,将example/example.fasta
文件复制到当前文件夹
cp example/example.fasta .
用下列命令运行runpsipred_single
./runpsipred_single example.fasta
就会在当前目录下得到example.horiz
,example.ss
,example.ss2
三个目录,与example
文件夹中的这三个文件内容一样。
4.2 运行runpsipred
相比于runpsipred_single
,runpsipred
因为要先去调用BLAST
迭代查找指定数据库,然后再预测,因此速度慢了很多,主要时间都花在了迭代查找数据库上,但是精度也会提升很多。
如果你的蛋白质与现有数据库中的记录有足够的同源性,就可以认为其二级结构的预测有近80%的准确性。
使用下面的命令运行runpsipred
./runpsipred example.fasta
通常情况下来说,这里会报错。
查看错误信息,会发现是跟blastpgp
相关的错误。打开runpsipred
文件,会发现runpsipred
脚本在两个地方调用了BLAST
中的程序:
# Where the NCBI programs have been installed
set ncbidir = /usr/local/bin
...
$ncbidir/blastpgp -b 0 -j 3 -h 0.001 -d $dbname -i $tmproot.fasta -C $tmproot.chk >& $tmproot.blast
...
$ncbidir/makemat -P $tmproot
上面的脚本设置了变量$ncbidir=/usr/local/bin
,所以,runpsipred
是通过/usr/local/bin/blastpgp
和/usr/local/bin/makemat
命令调用blastpgp
和makemat
。但是系统不能在/usr/local/bin
目录下找到这两个可执行程序,因为我们并未将BLAST
的可执行程序安装到/usr/local/bin
目录下,也没有在/usr/local/bin
下为BLAST
的可执行程序建立软链接。
事实上,我尝试在/usr/local/bin
下为BLAST
的可执行程序建立软链接,结果runpsipred
会报一个很奇怪的bus error
错误,所以,我们通过下面这种方式解决这个问题。
上面已经提到,我们将BLAST
的可执行程序路径添加到了PATH
全局变量中,所以我们是可以在任何地方直接访问blastpgp
,makemat
等的,当然也就可以在脚本中这样访问,所以我们修改runpsipred
脚本调用blastpgp
和makemat
的地方。
# Where the NCBI programs have been installed
set ncbidir = /usr/local/bin
...
# modified
blastpgp -b 0 -j 3 -h 0.001 -d $dbname -i $tmproot.fasta -C $tmproot.chk >& $tmproot.blast
...
# modified
makemat -P $tmproot
请注意比较下修改后的脚本与修改前的脚本,很容易发现,就是在调用blastpgp
和makemat
的时候从原来的/usr/local/bin/blastpgp
和/usr/local/bin/makemat
改为了blastpgp
和makemat
。
现在,重新运行./runpsipred example.fasta
,就会开始一个漫长的运行过程,正确运行屏幕会输出以下信息:
hostid: Command not found.
Running PSI-BLAST with sequence example.fasta ...
Predicting secondary structure...
Pass1 ...
Pass2 ...
Cleaning up ...
Final output files: example.ss2 example.horiz
Finished.
一条测试序列数据,花费五分钟左右,多数时间花在Running PSI-BLAST with sequence example.fasta ...
这一步。
您好,如果把psi-blast,换成hhblits又该怎么安装操作呢?
这个没有尝试过,可能需要在runpsipred文件中修改,把runpsipred脚本在两个地方调用了BLAST中的程序改成调用hhblits的语句,如果产生的结果文件跟BLAST产生的文件不同,还需要在runpsipred脚本接下来使用到BLAST结果的地方修改~
2个问题:
1. 我下载的PSIPRED想使用最新的 blast-2.5.0,发现没有blastpgp怎么办?
2. 我看到README文档,说的是“NCBI are now encouraging users to switch from the classic BLAST package to the new BLAST+ package”,不是官方推荐用BLAST+么?
1. 如果你想使用不同版本的blast,比如blast-2.5.0,最好还是先了解这个版本的变化,比如如果没有了blastpgp,那替代程序是什么,替代程序的命令是否跟blastpgp相近。
2. NCBI确实鼓励使用BLAST+,并且把BLAST+放在了很显眼的位置上,如果你不认真看,甚至找不到原来的C版本的blast版本。实际上针对这个问题在文中已经有了说明:
NCBI are now trying to move users to the new BLAST+ package. Please
see the README file in the BLAST+ subdirectory for more information
on PSIPRED's support for BLAST+. For now the preferred option is
to stick with the classic BLAST package as the default. If the tar
or rpm file you are downloading from NCBI has "+" in the filename,
then you are downloading BLAST+ rather than BLAST.
尽管NCBI建议使用BLAST+,但是PSIPRED的README依然建议使用C版本的BLAST以提高计算的精确度。