之前我们介绍了序列比对的常用工具:BLAST,但是其运行速度慢的令人捉急。
当我们遇到问题,要么解决问题,要么解决导致问题产生的人。如果不是给导师打工,怎么会出现这种问题(手动狗头)。但是解决老板的难度有点大(毕竟解决掉之后就没人给发钱了),所以我们只能退而求其次,尝试解决一下问题。
为了效率,为了不辜负这本就不多的读研补贴,于是我们找到了BLAT 和DIAMOND~
DIAMOND
DIAMOND作为一个和BLAST具有相似功能的软件,具有以下特点:
- 比BLAST快500到20,000倍
- 长序列的移框联配分析(frameshift alignment)
- 资源消耗小,普通台式机和笔记本都能运行
- 输出格式多样
对于科研工作者来说,时间就是生命,看到速度这么快,其他的优点都可以四舍五入忽略不计了。软件的安装很简单,以下是具体命令:
wget http://github.com/bbuchfink/diamond/releases/download/v0.9.25/diamond-linux64.tar.gz
tar -zxzf diamond-linux64.tar.gz
DIAMOND的功能是将蛋白序列或者其翻译后的核苷酸和蛋白质数据库进行比对,与blast相比功能单一,但也让它的使用格外的简单。
不推荐将核苷酸序列与蛋白质数据库进行比对,因为可能有许多序列是比对到非编码序列上的,利用蛋白质数据库进行比对,将导致假阴性过高。
下载nr数据库并建库
具体命令如下:
wget ftp://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/nr.gz
gunzip nr.gz
diamond makedb --in nr --db nr
-
--in
: 后面跟蛋白质数据库 -
--db
: 指定生成的diamond数据库名称
比对搜索
相当简单,只有两个子命令,blastx和blastp,前者比对DNA序列,后者比对蛋白
diamond blastx --db nr -q reads.fna -o dna_matches_fmt6.txt
diamond blastp --db nr -q reads.faa -o protein_matches_fmt6.txt
参数简单介绍:
-
-q
: 输入的待检索序列 -
-o
:指定输出文件,默认以 --outfmt 6 格式进行输出 -
--db
: 后面跟着我们建立好的diamond 蛋白数据库
BLAT
Blat,全称 The BLAST-Like Alignment Tool,可以称为"类BLAST 比对工具",对于DNA序列,BLAT是用来设计寻找95%及以上相似至少40个碱基的序列。对于蛋白序列,BLAT是用来设计寻找80%及以上相似至少20个氨基酸的序列。
Blat 的主要特点就是:速度快,共线性输出结果简单易读。
对于比较小的序列(如 cDNA 等)对大基因组的blat与blast比较比对,blat 无疑是首选。Blat 把相关的呈共线性的比对结果连接成为更大的 比对结果,从中也可以很容易的找到 exons 和 introns。因此,在相近物种的基因同源性分析和EST 分析中,blat 得到了广泛的应用。
Blat的比对速度之所以能比Blast快几百倍,是因为此两者之间的比对机制有着本质的差别。Blast是将查询序列索引化,然后线性搜索庞大的目标数据库,期间频繁地访问硬盘数据,时间和空间上的数据相关性较小;
Blat则将庞大的目标数据库索引化,然后线性搜索查询序列,这种搜索方式在时间和空间上的数据相关性比较大。Blat将数据库索引一次性读入内存,可以反复地高速调用,无需访问硬盘,占用的系统资源很少。只要索引建立,查询序列的量越大,Blat的优势就越明显。
基本原理
首先blat将参考序列拆分成tiles/kmers,其拆分的方式取决于两个参数:
-
-tileSize
and-stepSize
。其中 -tileSize决定tiles/kmers的大小,一般设定范围是:8-12,预设DNA为11,蛋白质为5 -
-stepSize
决定tiles/kmers移动的步长。
软件下载与安装
简单方便,只需无脑输入以下命令:
wget http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/blat/blat
chmod u+x blat
软件运行(比对)
命令如下:
blat nt test.fa test.out -out=blast8
blat有很多参数可以选择,但大部分时候我们按照默认的即可。
blat的输入文件和待查询数据库的格式,可以是fa/nib/2bit三种格式中的任意一种。运行时十分简单,不需要进行建库就可以直接比对。
软件运行时,依次输入软件名(软件执行路径),待比对的数据库,待搜索的序列,输出结果。顺序前后不能颠倒。这样就可以开始比对了
程序开始运行后,会在读完database 中的所有subject 序列时在屏幕输出database的统计结果。
以下是一些常用的参数:
-
-noHead
: 不输出表头信息,有助于结果文件的后续处理 -
-out
: 指定输出的文件格式,此处使用的是blast的m8格式 -
-t
: 指定数据库的类型,dna/prot/dnax -
-q
: 指定序列类型,dna/rna/prot/dnax/rna
内存溢出
值得关注的是,因为blat的算法原理,它是将整个带查询数据库全部读入内存进行比对。因此如果你的服务器内存不大,不建议使用blat进行nt/nr库的比对。
下面给出一个简单的计算方法,用于评估自己的服务器是否可以顺溜的run blat。对于带查询基因组,平均每个碱基,需要2bytes的内存。wiki给出的人类基因组大小为3100Mb,因此我们大概需要6.2G的内存才可以顺利的对人类基因组进行blat查询。
年少无知的我,用128G内存的服务器跑nt数据库,理所当然的把我们课题组的服务器跑崩了~