Difference between revisions of "ColorByRMSD"

From PyMOLWiki
Jump to navigation Jump to search
m (→‎Code: Formatting - pesky Tabs/Spaces !)
(rewrite of script and moved script to github)
 
Line 1: Line 1:
 +
{{Infobox script-repo
 +
|type      = Python Module
 +
|filename  = colorbyrmsd.py
 +
|author    = [[User:Shiven|Shivender Shandilya]], [[User:Inchoate|Jason Vertrees]], [[User:Speleo3|Thomas Holder]]
 +
|license  = BSD-2-Clause
 +
}}
 +
 
== Introduction ==
 
== Introduction ==
This script allows you to color two structures by Root Mean Square Deviation (RMSD), as calculated by PyMol's internal [[Rms_Cur]] command. The pairwise, C-alpha, RMSD is calculated only between those residues which are first used by PyMol's internal [[Super]] command to superpose the two structures. The RMSD values are stored as B-factors of these residues, which are colored by a ''rainbow'' color spectrum, with blue specifying the minimum pairwise RMSD and red indicating the maximum. Residues ''NOT'' used by [[Super]] for superposition, and hence for RMSD calculation, are colored ''white''.
+
This script allows you to color two structures by Root Mean Square Deviation (RMSD).
 +
The distances between aligned C-alpha atom pairs are stored as B-factors of these residues, which are colored by a color spectrum, with blue specifying the minimum pairwise RMSD and red indicating the maximum.
 +
Unaligned residues are colored gray.
  
== Code ==
+
== Usage ==
Please use this script with the option '''doPretty=T''' to gain the most benefit. Additionally, setting [[Cartoon]] representation to ''loop'', with the command: <source lang="python"> cartoon loop </source> may help ease comparisons. Do keep in mind, all original B-factors values are overwritten!
 
  
==== Examples ====
+
colorbyrmsd mobile, target [, doAlign [, doPretty [, guide [, method ]]]]
 +
 
 +
== Arguments ==
 +
 
 +
* '''mobile''' = string: atom selection for mobile atoms
 +
* '''target''' = string: atom selection for target atoms
 +
* '''doAlign''' = 0 or 1: Superpose selections before calculating distances {default: 1}
 +
* '''doPretty''' = 0 or 1: Show nice representation and colors {default: 1}
 +
* '''guide''' = 0 or 1: Only use C-alpha atoms {default: 1}
 +
* '''method''' = align or super: Method to match atoms {default: super}
 +
 
 +
== Examples ==
 
<source lang="python">
 
<source lang="python">
 
# example #1
 
# example #1
colorByRMSD 1cbs, 1hmt, doAlign=T, doPretty=T
+
colorbyrmsd 1cbs, 1hmt, doAlign=1, doPretty=1
 
# example #2
 
# example #2
colorByRMSD 1eaz, 1fao, doAlign=T, doPretty=T
+
colorbyrmsd 1eaz, 1fao, doAlign=1, doPretty=1
 
</source>
 
</source>
  
Line 17: Line 36:
 
Image:ColorByRMSD_1eaz_1fao.png|1eaz and 1fao aligned and colored by RMSD.  Dark blue is good alignment, higher deviations are in orange/yellow/red. Residues not used for alignment are colored white.
 
Image:ColorByRMSD_1eaz_1fao.png|1eaz and 1fao aligned and colored by RMSD.  Dark blue is good alignment, higher deviations are in orange/yellow/red. Residues not used for alignment are colored white.
 
</gallery>
 
</gallery>
 
<source lang="python">
 
"""
 
--- ColorByRMSD: RMSD based coloring ---
 
Authors : Shivender Shandilya; Jason Vertrees
 
Program : ColorByRMSD
 
Date    : July 2009
 
Version : 0.1.1
 
Mail    : firstname.lastname@umassmed.edu
 
 
Keywords: color rms rmsd colorbyrms colorbyrmsd
 
----------------------------------------------------------------------
 
Reference:
 
This email from Warren - http://www.mail-archive.com/pymol-users@lists.sourceforge.net/msg07078.html
 
Literature:
 
DeLano, W.L. The PyMOL Molecular Graphics System (2002) DeLano Scientific, San Carlos, CA, USA. http://www.pymol.org
 
----------------------------------------------------------------------
 
"""
 
 
import pymol
 
import cmd
 
from pymol import stored
 
 
def strTrue(p):
 
    return p[0].upper() == "T"
 
 
# The main function that assigns current RMSD as the new B-factor
 
def rmsUpdateB(objA, alnAri, objB, alnBri):
 
    for x in range(len(alnAri)):
 
        s1 = objA + " and n. CA and i. " + alnAri[x]
 
        s2 = objB + " and n. CA and i. " + alnBri[x]
 
        rmsd = cmd.rms_cur(s1, s2, matchmaker=4)
 
        cmd.alter( s1, "b = " + str(rmsd))
 
        cmd.alter( s2, "b = " + str(rmsd))
 
    cmd.sort(objA); cmd.sort(objB)
 
 
 
def colorByRMSD(objSel1, objSel2, doAlign="True", doPretty=None):
 
    """
 
    colorByRMSD -- align two structures and show the structural deviations
 
                  in color to more easily see variable regions.
 
 
    PARAMS
 
 
        objSel1 (valid PyMOL object or selection)
 
            The first object to align. 
 
 
        objSel2 (valid PyMOL object or selection)
 
            The second object to align
 
 
        doAlign (boolean, either True or False)
 
            Should this script align your proteins or just leave them as is?
 
            If doAlign=True then your original proteins are aligned.
 
            If False, then they are not. Regardless, the B-factors are changed.
 
            DEFAULT: True
 
 
        doPretty (boolean, either True or False)
 
            If doPretty=True then a simple representation is created to
 
            highlight the differences.  If False, then no changes are made.
 
            DEFAULT: False
 
 
    RETURNS
 
        None.
 
 
    SIDE-EFFECTS
 
        Modifies the B-factor columns in your original structures.
 
 
    """
 
    # First create backup copies; names starting with __ (underscores) are
 
    # normally hidden by PyMOL
 
    tObj1, tObj2, aln = "__tempObj1", "__tempObj2", "__aln"
 
 
    if strTrue(doAlign):
 
        # perform the alignment
 
        cmd.create( tObj1, objSel1 )
 
        cmd.create( tObj2, objSel2 )
 
        cmd.super( tObj1, tObj2, object=aln )
 
        cmd.matrix_copy(tObj1, objSel1)
 
    else:
 
        # perform the alignment
 
        cmd.create( tObj1, objSel1 )
 
        cmd.create( tObj2, objSel2 )
 
        cmd.super( tObj1, tObj2, object=aln )
 
 
    # Modify the B-factor columns of the original objects,
 
    # in order to identify the residues NOT used for alignment, later on
 
    cmd.alter( objSel1 + " or " + objSel2, "b=-10")
 
    cmd.alter( tObj1 + " or " + tObj2, "chain='A'")
 
    cmd.alter( tObj1 + " or " + tObj2, "segi='A'")
 
 
    # Update pymol internal representations; one of these should do the trick
 
    cmd.refresh(); cmd.rebuild(); cmd.sort(tObj1); cmd.sort(tObj2)
 
 
    #  Create lists for storage
 
    stored.alnAres, stored.alnBres = [], []
 
 
    #  Get the residue identifiers from the alignment object "aln"
 
    cmd.iterate(tObj1 + " and n. CA and " + aln, "stored.alnAres.append(resi)")
 
    cmd.iterate(tObj2 + " and n. CA and " + aln, "stored.alnBres.append(resi)")
 
 
    # Change the B-factors for EACH object
 
    rmsUpdateB(tObj1,stored.alnAres,tObj2,stored.alnBres)
 
 
    # Store the NEW B-factors
 
    stored.alnAnb, stored.alnBnb = [], []
 
    cmd.iterate(tObj1 + " and n. CA and " + aln, "stored.alnAnb.append(b)" )
 
    cmd.iterate(tObj2 + " and n. CA and " + aln, "stored.alnBnb.append(b)" )
 
 
    # Get rid of all intermediate objects and clean up
 
    cmd.delete(tObj1)
 
    cmd.delete(tObj2)
 
    cmd.delete(aln)
 
 
    # Assign the just stored NEW B-factors to the original objects
 
    for x in range(len(stored.alnAres)):
 
        cmd.alter(objSel1 + " and n. CA and i. " + str(stored.alnAres[x]), "b = " + str(stored.alnAnb[x]))
 
    for x in range(len(stored.alnBres)):
 
        cmd.alter(objSel2 + " and n. CA and i. " + str(stored.alnBres[x]), "b = " + str(stored.alnBnb[x]))
 
    cmd.rebuild(); cmd.refresh(); cmd.sort(objSel1); cmd.sort(objSel2)
 
 
    # Provide some useful information
 
    stored.allRMSDval = []
 
    stored.allRMSDval = stored.alnAnb + stored.alnBnb
 
    print "\nColorByRMSD completed successfully."
 
    print "The MINIMUM RMSD value is: "+str(min(stored.allRMSDval))
 
    print "The MAXIMUM RMSD value is: "+str(max(stored.allRMSDval))
 
 
    if doPretty!=None:
 
        # Showcase what we did
 
        cmd.orient()
 
        cmd.hide("all")
 
        cmd.show_as("cartoon", objSel1 + " or " + objSel2)
 
        # Select the residues not used for alignment; they still have their B-factors as "-10"
 
        cmd.select("notUsedForAln", "b < 0")
 
        # White-wash the residues not used for alignment
 
        cmd.color("white", "notUsedForAln")
 
        # Color the residues used for alignment according to their B-factors (RMSD values)
 
        cmd.spectrum("b", 'rainbow',  "((" + objSel1 + " and n. CA) or (n. CA and " + objSel2 +" )) and not notUsedForAln")
 
        # Delete the selection of atoms not used for alignment
 
        # If you would like to keep this selection intact,
 
        # just comment "cmd.delete" line and
 
        # uncomment the "cmd.disable" line below.
 
        cmd.delete("notUsedForAln")
 
        # cmd.disable("notUsedForAln")
 
 
        print "\nObjects are now colored by C-alpha RMS deviation."
 
        print "All residues with RMSD values greater than the maximum are colored white..."
 
 
cmd.extend("colorByRMSD", colorByRMSD)
 
</source>
 
  
 
[[Category:Script_Library]]
 
[[Category:Script_Library]]
 
[[Category:Structural_Biology_Scripts]]
 
[[Category:Structural_Biology_Scripts]]
 +
[[Category:Pymol-script-repo]]

Latest revision as of 08:59, 16 March 2012

Type Python Module
Download colorbyrmsd.py
Author(s) Shivender Shandilya, Jason Vertrees, Thomas Holder
License BSD-2-Clause
This code has been put under version control in the project Pymol-script-repo

Introduction

This script allows you to color two structures by Root Mean Square Deviation (RMSD). The distances between aligned C-alpha atom pairs are stored as B-factors of these residues, which are colored by a color spectrum, with blue specifying the minimum pairwise RMSD and red indicating the maximum. Unaligned residues are colored gray.

Usage

colorbyrmsd mobile, target [, doAlign [, doPretty [, guide [, method ]]]]

Arguments

  • mobile = string: atom selection for mobile atoms
  • target = string: atom selection for target atoms
  • doAlign = 0 or 1: Superpose selections before calculating distances {default: 1}
  • doPretty = 0 or 1: Show nice representation and colors {default: 1}
  • guide = 0 or 1: Only use C-alpha atoms {default: 1}
  • method = align or super: Method to match atoms {default: super}

Examples

# example #1
colorbyrmsd 1cbs, 1hmt, doAlign=1, doPretty=1
# example #2
colorbyrmsd 1eaz, 1fao, doAlign=1, doPretty=1