buildez.pdb: travaux en mode string (str, strfilter)

5. Recherche et extraction de blocs

Un premier exemple concerne le comptage de blocs, nous verrons plus loin que c’est une approche intéressante. Nous allons utiliser la fonction pdb_coordsblock_count pour compter les blocs de lignes PDB (lignes consécutives) correspondant à  une requête particulière, sachant que le nombre de blocs peut être > 1 et que ces blocs ne seront pas contigus. Par exemple  :

Ce code va compter les les blocs correspondant aux lignes ATOM et dont les valeurs de la colonne température (TEMP correspondant à un facteur d’agitation moléculaire) sont inférieures (opérateur < à  une valeur de 5 (opérande). Si aucune ligne n’est comptée, la valeur de bn sera égale à  zéro. Le second argument ATOM peut également correspondre à  une liste de clefs utilisant le séparateur espace (mots simples) ou § (mots composés, les fonctions détectent automatiquement les deux modalités). Les opérateurs possibles sont classiques: =, != (inégal), < et >.
Au lieu d’utiliser la fonction pdb_field_coords_id du module str.py, il est possible de fournir directement l’indice d’une colonne d’un fichier PDB, soit ATOM/HETATM (0), SERIAL (1), NAME (2), ALTLOC (3), RESNAME (4), CHAINID (5), RESSEQ (6), ICODE (7), X (8), Y (9), Z (10), OCCUPANCY (11), TEMPFACTOR/TEMP (12), SEGID (13), ELEMENT (14), CHARGE (15).

Extraction

Pour l’extraction nous allons utiliser la fonction pdb_str_coordsblock_get  avec les mêmes arguments (pour extraire la même chose) que la fonction de comptage, par exemple:

Les mêmes arguments sont utilisés mais nous devons ajouter le numéro  (index et non indice, les blocs sont numérotés de 1 à  bn) du bloc à extraire en dernier argument. Ce qui va donner comme résultat:

=> block request with pdb_coordsblock_count and pdb_str_coordsblock_get
{a block is consecutive lines on PDB string responding to the request}
request : ATOM lines in which TEMP (column 12) is [< 5]
number of blocks for this request 18
=> first block
ATOM    489  CD1 LEU A  67      70.827  14.400  53.215  1.00  4.09             C
ATOM    490  CD2 LEU A  67      72.583  12.847  54.079  1.00  1.00             C
=> last block
ATOM   3988  CD1 LEU B 226       2.906  16.991  46.023  1.00  4.84             C
{block info is biased with piped requests}

Le choix d’une valeur limite de 5 pour la colonne TEMP n’est pas anodin, la plupart des valeurs sont supérieures à  20-30, ce qui permet de limiter la sortie pour l’exemple. Nous récupérons donc deux ‘mini blocs’, dans deux chaines de caractères différentes, le premier et le dernier bloc. Il faut regarder la colonne correspondant à la chaine, nous avons un bloc pour la chaine A et un bloc pour la chaine B. Deux lignes dans le cas de la chaine A, car il y a deux positions atomiques pour LEU67 ou nous avons TEMP<5, et une seule (un atome) pour la chaine B, correspondant à une LEU226.

Si nous voulons obtenir une requête correspondant à un intervalle (ici 4<TEMP<5) il faudra combiner plusieurs appels à  la fonction, en mode intersection (par passage d’une même chaine de caractères s1 en tant que résultat puis argument), par exemple:

Ce qui donnera comme résultat:

=> ATOM lines in which TEMP (column 12) is [< 5] and [> 4]
=> all blocks
ATOM    489 CD1  LEU A  67      70.827  14.400  53.215  1.00  4.09              C
ATOM   3336 CA   TYR B 132       9.796  12.444  55.116  1.00  4.60              C
ATOM   3988 CD1  LEU B 226       2.906  16.991  46.023  1.00  4.84              C

Il s’agit ici de l’ensemble des blocs qui sont retournés, ceci est possible en utilisant la valeur zéro comme numéro de bloc à  sélectionner.

Ce type de recherche est classique si nous voulons détecter des position atomiques incohérentes ou hors normes en fonction d’une grandeur incluse dans la structure PDB.

Mais nous pouvons faire plus, par exemple l’extraction des chaines (A, B, C …) correspondant à des unités asymétriques dans la structure PDB. Dans ce cas, nous allons chercher à récupérer les coordonnées moléculaires d’une chaine protéique et des ligands qui sont associés à cette chaine, en profitant de cette fonctionnalité d’extraction de blocs.

Retour en haut