Coverage for cvpack/base_rmsd.py: 100%
15 statements
« prev ^ index » next coverage.py v7.5.1, created at 2024-05-09 16:14 +0000
« prev ^ index » next coverage.py v7.5.1, created at 2024-05-09 16:14 +0000
1"""
2.. class:: BaseRMSD
3 :platform: Linux, MacOS, Windows
4 :synopsis: Root-mean-square deviation of a group of atoms
6.. classauthor:: Charlles Abreu <craabreu@gmail.com>
8"""
10import typing as t
12import numpy as np
14from .collective_variable import CollectiveVariable
15from .units import MatrixQuantity, VectorQuantity, value_in_md_units
18class BaseRMSD(CollectiveVariable):
19 r"""
20 A base class for root-mean-square deviation (RMSD) collective variables.
21 """
23 def _getDefinedCoords(
24 self,
25 referencePositions: t.Union[MatrixQuantity, t.Dict[int, VectorQuantity]],
26 group: t.List[int],
27 ) -> None:
28 if isinstance(referencePositions, t.Dict):
29 positions = {
30 atom: value_in_md_units(coords)
31 for atom, coords in referencePositions.items()
32 }
33 else:
34 positions = value_in_md_units(referencePositions)
35 return {atom: [float(x) for x in positions[atom]] for atom in group}
37 def _getAllCoords(
38 self, definedCoords: t.Dict[int, t.List[float]], numAtoms: int
39 ) -> np.ndarray:
40 all_coords = np.zeros((numAtoms, 3))
41 for atom, coords in definedCoords.items():
42 all_coords[atom] = coords
43 return all_coords