Hi Jason,

Thanks a lot for this! I was able to code up a very simple solution to my problem using Tsjerk's suggestion.

In my problem I have a series of very similar structures, and I wanted to calculate the principal axes of a section of these structures and then align the principal axes of another section of the structure with those principal axes:

while i < len(eigVectors0001_1):
# the m matrix is a matrix of the principal axes of segment 1 of structure 1 m = array([eigVectors0001_1[1], eigVectors0001_2[1], eigVectors0001_3[1]])
        m = transpose(m)        

# The n matrix is a matrix of the principal axes of segment of structure i n = array([eigVectors0001_1[i], eigVectors0001_2[i], eigVectors0001_3[i]])
        n = transpose(n)        

        # r is the rotation matrix to rotate the n axes onto the m axes
        r = dot(m,inverse(n))

        # p is a matrix of the principal axes of segment 2 in structure i
p = array([eigVectors0002_1[i], eigVectors0002_2[i], eigVectors0002_3[i]])
        p = transpose(p)

        # q are the rotated principal axes of segment 2 in structure i
        q = dot(r,p)

        i+=1

Thanks again! and all the best,

--Buz


On Jan 29, 2008, at 8:31 AM, Jason Vertrees wrote:

Buz,

Tsjerk's answer is right on. This has already been implemented for PyMOL as a
plugin.  See Kabsch/optAlign from "cealign," here:
 http://www.pymolwiki.org/index.php/Kabsch
The code is open-source and so can be applied elsewhere.

Another simple method is to simply calculate the SVD of the correlation matrix. Then multiply the right and left singular vectors by each other -- that will yield the DxD rotation matrix (where D is the dimension of your
vector sets).  (This is how Kabsch/optAlign works.)

-- Jason

On Monday 28 January 2008 10:48:29 pm
[email protected] wrote:
------------------------------

Message: 3
Date: Sat, 26 Jan 2008 10:04:06 +0100
From: "Tsjerk Wassenaar" <[email protected]>
Subject: Re: [PyMOL] Algorithm to Rotate One Set of Vectors onto
        Another
To: "Buz Barstow" <[email protected]>
Cc: [email protected]
Message-ID:
        <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1

Hi Buz,

To my opinion, this is not the best place for your question. Pymol is
a molecular viewer...
But the question itself is basically trivial from the linear algebra
point of view.

If X is your source set of orthogonal vectors and Y is the target,
then you should have some sort of matrix R to satisfy

Y = RX

But, since it should only be a rotation, you'll first have to
transform X and Y to their orthonormal counterparts N and M:

M = RN

Then

MN^-1=RNN^-1

such that

R = MN^-1

If both sets are of equal dimensions (and full rank), there's an exact
solution. Otherwise, there's a bit more trouble...

So, taking your favourite language with the proper linear algebra
package, it comes down to:

normalize X -> N
normalize Y -> M
invert N
multiply M with the inverse of N

By the way, you're probably dealing with 3x3 matrices here (molecules
in cartesian space), in which case the routines are simple enough to
write down yourself (I believe these were even in the array.py I
posted like two days ago).

Hope it helps,

Tsjerk

On Jan 25, 2008 10:55 PM, Buz Barstow <[email protected]> wrote:
Dear All,

I'm looking for an algorithm that will allow me to derive a
transformation matrix that superimposes one set of orthogonal vectors
onto another set of orthogonal vectors, that I can then use to
transform another set of orthogonal vectors.

Thanks! and all the best,

--Buz



--

Jason Vertrees ([email protected])
Doctoral Candidate
Biophysical, Structural & Computational Biology Program
University of Texas Medical Branch
Galveston, Texas

http://www.best.utmb.edu/
http://www.pymolwiki.org/

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
PyMOL-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pymol-users


Reply via email to