• 0238494791
  • spgoo.ecpy@gmail.com

pymol est un outil de visualisation graphique dédié aux structures moléculaires. Les notebooks jupyter sont des outils formidables pour organiser une succession d’étapes de calculs. Pouvoir les utiliser ensemble peut être avantageux.

Une instance de pymol par notebook

En définissant la classe suivante, il devient possible de lancer une instance de pymol pour chacun des notebooks utilisés. Attention , dès que le kernel est arrêté, la session de pymol associée disparaît.

class pymolPy3:
    def __init__(self, mode = 1):
        # Enable gui...
        cmd = 'pymol -p'

        # Turn off gui...
        if mode != 1: cmd = 'pymol -pc'

        # Create a subprocess...
        self.pymolpy3 = Popen(cmd, shell=True, stdin=PIPE, stdout=DEVNULL)

    def __del__(self):
        # Turn off stdin...
        self.pymolpy3.stdin.close()

        # Wait until program is over...
        self.pymolpy3.wait()

        # Terminate the subprcess...
        self.pymolpy3.terminate()

    def do(self, s):
        # Keep reading the new pymol command as a byte string...
        res = self.pymolpy3.stdin.write( bytes( (s + '\n').encode() ) )

        # Flush it asap...
        res = self.pymolpy3.stdin.flush()

    def get_Mp(
        self
        ):
        logger.debug("get_p_from_pymol")
        # --------------------------------------------------------------------------
        self.do(f"""
import sys
import numpy as np
sys.path.insert(0, f"/home/krezel@ICOA-03.LOCAL/Documents/Programmes/Gitlab")
from tools_SBC.basic import (get_path, ya, yapa, load_var, dump_var, bash)
Mp = cmd.get_coords("(sele)",1)
dump_var(Mp, "Mp")
        """)
        sleep(0.5)
        return load_var("Mp")



En mettant ce code dans un fichier pymol.py, il devient possible de faire la chose suivante. On suppose que le répertoire courant possède un fichier protein.pdb d’une protéine.

from pymol import pymolPy3
pm = pymolPy3()
path = get_path()
pm.do(f"""
cd {path}
delete all
bg_color white
load protein.pdb
util.cbag protein
show surface, protein
hide cartoon
set transparency, 0.5, protein
zoom
""")

Les fonctions de ce type sont dans pymol.py

Une instance de pymol commune à tous les notebooks

Dans le cas où l’on veut travailler avec une seule instance de pymol qui soit commune à tous les notebooks, il faut lancer pymol à partir d’une console à l’aide de pymol -R

Ensuite il est possible de développer des fonctions comme la suivante qui permet d’afficher des molécules rdkit.

def pymol_show_Lmol(
        Lmol,
        name=None,
        color="green",
        style="stick",
        cartoon=-1,
        surface=False,
        ref=None,
        ):
    """
    """
    logger.debug("pymol_show_Lmol")
    # --------------------------------------------------------------------------
    cmdx = get_cmd()
    path = get_path()
    cmdx.do(f"cd {path}")
    cmdx.do("set all_states, off")
    if name is None:
        name = get_s_from_object(Lmol)
    fname = f"{name}.sdf"
    create_sdf_from_Lmol(Lmol, fname, keep_prop=False)
    pymol_load(
                fname=fname,
                name=name,
                style=style,
                color=color,
                cartoon=cartoon,
                surface=surface,
                ref=ref,  
            )

Les fonctions de ce type sont dans pymol_SBC.py