def to_mdtraj(system, traj): traj = [ Atoms(positions=xyz, numbers=system.get_atomic_numbers()) for xyz in traj['positions'] ] # create tmp file ase.io.write("junk.pdb", traj) traj = mdtraj.load_pdb("junk.pdb") import os os.remove('junk.pdb') show_mdtraj(traj) return traj
def _make_nglview(topology=None,positions=None): mdtraj_aux_topology = mdtraj.Topology.from_openmm(topology) traj_aux = mdtraj.Trajectory(positions._value, mdtraj_aux_topology) view = nglview.show_mdtraj(traj_aux) view.center() return view
def test_just_runs_recomputes_kdtree(self): plt.plot(self.pos[:, 0], self.pos[:, 1]) iax = plt.gca() # Prepare a mouse event in the middle of the plot x, y = np.array(iax.get_window_extent()).mean(0) # Prepare event lineh = iax.axhline(iax.get_ybound()[0]) setattr(lineh, 'whatisthis', 'lineh') dot = iax.plot(self.pos[0, 0], self.pos[0, 1])[0] setattr(dot, 'whatisthis', 'dot') CLAL = molpx._linkutils.ClickOnAxisListener( nglview.show_mdtraj(self.MD_trajectory), True, [lineh], iax, self.pos, [dot]) # Resize the figure CLAL.ax.figure.set_size_inches(1, 1) # Send an event CLAL( MouseEvent(" ", CLAL.ax.figure.canvas, x, y, button=1, key=None, step=0, dblclick=False, guiEvent=None))
def visualize_trajectory(wd="./simulation/"): xtcfile = path.join(wd, "traj_comp.xtc") wrappedxtcfile = path.join(wd, "wrapped.xtc") grofile = path.join(wd, "confout.gro") try: assert all([path.exists(f) for f in [xtcfile, grofile]]) except: raise FileNotFoundError(f"traj_comp.xtc, and confout.gro were " f"not found in {wd}") grompp_command = ( f"echo 0 | gmx trjconv -f traj_comp.xtc -o wrapped.xtc -pbc whole") proc = Popen(grompp_command, stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True, cwd=wd) out, err = proc.communicate() if "Fatal error" in err: print(err) raise RuntimeError("Gromacs TRJCONV command failed") import nglview as nv import mdtraj as md traj = md.load(wrappedxtcfile, top=grofile) ngl_widget = nv.show_mdtraj(traj) return ngl_widget
def view(self): """Return a nglview view for the actual positions.""" view = nglview.show_mdtraj(self.mdtraj) if len(self.positions) < 10000: view.add_ball_and_stick('all') view.center(zoom=True) return view
def generate_nglview_object( traj: md.Trajectory, tautomer_transformation: dict) -> nglview.NGLWidget: """ Generates nglview object from topology and trajectory files. Parameters ---------- top_file : file path to mdtraj readable topology file traj_file : file path to mdtraj readable trajectory file Returns ------- view: nglview object """ view = nglview.show_mdtraj(traj) if 'donor_hydrogen_idx' in tautomer_transformation: # Clear all representations to try new ones print('Hydrogen in GREEN is real at lambda: 0.') print('Hydrogen in YELLOW is real at lambda: 1.') view.add_representation( 'point', selection=[tautomer_transformation['donor_hydrogen_idx']], color='green', pointSize=3.5) view.add_representation( 'point', selection=[tautomer_transformation['acceptor_hydrogen_idx']], color='yellow', pointSize=3.5) return view
def view(self, re_create: bool = False) -> nj.NGLWidget: if not hasattr(self, "_view") or not isinstance( self._view, nj.NGLWidget) or re_create: self._view = nj.show_mdtraj(self) self.view.clear_representations() self.view.add_representation("licorice", selection="all") return self._view
def test_coordinates_meta(): from mdtraj.testing import get_fn fn, tn = [get_fn('frame0.pdb'),] * 2 trajs = [pt.load(fn, tn), md.load(fn, top=tn), pmd.load_file(tn, fn)] N_FRAMES = trajs[0].n_frames from MDAnalysis import Universe u = Universe(tn, fn) trajs.append(Universe(tn, fn)) views = [nv.show_pytraj(trajs[0]), nv.show_mdtraj(trajs[1]), nv.show_parmed(trajs[2])] views.append(nv.show_mdanalysis(trajs[3])) for index, (view, traj) in enumerate(zip(views, trajs)): view.frame = 3 nt.assert_equal(view.trajlist[0].n_frames, N_FRAMES) nt.assert_equal(len(view.trajlist[0].get_coordinates_dict().keys()), N_FRAMES) if index in [0, 1]: # pytraj, mdtraj if index == 0: aa_eq(view.coordinates[0], traj.xyz[3], decimal=4) else: aa_eq(view.coordinates[0],10*traj.xyz[3], decimal=4) view.coordinates = traj.xyz[2]
def visualize_system(traj: mdtraj.Trajectory) -> nj.NGLWidget: protein_resi = set([ x.index + 1 for x in traj.top.residues if (x.name in three_letter_aa_lib) ]) protein_resn = set([ x.name[:3] for x in traj.top.residues if (x.name in three_letter_aa_lib) ]) water_resi = set( [x.index + 1 for x in traj.top.residues if (x.name in solvents)]) ions_resn = set([x.name for x in traj.top.residues if (x.name in ions)]) if len(protein_resi) > 0 or len(water_resi) > 0 or len(ions_resn) > 0: representation = [ { "type": "cartoon", "params": { "sele": " ".join(map(str, protein_resi)), "color": "residueindex" } }, ] view = nj.show_mdtraj(traj, representations=representation) else: view = nj.show_mdtraj(traj) if len(protein_resn) > 0: view.add_representation("cartoon", selection=" ".join(map(str, protein_resn)), color="residueindex") if len(protein_resn) < 16: view.add_representation("hyperball", selection=" ".join(map(str, protein_resn))) if len(water_resi) > 0 and traj.n_frames < 300: view.add_representation("line", selection=" ".join(map(str, water_resi))) if len(ions_resn) > 0: view.add_representation("hyperball", selection=" ".join(map(str, ions_resn)), radius=3, color="green") return view
def make_view(topology, positions): if type(positions) == list: positions = np.array([tmp_pos._value for tmp_pos in positions]) * positions[0].unit topology_mdtraj = md.Topology.from_openmm(topology) positions_mdtraj = positions._value aux_traj = md.Trajectory(positions_mdtraj, topology_mdtraj) return nglview.show_mdtraj(aux_traj)
def _initialize_nglwidget_if_safe(geom, mock=True): try: return _nglview.show_mdtraj(geom) except: if mock: print( "molPX has to be used inside a notebook, not from terminal. A mock nglwidget is being returned." "Ignore this message if testing, " "otherwise refer to molPX documentation") return _mock_nglwidget(geom) else: raise Exception( "molPX has to be used inside a notebook, not from terminal")
def test_feature_color_list(self): plt.figure() iwd = nglview.show_mdtraj(self.MD_trajectories[0]) visualize.feature(self.feat.active_features[0], iwd, idxs=[0, 1], color_list=['blue']) try: visualize.feature(self.feat.active_features[0], iwd, idxs=[0, 1], color_list='blue') except TypeError: pass
def animate( frames, gui=False, delete=True, ): """ Creates nglview widget for given list of molecule files (frames). """ T = mdtraj.load(frames, top=frames[0]) view = nglview.show_mdtraj(T, gui=gui) view.add_ball_and_stick() if delete: for frame in frames: os.remove(frame) return view
def model_viewer(self, model_number = 0): """ Quick viewer for visually inspecting docking contacts output. Takes aggregate_contacts output from contacts_iterator and plots contacts (in red) onto receptor-ligand docking solution (blue). """ pdb = md.load(self.path + self.new_path + "model%s.pdb" % (model_number)) view_single_solution = nv.show_mdtraj(pdb) view_single_solution.add_cartoon(selection ="protein", color = "blue") view_single_solution.add_ball_and_stick(selection = self.aggregate_contacts[model_number], color = "red") print("Single models ready for viewing...") return view_single_solution
def to_nglview_NGLWidget(item, atom_indices='all', structure_indices='all', check=True): if check: digest_item(item, 'mdtraj.Trajectory') atom_indices = digest_atom_indices(atom_indices) structure_indices = digest_structure_indices(structure_indices) from . import extract from nglview import show_mdtraj as show_mdtraj tmp_item = extract(item, atom_indices=atom_indices, structure_indices=structure_indices, copy_if_all=False, check=False) tmp_item = show_mdtraj(tmp_item) return tmp_item
def visualize(self, show_ports=False): """Visualize the Compound using nglview. """ if run_from_ipython(): structure = self.to_trajectory(show_ports) return nglview.show_mdtraj(structure) else: try: """Visualize the Compound using imolecule. """ import imolecule json_mol = self._to_json(show_ports) return imolecule.draw(json_mol, format='json', shader='lambert', drawing_type='ball and stick', camera_type='perspective', element_properties=None) except ImportError: raise RuntimeError('Visualization is only supported in Jupyter ' 'Notebooks.')
def setUpClass(self): self.MD_trajectory_files = glob( molpx._molpxdir( join='notebooks/data/c-alpha_centered.stride.1000*xtc')) self.MD_topology_file = molpx._molpxdir( join='notebooks/data/bpti-c-alpha_centered.pdb') self.MD_topology = md.load(self.MD_topology_file).top self.MD_trajectories = [ md.load(ff, top=self.MD_topology_file) for ff in self.MD_trajectory_files ] self.n_sample = 20 self.pos = np.zeros((self.n_sample, 2)) self.pos[:, 0] = np.linspace(0, 1, self.n_sample) self.pos[:, 1] = np.random.randn(self.n_sample) self.geom = self.MD_trajectories[0][:20] self.ngl_wdg = nglview.show_mdtraj(self.geom)
def test_coordinates_meta(): from mdtraj.testing import get_fn fn, tn = [get_fn('frame0.pdb'),] * 2 trajs = [pt.load(fn, tn), md.load(fn, top=tn), pmd.load_file(tn, fn)] N_FRAMES = trajs[0].n_frames from MDAnalysis import Universe u = Universe(tn, fn) trajs.append(Universe(tn, fn)) views = [nv.show_pytraj(trajs[0]), nv.show_mdtraj(trajs[1]), nv.show_parmed(trajs[2])] views.append(nv.show_mdanalysis(trajs[3])) for index, (view, traj) in enumerate(zip(views, trajs)): view.frame = 3 nt.assert_equal(view._trajlist[0].n_frames, N_FRAMES)
def generate_nglview_object( traj: md.Trajectory, radius: int = 0.0, donor_hydrogen_idx: int = -1, acceptor_hydrogen_idx: int = -1, mark_residues=[], ) -> nglview.NGLWidget: """ Generates nglview object from a trajectory object. Generated with md.Trajectory(traj, top). Parameters ---------- traj : md.Trajectory donor_hydrogen_idx : int acceptor_hydrogen_idx : int Returns ------- view: nglview object """ view = nglview.show_mdtraj(traj) view.add_representation( repr_type="ball+stick", selection="water", opacity=0.4, color="blue" ) if radius > 0.0: view.shape.add_sphere( [radius / 2, radius / 2, radius / 2], [0, 0, 1], (radius) / 2 ) view.update_representation(component=1, repr_index=0, opacity=0.2) if donor_hydrogen_idx != -1 and acceptor_hydrogen_idx != -1: # Clear all representations to try new ones print("Hydrogen in GREEN is real at lambda: 0.") print("Hydrogen in YELLOW is real at lambda: 1.") view.add_representation( "point", selection=[donor_hydrogen_idx], color="green", pointSize=3.5 ) view.add_representation( "point", selection=[acceptor_hydrogen_idx], color="yellow", pointSize=3.5 ) return view
def show_mdtraj(fp, stride=None, atom_indices=None, top=None, **kwargs): """ Return a trajectory view. Parameters ---------- fp : filename or list of filenames stride : int, optional Read every stride-th frame atom_indices : array, optional Read only a subset of the atoms coordinates from the file top : {str, Trajectory, Topology} kwargs : dict Molecular representation of selections, e.g. protein='cartoon' Returns ------- View object """ load_args = dict(stride=stride, atom_indices=atom_indices) topography = None topology = None if isinstance(top, yank.Topography): topography = top topology = top.topology if isinstance(top, mm.app.Topology): topology = mdtraj.Topology.from_openmm(top) if isinstance(top, mdtraj.Topology): topology = top if topology: load_args['top'] = topology if isinstance(fp, mdtraj.Trajectory): traj = fp else: traj = mdtraj.load(fp, **load_args) view = nglview.show_mdtraj(traj) top = topography or topology setup_view(view, top=top, **kwargs) # TODO: fix return view
def plot_frame(xp, top): """Create an MDTraj Trajectory object and return a nglview view. Parameters ---------- xp : array-like top : topology Return ------ nglview view object """ mdtop = mdtraj.Topology.from_openmm(top) traj = mdtraj.Trajectory(xp / unit.nanometers, mdtop) view = nglview.show_mdtraj(traj) if len(xp) < 10000: view.add_ball_and_stick('all') view.center(zoom=True) return view
def __init__(self, traj, figure, *args, **kwargs): super().__init__(*args, **kwargs) view = nv.show_mdtraj(traj, **kwargs) self.traj = traj self.view = view self.figure = figure self.children = [figure, view] link((self, 'frame'), (self.view, 'frame')) self.view._remote_call("setSize", target='Widget', args=['100%', '100%']) self.view.layout = w.Layout(max_width="1000px") self.figure.layout = w.Layout() self.layout = w.Layout(display='flex', flex_flow='row wrap', align_items='flex-start')
def _nglwidget_wrapper(geom, ngl_wdg=None, n_small=10): r""" Wrapper to nlgivew.show_geom's method that allows for some other automatic choice of representation Parameters ---------- geom : :obj:`mdtraj.Trajectory` object or str with a filename to anything that :obj:`mdtraj` can read ngl_wdg : an already instantiated widget to add the geom, default is None n_small : if the geometry has less than n_small residues, force a "ball and stick" represenation :return: :nglview.widget object """ if isinstance(geom, str): geom = _md.load(geom) if ngl_wdg is None: if geom is None: ngl_wdg = _nglview.NGLWidget() else: ngl_wdg = _nglview.show_mdtraj(geom) else: ngl_wdg.add_trajectory(geom) # Let' some customization take place ## Do we need a ball+stick representation? if geom is not None: if geom.top.n_residues < n_small: for ic in range(len(ngl_wdg._ngl_component_ids)): # TODO FIND OUT WHY THIS FAILS FOR THE LAST REPRESENTATION #print("removing reps for component",ic) ngl_wdg.remove_cartoon(component=ic) ngl_wdg.clear_representations(component=ic) ngl_wdg.add_ball_and_stick(component=ic) return ngl_wdg
def setUpClass(self): self.MD_trajectory_files = glob( molpx._molpxdir( join='notebooks/data/c-alpha_centered.stride.1000*xtc')) self.MD_topology_file = molpx._molpxdir( join='notebooks/data/bpti-c-alpha_centered.pdb') self.MD_topology = md.load(self.MD_topology_file).top self.MD_trajectories = [ md.load(ff, top=self.MD_topology_file) for ff in self.MD_trajectory_files ] self.MD_trajectory = self.MD_trajectories[0] self.pos = np.random.rand(self.MD_trajectory.n_frames, 2) plt.plot(self.pos[:, 0], self.pos[:, 1]) iax = plt.gca() # Prepare event self.lineh = iax.axhline(iax.get_ybound()[0]) setattr(self.lineh, 'whatisthis', 'lineh') self.dot = iax.plot(self.pos[0, 0], self.pos[0, 1])[0] setattr(self.dot, 'whatisthis', 'dot') self.ngl_wdg = nglview.show_mdtraj(self.MD_trajectory)
def display(systems, topology=None): """ Produce an ngl wiget for a molecular system. Args: system (object): An mdtraj.Trajectory or something that can be made into one Returns: ngl wiget for the system. """ import nglview import mdtraj as mdt bigsys = None if not isinstance(systems, list): lsys = [systems] else: lsys = systems for system in lsys: if not isinstance(system, mdt.Trajectory): if topology is None: sys = mdt.load(system.as_file()) else: sys = mdt.load(system.as_file(), top=topology.as_file()) else: sys = system if bigsys is None: bigsys = sys else: bigsys = bigsys + sys print(len(bigsys)) view = nglview.show_mdtraj(bigsys) view.add_representation('line', selection='water') view.add_representation('licorice', selection='protein') return view
def test_show_mdtraj(): import mdtraj as md from mdtraj.testing import get_fn fn = nv.datafiles.PDB traj = md.load(fn) view = nv.show_mdtraj(traj)
def render_traj(topology, positions): traj = Trajectory(positions / unit.nanometers, Topology.from_openmm(topology)) return (show_mdtraj(traj).add_ball_and_stick('all').center_view(zoom=True))
def test_show_mdtraj(): import mdtraj as md traj = md.load(nv.datafiles.PDB) view = nv.show_mdtraj(traj)
def heatmap(self, plot_receptor = True, plot_ligand = False): """ Constructs a heatmap of contact points onto receptor and ligand structures. Requires input from atom_contacts_parser. Color cutoffs are currently hard-coded for this particular data set, but can be easily modified. """ pdb = md.load(self.path + self.new_path + "model0.pdb") rec = [] for i in range(len(self.receptor_chains)): c = [atom.index for atom in pdb.topology.chain(self.receptor_chains[i]).atoms] rec.append(c) rec = np.array(rec) rec = np.hstack(rec).tolist() rec_structure = md.load(self.path + self.new_path + "model0.pdb", atom_indices=rec) lig = [] for i in range(len(self.ligand_chains)): c = [atom.index for atom in pdb.topology.chain(self.ligand_chains[i]).atoms] lig.append(c) lig = np.array(lig) lig = np.hstack(lig).tolist() lig_structure = md.load(self.path + self.new_path + "model0.pdb", atom_indices=lig) if plot_receptor == True: heatmap_viewer = nv.show_mdtraj(rec_structure) heatmap_viewer.clear() heatmap_viewer.add_ball_and_stick(selection ="residue", color = "blue") low = [] med = [] hi = [] for i in range(len(self.receptor_atoms)): if self.receptor_atom_counts[i] > 1 and self.receptor_atom_counts[i] < 6: low.append(self.receptor_atoms[i]) elif self.receptor_atom_counts[i] > 5 and self.receptor_atom_counts[i] < 11: med.append(self.receptor_atoms[i]) else: hi.append(self.receptor_atoms[i]) heatmap_viewer.add_ball_and_stick(selection = low, color = "yellow") heatmap_viewer.add_ball_and_stick(selection = med, color = "orange") heatmap_viewer.add_ball_and_stick(selection = hi, color = "red") if plot_ligand == True: heatmap_viewer = nv.show_mdtraj(lig_structure) heatmap_viewer.clear() heatmap_viewer.add_ball_and_stick(selection ="residue", color = "blue") l = [] m = [] h = [] for i in range(len(self.actual_ligand_atoms)): if self.ligand_atom_counts[i] > 6 and self.ligand_atom_counts[i] < 26: l.append(self.actual_ligand_atoms[i]) elif self.ligand_atom_counts[i] > 25 and self.ligand_atom_counts[i] < 51: m.append(self.actual_ligand_atoms[i]) else: h.append(self.actual_ligand_atoms[i]) heatmap_viewer.add_ball_and_stick(selection = l, color = "yellow") heatmap_viewer.add_ball_and_stick(selection = m, color = "orange") heatmap_viewer.add_ball_and_stick(selection = h, color = "red") print("Heatmaps constructed...done") return heatmap_viewer
def display_traj(system, traj): from nglview import show_mdtraj return show_mdtraj(to_mdtraj(system, traj))
def test_feature(self): plt.figure() iwd = nglview.show_mdtraj(self.MD_trajectories[0]) visualize.feature(self.feat.active_features[0], iwd)
def test_just_runs(self): self.just_runs(nglview.show_mdtraj(self.MD_trajectory))