7. Conclusion
A la date d’édition du module, le seul choix est la sélection d’une conformation par indice ou par lettre, suivie de la délétion de l’autre conformère. D’autres paquetages ne font pas mieux, par exemple la séquence de sélection du conformère A avec BioPython est (d’après la documentation):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from Bio.PDB import * parser=PDBParser() s=parser.get_structure('my_pdb', 'my_pdb.pdb') io=PDBIO() class NotDisordered(Select): def accept_atom(self, atom): return not atom.is_disordered() or atom.get_altloc()=='A' io=PDBIO() io.set_structure(s) io.save("ordered.pdb", select=NotDisordered()) |
Le code sauve les atomes non désordonnées et ceux correspondant au conformère A. Il est amusant de constater que comme dans le cas du module altloc, les programmeurs ont également répugné à détruire l’identificateur (la lettre correspondante) du conformère, il sera nécessaire d’ajouter quelques lignes de programmation pour faire disparaitre la lettre des lignes PDB produites par le code.
Est ce que l’on pourrait faire mieux ?
Par exemple, nous baser sur le champ occupancy et filtrer le conformère par la valeur. Donc si un conformère présentait un taux d’occupation de 0.70 et l’autre de 0.30, nous pourrions automatiquement sélectionner celui qui affiche le meilleur taux d’occupation. Mais en fait ce champ ne permet pas une approche robuste, indépendamment des conformères affectés des taux 0.50/0.50. Il suffit de regarder le bloc PDB correspondant au résidu ASP 321 de la structure 2P15 (cf. section 3) utilisée en tant qu’exemple dans cet article:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
ATOM 109 N ASP A 321 -10.988 -3.897 19.363 1.00 20.47 N ATOM 110 CA AASP A 321 -11.031 -4.585 18.072 0.50 20.50 C ATOM 111 CA BASP A 321 -11.040 -4.582 18.069 0.50 20.81 C ATOM 112 C ASP A 321 -12.410 -5.144 17.742 0.50 20.21 C ATOM 113 O ASP A 321 -12.779 -5.212 16.584 1.00 20.02 O ATOM 114 CB AASP A 321 -9.993 -5.705 18.017 0.50 20.60 C ATOM 115 CB BASP A 321 -10.012 -5.706 17.995 0.50 21.12 C ATOM 116 CG AASP A 321 -9.751 -6.111 16.547 0.00 16.06 C ATOM 117 CG BASP A 321 -8.597 -5.194 17.860 0.50 22.48 C ATOM 118 OD1AASP A 321 -9.336 -5.253 15.723 0.00 18.24 O ATOM 119 OD1BASP A 321 -8.410 -3.986 17.580 0.50 23.26 O ATOM 120 OD2AASP A 321 -9.956 -7.303 16.242 0.00 17.56 O ATOM 121 OD2BASP A 321 -7.672 -6.012 18.054 0.50 23.36 O |
Nous constatons que des atomes du backbone (N, O) présentent une valeur de occupancy=1.0 ce qui est normal, mais que d’autres présentent une valeur de occupancy=0.5 (CA, C). Donc déjà à ce niveau, dommage pour réaliser une sélection, mais si on regarde dans les atomes de la chaine latérale, nous avons la surprise de constater que des atomes du conformère B présentent une valeur occupancy=0.00 (OD2, OD1, CG). Donc le la prise en compte de ce champ dans la sélection risque de ne pas être très fiable, sans une analyse additionnelle. Cet exemple s’ajoute à celui de la section 5 et justifie l’appréciation argotique appliquée à ce type de résidus, du point de vue des chimistes médicinaux et modélisateurs en tout cas.
Et les rotamères ?
Parmi les pistes d’inclusion, peut être nous pourrions sélectionner une bibliothèque, puis générer les conformères dans l’espace de coordonnées de la structure en agissant sur les angles de torsion, puis en analysant les résidus voisins en termes de distance, puis d’en tirer un score par rotamère qui tienne comptes des contraintes stériques (recouvrement d’atomes par exemple), puis de sélectionner le meilleur score. Des heuristiques étant certainement concevables pour simplifier ce type de calculs, mais à la base il faudra trouver un toolkit utilisable pour les angles de torsion, ou le faire nous même.
Liens et lectures
- File Format Documentation [ http://www.wwpdb.org/documentation/file-format ].
- Structure PDB 2P15 [ https://www.rcsb.org/structure/2P15 ].
- Uniprot P03372 · ESR1_HUMAN [ https://www.uniprot.org/uniprotkb/P03372/entry ].
- Software development [ http://dirac.cnrs-orleans.fr/software.html ].
- Konrad Hinsen’s Blog [ https://blog.khinsen.net/ ].
- Remove PDB disordered atoms with the Bio.PDB module [ https://biopython.org/wiki/Remove_PDB_disordered_atoms ].