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:
|
1 2 3 4 5 6 7 |
print("*** Test resmap implementation") print("loading string for [1ogs-a.pdb] structure") s = pdb_file2str(file_cleanpath(site_package + "/test/1ogs-a.pdb")) print("computing pdbm matrix m0 and resmap r0") m0 = pdb_str2pdbm(s) r0 = pdb_pdbm2resmap(m0) print(r0) |
Donnera comme résultat (les … sont utilisés pour limiter la sortie):
*** Test resmap implementationloading string for [1ogs-a.pdb] structurecomputing 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 :
|
1 2 3 4 5 6 7 8 9 10 |
['-', 1], ['-', 2], ['-', 3], ['ATOM', 1, 'N', '', 'ALA', 'A', 1, '', 24.859000000000002, 73.198999999999998, -4.3250000000000002, 1.0, 42.990000000000002, '', '', '', 4], ['ATOM', 2, 'CA', '', 'ALA', 'A', 1, '', 24.462, 74.605999999999995, -4.5999999999999996, 1.0, 40.119999999999997, '', '', '', 5], ['ATOM', 3, 'C', '', 'ALA', 'A', 1, '', 23.739999999999998, 74.727999999999994, -5.9390000000000001, 1.0, 39.149999999999999, '', '', '', 6], ['ATOM', 4, 'O', '', 'ALA', 'A', 1, '', 23.515999999999998, 75.834999999999994, -6.4299999999999997, 1.0, 40.240000000000002, '', '', '', 7], ['ATOM', 5, 'CB', '', 'ALA', 'A', 1, '', 25.690999999999999, 75.498999999999995, -4.5949999999999998, 1.0, 40.93, '', '', '', 8], ['ATOM', 6, 'N', '', 'ARG', 'A', 2, '', 23.379999999999999, 73.594999999999999, -6.5339999999999998, 1.0, 35.420000000000002, '', '', '', 9], ['ATOM', 7, 'CA', '', 'ARG', 'A', 2, '', 22.681000000000001, 73.614000000000004, -7.8129999999999997, 1.0, 32.979999999999997, '', '', '', 10] |
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
pdbmlorsque 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. Laresmapé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 :
|
1 2 3 |
print("regenerating original pdb file for the two first residues") r1 = r0[0:2] print(pdb_resmap2str(s, r1)) |
Ce qui va donner:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
regenerating original pdb file for the two first residues ATOM 1 N ALA A 1 24.859 73.199 -4.325 1.00 42.99 ATOM 2 CA ALA A 1 24.462 74.606 -4.600 1.00 40.12 ATOM 3 C ALA A 1 23.740 74.728 -5.939 1.00 39.15 ATOM 4 O ALA A 1 23.516 75.835 -6.430 1.00 40.24 ATOM 5 CB ALA A 1 25.691 75.499 -4.595 1.00 40.93 ATOM 6 N ARG A 2 23.380 73.595 -6.534 1.00 35.42 ATOM 7 CA ARG A 2 22.681 73.614 -7.813 1.00 32.98 ATOM 8 C ARG A 2 21.258 73.100 -7.657 1.00 30.19 ATOM 9 O ARG A 2 21.034 72.005 -7.147 1.00 29.73 ATOM 10 CB ARG A 2 23.425 72.765 -8.846 1.00 35.29 ATOM 11 CG ARG A 2 24.789 73.313 -9.241 1.00 39.33 ATOM 12 CD ARG A 2 25.259 72.697 -10.552 1.00 44.39 ATOM 13 NE ARG A 2 26.412 73.400 -11.110 1.00 49.26 ATOM 14 CZ ARG A 2 26.878 73.218 -12.344 1.00 51.28 ATOM 15 NH1 ARG A 2 26.293 72.355 -13.160 1.00 50.67 ATOM 16 NH2 ARG A 2 27.933 73.904 -12.766 1.00 55.11 |
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
- Structure 1OGS [ https://www.rcsb.org/structure/1OGS ].
- Maladie de Gaucher [ https://fr.wikipedia.org/wiki/Maladie_de_Gaucher ].
- Glucosylceramidase – GCase – Glucocerobrosidase [ https://en.wikipedia.org/wiki/Glucocerebrosidase ].
- UniProt P04062 · GBA1_HUMAN [ https://www.uniprot.org/uniprotkb/P04062/entry ].
