Project: spyrmsd

Python RMSD tool with symmetry correction.

Project Details

Latest version
0.6.0
Home Page
https://spyrmsd.readthedocs.io
PyPI Page
https://pypi.org/project/spyrmsd/

Project Popularity

PageRank
0.002721834757871411
Number of downloads
78746

sPyRMSD

pytest flake8 mypy codecov

Docs Documentation Status

License PyPI Conda Version

J. Cheminform. Zenodo

Python tool for symmetry-corrected RMSD calculations.


If you find spyrmsd useful, please consider citing the following paper:

@article{spyrmsd2020,
  Author = {Meli, Rocco and Biggin, Philip C.},
  Journal = {Journal of Cheminformatics},
  Number = {1},
  Pages = {49},
  Title = {spyrmsd: symmetry-corrected RMSD calculations in Python},
  Volume = {12},
  Year = {2020}
}

Installation

spyrmsd is available on PyPI and conda-forge and can be easily installed from source. See Dependencies for a description of all the dependencies.

[!NOTE] spyrmsd will install NetworkX (multi-platform). You can install graph-tool on macOS and Linux for higher performance.

[!WARNING] If spyrmsd is used as a standalone tool, it is required to install either RDKit or Open Babel. Neither is automatically installed with pip nor conda.

PyPI

pip install spyrmsd

conda

conda install spyrmsd -c conda-forge

GitHub

git clone https://github.com/RMeli/spyrmsd.git
cd spyrmsd
pip install .

Dependencies

spyrmsd can be used both as a module or as a standalone tool.

Module

The following packages are required to use spyrmsd as a module:

[!NOTE] spyrmsd uses graph-tool by default but will fall back to NetworkX if the former is not installed (e.g. on Windows). However, in order to support cross-platform installation NetworkX is installed by default, and graph-tool needs to be installed manually.

Standalone Tool

Additionally, one of the following packages is required to use spyrmsd as a standalone tool:

Usage

Standalone Tool

python -m spyrmsd -h
usage: python -m spyrmsd [-h] [-m] [-c] [--hydrogens] [-n] reference molecules [molecules ...]

Symmetry-corrected RMSD calculations in Python.

positional arguments:
  reference       Reference file
  molecules       Input file(s)

optional arguments:
  -h, --help      show this help message and exit
  -m, --minimize  Minimize (fit)
  -c, --center    Center molecules at origin
  --hydrogens     Keep hydrogen atoms
  -n, --nosymm    No graph isomorphism

Module

from spyrmsd import rmsd

RMSD

The function rmsd.rmsd computes RMSD without symmetry correction. The atoms are expected to be in the same order for both molecules being compared (no atom matching is performed).

def rmsd(
    coords1: np.ndarray,    # Coordinates of molecule 1
    coords2: np.ndarray,    # Coordinates of molecule 2
    aprops1: np.ndarray,    # Atomic properties of molecule 1
    aprops2: np.ndarray,    # Atomic properties of molecule 2
    center: bool = False,   # Flag to center molecules at origin
    minimize: bool = False, # Flag to compute minimum RMSD
    atol: float = 1e-9,     # Numerical tolerance for QCP method
)

[!NOTE] Atomic properties (aprops) can be any Python object when using NetworkX, or integers, floats, or strings when using graph-tool.

Symmetry-Corrected RMSD

The function rmsd.symmrmsd computes symmetry-corrected RMSD using molecular graph isomorphisms. Symmetry correction requires molecular adjacency matrices describing the connectivity but needs not the atoms to be in the same order.

Atom matching is performed according to the molecular graph. This function should also be used when atoms in the molecules being compared are not in the same order (even if there is not symmetry to be accounted for).

def symmrmsd(
    coordsref: np.ndarray,                       # Reference coordinated
    coords: Union[np.ndarray, List[np.ndarray]], # Coordinates (one set or multiple sets)
    apropsref: np.ndarray,                       # Reference atomic properties
    aprops: np.ndarray,                          # Atomic properties
    amref: np.ndarray,                           # Reference adjacency matrix
    am: np.ndarray,                              # Adjacency matrix
    center: bool = False,                        # Flag to center molecules at origin
    minimize: bool = False,                      # Flag to compute minimum RMSD
    cache: bool = True,                          # Cache graph isomorphisms
    atol: float = 1e-9,                          # Numerical tolerance for QCP method
)

[!NOTE] Atomic properties (aprops) can be any Python object when using NetworkX, or integers, floats, or strings when using graph-tool.

Development

To ensure code quality and consistency the following tools are used during development:

Pre-commit git hooks can be installed with pre-commit.

Copyright

Copyright (c) 2019-2021, Rocco Meli.

References

References are tracked with duecredit. Run the credits.sh script in order to print up-to-date references.

Acknowledgements

Project based on the Computational Molecular Science Python Cookiecutter version 1.1.