Delaunay triangulation in VMD
Delaunay triangulations are useful for visualizing a variety of molecular surfaces. Here, we use the program Hull to compute two kinds of surfaces: the surface connecting the heads of lipid membranes and the surface enclosed by a set of atoms. If you have questions about using these scripts, please send email tovmd@ks.uiuc.edu
.
Installing the scripts
To use the Delaunay triangulation scripts, you will need to follow these steps:
- Download either the original
hull.orig.tar.gz
or a patched version which has been fixed to work on recent versions of gcchull.new.tar.gz
(thediff/patch file
is also available),lipid_surface.tcl
, and3d_delaunay_surface.tcl
.- The hull program was written by Ken Clarkson at Bell Labs, and is available there. If you have trouble compiling hull, you might try contacting Ken.
- Unpack and build Hull with
gunzip hull.tar.gz tar xf hull.tar cd hull make
- Move the resulting executable,
hull
, to a permanent location. - Edit the
hullpath
variables defined at the beginnings of the two Tcl scripts to refer to this location.
Drawing the surface enclosed by a lipid membrane
Load a system containing a lipid membrane, and draw its surface by following this example. You should replace "DLPE LPPC" by the segment names of your membrane (e.g. "POPE"). If you can generate two atomselections corresponding to the two lipid layers, or you know the orientation of your lipid membrane (points are projected onto a plane and triangulated in 2D), you can skip some of these steps. The atomselectionssel1
and sel2
can
also be modified to use more than just the default phosphorous atoms,
to produce a more detailed surface.
source lipid_surface.tcl # first locate the two distinct layers of lipids (if necessary) set groups [lipid_pids "DLPE LPPC"] # next calculate the normal direction (if you don't know it) set normal [lipid_normal $groups] # now draw the lipid surfaces, removing triangles with edges # longer than 20A. set sel1 [atomselect top "index [lindex $groups 0]"] set sel2 [atomselect top "index [lindex $groups 1]"] lipid_clear graphics $graphicsmol color yellow lipid_surface $sel1 $normal 20 lipid_surface $sel2 [vecscale $normal -1] 20
Drawing the surface enclosed by a set of atoms.
You can draw a protein surface like this:source 3d_surface.tcl set sel [atomselect top "protein and name CA"] clear_surface graphics $3dgraphicsmol color green draw_surface $sel 10You may wish to modify the selection and the edge-length cutoff (currently 10) to produce surfaces with more or less detail. Keep in mind that this script becomes very slow as the number of atoms or the number of cut-off regions increases.