Skip to content

Step 15: SV Quality Annotation with duphold

What This Does

Adds depth-based quality scores to structural variant VCFs, enabling simple filtering of false positive SVs. duphold annotates each SV call with three scores derived from read-depth evidence around the breakpoints.

Why

Manta (step 4) calls structural variants from paired-end and split-read evidence, but many calls are false positives. duphold adds depth-of-coverage annotations that allow filtering without losing true calls — it removes 63% of false positive deletions while retaining 99% of true ones.

Tool

  • duphold (Brent Pedersen)

Docker Image

  • DUPHOLD_IMAGE

Pinned in versions.env; Image versions lists the current tag.

Annotations Added

duphold writes these as FORMAT fields (one value per sample), not INFO fields.

Tag Meaning Interpretation
DHFC Fold-change of depth inside the SV vs the rest of the chromosome it is on General quality indicator
DHBFC Fold-change of depth inside the SV vs genome bins with similar GC content > 1.3 for duplications supports a real duplication (depth rises)
DHFFC Fold-change of depth inside the SV vs its flanking regions < 0.7 for deletions supports a real deletion (depth drops as expected)

Command

source versions.env   # from the repository root
REF_FASTA=reference/GRCh38_no_alt_analysis_set.fasta   # see 00-reference-setup.md#the-reference-path-on-every-page
docker run --rm \
  --cpus 4 --memory 8g \
  -v ${GENOME_DIR}:/genome \
  "${DUPHOLD_IMAGE}" \
  duphold \
  -v /genome/${SAMPLE}/manta/results/variants/diploidSV.vcf.gz \
  -b /genome/${SAMPLE}/aligned/${SAMPLE}_sorted.bam \
  -f "/genome/${REF_FASTA}" \
  -o /genome/${SAMPLE}/duphold/${SAMPLE}_sv_duphold.vcf

Filtering Examples

The tags are FORMAT fields, so the expressions use FMT/<tag>[0] (the first sample).

# Keep only high-confidence deletions (DHFFC < 0.7)
bcftools view -i 'SVTYPE="DEL" && FMT/DHFFC[0] < 0.7' ${SAMPLE}/duphold/${SAMPLE}_sv_duphold.vcf

# Keep only high-confidence duplications (DHBFC > 1.3)
bcftools view -i 'SVTYPE="DUP" && FMT/DHBFC[0] > 1.3' ${SAMPLE}/duphold/${SAMPLE}_sv_duphold.vcf

Runtime

~20 minutes per genome.

Notes

  • Run this AFTER Manta (step 4). Zero-cost quality improvement before AnnotSV (step 5).
  • Requires the original BAM and reference FASTA — it re-calculates depth around each SV.
  • Output (duphold/${SAMPLE}_sv_duphold.vcf, uncompressed) is the same VCF with three new FORMAT fields added. All downstream tools (AnnotSV, bcftools) work unchanged.
  • Consider piping the duphold output into AnnotSV instead of the raw Manta VCF for cleaner results.