第1章:GATK概述与环境搭建
各位同学,咱们今天聊GATK。你可能听说过,这是生信行业做变异检测的“金标准”。干了这么多年,我从二代测序入门到三代数据分析,GATK就像是工具箱里最趁手的那把扳手。说实话,没有它,很多数据质量分析会变成猜谜。
1.1 GATK的发展历程:从单样本到万样本
GATK全称是Genome Analysis Toolkit,由Broad Institute开发。最早是2010年左右出来的版本,那时候主要对付单样本的局部重比对和碱基质量校正。我那时刚接触WGS数据,程序崩溃是家常便饭,主要靠软链接加硬写的路径来跑。
关键里程碑:
- v1.0-2.0:单样本数据分析为主,靠Queue/Pipeline脚本编排流程。
- v3.0:引入HaplotypeCaller,这是个转折点——用de novo组装纠正变异,彻底告别了老一套的概率模型。
- v4.0:重写核心引擎,去掉了Queue,全面转向Spark/Python。性能提升明显,但自定义逻辑得跟着改。
- v4.1-4.5:支持GVCF工作流,Joint calling可以处理数万样本。这个迭代对大型队列研究特别重要。
为什么会从Perl/Java变成Spark?说白了,数据量涨得太快。单机跑WES还能忍,WGS几百个样本就吃不消了。我2018年帮医院搭建分析环境时,一个20样本的WGS项目用v3.8跑了整整两周。换成v4.1,同样的机器缩短到5天,差距非常明显。
1.2 GATK的核心模块与功能
整个GATK工具集按用途可以分成几块。我习惯把它们叫做“流水线上工位”,每个工位干一件事,但前后依赖关系很强。
| 模块 | 核心工具 | 主要功能 |
|---|---|---|
| 数据预处理 | MarkDuplicates, BaseRecalibrator | 去冗余、碱基质量重校准 |
| 变异发现 | HaplotypeCaller, Mutect2 | SNP/Indel检测、体细胞突变 |
| 过滤与评估 | VariantFiltration, SelectVariants | 硬过滤、VQSR、变异子集提取 |
| 联合分析 | GenomicsDBImport, GenotypeGVCFs | 多样本合并、联合基因分型 |
| 功能注释 | VariantAnnotator, Funcotator | 变异位置注释、影响预测 |
记得有一年,我一位同事在过滤SNP时用了默认参数,结果很多真正的罕见变异被误杀。后来帮他看了YAML,发现VQSR的tranches设得太严。从那以后,我始终强调:先理解数据分布,再调过滤参数。
一个实用经验:不要一上来就用VQSR。如果你的样本少于30个,或者实验设计中有明显批次效应,硬过滤更靠谱。我在农口项目里试过好几次,硬过滤虽然粗糙,但胜在稳定。
1.3 安装与配置:conda与docker两种方式
安装GATK,现在主流是两个路子。我个人更倾向于docker,尤其是多人协作时。但conda上手快,适合个人反复调试。
1.3.1 conda安装
创建独立环境,避免包冲突。GATK对Java依赖较严格,某些老版本必须指定JDK8。我曾踩过一个坑:新系统默认OpenJDK11,结果BaseRecalibrator跑完后产生负分数,整整查了一天。
conda create -n gatk_env python=3.8
conda activate gatk_env
conda install -c bioconda -c conda-forge gatk4=4.5.0.0
验证安装:
gatk --version
如果输出形如“4.5.0.0”,就算到位。
注意:conda频道里有时会出现测试版本。我建议核实版本号是否与Broad官网发布的正式版一致。我曾经装过一个4.3.x的pre-release,结果MultiSample Calling时频繁报错。
1.3.2 docker安装
docker能快速复现别人配置好的环境。最稳妥的是Pull Broad官方镜像,里面会有完整的依赖包和Java环境,你直接mount数据目录就能跑。
docker pull broadinstitute/gatk:4.5.0.0
运行示例:
docker run -v /path/to/data:/data broadinstitute/gatk:4.5.0.0 \
gatk HaplotypeCaller -R /data/ref.fasta -I /data/input.bam -O /data/output.vcf
为什么推荐docker:你想想看,当你把一个流程发给同事,他不需要为安装依赖纠结。我曾经给一位Linux不太熟的同事部署分析流程,10分钟就搞定了。
1.4 GATK核心流程总览
整条分析线可以简洁地用下面这张图概括。我用SVG画了一个流程,方便你理解各阶段间的数据流向。注意:每个环节输出的中间文件,尽量保留,因为后期质控需要回溯。
小建议:如果你在做大型队列分析,推荐将每个流程的版本号记录在文件头部。比如“preprocess_gatk4.5.sample01.bam”。这对后期纠错、回溯非常有帮助。
1.5 实操提醒:环境验证
完成安装后,建议先跑一个官方测试数据集。跑通后,你会对GATK各模块的调用参数有更直观的认识。我曾遇到一位同学,docker参数写漏了--java-options标记,结果AllocateMemory超出限制,整整卡了两天。
gatk FingerprintReadCounts \
-O /dev/stdout | head -5
1.6 小结
这一章内容偏基础,但别小看环境搭建这一步。很多后期质控排查的根因,往往就在初始配置不当上。后面的章节,我们会深入每个节点到底该怎么看、怎么查、怎么修。