This is a read-only mirror of pymolwiki.org

Difference between revisions of "Dynamic mesh"

From PyMOL Wiki
Jump to navigation Jump to search
(Wizard > Density)
m (4 revisions)
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
{{Infobox script-repo
 +
|type      = module
 +
|filename  = dynamic_mesh.py
 +
|author    = [[User:TakanoriNakane|Takanori Nakane]]
 +
|license  = BSD-2-Clause
 +
}}
 +
 
'''dynamic_mesh''' displays [[isomesh]] around the center of the view. When the view is moved, the isomesh will be updated automatically.
 
'''dynamic_mesh''' displays [[isomesh]] around the center of the view. When the view is moved, the isomesh will be updated automatically.
 
You can also change contour level by PageDown/PageUp keys. This script is intended to implement interface similar to Coot for examing electron density maps.
 
You can also change contour level by PageDown/PageUp keys. This script is intended to implement interface similar to Coot for examing electron density maps.
Line 6: Line 13:
 
== Usage ==
 
== Usage ==
  
−
  dynamic_mesh mapname [, level [, radius]]
+
  dynamic_mesh map_name [, level [, radius [, name [ sym_source ]]]]
  
−
where
+
== Arguments ==
  
−
map_name = string: name of volumetric object(map) to display  
+
* map_name = string: name of volumetric object(map) to display  
−
level = float: contour level of isomesh {default: 0.8}
+
* level = float: contour level of isomesh {default: 1.0}
−
radius = float: radius of isomesh around the center of the view {default: 8}
+
* radius = float: radius of isomesh around the center of the view {default: 8}
 +
* name = string: name of mesh object {default: dynamic_mesh}
 +
* sym_source = string: name of object from which symmetry information is derived {default: map_name}
  
 
== Example ==
 
== Example ==
Line 20: Line 29:
 
fetch 1HWK, 1hwk_map, type=2fofc, async=1
 
fetch 1HWK, 1hwk_map, type=2fofc, async=1
 
run dynamic_mesh.py
 
run dynamic_mesh.py
−
dynamic_mesh 1hwk_map
+
dynamic_mesh 1hwk_map, sym_source=1hwk
 
show sticks, resn 117
 
show sticks, resn 117
 
show ribbon
 
show ribbon
Line 27: Line 36:
  
 
Note: On PyMOL <= 1.4, you have to download the electron density map from the Uppsala Electron Density Server manually.
 
Note: On PyMOL <= 1.4, you have to download the electron density map from the Uppsala Electron Density Server manually.
−
 
−
== Script ==
 
−
 
−
<syntaxhighlight lang="python">
 
−
# Dynamic Mesh by Takanori Nakane, License: BSD-2 Clause
 
−
# version 0.11: 20120823
 
−
 
−
'''
 
−
This script was tested on PyMOL 1.2 and 1.5.
 
−
 
−
Example:
 
−
 
−
fetch 1HWK, async=1
 
−
fetch 1HWK, 1hwk_map, type=2fofc, async=1
 
−
run dynamic_mesh.py
 
−
dynamic_mesh 1hwk_map
 
−
show sticks, resn 117
 
−
show ribbon
 
−
zoom chain A and resn 117
 
−
 
−
Note: On PyMOL <= 1.4, you have to download the electron density
 
−
map from the Uppsala Electron Density Server manually.
 
−
'''
 
−
 
−
from pymol.callback import Callback
 
−
from pymol import cmd
 
−
 
−
class DynamicMesh(Callback):
 
−
    def __init__(self, meshname, level = 0.8, radius = 8):
 
−
        self.center = cmd.get_position()
 
−
        self.level = level
 
−
        self.radius = radius
 
−
        self.mesh = meshname
 
−
        cmd.set("auto_zoom", 0)
 
−
        cmd.pseudoatom("__center__", pos = self.center, quiet = 1)
 
−
        cmd.hide("everything", "__center__")
 
−
        cmd.set_key("pgup", self.contour_plus)
 
−
        cmd.set_key("pgdn", self.contour_minus)
 
−
        # TODO: Where should I unregister them?
 
−
        self.update()
 
−
 
−
    def contour_plus(self):
 
−
        self.level += 0.1
 
−
        print "Map level: " + str(self.level)
 
−
        self.update()
 
−
 
−
    def contour_minus(self):
 
−
        if (self.level < 0.15):
 
−
            return
 
−
        self.level -= 0.1
 
−
        print "Map level: " + str(self.level)
 
−
        self.update()
 
−
 
−
    def update(self):
 
−
        self.center = cmd.get_position()
 
−
        cmd.alter_state(0, "__center__", "(x, y, z) = p", space={'p': self.center})
 
−
        cmd.isomesh("dynamic_mesh", self.mesh, self.level, "__center__", carve = self.radius)
 
−
 
−
    def __call__(self):
 
−
        tmp = cmd.get_position()
 
−
        r = (self.center[0] - tmp[0]) * (self.center[0] - tmp[0]) + \
 
−
            (self.center[1] - tmp[1]) * (self.center[1] - tmp[1]) + \
 
−
            (self.center[2] - tmp[2]) * (self.center[2] - tmp[2])
 
−
        if (r > 0.3): # increase this number if it is too slow
 
−
            self.update()
 
−
       
 
−
    def get_extent(self):
 
−
        tmp = cmd.get_position()
 
−
        return [[tmp[0] - self.radius, tmp[1] - self.radius, tmp[2] - self.radius], \
 
−
                [tmp[0] + self.radius, tmp[1] + self.radius, tmp[2] + self.radius]]
 
−
 
−
def dynamic_mesh(meshname, level = 0.8, radius = 8):
 
−
    '''
 
−
DESCRIPTION
 
−
 
−
    Make 'dynamic' mesh from volumetric data such as electron density map.
 
−
    The mesh will dynamically follow the center of the view.
 
−
    Contour leveo of isomesh can be changed by PageDown and PageUp keys.
 
−
 
−
    NOTE: Crystallographic operations will not be applied to the map.
 
−
    Only pre-calculated volume can be displayed.
 
−
 
−
USAGE
 
−
 
−
    dynamic_mesh mapname [, level [, radius]]
 
−
 
−
ARGUMENTS
 
−
 
−
    map_name = string: name of volumetric object(map) to display
 
−
 
−
    level = float: contour level of isomesh {default: 0.8}
 
−
 
−
    radius = float: radius of isomesh around the center of the view {default: 8}
 
−
 
 
−
SEE ALSO
 
−
 
−
    isomesh
 
−
    '''
 
−
       
 
−
    cmd.delete("dynamic_mesh") # TODO: support multiple meshs
 
−
    cmd.delete("dymesh_callback")
 
−
    cmd.load_callback(DynamicMesh(meshname, float(level), float(radius)),'dymesh_callback')
 
−
 
−
cmd.extend('dynamic_mesh', dynamic_mesh)
 
−
cmd.auto_arg[0]['dynamic_mesh'] = [ cmd.map_sc, 'map object', ', ']
 
−
</syntaxhighlight>
 
  
 
== See Also ==
 
== See Also ==
Line 139: Line 42:
 
* [[get_position]]
 
* [[get_position]]
 
* [[Density Wizard]]
 
* [[Density Wizard]]
 +
* [[map_auto_expand_sym]]
 
* Coot http://lmb.bioch.ox.ac.uk/coot/
 
* Coot http://lmb.bioch.ox.ac.uk/coot/
  
 
[[Category:Script_Library]]
 
[[Category:Script_Library]]
 
[[Category:UI_Scripts]]
 
[[Category:UI_Scripts]]
 +
[[Category:Pymol-script-repo]]

Latest revision as of 01:43, 28 March 2014

Type Python Module
Download dynamic_mesh.py
Author(s) Takanori Nakane
License BSD-2-Clause
This code has been put under version control in the project Pymol-script-repo

dynamic_mesh displays isomesh around the center of the view. When the view is moved, the isomesh will be updated automatically. You can also change contour level by PageDown/PageUp keys. This script is intended to implement interface similar to Coot for examing electron density maps.

Note: PyMOL's Density Wizard (Menu > Wizard > Density) provides similar functionality. It is implemented using wizard framework, while this uses CallBack object.

Usage

dynamic_mesh map_name [, level [, radius [, name [ sym_source ]]]]

Arguments

  • map_name = string: name of volumetric object(map) to display
  • level = float: contour level of isomesh {default: 1.0}
  • radius = float: radius of isomesh around the center of the view {default: 8}
  • name = string: name of mesh object {default: dynamic_mesh}
  • sym_source = string: name of object from which symmetry information is derived {default: map_name}

Example

fetch 1HWK, async=1
fetch 1HWK, 1hwk_map, type=2fofc, async=1
run dynamic_mesh.py
dynamic_mesh 1hwk_map, sym_source=1hwk
show sticks, resn 117
show ribbon
zoom chain A and resn 117

Note: On PyMOL <= 1.4, you have to download the electron density map from the Uppsala Electron Density Server manually.

See Also