宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

一、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)