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是一个源代码包,因此需要自己编译安装一下,步骤如下:

  1. 解压压缩文件,得到psipred文件夹。

    tar -xvzf psipred3.5.tar.gz
    
  2. 进入psipred文件夹,代码和编译代码的脚本在其中的src文件夹中,继续进入src文件夹

    cd psipred
    cd src
    
  3. 使用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.fastaexample.horizexample.ssexample.ss2。其中example.fasta为输入示例文件,example.horizexample.ssexample.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中的blastpgpmakemat程序,因此我们需要安装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/

下载完之后解压缩,就会得到一个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种程序,其中的blastpgpmakeat就是PSIPRED软件需要调用的程序。
blastpgp为例,我们在运行时,可以每次来到当前的bin文件夹内运行./blastpgp + 参数,也可以在任何地方运行/Users/wangjiawei/Bioinformatics/Softwares/blast-2.2.26/bin/blastpgp + 参数。都不是很方便,我们想在任何地方都可以很简洁地运行程序,而不是带一大长串前缀。
有两种方法,可以实现(先说方法,后面再解释为什么):

  • bin文件夹中所有的可执行程序在/usr/local/bin下建立一个软链接。但是不推荐,最重要的原因在于通过这种方式在运行runpsipred时会奇怪的错误。

  • 在根目录下编辑shell的配置文件:

    1. 在我的电脑上根目录是/Users/wangjiawei ,在任何位置,输入命令cd,就可以跳转到根目录。

    2. 在根目录下使用 ls -la,就发现有一个文件叫.zshrc,这个是zshell的配置文件,如果你使用的是系统默认的bshell,也会发现与bsh相对应的配置文件。

    3. vim或者别的软件编辑.zshrc: vim .zshrc

    4. 添加下面这一行语句,将可执行文件的完整路径添加到PATH变量中。

      export PATH=/Users/wangjiawei/Bioinformatics/Softwares/blast-2.2.26/bin:$PATH
      
    5. 重启命令行窗口,或者使用命令source .zshrc使配置生效。

现在我们可以使用blastpgp + 参数直接运行可执行程序。
那么疑问也就来了...

当我们运行blastpgp + 参数时,系统在哪里查找blastpgp程序呢

实际上,当我们直接运行blastpgp时,系统会在/usr/bin/usr/local/binPATH变量包含的路径中查找blastpgp

  1. 上面第一种方式通过添加一个软连接,/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
  2. 上面第二种方式下,系统能够在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是否正常运行。

  1. 建立一个名字叫example.fasta的文件,可以在任何目录下,将下面的测试序列内容保存到example.fasta中:

    > 26SPS9_Hs
    IHAAEEKDWKTAYSYFYEAFEGYDSIDSPKAITSLKYMLLCKIMLNTPEDVQALVSGKLALRYAGRQTEALKCVAQASKNRSLADFEKALTDYRAELRDDPIISTHLAKLYDNLLEQNLIRVIEPFSRVQIEHISSLIKLSKADVERKLSQMILDKKFHGILDQGEGVLIIFDEPP
    
  2. example.fasta所在的文件夹下,执行命令:

    blastpgp -i example.fasta -d uniref50
    

    -i:选项是指定输入文件,如果fasta文件不在当前的目录下,可以用绝对路径指定。
    -d:指定输入的序列所要查找对比的数据库,同样可以用绝对路径,指定一个数据库,也可以像上面一样只写uniref50,因为我们已经配置了.ncbirc,因此程序会找到/Users/wangjiawei/Bioinformatics/Data/blast/文件夹中的uniref50数据库。

  3. 如果一切顺利,上面的命令会产生匹配结果序列。

    如果数据库没正确配置,程序没能找到数据库的话,上面的命令会没有任何输出,也不会提供错误或者警告信息,非常坑。

到此为止,我们搞定了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

我们开始尝试运行runpsipredrunpsipred_single,上面已经提到,如果我们已经知道输入序列在数据库中没有匹配的数据,那么使用runpsipred_single会极大地提高运行效率,因为runpsipred_single不需要去数据库中先去迭代查找匹配序列,而是直接预测。
psipred目录下,为了方便,将example/example.fasta文件复制到当前文件夹

cp example/example.fasta .

用下列命令运行runpsipred_single

./runpsipred_single example.fasta

就会在当前目录下得到example.horizexample.ssexample.ss2三个目录,与example文件夹中的这三个文件内容一样。

4.2 运行runpsipred

相比于runpsipred_singlerunpsipred因为要先去调用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命令调用blastpgpmakemat。但是系统不能在/usr/local/bin目录下找到这两个可执行程序,因为我们并未将BLAST的可执行程序安装到/usr/local/bin目录下,也没有在/usr/local/bin下为BLAST的可执行程序建立软链接。
事实上,我尝试在/usr/local/bin下为BLAST的可执行程序建立软链接,结果runpsipred会报一个很奇怪的bus error错误,所以,我们通过下面这种方式解决这个问题。
上面已经提到,我们将BLAST的可执行程序路径添加到了PATH全局变量中,所以我们是可以在任何地方直接访问blastpgp,makemat等的,当然也就可以在脚本中这样访问,所以我们修改runpsipred脚本调用blastpgpmakemat的地方。

# 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

请注意比较下修改后的脚本与修改前的脚本,很容易发现,就是在调用blastpgpmakemat的时候从原来的/usr/local/bin/blastpgp/usr/local/bin/makemat改为了blastpgpmakemat

现在,重新运行./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 ...这一步。