基因组注释概述与BLAST的核心作用
基因组注释是什么?说白了,就是给DNA序列“贴标签”。
你拿到一条完整的基因组序列,像一本天书。注释工作就是把这本天书翻译出来——哪里是基因,哪里是调控区域,哪些片段有生物学功能。我刚开始接触这行时,以为注释就是把序列往数据库里一丢就完事了。后来发现,远没那么简单。
1.1 什么是基因组注释
基因组注释有三个层次,我习惯这么分:
- 结构注释——找基因的位置。外显子、内含子、启动子、UTR,这些元件的边界在哪里?
- 功能注释——猜基因的作用。这个基因编码什么蛋白?参与什么通路?
- 调控注释——看基因怎么被管。转录因子结合位点、甲基化区域、增强子、沉默子。
你想想看,这三个层次一环扣一环。结构注释没做好,后面功能预测就是空中楼阁。我在项目里见过太多人,一上来就急着跑BLAST,结果连基因模型都没校正,比对出来的结果完全浪费。
1.2 注释的一般流程
标准的注释流程,我把它拆成几个阶段。每一阶段都需要BLAST的参与:
- 重复序列屏蔽——先把重复区域标记出来,避免它们干扰后续比对。
- 从头基因预测——用AUGUSTUS、GlimmerHMM这类工具,基于统计模型找候选基因。
- 同源比对证据整合——这里BLAST登场了。把预测的基因序列与已知蛋白库、转录组数据做比对,验证结构。
- 功能注释——用BLASTX、BLASTP去Swiss-Prot、NR这些库中找同源蛋白,推断功能。
- 人工审校与修正——最后靠经验判断,哪些基因模型需要合并、分裂或调整。
嗯,这里要注意。很多人把BLAST当作注释的终点,其实它只是起点。比对结果只能给你线索,真正可信的注释需要多证据交叉验证。
关键认知:BLAST比对是锚定结构,不是最终答案。快速排除假阳性,需要结合其他方法。
1.3 BLAST在注释中的关键角色
BLAST(Basic Local Alignment Search Tool)是注释工具箱里最趁手的家伙。它能帮你快速找出查询序列与已知库中哪些序列最相似。
我个人在注释流程中经常用到下面几个BLAST变体:
| BLAST类型 | 查询序列 | 目标数据库 | 典型用途 |
|---|---|---|---|
| BLASTN | DNA | DNA | 鉴定重复序列、同源非编码区 |
| BLASTP | 蛋白 | 蛋白 | 已预测蛋白的功能注释 |
| BLASTX | DNA(6框翻译) | 蛋白 | 不知道是否编码时做同源搜索 |
| TBLASTN | 蛋白 | DNA(6框翻译) | 找基因组的编码区痕迹 |
| TBLASTX | DNA(6框翻译) | DNA(6框翻译) | 高度进化分歧的序列间找同源 |
我曾经在一个真菌基因组项目里,只用BLASTX就把80%的预测基因注释出来了。但剩下的20%特别棘手——要么是物种特异的,要么是数据库里没有近缘序列。这时候光靠BLAST就不够了。
实用技巧:BLAST结果里的E-value不要只看一眼就丢。我个人习惯设一个梯度阈值:E < 1e-10 当作强证据,1e-5 到 1e-10 当作参考,大于 1e-5 的基本不采信。
1.4 一个典型BLASTX运行示例
假设你从注释工具里得到一批候选基因的cDNA序列,想验证它们是否真的编码蛋白。我会这样跑BLASTX:
blastx -query candidate_genes.fasta \
-db swissprot \
-out blastx_results.txt \
-outfmt "6 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore" \
-evalue 1e-5 \
-num_threads 8
输出格式选表格形式(outfmt 6)是我的习惯,方便后续用awk或者Python做统计。比如你想看每个查询序列的最优匹配:
sort -k1,1 -k12,12nr blastx_results.txt | awk '!seen[$1]++' > best_hits.txt
注意:不要直接用默认参数。我见过太多人跑了BLAST没结果,其实是因为E-value阈值太严,或者数据库版本不对。建议先在小样本上调试参数。
1.5 BLAST与其他方法的协同
BLAST不是万能的。它的强项是速度,弱项是对高度分化序列不敏感。我建议你在注释流程里搭配使用:
- 用HMMER做profile搜索,识别远缘同源——适合检测那些BLAST找不出来的保守结构域。
- 用DIAMOND加速超大数据库比对——NR库几十GB,BLAST跑几天,DIAMOND可能几小时搞定。
- 用InterProScan整合多个数据库的注释——BLAST给出种子,InterProScan补充结构域信息。
嗯,这里再说个我踩过的坑。有一次我直接用BLAST结果做功能富集分析,结果假阳性率特别高。后来发现原因是对齐覆盖度太低——匹配上的区域只有30个氨基酸,却硬说整个蛋白有那个功能。后来我加了一条过滤规则:要求对齐覆盖度不低于50%,错误率一下子就降下来了。
一句话总结本段:BLAST是基因组注释的锚点工具,但它必须跟其他方法配合,才能做出可信的注释。