buildez.pdb: attributions avec le module chain

Il arrive constamment que dans les fichiers PDB, il n’y ait pas de lettre (correspondant à  une chaine polypeptidique) attribuée aux ligands ou aux molécules d’eau. Dans ce cas il sera impossible de partager la structure en ses différentes chaines, sur la base des données du fichier PDB, car nous allons perdre les hétéro atomes. Et cette situation nous pose souvent problème pour tout ce qui est modélisation moléculaire, car nous nous intéressons aux interactions protéine-ligand. Et si nous voulons traiter en masse la PDB (par exemple pour des recherches 3D de signatures structurales), il sera nécessaire de différencier entre les différentes chaines, car celles ci peuvent avoir des éléments structuraux dont la conformation est différente, être ou non ligandées, etc.

D’après un article sur buildblog.buildez.net – Mis à jour en Avril 2025.

Navigation dans le guide

Guide [ Composants : buildez.pdb ]




1. Production d’une resmap augmentée

Nous allons voir ici comment la fonction pdb_chains2augresmap du module chain.py permet de réaliser simplement l’attribution totale de toutes les molécules. On se réfèrera à  l’article [ buildez.pdb: identification de chaines polypeptidiques ] pour avoir un aperçu des fonctions de base du module.
Par attribution j’entends : rattacher la molécule (ligand, ion, molécule d’eau) à  une des chaines polypeptidique sur la base d’une mesure de proximité. Cette fonction utilise la liste chains (indices de résidus par chaine) qui est produite via un bloc de fonctions, qui est un préalable à la plupart des calculs:

Une fois que l’on dispose de ces structures de données, le calcul d’attribution se lance de la manière suivante:

La fonction retourne une nouvelle resmap (si l’argument update=False) ou met à  jour (update=True) la resmap qui lui a été fournie en tant qu’argument. Si l’argument water est positionné à  True, le calcul englobe l’ensemble des molécules d’eau, si ce n’est pas le cas, il ne prend que les résidus qui ont été identifiés en tant que ligands ou ions. Le terme augmented resmap vient du fait qu’une resmap standard se présente sous la forme (exemple d’un résidu):

[['GLN', 267, 2572, 2580, -1, ''], ['LEU', 268, 2581, 2588, -1, ''], ... ]

Par défaut, les colonnes d’indice 4 et 5 sont affectées des valeurs -1 et ''. Lorsque la resmap va être ‘augmentée’ ces colonnes vont être remplies par des données. La colonne d’indice 4 est en général utilisée pour identifier la chaine polypeptidique, soit par la lettre correspondant à  la chaine, soit par l’indice de la chaine dans la liste chains. La colonne d’indice 5 est utilisée pour identifier le type de résidu sur différentes bases. Le module resname.py est utilisé, pour plus d’information sur les fonctions et structures de données mobilisables, lire l’article [ buildez.pdb : gestion des noms de résidus ] sur ce blog.

Si on utilise l’espace de noms standard nous pourrons avoir majoritairement:

  • aa‘ pour un résidu de type acide aminé,
  • alt‘ et ‘nsr‘ pour des résidus ou acides aminés non standard,
  • ion‘ pour un ion,
  • wat‘ pour une molécule d’eau,
  • het‘ pour un résidu constitué d’atomes de type HETATM dans le formalisme de la PDB,

D’une manière générale, ce qui n’est pas identifié à  l’exclusion des résidus ‘ukn‘ sera marqué comme ‘lig‘ pour ligand. Il est facile de repérer les ligands lorsque on a la liste chains. Tous les résidus qui sont dans la liste font partie des chaines polypeptidiques, soit ‘aa‘ », « ‘alt, ‘nsr‘ … L’eau et les ions connus dans les dictionnaires sont rapidement identifiables, ce qui donne accès par différence aux ligands. Les ligands incluent à  la fois les petites molécules organiques ‘utiles’ comme les euligands (1) mais aussi des molécules associées à  la protéine mais qui proviennent du processus de cristallisation proprement dit (agents de cristallisation, tampon, etc).

Par exemple les deux premiers résidus de la chaine d’indice zéro, seront retournés par la fonction pdb_chains2augresmap:

[['GLN', 267, 2572, 2580, 0, 'aa'], ['LEU', 268, 2581, 2588, 0, 'aa'], ... ]

Une resmap augmentée s’utilise de la même manière qu’une resmap standard. L’essentiel des fonctions de buildez.pdb n’utilisant pas les deux dernières colonnes, ceci permet d’embarquer, au besoin, diverses informations (ou des les enlever) dans ce type de matrices.

2. Exemple d’utilisation

Prenons le cas d’une structure protéique, par exemple 1P45 [Kuo_2003]. Il s’agit de la protéine InhA, une Enoyl-[acyl-carrier-protein] reductase à  NADH, qui participe à  un cycle (FAS-II, Fatty Acid Synthase of type II) de production des acides Mycoliques. Ces lipides sont des composants essentiels de la paroi de Mycobacterium tuberculosis, et leur processus de production est une cible pour la conception d’antituberculeux.

La structure 1P45 comporte de l’eau, des ligands (Triclosan, NAD+/NADH) et 2 sous-unités (la chaine A colorée en jaune sous une vieille version de Discovery Studio).

Lorsque on applique la fonction à  cette protéine avec les paramètres standards on obtient le résultat suivant (en mode ‘VERB’ c’est à  dire un affichage détaillé sur la sortie standard):

La fonction identifie deux résidus de Triclosan (TCL 400, TCL 450) et un résidu de NAD+/NADH (NAD 300) sur la chaine d’indice zéro (chaine A). Un résidu de Triclosan (TCL 500) et de NAD+/NADH (NAD 350) sont attribués à  la chaine d’indice 1 (chaine B). Ces données sont en accord avec celles de la figure précédente (hiérarchie dans la partie gauche de l’affichage sous DSV 3.0).

Analyse de proximité

Dans la sortie on reconnait les lignes de resmap pour chaque résidu, suivie de deux chiffres (ex: 6 et 0 pour le résidu NAD 300, première ligne du tableau). Le premier (colonne radius) correspond à  une distance maximum, c’est à  dire que l’algorithme a attribué le résidu à  une chaine entre la distance donnée et l’intervalle de distance utilisé pour la recherche.

  • Si le second chiffre (colonne tries) est égal à Â  zéro, l’intervalle de distance correspond à  la valeur radius_offset donnée en argument à  la fonction.
  • Si l’intervalle de distance d’attribution n’a pas été immédiatement trouvé, la fonction procède à  une recherche en diminuant l’intervalle de distance et en l’ajoutant ou en le retranchant à  la valeur de la distance courante. La colonne tries compte le nombre de ces cycles de recherche. Plus le résidu sera à égale distance des deux chaines, plus le nombre d’essais sera élevé (et la valeur de l’intervalle de distance réduite).

Il s’agit d’un processus de recherche, qui peut osciller si les valeurs de radius et de radius_offset fournies en argument à  la fonction pdb_chains2augresmap sont égales, ce qui explique les valeurs par défaut de 3.0 et 2.9 …. Ces valeurs donnent en général un bon compromis en termes de précision d’attribution-rapidité de calcul.

3. Attribution des molécules d’eau

Dans la sortie précédente il y a aussi des molécules d’eau qui se partagent entre les deux chaines 0 et 1 en deux blocs. Avec deux exceptions le résidu HOH 454 qui est dans le bloc 0 mais est attribuée à  la chaine 1, et le résidu HOH 510 qui est dans le bloc 1 mais est attribué au bloc zéro.
En général ce type d’attribution litigieuse est caractéristique de molécules d’eau qui sont à  des distances comparables de plusieurs chaines, ou entre les chaines. Dans le cas de 1P45 on dispose d’une attribution dans le fichier PDB, pour HOH 454 et HOH 510 on a les lignes :

Clairement HOH 454 est à  attribuée à  la chaine 0/A et HOH 510 à  la chaine 1/B. Si nous affichons la structure moléculaire, nous obtenons:

Les molécules d’eau sont affichées sous forme de sphères (CPK). La chaine A et HOH 454 sont affichées en jaune, on constate que la molécule d’eau est plutôt dans le champ de la chaine B. La molécule HOH 510 est affichée en vert et se trouve plutôt dans le champ de la chaine A.
Forcément tout dépend de la distance à  une chaine latérale plutôt que du backbone, mais si on devait ‘à  la main’, séparer les deux chaines pour produire 2 sous unités utilisables pour le calcul, il y a des chances pour la sélection soit identique. Le paquetage buildez.pdb est à  finalité de chimie médicinale, pas de biologie structurale, et les fonctions sont conçues par rapport à cette finalité.

Performances

L’attribution des ligands est instantanée, l’attribution de molécules d’eau va dépendre de la taille de la protéine et du nombre de molécules d’eau. Sur un cœur de processeur type Intel Xeon, elle peut varier de l’ordre de la seconde (cas de 1P45, 1.5 s) à plus.

Par exemple, la structure 1ADO [Blom_1997] une aldolase (D-fructose 1,6-bisphosphate aldolase) de lapin, est utilisée comme stress test. Nous y trouvons 4 chaines de 363 résidus, des ligands (13P, SO4), de l’ordre de 15000 atomes incluant plus de 3000 molécules d’eau. Dans ce cas il faut s’attendre à un peu moins de 3 min (175 s) pour une résolution totale de tous les résidus (incluant ligands et HOH) et la génération d’une augmented resmap en mode verbeux (la désactivation de ce mode n’influe pas sur les performances). Il y a une bonne vingtaine de tirs à plus de 15 essais par chaine, mais ce n’est pas cela qui ralentit le calcul, c’est essentiellement nombre de molécules d’eau.

Dans la plupart des cas, on préfèrera utiliser des fonctions équivalentes du module pdb.ligands, qui réalisent l’attribution de manière instantanée, car elles se contentent  d’extraire les molécules d’eau qui sont autour des ligands (à  des distances typiques autour de 3 à 6 Å). Et la coquille d’eau autour du ligand ou dans le site de liaison c’est bien ce qui nous intéresse  en première intention.

4. Référentiel

Fonctions du module chain.py (en mode abrégé, avril 2025) impliquées dans cet article.

Fonction Utilisation
pdb_pdbm2chains La fonction utilise pdb_pdbm2chain jusqu’à épuisement des possibilités dans la structure PDB, renvoie une liste de chaines, utilise le système logfile/loglevel.
pdb_chains2augresmap La fonction regroupe toute l’information à partir des listes de chaines, resmap, pdbm et effectue une attribution basée sur une mesure de distance. Cette fonction est capable d’attribuer des molécules d’eau, des ions, des ligands à une chaine, même si ces blocs HETATM n’ont pas d’identifiant (lettre) de chaine dans le fichier PDB, ou que celui ci soit différent des chaines polypeptidiques (ex: lettre W pour les molécules d’eau). Produit une resmap augmentée, avec indice de chaine (position 4) et type de résidu (position 5). Utilise le système logfile/loglevel.

5. Conclusion

Il s’agit d’une méthode d’attribution, un peu brute force mais qui marche. Si le rayon de départ et le pas de recherche sont suffisamment précis elle peut aussi donner des distributions en distance de groupes d’atomes, par exemple des coquilles d’eau (watershells). L’article [ buildez.pdb et watershells ] sur ce blog donnera des indications sur ce que l’on peut en attendre.

Liens et lectures
Retour en haut