## page was renamed from AJMPublic/orient/rotating-data ## page was renamed from ajm/orient/rotating-data <> Navigation: * [[AJMPublic/orient|The Orient Program]] * [[AJMPublic/camcasp|CamCASP]] = 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. 1. Transfer this local-axis frame data from one conformer onto another conformer. 1. 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. {{{#!wiki warning Warning This tutorial is still in development and so will be sketchy! Also, not all data may be posted. }}} {{{#!wiki important 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. 1. Second, also within the same MOLECULES block, redefine the axis frame and END the block. 1. Display the multipoles in the local axis frame using the SHOW command. Here's a sample command file: [[attachment: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_ISA-GRID.mom'' contains the ISA multipoles for RDX. These are in the global frame. * ''RDX_rotate_multipole.axes'' contains the local axis definitions. Here's what this file looks like: [[attachment: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: [[attachment: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. 1. 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: [[attachment: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: [[attachment: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: [[attachment: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: [[attachment:RDX_global.axes (fragment)]] {{{ Axes C1 Global C2 Global C3 Global N1 Global N2 Global ... ... End }}} {{{#!wiki warning 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.