buildez.pdb : module chain et ‘pseudo délétions’

Les parseurs qui fonctionnent en ‘positif’ passent sur les partie non résolues des chaines polypeptidiques, alors que nous avons vraiment besoin de cette information. Ce n’est pas le cas du module pdb.chain qui les traite d’une manière explicite et est capable de réattribuer différents polypeptides en une chaine (au sens PDB) unique.

Les ‘pseudos délétions’ dans les structures PDB sont très courantes, par exemple une boucle insuffisamment structurée peut très bien ne pas apparaître (non résolue) dans la cristallographie. S’il n’y a pas continuité dans la structure du polypeptide, certains calculs ne seront pas possibles, sauf a reconstituer la dite boucle, ce qui parfois posera plus de questions que de réponses. C’est à partir d’ici, que l’on commence à entrevoir les besoins spécifiques des modélisateurs et chimistes médicinaux.

Publication initiale en 2024, révisé en Avril 2025.

Navigation dans le guide

Guide [ Composants : buildez.pdb ]




1. Position du problème

La structure 4JIK [Meng_2013] correspond à une kinase de checkpoint (CHK1) qui intervient notamment dans la réponse à un dommage de l’ADN au cours d’une phase particulière du cycle cellulaire. Cette structure ne comporte que la chaine A et est ligandée par 1KO, un inhibiteur basé sur un noyau imidazo-pyrimidine carboxamide.

Sous UCSF Chimera, nous voyons parfaitement les 3 (pseudo) délétions qui marquent 3 discontinuités dans le squelette de la protéine, soulignées en rose (ALA19 à GLY21 non inclus), en vert (VAL40 à ASN51 non inclus), en orange (GLU76 à ILEU79 non inclus).

A priori, nous aurons donc 4 polypeptides distribués sur 426 résidus en incluant les molécules d’eau. Le comptage des résidus en se basant sur RESSEQ est de 445 (272 + 1 ligand + 172 molécules d’eau), il va probablement nous en manquer.

2. Détection d’erreurs

Une fois que la resmap est calculée, voyons ce que la fonction pdb_pdbm2chains va nous afficher (1) :

*** output of all polypeptidic chains
note: we don't use PDB chain letter info, because this field could not exists
error: ['PRO', 4, 21, 23, -1, ''] 3 ['PHE', 5, 24, 34, -1, ''] 11
error: ['GLY', 18, 133, 136, -1, ''] 4 ['ALA', 19, 137, 138, -1, ''] 2
error: ['ALA', 19, 137, 138, -1, ''] 2 ['GLY', 21, 139, 142, -1, ''] 4
error: ['VAL', 40, 280, 285, -1, ''] 6 ['ASN', 51, 286, 288, -1, ''] 3
error: ['ASN', 51, 286, 288, -1, ''] 3 ['ILE', 52, 289, 296, -1, ''] 8
error: ['ARG', 75, 485, 495, -1, ''] 11 ['GLU', 76, 496, 497, -1, ''] 2
error: ['GLU', 76, 496, 497, -1, ''] 2 ['ILE', 79, 498, 505, -1, ''] 8
error: ['LYS', 271, 2071, 2079, -1, ''] 9 ['GLY', 272, 2080, 2081, -1, ''] 2
number polypeptidic of chains = 9
...

Nous constatons qu’il y a des problèmes entre différents résidus, la fonction l’exprime sous la forme de couple de résidus, car les problèmes peuvent affecter la liaison peptidique.

Premier exemple, entre PRO4 et PHE5. C’est PRO4 qui cause un problème et ne contient que 3 atomes, c’est un résidu tronqué, ce qui se vérifie dans le fichier PDB :

Second exemple, entre GLY18 et ALA19. Cette fois c’est ALA19 qui est tronqué, il n’y a plus que deux atomes, ce que nous constatons aussi dans le fichier PDB :

Dans les deux cas, il y a un problème aussi avec la liaison peptidique. ALA19 étant sévèrement tronquée, le résidu ne peut pas l’établir avec le résidu précédent (GLY18) mais aussi avec le résidu suivant (GLY21). La GLY21 n’est pas contigüe nous avons notre première pseudo délétion (un bout d’ALA19 et le résidu d’ordre 20 dans RESSEQ).
Dans le cas de PRO4, la liaison est engagée coté PH5, mais outre la perte du cycle, le résidu ne possède pas l’atome N de l’autre coté, pour faire l’amine terminale.

3. Détection de chaines polypeptidiques

Compte tenu de ces erreurs, la fonction pdb_pdbm2chains va nous compter des chaines supplémentaires, car elle va considérer que si une liaison peptidique n’est pas établie, cela veut dire que nous avons une chaine polypeptidique caractérisée, même pour un seul résidu.

  • La chaine 1 correspond au seul résidu d’indice 0, le premier dans la structure, soit la PRO4.
  • Puis nous avons une seconde chaine qui va de PHE5 (indice 1) à GLY18 (indice 14).
  • Et le résidu ALA19 (indice 15) correspond à la chaine 3.
  • Et ainsi de suite …

Au final la fonction nous compte 9 chaines, ce que nous constatons dans le reste de la sortie suivante :

...
number polypeptidic of chains = 9
matrix of resmap indices corresponding to the residues of all chains (a row = a chain)
chain index = 1
[0]
chain index = 2
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
chain index = 3
[15]
chain index = 4
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
chain index = 5
[36]
chain index = 6
[37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]
chain index = 7
[61]
chain index = 8
[62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, ..., 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254]
chain index = 9
[255]

4. Attribution d’identifiants de chaines

La fonction pdb_chains2letters  ne se trompe pas, elle attribue tous ces fragments à une chaine unique, identifiée par la lettre A. La colonne était présente dans le fichier PDB, mais s’il y avait eu une autre chaine, avec cette colonne vide, cela n’aurait pas gêné les fonctions pdb_pdbm2chains et pdb_pdbm2chains car elles n’utilisent pas cette information.

Nous avons donc :

*** get PDB letters for the chains (polypeptides)
letters = ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A']

5. En plus lisible

C’est compliqué de faire la gymnastique entre indices pour les résidus, noms de résidus, numéro de résidu au sens de RESSEQ … mais les fonctions pdb_chain2rnames et pdb_chain2rseqs permettent de s’y retrouver. Dans cette sortie je n’ai pas ajouté d’offset pour chaque chaine comme dans le cas de l’article similaire (basé sur la structure 1P45 qui ne comporte pas de ‘pseudos délétions’.

*** fancy output of chains
converting resmap indices for all chains in residues indexes or names
note: sometimes chains have not the same number of residues
note: we add an offset of 1000 last chains to differentiate
chain indice = 0
chain length = 1 AA
resname = ['PRO']
resseq = [4]
chain indice = 1
chain length = 14 AA
resname = ['PHE', 'VAL', 'GLU', 'ASP', 'TRP', 'ASP', 'LEU', 'VAL', 'GLN', 'THR', 'LEU', 'GLY', 'GLU', 'GLY']
resseq = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
chain indice = 2
chain length = 1 AA
resname = ['ALA']
resseq = [19]
chain indice = 3
chain length = 20 AA
resname = ['GLY', 'GLU', 'VAL', 'GLN', 'LEU', 'ALA', 'VAL', 'ASN', 'ARG', 'VAL', 'THR', 'GLU', 'GLU', 'ALA', 'VAL', 'ALA', 'VAL', 'LYS', 'ILE', 'VAL']
resseq = [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
chain indice = 4
chain length = 1 AA
resname = ['ASN']
resseq = [51]
chain indice = 5
chain length = 24 AA
resname = ['ILE', 'LYS', 'LYS', 'GLU', ...,  'GLY', 'HIS', 'ARG', 'ARG']
resseq = [52, 53, 54, 55, ..., 72, 73, 74, 75]
chain indice = 6
chain length = 1 AA
resname = ['GLU']
resseq = [76]
chain indice = 7
chain length = 193 AA
resname = ['ILE', 'GLN', 'TYR', 'LEU', ..., 'PRO', 'LEU', 'LYS', 'LYS']
resseq = [79, 80, 81, 82, ..., 268, 269, 270, 271]
chain indice = 8
chain length = 1 AA
resname = ['GLY']
resseq = [272]

6. Regroupement des peptides

Nous pouvons exploiter ces informations pour déterminer automatiquement les (pseudos) délétions et annoter la structure en conséquence, avant de l’accepter ou de la rejeter en fonction des étapes ultérieures. Le module chain est une brique de base, pour ce type de tâche il faut utiliser le module pdbcheck.py de buildez.pdb.

D’une manière générale, nous allons avoir besoin d’une chaine unique, au sens PDB et qui ‘passe’ sur les ‘pseudos délétions’. C’est ce que fait la fonction pdb_pdbm2chains_pdb qui n’a besoin de que la pdbm et de la resmap initiales :

Et qui va nous donner une liste de chaînes, au sens PDB :

*** search for PDB chains
error: ['PRO', 4, 21, 23, -1, ''] 3 ['PHE', 5, 24, 34, -1, ''] 11
error: ['GLY', 18, 133, 136, -1, ''] 4 ['ALA', 19, 137, 138, -1, ''] 2
error: ['ALA', 19, 137, 138, -1, ''] 2 ['GLY', 21, 139, 142, -1, ''] 4
error: ['VAL', 40, 280, 285, -1, ''] 6 ['ASN', 51, 286, 288, -1, ''] 3
error: ['ASN', 51, 286, 288, -1, ''] 3 ['ILE', 52, 289, 296, -1, ''] 8
error: ['ARG', 75, 485, 495, -1, ''] 11 ['GLU', 76, 496, 497, -1, ''] 2
error: ['GLU', 76, 496, 497, -1, ''] 2 ['ILE', 79, 498, 505, -1, ''] 8
error: ['LYS', 271, 2071, 2079, -1, ''] 9 ['GLY', 272, 2080, 2081, -1, ''] 2
chain indice = 0
chain length = 256 AA
*** get PDB letters for the PDB chains (polypeptides)
letters = ['A']

Le module a donc déterminé qu’il s’agit d’une chaine unique, mais il n’utilise pas la lettre qui identifie la chaine pour les regrouper, et qui n’est pas forcément présente.

L’approche est plus robuste, il suffit d’utiliser la continuité des numéros de résidus, d’une chaine à une autre, nous repartons d’un numéro bas dans l’ordre de la séquence: résidu 1 (ou un peu plus) de la chaine A, puis résidu 1 (ou un peu plus) de la chaine B … et ainsi de suite.

Une fois les résidus regroupés dans une seule chaine (un seul indice 0 dans la liste pdb_chains), la fonction pdb_chains2letters attribue logiquement un seul identifiant A à cette chaine PDB, les listes pdb_chains et pdb_letters sont cohérentes.

7. Intérêts d’une analyse ?

Pour répondre, nous allons reprendre la structure 4JIK dans la même orientation et couleurs qu’au début de l’article, mais en affichant les surfaces moléculaires sous UCSF Chimera. Nous notons, même si ce n’est pas évident à voir sur cette structure, qu’une (pseudo) délétion, c’est des acides aminés qui ‘manquent’ dans la protéine. Donc c’est une cavité supplémentaire, qui peut se positionner dans le site actif de l’enzyme, et qui impacte sur la topologie de celle ci. Et non seulement, il peut y avoir un problème stérique (le ‘trou’) mais aussi la perte des interactions essentielles avec un motif structural caractérisé, par exemple une boucle qui recouvre un site de liaison et qui pourrait avoir une importance.

Si les (pseudo) délétions sont mal diagnostiquées, il s’agit d’un problème potentiel pour un processus de docking ou de blind docking. Nous pouvons être confrontés à un biais qui agit dans un sens ‘positif’ (cavité supplémentaire) ou ‘négatif’ (perte d’un réseau d’interactions).

Dans le cas de 4JIK, nous voyons qu’il s’agit d’un cas limite. Les (pseudo) délétions ne sont pas directement en prise avec le site autour de l’inhibiteur 1KO, mais elles peuvent impacter si nous concevons des inhibiteurs plus gros ou des fragments qui vont aller ‘chercher’ une partie de la protéine plus proche des pseudo délétions.

8. Conclusion

Nous n’avons pas vu ici tous les aspects du module chain, notamment ceux qui sont impliqués dans l’annotation et la production d’une resmap ‘augmentée’. Mais nous voyons que le module fonctionne bien, il offre des briques logicielles a des composants de plus haut niveau qui ont besoin de cette analyse pour effectuer des attributions.

Liens et lectures
Retour en haut