Here's a longer script which you might find useful. The problem is
to compute the RMSD between each timestep of the simulation and the
first frame. Usually in a simulation there is no initial global
velocity, so the center of mass doesn't move, but because of angular
rotations and because of numerical imprecisions that slowly build up,
the script aligns the molecule before computing its RMSD.
# Prints the RMSD of the protein atoms between each timestep
# and the first timestep for the given molecule id (default: top)
proc print_rmsd_through_time {{mol top}} {
# use frame 0 for the reference
set reference [atomselect $mol "protein" frame 0]
# the frame being compared
set compare [atomselect $mol "protein"]
set num_steps [molinfo $mol get numframes]
for {set frame 0} {$frame < $num_steps} {incr frame} {
# get the correct frame
$compare frame $frame
# compute the transformation
set trans_mat [measure fit $compare $reference]
# do the alignment
$compare move $trans_mat
# compute the RMSD
set rmsd [measure rmsd $compare $reference]
# print the RMSD
puts "RMSD of $frame is $rmsd"
}
}
To use this, load a molecule with an animation
(for example, $VMDDIR/proteins/alanin.DCD from the VMD\
distribution).
Then run print_rmsd_through_time. Example output is shown here:
vmd > print_rmsd_through_time
RMSD of 0 is 0.000000
RMSD of 1 is 1.060704
RMSD of 2 is 0.977208
RMSD of 3 is 0.881330
RMSD of 4 is 0.795466
RMSD of 5 is 0.676938
RMSD of 6 is 0.563725
RMSD of 7 is 0.423108
RMSD of 8 is 0.335384
RMSD of 9 is 0.488800
RMSD of 10 is 0.675662
RMSD of 11 is 0.749352
[...]
If you wanted you could do all sorts of things, like graph this value
through time.