Skip to content

Structural Variant Calling on Your Own Genome

Oak
A glowing translucent forest vine with internal fibers showing a gap, a doubled bulge and a twisted section, lit by hovering insects.

A structural variant is a genomic rearrangement of 50 bp or larger. The types are as follows.

  • deletion
  • insertion
  • duplication
  • inversion
  • translocation
  • a mixed event that combines several of those

A structural variant caller reads an aligned BAM/CRAM and infers those rearrangements from three signals: discordant read pairs (wrong insert size or orientation), split reads that map to two places, and read-depth changes across an interval. If you have 30x Illumina short reads, run Manta plus Delly and intersect them. If you have ONT or PacBio HiFi at 20x or better, run Sniffles2 and stop worrying, because long reads roughly triple the number of SVs you recover per genome and remove most of the ambiguity about breakpoint position.

That is the short answer. The rest is how to do it without fooling yourself.

The classes of structural variant, and why the class determines the method

Balanced events (inversions, reciprocal translocations) change no copy number, so depth tells you nothing and you are entirely dependent on split and discordant reads at the two breakpoints. Unbalanced events are deletions and duplications, also called copy-number variants. They produce a depth signal you can see over a window, which is the only way to call something 500 kb long from 150 bp reads. Insertions are the hard class. A 2 kb novel insertion has no depth signal at all. In short reads it only manifests as a pile of soft-clipped bases at one position, with the inserted sequence itself unrepresented. Mobile element insertions (Alu ~300 bp, L1 up to ~6 kb, SVA) are a large share of the insertions in any human genome and need their own repeat-aware logic.

Structural variation covers more base pairs per genome than SNVs do, and the catalog of what a typical genome carries has been reshaped by assembly-based and long-read studies12. The practical consequence: a short-read-only call set is not a description of your genome’s structural variation, it is a description of the subset visible to 150 bp reads. Expect roughly 5,000–10,000 SV calls from short reads and 20,000+ from a good long-read run on the same sample34.

Short reads: Manta first, Delly second, GRIDSS if you care about breakpoint precision

Manta is the default because it is fast (an hour or two on 30x with 16 threads), it does local assembly around candidate breakends so you get sequence-resolved deletions and small insertions, and it emits usable genotypes.

configManta.py --bam sample.cram --referenceFasta GRCh38.fa \
  --runDir manta_out
manta_out/runWorkflow.py -m local -j 16

Use diploidSV.vcf.gz, not candidateSV.vcf.gz. Manta caps assembled insertions it can fully resolve at a few hundred bp. Longer insertions come out as <INS> with IMPRECISE or as a breakend pair.

Delly adds a different error profile and does better on inversions and duplications:

delly call -g GRCh38.fa -x human.hg38.excl.tsv -o delly.bcf sample.cram

The -x exclusion file (centromeres, telomeres, unplaced contigs) is not optional. Without it a large fraction of your calls will be centromeric garbage.

GRIDSS uses breakend assembly and scored best or near-best in the most careful independent comparison of general-purpose short-read callers, which evaluated callers against both simulated and real truth sets and found precision/recall varying sharply by SV class and size5. It is slower and its VCF is breakend-centric, so you will run simple-event-annotation or gridss_somatic_filter to get interpretable event types. Worth it if you want exact breakpoint sequence, for instance to check whether a deletion junction has microhomology or a templated insertion.

For large CNVs, depth callers still matter. Run CNVnator or cnvpytor with a 100 bp bin on 30x, or cn.mops if you have a panel of samples. Depth callers give you megabase-scale events that paired-end callers miss and give you nothing usable below ~1 kb.

TIDDIT is a good lightweight option if you want one tool that combines discordant-pair clustering and coverage analysis in a single pass, and it was designed for exactly this scale of data6.

Merging: run two or three callers and combine. Parliament2 formalized this, genotyping the union of its callers with SVTyper, and the ensemble beat any single caller. It ran the following callers.7

  • BreakDancer
  • BreakSeq
  • CNVnator
  • Delly
  • Lumpy
  • Manta

You can do the same by hand:

ls manta.vcf delly.vcf gridss.vcf > files.txt
SURVIVOR merge files.txt 1000 2 1 1 0 50

That is: 1000 bp breakpoint distance, minimum 2 callers agreeing, require same type and same strand, ignore distance-estimate scaling, minimum size 50. Raising the caller threshold to 2 typically cuts your call count by half and removes most of the false positives. We would keep the union in a separate file and only promote singleton calls that have an obvious depth or split-read signature when you look at them in IGV.

Long reads: Sniffles2, and what changes

With ONT R10.4 or PacBio HiFi at 20–30x, align with minimap2 (-ax map-ont or -ax map-hifi, add --MD and -Y for soft clipping) then:

sniffles -i sorted.bam --reference GRCh38.fa \
  --vcf sample.sniffles.vcf.gz --snf sample.snf \
  --minsvlen 50 --minsupport auto --threads 16

The --snf output is the piece that matters if you plan to sequence again later: it stores per-sample SV signals for multi-sample joint calling, so a second timepoint can be merged without recalling the first from scratch.

cuteSV is a reasonable second caller with different clustering behavior. For ONT, the recommended settings are --max_cluster_bias_INS 100 --diff_ratio_merging_INS 0.3 --max_cluster_bias_DEL 100 --diff_ratio_merging_DEL 0.3, and for HiFi 1000/0.9 on the insertion parameters. Those numbers change the call count materially, so record which you used.

Long reads resolve insertions that short reads cannot see at all, and they place breakpoints inside repeats where short-read aligners give up34. The cost is accuracy in tandem repeats of the error-prone kind, and long reads still struggle with the largest segmental duplications. Assembly-based calling (hifiasm plus dipcall or PAV) recovers a further set, especially insertions in VNTRs2.

Benchmarking your pipeline before you trust it

Do not interpret an SV call set you have never validated. Download GIAB HG002 (the Tier 1 SV benchmark VCF plus its BED of high-confidence regions), run your exact pipeline on the HG002 reads, and score with Truvari:

truvari bench -b HG002_SVs_Tier1_v0.6.vcf.gz -c yours.vcf.gz \
  -f GRCh38.fa --includebed HG002_Tier1_v0.6.bed \
  -o bench/ --passonly -r 1000 -p 0.7 -P 0.7 -s 50 -S 30

-p is the sequence-similarity threshold. Set it to 0 if your caller emits symbolic <DEL>/<INS> alleles, or you will fail every call for the wrong reason. Look at the per-size-bin breakdown. Do not rely on the headline F1. Most pipelines are fine on 50–500 bp deletions and poor on insertions above 1 kb and on everything inside segmental duplications.

Reading a call set without deceiving yourself

Filter first: drop calls with fewer than 4–5 supporting reads, drop anything overlapping the ENCODE blacklist and centromeric arrays, and inspect anything longer than 100 kb by eye.

Then annotate. AnnotSV gives you gene overlap, exon-level breakdown, and population frequency against gnomAD-SV in one TSV. Frequency is the strongest single filter you have: most of your calls will be common polymorphisms present in thousands of other people, and the detection and interpretation of SVs has been built around exactly this frequency-plus-gene-overlap logic for over a decade89. An intergenic 3 kb deletion at 12% allele frequency is background. A de novo deletion removing two exons of a dosage-sensitive gene is a clinical question, and not one you should resolve yourself.

A caller’s IMPRECISE breakends are hypotheses. Short-read SV VCFs contain a substantial artifact fraction from mismapping in repeats, and the artifact rate is not uniform, it concentrates in segmental duplications and near assembly gaps10. If an SV would change what you do, the next step is orthogonal confirmation in a clinical laboratory (long-read sequencing, optical mapping, or a targeted assay) and a conversation with a genetic counselor or clinical geneticist. Research-grade calls are not diagnostic results.

Questions people also ask

What are the different types of structural variants?

Deletions, insertions (including mobile element insertions and novel sequence), tandem and interspersed duplications, inversions, and translocations, plus complex events that combine two or more of those at one locus. Copy-number variants are the subset that changes dosage: deletions and duplications. Complex rearrangements like chromothripsis and replication-based events with templated insertions are increasingly recognized as a meaningful share of large variants19.

What is the definition of structural variation?

Genomic variation involving a segment of 50 bp or larger. The 50 bp cutoff is a convention set by what short-read indel callers could reliably handle, not a biological boundary, and long-read data blurs it further because callers now resolve 30–50 bp insertions routinely.

Which caller should I run if I only run one?

Manta for short reads, Sniffles2 for long reads. Manta is fast, assembles breakpoints, and gives usable genotypes. Sniffles2 has the best combination of speed, accuracy, and support for adding future timepoints through its .snf files. If you want one more, add Delly (short) or cuteSV (long) and require two-caller support on the merge.

Why do two callers on the same BAM disagree so much?

They use different evidence weightings and different clustering parameters, so they place breakpoints differently and score marginal support differently. Concordance between short-read callers is often only 50–70% at the event level, with the biggest disagreements on insertions, inversions, and anything inside a repeat54. This is why ensemble calling works7.

Footnotes

  1. Ryan L. Collins, Michael E. Talkowski. Diversity and consequences of structural variation in the human genome. Nature Reviews Genetics, 2025. https://doi.org/10.1038/s41576-024-00808-9 ↩ ↩2

  2. Peter A. Audano, Arvis Sulovari, Tina A. Graves-Lindsay, et al. Characterizing the Major Structural Variant Alleles of the Human Genome. Cell, 2019. https://doi.org/10.1016/j.cell.2018.12.019 ↩ ↩2

  3. Wouter De Coster, Peter De Rijk, Arne De Roeck, et al. Structural variants identified by Oxford Nanopore PromethION sequencing of the human genome. Genome Research, 2019. https://doi.org/10.1101/gr.244939.118 ↩ ↩2

  4. Medhat Mahmoud, Nastassia Gobet, Diana Ivette Cruz-Dávalos, et al. Structural variant calling: the long and the short of it. Genome Biology, 2019. https://doi.org/10.1186/s13059-019-1828-7 ↩ ↩2 ↩3

  5. Daniel L. Cameron, Leon Di Stefano, Anthony T. Papenfuss. Comprehensive evaluation and characterisation of short read general-purpose structural variant calling software. Nature Communications, 2019. https://doi.org/10.1038/s41467-019-11146-4 ↩ ↩2

  6. Jesper Eisfeldt, Francesco Vezzi, Pall Olason, et al. TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 2017. https://doi.org/10.12688/f1000research.11168.2 ↩

  7. Samantha Zarate, Andrew Carroll, Medhat Mahmoud, et al. Parliament2: Accurate structural variant calling at scale. GigaScience, 2020. https://doi.org/10.1093/gigascience/giaa145 ↩ ↩2

  8. Geòrgia Escaramís, Elisa Docampo, Raquel Rabionet. A decade of structural variants: description, history and methods to detect structural variation. Briefings in Functional Genomics, 2015. https://doi.org/10.1093/bfgp/elv014 ↩

  9. Shruti Pande, Moez Dawood, Christopher M. Grochowski. Structural Variants: Mechanisms, Mapping, and Interpretation in Human Genetics. Genes, 2025. https://doi.org/10.3390/genes16080905 ↩ ↩2

  10. Steve S. Ho, Alexander E. Urban, Ryan E. Mills. Structural variation in the sequencing era. Nature Reviews Genetics, 2019. https://doi.org/10.1038/s41576-019-0180-9 ↩

Oak builds longitudinal molecular profiles of individuals: whole-genome sequencing, blood RNA sequencing, and plasma proteomics, delivered as a detailed report plus every data file. Build your profile.