Computing Orientations#

Why extract Orientations?#

Rotational diffusion denotes the random reorientation of an object in space. Hopefully, it is self-evident that we need to know the orientation of the object before we can study its reorientation. Therefore, we use the MDAnalysis-based Orientations class. By default, it first removes center-of-mass translation. Then, for each trajectory frame, a rotation matrix is determined that optimally aligns the frame to a reference structure by minimizing the RMSD, that is, the root-mean-square deviation of atomic positions.

Usage#

First, we need to import the required modules.

>>> import RotationalDiffusion as rd
>>> import MDAnalysis as mda
>>> import numpy as np

Also, we need an exemplary trajectory that we load into an MDAnalysis Universe object. Therefore, we use files from the MDAnalysisTests module, which contain a solvated protein.

>>> from MDAnalysisTests.datafiles import TPR, GRO
>>> u = mda.Universe(TPR, GRO)

Now, as usual in MDAnalysis, we create an instance of the analysis class and execute it by calling its run method. Thereby, we limit the analysis to the protein using standard MDAnalysis selection language.

>>> ana = rd.Orientations(mobile=u, reference=u, select='protein').run()

The analysis yields a trajectory of orientations (i.e., rotational matrices), which are stored in the results.orientations attribute of the Orientations class instance. To conclude this example, we have a look at the obtained orientations.

>>> np.shape(ana.results.orientations)
(1, 3, 3)
>>> np.allclose(ana.results.orientations, np.eye(3))
True

Evidently, we obtained a trajectory of orientations with a single frame, which contains the identity matrix. Great! Also our input trajectory contained a single frame, and since we used this trajectory for both mobile and reference, we already knew that the optimal rotation is no rotation. If the trajectories are longer, then the analysis loops over the trajectory in mobile and fits every frame to the current, fixed frame in reference. Alternatively, if reference is not explicitly specified, the current frame in mobile is used as the reference.

Please make sure to checkout the API reference at Orientations, to see all supported options and features.

Performance Considerations#

There are two ways to significantly speed up the calculations. First, automatic unwrapping of the trajectory may be disabled by setting the unwrap argument to False when instantiating the analysis class. In that case, make sure that you provide a trajectory that is already unwrapped, i.e., in which the molecular structure of interest is not broken over the periodic boundary conditions! Second, the analysis may be parallelized trivially over multiple CPU cores by specifying a supported parallel backend (currently multiprocessing or dask) and the number of workers (n_workers) in the call to the run method.

Alternative: Importing from GROMACS#

The GROMACS molecular simulation suite also provides a way for computing orientations. Support for that is COMING SOON.