logo
0
0
WeChat Login
docs: 添加 BLAST Hello World 教程

好的,我们来实现一个最简单的BLAST “Hello World” 任务。这个任务将在你的本地机器上(通过Docker)完成以下流程:

  1. 创建一个很小的数据库,里面包含两条短DNA序列。
  2. 创建一个查询序列,与数据库中的第一条序列完全相同。
  3. 用BLAST搜索,看看查询序列能否在数据库中找到匹配。

你只需要安装了Docker,并打开终端(Linux / macOS / Windows的PowerShell或WSL2都可以),跟着下面的步骤操作即可。


🚀 第一步:准备数据文件

首先,创建一个新文件夹(例如blast_hello),并进入该文件夹。然后创建两个文本文件:db.fasta(数据库)和query.fasta(查询序列)。

你可以直接复制下面的命令(在终端中逐条执行):

# 创建并进入工作目录 mkdir -p ~/blast_hello cd ~/blast_hello # 创建数据库文件 db.fasta,包含两条序列 cat > db.fasta << EOF >seq1 ATCGATCGATCG >seq2 ATCGATCGATCC EOF # 创建查询文件 query.fasta,包含一条与 seq1 相同的序列 cat > query.fasta << EOF >my_query ATCGATCGATCG EOF

执行后,可以用cat db.fastacat query.fasta查看文件内容,确保它们正确。


🛠️ 第二步:构建BLAST数据库

使用Docker运行NCBI的makeblastdb工具,将db.fasta格式化为BLAST可搜索的数据库。

docker run --rm -v "$(pwd)":/data -w /data ncbi/blast makeblastdb -in db.fasta -dbtype nucl -out mydb

解释

  • --rm:容器运行结束后自动删除。
  • -v "$(pwd)":/data:将当前目录挂载到容器的/data目录。
  • -w /data:容器内工作目录设为/data
  • ncbi/blast:使用的镜像。
  • makeblastdb -in db.fasta -dbtype nucl -out mydb:运行建库命令,输入为db.fasta,数据库类型为核酸(nucl),输出文件前缀为mydb

运行成功后,当前目录下会出现mydb.nhrmydb.ninmydb.nsq等文件,这就是BLAST数据库。


🔍 第三步:运行BLAST搜索

现在用blastn(核酸比对核酸)将查询序列query.fasta与刚建好的数据库mydb进行比对。

docker run --rm -v "$(pwd)":/data -w /data ncbi/blast blastn -query query.fasta -db mydb -out result.txt

执行后,结果会保存在result.txt文件中。可以用cat result.txt查看。


📖 第四步:查看并理解结果

打开result.txt,你会看到类似下面的内容(已简化关键部分):

BLASTN 2.15.0+ ... Query= my_query Length=12 Score E Sequences producing significant alignments: (Bits) Value seq1 23.8 0.002 seq2 19.8 0.023 >seq1 Length=12 Score = 23.8 bits (12), Expect = 0.002 Identities = 12/12 (100%), Gaps = 0/12 (0%) Query 1 ATCGATCGATCG 12 |||||||||||| Sbjct 1 ATCGATCGATCG 12 >seq2 Length=12 Score = 19.8 bits (10), Expect = 0.023 Identities = 11/12 (92%), Gaps = 0/12 (0%) Query 1 ATCGATCGATCG 12 ||||||||||| Sbjct 1 ATCGATCGATCC 11

结果解读

  • Sequences producing significant alignments:列出了数据库中和查询序列显著匹配的序列。这里出现了seq1seq2
  • Score(分数)和E-value(期望值)seq1的分数更高,E值更小(0.002),说明匹配更显著。seq2的E值为0.023,也显著,但稍差一些。
  • 具体比对:下方展示了每条匹配的详细比对。
    • 对于seq1:12个碱基完全一致(100% identical),没有空位。
    • 对于seq2:12个碱基中有11个一致(92%),最后一个碱基不同(查询序列末尾是G,而seq2C),在比对中用空格或冒号表示不匹配。

恭喜!你已经成功完成了第一个BLAST任务!🎉


💡 下一步可以做什么?

  • 试试修改query.fasta中的序列(例如改成ATCGATCGATCC),重新运行blastn,看看结果有何变化。
  • 尝试用蛋白质序列:将-dbtype nucl改为-dbtype prot,并用blastp代替blastn
  • 调整BLAST参数,比如-evalue 0.01(只显示E值小于0.01的结果)或-outfmt 6(生成表格格式输出,便于后续分析)。

通过这个“Hello World”,你已经掌握了BLAST本地化分析的基本流程。之后就可以用它来处理你自己的数据了!