Source code for fretraj.jupyter

#!/usr/bin/env python3

import os
import re
from fretraj import _nglview_found

if _nglview_found:
    import nglview
    import ipywidgets
else:
    print("nglview is not available. Please install with pip or conda")


[docs]def connect2pymol(): """Establish an RPC connection to run PyMOL commands from the command line or from a Jupyter notebook Notes ----- Start a PyMOL server session from a terminal: >>> pymol -R On Windows you may create a shortcut that executes the command C:\path\to\PyMOLWin.exe -R """ import xmlrpc.client as xmlrpclib cmd = xmlrpclib.ServerProxy("http://localhost:9123") curr_wd = os.getcwd() try: cmd.cd(curr_wd) except: cmd.cd(re.sub(r"/mnt/([a-z])", r"\1:", curr_wd)) return cmd
[docs]def nglview_trajectory(traj_biomol): """Create a nglview trajectory scene Parameters ---------- traj_biomol : mdtraj.Trajectory trajectory of the biomolecule Returns ------- view : nglview.NGLWidget """ view = nglview.NGLWidget() view.add_trajectory(traj_biomol) view.clear_representations(component=0) view.add_simplified_base(component=0, selection="/0", disablePicking=True, colorScheme="atomindex") view.add_cartoon(component=0, selection="/0", aspectRatio=4, disablePicking=True, colorScheme="atomindex") view.stage.set_parameters(mouse_preset="pymol") return view
[docs]def nglview_trajectory_AV(traj_biomol, traj_volume1, traj_volume2, surface_representation=False): """Create a nglview trajectory scene with donor and acceptor accessible volumes (AV) Parameters ---------- traj_biomol : mdtraj.Trajectory trajectory of the biomolecule traj_volume1, traj_volume2 : mdtraj.Trajectory trajectory of the donor and acceptor accessible volume surface_representation : bool (default: False) show a surface representation (instead of spacefill, which is faster) Returns ------- view : nglview.NGLWidget """ view = nglview.NGLWidget() view.add_trajectory(traj_biomol) view.add_trajectory(traj_volume1) view.add_trajectory(traj_volume2) view.clear_representations(component=0) view.clear_representations(component=1) view.clear_representations(component=2) view.add_simplified_base(component=0, selection="/0", disablePicking=True, colorScheme="atomindex") view.add_cartoon(component=0, selection="/0", aspectRatio=4, disablePicking=True, colorScheme="atomindex") if surface_representation: view.add_surface( color="#6cb381", wireframe=True, opacity=0.4, isolevel=0, component=1, disablePicking=True, selection="all" ) view.add_surface( color="#c25449", wireframe=True, opacity=0.4, isolevel=0, component=2, disablePicking=True, selection="all" ) else: view.add_spacefill(color="#6cb381", component=1, disablePicking=True, selection="all") view.add_spacefill(color="#c25449", component=2, disablePicking=True, selection="all") view.stage.set_parameters(mouse_preset="pymol") return view
[docs]def nglview_trajectory_ACV(traj_biomol, traj_volume1_FV, traj_volume2_FV, traj_volume1_CV, traj_volume2_CV): """Create a nglview trajectory scene with donor and acceptor accessible-contact volumes (ACV) Parameters ---------- traj_biomol : mdtraj.Trajectory trajectory of the biomolecule traj_volume1_FV, traj_volume2_FV : mdtraj.Trajectory trajectory of the donor and acceptor free volume traj_volume1_CV, traj_volume2_CV : mdtraj.Trajectory trajectory of the donor and acceptor contact volume Returns ------- view : nglview.NGLWidget """ view = nglview.NGLWidget() view.add_trajectory(traj_biomol) view.add_trajectory(traj_volume1_CV) view.add_trajectory(traj_volume2_CV) view.add_trajectory(traj_volume1_FV) view.add_trajectory(traj_volume2_FV) view.clear_representations(component=0) view.clear_representations(component=1) view.clear_representations(component=2) view.clear_representations(component=3) view.clear_representations(component=4) view.add_simplified_base(component=0, selection="/0", disablePicking=True, colorScheme="atomindex") view.add_cartoon(component=0, selection="/0", aspectRatio=4, disablePicking=True, colorScheme="atomindex") view.add_surface( color="#6cb381", wireframe=False, opacity=0.4, isolevel=0, component=1, disablePicking=True, selection="all" ) view.add_surface( color="#c25449", wireframe=False, opacity=0.4, isolevel=0, component=2, disablePicking=True, selection="all" ) view.add_surface( color="#6cb381", wireframe=True, opacity=0.4, isolevel=0, component=3, disablePicking=True, selection="all" ) view.add_surface( color="#c25449", wireframe=True, opacity=0.4, isolevel=0, component=4, disablePicking=True, selection="all" ) view.stage.set_parameters(mouse_preset="pymol") return view
[docs]def nglview_multimodel_ACV(biomol_filename, volume1_filename, volume2_filename): """Create a nglview multi-model structure scene with donor and acceptor accessible-contact volumes (ACV) Parameters ---------- structure_filename : str multi-model PDB of the biomolecule volume1_filename, volume2_filename : str multi-model PDB of the donor and acceptor accessible-contact volume Returns ------- view : nglview.NGLWidget n_model : int """ global view view = nglview.NGLWidget() struct = nglview.FileStructure(biomol_filename) acv_D = nglview.FileStructure(volume1_filename) acv_A = nglview.FileStructure(volume2_filename) struct_str = struct.get_structure_string() n_models = struct_str.count("MODEL") view.add_component(struct) view.add_component(acv_D) view.add_component(acv_A) view.clear_representations(component=0) view.clear_representations(component=1) view.clear_representations(component=2) view.add_simplified_base(component=0, selection="/0", disablePicking=True, colorScheme="atomindex") view.add_cartoon(component=0, selection="/0", aspectRatio=4, disablePicking=True, colorScheme="atomindex") view.add_surface( color="#6cb381", wireframe=False, opacity=0.4, isolevel=0, component=1, disablePicking=True, selection="CV" ) view.add_surface( color="#c25449", wireframe=False, opacity=0.4, isolevel=0, component=2, disablePicking=True, selection="CV" ) view.add_surface( color="#6cb381", wireframe=True, opacity=0.4, isolevel=0, component=1, disablePicking=True, selection="all" ) view.add_surface( color="#c25449", wireframe=True, opacity=0.4, isolevel=0, component=2, disablePicking=True, selection="all" ) view.stage.set_parameters(mouse_preset="pymol") return view, n_models
[docs]def _change_model(model): """Change the current model Parameters ---------- model : int """ for i in range(view.n_components): view._remote_call("setSelection", target="compList", args=[f"/{model}"], kwargs=dict(component_index=i)) n_representations = 5 # more than 5 representations are unlikely for i in range(n_representations): view._remote_call( "setSelection", target="Representation", args=[f"/{model}"], kwargs=dict(component_index=0, repr_index=i), )
[docs]def model_slider(n_models): """A slider widget for multi-model structures Parameters ---------- n_models : int number of models in the structure Returns ------- int_slider: ipywidgets.IntSlider Notes ----- See also: https://ipywidgets.readthedocs.io/en/stable/examples/Widget%20List.html """ int_slider = ipywidgets.IntSlider( value=0, min=0, max=n_models - 1, step=1, description="Frame:", disabled=False, continuous_update=False, orientation="horizontal", readout=True, readout_format="d", ) int_slider.observe(_on_slider_value_change, names="value") return int_slider
[docs]def _on_slider_value_change(change): """Updates the view upon changing the slider value Parameters ---------- change : dict Notes ----- See also: https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Events.html """ output = ipywidgets.Output() with output: _change_model(change["new"])
[docs]def render_view(view, gui=False): """Display an nglview scene with or without a GUI Parameters ---------- view : nglview.NGLWidget gui : bool display the scene within a GUI window (useful for interacting with components and representations) """ print("Building scene, please wait...") return view.display(gui)