diff --git a/CodeEntropy/levels/axes.py b/CodeEntropy/levels/axes.py index e2cbfa5a..04c59315 100644 --- a/CodeEntropy/levels/axes.py +++ b/CodeEntropy/levels/axes.py @@ -144,12 +144,14 @@ def get_residue_axes( masses=ua_masses, dimensions=data_container.dimensions[:3], ) - rot_axes, moment_of_inertia = self.get_custom_principal_axes(moi_tensor) + rot_axes, moment_of_inertia = self.get_principal_axes_from_tensor( + moi_tensor + ) trans_axes = rot_axes # per original convention rot_center = np.array(residue.center_of_mass()) else: make_whole(data_container.atoms) - trans_axes = data_container.atoms.principal_axes() + trans_axes = self.get_principal_axes_from_group(data_container.atoms) if len(edge_atom_set) == 1: edge_atom = edge_atom_set[0] rot_center, rot_axes = self.get_terminal_axes( @@ -217,14 +219,14 @@ def get_residue_axes_from_topology( masses=topology.residue_ua_masses, dimensions=dimensions, ) - rot_axes, moment_of_inertia = self.get_custom_principal_axes( + rot_axes, moment_of_inertia = self.get_principal_axes_from_tensor( moment_of_inertia_tensor ) trans_axes = rot_axes else: make_whole(mol.atoms) - trans_axes = mol.atoms.principal_axes() - rot_axes, moment_of_inertia = self.get_vanilla_axes(residue_atoms) + trans_axes = self.get_principal_axes_from_group(mol.atoms) + rot_axes, moment_of_inertia = self.get_molecule_axes(residue_atoms) center = residue_atoms.center_of_mass(unwrap=True) return trans_axes, rot_axes, center, moment_of_inertia @@ -281,7 +283,7 @@ def get_UA_axes(self, data_container, index: int, res_position): # only the one residue => use principal axes residue = data_container trans_center = data_container.atoms.center_of_mass(unwrap=True) - trans_axes = data_container.atoms.principal_axes() + trans_axes = self.get_principal_axes_from_group(data_container.atoms) else: # residue of interest has at least one neighbour if res_position == -1 or res_position == 1: @@ -416,12 +418,12 @@ def get_UA_axes_from_topology( masses=topology.residue_ua_masses, dimensions=dimensions, ) - trans_axes, _moment_of_inertia = self.get_custom_principal_axes( + trans_axes, _moment_of_inertia = self.get_principal_axes_from_tensor( moment_of_inertia_tensor ) else: make_whole(residue_atoms) - trans_axes = residue_atoms.principal_axes() + trans_axes = self.get_principal_axes_from_group(residue_atoms) center = heavy_atom.position rot_axes, moment_of_inertia = self.get_bonded_axes_from_topology( @@ -478,10 +480,10 @@ def get_bonded_axes_from_topology( ua_all = u.atoms[topology.ua_all_atom_indices] if len(heavy_bonded) == 0: - custom_axes, custom_moment_of_inertia = self.get_vanilla_axes(ua_all) + custom_axes, custom_moment_of_inertia = self.get_molecule_axes(ua_all) if len(heavy_bonded) == 1 and len(light_bonded) == 0: - custom_axes = self.get_custom_axes( + custom_axes = self.get_bonded_vector_axes( a=heavy_atom.position, b_list=[heavy_bonded[0].position], c=np.zeros(3), @@ -489,7 +491,7 @@ def get_bonded_axes_from_topology( ) if len(heavy_bonded) == 1 and len(light_bonded) >= 1: - custom_axes = self.get_custom_axes( + custom_axes = self.get_bonded_vector_axes( a=heavy_atom.position, b_list=[heavy_bonded[0].position], c=light_bonded[0].position, @@ -497,7 +499,7 @@ def get_bonded_axes_from_topology( ) if len(heavy_bonded) >= 2: - custom_axes = self.get_custom_axes( + custom_axes = self.get_bonded_vector_axes( a=heavy_atom.position, b_list=heavy_bonded.positions, c=heavy_bonded[1].position, @@ -611,7 +613,7 @@ def get_terminal_axes(self, residue, edge, dimensions): if len(bonded_atoms) == 0: # there is only one heavy atom in the residue rot_center = edge.position - rot_axes = residue.atoms.principal_axes() + rot_axes = self.get_principal_axes_from_group(residue.atoms) else: average_bonded = np.zeros(3) for bonded_atom in bonded_atoms: @@ -632,7 +634,7 @@ def get_terminal_axes(self, residue, edge, dimensions): ) else: rot_center = edge.position - rot_axes = self.get_custom_axes( + rot_axes = self.get_bonded_vector_axes( a=edge.position, b_list=[average_bonded], c=np.zeros(3), @@ -672,7 +674,7 @@ def get_non_terminal_axes(self, residue, edges, dimensions): ) else: rot_center = (edges[0].position + edges[1].position) / 2 - rot_axes = self.get_custom_axes( + rot_axes = self.get_bonded_vector_axes( a=rot_center, b_list=[edges[0].position], c=np.zeros(3), @@ -749,11 +751,11 @@ def get_bonded_axes(self, system, atom, dimensions: np.ndarray): # case1 if len(heavy_bonded) == 0: - custom_axes, custom_moment_of_inertia = self.get_vanilla_axes(ua_all) + custom_axes, custom_moment_of_inertia = self.get_molecule_axes(ua_all) # case2 if len(heavy_bonded) == 1 and len(light_bonded) == 0: - custom_axes = self.get_custom_axes( + custom_axes = self.get_bonded_vector_axes( a=atom.position, b_list=[heavy_bonded[0].position], c=np.zeros(3), @@ -762,7 +764,7 @@ def get_bonded_axes(self, system, atom, dimensions: np.ndarray): # case3 if len(heavy_bonded) == 1 and len(light_bonded) >= 1: - custom_axes = self.get_custom_axes( + custom_axes = self.get_bonded_vector_axes( a=atom.position, b_list=[heavy_bonded[0].position], c=light_bonded[0].position, @@ -772,7 +774,7 @@ def get_bonded_axes(self, system, atom, dimensions: np.ndarray): # case4 (not used in original 2019 code; case5 used instead) # case5 if len(heavy_bonded) >= 2: - custom_axes = self.get_custom_axes( + custom_axes = self.get_bonded_vector_axes( a=atom.position, b_list=heavy_bonded.positions, c=heavy_bonded[1].position, @@ -812,14 +814,15 @@ def find_bonded_atoms(self, atom_idx: int, system): bonded_H_atoms = bonded_atoms.select_atoms("mass 1 to 1.1") return bonded_heavy_atoms, bonded_H_atoms - def get_vanilla_axes(self, molecule): - """Get principal axes and sorted principal moments (vanilla method). + def get_molecule_axes(self, molecule): + """Get principal axes and sorted principal moments. - Compute the principal axes and moments of inertia for a molecule using - MDAnalysis built-in functionality. + Compute the principal axes and moments of inertia for a molecule from its + moment of inertia tensor. - The original description is preserved: - - The molecule is made whole to ensure correct handling of PBC. + - The molecule is made whole to ensure correct handling of PBC. The tensor + is taken after that, so it does not depend on where the molecule sits + relative to the periodic boundary. - The moments are obtained by diagonalising the moment of inertia tensor. - Eigenvalues are returned sorted from largest to smallest magnitude. @@ -832,17 +835,10 @@ def get_vanilla_axes(self, molecule): - principal_axes: (3, 3) axes. - moment_of_inertia: (3,) moments sorted descending by absolute value. """ - moment_of_inertia_tensor = molecule.moment_of_inertia(unwrap=True) make_whole(molecule.atoms) - principal_axes = molecule.principal_axes() - - eigenvalues, _ = np.linalg.eig(moment_of_inertia_tensor) - order = np.argsort(np.abs(eigenvalues))[::-1] - moment_of_inertia = eigenvalues[order] + return self.get_principal_axes_from_tensor(molecule.moment_of_inertia()) - return principal_axes, moment_of_inertia - - def get_custom_axes( + def get_bonded_vector_axes( self, a: np.ndarray, b_list: Sequence[np.ndarray], @@ -1074,44 +1070,72 @@ def get_moment_of_inertia_tensor( return moment_of_inertia_tensor - def get_custom_principal_axes( - self, moment_of_inertia_tensor: np.ndarray + def get_principal_axes_from_tensor( + self, + moment_of_inertia_tensor: np.ndarray, + degeneracy_rtol: float = 100 * np.finfo(np.float32).eps, + reference_vector: Sequence[float] = (1.0, 2.0, 3.0), ) -> tuple[np.ndarray, np.ndarray]: - """Compute principal axes and moments from a custom MOI tensor. + """Compute the principal axes and moments of a moment of inertia tensor. - Principal axes and centre of axes from the ordered eigenvalues and - eigenvectors of a moment of inertia tensor. This function allows for a - custom moment of inertia tensor to be used, which isn't possible with the - built-in MDAnalysis principal_axes() function. + The eigenvectors of a symmetric tensor are only defined up to a sign, and, + for equal moments, up to a rotation within the degenerate eigenspace. The + axes are returned in a canonical form, so that a given tensor always + produces the same axes. The convention is: - Original behaviour preserved: - - - Eigenvalues are sorted by descending absolute magnitude. - - Eigenvectors are transposed so axes are returned as rows. - - Z axis is flipped to enforce the same handedness convention as the - original implementation. + - Moments are sorted by descending absolute value. + - Within a degenerate eigenspace (moments equal to within + ``degeneracy_rtol`` of the largest), the basis is the eigenvectors of a + reference tensor built from ``reference_vector``, projected onto that + eigenspace. + - The first two axes are signed to have a positive projection onto + ``reference_vector``, and the third is their cross product. Args: - moment_of_inertia_tensor: (3, 3) custom inertia tensor. + moment_of_inertia_tensor: (3, 3) symmetric inertia tensor. + degeneracy_rtol: Relative tolerance, with respect to the largest + moment, for treating moments as degenerate. The default is a + multiple of the float32 precision of the coordinates. + reference_vector: Fixed direction used to choose axis signs and the + basis within a degenerate eigenspace. Its components must be + distinct, so that no symmetric or axis-aligned direction is + perpendicular to it or ties on its components. Returns: Tuple[np.ndarray, np.ndarray]: - principal_axes: (3, 3) principal axes (rows). - - moment_of_inertia: (3,) principal moments. + - principal_moments: (3,) moments sorted by descending magnitude. """ - eigenvalues, eigenvectors = np.linalg.eig(moment_of_inertia_tensor) - order = np.abs(eigenvalues).argsort()[::-1] # descending order - transposed = np.transpose(eigenvectors) # columns -> rows - moment_of_inertia = eigenvalues[order] - principal_axes = transposed[order] - - # point z axis in correct direction, as per original code - cross_xy = np.cross(principal_axes[0], principal_axes[1]) - dot_z = float(np.dot(cross_xy, principal_axes[2])) - if dot_z < 0: - principal_axes[2] *= -1 - - return principal_axes, moment_of_inertia + principal_moments, eigenvectors = np.linalg.eigh(moment_of_inertia_tensor) + order = np.argsort(np.abs(principal_moments))[::-1] + principal_moments = principal_moments[order] + eigenvectors = eigenvectors[:, order] + + reference = np.asarray(reference_vector, dtype=float) + gaps = np.abs(np.diff(np.abs(principal_moments))) + boundaries = ( + np.flatnonzero(gaps > degeneracy_rtol * np.abs(principal_moments[0])) + 1 + ) + for subspace in np.split(np.arange(3), boundaries): + if len(subspace) > 1: + basis = eigenvectors[:, subspace] + _, rotation = np.linalg.eigh(basis.T @ np.diag(reference) @ basis) + eigenvectors[:, subspace] = basis @ rotation + + for axis in (0, 1): + if eigenvectors[:, axis] @ reference < 0: + eigenvectors[:, axis] *= -1 + + z_axis = np.cross(eigenvectors[:, 0], eigenvectors[:, 1]) + principal_axes = np.array([eigenvectors[:, 0], eigenvectors[:, 1], z_axis]) + return principal_axes, principal_moments + + def get_principal_axes_from_group(self, group) -> np.ndarray: + """Return the canonical principal axes (rows) of an atom group.""" + principal_axes, _ = self.get_principal_axes_from_tensor( + group.atoms.moment_of_inertia() + ) + return principal_axes def get_UA_masses(self, molecule) -> list[float]: """Return united-atom (UA) masses for a molecule. diff --git a/CodeEntropy/levels/nodes/covariance.py b/CodeEntropy/levels/nodes/covariance.py index 9ea5ea40..63db3140 100644 --- a/CodeEntropy/levels/nodes/covariance.py +++ b/CodeEntropy/levels/nodes/covariance.py @@ -506,8 +506,8 @@ def _build_ua_vectors( # principal axes make_whole(residue.atoms) make_whole(bead) - trans_axes = residue.atoms.principal_axes() - rot_axes, moi = axes_manager.get_vanilla_axes(bead) + trans_axes = axes_manager.get_principal_axes_from_group(residue.atoms) + rot_axes, moi = axes_manager.get_molecule_axes(bead) center = bead.center_of_mass(unwrap=True) force_vecs.append( @@ -658,8 +658,8 @@ def _get_residue_axes( make_whole(mol.atoms) make_whole(bead) - trans_axes = mol.atoms.principal_axes() - rot_axes, moi = axes_manager.get_vanilla_axes(bead) + trans_axes = axes_manager.get_principal_axes_from_group(mol.atoms) + rot_axes, moi = axes_manager.get_molecule_axes(bead) center = bead.center_of_mass(unwrap=True) return ( np.asarray(trans_axes), @@ -688,8 +688,8 @@ def _get_polymer_axes( make_whole(mol.atoms) make_whole(bead) - trans_axes = mol.atoms.principal_axes() - rot_axes, moi = axes_manager.get_vanilla_axes(bead) + trans_axes = axes_manager.get_principal_axes_from_group(mol.atoms) + rot_axes, moi = axes_manager.get_molecule_axes(bead) center = bead.center_of_mass(unwrap=True) return ( diff --git a/tests/regression/baselines/benzaldehyde/axes_off.json b/tests/regression/baselines/benzaldehyde/axes_off.json index 5bddd538..3553c765 100644 --- a/tests/regression/baselines/benzaldehyde/axes_off.json +++ b/tests/regression/baselines/benzaldehyde/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.08982962903796131, - "united_atom:Rovibrational": 32.16018134884085, - "residue:FTmat-Transvibrational": 88.7671666695003, - "residue:FTmat-Rovibrational": 61.61036267672132, + "united_atom:Transvibrational": 0.06950663196232491, + "united_atom:Rovibrational": 35.19655714759131, + "residue:FTmat-Transvibrational": 86.6413638447789, + "residue:FTmat-Rovibrational": 62.24303760058523, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 203.1091118167158 + "total": 204.6320367175331 } } } diff --git a/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json b/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json index a5d1af0e..638aefd6 100644 --- a/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json +++ b/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.07119323721997475, - "united_atom:Rovibrational": 49.68669738152346, - "residue:Transvibrational": 69.48692941204929, - "residue:Rovibrational": 68.46147102540942, + "united_atom:Transvibrational": 0.06817494136874551, + "united_atom:Rovibrational": 49.686697381523466, + "residue:Transvibrational": 69.25273989458984, + "residue:Rovibrational": 68.64810133422232, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 208.1878625488175 + "total": 208.13728504431973 } } } diff --git a/tests/regression/baselines/benzaldehyde/default.json b/tests/regression/baselines/benzaldehyde/default.json index c99a2d15..8e235d50 100644 --- a/tests/regression/baselines/benzaldehyde/default.json +++ b/tests/regression/baselines/benzaldehyde/default.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 24.88518233240474, - "united_atom:Rovibrational": 27.950376507672583, - "residue:FTmat-Transvibrational": 71.03412922724692, - "residue:FTmat-Rovibrational": 59.44169664956799, + "united_atom:Transvibrational": 24.921822103314035, + "united_atom:Rovibrational": 27.950376507672594, + "residue:FTmat-Transvibrational": 70.97090266225699, + "residue:FTmat-Rovibrational": 59.588669973122094, "united_atom:Conformational": 7.522643899702263, "residue:Conformational": 0.0, "residue:Orientational": 59.43920971558428 }, - "total": 250.27323833217878 + "total": 250.39362486165226 } } } diff --git a/tests/regression/baselines/benzaldehyde/frame_window.json b/tests/regression/baselines/benzaldehyde/frame_window.json index 70bb2766..4f8f6367 100644 --- a/tests/regression/baselines/benzaldehyde/frame_window.json +++ b/tests/regression/baselines/benzaldehyde/frame_window.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 40.30267601961045, - "united_atom:Rovibrational": 38.21906858443615, - "residue:FTmat-Transvibrational": 73.41098578352612, - "residue:FTmat-Rovibrational": 57.881504393660364, + "united_atom:Transvibrational": 37.90368186636453, + "united_atom:Rovibrational": 38.219068584436165, + "residue:FTmat-Transvibrational": 73.76730786578052, + "residue:FTmat-Rovibrational": 57.689489298548764, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 230.29580627384846 + "total": 228.06111910774533 } } } diff --git a/tests/regression/baselines/benzaldehyde/grouping_each.json b/tests/regression/baselines/benzaldehyde/grouping_each.json index deacf42c..f9aa4551 100644 --- a/tests/regression/baselines/benzaldehyde/grouping_each.json +++ b/tests/regression/baselines/benzaldehyde/grouping_each.json @@ -4,7 +4,7 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.062499436482478535, - "residue:FTmat-Transvibrational": 16.83857036769833, + "residue:FTmat-Transvibrational": 16.838570367698324, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -40,13 +40,13 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.001983835543157824, - "residue:FTmat-Transvibrational": 15.803976930845373, + "residue:FTmat-Transvibrational": 15.80397693084538, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.80596076638853 + "total": 15.805960766388537 }, "4": { "components": { @@ -64,13 +64,13 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.010824819910336868, - "residue:FTmat-Transvibrational": 11.05479779559611, + "residue:FTmat-Transvibrational": 11.054797795596103, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 31.909265242174982 }, - "total": 42.97488785768143 + "total": 42.97488785768142 }, "6": { "components": { @@ -88,13 +88,13 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.004033941970593011, - "residue:FTmat-Transvibrational": 18.90676882142135, + "residue:FTmat-Transvibrational": 18.906768821421366, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 18.910802763391942 + "total": 18.91080276339196 }, "8": { "components": { @@ -112,13 +112,13 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00023139743934636996, - "residue:FTmat-Transvibrational": 21.42548529236268, + "residue:FTmat-Transvibrational": 21.42548529236267, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 21.425716689802027 + "total": 21.425716689802016 } } } diff --git a/tests/regression/baselines/benzaldehyde/rad.json b/tests/regression/baselines/benzaldehyde/rad.json index 8e39e21b..df3c0f93 100644 --- a/tests/regression/baselines/benzaldehyde/rad.json +++ b/tests/regression/baselines/benzaldehyde/rad.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 24.88518233240474, - "united_atom:Rovibrational": 27.950376507672583, - "residue:FTmat-Transvibrational": 71.03412922724692, - "residue:FTmat-Rovibrational": 59.44169664956799, + "united_atom:Transvibrational": 24.921822103314035, + "united_atom:Rovibrational": 27.950376507672594, + "residue:FTmat-Transvibrational": 70.97090266225699, + "residue:FTmat-Rovibrational": 59.588669973122094, "united_atom:Conformational": 7.522643899702263, "residue:Conformational": 0.0, "residue:Orientational": 25.502722133228936 }, - "total": 216.33675074982344 + "total": 216.45713727929692 } } } diff --git a/tests/regression/baselines/benzaldehyde/selection_subset.json b/tests/regression/baselines/benzaldehyde/selection_subset.json index 6d50b1a7..65e53088 100644 --- a/tests/regression/baselines/benzaldehyde/selection_subset.json +++ b/tests/regression/baselines/benzaldehyde/selection_subset.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.07119323721997475, - "united_atom:Rovibrational": 49.68669738152346, - "residue:FTmat-Transvibrational": 87.43527331108173, - "residue:FTmat-Rovibrational": 61.67126452972779, + "united_atom:Transvibrational": 0.06817494136874551, + "united_atom:Rovibrational": 49.686697381523466, + "residue:FTmat-Transvibrational": 85.94814793508023, + "residue:FTmat-Rovibrational": 61.7256510401677, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 219.34599995216834 + "total": 217.9102427907555 } } } diff --git a/tests/regression/baselines/benzene/axes_off.json b/tests/regression/baselines/benzene/axes_off.json index 6177e0d0..0bda87a1 100644 --- a/tests/regression/baselines/benzene/axes_off.json +++ b/tests/regression/baselines/benzene/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.17824017761231503, - "united_atom:Rovibrational": 37.12706256545503, - "residue:FTmat-Transvibrational": 76.8200637641939, - "residue:FTmat-Rovibrational": 47.171663134129304, + "united_atom:Transvibrational": 0.17072733303436669, + "united_atom:Rovibrational": 38.707686995757996, + "residue:FTmat-Transvibrational": 78.01138885368493, + "residue:FTmat-Rovibrational": 47.12762732161061, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 161.29702964139057 + "total": 164.0174305040879 } } } diff --git a/tests/regression/baselines/benzene/combined_forcetorque_off.json b/tests/regression/baselines/benzene/combined_forcetorque_off.json index 16b5e375..a7e97064 100644 --- a/tests/regression/baselines/benzene/combined_forcetorque_off.json +++ b/tests/regression/baselines/benzene/combined_forcetorque_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.16311383522946216, - "united_atom:Rovibrational": 40.695812407899396, - "residue:Transvibrational": 57.59675197041957, - "residue:Rovibrational": 52.85496348419672, + "united_atom:Transvibrational": 0.20056759662549248, + "united_atom:Rovibrational": 40.69581240789943, + "residue:Transvibrational": 60.612932277845054, + "residue:Rovibrational": 52.53948263906845, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 151.31064169774515 + "total": 154.04879492143843 } } } diff --git a/tests/regression/baselines/benzene/default.json b/tests/regression/baselines/benzene/default.json index 86ae25d0..43ffe96e 100644 --- a/tests/regression/baselines/benzene/default.json +++ b/tests/regression/baselines/benzene/default.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 9.081853431559052, - "united_atom:Rovibrational": 27.534380126250227, - "residue:FTmat-Transvibrational": 72.66211800013413, - "residue:FTmat-Rovibrational": 59.93761874375924, + "united_atom:Transvibrational": 9.070682016770112, + "united_atom:Rovibrational": 27.534380126250213, + "residue:FTmat-Transvibrational": 72.69407639869898, + "residue:FTmat-Rovibrational": 59.84501427492272, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 41.58427729275938 }, - "total": 210.800247594462 + "total": 210.72843010940142 } } } diff --git a/tests/regression/baselines/benzene/frame_window.json b/tests/regression/baselines/benzene/frame_window.json index c1ffd000..fa1b499d 100644 --- a/tests/regression/baselines/benzene/frame_window.json +++ b/tests/regression/baselines/benzene/frame_window.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 11.46552036084548, - "united_atom:Rovibrational": 34.98492056748493, - "residue:FTmat-Transvibrational": 71.83491878606151, - "residue:FTmat-Rovibrational": 55.6098400281744, + "united_atom:Transvibrational": 13.02795056227694, + "united_atom:Rovibrational": 34.98492056748487, + "residue:FTmat-Transvibrational": 75.50603474425519, + "residue:FTmat-Rovibrational": 54.88466842760241, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 173.89519974256632 + "total": 178.40357430161941 } } } diff --git a/tests/regression/baselines/benzene/grouping_each.json b/tests/regression/baselines/benzene/grouping_each.json index 36535d8f..f7141fa1 100644 --- a/tests/regression/baselines/benzene/grouping_each.json +++ b/tests/regression/baselines/benzene/grouping_each.json @@ -4,18 +4,18 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.001760679467943202, - "residue:FTmat-Transvibrational": 19.14539159233644, + "residue:FTmat-Transvibrational": 19.145391592336455, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 19.147152271804384 + "total": 19.147152271804398 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.010093246924291187, + "united_atom:Rovibrational": 0.010093246924291217, "residue:FTmat-Transvibrational": 15.27551568157708, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -28,97 +28,97 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.07511923174012403, - "residue:FTmat-Transvibrational": 20.327785240055736, + "residue:FTmat-Transvibrational": 20.327785240055753, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 15.089233620075317 }, - "total": 35.492138091871176 + "total": 35.4921380918712 }, "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0038209327718877325, - "residue:FTmat-Transvibrational": 9.934141461042111, + "united_atom:Rovibrational": 0.003820932771887749, + "residue:FTmat-Transvibrational": 9.9341414610421, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 9.937962393813999 + "total": 9.937962393813988 }, "4": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.026349364088976555, - "residue:FTmat-Transvibrational": 7.206801915761131, + "residue:FTmat-Transvibrational": 7.206801915761139, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.233151279850108 + "total": 7.233151279850116 }, "5": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0015259047993877776, - "residue:FTmat-Transvibrational": 8.539848138171388, + "residue:FTmat-Transvibrational": 8.53984813817139, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 8.541374042970777 + "total": 8.541374042970778 }, "6": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0034710297151557107, - "residue:FTmat-Transvibrational": 15.469059953010003, + "residue:FTmat-Transvibrational": 15.469059953009985, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.472530982725159 + "total": 15.472530982725141 }, "7": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.004204931339708972, - "residue:FTmat-Transvibrational": 7.333010865090827, + "united_atom:Rovibrational": 0.004204931339708978, + "residue:FTmat-Transvibrational": 7.333010865090829, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.337215796430536 + "total": 7.337215796430538 }, "8": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0006818502219972305, - "residue:FTmat-Transvibrational": 22.685475655857566, + "united_atom:Rovibrational": 0.0006818502219972316, + "residue:FTmat-Transvibrational": 22.685475655857548, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 22.686157506079564 + "total": 22.686157506079546 }, "9": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.004115086801073575, - "residue:FTmat-Transvibrational": 5.894912294581263, + "residue:FTmat-Transvibrational": 5.894912294581265, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 5.899027381382337 + "total": 5.899027381382338 } } } diff --git a/tests/regression/baselines/benzene/rad.json b/tests/regression/baselines/benzene/rad.json index c4aca55f..4e344234 100644 --- a/tests/regression/baselines/benzene/rad.json +++ b/tests/regression/baselines/benzene/rad.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 9.081853431559052, - "united_atom:Rovibrational": 27.534380126250227, - "residue:FTmat-Transvibrational": 72.66211800013413, - "residue:FTmat-Rovibrational": 59.93761874375924, + "united_atom:Transvibrational": 9.070682016770112, + "united_atom:Rovibrational": 27.534380126250213, + "residue:FTmat-Transvibrational": 72.69407639869898, + "residue:FTmat-Rovibrational": 59.84501427492272, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 12.386543820026672 }, - "total": 181.6025141217293 + "total": 181.5306966366687 } } } diff --git a/tests/regression/baselines/benzene/selection_subset.json b/tests/regression/baselines/benzene/selection_subset.json index ff2d09b5..305235a8 100644 --- a/tests/regression/baselines/benzene/selection_subset.json +++ b/tests/regression/baselines/benzene/selection_subset.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.16311383522946216, - "united_atom:Rovibrational": 40.695812407899396, - "residue:FTmat-Transvibrational": 71.15771063929333, - "residue:FTmat-Rovibrational": 47.26253953880574, + "united_atom:Transvibrational": 0.20056759662549248, + "united_atom:Rovibrational": 40.69581240789943, + "residue:FTmat-Transvibrational": 76.91293922710581, + "residue:FTmat-Rovibrational": 46.20671256917539, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 159.27917642122793 + "total": 164.0160318008061 } } } diff --git a/tests/regression/baselines/cyclohexane/axes_off.json b/tests/regression/baselines/cyclohexane/axes_off.json index 5bf80282..4d7e406c 100644 --- a/tests/regression/baselines/cyclohexane/axes_off.json +++ b/tests/regression/baselines/cyclohexane/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.6825851535582973, - "united_atom:Rovibrational": 22.069351988995066, - "residue:FTmat-Transvibrational": 85.12666483486655, - "residue:FTmat-Rovibrational": 61.14255319533254, + "united_atom:Transvibrational": 0.8145817540775688, + "united_atom:Rovibrational": 20.920529818990932, + "residue:FTmat-Transvibrational": 82.12187395021834, + "residue:FTmat-Rovibrational": 62.175794643302766, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 169.02115517275246 + "total": 166.03278016658962 } } } diff --git a/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json b/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json index a548349d..118fca7a 100644 --- a/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json +++ b/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.5949308536734588, + "united_atom:Transvibrational": 0.8699366681675057, "united_atom:Rovibrational": 24.234154676578637, - "residue:Transvibrational": 69.9872567772153, - "residue:Rovibrational": 68.68521019685565, + "residue:Transvibrational": 69.35706898246762, + "residue:Rovibrational": 67.4746212331719, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 163.50155250432303 + "total": 161.93578156038566 } } } diff --git a/tests/regression/baselines/cyclohexane/default.json b/tests/regression/baselines/cyclohexane/default.json index c0233178..cde7c000 100644 --- a/tests/regression/baselines/cyclohexane/default.json +++ b/tests/regression/baselines/cyclohexane/default.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 11.726471858700231, - "united_atom:Rovibrational": 47.71088602161552, - "residue:FTmat-Transvibrational": 70.3922327806972, - "residue:FTmat-Rovibrational": 63.44920824648768, + "united_atom:Transvibrational": 11.686244565629414, + "united_atom:Rovibrational": 47.71088602161551, + "residue:FTmat-Transvibrational": 70.47299498069259, + "residue:FTmat-Rovibrational": 63.342990839070794, "united_atom:Conformational": 1.288879206695518, "residue:Conformational": 0.0, "residue:Orientational": 47.54362774624537 }, - "total": 242.11130586044152 + "total": 242.04562335994922 } } } diff --git a/tests/regression/baselines/cyclohexane/frame_window.json b/tests/regression/baselines/cyclohexane/frame_window.json index d21d437d..ac78ac21 100644 --- a/tests/regression/baselines/cyclohexane/frame_window.json +++ b/tests/regression/baselines/cyclohexane/frame_window.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 17.398382397359153, - "united_atom:Rovibrational": 73.96792995794405, - "residue:FTmat-Transvibrational": 76.4267996157354, - "residue:FTmat-Rovibrational": 63.30469126284744, + "united_atom:Transvibrational": 20.97191731367765, + "united_atom:Rovibrational": 73.96792995794401, + "residue:FTmat-Transvibrational": 77.10544540698241, + "residue:FTmat-Rovibrational": 62.95050298578673, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 231.09780323388605 + "total": 234.9957956643908 } } } diff --git a/tests/regression/baselines/cyclohexane/grouping_each.json b/tests/regression/baselines/cyclohexane/grouping_each.json index 364af0c5..7be58aa8 100644 --- a/tests/regression/baselines/cyclohexane/grouping_each.json +++ b/tests/regression/baselines/cyclohexane/grouping_each.json @@ -16,30 +16,30 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.006057157987386287, - "residue:FTmat-Transvibrational": 15.132575979975469, + "residue:FTmat-Transvibrational": 15.132575979975476, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.138633137962856 + "total": 15.138633137962863 }, "2": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00010095873425357108, - "residue:FTmat-Transvibrational": 19.65885364120911, + "residue:FTmat-Transvibrational": 19.6588536412091, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 19.658954599943364 + "total": 19.658954599943353 }, "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0037293322355179776, + "united_atom:Rovibrational": 0.0037293322355179833, "residue:FTmat-Transvibrational": 11.234013572018538, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -52,73 +52,73 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0007550734967943642, - "residue:FTmat-Transvibrational": 18.70372633557293, + "residue:FTmat-Transvibrational": 18.703726335572917, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 18.704481409069725 + "total": 18.70448140906971 }, "5": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.02179378230989012, - "residue:FTmat-Transvibrational": 11.909227365464751, + "residue:FTmat-Transvibrational": 11.909227365464744, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 11.931021147774642 + "total": 11.931021147774635 }, "6": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0027492054614669612, - "residue:FTmat-Transvibrational": 17.43511242811532, + "residue:FTmat-Transvibrational": 17.435112428115314, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 17.437861633576787 + "total": 17.43786163357678 }, "7": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.007825221576786185, - "residue:FTmat-Transvibrational": 14.390570450399677, + "residue:FTmat-Transvibrational": 14.390570450399672, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 14.398395671976463 + "total": 14.398395671976457 }, "8": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00022218804178093966, - "residue:FTmat-Transvibrational": 15.08891414424032, + "residue:FTmat-Transvibrational": 15.0889141442403, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.0891363322821 + "total": 15.08913633228208 }, "9": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.015106344919667631, - "residue:FTmat-Transvibrational": 15.248584501782126, + "residue:FTmat-Transvibrational": 15.248584501782135, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.263690846701794 + "total": 15.263690846701802 } } } diff --git a/tests/regression/baselines/cyclohexane/rad.json b/tests/regression/baselines/cyclohexane/rad.json index f65d9a4c..f901bd9a 100644 --- a/tests/regression/baselines/cyclohexane/rad.json +++ b/tests/regression/baselines/cyclohexane/rad.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 11.726471858700231, - "united_atom:Rovibrational": 47.71088602161552, - "residue:FTmat-Transvibrational": 70.3922327806972, - "residue:FTmat-Rovibrational": 63.44920824648768, + "united_atom:Transvibrational": 11.686244565629414, + "united_atom:Rovibrational": 47.71088602161551, + "residue:FTmat-Transvibrational": 70.47299498069259, + "residue:FTmat-Rovibrational": 63.342990839070794, "united_atom:Conformational": 1.288879206695518, "residue:Conformational": 0.0, "residue:Orientational": 14.049324060636614 }, - "total": 208.61700217483278 + "total": 208.55131967434048 } } } diff --git a/tests/regression/baselines/cyclohexane/selection_subset.json b/tests/regression/baselines/cyclohexane/selection_subset.json index b1a14443..54496ce4 100644 --- a/tests/regression/baselines/cyclohexane/selection_subset.json +++ b/tests/regression/baselines/cyclohexane/selection_subset.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.5949308536734588, + "united_atom:Transvibrational": 0.8699366681675057, "united_atom:Rovibrational": 24.234154676578637, - "residue:FTmat-Transvibrational": 84.37184730911717, - "residue:FTmat-Rovibrational": 59.52377096811085, + "residue:FTmat-Transvibrational": 80.96654552718029, + "residue:FTmat-Rovibrational": 61.1146878757474, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 168.72470380748013 + "total": 167.18532474767383 } } } diff --git a/tests/regression/baselines/dna/axes_off.json b/tests/regression/baselines/dna/axes_off.json index 9504b7b5..66ee6fd6 100644 --- a/tests/regression/baselines/dna/axes_off.json +++ b/tests/regression/baselines/dna/axes_off.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.2269044878385265, + "united_atom:Rovibrational": 1.0595708621690758, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 27.45710747332319, - "polymer:FTmat-Transvibrational": 48.62026970762269, + "residue:Rovibrational": 28.25555780171021, + "polymer:FTmat-Transvibrational": 48.10401202541479, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 92.64772999596995 + "total": 92.76258901647961 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.7972774672527945, + "united_atom:Rovibrational": 1.3193251286991976, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 25.287669468441067, - "polymer:FTmat-Transvibrational": 60.47397935339153, + "residue:Rovibrational": 24.96199001531892, + "polymer:FTmat-Transvibrational": 57.35678551116437, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 5.292271495278918, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 97.61010312099201 + "total": 93.68927748708911 } } } diff --git a/tests/regression/baselines/dna/combined_forcetorque_off.json b/tests/regression/baselines/dna/combined_forcetorque_off.json index e867cee1..f1711ef1 100644 --- a/tests/regression/baselines/dna/combined_forcetorque_off.json +++ b/tests/regression/baselines/dna/combined_forcetorque_off.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.002160679012128457, + "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.376800684085249, - "polymer:Transvibrational": 21.18266215491188, + "residue:Rovibrational": 3.376800684085247, + "polymer:Transvibrational": 21.18266215491191, "polymer:Rovibrational": 12.837576042626923, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 42.1581048972639 + "total": 42.15810489726392 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.01846427765949586, + "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 2.3863201082544565, - "polymer:Transvibrational": 16.607667396609116, - "polymer:Rovibrational": 12.304363914795593, + "residue:Rovibrational": 2.386320108254459, + "polymer:Transvibrational": 16.607667396609134, + "polymer:Rovibrational": 12.304363914795605, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 36.07572103394637 + "total": 36.07572103394641 } } } diff --git a/tests/regression/baselines/dna/default.json b/tests/regression/baselines/dna/default.json index 2cbef740..b5d797f1 100644 --- a/tests/regression/baselines/dna/default.json +++ b/tests/regression/baselines/dna/default.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.002160679012128457, + "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.376800684085249, - "polymer:FTmat-Transvibrational": 12.341104347192612, + "residue:Rovibrational": 3.376800684085247, + "polymer:FTmat-Transvibrational": 12.341104347192614, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 20.478971046917703 + "total": 20.4789710469177 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.01846427765949586, + "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 2.3863201082544565, - "polymer:FTmat-Transvibrational": 11.11037253388596, + "residue:Rovibrational": 2.386320108254459, + "polymer:FTmat-Transvibrational": 11.110372533885974, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.274062256427623 + "total": 18.27406225642764 } } } diff --git a/tests/regression/baselines/dna/frame_window.json b/tests/regression/baselines/dna/frame_window.json index c35d2211..23018395 100644 --- a/tests/regression/baselines/dna/frame_window.json +++ b/tests/regression/baselines/dna/frame_window.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.5821720528374943, + "united_atom:Rovibrational": 1.5821720528374947, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 27.397449238560412, - "polymer:FTmat-Transvibrational": 48.62026970762269, + "residue:Rovibrational": 28.153090862826048, + "polymer:FTmat-Transvibrational": 48.10401202541479, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 92.94333932620614 + "total": 93.18272326826387 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 2.5277936366208014, + "united_atom:Rovibrational": 2.527793636620802, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 24.80670067454149, - "polymer:FTmat-Transvibrational": 60.47397935339153, + "residue:Rovibrational": 24.738836376104466, + "polymer:FTmat-Transvibrational": 57.35678551116437, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 5.292271495278918, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 97.85965049646045 + "total": 94.67459235579626 } } } diff --git a/tests/regression/baselines/dna/grouping_each.json b/tests/regression/baselines/dna/grouping_each.json index 2cbef740..b5d797f1 100644 --- a/tests/regression/baselines/dna/grouping_each.json +++ b/tests/regression/baselines/dna/grouping_each.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.002160679012128457, + "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.376800684085249, - "polymer:FTmat-Transvibrational": 12.341104347192612, + "residue:Rovibrational": 3.376800684085247, + "polymer:FTmat-Transvibrational": 12.341104347192614, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 20.478971046917703 + "total": 20.4789710469177 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.01846427765949586, + "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 2.3863201082544565, - "polymer:FTmat-Transvibrational": 11.11037253388596, + "residue:Rovibrational": 2.386320108254459, + "polymer:FTmat-Transvibrational": 11.110372533885974, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.274062256427623 + "total": 18.27406225642764 } } } diff --git a/tests/regression/baselines/dna/selection_subset.json b/tests/regression/baselines/dna/selection_subset.json index 2cbef740..b5d797f1 100644 --- a/tests/regression/baselines/dna/selection_subset.json +++ b/tests/regression/baselines/dna/selection_subset.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.002160679012128457, + "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.376800684085249, - "polymer:FTmat-Transvibrational": 12.341104347192612, + "residue:Rovibrational": 3.376800684085247, + "polymer:FTmat-Transvibrational": 12.341104347192614, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 20.478971046917703 + "total": 20.4789710469177 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.01846427765949586, + "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 2.3863201082544565, - "polymer:FTmat-Transvibrational": 11.11037253388596, + "residue:Rovibrational": 2.386320108254459, + "polymer:FTmat-Transvibrational": 11.110372533885974, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.274062256427623 + "total": 18.27406225642764 } } } diff --git a/tests/regression/baselines/ethyl-acetate/axes_off.json b/tests/regression/baselines/ethyl-acetate/axes_off.json index 4c28d3bd..25ce7054 100644 --- a/tests/regression/baselines/ethyl-acetate/axes_off.json +++ b/tests/regression/baselines/ethyl-acetate/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.8081103094129065, - "united_atom:Rovibrational": 68.85184585731292, - "residue:FTmat-Transvibrational": 77.33844477785695, - "residue:FTmat-Rovibrational": 56.03921993686319, + "united_atom:Transvibrational": 1.4321699433975792, + "united_atom:Rovibrational": 78.46273034643444, + "residue:FTmat-Transvibrational": 75.78420694132267, + "residue:FTmat-Rovibrational": 56.746114081365306, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 210.9386071250987 + "total": 220.32620755617273 } } } diff --git a/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json b/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json index 8c68cce7..acd7f023 100644 --- a/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json +++ b/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 1.196367074472673, - "united_atom:Rovibrational": 82.36455154278131, - "residue:Transvibrational": 64.68750154134017, - "residue:Rovibrational": 58.903938937880085, + "united_atom:Transvibrational": 1.4321328326710805, + "united_atom:Rovibrational": 82.3645515427813, + "residue:Transvibrational": 65.5584231350494, + "residue:Rovibrational": 62.5487898763503, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 215.05334534012698 + "total": 219.80488363050483 } } } diff --git a/tests/regression/baselines/ethyl-acetate/default.json b/tests/regression/baselines/ethyl-acetate/default.json index 077cdbe3..681c02cb 100644 --- a/tests/regression/baselines/ethyl-acetate/default.json +++ b/tests/regression/baselines/ethyl-acetate/default.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 19.703248485425714, - "united_atom:Rovibrational": 49.35007067210558, - "residue:FTmat-Transvibrational": 67.91350627765567, - "residue:FTmat-Rovibrational": 60.042233035077246, + "united_atom:Transvibrational": 19.80599222598891, + "united_atom:Rovibrational": 49.35007067210563, + "residue:FTmat-Transvibrational": 68.04837872217398, + "residue:FTmat-Rovibrational": 59.99054731669011, "united_atom:Conformational": 8.175537881068413, "residue:Conformational": 0.0, "residue:Orientational": 65.33877737416202 }, - "total": 270.52337372549465 + "total": 270.70930419218905 } } } diff --git a/tests/regression/baselines/ethyl-acetate/frame_window.json b/tests/regression/baselines/ethyl-acetate/frame_window.json index be566d07..a39111db 100644 --- a/tests/regression/baselines/ethyl-acetate/frame_window.json +++ b/tests/regression/baselines/ethyl-acetate/frame_window.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 28.312711247966337, - "united_atom:Rovibrational": 51.99036142818903, - "residue:FTmat-Transvibrational": 67.80560626717748, - "residue:FTmat-Rovibrational": 55.1631201009248, + "united_atom:Transvibrational": 28.00207772060564, + "united_atom:Rovibrational": 51.990361428188855, + "residue:FTmat-Transvibrational": 69.58906302725345, + "residue:FTmat-Rovibrational": 54.42083576024036, "united_atom:Conformational": 8.635471458692102, "residue:Conformational": 0.0, "residue:Orientational": 3.8984476469128193 }, - "total": 215.80571814986257 + "total": 216.5362570418932 } } } diff --git a/tests/regression/baselines/ethyl-acetate/grouping_each.json b/tests/regression/baselines/ethyl-acetate/grouping_each.json index e8330e08..8ed0c003 100644 --- a/tests/regression/baselines/ethyl-acetate/grouping_each.json +++ b/tests/regression/baselines/ethyl-acetate/grouping_each.json @@ -3,26 +3,26 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.041680247513564334, - "residue:FTmat-Transvibrational": 13.339420001372439, + "united_atom:Rovibrational": 0.041680247513564424, + "residue:FTmat-Transvibrational": 13.339420001372426, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 13.381100248886003 + "total": 13.381100248885991 }, "1": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.1351925826754994, - "residue:FTmat-Transvibrational": 17.260433457821385, + "residue:FTmat-Transvibrational": 17.260433457821392, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 17.395626040496886 + "total": 17.395626040496893 }, "2": { "components": { @@ -39,86 +39,86 @@ "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.08920089761061596, - "residue:FTmat-Transvibrational": 17.349320458476775, + "united_atom:Rovibrational": 0.08920089761061602, + "residue:FTmat-Transvibrational": 17.349320458476765, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 17.438521356087392 + "total": 17.43852135608738 }, "4": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.245873201826214, - "residue:FTmat-Transvibrational": 14.544753730547711, + "united_atom:Rovibrational": 0.2458732018262139, + "residue:FTmat-Transvibrational": 14.544753730547697, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 14.790626932373925 + "total": 14.790626932373911 }, "5": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.026788453489210204, - "residue:FTmat-Transvibrational": 9.570910150584444, + "united_atom:Rovibrational": 0.02678845348921013, + "residue:FTmat-Transvibrational": 9.570910150584446, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 9.597698604073654 + "total": 9.597698604073656 }, "6": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.052298040051129174, - "residue:FTmat-Transvibrational": 12.801663361822174, + "united_atom:Rovibrational": 0.05229804005112911, + "residue:FTmat-Transvibrational": 12.801663361822166, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 12.853961401873303 + "total": 12.853961401873296 }, "7": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.29162538377256375, - "residue:FTmat-Transvibrational": 16.40926078565228, + "united_atom:Rovibrational": 0.29162538377256336, + "residue:FTmat-Transvibrational": 16.409260785652272, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 16.70088616942484 + "total": 16.700886169424834 }, "8": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0469384299833255, - "residue:FTmat-Transvibrational": 10.172098915253201, + "residue:FTmat-Transvibrational": 10.172098915253212, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 10.219037345236528 + "total": 10.219037345236538 }, "9": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.2807736872545627, - "residue:FTmat-Transvibrational": 12.020836126353892, + "residue:FTmat-Transvibrational": 12.020836126353894, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 12.301609813608454 + "total": 12.301609813608456 } } } diff --git a/tests/regression/baselines/ethyl-acetate/rad.json b/tests/regression/baselines/ethyl-acetate/rad.json index ee7df624..eabfffe2 100644 --- a/tests/regression/baselines/ethyl-acetate/rad.json +++ b/tests/regression/baselines/ethyl-acetate/rad.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 19.703248485425714, - "united_atom:Rovibrational": 49.35007067210558, - "residue:FTmat-Transvibrational": 67.91350627765567, - "residue:FTmat-Rovibrational": 60.042233035077246, + "united_atom:Transvibrational": 19.80599222598891, + "united_atom:Rovibrational": 49.35007067210563, + "residue:FTmat-Transvibrational": 68.04837872217398, + "residue:FTmat-Rovibrational": 59.99054731669011, "united_atom:Conformational": 8.175537881068413, "residue:Conformational": 0.0, "residue:Orientational": 30.739736508673403 }, - "total": 235.92433286000602 + "total": 236.11026332670048 } } } diff --git a/tests/regression/baselines/ethyl-acetate/selection_subset.json b/tests/regression/baselines/ethyl-acetate/selection_subset.json index 270dbbd5..e9f6818f 100644 --- a/tests/regression/baselines/ethyl-acetate/selection_subset.json +++ b/tests/regression/baselines/ethyl-acetate/selection_subset.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 1.196367074472673, - "united_atom:Rovibrational": 82.36455154278131, - "residue:FTmat-Transvibrational": 74.5939232239247, - "residue:FTmat-Rovibrational": 55.42964192531005, + "united_atom:Transvibrational": 1.4321328326710805, + "united_atom:Rovibrational": 82.3645515427813, + "residue:FTmat-Transvibrational": 75.17407583425236, + "residue:FTmat-Rovibrational": 56.01290067233877, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 221.48547001014148 + "total": 222.88464712569626 } } } diff --git a/tests/regression/baselines/methane/axes_off.json b/tests/regression/baselines/methane/axes_off.json index dddf93d3..c5f3cb2f 100644 --- a/tests/regression/baselines/methane/axes_off.json +++ b/tests/regression/baselines/methane/axes_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.51619525142699, - "united_atom:Rovibrational": 34.692556166968025, + "united_atom:Transvibrational": 45.405237016017985, + "united_atom:Rovibrational": 33.30477892995319, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.20875141839502 + "total": 78.71001594597118 } } } diff --git a/tests/regression/baselines/methane/combined_forcetorque_off.json b/tests/regression/baselines/methane/combined_forcetorque_off.json index 318c30c6..0e4d512c 100644 --- a/tests/regression/baselines/methane/combined_forcetorque_off.json +++ b/tests/regression/baselines/methane/combined_forcetorque_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.51619525142699, - "united_atom:Rovibrational": 34.651932322640015, + "united_atom:Transvibrational": 45.405237016017985, + "united_atom:Rovibrational": 33.24522051603423, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.168127574067 + "total": 78.65045753205222 } } } diff --git a/tests/regression/baselines/methane/default.json b/tests/regression/baselines/methane/default.json index d08ac60f..292abc03 100644 --- a/tests/regression/baselines/methane/default.json +++ b/tests/regression/baselines/methane/default.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 40.3239711717637, - "united_atom:Rovibrational": 33.60582165153992, + "united_atom:Transvibrational": 40.34034321075124, + "united_atom:Rovibrational": 33.78948111647671, "united_atom:Conformational": 0.0, "united_atom:Orientational": 3.596676624528629 }, - "total": 77.52646944783224 + "total": 77.72650095175658 } } } diff --git a/tests/regression/baselines/methane/frame_window.json b/tests/regression/baselines/methane/frame_window.json index 9a45dc98..29a58057 100644 --- a/tests/regression/baselines/methane/frame_window.json +++ b/tests/regression/baselines/methane/frame_window.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 40.70376001258969, - "united_atom:Rovibrational": 33.778792396823484, + "united_atom:Transvibrational": 40.53088385916688, + "united_atom:Rovibrational": 34.010057184978606, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 74.48255240941317 + "total": 74.54094104414548 } } } diff --git a/tests/regression/baselines/methane/grouping_each.json b/tests/regression/baselines/methane/grouping_each.json index 3b31963b..8e723dab 100644 --- a/tests/regression/baselines/methane/grouping_each.json +++ b/tests/regression/baselines/methane/grouping_each.json @@ -2,93 +2,93 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 24.315699188266926, - "united_atom:Rovibrational": 21.0483901242056, + "united_atom:Transvibrational": 24.315699188266905, + "united_atom:Rovibrational": 21.048390124205607, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 45.36408931247253 + "total": 45.364089312472515 }, "1": { "components": { - "united_atom:Transvibrational": 23.76608267046309, - "united_atom:Rovibrational": 16.769636839671296, + "united_atom:Transvibrational": 23.766082670463117, + "united_atom:Rovibrational": 16.769636839671286, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 40.535719510134385 + "total": 40.5357195101344 }, "2": { "components": { - "united_atom:Transvibrational": 24.833896219788347, - "united_atom:Rovibrational": 16.996392060962357, + "united_atom:Transvibrational": 24.833896219788343, + "united_atom:Rovibrational": 16.99639206096234, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 41.83028828075071 + "total": 41.83028828075068 }, "3": { "components": { - "united_atom:Transvibrational": 6.6723857079283215, - "united_atom:Rovibrational": 4.986376282798274, + "united_atom:Transvibrational": 6.672385707928316, + "united_atom:Rovibrational": 4.986376282798272, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.658761990726596 + "total": 11.658761990726589 }, "4": { "components": { - "united_atom:Transvibrational": 6.880461178899526, - "united_atom:Rovibrational": 4.441585994100298, + "united_atom:Transvibrational": 6.880461178899528, + "united_atom:Rovibrational": 4.441585994100294, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.322047172999824 + "total": 11.322047172999822 }, "5": { "components": { - "united_atom:Transvibrational": 15.473092273577388, + "united_atom:Transvibrational": 15.473092273577436, "united_atom:Rovibrational": 7.777083478334702, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 23.25017575191209 + "total": 23.25017575191214 }, "6": { "components": { - "united_atom:Transvibrational": 25.694168010993888, - "united_atom:Rovibrational": 6.731392483940261, + "united_atom:Transvibrational": 25.694168010993906, + "united_atom:Rovibrational": 6.731392483940268, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 32.425560494934146 + "total": 32.425560494934174 }, "7": { "components": { - "united_atom:Transvibrational": 10.533257828925997, - "united_atom:Rovibrational": 8.97563913301586, + "united_atom:Transvibrational": 10.533257828925992, + "united_atom:Rovibrational": 8.975639133015871, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 19.508896961941858 + "total": 19.508896961941865 }, "8": { "components": { - "united_atom:Transvibrational": 7.332978272264879, - "united_atom:Rovibrational": 3.0418502362906086, + "united_atom:Transvibrational": 7.332978272264892, + "united_atom:Rovibrational": 3.0418502362906077, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 10.374828508555488 + "total": 10.374828508555499 }, "9": { "components": { "united_atom:Transvibrational": 4.023932761002867, - "united_atom:Rovibrational": 8.289324383636089, + "united_atom:Rovibrational": 8.289324383636105, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 12.313257144638957 + "total": 12.313257144638971 } } } diff --git a/tests/regression/baselines/methane/rad.json b/tests/regression/baselines/methane/rad.json index df8fbbd7..7cd82846 100644 --- a/tests/regression/baselines/methane/rad.json +++ b/tests/regression/baselines/methane/rad.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 40.3239711717637, - "united_atom:Rovibrational": 33.60582165153992, + "united_atom:Transvibrational": 40.34034321075124, + "united_atom:Rovibrational": 33.78948111647671, "united_atom:Conformational": 0.0, "united_atom:Orientational": 6.667209510980459 }, - "total": 80.59700233428407 + "total": 80.7970338382084 } } } diff --git a/tests/regression/baselines/methane/selection_subset.json b/tests/regression/baselines/methane/selection_subset.json index 318c30c6..0e4d512c 100644 --- a/tests/regression/baselines/methane/selection_subset.json +++ b/tests/regression/baselines/methane/selection_subset.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.51619525142699, - "united_atom:Rovibrational": 34.651932322640015, + "united_atom:Transvibrational": 45.405237016017985, + "united_atom:Rovibrational": 33.24522051603423, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.168127574067 + "total": 78.65045753205222 } } } diff --git a/tests/regression/baselines/methanol/axes_off.json b/tests/regression/baselines/methanol/axes_off.json index d16ce042..2d431fbf 100644 --- a/tests/regression/baselines/methanol/axes_off.json +++ b/tests/regression/baselines/methanol/axes_off.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 38.62138020563927, - "residue:FTmat-Transvibrational": 71.39139776743173, - "residue:FTmat-Rovibrational": 42.43745474015418, + "united_atom:Rovibrational": 41.19579286890263, + "residue:FTmat-Transvibrational": 73.48764222316326, + "residue:FTmat-Rovibrational": 40.99443237927875, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 152.45023271322518 + "total": 155.67786747134465 } } } diff --git a/tests/regression/baselines/methanol/combined_forcetorque_off.json b/tests/regression/baselines/methanol/combined_forcetorque_off.json index 634a9deb..2165d8a2 100644 --- a/tests/regression/baselines/methanol/combined_forcetorque_off.json +++ b/tests/regression/baselines/methanol/combined_forcetorque_off.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 49.59060714158691, - "residue:Transvibrational": 62.34591927524234, - "residue:Rovibrational": 32.010073141644966, + "united_atom:Rovibrational": 49.59060714158679, + "residue:Transvibrational": 62.67397919657055, + "residue:Rovibrational": 33.87563561907027, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 143.94659955847422 + "total": 146.1402219572276 } } } diff --git a/tests/regression/baselines/methanol/default.json b/tests/regression/baselines/methanol/default.json index be7f59aa..74682ab9 100644 --- a/tests/regression/baselines/methanol/default.json +++ b/tests/regression/baselines/methanol/default.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 31.71683454772323, - "residue:FTmat-Transvibrational": 57.967437606219264, - "residue:FTmat-Rovibrational": 32.05829756161347, + "united_atom:Rovibrational": 31.716834547723234, + "residue:FTmat-Transvibrational": 57.97480955865025, + "residue:FTmat-Rovibrational": 32.052731280950525, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 31.66363493251588 }, - "total": 153.40620464807185 + "total": 153.4080103198399 } } } diff --git a/tests/regression/baselines/methanol/frame_window.json b/tests/regression/baselines/methanol/frame_window.json index 41bd2a34..2d402dba 100644 --- a/tests/regression/baselines/methanol/frame_window.json +++ b/tests/regression/baselines/methanol/frame_window.json @@ -4,13 +4,13 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 34.6755419354061, - "residue:FTmat-Transvibrational": 61.225853411706915, - "residue:FTmat-Rovibrational": 29.74713345439499, + "residue:FTmat-Transvibrational": 62.942440400794176, + "residue:FTmat-Rovibrational": 29.12139211619086, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 125.64852880150801 + "total": 126.73937445239113 } } } diff --git a/tests/regression/baselines/methanol/grouping_each.json b/tests/regression/baselines/methanol/grouping_each.json index bba3b3c8..55cce68d 100644 --- a/tests/regression/baselines/methanol/grouping_each.json +++ b/tests/regression/baselines/methanol/grouping_each.json @@ -4,43 +4,43 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 3.6907058707318594, - "residue:FTmat-Transvibrational": 2.3780157804238655, + "residue:FTmat-Transvibrational": 2.37801578042395, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 6.068721651155725 + "total": 6.068721651155809 }, "1": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.527531744140127, - "residue:FTmat-Transvibrational": 6.542005999539831, + "residue:FTmat-Transvibrational": 6.54200599953984, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.069537743679958 + "total": 7.069537743679967 }, "2": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 1.6420992201948423, - "residue:FTmat-Transvibrational": 1.956061819377735, + "residue:FTmat-Transvibrational": 1.9560618193776211, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 3.5981610395725774 + "total": 3.5981610395724637 }, "3": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 1.09131345956036, - "residue:FTmat-Transvibrational": 0.00010873872941396156, + "residue:FTmat-Transvibrational": 0.00010873872941394453, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -52,73 +52,73 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 3.0175220560507166, - "residue:FTmat-Transvibrational": 0.039222512262787265, + "residue:FTmat-Transvibrational": 0.03922251226278259, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 3.056744568313504 + "total": 3.056744568313499 }, "5": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.7113434639378043, - "residue:FTmat-Transvibrational": 6.420669321384725, + "residue:FTmat-Transvibrational": 6.4206693213845005, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.132012785322529 + "total": 7.1320127853223045 }, "6": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.8814857352503516, - "residue:FTmat-Transvibrational": 0.0020168609040522737, + "united_atom:Rovibrational": 1.8814857352503533, + "residue:FTmat-Transvibrational": 0.002016860904052387, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 1.8835025961544039 + "total": 1.8835025961544056 }, "7": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.31891831875623067, - "residue:FTmat-Transvibrational": 0.22492845355007476, + "residue:FTmat-Transvibrational": 0.2249284535500741, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 0.5438467723063054 + "total": 0.5438467723063047 }, "8": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.3866864927610838, - "residue:FTmat-Transvibrational": 7.095998287788902, + "united_atom:Rovibrational": 1.3866864927610842, + "residue:FTmat-Transvibrational": 7.095998287789705, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 8.482684780549986 + "total": 8.48268478055079 }, "9": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.3408829290752051, - "residue:FTmat-Transvibrational": 0.0004316354724950617, + "residue:FTmat-Transvibrational": 0.0004316354724951205, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 0.3413145645477002 + "total": 0.34131456454770026 } } } diff --git a/tests/regression/baselines/methanol/rad.json b/tests/regression/baselines/methanol/rad.json index 3def6f3d..9f0c0f2e 100644 --- a/tests/regression/baselines/methanol/rad.json +++ b/tests/regression/baselines/methanol/rad.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 31.71683454772323, - "residue:FTmat-Transvibrational": 57.967437606219264, - "residue:FTmat-Rovibrational": 32.05829756161347, + "united_atom:Rovibrational": 31.716834547723234, + "residue:FTmat-Transvibrational": 57.97480955865025, + "residue:FTmat-Rovibrational": 32.052731280950525, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 17.021167486252484 }, - "total": 138.76373720180845 + "total": 138.7655428735765 } } } diff --git a/tests/regression/baselines/methanol/selection_subset.json b/tests/regression/baselines/methanol/selection_subset.json index 293daec6..c934f7ce 100644 --- a/tests/regression/baselines/methanol/selection_subset.json +++ b/tests/regression/baselines/methanol/selection_subset.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 49.59060714158691, - "residue:FTmat-Transvibrational": 74.80122215540344, - "residue:FTmat-Rovibrational": 27.55539097066781, + "united_atom:Rovibrational": 49.59060714158679, + "residue:FTmat-Transvibrational": 73.07680599953918, + "residue:FTmat-Rovibrational": 28.311572968947917, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 151.94722026765817 + "total": 150.9789861100739 } } } diff --git a/tests/regression/baselines/octonol/axes_off.json b/tests/regression/baselines/octonol/axes_off.json index bc391e6f..96f849d5 100644 --- a/tests/regression/baselines/octonol/axes_off.json +++ b/tests/regression/baselines/octonol/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.2907129992470817, - "united_atom:Rovibrational": 16.39249280495534, - "residue:FTmat-Transvibrational": 83.57043751308888, - "residue:FTmat-Rovibrational": 58.87291960143169, + "united_atom:Transvibrational": 0.2813477461801644, + "united_atom:Rovibrational": 11.777756530643426, + "residue:FTmat-Transvibrational": 81.9451817383594, + "residue:FTmat-Rovibrational": 59.553917441172246, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 201.75720638000655 + "total": 196.18884691763878 } } } diff --git a/tests/regression/baselines/octonol/combined_forcetorque_off.json b/tests/regression/baselines/octonol/combined_forcetorque_off.json index 920589a7..91be627e 100644 --- a/tests/regression/baselines/octonol/combined_forcetorque_off.json +++ b/tests/regression/baselines/octonol/combined_forcetorque_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.34382967782781193, - "united_atom:Rovibrational": 19.154228264604278, - "residue:Transvibrational": 74.72816183790984, - "residue:Rovibrational": 60.84390144550801, + "united_atom:Transvibrational": 0.2801426785866467, + "united_atom:Rovibrational": 19.154228264604267, + "residue:Transvibrational": 73.10868503314676, + "residue:Rovibrational": 61.50929695375962, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 197.70076468713353 + "total": 196.68299639138087 } } } diff --git a/tests/regression/baselines/octonol/default.json b/tests/regression/baselines/octonol/default.json index fdd22382..f0c9cd0f 100644 --- a/tests/regression/baselines/octonol/default.json +++ b/tests/regression/baselines/octonol/default.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 37.860034170693694, - "united_atom:Rovibrational": 84.2608785308744, - "residue:FTmat-Transvibrational": 66.13571365167344, - "residue:FTmat-Rovibrational": 57.090651827515686, + "united_atom:Transvibrational": 37.773345787136414, + "united_atom:Rovibrational": 84.26087853087442, + "residue:FTmat-Transvibrational": 66.1742370152873, + "residue:FTmat-Rovibrational": 57.07006496269577, "united_atom:Conformational": 34.22940197506605, "residue:Conformational": 0.0, "residue:Orientational": 74.78356386019003 }, - "total": 354.36024401601327 + "total": 354.29149213125 } } } diff --git a/tests/regression/baselines/octonol/frame_window.json b/tests/regression/baselines/octonol/frame_window.json index 5c07dcc2..bcb2c2b9 100644 --- a/tests/regression/baselines/octonol/frame_window.json +++ b/tests/regression/baselines/octonol/frame_window.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 65.86600728016141, - "united_atom:Rovibrational": 162.26463085986236, - "residue:FTmat-Transvibrational": 74.84326467422125, - "residue:FTmat-Rovibrational": 60.95710412746361, + "united_atom:Transvibrational": 71.9625416292299, + "united_atom:Rovibrational": 162.26463085986254, + "residue:FTmat-Transvibrational": 76.7667616108701, + "residue:FTmat-Rovibrational": 60.17313284253718, "united_atom:Conformational": 16.651144380045313, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 406.37330124036134 + "total": 413.60936124115244 } } } diff --git a/tests/regression/baselines/octonol/grouping_each.json b/tests/regression/baselines/octonol/grouping_each.json index b4801742..536a151a 100644 --- a/tests/regression/baselines/octonol/grouping_each.json +++ b/tests/regression/baselines/octonol/grouping_each.json @@ -3,50 +3,50 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 6.942013165337579e-05, - "residue:FTmat-Transvibrational": 18.33494873681406, + "united_atom:Rovibrational": 6.942013165337589e-05, + "residue:FTmat-Transvibrational": 18.334948736814024, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 18.33501815694571 + "total": 18.335018156945676 }, "1": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00013794104464519378, - "residue:FTmat-Transvibrational": 14.571797812433102, + "residue:FTmat-Transvibrational": 14.571797812433097, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 45.863560270951176 }, - "total": 60.43549602442892 + "total": 60.435496024428915 }, "2": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0007753303955700146, - "residue:FTmat-Transvibrational": 11.64466865126831, + "united_atom:Rovibrational": 0.000775330395570017, + "residue:FTmat-Transvibrational": 11.644668651268317, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 11.64544398166388 + "total": 11.645443981663886 }, "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0031285818933102145, - "residue:FTmat-Transvibrational": 21.24135891910478, + "united_atom:Rovibrational": 0.0031285818933102097, + "residue:FTmat-Transvibrational": 21.241358919104755, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 21.24448750099809 + "total": 21.244487500998066 }, "4": { "components": { @@ -64,37 +64,37 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.005775850934008876, - "residue:FTmat-Transvibrational": 7.615636453348747, + "residue:FTmat-Transvibrational": 7.61563645334877, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.621412304282756 + "total": 7.621412304282779 }, "6": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00028812747686091, - "residue:FTmat-Transvibrational": 16.555914111511576, + "residue:FTmat-Transvibrational": 16.555914111511573, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 16.556202238988437 + "total": 16.556202238988433 }, "7": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0013568745282136598, - "residue:FTmat-Transvibrational": 15.71067757186967, + "residue:FTmat-Transvibrational": 15.710677571869644, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.712034446397883 + "total": 15.712034446397857 }, "8": { "components": { @@ -112,13 +112,13 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00015446787843376823, - "residue:FTmat-Transvibrational": 20.97761266375896, + "residue:FTmat-Transvibrational": 20.97761266375899, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 45.863560270951176 }, - "total": 66.84132740258858 + "total": 66.8413274025886 } } } diff --git a/tests/regression/baselines/octonol/rad.json b/tests/regression/baselines/octonol/rad.json index c2c20839..82050480 100644 --- a/tests/regression/baselines/octonol/rad.json +++ b/tests/regression/baselines/octonol/rad.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 37.860034170693694, - "united_atom:Rovibrational": 84.2608785308744, - "residue:FTmat-Transvibrational": 66.13571365167344, - "residue:FTmat-Rovibrational": 57.090651827515686, + "united_atom:Transvibrational": 37.773345787136414, + "united_atom:Rovibrational": 84.26087853087442, + "residue:FTmat-Transvibrational": 66.1742370152873, + "residue:FTmat-Rovibrational": 57.07006496269577, "united_atom:Conformational": 34.22940197506605, "residue:Conformational": 0.0, "residue:Orientational": 28.084239413273323 }, - "total": 307.66091956909656 + "total": 307.5921676843333 } } } diff --git a/tests/regression/baselines/octonol/selection_subset.json b/tests/regression/baselines/octonol/selection_subset.json index 5f9d18f1..280f05b5 100644 --- a/tests/regression/baselines/octonol/selection_subset.json +++ b/tests/regression/baselines/octonol/selection_subset.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.34382967782781193, - "united_atom:Rovibrational": 19.154228264604278, - "residue:FTmat-Transvibrational": 83.17889385114952, - "residue:FTmat-Rovibrational": 57.480841206687685, + "united_atom:Transvibrational": 0.2801426785866467, + "united_atom:Rovibrational": 19.154228264604267, + "residue:FTmat-Transvibrational": 82.11968297566693, + "residue:FTmat-Rovibrational": 57.71012488478221, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 202.78843646155286 + "total": 201.89482226492362 } } } diff --git a/tests/regression/baselines/water/axes_off.json b/tests/regression/baselines/water/axes_off.json index 9b798bdc..ec47bd85 100644 --- a/tests/regression/baselines/water/axes_off.json +++ b/tests/regression/baselines/water/axes_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.307840626636324, + "united_atom:Transvibrational": 49.78087138438188, + "united_atom:Rovibrational": 18.360896655959607, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.5292978562903 + "total": 68.14176804034149 } } } diff --git a/tests/regression/baselines/water/combined_forcetorque_off.json b/tests/regression/baselines/water/combined_forcetorque_off.json index 2e632568..f2c917b9 100644 --- a/tests/regression/baselines/water/combined_forcetorque_off.json +++ b/tests/regression/baselines/water/combined_forcetorque_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.232634718413053, + "united_atom:Transvibrational": 49.78087138438188, + "united_atom:Rovibrational": 18.241329771851756, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 68.02220115623363 } } } diff --git a/tests/regression/baselines/water/default.json b/tests/regression/baselines/water/default.json index c98bc3eb..51df3454 100644 --- a/tests/regression/baselines/water/default.json +++ b/tests/regression/baselines/water/default.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 43.725393337304425, - "united_atom:Rovibrational": 17.28911070147887, + "united_atom:Transvibrational": 43.71553411557926, + "united_atom:Rovibrational": 17.159953317592837, "united_atom:Conformational": 0.0, "united_atom:Orientational": 32.193445593362114 }, - "total": 93.20794963214541 + "total": 93.06893302653421 } } } diff --git a/tests/regression/baselines/water/frame_window.json b/tests/regression/baselines/water/frame_window.json index c6ae550d..58329f9e 100644 --- a/tests/regression/baselines/water/frame_window.json +++ b/tests/regression/baselines/water/frame_window.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 46.684099714230925, - "united_atom:Rovibrational": 17.694014405444744, + "united_atom:Transvibrational": 46.361096977161964, + "united_atom:Rovibrational": 17.208799819818985, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 64.37811411967567 + "total": 63.56989679698095 } } } diff --git a/tests/regression/baselines/water/grouping_each.json b/tests/regression/baselines/water/grouping_each.json index acccd86b..c88ee7c1 100644 --- a/tests/regression/baselines/water/grouping_each.json +++ b/tests/regression/baselines/water/grouping_each.json @@ -3,16 +3,16 @@ "0": { "components": { "united_atom:Transvibrational": 14.945907953805552, - "united_atom:Rovibrational": 1.8947243953648254, + "united_atom:Rovibrational": 1.8947243953648225, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 16.840632349170377 + "total": 16.840632349170374 }, "1": { "components": { - "united_atom:Transvibrational": 8.111522208287779, - "united_atom:Rovibrational": 0.9607747968334215, + "united_atom:Transvibrational": 8.111522208287775, + "united_atom:Rovibrational": 0.960774796833424, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, @@ -20,12 +20,12 @@ }, "2": { "components": { - "united_atom:Transvibrational": 15.79497347968759, + "united_atom:Transvibrational": 15.794973479687597, "united_atom:Rovibrational": 4.606072530590255, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 20.401046010277845 + "total": 20.401046010277852 }, "3": { "components": { @@ -38,43 +38,43 @@ }, "4": { "components": { - "united_atom:Transvibrational": 16.254161245740693, - "united_atom:Rovibrational": 1.367597374110767, + "united_atom:Transvibrational": 16.254161245740683, + "united_atom:Rovibrational": 1.3675973741107645, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 17.62175861985146 + "total": 17.621758619851448 }, "5": { "components": { - "united_atom:Transvibrational": 11.57779876203329, + "united_atom:Transvibrational": 11.577798762033282, "united_atom:Rovibrational": 7.351163568004953, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 18.928962330038242 + "total": 18.928962330038235 }, "6": { "components": { - "united_atom:Transvibrational": 10.172061262201801, - "united_atom:Rovibrational": 3.671537296888502, + "united_atom:Transvibrational": 10.172061262201797, + "united_atom:Rovibrational": 3.6715372968885003, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 13.843598559090303 + "total": 13.843598559090298 }, "7": { "components": { - "united_atom:Transvibrational": 13.49951045186194, + "united_atom:Transvibrational": 13.499510451861937, "united_atom:Rovibrational": 1.7029491215274863, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 15.202459573389428 + "total": 15.202459573389424 }, "8": { "components": { - "united_atom:Transvibrational": 16.597759171924583, + "united_atom:Transvibrational": 16.59775917192458, "united_atom:Rovibrational": 1.6190289365617598, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 @@ -83,12 +83,12 @@ }, "9": { "components": { - "united_atom:Transvibrational": 13.731375187064538, + "united_atom:Transvibrational": 13.731375187064533, "united_atom:Rovibrational": 5.650620990305761, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 19.381996177370297 + "total": 19.381996177370294 } } } diff --git a/tests/regression/baselines/water/rad.json b/tests/regression/baselines/water/rad.json index cbda37a9..c0f96bc3 100644 --- a/tests/regression/baselines/water/rad.json +++ b/tests/regression/baselines/water/rad.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 79.20298312418278, - "united_atom:Rovibrational": 50.90260688502127, + "united_atom:Transvibrational": 79.1931184196587, + "united_atom:Rovibrational": 50.750640399631905, "united_atom:Conformational": 0.0, "united_atom:Orientational": 22.760377489372107 }, - "total": 152.86596749857614 + "total": 152.70413630866273 } } } diff --git a/tests/regression/baselines/water/selection_subset.json b/tests/regression/baselines/water/selection_subset.json index 2e632568..f2c917b9 100644 --- a/tests/regression/baselines/water/selection_subset.json +++ b/tests/regression/baselines/water/selection_subset.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.232634718413053, + "united_atom:Transvibrational": 49.78087138438188, + "united_atom:Rovibrational": 18.241329771851756, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 68.02220115623363 } } } diff --git a/tests/regression/baselines/water/water_off.json b/tests/regression/baselines/water/water_off.json index 2e632568..f2c917b9 100644 --- a/tests/regression/baselines/water/water_off.json +++ b/tests/regression/baselines/water/water_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.232634718413053, + "united_atom:Transvibrational": 49.78087138438188, + "united_atom:Rovibrational": 18.241329771851756, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 68.02220115623363 } } } diff --git a/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py b/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py index 19ed3813..38bd6ddd 100644 --- a/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py +++ b/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py @@ -494,13 +494,14 @@ def test_build_ua_vectors_uses_cached_axes_topology_when_available(): axes_manager.get_UA_axes.assert_not_called() -def test_build_ua_vectors_uses_vanilla_axes_when_not_customised(): +def test_build_ua_vectors_uses_molecule_axes_when_not_customised(): node = FrameCovarianceNode() axes_manager = MagicMock() - axes_manager.get_vanilla_axes.return_value = ( + axes_manager.get_molecule_axes.return_value = ( np.eye(3), np.array([1.0, 2.0, 3.0]), ) + axes_manager.get_principal_axes_from_group.return_value = np.eye(3) node._ft.get_weighted_forces = MagicMock(return_value=np.array([1.0, 0.0, 0.0])) node._ft.get_weighted_torques = MagicMock(return_value=np.array([0.0, 1.0, 0.0])) @@ -521,7 +522,7 @@ def test_build_ua_vectors_uses_vanilla_axes_when_not_customised(): ) assert make_whole.call_count == 2 - axes_manager.get_vanilla_axes.assert_called_once() + axes_manager.get_molecule_axes.assert_called_once() def test_build_residue_vectors_uses_residue_axes(): @@ -614,15 +615,16 @@ def test_get_residue_axes_customised_delegates_to_axes_manager(): ) -def test_get_residue_axes_vanilla_uses_make_whole_and_vanilla_axes(): +def test_get_residue_axes_molecule_uses_make_whole_and_molecule_axes(): node = FrameCovarianceNode() mol = FakeMolecule(n_residues=1) bead = FakeAtomGroup("res") axes_manager = MagicMock() - axes_manager.get_vanilla_axes.return_value = ( + axes_manager.get_molecule_axes.return_value = ( np.eye(3), np.array([1.0, 2.0, 3.0]), ) + axes_manager.get_principal_axes_from_group.return_value = np.eye(3) with patch("CodeEntropy.levels.nodes.covariance.make_whole") as make_whole: trans_axes, rot_axes, center, moi = node._get_residue_axes( @@ -645,15 +647,16 @@ def test_get_residue_axes_vanilla_uses_make_whole_and_vanilla_axes(): np.testing.assert_allclose(moi, np.array([1.0, 2.0, 3.0])) -def test_get_polymer_axes_uses_make_whole_and_vanilla_axes(): +def test_get_polymer_axes_uses_make_whole_and_molecule_axes(): node = FrameCovarianceNode() mol = FakeMolecule(n_residues=1) bead = FakeAtomGroup("poly") axes_manager = MagicMock() - axes_manager.get_vanilla_axes.return_value = ( + axes_manager.get_molecule_axes.return_value = ( np.eye(3), np.array([1.0, 2.0, 3.0]), ) + axes_manager.get_principal_axes_from_group.return_value = np.eye(3) with patch("CodeEntropy.levels.nodes.covariance.make_whole") as make_whole: trans_axes, rot_axes, center, moi = node._get_polymer_axes( diff --git a/tests/unit/CodeEntropy/levels/test_axes.py b/tests/unit/CodeEntropy/levels/test_axes.py index 2b856a08..ba1d6c81 100644 --- a/tests/unit/CodeEntropy/levels/test_axes.py +++ b/tests/unit/CodeEntropy/levels/test_axes.py @@ -1,5 +1,6 @@ from unittest.mock import MagicMock +import MDAnalysis as mda import numpy as np import pytest @@ -106,7 +107,7 @@ def _select_atoms(q): monkeypatch.setattr(ax, "get_moment_of_inertia_tensor", lambda **kwargs: np.eye(3)) monkeypatch.setattr( ax, - "get_custom_principal_axes", + "get_principal_axes_from_tensor", lambda moi: (np.eye(3), np.array([3.0, 2.0, 1.0])), ) @@ -128,7 +129,6 @@ def test_get_residue_axes_one_residue_uses_principal_axes(monkeypatch): u = MagicMock() u.dimensions = np.array([10.0, 10.0, 10.0, 90, 90, 90]) - u.atoms.principal_axes.return_value = np.eye(3) # atom_set non-empty => bonded branch def _select_atoms(q): @@ -158,7 +158,6 @@ def test_get_UA_axes_uses_principal_axes_when_single_heavy(monkeypatch): ax = AxesCalculator() u = MagicMock() u.dimensions = np.array([10.0, 10.0, 10.0, 90, 90, 90]) - u.atoms.principal_axes.return_value = np.eye(3) u.center_of_mass.return_value = np.array([[4.0, 0.0, 0.0]]) # heavy_atoms length <= 1 => principal_axes path @@ -226,23 +225,23 @@ def _sel(q): ax.get_UA_axes(u, index=5, res_position=None) -def test_get_custom_axes_degenerate_axis1_raises(): +def test_get_bonded_vector_axes_degenerate_axis1_raises(): ax = AxesCalculator() a = np.zeros(3) b_list = [np.zeros(3)] with pytest.raises(ValueError): - ax.get_custom_axes( + ax.get_bonded_vector_axes( a=a, b_list=b_list, c=np.zeros(3), dimensions=np.array([10.0, 10.0, 10.0]) ) -def test_get_custom_axes_normalizes_and_uses_bc_when_multiple_b(monkeypatch): +def test_get_bonded_vector_axes_normalizes_and_uses_bc_when_multiple_b(monkeypatch): ax = AxesCalculator() a = np.array([0.0, 0.0, 0.0]) b_list = [np.array([1.0, 0.0, 0.0]), np.array([1.0, 0.0, 0.0])] c = np.array([0.0, 1.0, 0.0]) - axes = ax.get_custom_axes( + axes = ax.get_bonded_vector_axes( a=a, b_list=b_list, c=c, dimensions=np.array([10.0, 10.0, 10.0]) ) assert axes.shape == (3, 3) @@ -292,10 +291,10 @@ def test_get_flipped_axes_flips_negative_dot(): assert np.allclose(flipped[0], np.array([1.0, 0.0, 0.0])) -def test_get_custom_principal_axes_flips_z_when_left_handed(): +def test_get_principal_axes_from_tensor_returns_axes_and_moments(): ax = AxesCalculator() moi = np.eye(3) - axes, vals = ax.get_custom_principal_axes(moi) + axes, vals = ax.get_principal_axes_from_tensor(moi) assert axes.shape == (3, 3) assert vals.shape == (3,) @@ -322,24 +321,167 @@ def test_get_UA_masses_sums_bonded_hydrogens(): assert masses == [14.0] -def test_get_vanilla_axes_sorts_eigenvalues_desc_by_abs(monkeypatch): +def test_get_molecule_axes_sorts_eigenvalues_desc_by_abs(monkeypatch): ax = AxesCalculator() mol = MagicMock() moi_tensor = np.diag([1.0, -10.0, 3.0]) mol.moment_of_inertia.return_value = moi_tensor - mol.principal_axes.return_value = np.eye(3) mol.atoms = MagicMock() # avoid real MDAnalysis unwrap monkeypatch.setattr("CodeEntropy.levels.axes.make_whole", lambda _ag: None) - axes, moments = ax.get_vanilla_axes(mol) + axes, moments = ax.get_molecule_axes(mol) assert axes.shape == (3, 3) # sorted by abs descending => -10, 3, 1 assert np.allclose(moments, np.array([-10.0, 3.0, 1.0])) +def test_get_principal_axes_sorts_by_descending_eigenvalue(): + ax = AxesCalculator() + group = MagicMock() + group.atoms.moment_of_inertia.return_value = np.diag([1.0, 3.0, 2.0]) + + axes = ax.get_principal_axes_from_group(group) + + # eigenvalues 3, 2, 1 => rows along y, z, x (sign may differ) + expected = np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]], dtype=float) + assert np.allclose(np.abs(axes), expected) + + +def test_get_principal_axes_orthonormal_and_right_handed_for_near_degenerate(): + ax = AxesCalculator() + rng = np.random.default_rng(0) + q, _ = np.linalg.qr(rng.normal(size=(3, 3))) + tensor = q @ np.diag([1.0, 1.0 + 1e-9, 5.0]) @ q.T + group = MagicMock() + group.atoms.moment_of_inertia.return_value = tensor + + axes = ax.get_principal_axes_from_group(group) + + assert np.allclose(axes @ axes.T, np.eye(3), atol=1e-12) + assert np.isclose(np.linalg.det(axes), 1.0) + assert np.isclose(abs(np.dot(axes[0], q[:, 2])), 1.0) + + +def _scrambled_eigh(seed): + """Return an ``eigh`` that gives valid but arbitrary signs and degenerate bases.""" + rng = np.random.default_rng(seed) + real_eigh = np.linalg.eigh + + def scrambled(matrix): + values, vectors = real_eigh(matrix) + n = len(values) + for i in range(n): + for j in range(i + 1, n): + if np.isclose(values[i], values[j], rtol=1e-5): + angle = rng.uniform(0, 2 * np.pi) + c, s = np.cos(angle), np.sin(angle) + vi, vj = vectors[:, i].copy(), vectors[:, j].copy() + vectors[:, i] = c * vi + s * vj + vectors[:, j] = -s * vi + c * vj + return values, vectors * rng.choice([-1.0, 1.0], size=n) + + return scrambled + + +def _example_tensors(): + rng = np.random.default_rng(1) + q, _ = np.linalg.qr(rng.normal(size=(3, 3))) + return { + "asymmetric_top": q @ np.diag([5.0, 3.0, 1.0]) @ q.T, + "linear": q @ np.diag([4.0, 4.0, 0.0]) @ q.T, + "symmetric_top": q @ np.diag([5.0, 2.0, 2.0]) @ q.T, + "spherical_top": 3.0 * np.eye(3), + } + + +@pytest.mark.parametrize("name", list(_example_tensors())) +def test_get_principal_axes_from_tensor_orthonormal_right_handed_and_diagonalising( + name, +): + ax = AxesCalculator() + tensor = _example_tensors()[name] + + axes, moments = ax.get_principal_axes_from_tensor(tensor) + + assert np.allclose(axes @ axes.T, np.eye(3), atol=1e-12) + assert np.isclose(np.linalg.det(axes), 1.0) + assert np.allclose(axes @ tensor @ axes.T, np.diag(moments), atol=1e-12) + assert np.all(np.diff(np.abs(moments)) <= 1e-12) + + +@pytest.mark.parametrize("name", list(_example_tensors())) +def test_get_principal_axes_from_tensor_independent_of_eigensolver_choices( + monkeypatch, name +): + ax = AxesCalculator() + tensor = _example_tensors()[name] + expected_axes, expected_moments = ax.get_principal_axes_from_tensor(tensor) + + for seed in range(20): + monkeypatch.setattr(np.linalg, "eigh", _scrambled_eigh(seed)) + axes, moments = ax.get_principal_axes_from_tensor(tensor) + assert np.allclose(axes, expected_axes, atol=1e-9) + assert np.allclose(moments, expected_moments) + + +@pytest.mark.parametrize("name", list(_example_tensors())) +def test_get_principal_axes_from_tensor_stable_under_rounding_level_noise(name): + ax = AxesCalculator() + tensor = _example_tensors()[name] + expected_axes, _ = ax.get_principal_axes_from_tensor(tensor) + rng = np.random.default_rng(2) + + for _ in range(50): + noise = rng.normal(scale=1e-7, size=(3, 3)) + axes, _ = ax.get_principal_axes_from_tensor(tensor + (noise + noise.T) / 2) + assert np.allclose(axes, expected_axes, atol=1e-4) + + +def test_get_principal_axes_from_tensor_keeps_unique_axis_of_linear_tensor_exact(): + ax = AxesCalculator() + direction = np.array([1.0, -2.0, 0.5]) + direction /= np.linalg.norm(direction) + tensor = 4.0 * (np.eye(3) - np.outer(direction, direction)) + + axes, moments = ax.get_principal_axes_from_tensor(tensor) + + assert np.isclose(moments[2], 0.0, atol=1e-12) + assert np.isclose(abs(axes[2] @ direction), 1.0, atol=1e-12) + + +def test_get_principal_axes_from_tensor_signs_first_two_axes_along_reference(): + ax = AxesCalculator() + tensor = np.diag([5.0, 3.0, 1.0]) + + axes, _ = ax.get_principal_axes_from_tensor(tensor) + + assert axes[0] @ np.array([1.0, 2.0, 3.0]) > 0 + assert axes[1] @ np.array([1.0, 2.0, 3.0]) > 0 + + +def test_get_molecule_axes_moments_ignore_position_relative_to_box(): + """Shifting a molecule by a box vector must not change its moments.""" + universe = mda.Universe.empty( + n_atoms=3, n_residues=1, atom_resindex=[0, 0, 0], trajectory=True + ) + universe.add_TopologyAttr("masses", [16.0, 1.0, 1.0]) + universe.add_TopologyAttr("bonds", [(0, 1), (0, 2)]) + universe.dimensions = [50.0, 50.0, 50.0, 90.0, 90.0, 90.0] + positions = np.array([[0.0, 0.0, 0.0], [0.96, 0.0, 0.0], [-0.24, 0.93, 0.0]]) + ax = AxesCalculator() + + universe.atoms.positions = positions + 25.0 + _, moments = ax.get_molecule_axes(universe.atoms) + universe.atoms.positions = positions + 25.0 + np.array([50.0, 0.0, 0.0]) + _, shifted_moments = ax.get_molecule_axes(universe.atoms) + + assert np.allclose(shifted_moments, moments, rtol=1e-3) + assert moments.max() < 10.0 + + def test_find_bonded_atoms_selects_heavy_and_hydrogen_groups(): ax = AxesCalculator() @@ -372,7 +514,7 @@ def test_get_bonded_axes_non_heavy_returns_none(): assert out_moi is None -def test_get_bonded_axes_case1_uses_vanilla_axes_and_returns_flipped(monkeypatch): +def test_get_bonded_axes_case1_uses_molecule_axes_and_returns_flipped(monkeypatch): ax = AxesCalculator() system = MagicMock() atom = _atom(index=1, mass=12.0, pos=(1, 0, 0)) @@ -382,7 +524,7 @@ def test_get_bonded_axes_case1_uses_vanilla_axes_and_returns_flipped(monkeypatch monkeypatch.setattr(ax, "find_bonded_atoms", lambda _idx, _sys: (heavy, hyd)) monkeypatch.setattr( - ax, "get_vanilla_axes", lambda _ag: (np.eye(3) * 7, np.array([1.0, 2.0, 3.0])) + ax, "get_molecule_axes", lambda _ag: (np.eye(3) * 7, np.array([1.0, 2.0, 3.0])) ) monkeypatch.setattr(ax, "get_flipped_axes", lambda ua, axes, com, dims: axes * -1) @@ -392,7 +534,7 @@ def test_get_bonded_axes_case1_uses_vanilla_axes_and_returns_flipped(monkeypatch assert np.allclose(out_moi, np.array([1.0, 2.0, 3.0])) -def test_get_bonded_axes_case2_one_heavy_no_h_calls_get_custom_axes_and_custom_moi( +def test_get_bonded_axes_case2_one_heavy_no_h_calls_bonded_vector_axes_and_custom_moi( monkeypatch, ): ax = AxesCalculator() @@ -405,7 +547,7 @@ def test_get_bonded_axes_case2_one_heavy_no_h_calls_get_custom_axes_and_custom_m hyd = _FakeAtomGroup([]) monkeypatch.setattr(ax, "find_bonded_atoms", lambda _idx, _sys: (heavy, hyd)) - monkeypatch.setattr(ax, "get_custom_axes", lambda **kwargs: np.eye(3)) + monkeypatch.setattr(ax, "get_bonded_vector_axes", lambda **kwargs: np.eye(3)) monkeypatch.setattr( ax, "get_custom_moment_of_inertia", lambda **kwargs: np.array([9.0, 8.0, 7.0]) ) @@ -417,7 +559,9 @@ def test_get_bonded_axes_case2_one_heavy_no_h_calls_get_custom_axes_and_custom_m assert np.allclose(out_moi, np.array([9.0, 8.0, 7.0])) -def test_get_bonded_axes_case3_one_heavy_with_h_calls_get_custom_axes(monkeypatch): +def test_get_bonded_axes_case3_one_heavy_with_h_calls_get_bonded_vector_axes( + monkeypatch, +): ax = AxesCalculator() system = MagicMock() atom = _atom(index=1, mass=12.0, pos=(0, 0, 0)) @@ -434,7 +578,7 @@ def _custom_axes(**kwargs): called["n"] += 1 return np.eye(3) * 2 - monkeypatch.setattr(ax, "get_custom_axes", _custom_axes) + monkeypatch.setattr(ax, "get_bonded_vector_axes", _custom_axes) monkeypatch.setattr( ax, "get_custom_moment_of_inertia", lambda **kwargs: np.array([1.0, 1.0, 1.0]) ) @@ -447,7 +591,7 @@ def _custom_axes(**kwargs): assert np.allclose(out_moi, np.array([1.0, 1.0, 1.0])) -def test_get_bonded_axes_case5_two_heavy_calls_get_custom_axes(monkeypatch): +def test_get_bonded_axes_case5_two_heavy_calls_get_bonded_vector_axes(monkeypatch): ax = AxesCalculator() system = MagicMock() atom = _atom(index=1, mass=12.0, pos=(0, 0, 0)) @@ -461,7 +605,7 @@ def test_get_bonded_axes_case5_two_heavy_calls_get_custom_axes(monkeypatch): hyd = _FakeAtomGroup([]) monkeypatch.setattr(ax, "find_bonded_atoms", lambda _idx, _sys: (heavy, hyd)) - monkeypatch.setattr(ax, "get_custom_axes", lambda **kwargs: np.eye(3) * 3) + monkeypatch.setattr(ax, "get_bonded_vector_axes", lambda **kwargs: np.eye(3) * 3) monkeypatch.setattr( ax, "get_custom_moment_of_inertia", lambda **kwargs: np.array([2.0, 2.0, 2.0]) ) @@ -498,7 +642,7 @@ def _select_atoms(q): monkeypatch.setattr(ax, "get_moment_of_inertia_tensor", lambda **kwargs: np.eye(3)) monkeypatch.setattr( ax, - "get_custom_principal_axes", + "get_principal_axes_from_tensor", lambda moi: (np.eye(3), np.array([3.0, 2.0, 1.0])), ) @@ -515,13 +659,11 @@ def test_get_residue_axes_one_residue_principal_axes_path(monkeypatch): residue = MagicMock() residue.__len__.return_value = 1 - residue.atoms.principal_axes.return_value = np.eye(3) * 2 residue.atoms.center_of_mass.return_value = np.array([1.0, 2.0, 3.0]) residue.center_of_mass.return_value = np.array([1.0, 2.0, 3.0]) u = MagicMock() u.dimensions = np.array([10.0, 10.0, 10.0, 90, 90, 90]) - u.atoms.principal_axes.return_value = np.eye(3) * 2 def _select_atoms(q): if q.startswith("(resindex"): @@ -558,17 +700,17 @@ def test_get_vector_wraps_periodic_boundaries(): np.testing.assert_allclose(out, np.array([2.0, 0.0, 0.0])) -def test_get_custom_axes_raises_when_axis1_degenerate(): +def test_get_bonded_vector_axes_raises_when_axis1_degenerate(): ac = AxesCalculator() a = np.zeros(3) b_list = [np.zeros(3), np.zeros(3)] c = np.ones(3) dims = np.array([10.0, 10.0, 10.0]) with pytest.raises(ValueError): - ac.get_custom_axes(a=a, b_list=b_list, c=c, dimensions=dims) + ac.get_bonded_vector_axes(a=a, b_list=b_list, c=c, dimensions=dims) -def test_get_custom_axes_raises_when_normalization_degenerate(): +def test_get_bonded_vector_axes_raises_when_normalization_degenerate(): ac = AxesCalculator() dims = np.array([10.0, 10.0, 10.0]) @@ -577,14 +719,14 @@ def test_get_custom_axes_raises_when_normalization_degenerate(): c = np.array([2.0, 0.0, 0.0]) with pytest.raises(ValueError): - ac.get_custom_axes(a=a, b_list=b_list, c=c, dimensions=dims) + ac.get_bonded_vector_axes(a=a, b_list=b_list, c=c, dimensions=dims) -def test_get_custom_principal_axes_flips_z_for_handedness(): +def test_get_principal_axes_from_tensor_is_right_handed(): ac = AxesCalculator() moi = np.diag([3.0, 2.0, 1.0]) - axes, vals = ac.get_custom_principal_axes(moi) + axes, vals = ac.get_principal_axes_from_tensor(moi) assert axes.shape == (3, 3) assert vals.shape == (3,) @@ -626,6 +768,9 @@ def test_get_custom_moment_of_inertia_len2_zeros_smallest_component(): def test_get_UA_axes_multiple_heavy_atoms_uses_custom_principal_axes(monkeypatch): ax = AxesCalculator() + monkeypatch.setattr( + ax, "get_principal_axes_from_group", lambda *_a, **_k: np.eye(3) + ) heavy_atoms = _FakeAtomGroup( [ @@ -647,9 +792,6 @@ def center_of_mass(self, *args, **kwargs): def __getitem__(self, idx): return system_atom - def principal_axes(self, *args, **kwargs): - return np.eye(3) - def select_atoms(self, q): if q == "mass 2 to 999": return heavy_atoms @@ -705,7 +847,7 @@ def test_get_bonded_axes_returns_none_none_if_custom_axes_none(monkeypatch): ax, "find_bonded_atoms", lambda _idx, _sys: (heavy_bonded, light_bonded) ) - monkeypatch.setattr(ax, "get_custom_axes", lambda **kwargs: None) + monkeypatch.setattr(ax, "get_bonded_vector_axes", lambda **kwargs: None) custom_axes, moi = ax.get_bonded_axes( system=system, atom=atom, dimensions=dimensions @@ -799,7 +941,7 @@ def test_get_residue_axes_from_topology_no_neighbor_bonds_uses_cached_indices( get_principal = MagicMock(return_value=(np.eye(3) * 2.0, np.array([3.0, 2.0, 1.0]))) monkeypatch.setattr(ax, "get_moment_of_inertia_tensor", get_tensor) - monkeypatch.setattr(ax, "get_custom_principal_axes", get_principal) + monkeypatch.setattr(ax, "get_principal_axes_from_tensor", get_principal) box = np.array([20.0, 30.0, 40.0]) trans_axes, rot_axes, center, moi = ax.get_residue_axes_from_topology( @@ -829,7 +971,7 @@ def test_get_residue_axes_from_topology_no_neighbor_bonds_uses_cached_indices( get_principal.assert_called_once() -def test_get_residue_axes_from_topology_neighbor_bonds_uses_vanilla_axes( +def test_get_residue_axes_from_topology_neighbor_bonds_uses_molecule_axes( monkeypatch, ): ax = AxesCalculator() @@ -839,16 +981,17 @@ def test_get_residue_axes_from_topology_neighbor_bonds_uses_vanilla_axes( dimensions=[11.0, 12.0, 13.0, 90.0, 90.0, 90.0], ) mol = MagicMock() - mol.atoms.principal_axes.return_value = np.eye(3) * 5.0 + get_principal = MagicMock(return_value=np.eye(3) * 5.0) + monkeypatch.setattr(ax, "get_principal_axes_from_group", get_principal) residue_atoms = MagicMock() residue_atoms.center_of_mass.return_value = np.array([1.0, 2.0, 3.0]) topology = _residue_topology(has_neighbor_bonds=True) make_whole = MagicMock() - get_vanilla = MagicMock(return_value=(np.eye(3) * 6.0, np.array([6.0, 5.0, 4.0]))) + get_molecule = MagicMock(return_value=(np.eye(3) * 6.0, np.array([6.0, 5.0, 4.0]))) monkeypatch.setattr("CodeEntropy.levels.axes.make_whole", make_whole) - monkeypatch.setattr(ax, "get_vanilla_axes", get_vanilla) + monkeypatch.setattr(ax, "get_molecule_axes", get_molecule) trans_axes, rot_axes, center, moi = ax.get_residue_axes_from_topology( u=universe, @@ -859,8 +1002,8 @@ def test_get_residue_axes_from_topology_neighbor_bonds_uses_vanilla_axes( ) make_whole.assert_called_once_with(mol.atoms) - mol.atoms.principal_axes.assert_called_once() - get_vanilla.assert_called_once_with(residue_atoms) + get_principal.assert_called_once() + get_molecule.assert_called_once_with(residue_atoms) np.testing.assert_allclose(trans_axes, np.eye(3) * 5.0) np.testing.assert_allclose(rot_axes, np.eye(3) * 6.0) np.testing.assert_allclose(center, np.array([1.0, 2.0, 3.0])) @@ -889,7 +1032,7 @@ def test_get_UA_axes_from_topology_multiple_heavy_uses_cached_indices_and_box( get_bonded = MagicMock(return_value=(np.eye(3) * 4.0, np.array([1.0, 1.0, 1.0]))) monkeypatch.setattr(ax, "get_moment_of_inertia_tensor", get_tensor) - monkeypatch.setattr(ax, "get_custom_principal_axes", get_principal) + monkeypatch.setattr(ax, "get_principal_axes_from_tensor", get_principal) monkeypatch.setattr(ax, "get_bonded_axes_from_topology", get_bonded) box = np.array([20.0, 30.0, 40.0]) @@ -936,7 +1079,8 @@ def test_get_UA_axes_from_topology_single_heavy_uses_residue_principal_axes( {1: heavy_atom}, dimensions=[11.0, 12.0, 13.0, 90.0, 90.0, 90.0] ) residue_atoms = MagicMock() - residue_atoms.principal_axes.return_value = np.eye(3) * 5.0 + get_principal = MagicMock(return_value=np.eye(3) * 5.0) + monkeypatch.setattr(ax, "get_principal_axes_from_group", get_principal) topology = _ua_topology(heavy_atom_index=1, residue_heavy_indices=(1,)) @@ -954,7 +1098,7 @@ def test_get_UA_axes_from_topology_single_heavy_uses_residue_principal_axes( ) make_whole.assert_called_once_with(residue_atoms) - residue_atoms.principal_axes.assert_called_once() + get_principal.assert_called_once() np.testing.assert_allclose(trans_axes, np.eye(3) * 5.0) np.testing.assert_allclose(rot_axes, np.eye(3) * 6.0) np.testing.assert_allclose(center, heavy_atom.position) @@ -972,7 +1116,9 @@ def test_get_UA_axes_from_topology_raises_when_cached_bonded_axes_fail(monkeypat heavy_atom = _FakeAtom(1, 12.0, [1.0, 0.0, 0.0]) universe = _FakeUniverse({1: heavy_atom}) residue_atoms = MagicMock() - residue_atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr( + ax, "get_principal_axes_from_group", lambda *_a, **_k: np.eye(3) + ) topology = _ua_topology(heavy_atom_index=1, residue_heavy_indices=(1,)) monkeypatch.setattr("CodeEntropy.levels.axes.make_whole", lambda _ag: None) @@ -1004,7 +1150,7 @@ def test_get_bonded_axes_from_topology_non_heavy_returns_none_none(): assert moi is None -def test_get_bonded_axes_from_topology_no_bonded_heavy_uses_vanilla_axes( +def test_get_bonded_axes_from_topology_no_bonded_heavy_uses_molecule_axes( monkeypatch, ): ax = AxesCalculator() @@ -1020,11 +1166,11 @@ def test_get_bonded_axes_from_topology_no_bonded_heavy_uses_vanilla_axes( bonded_light_indices=(2,), ) - get_vanilla = MagicMock(return_value=(np.eye(3) * 7.0, np.array([7.0, 8.0, 9.0]))) + get_molecule = MagicMock(return_value=(np.eye(3) * 7.0, np.array([7.0, 8.0, 9.0]))) get_custom_moi = MagicMock() get_flipped = MagicMock(return_value=np.eye(3) * -7.0) - monkeypatch.setattr(ax, "get_vanilla_axes", get_vanilla) + monkeypatch.setattr(ax, "get_molecule_axes", get_molecule) monkeypatch.setattr(ax, "get_custom_moment_of_inertia", get_custom_moi) monkeypatch.setattr(ax, "get_flipped_axes", get_flipped) @@ -1037,7 +1183,7 @@ def test_get_bonded_axes_from_topology_no_bonded_heavy_uses_vanilla_axes( np.testing.assert_allclose(custom_axes, np.eye(3) * -7.0) np.testing.assert_allclose(moi, np.array([7.0, 8.0, 9.0])) - get_vanilla.assert_called_once() + get_molecule.assert_called_once() get_custom_moi.assert_not_called() get_flipped.assert_called_once() @@ -1058,11 +1204,11 @@ def test_get_bonded_axes_from_topology_one_heavy_no_light_uses_custom_axes( bonded_light_indices=(), ) - get_custom_axes = MagicMock(return_value=np.eye(3) * 2.0) + get_bonded_vector_axes = MagicMock(return_value=np.eye(3) * 2.0) get_custom_moi = MagicMock(return_value=np.array([2.0, 3.0, 4.0])) get_flipped = MagicMock(return_value=np.eye(3) * 3.0) - monkeypatch.setattr(ax, "get_custom_axes", get_custom_axes) + monkeypatch.setattr(ax, "get_bonded_vector_axes", get_bonded_vector_axes) monkeypatch.setattr(ax, "get_custom_moment_of_inertia", get_custom_moi) monkeypatch.setattr(ax, "get_flipped_axes", get_flipped) @@ -1076,7 +1222,7 @@ def test_get_bonded_axes_from_topology_one_heavy_no_light_uses_custom_axes( np.testing.assert_allclose(custom_axes, np.eye(3) * 3.0) np.testing.assert_allclose(moi, np.array([2.0, 3.0, 4.0])) - kwargs = get_custom_axes.call_args.kwargs + kwargs = get_bonded_vector_axes.call_args.kwargs np.testing.assert_allclose(kwargs["a"], heavy_atom.position) np.testing.assert_allclose(kwargs["b_list"][0], bonded_heavy.position) np.testing.assert_allclose(kwargs["c"], np.zeros(3)) @@ -1101,8 +1247,8 @@ def test_get_bonded_axes_from_topology_one_heavy_with_light_uses_light_as_c( bonded_light_indices=(2,), ) - get_custom_axes = MagicMock(return_value=np.eye(3)) - monkeypatch.setattr(ax, "get_custom_axes", get_custom_axes) + get_bonded_vector_axes = MagicMock(return_value=np.eye(3)) + monkeypatch.setattr(ax, "get_bonded_vector_axes", get_bonded_vector_axes) monkeypatch.setattr( ax, "get_custom_moment_of_inertia", @@ -1120,7 +1266,7 @@ def test_get_bonded_axes_from_topology_one_heavy_with_light_uses_light_as_c( np.testing.assert_allclose(custom_axes, np.eye(3)) np.testing.assert_allclose(moi, np.array([1.0, 2.0, 3.0])) np.testing.assert_allclose( - get_custom_axes.call_args.kwargs["c"], bonded_light.position + get_bonded_vector_axes.call_args.kwargs["c"], bonded_light.position ) @@ -1147,8 +1293,8 @@ def test_get_bonded_axes_from_topology_two_heavy_uses_heavy_positions_as_b_list( bonded_light_indices=(), ) - get_custom_axes = MagicMock(return_value=np.eye(3) * 4.0) - monkeypatch.setattr(ax, "get_custom_axes", get_custom_axes) + get_bonded_vector_axes = MagicMock(return_value=np.eye(3) * 4.0) + monkeypatch.setattr(ax, "get_bonded_vector_axes", get_bonded_vector_axes) monkeypatch.setattr( ax, "get_custom_moment_of_inertia", @@ -1166,11 +1312,11 @@ def test_get_bonded_axes_from_topology_two_heavy_uses_heavy_positions_as_b_list( np.testing.assert_allclose(custom_axes, np.eye(3) * 4.0) np.testing.assert_allclose(moi, np.array([4.0, 5.0, 6.0])) np.testing.assert_allclose( - get_custom_axes.call_args.kwargs["b_list"], + get_bonded_vector_axes.call_args.kwargs["b_list"], np.array([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]), ) np.testing.assert_allclose( - get_custom_axes.call_args.kwargs["c"], + get_bonded_vector_axes.call_args.kwargs["c"], bonded_heavy_1.position, ) @@ -1194,7 +1340,7 @@ def test_get_bonded_axes_from_topology_returns_none_when_custom_axes_none( get_custom_moi = MagicMock() get_flipped = MagicMock() - monkeypatch.setattr(ax, "get_custom_axes", lambda **kwargs: None) + monkeypatch.setattr(ax, "get_bonded_vector_axes", lambda **kwargs: None) monkeypatch.setattr(ax, "get_custom_moment_of_inertia", get_custom_moi) monkeypatch.setattr(ax, "get_flipped_axes", get_flipped) @@ -1282,7 +1428,9 @@ def _select_atoms(q): return edge_atom_set u.atoms.select_atoms.side_effect = _select_atoms - u.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr( + ax, "get_principal_axes_from_group", lambda *_a, **_k: np.eye(3) + ) monkeypatch.setattr(ax, "get_chain", lambda residue, first, last: [backbone_atom]) monkeypatch.setattr( ax, @@ -1328,7 +1476,9 @@ def _select_atoms(q): return edge_atom_set u.atoms.select_atoms.side_effect = _select_atoms - u.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr( + ax, "get_principal_axes_from_group", lambda *_a, **_k: np.eye(3) + ) monkeypatch.setattr( ax, "get_chain", lambda residue, edge_atom_1, edge_atom_2: backbone_atoms ) @@ -1376,7 +1526,9 @@ def _select_atoms(q): if q.startswith("resindex 0 and (bonded resindex"): return [uas[2]] - u.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr( + ax, "get_principal_axes_from_group", lambda *_a, **_k: np.eye(3) + ) u.atoms.select_atoms.side_effect = _select_atoms residue.select_atoms.side_effect = _select_atoms residue.atoms.select_atoms.side_effect = _select_atoms @@ -1637,7 +1789,7 @@ def _select_atoms(q): def test_get_UA_axes_raises_when_only_rot_axes_fail(monkeypatch): ax = AxesCalculator() u = MagicMock() - u.atoms.principal_axes.return_value = np.eye(3) + u.atoms.atoms.moment_of_inertia.return_value = np.diag([3.0, 2.0, 1.0]) u.dimensions = np.array([10.0, 10.0, 10.0, 90, 90, 90]) heavy_atoms = [ _atom(index=0, mass=12.0, pos=(1, 0, 0)), @@ -1696,7 +1848,7 @@ def _select_atoms(q): ) monkeypatch.setattr( - ax, "get_custom_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) + ax, "get_bonded_vector_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) ) trans_axes, rot_axes, rot_center, moi = ax.get_UA_axes( @@ -1738,7 +1890,7 @@ def _select_atoms(q): lambda system, atom, dimensions: (np.eye(3), 3 * np.eye(3)), ) monkeypatch.setattr( - ax, "get_custom_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) + ax, "get_bonded_vector_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) ) monkeypatch.setattr(ax, "get_chain", lambda residue, first, last: []) trans_axes, rot_axes, rot_center, moi = ax.get_UA_axes( @@ -1758,7 +1910,9 @@ def test_get_residue_axes_non_terminal_2_atoms(monkeypatch): monkeypatch.setattr("CodeEntropy.levels.axes.make_whole", lambda _ag: None) residue = u.select_atoms("resindex 5") residue.__len__.return_value = 2 - u.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr( + ax, "get_principal_axes_from_group", lambda *_a, **_k: np.eye(3) + ) uas = _FakeAtomGroup( [ _atom(index=0, mass=12.0, pos=(1, 1, 1)), @@ -1776,7 +1930,7 @@ def _select_atoms(q): residue.select_atoms.side_effect = residue monkeypatch.setattr(ax, "get_chain", lambda residue, first, last: []) monkeypatch.setattr( - ax, "get_custom_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) + ax, "get_bonded_vector_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) ) monkeypatch.setattr( ax, @@ -1812,7 +1966,9 @@ def test_get_residue_axes_terminal_2_atoms(monkeypatch): _atom(index=2, mass=12.0, pos=(0, 0, 1)), ], ) - u.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr( + ax, "get_principal_axes_from_group", lambda *_a, **_k: np.eye(3) + ) def _select_atoms(q): if q == "mass 2 to 999": @@ -1827,7 +1983,7 @@ def _select_atoms(q): residue.select_atoms.side_effect = _select_atoms residue.atoms.select_atoms.side_effect = _select_atoms monkeypatch.setattr( - ax, "get_custom_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) + ax, "get_bonded_vector_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) ) monkeypatch.setattr( ax, @@ -1859,8 +2015,9 @@ def test_get_res_axes_terminal_1_atom(monkeypatch): _atom(index=0, mass=12.0, pos=(1, 0, 0)), ], ) - u.atoms.principal_axes.return_value = np.eye(3) - residue.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr( + ax, "get_principal_axes_from_group", lambda *_a, **_k: np.eye(3) + ) def _select_atoms(q): if q == "mass 2 to 999": @@ -1929,7 +2086,9 @@ def _select_atoms_residue(q): "get_bonded_axes", lambda system, atom, dimensions: (np.eye(3), 3 * np.eye(3)), ) - residue.atoms.principal_axes.return_value = 2 * np.eye(3) + monkeypatch.setattr( + ax, "get_principal_axes_from_group", lambda *_a, **_k: 2 * np.eye(3) + ) trans_axes, rot_axes, rot_center, moi = ax.get_UA_axes( data_container=residue_group, index=0, res_position=-1 @@ -1958,7 +2117,9 @@ def _select_atoms(q): return [] residue.atoms.select_atoms.side_effect = _select_atoms - residue.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr( + ax, "get_principal_axes_from_group", lambda *_a, **_k: np.eye(3) + ) centre, axes = ax.get_terminal_axes( residue, heavy_atoms[0], dimensions=np.array([1, 1, 1]) ) @@ -1985,7 +2146,7 @@ def _select_atoms(q): residue.atoms.select_atoms.side_effect = _select_atoms monkeypatch.setattr( - ax, "get_custom_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) + ax, "get_bonded_vector_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) ) centre, axes = ax.get_terminal_axes( residue, heavy_atoms[0], dimensions=np.array([1, 1, 1]) @@ -2038,7 +2199,7 @@ def test_get_non_terminal_axes_2points(monkeypatch): ) monkeypatch.setattr(ax, "get_chain", lambda residue, first, last: []) monkeypatch.setattr( - ax, "get_custom_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) + ax, "get_bonded_vector_axes", lambda a, b_list, c, dimensions: 2 * np.eye(3) ) centre, axes = ax.get_non_terminal_axes( residue=residue, edges=heavy_atoms, dimensions=np.array([1, 1, 1])