Automatisation de PyMOL Jérôme Pansanel Toulouse, 18 et 19 janvier 2016 1 Sommaire 18 et 19 janvier 2015 ● Le langage de script de PyMOL ● Le script pymolrc ● Le mode batch ● Python dans PyMOL ● PyMOL dans Python ● Les plugins Automatisation de PyMOL / J. Pansanel 2 Le langage PyMOL L'ensemble des actions PyMOL peut être réaliser à l'aide de la ligne de commande en utilisant le langage PyMOL en utilisant l'invite de commande. Invite de commande 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 3 Documentation Quelques ressources documentaires : ● http://www.pymolwiki.org/index.php/Main_Page ● http://www.pymolwiki.org/index.php/CheatSheet ● http://pymol.sourceforge.net/newman/user/S0210start_cmds.html ● Log… ● help 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 4 Le fichier pymolrc Le lancement de PyMOL peut être modifié avec le fichier pymolrc. L'emplacement de ce fichier est : ● ${HOME}/.pymolrc sous Linux et Mac OS X ● notepad %HOMEDRIVE%%HOMEPATH%\pymolrc.pml sous MS Windows en utilisant le menu Démarrer → Exécuter… Ce fichier contient des éléments du langage de script PyMOL. Il est possible également d'utiliser le langage Python pour automatiser certaines tâches à l'ouverture de la session. Dans ce cas, le code est stocké dans le fichier pymolrc.py. 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 5 Le fichier pymolrc : exemple # Suppression de la brume set depth_cue, 0 # Un meilleur rendu pour le ray tracing set antialias, 2 # Un fond blanc bg_color white # Fond transparent lors du ray-tracing set ray_opaque_background, 0 # Rendu realiste des loops set cartoon_smooth_loops, 0 # Rendu realiste des feuillets set cartoon_flat_sheets, 0 # Limitation de la couleur des structures secondaires set cartoon_discrete_colors, 1 Note : pas de caractère accentué dans ce fichier 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 6 Les scripts fetch 3DV3, async=0 hide everything select mg, resn MG select atp, resn ATP select mek, resn MEK select protein, chain a & !(mg | atp | mek) show spheres, (atp or mek or mg) set sphere_scale, 0.1, atp show lines, atp set sphere_scale, 0.3, mek show sticks, mek set sphere_transparency, 0.2, mg show cartoon, protein color red, ss h & protein color lime, ss s & protein color grey70, ss '' & protein color red, elem o & (atp | mek) color blue, elem n & (atp | mek) color white, elem c & (atp | mek) color orange, elem p & (atp | mek) color aquamarine, mg deselect ; orient ; ray 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 7 Les scripts Pour lancer les scripts : PyMOL> @script.pml Ou via l'interface graphique : File → Run… 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 8 Les scripts au démarrage Il est très simple de lancer un script au démarrage de PyMOL : localhost:~ user$ pymol script.pml 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 9 Mode batch Pour ne pas lancer l'interface graphique (mode batch) : localhost:~ user$ pymol -qc script2.pml Pour lancer PyMOL avec une (ou plusieurs commandes) : localhost:~ user$ pymol -d 'fetch 3dv3' Autres commandes : -c -q -e -X -Y -W -H -V -r <file.py> ... ligne de commande uniquement pas d'écran de démarrage démarrage en mode plein écran ajuster la géométrie de l'écran exécuter le fichier Python file.py Plus de détails sur : http://pymolwiki.org/index.php/Command_Line_Options 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 10 Python dans PyMOL ● Possibilité d'exécuter directement du code Python dans l'invite de commande ● Possibilité d'exécuter langage PyMOL et Python simultanément Un exemple simple et pratique : PyMOL> liste=[] PyMOL> iterate 3DV3,liste.append((resi,resn)) PyMOL> print liste Pour aller plus loin en Python : PyMOL> python PyMOL> print sys.version PyMOL> python end 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 11 Fonction Python dans PyMOL Possibilité d'ajouter une fonction en exécutant du code Python : python def fasta(selection): print('> ' + str(selection)) stored.aaList = [] cmd.iterate("%s" % selection, "stored.aaList.append(resn)") print(''.join(stored.aaList)) cmd.extend('fasta',fasta) python end Résultat : PyMOL> fasta('3DV3') > 3DV3 MGMETMETMETMETMETMETMETMETGLUGLUGLUGLUGLUGLUGLUGLUGLULEULEUL EULEULEULEULEULEULYSLYSLYSLYSLYSLYSLYSLYSLYSASPAS… 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 12 Fonction PyMOL dans Python Possibilité également d'utiliser PyMOL dans du code Python ... # -*- coding: utf-8 -*# Un simple script pour charger une molécule et enregistrer une # image. import __main__ __main__.pymol_argv = ['pymol','-qc'] # Pymol: quiet and no GUI import pymol pymol.finish_launching() pymol.cmd.fetch('3DV3', async=0) Pymol.cmd.do('as cartoon') pymol.cmd.ray() pymol.cmd.png('3dv3') pymol.cmd.quit() 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 13 Fonction PyMOL dans Python 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 14 Gestion des plugins Extension par des plugins : Plugin → Plugin Manager def __init__(self): self.menuBar.addmenuitem('Plugin', 'command', 'PDB Loader Service', label = 'PDB Loader Service', command = lambda s=self : fetchPDBDialog(s)) def remote(pdbCode): pdbCode = pdbCode.upper() try: pdbFile = urllib2.urlopen('http://www.rcsb.org/pdb/cgi/export.cgi/' + pdbCode + '.pdb.gz?format=PDB&pdbId=' + pdbCode + '&compression=gz') cmd.read_pdbstr(zlib.decompress(pdbFile.read()[22:], -zlib.MAX_WBITS), pdbCode) except: print "Unexpected error:", sys.exc_info()[0] ... 18 et 19 janvier 2015 Automatisation de PyMOL / J. Pansanel 15