* Démographie
:PROPERTIES:
:CUSTOM_ID: démographie
:END:
** Clinique
:PROPERTIES:
:CUSTOM_ID: clinique
:END:
*** Extraction
:PROPERTIES:
:CUSTOM_ID: extraction
:END:
Extraction de la clinique au format HPO depuis les compte-rendus
extraits en texte =checkpipeline -i data -o clinical.csv=

*** Nettoyage
:PROPERTIES:
:CUSTOM_ID: nettoyage
:END:
1. Nettoyage à la main en découpant les lignes avec des virgules (+
   divers)
2. Regarder les données pour corriger les erreurs avec espaces etc :
   =open clinical.csv | get Clinical | str downcase | uniq -c  | sort-by count=
3. On utilise un script Rust pour comparer les termes à la base de
   données HPO. Il faut télécharger localement la base et il faut la
   clinique dans ../data/clinical_nodup.csv. Pour la base HPO, on va
   dans ~/code/hpo et il faut avoir téléchargé

data/ ├── hp.obo ├── phenotype.hpoa └── phenotype_to_genes.txt

#+begin_src sh
cargo run --release  --example obo_to_bin data ontology.hpo
cp ontology.hpo ~/research/bisonex/code/hpo
cd /research/bisonex/code/hpo
cabal run --release cleanup
#+end_src

Le fichier de sortie est =clinical_corrected.csv= avec une nouvelle
colonne correspondant à l'annotation corrigée (=Clinical_corr=).

On regarde ensuite manuellement les termes qui n'ont pas été retrouvés

#+begin_src nu
open clinical_corrected.csv | where ($it.Clinical_corr | is-empty) | get Clinical | sort | uniq
#+end_src

*** Catégories
:PROPERTIES:
:CUSTOM_ID: catégories
:END:
À partir de ../data/clinical_corrected.csv, on va regarder les parents
dans la nomenclature HPO qui sont à une distance de 3 de la racine et le
résultat est généré dans clinical_main.csv

#+begin_src sh
cargo run --release --bin clinical_main
#+end_src

Puis on regarde les termes les plus courants et les catégories

#+begin_src nu
open clinical_corrected.csv | get Clinical_corr | uniq -c | sort-by count | to csv
open clinical_main.csv | select major_parent len | sort-by len | to csv
#+end_src

*** Graphe
:PROPERTIES:
:CUSTOM_ID: graphe
:END:
Génération d'un fichier pour graphviz (test.dot) partir de
clinical_main.csv

#+begin_src sh
cargo run --release --bin graph
dot -Tsvg test.dot | save test.svg -f
#+end_src

*** Divers
:PROPERTIES:
:CUSTOM_ID: divers
:END:
NB: les dates ont été trouvées avec
=rg "Report date: .*" data/* -o -I | lines | each {|e| $e | str replace "Report date: " "" } | save dates.txt=
et en regardant à la main des dates extrémales

Attention, certains patients sont en double:

#+begin_src julia
using DataFramesMeta, CSV
d = CSV.read("clinical.csv", DataFrame)
d2 = @by d :Patient :ER :mysum = length(:ER)
ids = : ids = findall(nonunique(@select d2 :Patient))
d2[ids, :]

# 52 Duplicate patients
nrow(unique(d2[ids, :]))
# 911 patients
nrow(unique(@select d :Patient))
#+end_src

Si on veut supprimer les doublons, on les a directement. Mais on
supprime l'un des doublons au hasard...

#+begin_src julia
CSV.write("todelete.csv", d2[ids, [:ER]])
#+end_src

On enlève "ER" à lmain de ce fichier puis

#+begin_example
rg  -v -f todelete.csv clinical.csv | save clinical_nodup.csv
#+end_example

*** Résultats
:PROPERTIES:
:CUSTOM_ID: résultats
:END:
Termes HPO les plus courants (>= 40)

#+begin_src nu
open ../data/clinical_nodup.csv | get Clinical | uniq -c | sort-by count | where count >= 40 | to csv
#+end_src

** Résultats d'exomes
:PROPERTIES:
:CUSTOM_ID: résultats-dexomes
:END:
1178 exomes dont 586 négatifs

#+begin_src nu
open ~/annex/data/centogene/variants/variants_centogene_final.csv | select "patient ID" "genomic (hg38)" | uniq | where "genomic (hg38)" == "negatif" | length
open ~/annex/data/centogene/variants/variants_centogene_final.csv | select "patient ID" "genomic (hg38)" | uniq | length 1178
#+end_src

1056 patients uniques avec exome

#+begin_src nu
open ~/annex/data/centogene/variants/variants_centogene_final.csv | get "patient ID" | uniq | length
#+end_src

247 données brutes

#+begin_src nu
ls ~/annex/data/bisonex/call_variant/haplotypecaller/2* | length
#+end_src

562 variant uniques:

#+begin_src nu
open ~/annex/data/centogene/variants/variants_centogene_final.csv | where coding != negatif | select "transcript (cento)" conudin g | uniq | length
#+end_src

Classification variant (attention, 4 variants en trop, on en enlève 1
partout.): TODO

Type variants

#+begin_src nu
❯ open ~/annex/data/centogene/variants/variants_centogene_final.csv | get "genomic (hg38)" | uniq  -c | where value =~ ">" | length
❯ open ~/annex/data/centogene/variants/variants_centogene_final.csv | get "genomic (hg38)" | uniq  -c | where value =~ "del" | length
❯ open ~/annex/data/centogene/variants/variants_centogene_final.csv | get "genomic (hg38)" | uniq  -c | where value =~ "dup" | length
❯ open ~/annex/data/centogene/variants/variants_centogene_final.csv | get "genomic (hg38)" | uniq  -c | where value =~ "ins" | length
#+end_src

Zygosity

#+begin_src nu
❯ open ~/annex/data/centogene/variants/variants_centogene_final.csv | select "genomic (hg38)" zygosity | uniq  | get zygosity | uniq -c | to csv
#+end_src

** Versions
:PROPERTIES:
:CUSTOM_ID: versions
:END:
=nix flake show= git+file:///home/alex/code/bisonex └───packages
└───x86_64-linux ├───awscli2: package 'awscli2-2.11.20' ├───bcftools:
package 'bcftools-1.17' ├───bedtools: package 'bedtools-2.31.0' ├───bwa:
package 'bwa-unstable-2022-09-23' ├───default: package
'nextflow-22.10.6' ├───dos2unix: package 'dos2unix-7.4.4' ├───fastqc:
package 'fastqc' ├───gatk: package 'gatk-4.4.0.0' ├───hap-py: package
'hap.py' ├───htslib: package 'htslib-1.17' ├───mosdepth: package
'mosdepth-0.3.3' ├───multiqc: package 'multiqc-1.15' ├───picard-tools:
package 'picard-tools-3.0.0' ├───python: package 'python3-3.10.12-env'
├───r: package 'R-4.2.3-wrapper' ├───rtg-tools: package
'rtg-tools-3.12.1' ├───samtools: package 'samtools-1.17' ├───spip:
package 'spip' ├───sratoolkit: package 'vcftools-0.1.16' ├───vcftools:
package 'vcftools-0.1.16' └───vep: package 'perl5.36.0-ensembl-vep-110'