好的,我们来实现一个最简单的BLAST “Hello World” 任务。这个任务将在你的本地机器上(通过Docker)完成以下流程:
你只需要安装了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.fasta和cat query.fasta查看文件内容,确保它们正确。
使用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.nhr、mydb.nin、mydb.nsq等文件,这就是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:列出了数据库中和查询序列显著匹配的序列。这里出现了seq1和seq2。seq1的分数更高,E值更小(0.002),说明匹配更显著。seq2的E值为0.023,也显著,但稍差一些。seq1:12个碱基完全一致(100% identical),没有空位。seq2:12个碱基中有11个一致(92%),最后一个碱基不同(查询序列末尾是G,而seq2是C),在比对中用空格或冒号表示不匹配。恭喜!你已经成功完成了第一个BLAST任务!🎉
query.fasta中的序列(例如改成ATCGATCGATCC),重新运行blastn,看看结果有何变化。-dbtype nucl改为-dbtype prot,并用blastp代替blastn。-evalue 0.01(只显示E值小于0.01的结果)或-outfmt 6(生成表格格式输出,便于后续分析)。通过这个“Hello World”,你已经掌握了BLAST本地化分析的基本流程。之后就可以用它来处理你自己的数据了!