Difference between revisions of "Radius of gyration"

From PyMOLWiki
Jump to navigation Jump to search
(categories)
(example)
Line 34: Line 34:
  
 
# vi:expandtab
 
# vi:expandtab
 +
</source>
 +
 +
=== Example ===
 +
 +
[[File:Radius_of_gyration_Example.png|300px|thumb|right]]
 +
 +
This example used the radius of gyration and the [[Center_Of_Mass|center of mass]] to display a semitransparent sphere.
 +
 +
<source lang="python">
 +
from pymol import cmd, stored, util
 +
import centerOfMass, rgyrate
 +
 +
cmd.set('sphere_transparency', 0.5)
 +
 +
cmd.fetch('2xwu')
 +
cmd.hide('everything')
 +
cmd.show('cartoon', 'chain A')
 +
 +
stored.gyradius = rgyrate.rgyrate('chain A and polymer')
 +
centerOfMass.com('chain A and polymer', object='com')
 +
cmd.alter('last com', 'vdw=stored.gyradius')
 +
 +
util.cbc()
 
</source>
 
</source>
  

Revision as of 14:56, 31 March 2011

This script does calcualate the radius of gyration of a molecule.

Thanks to Tsjerk Wassenaar for posting this script on the pymol-users mailing list!

from pymol import cmd
from itertools import izip
import math

def rgyrate(selection='(all)', quiet=1):
    '''
DESCRIPTION

    Radius of gyration

USAGE

    rgyrate [ selection ]
    '''
    quiet = int(quiet)
    model = cmd.get_model(selection).atom
    x = [i.coord for i in model]
    mass = [i.get_mass() for i in model]
    xm = [(m*i,m*j,m*k) for (i,j,k),m in izip(x,mass)]
    tmass = sum(mass)
    rr = sum(mi*i+mj*j+mk*k for (i,j,k),(mi,mj,mk) in izip(x,xm))
    mm = sum((sum(i)/tmass)**2 for i in izip(*xm))
    rg = math.sqrt(rr/tmass - mm)
    if not quiet:
        print "Radius of gyration: %.2f" % (rg)
    return rg

cmd.extend("rgyrate", rgyrate)

# vi:expandtab

Example

Radius of gyration Example.png

This example used the radius of gyration and the center of mass to display a semitransparent sphere.

from pymol import cmd, stored, util
import centerOfMass, rgyrate

cmd.set('sphere_transparency', 0.5)

cmd.fetch('2xwu')
cmd.hide('everything')
cmd.show('cartoon', 'chain A')

stored.gyradius = rgyrate.rgyrate('chain A and polymer')
centerOfMass.com('chain A and polymer', object='com')
cmd.alter('last com', 'vdw=stored.gyradius')

util.cbc()

See Also

Center Of Mass, COM