4. 加载参考基因组:hg19/hg38、自定义参考、索引文件

说实话,刚开始用IGV那会儿,我栽过一个跟头。当时拿到一批WES数据,怎么看都觉得变异位点不对,折腾了半天才发现——参考基因组版本没对上。后来我就养成了一个习惯:拿到数据第一件事,先确认参考基因组版本。

参考基因组是什么?说白了,就是一条标准答案。我们把测序得到的序列往这个标准答案上比对,才能发现哪里有差异。所以这一步选错了,后面全白干。

4.1 参考基因组版本的选择

目前最常用的两个版本就是hg19和hg38。你可能觉得这两个差不多,但实际用起来差别还挺大。

我列个表,方便你对比:

对比项 hg19 (GRCh37) hg38 (GRCh38)
发布时间 2009年 2013年
基因组大小 约3.1 Gb 约3.2 Gb
gap区域数量 较多,约300+ 显著减少,约80+
着丝粒/端粒表示 N填充,缺失较多 改进,有更多准确序列
数据库兼容性 dbSNP、ClinVar等主流数据库仍支持 新版数据库逐步迁移至此
常用场景 旧项目、已发表研究、兼容老数据库 新项目、高精度分析、长读长数据

我个人习惯是这样:如果是回顾性分析,或者需要跟已发表的数据库比对,我会用hg19。如果是启动新项目,特别是全基因组或者长读长测序,我直接上hg38。为什么呢?hg38修正了hg19里很多错误组装,gap更少,在一些重复区域的表示也更准确。

关键点:参考基因组版本必须与你的比对文件和注释文件保持一致。BAM/VCF文件的头部信息通常会记录使用的参考版本,你可以用samtools view -H或bcftools head查看。

我的习惯:在项目文件夹里建一个reference_notes.txt,记录下使用的参考基因组版本和下载日期。别看这个小动作,上次有个同事项目做了半年才发现版本错了,那叫一个惨。

4.2 在IGV中加载hg19/hg38

IGV默认自带了一些常用基因组,加载起来很方便。你打开软件后,在顶部的Genome下拉菜单就能看到。

具体操作步骤如下:

  1. 打开IGV软件
  2. 点击顶部菜单栏的 Genomes
  3. 选择 Load Genome From Server...
  4. 在弹出的窗口中找到 Human hg19 或 Human hg38
  5. 点击 OK,等待下载完成

加载完成后,你会在基因组坐标栏看到类似"chr1:10,000-20,000"这样的显示。

注意:如果你的网络环境不太好,下载参考基因组可能会比较慢。我第一次在学校实验室用IGV,等了快十分钟才加载完hg38。后来我就学乖了,提前下载好离线包。

4.3 自定义参考基因组

但实际工作中,我们经常需要加载非标准参考基因组。比如研究细菌、病毒,或者使用参考基因组的特定版本(像某些疾病的参考基因组)。这时候就需要用自定义参考。

我自己用的最多的场景是做罕见病分析,经常会用到一些特殊的参考基因组,比如加了替代等位基因的或masked版本。

加载自定义参考基因组的方法:

  1. 点击 Genomes → Load Genome from File...
  2. 在弹出的文件选择对话框中,选中你的参考基因组FASTA文件
  3. 点击 Open 完成加载

这里要注意,IGV对FASTA文件有格式要求:

  • FASTA文件的行首不能有空格
  • 序列行(非标题行)建议每行60-80个字符,不要太长
  • 染色体名称最好用标准格式,比如chr1、chr2,不要用"1"、"2"这种,虽然也能用,但容易混淆

避坑指南:我曾经加载一个自定义参考,结果IGV卡住了很久。后来发现是FASTA文件里有一条染色体名称包含了空格。你想想看,IGV在解析的时候直接就乱了。所以建议你染色体名称不要包含空格、特殊符号,最好只用字母、数字和下划线。

4.4 索引文件:.fai 和 .gzi

嗯,这里要注意。IGV加载参考基因组时,会要求同时存在索引文件。没有索引文件,IGV就没办法快速定位到指定区域。为什么呢?因为基因组文件太大了,如果没有索引,每次查找都要从头扫描,那速度简直没法用。

参考基因组的索引文件主要有两种:

索引类型 文件名后缀 生成工具 作用
FASTA索引 .fai samtools faidx 记录每条染色体的名称、长度、偏移量等
压缩文件索引 .gzi bgzip + tabix 对bgzip压缩的FASTA进行随机访问

.fai文件是纯文本格式,内容类似这样:

chr1    248956422    6    50    51
chr2    242193529    253404391    50    51
chr3    198295559    495547051    50    51
chr4    190214555    693784781    50    51
chr5    181538259    883956678    50    51

每一行代表一条染色体,内容依次是:染色体名称、序列长度、在FASTA文件中的偏移量(字节)、每行碱基数、每行最后一个碱基后的换行符数(包括回车和换行)。

生成索引文件很简单,用samtools一行命令搞定:

samtools faidx hg38.fa

这条命令会在hg38.fa同目录下生成hg38.fa.fai文件。如果你的参考基因组是bgzip压缩的,比如hg38.fa.gz,还需要额外生成.gzi索引:

tabix -p hg38.fa.gz

个人经验:如果IGV提示"Index not found",别慌。检查一下三个地方:第一,索引文件是否与FASTA在同一目录;第二,文件名是否一致(比如hg38.fa对应hg38.fa.fai);第三,索引文件是否损坏。我记得有一次,索引文件下载到一半网络断了,导致文件不完整,IGV直接报错。

4.5 整体流程梳理

好了,我把这一章的核心逻辑用一张图串起来。你一看就明白参考基因组加载的完整流程了:

参考基因组加载流程 参考基因组加载核心流程 获取参考基因组FASTA 检查FASTA格式是否规范 选择:hg19 / hg38 / 自定义 从IGV服务器加载 hg19 从IGV服务器加载 hg38 从本地文件加载自定义参考 生成/检查索引文件(.fai、.gzi) IGV中成功加载参考基因组 注意 索引文件必须与FASTA 文件在同一目录

画得有点糙,但逻辑很清楚。整体就三步:获取FASTA、生成索引、在IGV中加载。每一步都有坑,每一步我都踩过。

4.6 常见问题与解决方案

最后,我把我在项目中遇到过的几个典型问题整理了一下:

问题现象 可能原因 解决方案
IGV报错"Index not found" .fai文件缺失或文件名不匹配 用samtools faidx重新生成
加载FASTA后染色体名显示异常 FASTA标题行包含非法字符 检查并清理名称,去除空格和特殊符号
IGV内存溢出或响应极慢 FASTA文件太大或格式不规范 压缩为.bgzip格式,并生成.gzi索引
VCF/BAM与参考基因组不匹配 参考基因组版本不一致 用IGV的"Check Genome"功能验证
服务器加载hg38超时 网络环境差或服务器故障 从UCSC/Ensembl下载离线FASTA和索引

特别提醒:我曾经在一次培训中看到学员加载了hg19的参考基因组,却用hg38的注释文件,结果变异位点全偏了。参考基因组、比对结果、注释信息三者版本必须一致,这是最基本的底线。