1. 课程介绍

这门课讲的是人源基因组注释和BLAST的实战。说实话,我最早接触这块的时候,觉得就是个跑跑数据库的活。后来在项目中踩了不少坑才发现,这里头门道很多。你想想看,人类基因组有30亿个碱基对,你拿条未知序列往里一扔,BLAST能给出一堆匹配结果——怎么选?怎么用?这就是我们要解决的事。

基因组注释到底在做什么?

基因组注释,说白了就是给DNA序列贴上功能标签。哪个区域是基因,哪个是调控元件,哪里有重复序列,一一标出来。我参与过一个项目,拿新测序的人源样本做注释,一开始没注意基因结构预测的准确性,结果后续的变异分析全跑偏了。嗯,从那以后我养成了一个习惯——拿到注释文件先做一轮质控。

人源基因组的注释流程大致分三步:

  1. 重复序列屏蔽——先标记出转座子、简单重复等,不然BLAST时会收到大量假阳性。
  2. 基因结构预测——靠同源比对、从头预测、转录组证据结合起来定外显子和UTR。
  3. 功能注释——把预测的蛋白序列拿去比对已知数据库,注解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实践 · 知识框架 人源基因组 重复屏蔽 基因预测 功能注释 人工审核 blastn / blastp blastx / tblastn 数据库构建 结果解析 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是绕不开的核武器。接下来的课程会逐层剥开每个环节的细节。你手里如果有条未知序列,别犹豫,直接用上面的命令试试看。嗯,这就是一个很好的上手方式。