mutectcaller

View as Markdown

This tool is an accelerated version of the GATK somatic variant caller, Mutect2, which takes aligned BAMs from the FQ2BAM tool, and outputs a VCF file. This can take as input either a single (“tumor-only”) BAM, or a pair of BAMs (“tumor-normal”) to provide a baseline to call somatic variants against.

The figure below shows the high-level functionality of mutectcaller. All dotted boxes indicate optional data, with some constraints.

The names of the tumor sample (for the --tumor-name option) and the normal sample (for the --normal-name option) can be extracted from the headers of their respective BAM files with samtools, which can be installed through apt-get:

$$ sudo apt-get install samtools

Or you can build it from source codes by following the instructions in samtools repo.

Once you have samtools installed on your system you can run this command to get the sample name (SM) field:

$$ 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

The sample name is the value after “SM:” (NA12878, in this example)

If there are multiple read group (@RG) lines and all of them have the same sample name you may safely use the common sample name. If there are multiple read group lines with multiple sample names, choose one sample name as the input. All reads with that sample name will be processed by mutectcaller and all other reads will be ignored. Currently only one sample name per BAM file is supported.

If there are no read group lines in the BAM header, or there is no sample name in the read group line, you will need to add read group information to the BAM file. This may be done by running this command:

$$ 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

This will update the sample name of all reads in this BAM file to “sample_sm”, and you can pass “sample_sm” as the sample name of this BAM file. Make sure you use the updated_file.bam as input to mutectcaller.

Refer to the mutectcaller Reference section for a detailed listing of all available options.

Quick Start

You can download the mutect sample dataset from here. Extract all files by running:

1$ tar -xvzf mutect_sample.tar.gz
2mutect_sample/
3mutect_sample/germline_resource.vcf.gz.tbi
4mutect_sample/force_call.vcf.gz.tbi
5mutect_sample/germline_resource.vcf.gz
6mutect_sample/tumor.bam.bai
7mutect_sample/GCA_000001405.15_GRCh38_no_alt_analysis_set.fa
8mutect_sample/force_call.vcf.gz
9mutect_sample/tumor.bam
10mutect_sample/normal.bam.bai
11mutect_sample/normal.bam

Inside the mutect_sample folder you will find the necessary input files including:

  • One reference FASTA (GCA_000001405.15_GRCh38_no_alt_analysis_set.fa)
  • One tumor BAM (tumor.bam)
  • One normal BAM (normal.bam)
  • One force_calling.vcf.gz VCF file
  • One germline_resource.vcf.gz VCF file

with all necessary indexes.

1# This command assumes all the inputs are in the current working directory and all the outputs go to the same place.
2docker run --rm --gpus all --volume $(pwd):/workdir --volume $(pwd):/outputdir \
3 --workdir /workdir \
4 nvcr.io/nvidia/clara/clara-parabricks:4.7.1-1 \
5 pbrun mutectcaller \
6 --ref /workdir/${REFERENCE_FILE} \
7 --tumor-name tumor_name_inside_bam_file \
8 --in-tumor-bam /workdir/${INPUT_TUMOR_BAM} \
9 --in-normal-bam /workdir/${INPUT_NORMAL_BAM} \
10 --normal-name normal_name_inside_bam_file \
11 --out-vcf /outputdir/${OUTPUT_VCF}

Compatible GATK4 Command

The command below is the GATK4 counterpart of the Parabricks command above. The output from this command will be identical to the output from the above command. Refer to the Output Comparison page for comparing the results.

1$ gatk Mutect2 \
2 -R <INPUT_DIR>/${REFERENCE_FILE} \
3 --input <INPUT_DIR>/${INPUT_TUMOR_BAM} \
4 --tumor-sample tumor_name_inside_bam_file \
5 --input <INPUT_DIR>/${INPUT_NORMAL_BAM} \
6 --normal-sample normal_name_inside_bam_file \
7 --output <OUTPUT_DIR>/${OUTPUT_VCF}

Mutect2 with Panel of Normals

Parabricks Mutect2 from version 3.7.0-1 has started supporting Panel of Normals to process variants. There are three steps involved:

  • prepon
  • running mutectcaller with the index generated by prepon
  • postpon, updating the VCF with PON information
1# The first command will generate input.pon that should be done once for the input.vcf.gz
2# This command assumes all the inputs are in the current working directory and all the outputs go to the same place.
3docker run --rm --gpus all --volume $(pwd):/workdir --volume $(pwd):/outputdir \
4 --workdir /workdir \
5 nvcr.io/nvidia/clara/clara-parabricks:4.7.1-1 \
6 pbrun prepon --in-pon-file /workdir/${INPUT_PON_VCF}
7
8# Run mutectcaller with the pon index
9# This command assumes all the inputs are in the current working directory and all the outputs go to the same place.
10docker run --rm --gpus all --volume $(pwd):/workdir --volume $(pwd):/outputdir \
11 --workdir /workdir \
12 nvcr.io/nvidia/clara/clara-parabricks:4.7.1-1 \
13 pbrun mutectcaller \
14 --ref /workdir/${REFERENCE_FILE} \
15 --tumor-name tumor \
16 --in-tumor-bam /workdir/${INPUT_TUMOR_BAM} \
17 --in-normal-bam /workdir/${INPUT_NORMAL_BAM} \
18 --pon /workdir/${INPUT_PON_VCF} \
19 --normal-name normal \
20 --out-vcf /outputdir/${OUTPUT_VCF}
21
22# Add the annotation to the output.vcf generated above
23# This command assumes all the inputs are in the current working directory and all the outputs go to the same place.
24docker run --rm --gpus all --volume $(pwd):/workdir --volume $(pwd):/outputdir \
25 --workdir /workdir \
26 nvcr.io/nvidia/clara/clara-parabricks:4.7.1-1 \
27 pbrun postpon \
28 --in-vcf /workdir/${OUTPUT_VCF} \
29 --in-pon-file /workdir/${INPUT_PON_FILE} \
30 --out-vcf /outputdir/${OUTPUT_ANNOTATED_VCF}

Source of Mismatches

While Parabricks MutectCaller does not lose any accuracy in functionality when compared with the GATK MutectCaller, there are a few implementation differences that can result in slightly different output files.

  • Log10 implementation

The log10 operation is used to compute the haplotype penalty score. The Java implementation java.lang.Math.log10() is slightly different from the C++ `cmath library, giving rise to small mismatches in computed scores. Different haplotypes might be selected because of this.

  • AVX

GATK calls Intel GKL (Genomics Kernel Library) which contains optimized versions of compute kernels (e.g. Smith-Waterman, PairHMM) to run on Intel Architecture (AVX, AVX2, AVX-512, and multicore). However, some SIMD intrinsics such as mm512_mul_ps` can generate a slightly different output when compared with the serial operations which our GPU implementation is based on.

  • HashMap, HashSet iteration

GATK can give non-deterministic outputs because iterating over a Java HashMap or HashSet does not preserve order. Parabricks always gives deterministic output by using a hash table that preserves the insertion order (similar to LinkedHashMap in Java).

Options

TypeNameRequired?Description
I/O--ref REFYesPath to the reference file.
I/O--out-vcf OUT_VCFYesPath of the VCF file after Variant Calling. (Allowed: .vcf, .vcf.gz)
I/O--in-tumor-bam IN_TUMOR_BAMYesPath of the BAM/CRAM file for tumor reads.
I/O--in-normal-bam IN_NORMAL_BAMNoPath of the BAM/CRAM file for normal reads.
I/O--in-tumor-recal-file IN_TUMOR_RECAL_FILENoPath of the report file after Base Quality Score Recalibration for tumor sample.
I/O--in-normal-recal-file IN_NORMAL_RECAL_FILENoPath of the report file after Base Quality Score Recalibration for normal sample.
I/O--interval-file INTERVAL_FILENoPath to an interval file in one of these formats: Picard-style (.interval_list or .picard), GATK-style (.list or .intervals), or BED file (.bed). This option can be used multiple times.
I/O--mutect-bam-output MUTECT_BAM_OUTPUTNoFile to which assembled haplotypes should be written. If passing with --run-partition, multiple BAM files will be written.
I/O--pon PONNoPath of the vcf.gz PON file. Make sure you run prepon first and there is a '.pon' file already.
I/O--mutect-germline-resource MUTECT_GERMLINE_RESOURCENoPath of the vcf.gz germline resource file. Population VCF of germline sequencing containing allele fractions.
I/O--mutect-f1r2-tar-gz MUTECT_F1R2_TAR_GZNoPath of the tar.gz of collecting F1R2 counts.
I/O--mutect-alleles MUTECT_ALLELESNoPath of the vcf.gz force-call file. The set of alleles to force-call regardless of evidence.
Tool--max-mnp-distance MAX_MNP_DISTANCENoTwo or more phased substitutions separated by this distance or less are merged into MNPs. (default: 1)
Tool--mutectcaller-options MUTECTCALLER_OPTIONSNoPass supported mutectcaller options as one string. The following are currently supported original mutectcaller options: -pcr-indel-model <NONE, HOSTILE, AGGRESSIVE, CONSERVATIVE>, -max-reads-per-alignment-start <int>, -A <AssemblyComplexity>, -min-dangling-branch-length <int> (e.g. --mutectcaller-options="-pcr-indel-model HOSTILE -max-reads-per-alignment-start 30").
Tool--initial-tumor-lod INITIAL_TUMOR_LODNoLog 10 odds threshold to consider pileup active.
Tool--tumor-lod-to-emit TUMOR_LOD_TO_EMITNoLog 10 odds threshold to emit variant to VCF.
Tool--pruning-lod-threshold PRUNING_LOD_THRESHOLDNoLn likelihood ratio threshold for adaptive pruning algorithm.
Tool--active-probability-threshold ACTIVE_PROBABILITY_THRESHOLDNoMinimum probability for a locus to be considered active.
Tool--no-alt-contigsNoIgnore commonly known alternate contigs.
Tool--genotype-germline-sitesNoCall all apparent germline site even though they will ultimately be filtered.
Tool--genotype-pon-sitesNoCall sites in the PoN even though they will ultimately be filtered.
Tool--force-call-filtered-allelesNoForce-call filtered alleles included in the resource specified by --alleles.
Tool--filter-reads-too-longNoIgnore all input BAM reads with size > 500bp.
Tool--minimum-mapping-quality MINIMUM_MAPPING_QUALITYNoMinimum mapping quality to keep (inclusive).
Tool--min-base-quality-score MIN_BASE_QUALITY_SCORENoMinimum base quality required to consider a base for calling.
Tool--f1r2-median-mq F1R2_MEDIAN_MQNoskip sites with median mapping quality below this value.
Tool--base-quality-score-threshold BASE_QUALITY_SCORE_THRESHOLDNoBase qualities below this threshold will be reduced to the minimum (6).
Tool--normal-lod NORMAL_LODNoLog 10 odds threshold for calling normal variant non-germline.
Tool--allow-non-unique-kmers-in-refNoAllow graphs that have non-unique kmers in the reference.
Tool--enable-dynamic-read-disqualification-for-genotypingNoWill enable less strict read disqualification low base quality reads.
Tool--recover-all-dangling-branchesNoRecover all dangling branches.
Tool--pileup-detectionNoIf enabled, the variant caller will create pileup-based haplotypes in addition to the assembly-based haplotype generation.
Tool--mitochondria-modeNoMitochondria mode sets emission and initial LODs to 0.
Tool--tumor-name TUMOR_NAMEYesName of the sample for tumor reads. This MUST match the SM tag in the tumor BAM file.
Tool--normal-name NORMAL_NAMENoName of the sample for normal reads. If specified, this MUST match the SM tag in the normal BAM file.
Tool-L INTERVAL, --interval INTERVALNoInterval within which to call the variants from the BAM/CRAM file. All intervals will have a padding of 100 to get read records, and overlapping intervals will be combined. Interval files should be passed using the --interval-file option. This option can be used multiple times (e.g. "-L chr1 -L chr2:10000 -L chr3:20000+ -L chr4:10000-20000").
Tool-ip INTERVAL_PADDING, --interval-padding INTERVAL_PADDINGNoAmount of padding (in base pairs) to add to each interval you are including.
Performance--mutect-low-memoryNoUse low memory mode in mutect caller.
Performance--run-partitionNoTurn on partition mode; divides genome into multiple partitions and runs 1 process per partition.
Performance--gpu-num-per-partition GPU_NUM_PER_PARTITIONNoNumber of GPUs to use per partition.
Performance--num-htvc-threads NUM_HTVC_THREADSNoNumber of CPU threads per GPU to use. (default: 5)
Runtime--verboseNoEnable verbose output.
Runtime--x3NoShow full command line arguments.
Runtime--logfile LOGFILENoPath to the log file. If not specified, messages will only be written to the standard error output.
Runtime--tmp-dir TMP_DIRNoFull path to the directory where temporary files will be stored. (default: .)
Runtime--with-petagene-dir WITH_PETAGENE_DIRNoFull path to the PetaGene installation directory. By default, this should have been installed at /opt/petagene. Use of this option also requires that the PetaLink library has been preloaded by setting the LD_PRELOAD environment variable. Optionally set the PETASUITE_REFPATH and PGCLOUD_CREDPATH environment variables that are used for data and credentials. Optionally set the PetaLinkMode environment variable that is used to further configure PetaLink, notably setting it to "+write" to enable outputting compressed BAM and .fastq files.
Runtime--keep-tmpNoDo not delete the directory storing temporary files after completion.
Runtime--no-seccomp-overrideNoDo not override seccomp options for docker.
Runtime--versionNoView compatible software versions.
Runtime--preserve-file-symlinksNoOverride default behavior to keep file symlinks intact and *not* resolve the symlink.
Runtime--num-gpus NUM_GPUSNoNumber of GPUs to use for a run. (default: 1)