Difference between revisions of "FindSurfaceResidues"

From PyMOLWiki
Jump to navigation Jump to search
m (Protected "FindSurfaceResidues" ([edit=sysop] (indefinite) [move=sysop] (indefinite)))
(No difference)

Revision as of 09:55, 5 May 2011


Overview

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


Each time, the script will create a new selection called, 'exposedXYZ' 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()

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

	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)