Showing:

0

247

8mos ago

17

2

BSD-2-Clause

# Calculate Root-mean-square deviation (RMSD) of Two Molecules Using Rotation

The root-mean-square deviation (RMSD) is calculated, using Kabsch algorithm (1976) or Quaternion algorithm (1991) for rotation, between two Cartesian coordinates in either `.xyz` or `.pdb` format, resulting in the minimal RMSD.

For more information please read RMSD and `Kabsch algorithm`.

.. _RMSD: http://en.wikipedia.org/wiki/Root-mean-square_deviation .. _Kabsch algorithm: http://en.wikipedia.org/wiki/Kabsch_algorithm

## Motivation

You have molecule A and B and want to calculate the structural difference between those two. If you just calculate the RMSD_ straight-forward you might get a too big of a value as seen below. You would need to first recenter the two molecules and then rotate them unto each other to get the true minimal RMSD. This is what this script does.

========== =========== ========== No Changes Re-centered Rotated

|begin| |translate| |rotate| ========== =========== ========== RMSD 2.50 RMSD 1.07 RMSD 0.25 ========== =========== ==========

.. |begin| image:: https://raw.githubusercontent.com/charnley/rmsd/master/img/plot_beginning.png .. |translate| image:: https://raw.githubusercontent.com/charnley/rmsd/master/img/plot_translated.png .. |rotate| image:: https://raw.githubusercontent.com/charnley/rmsd/master/img/plot_rotated.png

## Citation

Please cite this project when using it for scientific publications.

## Installation

Easiest is to get the program vis PyPi under the package name `rmsd`,

.. code-block:: bash

``````pip install rmsd
``````

or download the project from GitHub via

.. code-block:: bash

``````git clone https://github.com/charnley/rmsd
``````

There is only one Python file, so you can also download `calculate_rmsd.py` and put it in your bin folder.

.. code-block:: bash

``````wget -O calculate_rmsd https://raw.githubusercontent.com/charnley/rmsd/master/rmsd/calculate_rmsd.py
chmod +x calculate_rmsd
``````

## Usage examples

Use `calculate_rmsd --help` to see all the features. Usage is pretty straight forward, call `calculate_rmsd` with two structures in either `.xyz` or `.pdb`. In this example Ethane has the exact same structure, but is translated in space, so the RMSD should be zero.

.. code-block:: bash

``````calculate_rmsd tests/ethane.xyz tests/ethane_translate.xyz
``````

It is also possible to ignore all hydrogens (useful for larger molecules where hydrogens move around indistinguishable) and print the rotated structure for visual comparison. The output will be in XYZ format.

.. code-block:: bash

``````calculate_rmsd --no-hydrogen --print tests/ethane.xyz tests/ethane_mini.xyz
``````

If the atoms are scrambled and not aligned you can use the `--reorder` argument which will align the atoms from structure B unto A. Use `--reorder-method` to select what method for reordering. Choose between Hungarian_ (default), distance (very approximate) and brute force (slow).

.. _Hungarian: https://en.wikipedia.org/wiki/Hungarian_algorithm

.. code-block:: bash

``````calculate_rmsd --reorder tests/water_16.xyz tests/water_16_idx.xyz
``````

It is also possible to use RMSD as a library in other scripts, see `example.py` for example usage.

## Problems?

Submit issues or pull requests on GitHub.

## Contributions

Please note that we are using `black` with line length of 99. Easiest way to abide to the code standard is to install the following package.

.. code-block:: bash

``````pip install pre-commit
``````

and run the following command in your repository

.. code-block:: bash

``````pre-commit install
``````

This will install a hook in your git and re-format your code to adhere to the standard. As well as check for code quality.

## Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100