Partie 2 : Explorons le code source du vaccin BioNTech / Pfizer contre le SARS-CoV-2
Toutes les données sur le vaccin BNT162b2 de cette page proviennent de ce document de l’Organisation mondiale de la Santé.
Cet article est la suite d’une première partie qui explore le fonctionnement du vaccin BioNTech / Pfizer contre le SARS-CoV-2. Commencez par la lire si vous ne l’avez pas encore fait !
Ici on va s’intéresser particulièrement à l’optimisation des codons, et lancer un challenge aux développeurs pour la création d’un algorithme qui produit un résultat le plus proche possible de l’optimisation manuelle du vaccin BioNTech.
Pour le tableau des scores du challenge et les mises à jour, rendez-vous sur l’article original en anglais de Bert Hubert
Traduction par Renaud Guérin
En bref: l’ARNm du vaccin a été optimisé par le fabricant grâce à des substitutions dans l’ARN (par exemple, remplacer UUU
par UUC
) et les gens aimeraient comprendre la logique derrière ces modifications.
Il s’agit d’un problème assez proche de ceux que les cryptologues et les hackers qui décompilent du code rencontrent au quotidien. Sur cette page, vous trouverez tous les détails dont vous avez besoin pour faire l’ingénierie inverse du code du vaccin et comprendre comment il a été optimisé.
Au départ je pensais que ce serait juste un casse-tête amusant, mais je viens d’apprendre que trouver un bon algorithme d’optimisation et le documenter est en fait extrêmement important pour les chercheurs, et pourrait les aider à concevoir du code pour les protéines et les vaccins.
Donc, si vous voulez aider à la recherche sur les vaccins, poursuivez votre lecture !
Le tableau des scores
Chacun est invité à envoyer son algorithme à l’auteur sur [email protected] ou @PowerDNS_Bert.
Le tableau des meilleurs scores n’est pas dans cette traduction, retrouvez-le dans l’article original
BioNTech
C’est une chance que BioNTech ait partagé ces données publiquement. Et bien sûr, nous devons beaucoup aux nombreux chercheurs qui ont travaillé pendant des décennies pour faire avancer la science au point de rendre possible un tel vaccin ! C’est véritablement une merveille.
Et c’est parce que c’est une merveille que je veux tout comprendre sur ce vaccin. La partie 1 décrit en détail ce que contient l’ARNm du vaccin. Cela vous aidera de la lire avant de continuer, je vous promets que ça en vaut la peine.
Cela dit, cette première partie a laissé certaines questions sans réponses, et c’est là que cela devient passionnant.
L’optimisation des codons
Le vaccin contient du code ARN qui crée une copie très légèrement modifiée de la protéine S du SARS-CoV-2.
Pourtant, le code ARN du vaccin en lui-même est très différent de l’original du virus. Le fabricant a fait ces modifications en se basant sur sa compréhension de la nature.
Et de ce que nous avons compris, ces modifications rendent le vaccin beaucoup plus efficace : ce serait donc très intéressant de les regarder dans le détail. Elles pourraient par exemple expliquer pourquoi le vaccin Moderna a besoin de 100 microgrammes et le vaccin BioNTech seulement 30 microgrammes.
Voici le début de la protéine S dans le code ARN du virus et dans celui du vaccin BNT162b2. Les points d’exclamation indiquent les différences.
Virus: AUG UUU GUU UUU CUU GUU UUA UUG CCA CUA GUC UCU AGU CAG UGU GUU
Vaccin: AUG UUC GUG UUC CUG GUG CUG CUG CCU CUG GUG UCC AGC CAG UGU GUU
! ! ! ! ! ! ! ! ! ! ! ! !
L’ARN est littéralement une chaîne de caractères A
, C
, G
et U
. Ces nucléotides ne sont pas physiquement groupés entre eux, mais quand on les analyse de manière logique, cela a du sens de les regarder comme des groupes de 3.
Chaque groupe (appelé codon) correspond à un acide aminé (indiqué par une lettre majuscule). Une chaîne d’acides aminés est une protéine. Voici à quoi ça ressemble:
Virus: AUG UUU GUU UUU CUU GUU UUA UUG CCA CUA GUC UCU AGU CAG UGU GUU
M F V F L V L L P L V S S Q C V
Vaccin: AUG UUC GUG UUC CUG GUG CUG CUG CCU CUG GUG UCC AGC CAG UGU GUU
! ! ! ! ! ! ! ! ! ! ! ! !
On voit bien ici que même si les codons sont différents, leur traduction en acides aminés ne change pas. Il y a 4 x 4 x 4 (64) codons mais seulement 20 acides aminés. Cela veut dire que pour chaque codon, vous avez généralement 2 autres substitutions possibles qui coderont toujours pour le même acide aminé.
Ainsi, dans le deuxième codon, UUU
a été remplacé par UUC
. Cela rajoute un C
au vaccin. Le troisième codon est passé de GUU
à GUG
, ce qui rajoute un G
.
On sait qu’une proportion plus élevée de caractères G
et C
améliore l’efficacité d’un vaccin à ARNm.
S’il n’y avait que ça à faire, on pourrait s’arrêter là : «L’algorithme consiste à remplacer les codons pour avoir un maximum de G et de C».
Mais c’est là qu’on remarque le 9ème codon, qui lui remplace CCA
en CCU
. Au cours des 4000 caractères et quelques du vaccin, cela se produit plusieurs fois.
Notre défi
Le but : trouver un algorithme qui transforme le code ARN “sauvage” en celui du vaccin BNT162b2, parce que tout le monde voudrait comprendre comment transformer de l’ARN viral en vaccin efficace.
L’algorithme ne doit pas forcément générer exactement le même code ARN, mais ce serait super s’il produisait quelque chose de très proche, tout en restant court.
Pour vous aider, j’ai fourni les données sous plusieurs formes, comme expliqué sur la page GitHub.
A noter que dans ces fichiers, le U
mentionné ci-dessus apparaît comme un T
. U
et T
sont les versions ARN et ADN de la même information.
L’endroit le plus simple pour démarrer est le fichier ‘side-by-side.csv’. Il contient la version originale et modifiée de chaque codon, côte à côte:
abspos,codonOrig,codonVaccine
0,ATG,ATG
3,TTT,TTC
6,GTT,GTG
...
3813,TAC,TAC
3816,ACA,ACA
3819,TAA,TGA
Il y a aussi une table d’équivalence qui montre quels codons peuvent être interchangés sans affecter les acides aminés produits. Vous la trouverez dans codon-table-grouped.csv. Et une visualisation ici.
Un exemple d’algorithme
Dans le dépôt GitHub, vous trouverez 3rd-gc.gp.
Il implémente une stratégie simple qui fonctionne comme ceci:
- Si un codon de virus se terminait déjà par G ou C, on le copie dans l’ARNm du vaccin.
- Sinon, on remplace le dernier nucléotide du codon par un G, on regarde si l’acide aminé correspond toujours : si oui, on le copie dans l’ARNm du vaccin.
- On essaie la même chose avec un C.
- A défaut, on copie tel quel.
// cas par défaut, on ne fait rien
our = vir
// on ne fait rien si le codon se termine déjà par G ou C
if(vir[2] == 'G' || vir[2] =='C') {
fmt.Printf("Le codon se termine déjà par G ou C, on ne fait rien.")
} else {
prop = vir[:2]+"G"
fmt.Printf("Tentative de substitution d'un G, nouveau candidat '%s'. ", prop)
if(c2s[vir] == c2s[prop]) {
fmt.Printf("L'acide aminé est toujours le même, c'est fait!")
our = prop
} else {
fmt.Printf("Oups, l'acide aminé a changé. On essaie avec C, nouveau candidat '%s'. ", prop)
prop = vir[:2]+"C"
if(c2s[vir] == c2s[prop]) {
fmt.Printf("L'acide aminé est toujours le même, c'est fait!")
our=prop
}
}
}
Avec cet algorithme, on arrive à une correspondance plutôt médiocre de 53,1% avec le vaccin BioNTech, mais c’est un début !
Lorsque vous concevrez votre algorithme, assurez-vous de ne vous baser que sur l’ARN du virus. Ne trichez pas en allant voir l’ARN BioNTech !
Si vous avez atteint un score supérieur à 53,1%, envoyez un lien vers votre code à [email protected] (ou @PowerDNS_Bert) et il sera ajouté au tableau des scores !
Astuces pour faciliter la tâche
Comme toujours en matière de rétro-ingénierie ou de cryptanalyse, cela aide de comprendre ce que l’on a sous les yeux.
Proportion de GC
Nous savons que l’un des objectifs de «l’optimisation des codons» est d’obtenir plus de C
et de G
dans la version vaccin de l’ARN.
Mais il y a aussi une limite à cela. Dans l’ADN (qui intervient également dans la fabrication du vaccin) G
et C
se lient fortement, au point que si vous mettez trop de ces «nucléotides», il ne se réplique plus efficacement.
Du coup, certaines des modifications sont en fait là pour réduire le pourcentage de GC d’un segment d’ADN s’il commençait à devenir trop élevé. L’auteur a tweeté à ce sujet.
L’optimisation des codons
Certains codons sont rares dans l’ADN humain ou dans certaines cellules. Il se peut que certains codons soient remplacés par d’autres simplement parce qu’ils sont plus couramment utilisés par certaines cellules. Un autre tweet à ce sujet .
Pliage de l’ARN
Jusqu’ici nous ne nous sommes intéressés qu’aux codons.
Mais l’ARN lui-même ne connaît pas le concept de codons : il n’y a pas de marqueur physique pour indiquer où un codon commence et se termine. Cela dit, le premier codon d’une protéine est toujours ATG (ou AUG en version ARN).
L’ARN se recroqueville dans une certaine forme. Il se peut que cette forme aide à échapper au système immunitaire, ou à améliorer la traduction en acides aminés. Cela ne dépend que de la séquence de nucléotides ARN, et non de codons spécifiques.
Vous pouvez envoyer des séquences ARN à ce serveur de l’Institut de chimie théorique de l’Université de Vienne et il pliera l’ARN pour vous. C’est un serveur très sophistiqué qui effectue des calculs méticuleux.
Cette page Wikipédia décrit comment cela fonctionne.
Il se peut que certaines optimisations améliorent le pliage.
On me dit également que cet article de Moderna (un autre fabricant de vaccin à ARNm) peut être utile: la structure de l’ARNm régule l’expression des protéines par des changements dans la demi-vie fonctionnelle.