Navigation:

Rotating (& transferring) data to and from a local-axis frame

In this tutorial we will solve the following problems:

  1. Rotate data (multipoles) computed in the global frame into a local-axis frame.
  2. Transfer this local-axis frame data from one conformer onto another conformer.
  3. Rotate the new local-axis frame data back into the global frame.

These are the kinds of steps you would encounter when transferring data from one molecule onto another.

Warning

This tutorial is still in development and so will be sketchy! Also, not all data may be posted.

Important

Here we will focus on multipoles, but the same or similar process can be performed for polarizabilities. The only difference is that Orient defines the axis frame for polarizabilities using the EDIT block. More on this later.

Rotations from the global to the local frame

This is the first step in any transferrability study. Data like multipoles will be computed in the global molecular frame by codes like CamCASP. Say we now want to transfer some or all of the multipoles from one molecule to another, or from one conformer to another, we will first need to express these multipoles in a local axis frame, and then move these to the other molecule/conformer.

This can be done with Orient in the following steps:

  1. First read in the multipoles in the MOLECULES block.
  2. Second, also within the same MOLECULES block, redefine the axis frame and END the block.
  3. Display the multipoles in the local axis frame using the SHOW command.

Here's a sample command file:

RDX_rotate_mom.ornt

UNITS BOHR

Parameters
      Sites     28 polarizable     26
      S-functions 50000
      Alphas 50000
      Parameter-sets 50000
      Pairs 100000
End

Types
      C1         Z     6
      C2         Z     6
      C3         Z     6
      N1         Z     7
      N2         Z     7
      N3         Z     7
      N4         Z     7
      N5         Z     7
      N6         Z     7
      O1         Z     8
      O2         Z     8
      O3         Z     8
      O4         Z     8
      O5         Z     8
      O6         Z     8
      H1         Z     1
      H2         Z     1
      H3         Z     1
      H4         Z     1
      H5         Z     1
      H6         Z     1
End

Molecule  RDX at  0.0 0.0 0.0
  ! Units BOHR
    #include ../RDX_1/OUT/RDX_ISA-GRID.mom
    #include ./RDX_rotate_multipole.axes
End

Show RDX data

Finish

Files:

RDX_rotate_multipole.axes (fragment)

! Axes defns for rotating multipoles
! This differs from the axes defns used in the EDIT block.
  Axes   z from C1 between H1 and H2  x from C1 to N2 rotate for C1
  Axes   z from C2 between H3 and H4  x from C2 to N1 rotate for C2
  Axes   z from C3 between H5 and H6  x from C3 to N3 rotate for C3
  Axes   z from    N1  to N4  x from N1 to C1 rotate for N1
  Axes   z from    N2  to N5  x from N2 to C3 rotate for N2
  Axes   z from    N3  to N6  x from N3 to C2 rotate for N3
  Axes   z from    C1  to H1  x from H1 to H2 rotate for H1
  ...
  ...

The important command is **rotate** which tells Orient to rotate the multipoles into these local frames.

At the end of the Orient output will be the multipoles expressed in the local axis frame. I have copied these into the following file:

RDX_1_ISA-GRID_localframe.mom (fragment)

! RDX_1 : multipoles in the local axis frame of each atom
!
  C1     0.00000000     0.00000000     0.00000000     Type   C1      Rank   4
     0.1819210
    -0.1479541   0.0011126   0.0184982
    -0.0283770  -0.0008840  -0.0309435   0.0959410  -0.0057267
    -0.0577967   0.0054551   0.2030155   0.0858652  -0.0026310
                -0.0074484  -0.0674943
    -0.6357720  -0.0033829  -0.1378601  -0.4442025   0.0249641
                -0.0007399   0.0112002  -0.3559216   0.0425235

  C2    -4.60904169     0.00000000     0.00000000     Type   C2      Rank   4
     0.1942010
    -0.1481876   0.0027796   0.0147773
    -0.0084352  -0.0101882  -0.0309329   0.1204372   0.0011850
    -0.1337268   0.0705077   0.2018171   0.1078127   0.0456393
                -0.1382259  -0.0681658
    -0.4197443   0.4297983  -0.1364544  -0.5032146  -0.0104152
                 0.1541412  -0.0146490  -0.0978224   0.1085974

  C3    -2.26925064     0.00000000     4.01170373     Type   C3      Rank   4
     0.2089030
    -0.1478713  -0.0034156   0.0147646
...
...

Transferring data from one molecule to another

This is trivial once you have the data expressed in a local axis frame. In the case of the multipoles all you need to do is:

  1. Use the correct molecular geometry for molecule A.
  2. Take the multipoles for molecule B (expressed in the local frame) and copy them to the sites of molecule A.

That's it. The new multipole file for molecule A is ready. If, for example, you have taken the multipoles from RDX_1 and placed them onto RDX_5 (another conformer of RDX), then you get a new multipole file RDX_5_with_RDX_1_multipoles_localframe.mom. This file can be read into Orient as follows:

fragment

...
...
Molecule  RDX at  0.0 0.0 0.0
  ! Units BOHR
    #include ../RDX_5_with_RDX_1_multipoles_localframe.mom
    #include ./RDX_defined_multipole.axes
End
...

Where the important part is to define the local axes correctly. This is done in file RDX_defined_multipole.axes which looks like:

RDX_defined_multipole.axes (fragment)

! Axes defns for multipoles already rotated into the local-axes
! This differs from the axes defns used in the EDIT block.
  Axes   z from C1 between H1 and H2  x from C1 to N2 define for C1
  Axes   z from C2 between H3 and H4  x from C2 to N1 define for C2
  Axes   z from C3 between H5 and H6  x from C3 to N3 define for C3
  Axes   z from    N1  to N4  x from N1 to C1 define for N1
  Axes   z from    N2  to N5  x from N2 to C3 define for N2
  Axes   z from    N3  to N6  x from N3 to C2 define for N3
...
...

Compare the the file RDX_rotate_multipole.axes shown above. The only difference is that we have replaced **rotate** with **define**. This is because the multipoles are already in the local-axis frame. So all we need do is //define// the axes.

Rotating data from a local frame to the global frame

This is the last step in a transferability process. You now have the multipoles transfered from one molecule to another, but they have been expressed in a local axis frame. This was essential or else you could not transfer them (except in special cases). But while Orient can read the properties computed in a local axis system, other codes may not, and you now need to re-express the properties in the global frame, or indeed, rotate them into yet another local axis frame.

This is a very simple calculation and here is the fragment of the Orient file:

DX_rotate_to_global_mom.ornt (fragment)

Molecule  RDX at  0.0 0.0 0.0
  ! Units BOHR
    #include ./RDX_5_with_RDX_1_multipoles_localframe.mom
    #include ./RDX_defined_multipole.axes
End

! This will show the multipoles in the local frame as this is still
! the current axis system. This is not needed. I've placed this command
! here so that you can compare the multipoles before the rotation and after.
Show RDX DATA

! Now we change the axis system to the global frame
Edit RDX
  #include ./RDX_global.axes
End

! Now show the site multipoles in the new frame
Show RDX DATA

! And also show the multipoles referred to the molecular origin
SHOW RDX MULTIPOLES

Finish

Let's see how this works. First we read in the multipoles and tell Orient that they are already in a local axis frame. As described above, this is achieved using the lines:

Molecule  RDX at  0.0 0.0 0.0
  ! Units BOHR
    #include ./RDX_5_with_RDX_1_multipoles_localframe.mom
    #include ./RDX_defined_multipole.axes
End

These files have been described above.

Now we need to re-define the axes to be the new ones. In this case we want to re-express the multipoles in the global frame. I have done this using the **EDIT** block in which the file RDX_global.axes contains the global axis definitions and looks like:

RDX_global.axes (fragment)

Axes
  C1  Global
  C2  Global
  C3  Global
  N1  Global
  N2  Global
...
...
End

Warning

Read the Orient manual to see the slight but important differences in defining the local/global axis frame in the EDIT and MOLECULE blocks.

Orient will transform the multipoles to the new frame defined in the EDIT block, and the SHOW that follows will print these out.

That's it.

AJMPublic/orient/rotating-data (last edited 2021-04-14 12:58:43 by apw109)