|
|
| 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)
| |