Source code for schrodinger.application.livedesign.pse_helpers

"""
LiveDesign protocol pse helper functions

Copyright Schrodinger, LLC. All rights reserved.
"""

import os
import sys
from contextlib import contextmanager

from schrodinger.utils.fileutils import get_mmshare_scripts_dir

sys.path.append(get_mmshare_scripts_dir())


[docs]@contextmanager def clear_ld_library_path(): """ Used to call external applications that may not work inside $SCHRODINGER/run environment. """ try: ld_library_path = os.environ['LD_LIBRARY_PATH'] except KeyError: ld_library_path = "" os.environ['LD_LIBRARY_PATH'] = "" try: yield finally: os.environ['LD_LIBRARY_PATH'] = ld_library_path
[docs]def generate_watermap_pse(watermap_proc, script_name, lib_path): """ Generate a PyMOL script to render a WaterMap result file object with the properties """ # save the watermat_st to a temp file watermap_file = "watermap.maegz" watermap_proc.wm_st.write(watermap_file) if watermap_proc.params["reflig"]: watermap_proc.reflig_st.append(watermap_file) # load libraries pml = [ 'import uuid', 'import sys', f'sys.path.append("{lib_path}")', 'import cubes' ] color_prop = watermap_proc.params["color_prop"] if not watermap_proc.params["reflig"]: # FIXME add it back when the WebPyMOL bug is fixed # if color_prop is not None: # label_prop = color_prop.strip('r_watermap_') # pml += [ # "set label_relative_mode, 1", # "set label_screen_point, [0,-0.66,1]", "pseudoatom foo", # f"label foo, '{label_prop}'" # ] pml += ['save ligand.pse', 'delete foo', 'set label_relative_mode, 0'] pml.append( f'load {watermap_file}, wm, mimic=1, object_props=*, atom_props=*') if watermap_proc.params["reflig"]: # FIXME add it back when the WebPyMOL bug is fixed # if color_prop is not None: # label_prop = color_prop.strip('r_watermap_') # pml += [ # 'extract reference_ligand, bonded', # 'hide everything, not bonded', "set label_relative_mode, 1", # "set label_screen_point, [0,-0.66,1]", # f"label reference_ligand, '{label_prop}'" # 'save ligand.pse', 'delete reference_ligand', # 'set label_relative_mode, 0' # ] # else: pml += [ 'extract reference_ligand, bonded', 'hide everything, not bonded', 'save ligand.pse', 'delete reference_ligand' ] # color pml += [ "colors = {}", "iterate wm, colors[chain, resi, name] = int('0x40%02x%02x%02x' % (int(p.r_watermap_color_r * 255), " "int(p.r_watermap_color_g * 255), int(p.r_watermap_color_b * 255)), 16)", "alter wm, color = int(colors.get((chain, resi, name), color))", "recolor" ] # shape pml.append("hide everything") if watermap_proc.params["shape"] is None: pml += [ "show spheres", "alter visible, s.sphere_scale = 0.5", f'alter visible, s.sphere_transparency = {watermap_proc.params["transparency"]}' ] else: pml += [ f"{watermap_proc.params['shape']}", f"set cgo_transparency, {watermap_proc.params['transparency']}" ] # show property if watermap_proc.params["show_prop"]: pml.append(f'label all, "%.2f\\n" % (properties["{color_prop}"])') # color ramp if color_prop is not None: pml += [ "cmd.extract('watermap', cmd.get_object_list()[0])", f"ramp_new legend,watermap,[{watermap_proc.params['color_min']},{watermap_proc.params['color_max']}],[green,red]" ] # save pse file pml += [ "for obj in cmd.get_object_list(): cmd.set_name(obj, uuid.uuid1())", "save protein.pse" ] # write the pml script pml_script = "\n".join(pml) with open(script_name, "w") as f: f.write(pml_script) return