1 of 35

Structural Variant detection

Olivier QUENEZ - INSERM

Guillaume Robert-Siegwald - Inovarion

Mathieu Charles - INRAE

École de bioinformatique AVIESAN-IFB-INSERM 2021

2 of 35

Workflow

2

Fastq Quality Control

-- FastQC --

Mapping

-- Bowtie2/Bwa --

Reads (Fastq)

Reference genome (Fasta)

Processing Post Alignement

Variant Calling

Filtrage & Annotation

Variants Structuraux

Copy Number

3 of 35

  • Consensus actuel : Réarrangement génomique >50bp

3

  • Différents types de variants structuraux :

→ Réarrangements déséquilibrés (variation du nombre de copie - CNV)

    • Délétion
    • Duplication

Définition

→ Réarrangements équilibrés

    • Insertion
    • Inversion
    • Translocation

4 of 35

4

5 of 35

5

Principe de détection des SVs

6 of 35

Short reads (Illumina) : selon l’outil et la qualité des données

faible recall : 10 à 70% des SVs détectés

faible précision : jusqu’à 90% de Faux Positifs

→ Difficulté à caractériser des SVs complexes (alignement imprécis dans les régions répétées et faible résolution)

/!\ Un calling consensus avec plusieurs outils de détection peut être utile avec des données short reads /!\

6

Short reads ou long reads?

Long reads (PacBio/MinION) :

→ Meilleure caractérisation des altérations des régions répétées

→ Une faible profondeur de couverture suffit (15-30x)

Sedlazeck, F. J. et al.Nat. Methods 15, 461–468 (2018).

7 of 35

Critères de choix :

  • Ai-je des données short reads ou long reads ?
  • Ai-je de nombreux échantillons ?
  • Quel type de SV est-ce que je recherche ?
  • Est-ce que la profondeur de couverture est suffisante ?
  • Que privilégier : sensibilité et / ou spécificité
  • Quel est le format de sortie de l’outil ?

7

Quel outil choisir ?

8 of 35

Détection de SV pour données short reads

8

Peiyong Guan, , Methods 102 (2016)

9 of 35

  • PBHoney, 2014
  • SMRT-SV, 2015
  • Hysa, 2016 (hybrid avec short reads)
  • NanoSV, 2017
  • Sniffles, 2018

9

Outils en long reads

10 of 35

Data : souche de Zymoseptoria tritici séquencées à la fois en Illumina et en MinION.

→ chaque set de reads a été aligné sur le génome de référence avec les outils dédiés

→ les données ont été réduites aux premiers 500kb du chr10

Tools :

10

Partie TP

11 of 35

Workflow - Variants Structuraux

11

Alignment (bwa) Processé (BAM)

Delly

Sniffles

Alignment (NGMLR) Processé (BAM)

Short Reads (Illumina)

Long Reads (MinION)

12 of 35

# Copie des données SV

$ cp -R /shared/projects/form_2021_26/data/atelier_variant/sv ~/tp_sv

$ cd ~/tp_sv

# Indexation des fichiers

$ module load samtools/1.13

$ samtools index mapping_illumina_chr10_500kb.bam

$ samtools index mapping_minion_chr10_500kb.bam

$ samtools faidx Zymoseptoria_tritici.fa

$ ls -l

12

Préparation des données

13 of 35

$ mkdir -p delly/logs

$ cd delly

$ module load delly/0.8.3

$ delly # (v0.8.3)

$ delly call

Usage: delly call [OPTIONS] -g <ref.fa> <sample1.sort.bam> <sample2.sort.bam> ...

Generic options:

-? [ --help ] show help message

-t [ --svtype ] arg (=ALL) SV type to compute [DEL, INS, DUP, INV,

BND, ALL]

-g [ --genome ] arg genome fasta file

-x [ --exclude ] arg file with regions to exclude

-o [ --outfile ] arg (="sv.bcf") SV BCF output file

13

Delly

14 of 35

$ sbatch -J delly -o logs/delly.out -e logs/delly.err --mem=8G --wrap=" \

delly call -g ~/tp_sv/Zymoseptoria_tritici.fa \

-o SV_calling_illumina.bcf ~/tp_sv/mapping_illumina_chr10_500kb.bam"

# Conversion en fichier vcf

$ module load bcftools/1.10.2

$ sbatch -J bcf_to_vcf -o logs/bcf_to_vcf.out -e logs/bcf_to_vcf.err --wrap=" \

bcftools view SV_calling_illumina.bcf > SV_calling_illumina.vcf"

$ less -S SV_calling_illumina.vcf # “Q” pour quitter

$ less SV_calling_illumina.bcf

# "delly/SV_calling_illumina.bcf" may be a binary file. See it anyway? n

14

Delly

15 of 35

15

Header du vcf de Delly

16 of 35

# Combien de variants ?

$ grep -v -c "^#" SV_calling_illumina.vcf

16

Delly : comptage du nombre de SVs

# Combien de variants de bonne qualité ?

$ grep -v "^#" SV_calling_illumina.vcf | grep -v -c "LowQual"

17 of 35

17

Delly : comptage du nombre de SVs

# Combien de variants de bonne qualité de type Deletion…

$ grep -v "^#" SV_calling_illumina.vcf | grep -v "LowQual" | grep -c "<DEL>"

$ grep -v "^#" SV_calling_illumina.vcf | grep -v "LowQual" | grep -c "<DUP>"

$ grep -v "^#" SV_calling_illumina.vcf | grep -v "LowQual" | grep -c "<INV>"

$ grep -v "^#" SV_calling_illumina.vcf | grep -v "LowQual" | grep -c "<BND>"

$ grep -v "^#" SV_calling_illumina.vcf | grep -v "LowQual" | grep -c "<INS>"

18 of 35

18

Delly : extraction des informations

$ grep -v "^#" SV_calling_illumina.vcf | grep -v "LowQual" | grep "<DEL>"

19 of 35

#Récupération du start des variants

$ grep -v "^#" SV_calling_illumina.vcf | grep -v "LowQual" | grep "<DEL>" | \

cut -f1,2 > delly_del_start.txt

#Récupération des autres informations

$ grep -v "^#" SV_calling_illumina.vcf | grep -v "LowQual" | grep "<DEL>" | \

cut -f8 | cut -d ";" -f1,4,5,13 | sed "s/;/\t/g" > delly_del_info.txt

#Fusion des deux fichiers

$ paste -d '\t' delly_del_start.txt delly_del_info.txt > delly_del.txt

#Formattage et ménage

$ awk '{OFS=”\t”;print $1,$2,$4,$3,$5,$6}' delly_del.txt | sed "s/END=//g" \

> delly_del.tsv

$ rm delly_del_info.txt delly_del_start.txt delly_del.txt

19

Delly : extraction des informations des délétions

20 of 35

Workflow - Variants Structuraux

20

Alignment Processé (BAM)

Delly

Sniffles

Alignment Processé (BAM)

Short Reads (Illumina)

Long Reads (MinION)

21 of 35

$ module load sniffles/1.0.11

$ sniffles --help

Usage: sniffles [options] -m <sorted.bam> -v <output.vcf>

Version: 1.0.11

Contact: fritz.sedlazeck@gmail.com

Input/Output:

-m <string>, --mapped_reads <string>

(required) Sorted bam File

-v <string>, --vcf <string>

VCF output file name []

-b <string>, --bedpe <string>

bedpe output file name []

--Ivcf <string>

Input VCF file name. Enable force calling []

--tmp_file <string>

path to temporary file otherwise Sniffles will use the current directory. []

( -l <int>, --min_length <int>

Minimum length of SV to be reported. [30] )

21

Détection de données long reads avec Sniffles

22 of 35

$ mkdir -p ~/tp_sv/sniffles/logs

$ cd ~/tp_sv/sniffles

$ sbatch -J sniffles -o logs/sniffles.out -e logs/sniffles.err --mem=8G --wrap=" \

sniffles -l 100 -m ~/tp_sv/mapping_minion_chr10_500kb.bam \

-v SV_calling_minion.vcf"

$ less -S SV_calling_minion.vcf

22

Sniffles

23 of 35

23

Header du vcf de Sniffles

24 of 35

$ cat SV_calling_minion.vcf | grep ^chr_10 | grep "DEL" | wc -l

$ cat SV_calling_minion.vcf | grep ^chr_10 | grep "DUP" | wc -l

$ cat SV_calling_minion.vcf | grep ^chr_10 | grep "INV" | wc -l

$ cat SV_calling_minion.vcf | grep ^chr_10 | grep "TRA" | wc -l

$ cat SV_calling_minion.vcf | grep ^chr_10 | grep "INS" | wc -l

$ cat SV_calling_minion.vcf | grep ^chr_10 | wc -l

24

Sniffles : comptage du nombre de SVs

25 of 35

$ cat SV_calling_minion.vcf | grep ^chr_10 | grep "DEL"

25

Sniffles : extraction des positions des délétions

26 of 35

$ cat SV_calling_minion.vcf | grep ^chr_10 | grep "DEL" | cut -f -1,2 \

> sniffles_del_start.txt

$ cat SV_calling_minion.vcf | grep ^chr_10 | grep "DEL" | cut -d ";" -f 4 | \

cut -d "=" -f 2 > sniffles_del_stop.txt

$ paste sniffles_del_start.txt sniffles_del_stop.txt sniffles_del_infos.txt \

> sniffles_del.tsv

$ rm sniffles_del_start.txt sniffles_del_stop.txt sniffles_del_infos.txt

$ cat SV_calling_minion.vcf | grep ^chr_10 | grep "DEL" | cut -f 8 | \

cut -d ";" -f 1 > sniffles_del_infos.txt

26

Sniffles : extraction des positions des délétions

27 of 35

$ cd ~/tp_sv

$ cat delly/delly_del.tsv

$ cat sniffles/sniffles_del.tsv

27

Comparaison des résultats de Delly et Sniffles

28 of 35

  • Télécharger en local les fichiers BAM et leurs index à travers votre session Jupyter

~/tp_sv/Zymoseptoria_tritici.fa/fai� ~/tp_sv/mapping_illumina_chr10_500kb.bam/bam.bai

~/tp_sv/mapping_minion_chr10_500kb.bam/bam.bai

  • Charger le génome de référence

  • Ouvrir les fichiers BAM correspondant aux deux analyses (short et long reads)

28

Visualisation sous IGV

29 of 35

deletion 90309-101040 (illumina), 91233-98159 (Minion)

29

30 of 35

deletion 90309-101040 (illumina), 91233-98159 (Minion)

30

31 of 35

deletion 111021-111676

31

32 of 35

deletion 191291-191343

32

33 of 35

deletion 343161-343273

33

34 of 35

34

Comparaison des résultats de Delly et Sniffles

35 of 35

  • La détection des SVs manque de précision et engendre des faux positifs et faux négatifs

→ Nécessité de croiser différents outils/technologies

→ Nécessité de bien utiliser les métriques des outils

→ Nécessité d’une bonne profondeur (variant hétérozygote)

  • Vérifier visuellement les résultats sur IGV permet d’augmenter la confiance dans les SVs détectés

35

Conclusion