Module 4 · Section 4.4
Visualisation avec PyMOL
50 min · niveau intermediaire · dernière révision : 2026-11-01
Objectifs d'apprentissage
- Distinguer l'interface graphique, la ligne de commande et l'API Python de PyMOL
- Construire des sélections avec resi, chain, byres et within, puis vérifier leur syntaxe
- Choisir une représentation et une couleur adaptées à la question biologique
- Produire un rendu ray/png reproductible et une session .pse documentée
- Identifier les limites de licence, de version et de rendu sans interface graphique
Prérequis : 4.2 Bio.PDB : hiérarchie et géométrie
PyMOL 3.0 (open-source)Biopython 1.88
Prérequis
Cette section prolonge la lecture d'un fichier PDB et la navigation dans la hiérarchie Structure > Model > Chain > Residue > Atom de la section 4.2. Elle utilise les identifiants de chaînes et de résidus introduits en 4.3 et la lecture de fichiers avec Biopython de 1.3. Les notions de correspondance entre séquences de 2.3 aideront à interpréter align. Le module 4 situe cette étape après le parsing et la superposition.
Introduction
Une structure tridimensionnelle n'est pas un résultat purement numérique. La position d'un pont disulfure, l'accessibilité d'un site actif, la continuité d'une chaîne ou la présence d'un ligand se lisent d'abord sur une image. La visualisation est donc un instrument d'analyse : elle permet de formuler une hypothèse, de repérer une anomalie de modèle et de préparer une figure pour un article. Une image réussie n'est pas seulement esthétique ; elle doit montrer la question biologique sans suggérer une conclusion que les coordonnées ne soutiennent pas.
L'enjeu computationnel est de transformer une suite de clics en une procédure vérifiable. PyMOL combine trois niveaux : un spectateur graphique, un langage de commandes et une API Python. Le spectateur est irremplaçable pour explorer, mais il est difficile à reproduire : la caméra, les couleurs, les représentations et les réglages de rendu varient d'une session à l'autre. Un script, lui, peut être relu, versionné et exécuté sans interface. Cette section apprend à construire ce script, à valider ses sélections et à documenter ses sorties.
La crambine 1CRN servira de fil conducteur. Ce petit peptide de 46 résidus contient trois ponts disulfure et 327 atomes dans le fichier local. PyMOL n'est pas installé dans l'environnement de rédaction : les commandes sont vérifiées syntaxiquement par les fonctions du cours et les tests, mais les sorties d'interface et les rendus décrits sont explicitement illustratifs. Aucune image n'est présentée comme un résultat exécuté.
Théorie
Interface, ligne de commande et scripts
Le spectateur PyMOL affiche une scène 3D, un panneau d'objets et une ligne de commande. Le panneau liste les objets chargés et les sélections nommées ; la ligne de commande accepte les instructions des fichiers .pml. Un clic change l'affichage, pas les coordonnées : cette séparation entre données et vue est le premier réflexe.
Trois modes coexistent : interactif, fichier .pml exécuté par @script.pml ou pymol -cq script.pml, et Python avec cmd. Une commande tapée est une chaîne analysée par PyMOL ; cmd.select("nom", "expression") est un appel Python typé. Les trois modes partagent le moteur, pas la syntaxe.
La ligne de commande sert à découvrir une commande avec help. Le script s'impose dès qu'il faut répéter, comparer ou publier ; le mode sans interface évite les variations de fenêtre.
L'exploration interactive garde sa place : elle permet de tester une sélection, de tourner la scène et de repérer un artefact. Mais la figure publiée doit pouvoir être reconstruite sans clic. Le script devient le document de référence, et la session interactive un simple brouillon.
Objets et sélections
Un objet est chargé (load), téléchargé (fetch) ou créé (create). Il possède un nom, des coordonnées et des états. Une sélection nommée est un sous-ensemble logique ; elle ne duplique pas les coordonnées.
Un objet peut contenir plusieurs états, par exemple les modèles d'une structure RMN. Les commandes agissent sur l'état courant et frame change d'état. Selon la commande, une sélection peut traverser les états ou être limitée à l'un d'eux : vérifiez ce point avant de comparer des conformations.
select chain_a, chain A crée une sélection ; load file.pdb, chain_a crée un objet. all désigne les atomes visibles, everything inclut les objets masqués, none est vide. enable et disable agissent sur les objets.
Colorer une sélection ne change pas l'objet ; cacher un objet ne supprime pas la sélection. Nommez les objets (1crn) et les sélections (site_actif) d'après leur contenu.
Sélections : la grammaire utile
select associe un nom à une expression bâtie avec name, resn, resi, chain et ss. Les listes utilisent +, les plages - : resi 1-10+15. and, or, not et les parenthèses combinent les conditions.
byres étend aux résidus complets, bychain aux chaînes. within 4 of resi 3 retient les atomes à 4 Å ou moins d'un atome du résidu 3, dans l'unité des coordonnées. Sans byres, un résidu peut être tronqué.
Une sélection nommée persiste dans la session. select sur un nom existant le remplace et delete nom le supprime. Vérifiez get_names('selections') avant de réutiliser un nom, surtout lorsque plusieurs scripts se succèdent.
Soit = resi 1-10 et = resi 8-20. L'intersection vaut (résidus 8 à 10) et la réunion . La différence contient 7 résidus. Ces comptages supposent une numérotation continue ; avec des lacunes, inspectez la structure.
Représentations
Les représentations se superposent. cartoon et ribbon montrent le squelette ; sticks les liaisons ; spheres les atomes ; surface une enveloppe ; lines et mesh les contacts. hide everything précède la construction d'une figure.
Le choix suit la question : cartoon pour le repliement, sticks pour un ligand, spheres pour un ion, surface transparente pour une cavité. Une surface coûte plus cher, car elle calcule une enveloppe.
Les couches sont indépendantes : show surface n'efface pas les bâtonnets déjà affichés, et hide surface ne touche pas au cartoon. La transparence se règle avec set transparency pour la surface et set cartoon_transparency pour le ruban.
Une représentation ne remplace pas une mesure : une sphère ne prouve pas un contact et une surface ne donne pas une aire accessible. Joignez sélections, distances et paramètres.
Couleurs
color applique une couleur à une sélection. Les noms standard (marine, yellow) suffisent souvent ; 0xRRGGBB permet une charte. spectrum b, rainbow, selection colorie selon le facteur B, sans mesurer la qualité locale.
util.cbc colorie chaque chaîne. Sur 1CRN, une seule chaîne donne une seule couleur : c'est correct. Sur 4HHB, la même commande distingue les chaînes.
Les couleurs sont portées par les atomes : si deux sélections se chevauchent, la dernière commande l'emporte. Coloriez du général au spécifique.
Une palette limitée et constante aide à comparer plusieurs figures. Évitez de coder une conclusion par une couleur sans légende, et vérifiez le contraste sur fond blanc comme sur fond transparent.
Aligner deux objets
align mobile, target aligne les séquences puis superpose les structures ; il convient à des homologues de séquence comparable. super est indépendant de la séquence et rapproche des repliements divergents. cealign vise les permutations circulaires.
Les deux déplacent l'objet mobile et renvoient un RMSD et un nombre d'atomes. orient et zoom ne cadrent que la caméra : une caméra bien placée peut faire croire à une superposition qui n'existe pas.
align peut échouer ou produire un RMSD trompeur si les séquences sont trop divergentes ; super est alors préférable, mais son résultat doit être inspecté. Dans les deux cas, le RMSD dépend des atomes retenus : Cα, squelette ou tous les atomes lourds ne mesurent pas la même chose.
Pour plusieurs objets, alignez chaque mobile sur une référence, puis mémorisez get_view et restaurez avec set_view.
Rendu : ray, png et paramètres
L'affichage OpenGL convient mal à une figure finale. ray calcule ombres, transparences et contours à la résolution demandée. Pour pixels, il évalue au moins rayons primaires, plus les secondaires ; le coût augmente avec la résolution, les objets et la transparence.
png écrit le fichier. Sans ray, l'image dépend du tampon OpenGL : appelez ray, puis png. width, height et dpi fixent les dimensions et la résolution physique. À 150 dpi, 1200 sur 900 pixels donnent 8 sur 6 pouces ; à 300 dpi, 4 sur 3 pouces. Notez ces valeurs.
set ray_shadows, 0, set antialias, 2 et set ray_opaque_background, 0 stabilisent l'aspect. Le rendu n'est pas garanti identique au bit près entre versions, systèmes et pilotes.
La transparence est coûteuse : chaque rayon peut traverser plusieurs couches et l'ordre de tri des surfaces peut produire des artefacts. Pour une figure de publication, testez le rendu à la résolution finale, pas seulement dans la fenêtre.
Sessions, scripts et API Python
save session.pse enregistre objets, sélections, caméra, réglages et scènes ; load les restaure. Une session est pratique mais binaire, liée à la version, et ne contient pas toujours le chemin des données.
Un .pml contient des commandes, un .py du Python, exécuté par run script.py. L'API cmd.* reprend les commandes avec des arguments typés : select chain_a, chain A devient cmd.select("chain_a", "chain A"), et ray 1200, 900 devient cmd.ray(1200, 900). cmd.do("...") réanalyse une chaîne : utile pour réutiliser un texte, plus lent et moins sûr.
L'API permet de boucler, de lire cmd.count_atoms(selection) et de consigner les résultats. Elle ne valide pas les sélections : une faute de frappe peut produire une sélection vide sans erreur.
Reproductibilité et limites
Une figure reproductible précise version de PyMOL, fichier PDB et date, sélections, représentations, couleurs, réglages, dimensions, caméra et commande d'exécution. Le script .pml ou .py est plus utile qu'un .pse seul, car il est lisible et versionnable. Remplacez les chemins absolus par des chemins relatifs ou des identifiants PDB.
PyMOL 3 existe en open-source, mais les conditions de licence et de redistribution diffèrent de l'édition commerciale ; vérifiez-les avant un usage en entreprise. Les .pse ne sont pas garanties compatibles entre versions majeures. En mode sans interface, pymol -cq exécute un script et quitte ; selon la plateforme, OpenGL peut exiger un serveur graphique virtuel, tandis que le lancer de rayons logiciel fonctionne souvent sans écran. Testez la chaîne sur la machine cible.
Implémentation
Les trois fonctions de la section séparent les responsabilités. validate_selection vérifie un sous-ensemble documenté de la syntaxe PyMOL : sélecteurs simples, listes, plages, opérateurs logiques, byres, bychain et within. residue_range_selection construit une plage de résidus sans concaténation approximative. build_pymol_script valide les chemins, les noms et les expressions, puis renvoie une liste de commandes dans un ordre stable.
Le code ci-dessous est une version compacte et autonome. Il accepte les sélections usuelles, refuse les caractères d'injection et vérifie l'équilibre des parenthèses. Le corrigé des exercices va plus loin : il analyse récursivement la grammaire, contrôle les plages décroissantes et distingue chaque sélecteur. La version complète se trouve dans exercises/module-4/4.4-visualisation-pymol/solution_4_4.py.
Aucune sortie. Exécutez le code pour voir le résultat.
Le code s'exécute dans votre navigateur (Web Worker isolé). Il n'a pas accès au serveur ; l'accès réseau est désactivé pendant l'exécution. Le premier clic sur « Exécuter » télécharge Pyodide depuis jsDelivr (plusieurs mégaoctets, version 0.26.4 épinglée) ; rien n'est chargé avant ce clic.
La sortie ci-dessous est illustrative : elle décrit la liste attendue, mais elle n'a pas été produite par PyMOL. La construction des commandes, elle, est vérifiée par les tests.
15
reinitialize
load "public/pdb/1CRN.pdb", 1CRN
hide everything
bg_color white
select chain_a, chain A
show cartoon, chain_a
color marine, chain_a
select disulfides, resi 3+40+4+32+16+26
show cartoon, disulfides
color marine, disulfides
orient
set ray_shadows, 0
set antialias, 2
ray 1200, 900
png "renders/1crn_4_4.png", width=1200, height=900, dpi=150Quatre points sont critiques. D'abord, le nom de l'objet est dérivé du nom de fichier et nettoyé : un espace devient un souligné, ce qui évite une coupure de commande. Ensuite, hide everything précède toute représentation, sinon les couches par défaut restent visibles. Troisièmement, les sélections sont validées avant d'être insérées : une chaîne vide ou une parenthèse non fermée est refusée. Enfin, ray précède png, faute de quoi le rendu dépend du tampon OpenGL.
La version compacte ne gère pas les spécifications par dictionnaire avec représentation et couleur personnalisées. Le corrigé ajoute cette souplesse, une palette par défaut et un contrôle des couleurs hexadécimales. Il vérifie aussi que le fichier PDB existe réellement et que le chemin de sortie ne contient pas de caractère qui casserait la commande png.
Étude de cas
Nous travaillons sur la crambine, entrée PDB 1CRN, fichier local public/pdb/1CRN.pdb. La structure contient une chaîne A, 46 résidus et 327 atomes. Les ponts disulfure relient les cystéines 3 et 40, 4 et 32, 16 et 26. Ces valeurs servent de contrôle : une sélection qui ne retrouve pas ces résidus doit être corrigée avant le rendu.
La question est de produire une figure lisible montrant le repliement, les ponts disulfure et le voisinage du résidu 6, tout en gardant un script capable de rejouer la même scène. Nous procédons en cinq étapes : charger l'objet, masquer l'affichage par défaut, créer les sélections, appliquer les représentations et les couleurs, puis rendre et sauvegarder la session.
Chargement du visualiseur Mol*…
Rendu par Mol* (chargé depuis un CDN). Les fichiers locaux du dépôt sont utilisés lorsqu'ils sont fournis.
Le script complet, commenté, est le suivant. Il suppose que le dossier renders existe.
# 4.4 — crambine 1CRN : repliement, disulfures et voisinage du résidu 6
reinitialize
load "public/pdb/1CRN.pdb", 1crn
hide everything
bg_color white
set ray_opaque_background, 0
set antialias, 2
# Repliement de la chaîne unique
select chain_a, chain A
show cartoon, chain_a
color marine, chain_a
set cartoon_transparency, 0.15
# Cystéines engagées dans les trois ponts disulfure
select disulfides, resi 3+40+4+32+16+26
show sticks, disulfides
color yellow, disulfides
# Voisinage du résidu 6, étendu aux résidus complets
select voisinage_6, byres (chain A and within 5 of resi 6)
show spheres, voisinage_6
color palegreen, voisinage_6
set sphere_scale, 0.25, voisinage_6
# Cadrage, rendu et session
orient
ray 1200, 900
png "renders/1crn_4_4.png", width=1200, height=900, dpi=150
save "renders/1crn_4_4.pse"Le résultat attendu est une image de 1200 sur 900 pixels, fond blanc ou transparent selon le réglage, avec un ruban bleu marine pour la chaîne A, des bâtonnets jaunes sur les six cystéines et des sphères vert pâle autour du résidu 6. La session .pse doit contenir les trois sélections nommées, l'objet 1crn, la caméra et les réglages. Aucune image n'est montrée ici : PyMOL n'a pas été exécuté, et une capture inventée ne prouverait rien.
L'interprétation doit rester prudente. La figure montre des proximités géométriques, pas des interactions énergétiques. Les sphères du voisinage sont un guide visuel : leur rayon est un paramètre d'affichage, pas un rayon de van der Waals mesuré. Les couleurs des ponts disulfure et du voisinage se superposent peut-être à la chaîne ; l'ordre des commandes détermine la couleur finale. Pour une publication, il faudrait vérifier les distances SG-SG, indiquer la résolution 1,50 Å et citer la PDB.
Sur une structure à plusieurs chaînes, la même logique s'étend : select chain_a, chain A, select chain_b, chain B, puis color sur chaque sélection ou util.cbc pour une palette automatique. Le script doit alors nommer les chaînes explicitement, car l'ordre des chaînes dans le fichier n'est pas une garantie suffisante.
Erreurs fréquentes
Quiz
Exercices
Énoncé
Écrire validate_selection(selection) qui accepte un sous-ensemble documenté de la syntaxe PyMOL et renvoie True, ou lève ValueError avec un message explicite. Écrire aussi residue_range_selection(chain, start, end) qui renvoie chain A and resi 1-46, ou chain A and resi 5 si les bornes sont égales. Refuser une chaîne vide, une chaîne de plus de quatre caractères, des bornes non entières, une borne nulle et une plage décroissante. Vérifier que les expressions produites passent elles-mêmes la validation.
Comment vérifier votre travail
Les tests se trouvent dans exercises/module-4/4.4-visualisation-pymol/test_4_4.py. Depuis la racine du dépôt :
python -m pytest exercises/module-4/4.4-visualisation-pymol -qCorrigé verrouillé
Le corrigé est chargé uniquement après confirmation. Il n'est pas présent dans la page avant cette action.
Énoncé
Écrire build_pymol_script(pdb_path, selections, output_png) qui renvoie une liste de commandes. selections associe un nom à une expression, ou à un dictionnaire {selection, representation, color}. Valider l'existence du fichier PDB, l'extension .png, les noms, les expressions, les représentations et les couleurs. Le script doit commencer par reinitialize, charger l'objet, masquer tout, appliquer les sélections, orienter, appeler ray puis png. Tester l'ordre exact, la palette par défaut et le nettoyage d'un nom de fichier contenant une espace.
Comment vérifier votre travail
Les tests se trouvent dans exercises/module-4/4.4-visualisation-pymol/test_4_4.py. Depuis la racine du dépôt :
python -m pytest exercises/module-4/4.4-visualisation-pymol -qCorrigé verrouillé
Le corrigé est chargé uniquement après confirmation. Il n'est pas présent dans la page avant cette action.
Énoncé
Mini-projet : rapport de session PyMOL. Écrire pymol_session_report(script) qui accepte une liste de commandes ou un texte multiligne et renvoie un dictionnaire : nombre de commandes, décompte par commande, objets chargés, sélections nommées, représentations, couleurs, réglages, sorties PNG, sessions .pse, présence de ray, dernière taille de rendu et avertissements. Ignorer les lignes vides et les commentaires #. Refuser une commande inconnue, un nom invalide, une sélection invalide, une couleur invalide et une option png mal formée. Signaler un png sans ray, une absence de bg_color et une sélection redéfinie.
Comment vérifier votre travail
Les tests se trouvent dans exercises/module-4/4.4-visualisation-pymol/projet/test_projet_4_4.py. Depuis la racine du dépôt :
python -m pytest exercises/module-4/4.4-visualisation-pymol/projet -qCorrigé verrouillé
Le corrigé est chargé uniquement après confirmation. Il n'est pas présent dans la page avant cette action.
Résumé
- PyMOL combine un spectateur, un langage de commandes et une API Python ; les trois partagent le même moteur.
- Un objet contient des coordonnées ; une sélection nommée désigne un sous-ensemble d'atomes sans le dupliquer.
resi,chain,name,byres,bychainetwithincouvrent la majorité des sélections structurales.- Les représentations se superposent :
hide everythingpuisshowévite les couches parasites. aligndépend de la séquence,supernon ;orientetzoomne déplacent que la caméra.rayprécèdepngpour un rendu contrôlé ; dimensions, dpi et réglages doivent être écrits dans le script.- Une session
.psene remplace pas un script versionné ; documentez version, sélections, couleurs et caméra. - Les limites de licence, de compatibilité des sessions et de rendu sans interface doivent être testées sur la machine cible.
Références
- Schrödinger. PyMOL Documentation, version 3.0. https://pymol.org/dokuwiki/
- Schrödinger. PyMOL Open-Source, dépôt officiel. https://github.com/schrodinger/pymol-open-source
- Berman, H. M. et al. (2000). The Protein Data Bank. Nucleic Acids Research, 28(1), 235–242.
- Sehnal, D. et al. (2021). Mol* Viewer: modern web app for 3D visualization and analysis of large biomolecular structures. Nucleic Acids Research, 49(W1), W431–W437.
- Goddard, T. D. et al. (2018). UCSF ChimeraX: Meeting modern challenges in visualization and analysis. Protein Science, 27(1), 14–25.
- Cock, P. J. A. et al. (2009). Biopython: freely available Python tools for computational molecular biology and bioinformatics. Bioinformatics, 25(11), 1422–1423.