第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, Mutect2SNP/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画了一个流程,方便你理解各阶段间的数据流向。注意:每个环节输出的中间文件,尽量保留,因为后期质控需要回溯。

GATK核心流程:从原始数据到变异集 原始FASTQ/BAM 数据预处理 变异发现 联合基因分型 过滤与评估 功能注释 说明: 每个阶段都会产生中间文件(.bam, .g.vcf等) 后期质控节点主要对过滤与评估阶段的输出进行深度检查。 推荐在每个交汇点保存版本化的结果。

小建议:如果你在做大型队列分析,推荐将每个流程的版本号记录在文件头部。比如“preprocess_gatk4.5.sample01.bam”。这对后期纠错、回溯非常有帮助。

1.5 实操提醒:环境验证

完成安装后,建议先跑一个官方测试数据集。跑通后,你会对GATK各模块的调用参数有更直观的认识。我曾遇到一位同学,docker参数写漏了--java-options标记,结果AllocateMemory超出限制,整整卡了两天。

gatk FingerprintReadCounts \
  -O /dev/stdout | head -5

1.6 小结

这一章内容偏基础,但别小看环境搭建这一步。很多后期质控排查的根因,往往就在初始配置不当上。后面的章节,我们会深入每个节点到底该怎么看、怎么查、怎么修。