From: Norbert Straeter (strater_at_bbz.uni-leipzig.de)
Date: Wed Mar 22 2023 - 03:35:17 CDT

Dear Sangita,

if you have a rotation matrix and a translation vector that describes
the rotation and translation of an object in 3d space, than you can
transform this to a screw operation. A rotation axis is not sufficient.
What you need is the vector describing the orientation of the screw axis
(direction cosines, three values), a point on the axis (x,y,z
coordinates) and the translation along the axis (one scalar value). This
information can be used to plot the screw axis in space, which might
describe the rotation of domains or subunits or the symmetry axes of
homooligomers. Usually these have small translation parts, i.e. may be
approximated as pure rotations around an axis.

Some programs that superpose proteins output the rotation vector and
rotation angle, but I know two programs that do the complete conversion
(including the translation). One of them is DynDom, written to analyse
domain movements. Search for DynDom and you will find it including the
Fortran source code from which you can probably extract the necessary
functions to do the conversion. The second program is probably the
simpler solution, as it was written to only do the conversion specified
above. I received it about 25 years ago via email when I was a postdoc,
following a question similar to yours. Unfortunately I do not have the
email anymore, so I do not know who the author of this program is
(probably "WSB", see below). It is called matcon and is also written in
Fortran. I recently compiled it under Windows ubuntu using the gnu
gfortran compiler and after some minor corrections of the source code,
it still works. The conversion involves eigenvalue decomposition of the
matrix and I vaguely remember that this can fail for certain symmetric
situations such as perfect closed symmetry in homooligomers.

There may be other programs or libraries around that do the same job,
perhaps even in tcl. Depending on what you want to do exactly, you may
try to port the fortran routines to tcl or python, perhaps you can
replace some subroutines by functions in python numpy or scipy. A
simpler way that I usually choose is to write the matrix and rotation
vector to a file via (vmd) tcl, call matcon via tcl to convert the RT
matrix and read the desired information from the log file back in to the
tcl script for display. This would be the option if you need this
conversion for many structures along the trajectory. If you only need it
for a few calculations, just use matcon interactively to copy/paste the
matrix and rotation vector. Following is the head of the matcon source
code specifying some literature to read (to write your own version :-))
and an example output of the program.

If you are interested in the matcon fortran program write to me via my
direct email.

Best regards,

Norbert

C       MATCON: PROGRAM TO DECOMPOSE LINEAR TRANSFORM INTO
C       ORTHOGONAL AND NON-ORTHOGONAL PARTS, THEN CONVERT
C       FORMER INTO EULER ROTATIONS, POLAR ROTATIONS, AND
C       AN EQUIVALENT SCREW OPERATION.
C
C       === This version:
C               1) assumes that the matrix on the file is *NOT* transposed.
C               2) produces Euler angles in both R&B and PROTEIN
conventions.
C                                       WSB JUL-87
C
C       THE PROGRAM WILL ALSO GENERATE A ROTATION MATRIX TO MAKE
C       THE EQUIVALENT SCREW AXIS COINCIDENT WITH THE Z-COORDINATE
C       AXIS, IF REQUESTED.
C
C       REFER TO:
C               M. ROSSMANN AND D. BLOW, ACTA CRYST. 15, P. 24 (1962),
C                       FOR DEFINITIONS OF ROTATION ANGLES.
C               R. DIAMOND, ACTA CRYST. A32, P. 1 (1976),
C                       FOR PROCEDURE TO RESOLVE ORTHOGNAL FACTOR.
C               J. COX, J. MOL. BIOL. 28, P. 152 (1967),
C                       FOR PROCEDURE TO OBTAIN EQUIVALENT SCREW OP.
C

  ***MATCON: convert rotation matrix***
  Line 1 of rotation matrix:
  Line 2 of rotation matrix:
  Line 3 of rotation matrix:
  Translation vector:
Current matrix and vector (NOT transposed):
             -0.34523  -0.73013   0.58969
              0.12035   0.58869   0.79935
             -0.93077   0.34693  -0.11536
             20.65764  47.75508 -83.17358
                DETERMINANT =  1.00000
Current matrix and vector (NOT transposed):
             -0.34523   0.12035  -0.93077
             -0.73013   0.58869   0.34693
              0.58969   0.79935  -0.11536
Equivalent Euler angles (THETA1,THETA2,THETA3)
       Rossmann & Blow convention:           143.583 96.624   -69.558
       PROTEIN convention:                  -110.442    96.624 36.417
Equivalent Huber angles (PSI,THETA,PHI):   -11.554    53.068 -101.069
  a1,a2,alfa,b1,b2,beta:    0.1146E+01  -0.3411E+00  -0.3361E+01
                            0.1146E+01  -0.6098E+00  -0.1880E+01
Equivalent Polar angles (PSI,PHI,CHI or KAPPA):   147.643 61.989   115.846
  i.e., a CHI rotation around the unit vector:      0.25135 -0.84473 
-0.47250
The screw axis passes through the point:  -19.28110   22.13858 -49.83575
The translation along this screw axis is    4.15187 Angstroms
0CHECK: APPLY D TO O AND SUBTRACT S
             75.32047  61.08323 -69.13616
Matrix to rotate screw axis onto Z axis:
             -0.13476   0.45288  -0.88133
              0.95847   0.28520   0.00000
              0.25135  -0.84473  -0.47250
                DETERMINANT =  1.00000
0CHECK: APPLY ROTATION TO R
             -0.00000   0.00000   1.00000
  LENGTH =     1.000

Am 21.03.2023 um 19:05 schrieb Sangita Kachhap:

> Hi,
>
> I have MD trajectories of a protein system having 4 chains, and I have
> to calculate the rotation angle and axis of each chain.
> Through VMD, I have calculated a transformation (4X4) matrix, having
> 3X3 rotation matrix and 1 translation matrix. But, I have no idea how
> to get rotation angle and axis from transformation matrix
>
> It would be great if anyone could help me.
> --- Sangita