一、Blast的基本介绍
Blast是Bioinformatics领域中最常用的序列比对工具,它有助于发现具有相似结构和功能的DNA,RNA和蛋白质序列。
Blast有两种基本类型:blastp用于蛋白质序列比对,blastn用于核酸序列比对。无论是blastp还是blastn,Blast的基本原理都是基于一个很简单的思想:两个序列的相似性可以通过比较它们的k个连续字串(k-mer)来度量。这个k可以是4,5,6,7等等不同的值,也可以通过对BLAST程序中的 -word_size 标志进行修改以实现自定义的长度。
Blast的核心算法是“分治策略”,该策略将参考序列划分为多个较短的片段,然后在每个片段上进行比对,最后将所有比对结果进行合并以得到完整的比对结果。这种划分片段的方式可以大大提高比对的速度。
二、Blast的工作原理
Blast主要分为两个步骤:预处理和比对。
1. 预处理
在这个步骤中,待比较的序列将进行索引,因此可快速地在数据库中进行查找。BLAST有两种预处理方法:生成和存储基于散列算法的索引(hash-based indices)和生成和存储基于后缀树(suffix tree)的索引。
2. 比对
Blast使用两个主要的参数来概括匹配的相似性和可信度:
- e-value:一个给定比对的期望误报率,即在搜索数据库时,具有作为这种比对文本所展示的特征的随机打击数的数量。默认值为10,实际上表示10条误报比对中有1条正确的比对。
- identity:比对中的匹配百分比。identity的默认值为0.0(百分之零),但实际上是由BLAST程序根据其比对评价准则进行计算的。
Blast的比对算法可以分解为以下步骤:
- 找出每个比对序列的最佳比对。
- 利用预处理阶段生成的索引找出匹配的序列。
- 计算最佳比对的e-value和identity值。
- 生成两个序列的比对结果。
三、Blast的优化
为了进一步提高比对的效率,Blast进行了多项优化。
1. 基于哈希表的比对算法
哈希表是Blast中的关键数据结构之一,它用于储存参考序列和查询序列中的k-mer,并且使用哈希函数将这些k-mer映射到哈希表上。在查询时,Blast会在哈希表中搜索与每个查询序列k-mer匹配的参考序列k-mer。如果匹配成功,则进行进一步的比较。
2. 基于GPU加速的算法
Blast的计算密度较高,可以通过使用GPU进行加速。最近几年发展了各种基于GPU的Blast加速器,其中包括mdBLAST和CUDABLAST等。
3. 快速多重比对算法
Blast毕竟是单序列比对算法,但是在某些情况下,我们需要将多个序列进行比对。因此,Blast开发了一些快速且准确的多重比对算法,比如MUSCLE,MAFFT和CLUSTAL。
四、Blast的应用
Blast可以在生物研究中用于许多不同的应用,例如:
- 序列相似性搜索:比对两个或多个序列,找出共性和差异,从而帮助科学家理解它们的结构和功能。
- 基因组注释:通过比对新的基因组序列与已知的序列数据库,可以确定新的基因组中的基因和元件。
- 进化研究:比较不同物种的DNA、RNA和蛋白质序列,从而帮助确定它们之间的关系。
五、代码示例
下面是一个blastn的Python代码示例:
from Bio.Blast import NCBIWWW from Bio.Blast import NCBIXML fasta_string = open("test.fasta").read() result_handle = NCBIWWW.qblast("blastn", "nt", fasta_string) blast_record = NCBIXML.read(result_handle) for alignment in blast_record.alignments: for hsp in alignment.hsps: print('****Alignment****') print('sequence:', alignment.title) print('length:', alignment.length) print('bit Score:', hsp.score) print('e value:', hsp.expect) print(hsp.query) print(hsp.match) print(hsp.sbjct)