buildez.pdb : la matrice resmap

Une resmap dans le paquetage buildez.pdb est une structure de données qui est utilisée essentiellement pour stocker les noms de résidus d’une structure moléculaire et les informations qui permettent de retrouver leurs coordonnées moléculaires à partir d’une matrice pdbm. Les fonctions du module pdb.residue sont chargées d’implémenter la resmap mais également certaines requêtes sur une structure.

Publication initiale sur buidez.net (2014) – Article mis à jour en Avril 2025.

Navigation dans le guide

Guide [ Composants : buildez.pdb ]




1. Implémentation de la resmap

Pour illustrer le concept de resmap, nous allons utiliser la structure 1OGS [Dvir_2003] qui correspond à une enzyme, la glucosyl-céramidase (human acid-beta-glucosidase) impliquée notamment dans la maladie de Gaucher. Cette structure correspond à deux chaines (A et B) associées à des molécules d’eau (croix rouges), des ions sulfate (résidus SO4) et un dérivé de sucre (résidu NDG, n-acetyl-D-glucosamine) :

Une resmap s’obtient à partir d’une matrice pdbm en utilisant la fonction pdb_pdbm2resmap, par exemple le code suivant:

Donnera comme résultat (les … sont utilisés pour limiter la sortie):

*** Test resmap implementation
loading string for [1ogs-a.pdb] structure
computing pdbm matrix m0 and resmap r0
[['ALA', 1, 4, 8, -1, ''], ['ARG', 2, 9, 19, -1, ''], ['PRO', 3, 20, 26, -1, ''], ... ['HIS', 495, 3903, 3912, -1, ''], ['ARG', 496, 3913, 3923, -1, ''], ['GLN', 497, 3924, 3932, -1, ''], ['SO4', 1498, 3934, 3938, -1, ''], ['SO4', 1499, 3939, 3943, -1, ''], ... ['SO4', 1506, 3974, 3978, -1, ''], ['SO4', 1507, 3979, 3983, -1, ''], ['NDG', 1997, 3984, 3997, -1, ''], ['HOH', 2, 3999, 3999, -1, ''], ['HOH', 7, 4000, 4000, -1, ''], ... ['HOH', 932, 4439, 4439, -1, ''], ['HOH', 936, 4440, 4440, -1, ''], ['HOH', 938, 4441, 4441, -1, ''], ['HOH', 939, 4442, 4442, -1, '']]

La resmap correspond à une matrice contenant une cartographie de tous les résidus (acides aminés, eau, ligands) avec un résidu par ligne. Les colonnes sont définies dans l’ordre par: le nom du résidu (RESNAME, string); le numéro de résidu (RESSEQ, int); le numéro de ligne de départ (premier atome) du résidu dans la pdbm initiale; le numéro de ligne de fin (dernier atome) du résidu dans la pdbm; deux colonnes inutilisées à la création et initialisées à -1 et ''. Les colonnes d’indice 2 et 3 correspondent aux valeurs qui ont été enregistrées dans la colonne 16 de la pdbm initiale.

Si nous faisons afficher les 10 premières lignes de la pdbm m0 qui a été utilisée pour produire la resmap r0, nous aurons :

A première vue il s’agit donc d’une structure de données redondante par rapport à une matrice pdbm. En fait il s’agit d’une autre présentation des données, quel en est l’intérêt ?

Il n’est pas toujours facile de traiter une pdbm lorsque on a deux (ou plus) résidus identiques contigus car il faut ajouter des tests pour déterminer si un atome donné appartient à un résidu ou à l’autre. La resmap évite ce problème car elle donne directement l’intervalle, ce qui permet d’alléger les algorithmes, notamment lorsque on va essayer de savoir si un résidu est à proximité d’un autre dans l’espace (ou d’autres requêtes 3D).

Régénération d’une chaine PDB

Les données de la resmap permettent également de régénérer une matrice pdbm correspondant à n lignes d’une resmap, pour cela on utilise la fonction pdb_resmap2str :

Ce qui va donner:

Donc nous avons pu sélectionner  les deux premières lignes de la resmap r0 et régénéré la matrice pdbm correspondante. Comme chaque ligne d’une resmap correspond à un résidu, le bloc correspondant à une nouvelle pdbm est très exactement borné à des résidus entiers, sans autres opérations supplémentaires.

2. Listes de résidus

Certaines fonctions du module residue travaillent sur des listes de résidus (type reslist) qui correspondent à une liste des indices d’une resmap. La reslist couvre la totalité ou une sélection de lignes (rows) de la resmap. Ces fonctions font l’objet d’un article à part [ buildez.pdb : utilisation d’une liste de résidus ].

3. Matrices uniq

C’est une matrice dérivée, qui liste les résidus uniques dans la resmap. Imaginons qu’il existe plusieurs résidus ALA dans une protéine, dans la matrice uniq il n’y aura qu’une seule ligne pour les ALA. Donc nous pouvons savoir très rapidement en parcourant cette matrice s’il y a de l’ALA dans la protéine. Avec des applications au niveau de la recherche de ligands et d’une utilisation en tant que cadre de recherche, plus généralement. La matrice uniq est générée en totale méconnaissance des résidus dans la protéine, il n’y a pas eu d’analyse textuelle du fichier PDB, ce qui en fait un outil très robuste. Les fonctions impliquées et des principes d’opération font l’objet d’un article à part [ buildez.pdb : matrice uniq et requêtes en aveugle ].

4. Référentiel

Fonctions du module residue.py en mode abrégé (avril 2025).

Fonction Utilisation
pdb_pdbm_reslinked Retourne un score supérieur à zéro si deux résidus (deux pdbm) sont liés par une liaison peptidique (deux sens).
pdb_pdbm2uniq Calcule une matrice uniq au format pdbm, qui ne contient que les lignes qui sont similaires pour un jeu de colonnes de la pdbm.
pdb_pdbm2block Utilise une ligne (row) d’une matrice uniq pour extraire des blocs d’une matrice pdbm.
pdb_pdbm2resmap Calcule une resmap à partir d’une pdbm.
pdb_resmap2resmap Récupère l’info d’une resmap (index des lignes PDB) et l’introduit dans une autre resmap.
pdb_resmap2str Similaire à pdb_pdbm2str mais pour une resmap, régénère une chaine PDB à partir des pointeurs et de la chaine PDB originale, sans utilisation d’une pdbm.
pdb_resmap2pdbm Produit une nouvelle pdbm à partir d’une resmap (vue comme un filtre) et d’une pdbm originale.
pdb_resmap2res Extrait une sous resmap d’une resmap en utilisant un intervalle (début, fin) dans la numérotation des résidus, en mode index ou RESSEQ.
pdb_resmap2reslist Similaire à pdb_resmap2res mais 1) bloqué sur le mode RESSEQ (numéros de résidus dans le fichier PDB) et 2) renvoie une liste d’indices de la resmap (une reslist).
pdb_resmap2res_strvec Réduction à un vecteur: renvoie la resmap sous la forme d’une liste de chaines de caractères, avec choix des indices de colonnes et du caractère séparateur.
pdb_reslist2pdbm A partir d’une pdbm (source), d’une resmap et d’une reslist (filtres), produit une nouvelle pdbm.
pdb_pdbm2reslist A partir d’une pdbm et d’une resmap, produit une reslist, en mode positif ou négatif (la reslist contient les indices ne correspondant pas à la requête).
pdb_pdbm2res Export un bloc d’une pdbm correspondant à un résidu par RESNAME, RESSEQ et identifiant de chaine (mode AND).
pdb_bond_restype Retourne le type d’un résidu en analysant les liaisons intra, à partir d’une pdbm, resmap, et indice de résidu dans la resmap. N’utilise pas de dictionnaire pour la correspondance nom vs. type  des résidus.
pdb_dict_restype Similaire à pdb_bond_restype mais utilise un dictionnaire.
pdb_reslist2restypes Convertit une liste de résidus en liste de types dans le même ordre, utilise une resmap, un dictionnaire.
pdb_resmap2restypes Lit la colonne correspondant aux noms de résidus d’une resmap et renvoie une liste de types de résidus, utilise un dictionnaire.
pdb_pdbm2restypes Produit une liste de types de résidus, à partir d’une matrice pdbm (éventuellement une resmap sinon elle est recalculée)  et d’un dictionnaire.
pdb_pdbmlist2reshit A partir d’une resmap et d’une liste (Python) de blocs pdbm correspondant à des résidus, revoie le nombre de résidus de type aa ou alt.
pdb_resmap2letters_list Lit une resmap, utilise les blocs pdbm correspondants et renvoie une liste de lettres (chaines).
pdb_resmap_update Mets à jour une resmap à partir du contenu d’une autre et des colonnes d’indice 4,5. La fonction n’est pas conservative, renvoie la resmap modifiée passée en argument et non une nouvelle resmap.

5. Conclusion

Cette structure de données a de nombreuses applications car elle segmente la matrice pdbm en résidus. Pour certaines opérations qui ne nécessitent que les noms de résidus, elle allège la programmation car il n’est pas nécessaire de traiter la matrice pdbm, et s’il faut disposer des coordonnées moléculaires, celles ci sont rapidement accessibles, dans un sous ensemble de 1 à n résidus.
La resmap est également intensivement utilisée dans les cas ou on cherche à savoir si les résidus correspondent à des acides aminés, à des résidus standard ou non, à des molécules d’eau, à des ligands … Les fonctions correspondantes du module pdb.residue sont alors utilisées par d’autres modules pour de la reconnaissance automatique des chaînes polypeptidiques d’une protéine en vue d’automatiser son éclatement en sous-chaînes, ligands etc.

Liens et lectures
Retour en haut