* Simuscop
:PROPERTIES:
:CUSTOM_ID: simuscop
:END:
** NA12878
:PROPERTIES:
:CUSTOM_ID: na12878
:END:
*** Génération du profile
:PROPERTIES:
:CUSTOM_ID: génération-du-profile
:END:
Test dans exome validator

Il faut un vcf non compressé puis générer le modele

#+begin_src sh
cd  baid2020/grch38/vcf/hiseq4000/wes_agilent/50x/ && gunzip HG001.hiseq4000.wes-agilent.50x.gatk4.grch38.vcf 
./result/bin/seqToProfile -b baid2020/grch38/bam/hiseq4000/wes_agilent/50x/HG001.hiseq4000.wes-agilent.50x.dedup.grch38.bam -t baid2020/bed/ -v baid2020/grch38/vcf/hiseq4000/wes_agilent/50x/HG001.hiseq4000.wes-agilent.50x.gatk4.grch38.vcf -r GCA_000001405.15_GRCh38_full_analysis_set.fna.gz | save hg001-hiseq4000-agilent-grch38.model
#+end_src

Avec bisonex

#+begin_src sh
gunzip  ../bisonex/out/call_variant/haplotypecaller/2300346867_63118093-NA12878-GRCh38/2300346867_63118093-NA12878-GRCh38.haplotypecaller.vcf.gz
#+end_src

Génération du profil (7min en séquentiel)

#+begin_src slurm
#!/bin/bash -l
# Fichier submission.SBATCH

#SBATCH --job-name="seqToProfile"
#SBATCH --output=%x.%J.out   ## %x=job name, %J=job id
#SBATCH --error=%x.%J.out
 # walltime (hh:mm::ss) max is 8 days
#SBATCH -t 4:00:00
#SBATCH --partition=smp
#SBATCH -c 1  ## request 16 cores (MAX is 32)
#SBATCH --mem=16G ## (MAX is 96G)
#SBATCH --mail-user=apraga@chu-besancon.fr
#SBATCH --mail-type=END,FAIL   # notify when job end/fail

module load nix
./result/bin/seqToProfile  -b ../bisonex/out/preprocessing/recalibrated/2300346867_63118093-NA12878-GRCh38/2300346867_63118093-NA12878-GRCh38.recal.bam -t ../bisonex/capture/Twist_Exome_Core_Covered_Targets_hg38.bed -v ../bisonex/out/call_variant/haplotypecaller/2300346867_63118093-NA12878-GRCh38/2300346867_63118093-NA12878-GRCh38.haplotypecaller.vcf -r genome/GCA_000001405.15_GRCh38_full_analysis_set.fna > na12878-bisonex-grch38.model
#+end_src

** Fichiers de configuration
:PROPERTIES:
:CUSTOM_ID: fichiers-de-configuration
:END:
Le fichier définissant les variants doit être séparé par des
tabulations.

*** Variants sangers sur HG001
:PROPERTIES:
:CUSTOM_ID: variants-sangers-sur-hg001
:END:
Fichiers de configurations : reads de 150bp et profondeur de 100 (200 =
11G par fastq alors que notre cible est 3).

#+begin_example
ref = ../genome/GCA_000001405.15_GRCh38_full_analysis_set.fna
profile = na12878-bisonex-grch38.model
variation = ./sanger_simuscop.txt
target = ../../bisonex/capture/Twist_Exome_Core_Covered_Targets_hg38.bed
name = bisonex
output = na12878-simuscop
layout = PE
threads = 4
verbose = 1
coverage = 100
# According to the bam
insertSize = 150
#+end_example

Le fichier définissant les variants doit être séparé par des
tabulations. Il est généré par
=~/research/bisonex/code/simuscop/tosimuscop.nu=

Pour les variations: - la position des délétions définit le début de la
délétion exactement et la longueur est le nombre de bases supprimées
(logique...) - l'insertion se fera entre la position définie et celle
d'après (logique aussi)

F ### Insertion

#+begin_src slurm
#!/bin/bash -l
# Fichier submission.SBATCH

#SBATCH --job-name="simuscop"
#SBATCH --output=%x.%J.out   ## %x=job name, %J=job id
#SBATCH --error=%x.%J.out
 # walltime (hh:mm::ss) max is 8 days
#SBATCH -t 4:00:00
#SBATCH --partition=smp
#SBATCH -c 4  ## request 16 cores (MAX is 32)
#SBATCH --mem=16G ## (MAX is 96G)
#SBATCH --mail-user=apraga@chu-besancon.fr
#SBATCH --mail-type=END,FAIL   # notify when job end/fail

module load nix
simuReads sanger-simuscop.config
#+end_src

** Comparaison variants sangers NA12878
:PROPERTIES:
:CUSTOM_ID: comparaison-variants-sangers-na12878
:END:
Appel de variant

11 faux négatifs - 4 "vrais", que des SNVs - chr10 71741823 : non
présent dans bed ? - chr17 7906605: 3 reads sur 34 dans le BAM donc non
logique qu'il ne soit pas détecté - chr19 42273954 : non présent dans
BED ? - chr21 43426167 : devrait le détecter. - 7 sur la zygosity: tous
SNVS et tous (hormis 1) ont 100% de leur reads porteur de l'allèle
alternative... Limite de ce système avec haplotypecaller ? - chr1
39388062\\
- chr3 9436861 - chr9 137452819\\
- chr11 77337387\\
- chr12 51786689\\
- chr19 5077400 - chr19 13506173

Études igv

samtools view NA12878-sanger-simuscop-GRCh38.recal.bam
chr10:71741823-71741823 chr17:7906605-7906605 chr19:42273954-42273954
chr21:43426167-43426167 -b > simuscop-missed.bam samtools view
2300346867_63118093-NA12878-GRCh38.recal.bam chr10:71741823-71741823
chr17:7906605-7906605 chr19:42273954-42273954 chr21:43426167-43426167 -b
> simuscop-missed-ref.bam

Région non couverte. On teste les fichier de capture suivant -
hg38_exome_comp_spikein_v2.0.2_targets_sorted.re_annotated.bed -
hg38_exome_v2.0.2_targets_sorted_validated.re_annotated.bed -
Twist_Comprehensive_Exome_Covered_Targets_hg38.bed -
Twist_Exome_Core_Covered_Targets_hg38.bed -
Twist_Exome_RefSeq_targets_hg38.bed

L'exome core covered ne contient pas (celui qu'on utilise) !! Les autres
oui. Il manque - l'exon 2 de /CIC/ (chr19) - l'exon 38 de CDH38 (non
visible IGV en Refseq)'un gène non connu dans RefSeq On teste la
couverture du BAM pour chacun des BED (voir
[[file:validation/configuration.md][configuration]]: clairement pas le
meilleur. On reste là-dessus vu qu'on n'a pas la specification de Cento.

​## Notes La profondeur semble être la profondeur maximale au centre de
l'intervalle.

** Clinvar
:PROPERTIES:
:CUSTOM_ID: clinvar
:END:
On utilise le script suivant (aussi dans
exomevalidator/clinvar/clinvar.nu pour le moment)

#+begin_src nu
wget https://ftp.ncbi.nlm.nih.gov/pub/clinvar/vcf_GRCh38/clinvar.vcf.gz
wget https://ftp.ncbi.nlm.nih.gov/pub/clinvar/vcf_GRCh38/clinvar.vcf.gz 
# Ajout du header
 zgrep '^#' ../../data/clinvar.vcf.gz | save clinvar_twist_exome.vcf
# Suppression des chr
sed 's/^chr//' ../../../bisonex/capture/Twist_Exome_Core_Covered_Targets_hg38.bed  | save Twist_Exome_Core_Covered_Targets_hg38_nochr.bed
# Intersection
bedtools intersect -a ../../data/clinvar.vcf.gz -b Twist_Exome_Core_Covered_Targets_hg38_nochr.bed | save -a clinvar
bgzip clinvar_twist_exome.vcf
tabix -p vcf clinvar_twist_exome.vcf.gz
# Seulement classe 4 u 5
bcftools view -i 'INFO/CLNSIG == "Pathogenic" || INFO/CLNSIG == "Likely_pathogenic"' clinvar_twist_exome.vcf.gz -o clinvar_twist_exome.vcf_patho.gz
# Extraction en nu en enlevant les gros remaniment (> 10bp)
bcftools query  -f '%CHROM;%POS;%REF;%ALT;%INFO/CLNSIG;%INFO/CLNVC' clinvar_twist_exome.vcf_patho.gz | from csv -s ';' -n | where ($it.column3 | str length) < 10 and ($it.column4 | str length) < 10 | to csv -s '\t' | save clinvar_twist_patho_small.tsv
# On prend des variants à au moins 10bp d'écart
awk 'BEGIN{prev=0}{ if ($2-$prev>10) { print $0; prev=$2}}' clinvar_twist_patho_small.tsv | save clinvar_twist_patho_sampled.tsv
#  On extrait les duplications, insertion, deletion, snv
let df = open "clinvar_twist_patho_sampled.tsv" --raw | from tsv -n | update column6 {|e| if ($e.column6 == "Deletion") {"d"} else if ($e.column6 == "Insertion" or $e.column6 == "Duplication") { "i" } else if ($e.column6 == "single_nucleotide_variant") {"s"}} | where not ($it.column6 | is-empty)
let df2 = $df | update column1 {|e| $"chr($e.column1)"} | insert pop "bisonex" | insert zyg "het"
$df2 | where column6 == "i" | update column4 {|e| $e.column4 | str substring 1.. } | select column6 pop column1  column2 column4 zyg | to tsv -n | save clinvar-simuscop.tsv 
$df2 |  where column6 == "d"   | update column2 {|e| $e.column2 + 1} | insert length {|e| ($e.column3 | str length) - ($e.column4 | str length)} | select column6 pop column1 column2 length zyg | to tsv -n | save -a clinvar-simuscop.tsv 
$df2 |  where column6 == "s"  | select column6 pop column1 column2 column3 column4  zyg | to tsv -n | save -a clinvar-simuscop.tsv 
#+end_src

On vérifie après coup qu'on a bien les patho/probabelement patho seuls

#+begin_src nu
❯ bcftools query  -f '%INFO/CLNSIG' clinvar_twist_exome.vcf_patho.gz | lines | sort | uniq -c
╭───┬───────────────────────────────────┬────────╮
│ # │               value               │ count  │
├───┼───────────────────────────────────┼────────┤
│ 0 │ Likely_pathogenic                 │  58885 │
│ 1 │ Likely_pathogenic,_low_penetrance │      6 │
│ 2 │ Pathogenic                        │ 143575 │
#+end_src

Pour comparer les variants, ils nous faut un VCF sans les gros indel. Le
script ci-dessus l'a écrit au format CSV donc :

#+begin_src nu
zgrep  '^#' clinvar_twist_exome.vcf_patho.gz | save clinvar_ref.vcf -f
zgrep -v '^#' clinvar_twist_exome.vcf_patho.gz | from tsv -n | where ($it.column4 | str length) < 10 and ($it.column5 | str length) < 10 | to tsv -n | save clinvar_ref.vcf -a
#+end_src

Et il faut rajouter "chr" pour la comparaison

#+begin_example
sed '/^#/! s/^/chr/' clinvar_ref.vcf -i.bak
bgzip clinvar_ref.vcf
tabix -p vcf clinvar_ref.vcf.gz
#+end_example

Il manque la colonne GT donc on désactive le sample

rtg vcfeval -b scripts/clinvar/clinvar_ref.vcf.gz -c
~/code/bisonex/out/call_variant/haplotypecaller/NA12878-clinvar-simuscop-GRCh38/NA12878-clinvar-simuscop-GRCh38.haplotypecaller.vcf.gz
-t genome/sdf -o clinvar-simuscop --output-mode=annotate --sample ALT

Résultat : très nombreux avertissements que certaines des zones trop
complexes n'ont pas pu être évalée

#+begin_example
 Threshold  True-pos-baseline  True-pos-call  False-pos  False-neg  Precision  Sensitivity  F-measure
----------------------------------------------------------------------------------------------------
 None             141609         132069       1306      44081     0.9902       0.7626     0.8616
 
#+end_example

Autre test : bedtools intersect -a clinvar_ref.vcf.gz -b
~/code/bisonex/out/call_variant/haplotypecaller/NA12878-clinvar-simuscop-GRCh38/NA12878-clinvar-simuscop-GRCh38.haplotypecaller.vcf.gz
-v | wc -l 42140 Pour zgrep -v '^#' clinvar_ref.vcf.gz | wc -l 189038