1. 课程介绍
这门课讲的是人源基因组注释和BLAST的实战。说实话,我最早接触这块的时候,觉得就是个跑跑数据库的活。后来在项目中踩了不少坑才发现,这里头门道很多。你想想看,人类基因组有30亿个碱基对,你拿条未知序列往里一扔,BLAST能给出一堆匹配结果——怎么选?怎么用?这就是我们要解决的事。
基因组注释到底在做什么?
基因组注释,说白了就是给DNA序列贴上功能标签。哪个区域是基因,哪个是调控元件,哪里有重复序列,一一标出来。我参与过一个项目,拿新测序的人源样本做注释,一开始没注意基因结构预测的准确性,结果后续的变异分析全跑偏了。嗯,从那以后我养成了一个习惯——拿到注释文件先做一轮质控。
人源基因组的注释流程大致分三步:
- 重复序列屏蔽——先标记出转座子、简单重复等,不然BLAST时会收到大量假阳性。
- 基因结构预测——靠同源比对、从头预测、转录组证据结合起来定外显子和UTR。
- 功能注释——把预测的蛋白序列拿去比对已知数据库,注解GO、通路、疾病关联。
我个人习惯用Ensembl或GENCODE的官方注释作为参考基准。但官方注释也不是百分百对。我在处理某个罕见病样本时,就发现一个外显子边界在公开注释里标错了,还是靠手动比对纠正回来的。
BLAST——序列比对的老牌工具
BLAST(Basic Local Alignment Search Tool)是序列比对领域的瑞士军刀。它的核心思想很简单:把你的查序序列切成小片段,先在数据库里快速找种子匹配,再延伸出高分的局部比对。为什么快?因为用了启发式算法,不是穷举。
常用的BLAST变体:
| 变体 | 比对对象 | 典型用途 |
|---|---|---|
| blastn | 核酸 vs 核酸 | 查找同源基因、鉴定物种 |
| blastp | 蛋白 vs 蛋白 | 功能注释、结构域搜索 |
| blastx | 核酸翻译 vs 蛋白 | 新序列的功能预测 |
| tblastn | 蛋白 vs 核酸翻译 | 找基因组中的同源蛋白 |
我曾经花了一个通宵调blastn的参数,就因为默认的word size太大,导致低复杂度区域的假阴性太多。后来改用-word_size 7,效果立竿见影。所以建议你一开始就跑几个参数组合试试,别上来就全默认。
提示:BLAST对输入序列的碱基质量很敏感。我习惯在比对前先用Trimmomatic或fastp做一次质量过滤,能省一半的假匹配。
BLAST在人源基因组注释里的角色
你可能会问:现在都有成熟的注释管道了,干嘛还要学BLAST?我自己的经验是——当你遇到非编码RNA、新转录本、或者跨物种比较的时候,BLAST依然是无法替代的底层工具。举个例子,我在分析一个长链非编码RNA时,官方注释里没有它的功能信息,我就用blastx把它翻译后去比对UniProt,找到了一个保守的短开放阅读框,后续验证发现确实编码一个小肽。
整个注释流程中BLAST出现的地方:
- 同源预测:把其他物种已注释的蛋白序列用BLAT或tblastn映射到人源基因组
- 功能注释:用blastp把预测的蛋白序列比对到Swiss-Prot、nr、GO等数据库
- 重复序列识别:用blastn配合RepeatMasker去屏蔽重复区域
- 新基因鉴定:对RNA-seq组装的转录本用blastx搜索已知同源物
警告:不要迷信BLAST的E-value。E-value只反映随机匹配的概率,不直接表示生物学意义。我在一次项目里把一个E=1e-5的匹配当成同源基因,结果验证后才发现是假阳性——那是结构域低复杂度的假象。
知识体系总览
这一章的核心就是帮你建立“基因组注释 + BLAST”的全局视野。下面这张图把课程涉及的主题串了起来,你可以先看个大概,后续每章都会逐个深入。
你看这张图,左上角的“重复屏蔽”到“人工审核”是一条完整的注释管道,右侧是BLAST的几种变体以及数据库和结果处理。中间那句话是重点——BLAST不只是一个独立的工具,它像胶水一样把整个注释流程粘起来了。这个框架会贯穿我们后面的每一章。
第一个实战:跑一次最简单的BLAST
先别急着装软件。我们看一个最基础的blastn命令长什么样。假设你有一条未知的cDNA序列,想看看它在人源基因组上的位置。
# 使用 NCBI BLAST+ 2.14.0
# 先建立索引(只需要做一次)
makeblastdb -in human_genome.fa -dbtype nucl -out human_db
# 进行比对
blastn -db human_db -query my_sequence.fa -out results.txt -outfmt 6
-outfmt 6 是表格输出格式,包含查询ID、目标ID、相似度、比对长度、E-value等。我刚开始总是忘记加 -num_threads,后来发现多线程能快3-4倍。这是我常用的完整参数:
blastn -db human_db -query my_sequence.fa \
-out results.txt -outfmt "6 qseqid sseqid pident length mismatch gapopen evalue bitscore" \
-num_threads 8 -evalue 1e-5 -word_size 11
强烈建议:把输出格式选成自定义列,比默认的15列更清爽。我一般只保留6-8个核心字段,避免看表时眼花。
好了,这一章我们建立了整体认知——基因组注释不是只有BLAST,但BLAST是绕不开的核武器。接下来的课程会逐层剥开每个环节的细节。你手里如果有条未知序列,别犹豫,直接用上面的命令试试看。嗯,这就是一个很好的上手方式。