Difference between revisions of "Talk:ColorByRMSD"

From PyMOLWiki
Jump to navigation Jump to search
(Created page with 'Shiven, Thanks for starting this! I took your code and then generalized and modified it. This is a step closer to being a general, working function. By that I mean, one shoul…')
 
(Clearing page for user comments...)
 
Line 1: Line 1:
Shiven,
 
  
Thanks for starting this!  I took your code and then generalized and modified it.  This is a step closer to being a general, working function.  By that I mean, one should simply be able to run:
 
<source lang="python">
 
run /path/to/colorByRMSD.py
 
fetch 1cll 1ggz, async=0
 
colorByRMSD 1cll, 1ggz, doAlign=True, doPretty=True
 
</source>
 
but for some reason I have to do:
 
<source lang="python">
 
run /path/to/colorByRMSD.py
 
fetch 1cll 1ggz, async=0
 
# coloring is messed up w/o this
 
alter *, b=0
 
colorByRMSD 1cll, 1ggz, doAlign=True, doPretty=True
 
</source>
 
 
Notes:
 
* I prefer to leave the users' objects untouched and work on copies.
 
* doAlign = True then align the originals; else leave the originals where they lie
 
* doPretty = True then color & highlight the alignments; else leave everything alone
 
* It's not ideal
 
* We need to remove the prints and other cruft before posting
 
 
Here's my most recent attempt:
 
<source lang="python">
 
"""
 
--- ColorByRMSD: RMSD based coloring ---
 
Author  : Shivender Shandilya, modified by Jason Vertrees
 
Program : ColByRMS
 
Date    : July 2009
 
Version : 0.0.2 (very very alpha!)
 
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 "cur_rms" as the new b-factor
 
def rmsUpdateB(objA, alnAri, objB, alnBri):
 
    # don't need the *10 -- PyMOL scales things for us.
 
    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):
 
    # create backup copies; names starting with _ (underscores) are
 
    # hidden by PyMOL
 
    tObj1, tObj2, aln = "__tempObj1", "__tempObj2", "__aln"
 
   
 
    if strTrue(doAlign):
 
        # perform the alignment
 
        print "Aligning"
 
        cmd.create( tObj1, objSel1 )
 
        cmd.create( tObj2, objSel2 )
 
        cmd.super( tObj1, tObj2, object=aln )
 
        # bug -- every other call undoes this...
 
        cmd.matrix_copy(tObj1, objSel1)
 
    else:
 
        print "Not aligning"
 
        # perform the alignment
 
        cmd.create( tObj1, objSel1 )
 
        cmd.create( tObj2, objSel2 )
 
        cmd.super( tObj1, tObj2, object=aln )
 
 
    print "Altering objects"
 
    cmd.alter( tObj1 + " or " + tObj2, "b=-10")
 
    cmd.alter( tObj1 + " or " + tObj2, "chain='A'")
 
    cmd.alter( tObj1 + " or " + tObj2, "segi='A'")
 
    # update PyMOL;
 
    # one of these should do the trick
 
    cmd.refresh(); cmd.rebuild(); cmd.sort(tObj1); cmd.sort(tObj2)
 
   
 
    #  Get the residue identifiers from the aln object
 
    stored.alnAres, stored.alnBres = [], []
 
    cmd.iterate(tObj1 + " and n. CA and " + aln, "stored.alnAres.append(resi)")
 
    cmd.iterate(tObj2 + " and n. CA and " + aln, "stored.alnBres.append(resi)")
 
 
    # reset 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 etc.; clean up
 
    cmd.delete(tObj1)
 
    cmd.delete(tObj2)
 
    cmd.delete(aln)
 
   
 
    # Assign the just stored NEW b-factors to the original object
 
    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)
 
 
    if doPretty!=None:
 
        # Showcase what we did
 
        cmd.orient()
 
        cmd.hide("all")
 
        cmd.show_as("cartoon", objSel1 + " or " + objSel2)
 
        print "\n"
 
        print "Colored by 'overall' RMSD...\n"
 
        cmd.spectrum("b", 'rainbow',  objSel1 + " or " + objSel2 )
 
 
cmd.extend("colorByRMSD", colorByRMSD)
 
</source>
 
[[User:Inchoate|Tree]] 02:55, 14 July 2009 (UTC)
 

Latest revision as of 21:59, 16 July 2009