Example: find the mass-weighted RMS distance from the initial frame. This assumes a molecule and its timesteps have already been loaded (see the description of the Molecule class).
from AtomSel import AtomSel
from Molecule import *
# Get a reference to the first molecule.
m=moleculeList()[0]
# Select all atoms.
sel=AtomSel()
# We are comparing to the first frame.
sel.frame(0)
# Get the mass weights.
mass = sel.get('mass')
Here's another RMSD example that uses the {\tt align} method:
\begin{verbatim}
from AtomSel import AtomSel
from Molecule import Molecule
mol1=Molecule()
mol1.load('proteins/alanin.psf')
mol1.load('proteins/alanin.dcd')
n = mol1.numFrames()
sel=AtomSel('backbone')
# align all frames with the first frame, using the backbone atoms
for i in range(1,n):
sel.align(frame=i)
# align all frames with frame 10.
for i in range(1,n):
sel.align(ref=sel.frame(10), frame=i)
# Align residues 1-3 from frame 10 with frame 20, but use all backbone atoms
# to perform the fit.
resid123=AtomSel('resid 1 to 3')
sel.align(ref=sel.frame(20), frame=10, move=resid123)
# GOTCHA ALERT: sel.frame(10).align(ref=sel.frame(20)) does not work!!
# That's because sel.frame(10) overrides frame 20 in this case since they
# are applied to the same AtomSel instance. Either use the frame argument,
# as illustrated here, or create a new AtomSel instance for the reference.
# Perform a mass-weighted RMSD alignment and compute the mass-weighted
# RMS distance from the first frame.
w=sel.get('mass')
rms=[]
ref=AtomSel('backbone',frame=0)
for i in range(n):
rms.append(sel.frame(i).align(ref=ref, weight=w).rmsd(ref, weight=w))
# Initialize result list.
rms=[]
# Go!
for i in range(m.numFrames()):
rms.append(sel.rmsd(sel, frame=i, weight=mass))
Here's another RMSD example that uses the align method:
from AtomSel import AtomSel
from Molecule import Molecule
mol1=Molecule()
mol1.load('proteins/alanin.psf')
mol1.load('proteins/alanin.dcd')
n = mol1.numFrames()
sel=AtomSel('backbone')
# align all frames with the first frame, using the backbone atoms
for i in range(1,n):
sel.align(frame=i)
# align all frames with frame 10.
for i in range(1,n):
sel.align(ref=sel.frame(10), frame=i)
# Align residues 1-3 from frame 10 with frame 20, but use all backbone atoms
# to perform the fit.
resid123=AtomSel('resid 1 to 3')
sel.align(ref=sel.frame(20), frame=10, move=resid123)
# GOTCHA ALERT: sel.frame(10).align(ref=sel.frame(20)) does not work!!
# That's because sel.frame(10) overrides frame 20 in this case since they
# are applied to the same AtomSel instance. Either use the frame argument,
# as illustrated here, or create a new AtomSel instance for the reference.
# Perform a mass-weighted RMSD alignment and compute the mass-weighted
# RMS distance from the first frame.
w=sel.get('mass')
rms=[]
ref=AtomSel('backbone',frame=0)
for i in range(n):
rms.append(sel.frame(i).align(ref=ref, weight=w).rmsd(ref, weight=w))