2. Mutect2 的安装与配置:环境依赖与运行流程归纳总结
好,咱们直接进入正题。这一章我带你把 Mutect2 的安装和配置捋一遍。说实话,很多人在这一步就栽了跟头——不是缺依赖,就是版本没对上。我自己也踩过几次坑,所以这一章我会把那些容易忽略的细节都点出来。
2.1 环境依赖概览
在装 Mutect2 之前,你得先把环境搭好。它不是一个孤立的工具,而是 GATK 套件里的一员。所以,你装的其实是 GATK,然后调用里面的 Mutect2 模块。
我建议你先把下面这几样准备好:
| 依赖项 | 版本要求 | 说明 |
|---|---|---|
| Java Runtime (JRE) | ≥ 1.8 | GATK 4.x 依赖 Java 8 或更高版本 |
| GATK | 4.2.x 或 4.3.x | Mutect2 是 GATK 中的一个工具 |
| 参考基因组 | GRCh38 / hg19 | 必须建立 .dict 和 .fai 索引 |
| BAM / CRAM 文件 | 已排序、去重 | 最好有 .bai 或 .crai 索引 |
| 内存 | ≥ 8 GB 推荐 16 GB | WGS 数据建议 32 GB 以上 |
关键点: 参考基因组的索引文件(.dict 和 .fai)经常被人忘掉。没有它们,Mutect2 启动就会报错。我早期就因为这个卡了整整一个下午……后来养成了跑任何工具前先检查索引的习惯。
2.2 安装方式详解
安装 GATK 有几种主流方式。我个人比较偏爱 Docker 和 Conda,因为隔离性好,版本切换也方便。不过你要是只在服务器上跑一次任务,直接下载 jar 包也够用。
方式一:直接下载 GATK jar 包
去 GATK 的官方 GitHub Release 页面,找到对应版本,下载 gatk-package-<version>.zip。解压后,里面有一个 gatk 脚本和 gatk-package-<version>-local.jar。
# 解压
unzip gatk-4.2.6.1.zip
cd gatk-4.2.6.1
# 验证能否运行
./gatk --version
只要能打印出版本号,就算装好了。嗯,就是这么简单。
方式二:使用 Conda 安装
你要是已经用 Conda 管理生物信息软件,那直接一行命令搞定:
conda create -n gatk_env -c bioconda gatk4
conda activate gatk_env
gatk --version
小技巧: Conda 安装时可能会因为依赖冲突卡住。我习惯先创建一个干净的环境,再单独装 gatk4,避免跟其他软件的 Python 版本打架。
方式三:Docker 容器
这是我最推荐的方式,尤其是做生产环境或需要在集群上跑任务时。Broad Institute 官方维护了 GATK 的 Docker 镜像。
# 拉取最新版
docker pull broadinstitute/gatk:latest
# 运行 Mutect2(交互式)
docker run --rm -v /your/data:/data broadinstitute/gatk gatk Mutect2 \
-R /data/ref/hg38.fa \
-I /data/tumor.bam \
-O /data/output.vcf.gz
用 Docker 的好处是——你永远不会把宿主机的 Java 环境搞乱。我曾经在服务器上同时维护三个 Java 版本,切换起来真的头疼。后来全面切到 Docker,世界清净了。
2.3 运行流程归纳
装好之后,别急着跑。Mutect2 的完整运行流程其实分三大步。我把它画成了一张流程图,方便你对照着看。
这张图把从环境准备到正式运行的五个阶段串起来了。你每次跑任务前,都可以拿它做 checklist,避免漏掉关键步骤。
第一步:预处理(数据准备)
在运行 Mutect2 之前,你的 BAM/CRAM 文件必须满足几个条件:
- 已排序(按坐标排序)
- 已去重(标记 PCR 重复)
- 已建立索引(.bai 或 .crai)
- 肿瘤-正常配对(如果有正常样本,一定要配对跑)
我自己遇到过最蠢的错误是——拿了一个没去重的 BAM 直接跑 Mutect2,结果出来的突变列表里全是 PCR 重复造成的假阳性。所以,预处理真的不能省。
第二步:运行 Mutect2 核心命令
预处理完成后,就可以跑 Mutect2 了。一个典型的肿瘤-正常配对命令如下:
gatk Mutect2 \
-R /path/to/ref/hg38.fa \
-I /path/to/tumor.bam \
-I /path/to/normal.bam \
-normal normal_sample_name \
--germline-resource /path/to/gnomad.vcf.gz \
--panel-of-normals /path/to/pon.vcf.gz \
-O /path/to/output/raw_somatic.vcf.gz
注意: -normal 参数后面跟的是正常样本的名称(SM tag),不是文件名。这两个容易搞混。我见过不止一个人在这里报错,然后跑来问我为什么 Mutect2 找不到样本……
第三步:过滤与阈值调优
这一步其实才刚刚进入我们这个课程的核心。Mutect2 输出的原始 VCF 里包含大量噪音,需要用 FilterMutectCalls 进行过滤。过滤阈值的设置会直接影响你最终得到的突变数量和质量。
gatk FilterMutectCalls \
-V raw_somatic.vcf.gz \
-R /path/to/ref/hg38.fa \
--min-allele-fraction 0.05 \
--max-events-in-region 2 \
-O filtered_somatic.vcf.gz
你看,--min-allele-fraction 和 --max-events-in-region 就是两个关键的过滤阈值。在后面的章节里,我会专门讲怎么调这些参数。
2.4 验证安装是否成功
装完了、跑过了,怎么确认一切正常?我一般用下面这个小测试:
# 用自带的小测试数据跑一遍
gatk Mutect2 \
-R /path/to/gatk/src/test/resources/large/hg38.fa \
-I /path/to/gatk/src/test/resources/large/tumor_1.bam \
-I /path/to/gatk/src/test/resources/large/normal_1.bam \
-normal NA12878 \
-O test_output.vcf.gz
# 检查输出文件是否生成
ls -lh test_output.vcf.gz
如果能正常生成 VCF 文件,且日志里没有 ERROR 级别的报错,那安装就成功了。
一个小经验: 我第一次装 GATK 4.2.1 时,用 Conda 装完发现 java 版本被降级到了 1.7,Mutect2 启动就崩。后来我改用 Docker 镜像,再也没有为 Java 版本操过心。所以,如果你不想折腾环境,Docker 真的是最稳的选择。
2.5 目录结构与文件组织
我建议你从一开始就建立清晰的文件目录结构。这看起来是小事,但等你跑了几十个样本之后,一个规范的目录结构能让你少掉很多头发。
project/
├── ref/
│ ├── hg38.fa
│ ├── hg38.fa.fai
│ └── hg38.dict
├── bam/
│ ├── tumor_sample1.bam
│ ├── tumor_sample1.bai
│ ├── normal_sample1.bam
│ └── normal_sample1.bai
├── pon/
│ └── pon.vcf.gz
├── germline/
│ └── gnomad.vcf.gz
├── output/
│ ├── raw/
│ │ └── sample1_raw.vcf.gz
│ └── filtered/
│ └── sample1_filtered.vcf.gz
└── logs/
└── sample1_mutect2.log
我自己的习惯是:每个样本单独建一个输出目录,日志和 VCF 分开存放。这样后面做批量调参时,找文件会非常快。
核心要点回顾:
- 环境依赖记住三条:Java 8+、参考基因组索引、BAM 排序去重
- 安装方式推荐 Docker(隔离性好)或 Conda(快捷)
- 运行流程三步走:预处理 → Mutect2 → FilterMutectCalls
- 验证安装用小测试数据跑一遍,确认无 ERROR 即可