3. 人源基因组参考序列与常用数据库归纳总结

做BLAST分析,第一步就是搞清楚你要比对的“尺子”是什么。

人源基因组参考序列,就是那把尺子。没有它,你测出来的序列就是一堆乱码。我早些年刚接触生信时,觉得随便找个基因组版本用就行。结果项目做完,文章被拒,理由是对照的参考基因组版本过旧。嗯,这个教训挺深刻的。

3.1 人源基因组参考序列的版本演变

人源基因组参考序列,说白了就是科学家们拼接出来的一条“标准答案”。但这条答案一直在更新。目前主流版本有两个:

  • GRCh38/hg38:2013年发布,目前最常用。
  • GRCh37/hg19:2009年发布,仍在大量旧文献和工具中使用。
  • T2T-CHM13:2022年发布的完整版,首次补齐了所有着丝粒和端粒区域。

我个人习惯,新项目一律用GRCh38。只有涉及老数据复现或特定工具兼容性时,才会用hg19。

版本混用是大忌。我见过不止一次,有人比对时用了hg19的参考序列,但注释文件却是GRCh38的。结果坐标全对不上,整个分析白做。避坑指南:每次下载数据前,先把REFERENCE_VERSION写进一个README文件,贴在项目根目录。

3.2 常用数据库分类与特点

你想想看,做BLAST找注释,总得知道去哪儿查吧。以下是我常用且推荐的几个核心数据库:

数据库 数据内容 典型用途 我推荐的访问方式
NCBI RefSeq 人工审核的非冗余参考序列(mRNA、蛋白) 基因功能注释、保守性分析 NCBI FTP / BLAST+ 本地库
Ensembl 自动化注释+部分审校,包含变异信息和基因树 多物种比较基因组学、变异影响预测 Ensembl REST API / 基因组浏览器
UCSC Genome Browser 整合多种公共数据的可视化平台 查看基因组区间、保守性轨道、调节元件 UCSC Table Browser / 命令行工具
GENCODE 高精度人源和鼠源基因注释(ENCODE项目官方) RNA-seq定量、可变剪接分析 GENCODE FTP
dbSNP / ClinVar 单核苷酸多态性和临床相关变异 致病性评估、群体频率检查 NCBI dbSNP / ClinVar FTP

我在做群体遗传分析时,最常用的是RefSeq和GENCODE。前者序列准,后者注释全。

3.3 如何获取与构建本地BLAST数据库

线上BLAST虽然方便,但一旦数据量大或者需要对私密数据做分析,还是得本地跑。下面是我最常用的下载和建库流程:

以GRCh38参考基因组和RefSeq mRNA序列为例:

# 1. 下载参考基因组(FASTA格式)
wget https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/405/GCF_000001405.26_GRCh38/GCF_000001405.26_GRCh38_genomic.fna.gz
gunzip GCF_000001405.26_GRCh38_genomic.fna.gz

# 2. 使用makeblastdb建索引
makeblastdb -in GCF_000001405.26_GRCh38_genomic.fna \
            -dbtype nucl \
            -parse_seqids \
            -title "GRCh38_genomic" \
            -out GRCh38_genomic

# 3. 下载RefSeq mRNA序列(FASTA)
wget https://ftp.ncbi.nlm.nih.gov/refseq/H_sapiens/mRNA_Prot/human.1.rna.fna.gz
gunzip human.1.rna.fna.gz

# 4. 同样建库
makeblastdb -in human.1.rna.fna \
            -dbtype nucl \
            -parse_seqids \
            -title "human_refseq_mRNA" \
            -out human_refseq_mRNA
一个小技巧:建库时加上-parse_seqids参数。这样后续用blastdbcmd按Accession号提取单条序列时会快很多。我刚开始没加这个参数,结果每次提取序列都得全库扫描,一个操作等半小时。

验库是否成功,用这个命令:

blastdbcmd -db GRCh38_genomic -info

输出应该类似:

Database: GRCh38_genomic
    Number of sequences: 2398
    Number of letters: 3099756071
    Number of sequences with undefined ids: 0
    ...

3.4 不同用途下的数据库选择策略

做BLAST之前,先问自己一句:我到底想找什么?

  • 找新基因或同源基因:用NCBI nr/nt库或RefSeq。
  • 做RNA-seq定量:用GENCODE或Ensembl的转录本注释。
  • 分析变异位点:搭配dbSNP和ClinVar。
  • 查调控元件:用UCSC的ENCODE轨道。
  • 做比较基因组学:Ensembl的Compara数据库最好用。

我曾在项目中遇过一个情况:用RefSeq做BLAST找出来的基因,在RNA-seq定量时却对不上。后来排查发现,RefSeq的某些转录本版本比GENCODE旧,剪接模式不一致。所以从那以后,做转录组相关分析我就只用GENCODE了。

3.5 本章知识体系结构

下面的SVG总结了人源基因组参考序列与常用数据库间的逻辑关系,以及BLAST应用时如何选择数据源:

人源基因组参考序列与BLAST常用数据库结构 参考基因组版本 GRCh38 / hg38 T2T-CHM13 GRCh37 / hg19 核心注释数据库层 RefSeq (NCBI) Ensembl UCSC GENCODE BLAST应用场景 基因同源性搜索 RNA-seq定量 变异位点分析 调控元件查找 ▲ 选择合适的参考基因组版本 → 对应数据库 → 决定BLAST分析策略

3.6 避坑指南与个人经验总结

我曾经犯过一个低级错误:下载了GRCh38参考基因组,但建库时默认文件名带特殊字符,导致BLAST搜索找不到序列。后来养成了一个习惯——下载后先改一个干净的名字,比如grch38.fa,避免路径中有空格或非ASCII字符。

还有一点要说:别只看Accession号。有一次我发现BLAST结果里明明有某个基因,但用基因名却搜不到。后来才搞清楚,dbSNP数据库里同一个位点可能对应多个rs号,不同版本之间还有合并或拆分的情况。所以做变异注释时,最好再拿ClinVar做一次交叉验证。

最后,给个实际操作建议:

# 用blastdbcmd检查数据库是否包含期望的序列
blastdbcmd -db human_refseq_mRNA -entry NM_001101.5 -range 1-100
# 输出应该能看到ACTB基因的前100bp

如果输出为空,那就要检查数据库版本是否包含这个Accession号了。

核心一句话总结:BLAST分析的好坏,一半取决于你对参考序列和数据库的理解。版本选对,建库做对,后面的一切才有意义。