Sequence preprocessing et alignement

Alignement avec BWA

# Indexation du genome de reference avec bwa et creation des index .fai et .dict

module load bwa/0.7.17 ; module load samtools/1.10 ; module load gatk4/4.1.7.0

mkdir -p logs/genomeIndexing

sbatch -J BWA_index -o logs/genomeIndexing/%x.out -e logs/genomeIndexing/%x.err --wrap="bwa index ../genome/Bos_taurus.UMD3.1.dna.toplevel.6.fa"

sbatch -J samtools_index -o logs/genomeIndexing/%x.out -e logs/genomeIndexing/%x.err --wrap="samtools faidx ../genome/Bos_taurus.UMD3.1.dna.toplevel.6.fa"

sbatch -J GATK_index -o logs/genomeIndexing/%x.out -e logs/genomeIndexing/%x.err --wrap=" \
gatk CreateSequenceDictionary --REFERENCE ../genome/Bos_taurus.UMD3.1.dna.toplevel.6.fa --OUTPUT ../genome/Bos_taurus.UMD3.1.dna.toplevel.6.dict"

# Alignement des données initiales (peut se faire sur les données trimmées de cutadapt)
# L'ajout des read group peut se faire en même temps que BWA

mkdir -p alignment_bwa logs/alignment_bwa

sbatch -J SRR1262731_mapping -o logs/alignment_bwa/%x.out -e logs/alignment_bwa/%x.err --cpus-per-task=4 --mem=16G --wrap=" \
bwa mem -t 4 -R \"@RG\tID:1\tPL:Illumina\tPU:PU\tLB:LB\tSM:SRR1262731\" \
../genome/Bos_taurus.UMD3.1.dna.toplevel.6.fa ../fastq/SRR1262731_extract_R1.fq.gz ../fastq/SRR1262731_extract_R2.fq.gz \
| samtools view -Sh - -bo alignment_bwa/SRR1262731_extract.bam"

samtools view -h alignment_bwa/SRR1262731_extract.sam | less -S

# Conversion du sam en bam trié

sbatch -J SRR1262731_mappingSort -o logs/alignment_bwa/%x.out -e logs/alignment_bwa/%x.err --cpus-per-task=4 --mem=16G --wrap=" \
samtools sort -@ 4 --write-index -o alignment_bwa/SRR1262731_extract.sort.bam alignment_bwa/SRR1262731_extract.bam "

# statistique d'alignement
sbatch -J SRR1262731_flagstat -o logs/alignment_bwa/%x.out -e logs/alignment_bwa/%x.err --wrap=" \
samtools flagstat  alignment_bwa/SRR1262731_extract.sort.bam >  alignment_bwa/SRR1262731.flagstat.txt"

cat alignment_bwa/SRR1262731.flagstat.txt
## 2265873 + 0 in total (QC-passed reads + QC-failed reads)
## 0 + 0 secondary
## 46487 + 0 supplementary
## 0 + 0 duplicates
## 1700879 + 0 mapped (75.07% : N/A)
## 2219386 + 0 paired in sequencing
## 1109693 + 0 read1
## 1109693 + 0 read2
## 621472 + 0 properly paired (28.00% : N/A)
## 1229358 + 0 with itself and mate mapped
## 425034 + 0 singletons (19.15% : N/A)
## 0 + 0 with mate mapped to a different chr
## 0 + 0 with mate mapped to a different chr (mapQ>=5)

InteRlude R N° 1

Vous devez être placé dans votre dossier tp_variant. Quelle est la distribution des qualités de mapping (MAPQ) ? Et quel pourcentage de reads ont une MAPQ >=30 ?

##   V1
## 1  7
## 2  3
## 3  2
## 4  0
## 5  1
## 6  0

## $breaks
##  [1]  0  2  4  6  8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48
## [26] 50 52 54 56 58 60
## 
## $counts
##  [1] 1416971   75453   72162   61703   49081   33868   27891   26590   29708
## [10]   32737   29416   24800   17347   15971   12385    9575    9596    8942
## [19]    6140   44154    3529    4303    3731    4696    4229    1748    2828
## [28]    1895     845  233579
## 
## $density
##  [1] 0.3126766152 0.0166498740 0.0159236639 0.0136157234 0.0108304834
##  [6] 0.0074734992 0.0061545815 0.0058674957 0.0065555307 0.0072239265
## [11] 0.0064910964 0.0054725044 0.0038278844 0.0035242487 0.0027329422
## [16] 0.0021128722 0.0021175061 0.0019731909 0.0013548862 0.0097432645
## [21] 0.0007787286 0.0009495236 0.0008233030 0.0010362452 0.0009331944
## [26] 0.0003857233 0.0006240420 0.0004181611 0.0001864623 0.0515428270
## 
## $mids
##  [1]  1  3  5  7  9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49
## [26] 51 53 55 57 59
## 
## $xname
## [1] "mapq[, \"V1\"]"
## 
## $equidist
## [1] TRUE
## 
## attr(,"class")
## [1] "histogram"

Ouvrez votre fichier png ou relancez uniquement la commande plot()

## 
##   FALSE    TRUE 
## 1919170  346703
##             Group Value
## 1        Unmapped    25
## 2 Mapped mapq>=30    15
## 3  Mapped mapq<30    60

Alignement postprocess

InteRlude R N° 2

Quelle est la couverture moyenne des lectures correctement alignées (MAPQ>=30) sur les régions ciblées ?

##   V1       V2 V3
## 1  6 37913111  3
## 2  6 37913112  3
## 3  6 37913113  3
## 4  6 37913114  3
## 5  6 37913115  3
## 6  6 37913116  3
##   chr position depth
## 1   6 37913111     3
## 2   6 37913112     3
## 3   6 37913113     3
## 4   6 37913114     3
## 5   6 37913115     3
## 6   6 37913116     3
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   4.000   6.000   6.792   8.000 122.000
## [1] 6.792332

Ouvrez votre fichier pdf ou relancez uniquement les lignes plot() et abline()

Appel des SNP / INDEL

Avec GATK HaplotypeCaller

Filtrage et Annotation des variants

Sélection des variants

# Préparation d'un nouveau répertoire de résultats
mkdir -p filter_and_annot logs/filter

# Extraction des SNVs dans un fichier séparé pour GATK
sbatch -J GATK_SNP -o logs/filter/%x.out -e logs/filter/%x.err --mem=8G --wrap=" \
gatk SelectVariants --java-options '-Xmx8G' -R genome/Bos_taurus.UMD3.1.dna.toplevel.6.fa \
-V GATK/vcf/pool_GATK.vcf --select-type SNP -O filter_and_annot/pool_GATK.SNP.vcf"

# Extraction des SNVs dans un fichier séparé pour Varscan
sbatch -J Varscan_SNP -o logs/filter/%x.out -e logs/filter/%x.err --mem=8G --wrap=" \
gatk SelectVariants --java-options '-Xmx8G' -R genome/Bos_taurus.UMD3.1.dna.toplevel.6.fa \
-V Varscan/pool_Varscan_dict.vcf --select-type SNP -O filter_and_annot/pool_Varscan.SNP.vcf"

# Filtrage des SNVs selon les filtres recommandés par GATK

sbatch -J GATK_SNP_filter -o logs/filter/%X.out -e logs/filter/%x.err --mem=8G --wrap=" \
gatk VariantFiltration --java-options '-Xmx8G' -R genome/Bos_taurus.UMD3.1.dna.toplevel.6.fa \
  -V filter_and_annot/pool_GATK.SNP.vcf -O filter_and_annot/pool_GATK.SNP.prefilt.vcf \
  -filter 'QD < 2.0' --filter-name 'QD2' -filter 'SOR > 3.0' --filter-name 'SOR3' \
  -filter 'FS > 60.0' --filter-name 'FS60' -filter 'MQ < 40.0' --filter-name 'MQ40' \
  -filter 'MQRankSum < -12.5' --filter-name 'MQRankSum-12.5' \
  -filter 'ReadPosRankSum < -8.0' --filter-name 'ReadPosRankSum-8'"

# Sélection des variants passant ce filtre
sbatch -J GATK_SNP_PASS -o logs/filter/%x.out -e logs/filter/%xGATK_SNP_PASS.err --mem=8G --wrap=" \
gatk SelectVariants --java-options '-Xmx8G' -R genome/Bos_taurus.UMD3.1.dna.toplevel.6.fa \
-V filter_and_annot/pool_GATK.SNP.prefilt.vcf --exclude-filtered -O filter_and_annot/pool_GATK.SNP.filtered.vcf"

Recherche de Variants Structuraux

Interlude R N° 3

Test comparatif des tailles des délétions détectées par delly vs sniffles

##       V1    V2     V3        V4    V5    V6  size
## 1 chr_10 29522  29580   PRECISE  PE=0 SR=20    58
## 2 chr_10 32733  32783   PRECISE  PE=0 SR=20    50
## 3 chr_10 57127  57600   PRECISE  PE=3 SR=16   473
## 4 chr_10 80015  80622   PRECISE PE=15 SR=20   607
## 5 chr_10 90255  90309   PRECISE  PE=0  SR=7    54
## 6 chr_10 90309 101040 IMPRECISE  PE=8       10731
##       V1     V2     V3        V4 size
## 1 chr_10  57126  57598 IMPRECISE  472
## 2 chr_10  91233  98159 IMPRECISE 6926
## 3 chr_10 111020 111655   PRECISE  635
## 4 chr_10 257001 257165 IMPRECISE  164
## 5 chr_10 343161 343273   PRECISE  112
## 6 chr_10 360638 361061   PRECISE  423
## 
##  Welch Two Sample t-test
## 
## data:  delly$size and sniffles$size
## t = -0.41574, df = 14.769, p-value = 0.6836
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -27195.43  18328.23
## sample estimates:
## mean of x mean of y 
##    6168.0   10601.6