Difference between revisions of "FindSurfaceResidues"

From PyMOLWiki
Jump to navigation Jump to search
Line 114: Line 114:
  
 
cmd.extend("findSurfaceResidues", findSurfaceResidues)
 
cmd.extend("findSurfaceResidues", findSurfaceResidues)
 +
</source>
 +
 +
= Another version =
 +
<gallery heights="240px" widths="340px">
 +
Image:Surfaceatoms.png|Another version, to show the same thing. The part of the protein which is not surface exposed is in cartoon. The white is the surface "byres" exposed residues shown in sticks. The orange is the atoms which is exposed.
 +
</gallery>
 +
 +
<source lang="python">
 +
from pymol import cmd, stored
 +
 +
def surfaceatoms(molecule="NIL",show=True, verbose=True, cutoff=2.5):
 +
"""
 +
surfaceatoms
 +
finds those residues on the surface of a protein
 +
that have at least 'cutoff' exposed A**2 surface area.
 +
PARAMS
 +
molecule (string)
 +
the object or selection in which to find
 +
exposed residues
 +
DEFAULT: (last molecule in pymol)
 +
cutoff (float)
 +
your cutoff of what is exposed or not.
 +
DEFAULT: 2.5 Ang**2
 +
RETURNS
 +
(list: (chain, resv ) )
 +
A Python list of residue numbers corresponding
 +
to those residues w/more exposure than the cutoff.
 +
"""
 +
if molecule=="NIL":
 +
assert len(cmd.get_names())!=0, "Did you forget to load a molecule? There are no objects in pymol."
 +
molecule=cmd.get_names()[-1]
 +
tmpObj="__tmp"
 +
cmd.create(tmpObj, "(%s and polymer) and not resn HOH"%molecule)
 +
if verbose!=False:
 +
print "WARNING: I'm setting dot_solvent.  You may not care for this."
 +
cmd.set("dot_solvent")
 +
cmd.get_area(selection=tmpObj, load_b=1)
 +
# threshold on what one considers an "exposed" atom (in A**2):
 +
cmd.remove( tmpObj + " and b < " + str(cutoff) )
 +
stored.tmp_dict = {}
 +
cmd.iterate(tmpObj, "stored.tmp_dict[(chain,resv)]=1")
 +
exposed = stored.tmp_dict.keys()
 +
exposed.sort()
 +
 +
selName = "%s_atoms"%molecule
 +
cmd.select(selName, molecule + " in " + tmpObj )
 +
if verbose!=False:
 +
print "Exposed residues are selected in: " + selName
 +
selNameRes = "%s_resi"%molecule
 +
cmd.select(selNameRes, "byres " + selName )
 +
 +
if show!=False:
 +
cmd.hide("everything", molecule)
 +
cmd.show("cartoon", "%s and not %s and not resn HOH"%(molecule,selNameRes))
 +
cmd.show("sticks", "%s"%selNameRes)
 +
cmd.util.cbaw(selNameRes)
 +
cmd.disable(selNameRes)
 +
cmd.alter('%s'%(selName),'vdw=0.5')
 +
cmd.show("spheres", "%s"%selName)
 +
cmd.util.cbao(selName)
 +
cmd.disable(selName)
 +
 +
cmd.delete(tmpObj)
 +
print(exposed)
 +
return(exposed)
 +
cmd.extend("surfaceatoms", surfaceatoms)
 
</source>
 
</source>
  

Revision as of 09:59, 24 August 2011


Overview

This script will select (and color if requested) surface residues and atoms on an object or selection. See the options below.


Each time, the script will create two new selections called, 'exposed_res_XYZ' and 'exposed_atm_XYZ' where XYZ is some random number. This is done so that no other selections/objects are overwritten.

Usage

findSurfaceResidues [objSel=(all)[, cutoff=2.5[, doShow=False[, verbose=False ]]]]

The parameters are:

objSel

The object or selection for which to find exposed residues;
DEFAULT = (all)

cutoff

The cutoff in square Angstroms that defines exposed or not. Those residues with > cutoff Ang^2 exposed will be considered exposed;
DEFAULT = 2.5 Ang^2

doShow

Change the visualization to highlight the exposed residues vs interior
DEFAULT = False/Blank

verbose

Level of verbosity.
DEFAULT = False/Blank

Examples

# make sure you download and run the code below, before trying these examples.
load $TUT/1hpv.pdb
findSurfaceResidues
# now show the exposed
findSurface residues doShow=True

# watch how the visualization changes:
findSurfaceResidues doShow=True, cutoff=0.5
findSurfaceResidues doShow=True, cutoff=1.0
findSurfaceResidues doShow=True, cutoff=1.5
findSurfaceResidues doShow=True, cutoff=2.0
findSurfaceResidues doShow=True, cutoff=2.5
findSurfaceResidues doShow=True, cutoff=3.0

The Code

# -*- coding: utf-8 -*-
import pymol
from pymol import cmd
import random

def findSurfaceResidues(objSel="(all)", cutoff=2.5, doShow=False, verbose=False):
	"""
	findSurfaceResidues
		finds those residues on the surface of a protein
		that have at least 'cutoff' exposed A**2 surface area.

	PARAMS
		objSel (string)
			the object or selection in which to find
			exposed residues
			DEFAULT: (all)

		cutoff (float)
			your cutoff of what is exposed or not. 
			DEFAULT: 2.5 Ang**2

		asSel (boolean)
			make a selection out of the residues found

	RETURNS
		(list: (chain, resv ) )
			A Python list of residue numbers corresponding
			to those residues w/more exposure than the cutoff.

	"""
	tmpObj="__tmp"
	cmd.create( tmpObj, objSel + " and polymer");
	if verbose!=False:
		print "WARNING: I'm setting dot_solvent.  You may not care for this."
	cmd.set("dot_solvent");
	cmd.get_area(selection=tmpObj, load_b=1)

	# threshold on what one considers an "exposed" atom (in A**2):
	cmd.remove( tmpObj + " and b < " + str(cutoff) )

	stored.tmp_dict = {}
	cmd.iterate(tmpObj, "stored.tmp_dict[(chain,resv)]=1")
	exposed = stored.tmp_dict.keys()
	exposed.sort()

        randstr = str(random.randint(0,10000))
	selName = "exposed_atm_" + randstr
	if verbose!=False:
		print "Exposed residues are selected in: " + selName
	cmd.select(selName, objSel + " in " + tmpObj ) 
        selNameRes = "exposed_res_" + randstr
        cmd.select(selNameRes, "byres " + selName )


	if doShow!=False:
		cmd.show_as("spheres", objSel + " and poly")
		cmd.color("white", objSel)
		cmd.color("red", selName)

	cmd.delete(tmpObj)

	return exposed


cmd.extend("findSurfaceResidues", findSurfaceResidues)

Another version

from pymol import cmd, stored
 
def surfaceatoms(molecule="NIL",show=True, verbose=True, cutoff=2.5):
	"""
	surfaceatoms
		finds those residues on the surface of a protein
		that have at least 'cutoff' exposed A**2 surface area.
 	PARAMS
		molecule (string)
			the object or selection in which to find
			exposed residues
			DEFAULT: (last molecule in pymol)
 		cutoff (float)
			your cutoff of what is exposed or not. 
			DEFAULT: 2.5 Ang**2
	RETURNS
		(list: (chain, resv ) )
			A Python list of residue numbers corresponding
			to those residues w/more exposure than the cutoff.
	"""
	if molecule=="NIL":
		assert len(cmd.get_names())!=0, "Did you forget to load a molecule? There are no objects in pymol."
		molecule=cmd.get_names()[-1]
	tmpObj="__tmp"
	cmd.create(tmpObj, "(%s and polymer) and not resn HOH"%molecule)
	if verbose!=False:
		print "WARNING: I'm setting dot_solvent.  You may not care for this."
	cmd.set("dot_solvent")
	cmd.get_area(selection=tmpObj, load_b=1)
 	# threshold on what one considers an "exposed" atom (in A**2):
	cmd.remove( tmpObj + " and b < " + str(cutoff) )
 	stored.tmp_dict = {}
	cmd.iterate(tmpObj, "stored.tmp_dict[(chain,resv)]=1")
	exposed = stored.tmp_dict.keys()
	exposed.sort()
 
	selName = "%s_atoms"%molecule
	cmd.select(selName, molecule + " in " + tmpObj ) 
	if verbose!=False:
		print "Exposed residues are selected in: " + selName
	selNameRes = "%s_resi"%molecule
	cmd.select(selNameRes, "byres " + selName )
 
 	if show!=False:
		cmd.hide("everything", molecule)
		cmd.show("cartoon", "%s and not %s and not resn HOH"%(molecule,selNameRes))
		cmd.show("sticks", "%s"%selNameRes)
		cmd.util.cbaw(selNameRes)
		cmd.disable(selNameRes)
		cmd.alter('%s'%(selName),'vdw=0.5')
		cmd.show("spheres", "%s"%selName)
		cmd.util.cbao(selName)
		cmd.disable(selName)

 	cmd.delete(tmpObj)
	print(exposed)
 	return(exposed)
cmd.extend("surfaceatoms", surfaceatoms)