Surface

From PyMOLWiki
Revision as of 13:28, 4 December 2009 by Dehurt (talk | contribs) (→‎Tips)
Jump to navigation Jump to search

The surface representation of a protein, in PyMol, shows the "Connolly" surface or the surface that would be traced out by the surfaces of waters in contact with the protein at all possible positions.

Surface Representation Example


Enabling

To enable the surface representation do

show surface, SEL

for any proper selection SEL.

Settings

Examples

Transparency

To adjust the transparency of surfaces try:

set transparency, 0.5

Where 1.0 will be an invisible and 0.0 a completely solid surface.

Quality

To smooth your surface representation try:

set surface_quality, 1

or higher if you wish, though it will take longer and might look odd.

Probe Radius

To change the probe radius other than default 1.4 Å, you need to change the solvent radius, say, 1.6 Å:

set solvent_radius, 1.6

If the surface does not change correspondingly, use:

rebuild

Tips

Exporting Surface/Mesh Coordinates to File

PyMOL can export its coordinates as WRL wireframe model files for VRML input.

Older PyMOL Versions

# export the coordinates to povray
open("surface.inc","w").write(cmd.get_povray()[1])

Newer PyMOL Versions

# export the coordinates to .wrl file
save myscene.wrl

or

# export the coordinates to .obj file
save myscene.obj

Representation-independent Color Control

To color the surface a different color than the underlying cartoon or ligands, first duplicate the object and change the colors accordingly.


Displaying a protein as surface with a ligand as sticks

An easy way to do this is to create separate objects for each type of display.

1 Load your protein

2 Select the ligand

3 Create a separate object for the ligand

4 Remove ligand atoms from the protein

5 Display both objects separately

Example:

load prot.ent,protein
select ligand,resn FAD
create lig_sticks,ligand
remove ligand
show sticks,lig_sticks
show surface,protein


Even easier is to:

1 Load the protein

2 S (Show) > organic > stick

3 S (Show) > surface

Calculating a partial surface

There is, until now, an undocumented way to calculate a surface for only a part of an object without creating a new one:

flag ignore, not A/49-63/, set
delete indicate
show surface

If the surface was already computed, then you'll also need to issue the command:

rebuild

See Get_Area for more information on surface area calculations.

Displaying surface inside a molecule

As far as I can tell, setting ambient to zero alone doesn't quite do the job, since some triangles still get lit by the light source. The best combination I can find is:

set ambient=0
set direct=0.7
set reflect=0.0
set backface_cull=0

Which gives no shadows and only a few artifacts.

As an alternative, you might just consider showing the inside of the surface directly...that will create less visual artifacts, and so long as ambient and direct are sufficiently low, it will look reasonable in "ray".

util.ray_shadows("heavy")
set two_sided_lighting=1
set backface_cull=0

Creating a Closed Surface

To create what I'll call a closed surface (see images), you need to first make your atom selections, then create a new object for that selection then show the surface for that object. Here's an example.

 sel A, id 1-100
 create B, A
 show surface, B

Huge Surfaces

If your protein or complex is too large to render (ray runs out of RAM, for example) then check out the tip for huge surfaces.

Performance

To optimize performance and responsiveness, PyMOL tends to defer compute-intensive tasks until their results are actually needed. Thus,

cmd.show("surface")

doesn't actually show a surface, it only sets the surface visibility flag on the atoms present (for future reference). An actual surface won't be computed until PyMOL is asked to refresh or render the display. When running a script, you can force an update by calling:

cmd.refresh()

after cmd.show.