mutectcaller
此工具是 GATK 体细胞变异检出器 Mutect2 的加速版本,它接受来自 FQ2BAM 工具的比对 BAM 文件,并输出 VCF 文件。它可以接受单个(“仅肿瘤”)BAM 或一对 BAM(“肿瘤-正常”)作为输入,以提供基线来检测体细胞变异。
下图显示了 mutectcaller 的高级功能。所有虚线框表示可选数据,但有一些约束。
肿瘤样本的名称(对于 --tumor-name
选项)和正常样本的名称(对于 --normal-name
选项)可以从各自 BAM 文件的标头中提取,使用 samtools,可以通过 apt-get 安装 samtools。
$ sudo apt-get install samtools
或者,您可以按照 samtools 仓库 中的说明从源代码构建它。
在您的系统上安装 samtools 后,您可以运行此命令来获取样本名称 (SM) 字段
$ samtools view NA12878.bam -H | grep '@RG'
@RG ID:HJYFJ.4 SM:NA12878 LB:Pond-492093 PL:illumina PU:HJYFJCCXX160204.4.GCCGCAAC CN:BI DT:2016-02-04T00:00:00-0500
样本名称是 "SM:" 之后的值(在本例中为 NA12878)
如果存在多个读取组 (@RG) 行,并且所有行都具有相同的样本名称,您可以安全地使用通用样本名称。如果存在具有多个样本名称的多个读取组行,请选择一个样本名称作为输入。具有该样本名称的所有读取都将由 mutectcaller
处理,所有其他读取将被忽略。目前,每个 BAM 文件仅支持一个样本名称。
如果 BAM 标头中没有读取组行,或者读取组行中没有样本名称,您将需要向 BAM 文件添加读取组信息。这可以通过运行此命令来完成
$ samtools addreplacerg \
-r "@RG\tID:sample_rg1\tLB:lib1\tPL:bar\tSM:sample_sm\tPU:sample_rg1" \
original_file.bam \
-o updated_file.bam \
-O BAM
这将把此 BAM 文件中所有读取的样本名称更新为 "sample_sm",您可以将 "sample_sm" 作为此 BAM 文件的样本名称传递。确保使用 updated_file.bam 作为 mutectcaller
的输入。
有关所有可用选项的详细列表,请参阅 mutectcaller 参考 部分。
您可以从此处下载 mutect 样本数据集。通过运行以下命令解压所有文件
$ tar -xvzf mutect_sample.tar.gz
mutect_sample/
mutect_sample/germline_resource.vcf.gz.tbi
mutect_sample/force_call.vcf.gz.tbi
mutect_sample/germline_resource.vcf.gz
mutect_sample/tumor.bam.bai
mutect_sample/GCA_000001405.15_GRCh38_no_alt_analysis_set.fa
mutect_sample/force_call.vcf.gz
mutect_sample/tumor.bam
mutect_sample/normal.bam.bai
mutect_sample/normal.bam
在 mutect_sample
文件夹中,您将找到必要的输入文件,包括
一个参考 FASTA 文件 (GCA_000001405.15_GRCh38_no_alt_analysis_set.fa),
一个肿瘤 BAM 文件 (tumor.bam),
一个正常 BAM 文件 (normal.bam),
一个 force_calling.vcf.gz VCF 文件和
一个 germline_resource.vcf.gz VCF 文件
以及所有必要的索引。
# This command assumes all the inputs are in INPUT_DIR and all the outputs go to OUTPUT_DIR.
docker run --rm --gpus all --volume INPUT_DIR:/workdir --volume OUTPUT_DIR:/outputdir \
--workdir /workdir \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun mutectcaller \
--ref /workdir/${REFERENCE_FILE} \
--tumor-name tumor_name_inside_bam_file \
--in-tumor-bam /workdir/${INPUT_TUMOR_BAM} \
--in-normal-bam /workdir/${INPUT_NORMAL_BAM} \
--normal-name normal_name_inside_bam_file \
--out-vcf /outputdir/${OUTPUT_VCF}
以下命令是上述 Parabricks 命令的 GATK4 对应命令。此命令的输出将与上述命令的输出相同。有关结果比较,请参阅输出比较页面。
$ gatk Mutect2 \
-R <INPUT_DIR>/${REFERENCE_FILE} \
--input <INPUT_DIR>/${INPUT_TUMOR_BAM} \
--tumor-sample tumor_name_inside_bam_file \
--input <INPUT_DIR>/${INPUT_NORMAL_BAM} \
--normal-sample normal_name_inside_bam_file \
--output <OUTPUT_DIR>/${OUTPUT_VCF}
Parabricks Mutect2 从 3.7.0-1 版本开始支持 Panel of Normals 来处理变异。涉及三个步骤
prepon
使用 prepon 生成的索引运行 mutectcaller
postpon,使用 PON 信息更新 VCF
# The first command will generate input.pon that should be done once for the input.vcf.gz
# This command assumes all the inputs are in INPUT_DIR and all the outputs go to OUTPUT_DIR.
docker run --rm --gpus all --volume INPUT_DIR:/workdir --volume OUTPUT_DIR:/outputdir \
--workdir /workdir \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun prepon --in-pon-file /workdir/${INPUT_PON_VCF}
# Run mutectcaller with the pon index
# This command assumes all the inputs are in INPUT_DIR and all the outputs go to OUTPUT_DIR.
docker run --rm --gpus all --volume INPUT_DIR:/workdir --volume OUTPUT_DIR:/outputdir \
--workdir /workdir \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun mutectcaller \
--ref /workdir/${REFERENCE_FILE} \
--tumor-name tumor \
--in-tumor-bam /workdir/${INPUT_TUMOR_BAM} \
--in-normal-bam /workdir/${INPUT_NORMAL_BAM} \
--pon /workdir/${INPUT_PON_VCF} \
--normal-name normal \
--out-vcf /outputdir/${OUTPUT_VCF}
# Add the annotation to the output.vcf generated above
# This command assumes all the inputs are in INPUT_DIR and all the outputs go to OUTPUT_DIR.
docker run --rm --gpus all --volume INPUT_DIR:/workdir --volume OUTPUT_DIR:/outputdir \
--workdir /workdir \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun postpon \
--in-vcf /workdir/${OUTPUT_VCF} \
--in-pon-file /workdir/${INPUT_PON_FILE} \
--out-vcf /outputdir/${OUTPUT_ANNOTATED_VCF}
虽然与 GATK MutectCaller 相比,Parabricks MutectCaller 在功能上不会降低任何准确性,但仍有一些实现差异可能会导致略有不同的输出文件。
Log10 实现
log10
操作用于计算单倍型惩罚分数。Java 实现 java.lang.Math.log10()
与 C++ cmath
库略有不同,导致计算分数略有不匹配。由于这个原因,可能会选择不同的单倍型。
AVX
GATK 调用 Intel GKL(基因组内核库),其中包含计算内核(例如 Smith-Waterman、PairHMM)的优化版本,以在 Intel 架构(AVX、AVX2、AVX-512 和多核)上运行。但是,与我们的 GPU 实现所基于的串行操作相比,某些 SIMD 内在函数(例如 _mm512_mul_ps
)可能会生成略有不同的输出。
HashMap、HashSet 迭代
GATK 可能会给出不确定的输出,因为迭代 Java HashMap
或 HashSet
不会保留顺序。Parabricks 始终通过使用保留插入顺序的哈希表(类似于 Java 中的 LinkedHashMap
)来提供确定性输出。
运行 GPU mutect2 以将 BAM/CRAM 转换为 VCF。
输入/输出文件选项
- --ref REF
-
参考文件的路径。(默认值:None)
此选项为必选项。
- --out-vcf OUT_VCF
-
变异检出后 VCF 文件的路径。(默认值:None)
此选项为必选项。
- --in-tumor-bam IN_TUMOR_BAM
-
肿瘤读取的 BAM/CRAM 文件的路径。(默认值:None)
此选项为必选项。
- --in-normal-bam IN_NORMAL_BAM
-
正常读取的 BAM/CRAM 文件的路径。(默认值:None)
- --in-tumor-recal-file IN_TUMOR_RECAL_FILE
-
肿瘤样本碱基质量分数重校准后的报告文件路径。(默认值:None)
- --in-normal-recal-file IN_NORMAL_RECAL_FILE
-
正常样本碱基质量分数重校准后的报告文件路径。(默认值:None)
- --interval-file INTERVAL_FILE
-
间隔文件的路径,格式为以下格式之一:Picard 样式(.interval_list 或 .picard)、GATK 样式(.list 或 .intervals)或 BED 文件 (.bed)。此选项可以多次使用。(默认值:None)
- --mutect-bam-output MUTECT_BAM_OUTPUT
-
应写入组装单倍型的文件。如果使用 --run-partition 传递,将输出多个 BAM 文件。(默认值:None)
- --pon PON
-
vcf.gz PON 文件的路径。确保您首先运行 prepon,并且已存在 '.pon' 文件。(默认值:None)
- --mutect-germline-resource MUTECT_GERMLINE_RESOURCE
-
vcf.gz 种系资源文件的路径。包含等位基因分数的种系测序群体 VCF。(默认值:None)
- --mutect-alleles MUTECT_ALLELES
-
vcf.gz 强制调用文件的路径。要强制调用的等位基因集,无论证据如何。(默认值:None)
工具选项
- --max-mnp-distance MAX_MNP_DISTANCE
-
两个或多个由该距离或更小距离分隔的定相取代合并为 MNP。(默认值:1)
- --mutectcaller-options MUTECTCALLER_OPTIONS
-
将支持的 mutectcaller 选项作为字符串传递。目前支持以下原始 mutectcaller 选项:-pcr-indel-model <NONE, HOSTILE, AGGRESSIVE, CONSERVATIVE>、-max-reads-per-alignment-start <int>,(例如 --mutectcaller-options="-pcr-indel-model HOSTILE -max-reads-per-alignment-start 30")。(默认值:None)
- --initial-tumor-lod INITIAL_TUMOR_LOD
-
考虑堆积激活的 Log 10 优势阈值。(默认值:None)
- --tumor-lod-to-emit TUMOR_LOD_TO_EMIT
-
将变异体发射到 VCF 的 Log 10 优势阈值。(默认值:None)
- --pruning-lod-threshold PRUNING_LOD_THRESHOLD
-
自适应剪枝算法的 Ln 似然比阈值。(默认值:None)
- --active-probability-threshold ACTIVE_PROBABILITY_THRESHOLD
-
位点被视为激活的最小概率。(默认值:None)
- --no-alt-contigs
-
忽略常见的替代 contigs。(默认值:None)
- --genotype-germline-sites
-
调用所有明显的种系位点,即使它们最终会被过滤掉。(默认值:None)
- --genotype-pon-sites
-
调用 PoN 中的位点,即使它们最终会被过滤掉。(默认值:None)
- --force-call-filtered-alleles
-
强制调用 --alleles 指定的资源中包含的已过滤等位基因。(默认值:None)
- --filter-reads-too-long
-
忽略所有大小 > 500bp 的输入 BAM 读取。(默认值:None)
- --tumor-name TUMOR_NAME
-
肿瘤读取样本的名称。这必须与肿瘤 BAM 文件中的 SM 标签匹配。(默认值:None)
此选项为必选项。
- --normal-name NORMAL_NAME
-
正常读取样本的名称。如果指定,则必须与正常 BAM 文件中的 SM 标签匹配。(默认值:None)
- -L INTERVAL, --interval INTERVAL
-
从 BAM/CRAM 文件中调用变异的区间。所有区间都将具有 100 的填充以获取读取记录,并且重叠的区间将被组合。间隔文件应使用 --interval-file 选项传递。此选项可以多次使用(例如 "-L chr1 -L chr2:10000 -L chr3:20000+ -L chr4:10000-20000")。(默认值:None)
- -ip INTERVAL_PADDING, --interval-padding INTERVAL_PADDING
-
要添加到您包含的每个区间的填充量(以碱基对为单位)。(默认值:None)
性能选项
- --mutect-low-memory
-
在 mutect 调用器中使用低内存模式。(默认值:None)
- --run-partition
-
打开分区模式;将基因组划分为多个分区,每个分区运行 1 个进程。(默认值:None)
- --gpu-num-per-partition GPU_NUM_PER_PARTITION
-
每个分区要使用的 GPU 数量。(默认值:None)
- --num-htvc-threads NUM_HTVC_THREADS
-
要使用的 CPU 线程数。(默认值:5)
常用选项
- --logfile LOGFILE
-
日志文件的路径。如果未指定,消息将仅写入标准错误输出。(默认值:None)
- --tmp-dir TMP_DIR
-
将存储临时文件的目录的完整路径。
- --with-petagene-dir WITH_PETAGENE_DIR
-
PetaGene 安装目录的完整路径。默认情况下,这应已安装在 /opt/petagene。使用此选项还需要通过设置 LD_PRELOAD 环境变量预加载 PetaLink 库。可以选择设置用于数据和凭据的 PETASUITE_REFPATH 和 PGCLOUD_CREDPATH 环境变量(默认值:None)
- --keep-tmp
-
完成操作后,不要删除存储临时文件的目录。
- --no-seccomp-override
-
不要覆盖 docker 的 seccomp 选项(默认值:None)。
- --version
-
查看兼容的软件版本。
GPU 选项
- --num-gpus NUM_GPUS
-
运行要使用的 GPU 数量。将使用 GPU 0..(NUM_GPUS-1)。