The best-fit alignment is done in two steps. The first is to compute the matrix transformation that takes one set of coordinates onto the other. This is done with the measure fit command. Assuming the same selections as before:
set transformation_matrix [measure fit $sel1 $sel2] Info) {0.971188 0.00716391 0.238206 -13.2877} {0.0188176 0.994122 -0.106619 3.25415} {-0.23757 0.108029 0.965345 -2.97617} {0.0 0.0 0.0 1.0}As with the RMSD calculation, you could also add an optional weight <keyword> term on the end.
The next step is to apply the matrix to a set of atoms using the move command. So far you have two coordinate sets. You might think you could do something like $sel1 move $transformation_matrix to apply the matrix to all the atoms of that selection. You could, but that's not the right selection.
The thing to recall is that $sel1 is the selection for the backbone atoms. You really want to move the whole fragment to which it is attached, or even the whole molecule. (This is where the discussion earlier comes into play.) So you need to make a third selection containing all the atoms which are to be moved, and apply the transformation to those atoms.
# molecule 0 is the same molecule used for $sel1 set move_sel [atomselect 0 "all"] $move_sel move $transformation_matrix
As a more complicated example, say you want to align all of molecule 1 with molecule 9 using only the backbone atoms of residues 4 to 10 in both systems. Here's how:
# compute the transformation matrix set reference_sel [atomselect 9 "backbone and resid 4 to 10"] set comparison_sel [atomselect 1 "backbone and resid 4 to 10"] set transformation_mat [measure fit $comparison_sel $reference_sel] # apply it to all of the molecule 1 set move_sel [atomselect 1 "all"] $move_sel move $transformation_mat