GATK4 — 业界标准变异检测流程工具包¶
一句话说明¶
GATK4 是 Broad Institute 出品的黄金标准变异检测套件——从WGS/WES数据中精确找出SNP(单碱基变异)和Indel(插入缺失),就像用最严格的"质检流水线"筛查基因组中的变异。
安装与配置¶
# 方法1:conda安装(推荐,版本4.6.0.0)
conda create -n gatk4 -c bioconda -c conda-forge \
gatk4=4.6.0.0 \ # 指定最新稳定版本
samtools \
picard \
bwa
conda activate gatk4
# 验证安装
gatk --version # 应显示 4.6.0.0
# 方法2:Docker运行(最干净,无依赖冲突)
docker pull broadinstitute/gatk:4.6.0.0
docker run -v $(pwd):/data broadinstitute/gatk:4.6.0.0 \
gatk --version
# 方法3:下载预编译包
wget https://github.com/broadinstitute/gatk/releases/download/4.6.0.0/gatk-4.6.0.0.zip
unzip gatk-4.6.0.0.zip
./gatk-4.6.0.0/gatk --version
# GATK需要Java 17
java -version # 确认Java版本
核心用法¶
BQSR — 碱基质量分数重校正(预处理)¶
# 第一步:统计已知变异位点的碱基质量偏差
gatk BaseRecalibrator \
-I aligned.bam \ # 输入比对BAM
-R reference.fasta \ # 参考基因组
--known-sites dbsnp.vcf.gz \ # 已知SNP数据库
--known-sites mills_indels.vcf.gz \ # 已知Indel数据库
-O recal_data.table # 输出校正表
# 第二步:应用校正,生成校正后BAM
gatk ApplyBQSR \
-I aligned.bam \
-R reference.fasta \
--bqsr-recal-file recal_data.table \
-O recal.bam # 校正后的BAM文件
HaplotypeCaller — 单样本变异检测¶
# 模式一:直接输出VCF(少量样本)
gatk HaplotypeCaller \
-R reference.fasta \
-I recal.bam \
-O output.vcf.gz \
--native-pair-hmm-threads 4 # GPU加速的HMM线程数
# 模式二:输出GVCF(多样本联合检测推荐)
gatk HaplotypeCaller \
-R reference.fasta \
-I recal.bam \
-O sample.g.vcf.gz \
-ERC GVCF # 输出每个位置信息的GVCF
GenomicsDBImport + GenotypeGVCFs — 多样本联合基因分型¶
# 合并多个GVCF到GenomicsDB数据库
gatk GenomicsDBImport \
-V sample1.g.vcf.gz \
-V sample2.g.vcf.gz \
-V sample3.g.vcf.gz \
--genomicsdb-workspace-path genomicsdb \
-L chr1 -L chr2 # 按染色体分批运行(推荐)
# 从数据库联合基因分型
gatk GenotypeGVCFs \
-R reference.fasta \
-V gendb://genomicsdb \ # 输入GenomicsDB路径
-O cohort.vcf.gz
参数详解¶
| 工具 | 参数 | 说明 |
|---|---|---|
| HaplotypeCaller | -ERC GVCF | 输出包含所有位置的GVCF(多样本时必须) |
| HaplotypeCaller | -L | 限定分析区域(WES捕获区间床文件) |
| HaplotypeCaller | --dbsnp | dbSNP数据库,用于注释已知变异 |
| BaseRecalibrator | --known-sites | 已知变异VCF,可指定多个 |
| GenomicsDBImport | -L | 按染色体/区间分批,加快速度 |
| VariantFiltration | --filter-expression | 硬过滤表达式 |
实战案例¶
# 完整GATK4 GVCF流程(适用于人类基因组hg38)
REF="hg38.fasta"
DBSNP="dbsnp_138.hg38.vcf.gz"
MILLS="Mills_and_1000G_gold_standard.indels.hg38.vcf.gz"
# 1. BQSR预处理
gatk BaseRecalibrator \
-I sample.bam -R $REF \
--known-sites $DBSNP --known-sites $MILLS \
-O recal.table
gatk ApplyBQSR -I sample.bam -R $REF \
--bqsr-recal-file recal.table -O sample_recal.bam
# 2. HaplotypeCaller生成GVCF
gatk HaplotypeCaller \
-R $REF -I sample_recal.bam \
-O sample.g.vcf.gz -ERC GVCF \
--native-pair-hmm-threads 8
# 3. 变异过滤(硬过滤示例,无足够样本数时替代VQSR)
gatk VariantFiltration \
-R $REF -V cohort.vcf.gz \
--filter-expression "QD < 2.0" --filter-name "QD2" \
--filter-expression "MQ < 40.0" --filter-name "MQ40" \
-O filtered.vcf.gz
# 4. 选取通过过滤的SNP
gatk SelectVariants \
-V filtered.vcf.gz \
--select-type-to-include SNP \
--exclude-filtered \
-O snps_pass.vcf.gz
常见报错与解决¶
报错1:SAMException: File ... is not sorted in coordinate order - 原因:输入BAM未按坐标排序 - 解决:samtools sort -o sorted.bam input.bam && samtools index sorted.bam
报错2:Traversal by intervals was requested but some intervals are not covered - 原因(GATK 4.3-4.5的旧bug):区间文件中含参考基因组没有的染色体名 - 解决:升级到GATK 4.6.0.0(已修复),或过滤区间文件-L仅保留存在的染色体
报错3:堆内存溢出 java.lang.OutOfMemoryError - 原因:默认JVM内存不足 - 解决:添加 --java-options "-Xmx32g" 参数增加内存
速查表¶
| 命令 | 用途 |
|---|---|
gatk BaseRecalibrator | 碱基质量分数重校正第一步 |
gatk ApplyBQSR | 应用BQSR校正 |
gatk HaplotypeCaller -ERC GVCF | 生成GVCF(多样本推荐) |
gatk GenomicsDBImport | 合并多GVCF到数据库 |
gatk GenotypeGVCFs | 联合基因分型 |
gatk VariantFiltration | 变异硬过滤 |
gatk SelectVariants --select-type SNP | 提取SNP |
gatk SelectVariants --select-type INDEL | 提取Indel |
gatk --java-options "-Xmx32g" | 设置JVM内存 |