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

1""" 

2.. class:: BaseRMSD 

3 :platform: Linux, MacOS, Windows 

4 :synopsis: Root-mean-square deviation of a group of atoms 

5 

6.. classauthor:: Charlles Abreu <craabreu@gmail.com> 

7 

8""" 

9 

10import typing as t 

11 

12import numpy as np 

13 

14from .collective_variable import CollectiveVariable 

15from .units import MatrixQuantity, VectorQuantity, value_in_md_units 

16 

17 

18class BaseRMSD(CollectiveVariable): 

19 r""" 

20 A base class for root-mean-square deviation (RMSD) collective variables. 

21 """ 

22 

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} 

36 

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