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