TITLE: Sniffles2 methods
AUTHORS: Moritz Smolka, Luis F Paulin, Fritz Sedlazeck

[DESCRIPTION]
Long-read Structural Variation (SV) calling remains a challenging but highly accurate way to identify complex genomic alterations. Here, we present Sniffles2, which is faster and more accurate than state-of-the-art SV caller across different coverages, sequencing technologies, and SV types. Furthermore, Sniffles2 solves the problem of family- to population-level SV calling to produce fully genotyped VCF files by introducing a gVCF file concept. Across 11 probands, we accurately identified causative SVs around MECP2, including highly complex alleles with three overlapping SVs. Sniffles2 also enables the detection of mosaic SVs in bulk long-read data. As a result, we successfully identified multiple mosaic SVs across a multiple system atrophy patient brain. The identified SV showed a remarkable diversity within the cingulate cortex, impacting both genes  involved in neuron function and repetitive elements. In summary, we demonstrate the utility and versatility of Sniffles2 to identify SVs from the mosaic to population levels.


[BEFORE_START]
Requirements
Python >= 3.7
pysam
Tested on:
Linux CentOS Stream 8
python==3.9.5
pysam==0.16.0.1

[STEPS]
SECTION: Sniffles2 methodology
1. Installation

 

 

SECTION: Sniffles2 methodology
2. Sniffles single sample SV calling
 

SECTION: Sniffles2 methodology
3. Sniffles population SV calling
 

SECTION: Benchmarking methodology
9. 
HG002 SV calling for the following technologies and coverage:
Oxford Nanopore Technologies: 5x, 10x, 20x, 30x and 50x
PacBio HiFi: 5x, 10x, 20x, 30x
with default parameters
 

 


SECTION: Long reads alignment
7. Minimap2
MINIMAP_PRESET used are: map-ont for Oxford Nanopore and map-hifi for PacBio HiFi and map-pb for PacBio CLR
REFERENCE is either human GRCh37 or GRCh38 with no alt/decoy chromosomes
READS are fastq/compressed-fastq files
OUT is the sample name/identification
 

SECTION: Sniffles2 methodology
4. Sniffles low-frequency (mosaic) SV calling
 

SECTION: Sniffles2 methodology
5. Optional suggested parameters
 

SECTION: Sniffles2 methodology
6. Sniffles genotyping (force-callling) will determine the genotypes for all SVs in the given input .vcf fil
 

SECTION: Simulation of low-frequency SVs
12. Low-frequency SV simulation
We used 
samtools view --subsample
 to create subset of reads fo HG002 and HG00733 at the following concentrations: 
HG002 coverageHG002 proportionHG00733 coverageHG00733 proportion57%6393%710%6390%1014%6086%1521%5579%2028%5072%
HG002 reads: https://labs.epi2me.io/gm24385_q20_2021.10/
HG002 variants: https://ftp-trace.ncbi.nlm.nih.gov/ReferenceSamples/giab/release/AshkenazimTrio/HG002_NA24385_son/NIST_SV_v0.6/HG002_SVs_Tier1_v0.6.vcf.gz
HG00733 reads: https://www.internationalgenome.org/data-portal/search?q=HG00733
HG00733 variants: https://ftp.hgsc.bcm.edu/Software/Truvari/3.1/sample_vcfs/hg19/li/HG00733.vcf.gz
SECTION: Simulation of low-frequency SVs
13.  Read alignment was performed as in step 7

SECTION: Long reads alignment
8. LRA
READS are gzip-compressed-fastq files
LRA_PRESET used are: -ONT for Oxford Nanopore and -CCS for PacBio HiFi and -CLRfor PacBio CLR
REFERENCE is either human GRCh37 or GRCh38 with no alt/decoy chromosomes
OUTFORMAT is s for SAM 
OUT is the sample name/identification
 

SECTION: Benchmarking methodology
10. HG002 SV calling for the following technologies and coverage:
Oxford Nanopore Technologies: 5x, 10x, 20x, 30x and 50x
PacBio HiFi: 5x, 10x, 20x, 30x
with sensitive parameters
 

 

SECTION: Benchmarking methodology
11. 
SV benchmark comparison to Genome in a Bottle SV dataset v0.6 using truvari 2.1 following the GIAB recommended parameters
 
SV benchmark comparison to Genome in a Bottle SV Challenging Medical Relevant Genes (CMRG) v0.1 using truvari 2.1 following the GIAB recommended parameters
 

SECTION: Simulation of low-frequency SVs
14. SV calling with Sniffles2 and cuteSV

 


SECTION: Simulation of low-frequency SVs
15. SV benchmark
We then used the SV from the GIAB v0.6 benchmark (see step 11) and compared the three call sets: Sniffles germline, Sniffles mosaic and cuteSV. For Sniffles mosaic we also filtered GIAB v0.6 benchmark based on the variant allele frequency (VAF) range that Sniffles2 mosaic mode uses (VAF 5%-20%) to compute the adjusted recall.
SECTION: Mendelian inconsistency benchmark in population mode
16. HG002 reads: https://labs.epi2me.io/gm24385_q20_2021.10/
HG003 reads: https://ftp.ncbi.nlm.nih.gov/ReferenceSamples/giab/data/AshkenazimTrio/HG003_NA24149_father/UCSC_Ultralong_OxfordNanopore_Promethion/
HG003 reads: https://ftp.ncbi.nlm.nih.gov/ReferenceSamples/giab/data/AshkenazimTrio/HG004_NA24143_mother/UCSC_Ultralong_OxfordNanopore_Promethion/

SECTION: Mendelian inconsistency benchmark in population mode
17. Read alignment was don as in step 7
SECTION: Mendelian inconsistency benchmark in population mode
18. Sniffles2 SV calling was done as in step 3 
SECTION: Mendelian inconsistency benchmark in population mode
19. cuteSV SV calling was done as in step 10 for Oxford Nanopore data for each sample
Next SURVIVOR was used to merge the SV calls from the three samples
 

SECTION: Mendelian inconsistency benchmark in population mode
21. Mendelian consistency test with bcftools's mendelian plugin with the three output files: 
Sniffles2 population merge (step 18), cuteSV (step 19) and cuteSV force-called (step 20)
 

SECTION: Mendelian inconsistency benchmark in population mode
20. An additional step was performed for cuteSV which consists in genotyping/force-calling the SV from the merged VCF, to then merge again with SURVIVOR 
 

SECTION: Chromosome X disorder patient analysis
22. We called all samples as in step 3 (Sniffles2 population SV calling) and subsequently merged them (step 3). We used the resulting fully-genotyped population VCF file of the rest of the analysis. 

Next, we filtered out SV if they were in either of the following categories:
SV < 10kb
SV present in either a mother or father based on the sample identification and SUPP_VEC (see below)
SV in an autosome

We ended up with SV that were only present in the probands and that were likely causative of the observed phenotype.
Filtering was done with bcftools view and a custom python script "sniffles2_vcf_parser.py"found in  https://github.com/smolkmo/Sniffles2-Supplement and https://zenodo.org/record/8122060

The SUPP_VEC is a field in the INFO section of the VCF file that denotes the presence/absence of a genetic variant (in our case Structural Variant, SV) in the sample for the sample position/index
For samples A B and C, the SUPP_VEC=101 means that the genetic variant is present in samples A and C