Skip to content

Commit ed222c6

Browse files
author
sacha
committed
change image path
1 parent ab1ae7f commit ed222c6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+265
-265
lines changed

content/assemblage.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,21 @@ Si nous représentons chaque k-mer par un nœud, alors deux nœuds consécutifs
4444
Par exemple le k-mer T**GC** précède le k-mer **GC**C car le suffixe du premier (-GC) correspond au préfixe du second (GC-). Cette relation se représente avec deux nœuds et une flèche :
4545

4646
<div class="figure">
47-
<img src="../images/assemblage/hamilton_node.png" />
47+
<img src="images/assemblage/hamilton_node.png" />
4848
<div class="legend"> Relation entre deux k-mers dans un graphe. Le suffixe (k-1) du premier correspond au préfixe (k-1) du second</div>
4949
</div>
5050

5151
Nous pouvons alors construire un graphe en reliant tous nos k-mers via leurs suffixes/préfixes et obtenir la figure suivante :
5252

5353
<div class="figure">
54-
<img src="../images/assemblage/hamilton_graphe.png" />
54+
<img src="images/assemblage/hamilton_graphe.png" />
5555
<div class="legend"> Graphe représentant chaque k-mer par un nœud. Saurez-vous trouver le chemin passant par tous les nœuds une seule fois ?</div>
5656
</div>
5757

5858
Pour reconstruire la séquence d'origine, il suffit de trouver un chemin passant par tous les nœuds une fois et une seule. On appelle ce chemin [un parcours Hamiltonien](https://fr.wikipedia.org/wiki/Graphe_hamiltonien). Essayez de le trouver par vous même avant de regarder l'animation ci-dessous :
5959

6060
<div class="figure">
61-
<img src="../images/assemblage/hamilton_graphe_path.gif" />
61+
<img src="images/assemblage/hamilton_graphe_path.gif" />
6262
<div class="legend"> Parcours Hamiltonien dans le graphe. Chaque nœud est traversé une fois et une seule</div>
6363
</div>
6464

@@ -69,29 +69,29 @@ Il nous faut une meilleure méthode…
6969
Nous allons cette fois construire un graphe en représentant les k-mers par des flèches. Les nœuds contiendront le préfixe et le suffixe du k-mer. Par exemple si une flèches représente le k-mer **TGC** alors les deux nœuds autour de la flèche sont **TG** et **GC**.
7070

7171
<div class="figure">
72-
<img src="../images/assemblage/euler_node.png" />
72+
<img src="images/assemblage/euler_node.png" />
7373
<div class="legend"> Représentation d'un k-mer par une flèches. Les nœuds contiennent les suffixes et préfixes des k-mers</div>
7474
</div>
7575

7676
Nous pouvons alors construire le graphe suivant :
7777

7878
<div class="figure">
79-
<img src="../images/assemblage/not_fusion_graphe.png" />
79+
<img src="images/assemblage/not_fusion_graphe.png" />
8080
<div class="legend"> Graphe représentant chaque k-mer par une flèches. Les nœuds sont les préfixes/suffixes. Certain nœuds en couleur sont présent plusieurs fois et peuvent être fusionnés</div>
8181
</div>
8282

8383
Cette fois, au lieu de chercher un chemin passant par **tous les nœuds** une seule fois, nous allons chercher un chemin passant par **toutes les flèches** une fois et une seule. En le recherchant, vous verrez tout de suite qu'un tel parcours n'existe pas dans ce dernier graphe. Par exemple, on ne peut pas traverser tous les chemins **AT**->**TG** sans être bloqué.
8484
Pour remédier à ce problème, nous allons fusionner tous les nœuds identiques. Visualisez par exemple les 3 nœuds violets <b style="color:#5C3566;">AT</b> et imaginez-les se rapprocher pour former un seul nœud sans jamais toucher aux flèches. Vous obtenez alors un unique nœud **AT** relié par 3 flèches au nœud **TG**. Faites la même chose pour les autres nœuds identiques et vous obtiendrez le fameux [graphe de de Bruijn](https://fr.wikipedia.org/wiki/Graphe_de_de_Bruijn).
8585

8686
<div class="figure">
87-
<img src="../images/assemblage/debruijn_graphe.png" />
87+
<img src="images/assemblage/debruijn_graphe.png" />
8888
<div class="legend"> Graphe de de Bruijn </div>
8989
</div>
9090

9191
Vous pouvez maintenant chercher le chemin passant par toutes les flèches une fois et une seule. C'est ce qu'on appelle un parcours [Eulérien](https://fr.wikipedia.org/wiki/Graphe_eul%C3%A9rien). Essayer de le trouver par vous même, ce n'est pas très difficile.
9292

9393
<div class="figure">
94-
<img src="../images/assemblage/euler_path.gif" />
94+
<img src="images/assemblage/euler_path.gif" />
9595
<div class="legend"> Parcours Eulérien dans un graphe de de Bruijn </div>
9696
</div>
9797

@@ -103,7 +103,7 @@ Voyons maintenant la théorie mathématique derrière ce parcours que l'on doit
103103
En 1873, un mathématicien du nom de Leonhard Euler s'est posé la question de savoir si il existait une promenade dans la ville de Königsberg passant par tous les ponts une fois et une seule. C'est [le problème des 7 ponts de Königsberg](https://fr.wikipedia.org/wiki/Probl%C3%A8me_des_sept_ponts_de_K%C3%B6nigsberg) qui peut être modélisé sous la forme d'un graphe :
104104

105105
<div class="figure">
106-
<img src="../images/assemblage/Konigsberg_bridges.png" />
106+
<img src="images/assemblage/Konigsberg_bridges.png" />
107107
<div class="legend"> Gauche : Pont de Königsberg Droite : représentation des ponts par un graphe. Les chiffres indiquent le nombres d'arêtes relié au nœud. Existe-t-il un chemin passant par tous les ponts ?</div>
108108
</div>
109109

@@ -114,7 +114,7 @@ Dans un graphe orienté comme le notre, c'est à dire lorsque les arrêtes sont
114114
Pour que les conditions du théorème de Euler s'appliquent à notre graphe de de Bruijn, nous devons tricher en ajoutant une flèche entre le dernier nœud **TA** et le premier nœud **GT** et former ainsi un cycle. Vous constaterez alors, que pour chaque nœud, il y a autant de flèches d'entrée que de flèches de sortie. Nous pouvons alors conclure, sans même le connaître, qu'un chemin Eulérien existe.
115115

116116
<div class="figure">
117-
<img src="../images/assemblage/euler_cycle.png"/>
117+
<img src="images/assemblage/euler_cycle.png"/>
118118
<div class="legend"> Graphe de de Bruijn modifié pour pouvoir avoir un cycle de Euler. En rouge le nombre de flèches à l'entré d'un nœud, en vert le nombre de flèches à la sortie d'un nœud. Le [degré](https://fr.wikipedia.org/wiki/Degr%C3%A9_(th%C3%A9orie_des_graphes)) d'entré et de sortie pour chaque nœud sont identique. D'après le théorème, il existe donc un chemin Eulérien passant par toutes les flèches une fois et une seule</div>
119119
</div>
120120

content/binary_file.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Date: 2015-04-06 16:25:55
44
Tags: ab1,fsa,sanger
55
Category: biologie, bioinformatique,Qt
66
Author: Sacha Schutz
7-
SIDEBARIMAGE:../images/post8/cover.jpg
7+
SIDEBARIMAGE:images/post8/cover.jpg
88
Status:draft
99

1010

@@ -19,7 +19,7 @@ Lorsque que vous ouvrez un fichier binaire, comme une image png, avec votre edit
1919

2020

2121
<p align="center">
22-
<img src="../images/raw_data.jpg">
22+
<img src="images/raw_data.jpg">
2323
</p>
2424

2525

@@ -34,7 +34,7 @@ Essayons maintenant avec un caractère en considérant qu'il y a 256 caractères
3434

3535

3636
<p align="center">
37-
<img src="../images/1octet.png">
37+
<img src="images/1octet.png">
3838
</p>
3939

4040
### L'octet ou le byte
@@ -45,19 +45,19 @@ L'octet peut être écris sous sa représentation binaire en utisant les symbole
4545

4646

4747
<p align="center">
48-
<img src="../images/4octet.png">
48+
<img src="images/4octet.png">
4949
</p>
5050

5151
### Le boutisme ou byte order
5252
Le boutisme indique le sens de lecture d'un type de donnée. En fonction de l'architecture de l'ordinateur, de type de fichier binaire, les informations peuvent être lu de droite à gauche ou inversement. Imaginez que vous lisez une page d'un livre. Chaques mot représente un type de donné de taille différente. On appelle grand-boutiste (big-endian) lorsque le mot est lu normalement de gauche à droite. Par exemple si nous voulions encoder le mot Leo et l'entier 42, l'organisation des octets seraient le suivant:
5353
<p align="center">
54-
<img src="../images/bigendian.png">
54+
<img src="images/bigendian.png">
5555
</p>
5656

5757
A l'inverse, on appelle petit-boutiste (little-endian) lorsque les mots sont lu de droite à gauche. On voit bien dans l'exemple ci dessous, que pour récupéré l'information 42, il est nécessaire de lire l'entier de droite à gauche. Notez également que la notion de byte order n'a de sens que pour les types de donné codé sur plus de 1 octet. Un mot d'une lettre se lit pareil des deux sens, de même qu'avec un type d'un octet comme le char.
5858

5959
<p align="center">
60-
<img src="../images/littleendian.png">
60+
<img src="images/littleendian.png">
6161
</p>
6262

6363

@@ -67,7 +67,7 @@ Ci dessous un tableau montrant les principaux types utilisés en C++ avec leurs
6767
Si vous êtes curieux, je vous invite à regarder comment un nombre à virgule (float) est stocké sur 32 bit en suivant la norme ISO IEEE754.
6868

6969
<p align="center">
70-
<img src="../images/typecpp.png">
70+
<img src="images/typecpp.png">
7171
</p>
7272

7373

@@ -86,7 +86,7 @@ Pour ma part j'utilise le module hexviewer de sublime text. Mais il existe un pl
8686

8787

8888
<p align="center">
89-
<img src="../images/hexviewer.png">
89+
<img src="images/hexviewer.png">
9090
</p>
9191

9292

@@ -97,7 +97,7 @@ Avant de se jeter dans les entrailles de notre fichier ABIF, il nous faut le doc
9797
En résumé, les fichier abif sont composé de 3 blocks **HEADER** , **DIRECTORIES** et **DATA** contenant des données binaires avec un sens de lecture de type gros-boutiste.
9898

9999
<p align="center">
100-
<img src="../images/abif_spec.png">
100+
<img src="images/abif_spec.png">
101101
</p>
102102

103103
### Header

content/biowasm.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Modified: 2024-09-22 19:30:31
55
Tags: web
66
Category: informatique
77
Author: Sacha schutz
8-
SIDEBARIMAGE:../images/common/term_banner.jpeg
8+
SIDEBARIMAGE:images/common/term_banner.jpeg
99

1010

1111
Récemment, une collègue m'a fait découvrir [Biowasm](https://biowasm.com/). C'est une collection d'outils bioinformatiques bien connus, compilés en [WebAssembly](https://fr.wikipedia.org/wiki/WebAssembly). Concrètement, cela signifie que nous pouvons créer des interfaces graphiques pour nos collègues non-spécialistes en bioinformatique, directement sur une simple page web statique, sans avoir besoin de serveur. Et Justement, un biologiste m'a demandé s'il était possible de générer un fichier [FASTQ](https://fr.wikipedia.org/wiki/FASTQ) réduit, autrement dit de faire un échantillonnage aléatoire (downsampling). C'était donc une excellente occasion de tester Biowasm en construisant une page web qui fait le travail.

content/covid_ngs.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Modified: 2021-01-25 23:51:29
55
Tags: virus,pipeline,sars-cov-2,covid
66
Category: bioinformatique
77
Author: Sacha SCHUTZ
8-
SIDEBARIMAGE:../images/common/virus_banner.jpeg
8+
SIDEBARIMAGE:images/common/virus_banner.jpeg
99

1010

1111
La [pandémie mondiale de Covid-19](https://fr.wikipedia.org/wiki/Pand%C3%A9mie_de_Covid-19) a créé un élan sans précédent dans la production scientifique de données. Notamment, les données sur les génomes du virus produites par [séquençage haut débit](https://fr.wikipedia.org/wiki/S%C3%A9quen%C3%A7age_de_l%27ADN#S%C3%A9quen%C3%A7age_haut_d%C3%A9bit_(HTS)) qui permettent aujourd'hui d'identifier de nouvelles mutations comme la [N501Y](https://fr.wikipedia.org/wiki/Variant_501.V2#Mutations) du variant anglais [B.1.1.7](https://fr.wikipedia.org/wiki/VOC-202012/01) où une [Asparagine](https://fr.wikipedia.org/wiki/Asparagine) (N) est remplacée par une [Tyrosine](https://fr.wikipedia.org/wiki/Tyrosine) (Y) à la position 501 de la [protéine S](https://fr.wikipedia.org/wiki/P%C3%A9plom%C3%A8re).
@@ -87,7 +87,7 @@ Faisant d'une pierre deux coups, je trie le fichier par position, le convertit a
8787
Pour visualiser cet alignement, vous pouvez utiliser le logiciel **IGV** disponible à [cette adresse](http://software.broadinstitute.org/software/igv/). Une fois lancé, chargez d'abord le génome de Wuhan depuis le menu *Genomes > Load Genome From Server* en cherchant SARS-Cov-2. Puis chargez le fichier *SRR13182925.bam* précédemment créé via *File > Load From File*.
8888
Vous obtiendrez ainsi la vue suivante où j'ai zoomé sur le gène S pour visualiser une mutation.
8989

90-
<div class="figure"> <img src="../images/covid_ngs/IGV.png" /> <div class="legend"> Visualisation des reads alignés sur le génome de référence avec le logiciel IGV. La flèche montre une mutation située sur le gène S visible sur l'ensemble des reads </div> </div>
90+
<div class="figure"> <img src="images/covid_ngs/IGV.png" /> <div class="legend"> Visualisation des reads alignés sur le génome de référence avec le logiciel IGV. La flèche montre une mutation située sur le gène S visible sur l'ensemble des reads </div> </div>
9191

9292
### Appel des variants et annotation
9393
Vous pourriez parcourir l'alignement visuellement et chercher toutes les mutations. Mais il est préférable de procéder de façon automatique grâce à un [variant caller](https://www.researchgate.net/figure/Commonly-used-NGS-variant-calling-software-Download-information-for-these-software-is_tbl1_232077026). Pour cela j'utilise [freebayes](https://github.com/freebayes/freebayes), qui à partir du fichier BAM, crée un [fichier VCF](https://en.wikipedia.org/wiki/Variant_Call_Format) contenant l'ensemble des variants détectés. Avec [SnpSift](https://pcingola.github.io/SnpEff/), on garde uniquement les variants de bonne qualité avec un score superieur à 30 et on compresse avec [bgzip](http://www.htslib.org/doc/bgzip.html) le fichier pour pouvoir l'indexer avec [tabix](http://www.htslib.org/doc/tabix.html):
@@ -146,7 +146,7 @@ Puis j'ai réalisé un pipeline avec [Snakemake](https://snakemake.readthedocs.i
146146
Après quelques heures de calcul, j'ai finalement obtenu ce fichier VCF qui m'a permis d'analyser la fréquence des variants le long du génome que j'ai reporté dans le graphique suivant.
147147
Au total, j'ai trouvé environ 630 variants répartis le long du génome dont 4 mutations particulièrement fréquentes.
148148

149-
<div class="figure"> <img src="../images/covid_ngs/lollipop.png" /> <div class="legend"> Repartition des variants trouvés parmi les 245 génomes avec leurs fréquences </div> </div>
149+
<div class="figure"> <img src="images/covid_ngs/lollipop.png" /> <div class="legend"> Repartition des variants trouvés parmi les 245 génomes avec leurs fréquences </div> </div>
150150

151151
Ces 4 mutations sont probablement la conséquence d'un processus de sélection.
152152
En googlant, je trouve [ce papier](https://www.biorxiv.org/content/10.1101/2020.05.12.092056v1) présentant les mutations Thr265Ile and Gln57His comme exclusif à la population Nord-Américaines. Ce qui colle bien avec l'origine de nos données.
@@ -157,7 +157,7 @@ Plus intéressant, est le variant Asp614Gly situé sur le gène (S) de la [prot
157157

158158
J'ai également reconstruit chaque génome que j'ai assigné à sa ligné avec l'outil [pangolin](https://github.com/cov-lineages/pangolin). J'obtient la distribution suivant:
159159

160-
<div class="figure"> <img src="../images/covid_ngs/lineage.png" /> <div class="legend"> Distribution des lignées de virus </div> </div>
160+
<div class="figure"> <img src="images/covid_ngs/lineage.png" /> <div class="legend"> Distribution des lignées de virus </div> </div>
161161

162162
Nous pouvons voir ici la présence de ligné [B.1.2](https://cov-lineages.org/lineages/lineage_B.1.2.html) en grand nombre. D'après [le site cov-lineages](https://cov-lineages.org/), elle est exclusivement Nord-américaine est descend de la ligné [B.1](https://cov-lineages.org/lineages/lineage_B.1.html) apparu précocement et que l'on trouve partout dans le monde.
163163
Quand à la ligné [B.1.369](https://cov-lineages.org/lineages/lineage_B.1.369.html), elle a d'abord été vu en Océanie puis aux Etats-Unis à partir de Juin 2020.

content/distribution-ki2.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Une distribution aléatoire, c'est juste une liste de nombres obtenus par une lo
2020

2121
Si vous comptez la fréquence de chaque chiffre, c'est à dire combien de fois il y a de 2, de 3 etc ... Vous obtiendrez approximativement 1/6 qui correspond à la probabilité du dé pour chaque chiffre. Cette distribution suit une [loi de probabilité](https://fr.wikipedia.org/wiki/Loi_de_probabilit%C3%A9) dite "[uniforme](https://fr.wikipedia.org/wiki/Loi_uniforme_discr%C3%A8te)". Graphiquement, ça ressemble à ça :
2222

23-
<div class="figure"> <img src="../images/distribution-ki2/uniform.png" /> <div class="legend"> Distribution uniforme. L'axe des abscisses représente le chiffre et l'axe des ordonnées le nombre de fois que ce chiffre est obtenu </div> </div>
23+
<div class="figure"> <img src="images/distribution-ki2/uniform.png" /> <div class="legend"> Distribution uniforme. L'axe des abscisses représente le chiffre et l'axe des ordonnées le nombre de fois que ce chiffre est obtenu </div> </div>
2424

2525

2626
### La distribution normale
@@ -34,7 +34,7 @@ Par exemple, pour générer une distribution de 10000 valeurs avec une espéranc
3434
#0.26 -0.38 -1.15 -0.81 1.53 1.11 0.45 -1.09 -0.15 ....
3535
sns.distplot(x)
3636

37-
<div class="figure"> <img src="../images/distribution-ki2/normal.png" /> <div class="legend"> Distribution normale. La majorité des valeurs tourne autour de 0</div> </div>
37+
<div class="figure"> <img src="images/distribution-ki2/normal.png" /> <div class="legend"> Distribution normale. La majorité des valeurs tourne autour de 0</div> </div>
3838

3939
### La distribution de χ2
4040
La distribution de χ2 est obtenu en sommant les carrés de k nombres indépendants choisis au hasard dans une distribution normale d'espérance 0 et de variance 1.
@@ -67,7 +67,7 @@ En testant avec différents degrés de liberté :
6767
for ddl in range(1,10):
6868
sns.distplot(dist_ki2(ddl, 1000))
6969

70-
<div class="figure"> <img src="../images/distribution-ki2/ki2_anim.gif" /> <div class="legend"> Différente distribution de ki2 </div> </div>
70+
<div class="figure"> <img src="images/distribution-ki2/ki2_anim.gif" /> <div class="legend"> Différente distribution de ki2 </div> </div>
7171

7272
Essayer pour voir avec un degré de liberté > 100. Vous constaterez qu'on se retrouve avec une distribution d'allure normale d'espérance k et de variance 2k.
7373

0 commit comments

Comments
 (0)