If you want to transform a map, you can do it thusly:
(transform-map imol rotation-matrix trans point radius)
where:
rotation-matrix is a 9-membered list of numbers for an orthogonal rotation matrix.
trans is a 3-membered list of numbers (distances in Ångstöms).
point is a 3-membered list of numbers (centre point in Ångstöms).
radius is a single number (also in Ångstöms).
This applies the rotation rotation-matrix and a translation trans to a map fragment, so that when the transformation is applied the centre of the new map is at point.
Example usage:
(transform-map 2 '(1 0 0 0 1 0 0 0 1) '(0 0 1) (rotation-centre) 10)
which transforms map number 2 by a translation of 1Å along the Z axis, centred at the screen centre for 10Å around that centre.
Here's a more real-world example:
Let's say we want to tranform the density over the “B” molecule to a position over the “A” molecule. First we do a LSQ transformation to get the rotation and translation that moves the “B” coordinates over the “A” coordinates:
In the terminal output we get:
| 0.9707, 0.2351, 0.05033| | -0.04676, 0.39, -0.9196| | -0.2358, 0.8903, 0.3896| ( -33.34, 21.14, 18.82)
The centre of the “A” molecule is at (58.456, 5.65, 11.108). So we do:
(transform-map 3 (list 0.9707 0.2351 0.05033 -0.04676 0.39 -0.9196
-0.2358 0.8903 0.3896) (list -33.34 21.14 18.82) (list 58.456 5.65
11.108) 8)
Which creates a map over the middle of the “A” molecule. Note that using a too high radius can cause overlap problems, so try with a small radius (e.g. 5.0) if the resulting map looks problematic.
Alternatively, instead of typing the whole matrix, you can use a
coordinates least-squares fit to generate the matrix for you.
(transform-map-using-lsq-matrix) does just that.
Heres how to use it:
(transform-map-using-lsq-matrix imol-ref ref-chain
ref-resno-start ref-resno-end imol-mov mov-chain mov-resno-start
mov-resno-end imol-map about-pt radius)
Hopefully the arguments are self explanatory (ref refers
to the reference molecule, of course and about-pt is a
3-number list such as is returned by (rotation-centre)).
We can now export that map, if we want.