Un module fossile: strpdbm

Les premières versions de buildez.pdb étaient écrites en Perl et utilisaient un ancêtre non typé de la matrice pdbm: la matrice strpdbm (string pdbm matrix), toutes les colonnes de cette matrice antérieure correspondaient à des chaînes de caractères. Le paquetage contient des traces de cette évolution sous la forme du module strpdbm. Quelques fonctions ont été maintenues car même dans leur forme ‘archaïque’ elles peuvent être encore utiles. La structure PDB 1HXD [Weaver_2001] sera utilisée comme base pour les exemples.

D’après un article publié en 2009 sur buildez.net – Revu en Avril 2025.

Navigation dans le guide

Guide [ Composants : buildez.pdb ]




1. Génération et export

Une matrice pdbm est issue de l’utilisation intensive de la fonction pdb_coordlinetyped_get qui renvoie des lignes typées, alors que la matrice strpdbm est issue de l’utilisation de la fonction pdb_coordsline_get qui renvoie des lignes de coordonnées moléculaires non typées. Comme nous travaillons en mode string, la génération d’une matrice strpdbm se réalise en appliquant un filtre: la fonction pdb_strpdbm_key_get ou son interface pdb_str2strpdbm, par exemple :

Ce qui donnera comme résultat:

======================== basic search ========================
*** using pdb_strpdbm_key_get of 'HETATM' lines
found 91 HETATM lines in file
=> ['HETATM', ' 4715', ' C11', ' ', 'BTN ', ' ', ' 500', ' ', ' 55.016', ' 4.107', ' 53.277', ' 1.00', ' 24.55', ' ', ' C', ' ']

On notera un résultat identique à la fonction pdb_str_key_get présente dans le module strfilter.py mais qui renvoie un format sous forme vectorisée (liste Python) plutôt qu’une chaine de caractères correspondant à une(des) ligne(s) d’un fichier PDB. Nous pouvons aussi combiner le travail en mode chaîne et vecteur, puis régénérer des chaines de caractères PDB ou non avec la fonction pdb_strpdbm2str, par exemple avec le code :

Qui donnera (les ‘…’ sont utilisés pour masquer des lignes trop nombreuses en sortie) les résultats:

Dans le premier cas nous récupérons des lignes compatibles (option 1) PDB, dans l’autre (option 0, RAW) un espace est utilisé pour délimiter les colonnes. Comme les champs PDB qui ont été stockés dans une matrice strpdbm ne sont pas purgés des espaces contrairement aux colonnes d’une matrice pdbm, l’espacement entre colonnes apparait plus grand dans le second cas que dans le premier.

2. Renumérotation et filtrage par un champ

Une demande qui était fréquente, c’était la renumérotation de fichiers PDB après quelques triturations avec un éditeur de texte. Car certains logiciels n’acceptaient pas des fichiers PDB dont la numérotation des atomes n’était pas consécutive. Et justement, l’intérêt de ce type de matrice est qu’elle permet d’implémenter des fonction de renumérotation et de tri des atomes de manière assez simple. Ce type de travail est effectué par les fonctions pdb_strpdbm_renum et pdb_strpdbm_sortm qui étaient déjà disponibles dans les versions écrite en Perl. En Python nous avons :

Ce qui donnera comme résultat:

Dans un premier temps nous avons filtré les atomes et hétéro-atomes correspondant à la chaîne A, puis généré une matrice strpdbm pour les clefs ATOM et HETATM, puis renuméroté toutes les données du champ SERIAL (c’est à dire les numéros d’atomes) à partir de 100 (inclus) et par ordre ascendant (indicateur +).
Le tri suit le même principe, si nous prenons la même matrice, nous pouvons ajouter :

Ce qui produira comme résultat:

Dans ce cas nous avons trié sur le champ NAME (c’est à dire le type d’atome C, N, CA …) de manière ascendante (+). Le fait que la matrice soit constituée de chaines de caractères facilite le tri. Pour chaque ligne, les colonnes sont agrégées en une chaine unique, délimitée, et avec le champ que l’on veut filtrer en première position. Le tableau de lignes est trié, puis la matrice est régénérée en remettant en place le bon ordre des colonnes. Par contre, le tri est effectué sur des chaînes de caractères, ce qui explique la séquence de numéros d’atomes: 1005, 1019, 102, 1030 … plutôt que 102, 110 …

3. Conclusion

Je ne suis pas sur qu’il reste encore des codes pour la renumérotation des fichiers sans parseur, ce module buildez.pdb.strpdbm peut encore avoir de l’intérêt, pour des utilisation non occasionnelles et qui permettent de rendre service à des collègues.

Remerciements: Q.N. Trinh Xuan.

Liens et lectures
Retour en haut