diff --git a/CodeEntropy/entropy/vibrational.py b/CodeEntropy/entropy/vibrational.py index 3e02a01..53de6d3 100644 --- a/CodeEntropy/entropy/vibrational.py +++ b/CodeEntropy/entropy/vibrational.py @@ -148,7 +148,7 @@ def _matrix_eigenvalues(matrix: np.ndarray) -> np.ndarray: Eigenvalues as a NumPy array. """ matrix = np.asarray(matrix, dtype=float) - return la.eigvals(matrix) + return la.eigvalsh(matrix) def _convert_lambda_units(self, lambdas: np.ndarray) -> np.ndarray: """Convert eigenvalues into SI units using run_manager. @@ -185,7 +185,10 @@ def _frequencies_from_lambdas(self, lambdas: np.ndarray, temp: float) -> np.ndar """Convert eigenvalues to frequencies with robust filtering. Filters out eigenvalues that are complex, non-positive, or near-zero to - avoid invalid frequencies and unstable entropies. + avoid invalid frequencies and unstable entropies. The near-zero + tolerance scales with the spectrum's own magnitude (as in + ``numpy.linalg.matrix_rank``) rather than using a fixed cutoff, since + the eigensolver noise floor around a true null mode is not constant. Args: lambdas: Eigenvalues (post unit conversion). @@ -197,8 +200,11 @@ def _frequencies_from_lambdas(self, lambdas: np.ndarray, temp: float) -> np.ndar lambdas = np.asarray(lambdas) lambdas = np.real_if_close(lambdas, tol=1000) + scale = float(np.max(np.abs(lambdas))) if lambdas.size else 0.0 + atol = lambdas.size * np.finfo(float).eps * scale + valid_mask = ( - np.isreal(lambdas) & (lambdas > 0) & (~np.isclose(lambdas, 0, atol=1e-7)) + np.isreal(lambdas) & (lambdas > 0) & (~np.isclose(lambdas, 0, atol=atol)) ) removed = int(len(lambdas) - np.count_nonzero(valid_mask)) diff --git a/CodeEntropy/levels/axes.py b/CodeEntropy/levels/axes.py index e2cbfa5..bcc693f 100644 --- a/CodeEntropy/levels/axes.py +++ b/CodeEntropy/levels/axes.py @@ -149,7 +149,7 @@ def get_residue_axes( 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(data_container.atoms) if len(edge_atom_set) == 1: edge_atom = edge_atom_set[0] rot_center, rot_axes = self.get_terminal_axes( @@ -223,7 +223,7 @@ def get_residue_axes_from_topology( trans_axes = rot_axes else: make_whole(mol.atoms) - trans_axes = mol.atoms.principal_axes() + trans_axes = self.get_principal_axes(mol.atoms) rot_axes, moment_of_inertia = self.get_vanilla_axes(residue_atoms) center = residue_atoms.center_of_mass(unwrap=True) @@ -281,7 +281,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(data_container.atoms) else: # residue of interest has at least one neighbour if res_position == -1 or res_position == 1: @@ -421,7 +421,7 @@ def get_UA_axes_from_topology( ) else: make_whole(residue_atoms) - trans_axes = residue_atoms.principal_axes() + trans_axes = self.get_principal_axes(residue_atoms) center = heavy_atom.position rot_axes, moment_of_inertia = self.get_bonded_axes_from_topology( @@ -611,7 +611,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(residue.atoms) else: average_bonded = np.zeros(3) for bonded_atom in bonded_atoms: @@ -834,9 +834,9 @@ def get_vanilla_axes(self, molecule): """ moment_of_inertia_tensor = molecule.moment_of_inertia(unwrap=True) make_whole(molecule.atoms) - principal_axes = molecule.principal_axes() + principal_axes = self.get_principal_axes(molecule) - eigenvalues, _ = np.linalg.eig(moment_of_inertia_tensor) + eigenvalues, _ = np.linalg.eigh(moment_of_inertia_tensor) order = np.argsort(np.abs(eigenvalues))[::-1] moment_of_inertia = eigenvalues[order] @@ -1099,7 +1099,7 @@ def get_custom_principal_axes( - principal_axes: (3, 3) principal axes (rows). - moment_of_inertia: (3,) principal moments. """ - eigenvalues, eigenvectors = np.linalg.eig(moment_of_inertia_tensor) + eigenvalues, eigenvectors = np.linalg.eigh(moment_of_inertia_tensor) order = np.abs(eigenvalues).argsort()[::-1] # descending order transposed = np.transpose(eigenvectors) # columns -> rows moment_of_inertia = eigenvalues[order] @@ -1113,6 +1113,66 @@ def get_custom_principal_axes( return principal_axes, moment_of_inertia + @staticmethod + def _positive_largest_component( + vector: np.ndarray, tol: float = 1e-6 + ) -> np.ndarray: + """Return ``vector`` signed so that its largest component is positive. + + Components within ``tol`` of the largest magnitude count as ties, and the + first of them decides the sign. + """ + i = np.flatnonzero(np.abs(vector) >= np.abs(vector).max() - tol)[0] + return vector if vector[i] > 0 else -vector + + def get_principal_axes( + self, group, wrap: bool = False, rel_tol: float = 1e-8 + ) -> np.ndarray: + """Compute reproducible principal axes of an atom group. + + Like MDAnalysis's ``AtomGroup.principal_axes()``, but using ``np.linalg.eigh`` + and a canonical frame, so the result does not depend on which eigenvectors + the LAPACK build happens to return. + + - Axes are sorted by descending eigenvalue and returned as rows. + - Non-degenerate axes take the sign that makes their largest component + positive, and the last axis completes a right-handed frame. + - If two moments agree to within ``rel_tol`` (e.g. a linear bead), the + in-plane axes are built from the lab axis most perpendicular to the + unique axis. If all three agree, the lab axes are returned. + + Args: + group: MDAnalysis atom group (or anything with ``.atoms``). + wrap: Whether to wrap atoms into the primary unit cell first. + rel_tol: Relative tolerance, scaled by the largest moment, below which + two moments are treated as degenerate. + + Returns: + np.ndarray: (3, 3) principal axes (rows), right-handed. + """ + e_val, e_vec = np.linalg.eigh(group.atoms.moment_of_inertia(wrap=wrap)) + order = np.argsort(e_val)[::-1] + vals, axes = e_val[order], e_vec[:, order].T + + gap = rel_tol * max(abs(vals[0]), np.finfo(float).tiny) + d01 = abs(vals[0] - vals[1]) <= gap + d12 = abs(vals[1] - vals[2]) <= gap + + if d01 and d12: + return np.eye(3) + + if d01 or d12: + n = self._positive_largest_component(axes[2] if d01 else axes[0]) + i = np.flatnonzero(np.abs(n) <= np.abs(n).min() + 1e-6)[0] + u = np.eye(3)[i] - n[i] * n + u /= np.linalg.norm(u) + v = np.cross(n, u) + return np.array([u, v, n] if d01 else [n, u, v]) + + a0 = self._positive_largest_component(axes[0]) + a1 = self._positive_largest_component(axes[1]) + return np.array([a0, a1, np.cross(a0, a1)]) + 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 9ea5ea4..2fa5c2e 100644 --- a/CodeEntropy/levels/nodes/covariance.py +++ b/CodeEntropy/levels/nodes/covariance.py @@ -506,7 +506,7 @@ def _build_ua_vectors( # principal axes make_whole(residue.atoms) make_whole(bead) - trans_axes = residue.atoms.principal_axes() + trans_axes = axes_manager.get_principal_axes(residue.atoms) rot_axes, moi = axes_manager.get_vanilla_axes(bead) center = bead.center_of_mass(unwrap=True) @@ -658,7 +658,7 @@ def _get_residue_axes( make_whole(mol.atoms) make_whole(bead) - trans_axes = mol.atoms.principal_axes() + trans_axes = axes_manager.get_principal_axes(mol.atoms) rot_axes, moi = axes_manager.get_vanilla_axes(bead) center = bead.center_of_mass(unwrap=True) return ( @@ -688,7 +688,7 @@ def _get_polymer_axes( make_whole(mol.atoms) make_whole(bead) - trans_axes = mol.atoms.principal_axes() + trans_axes = axes_manager.get_principal_axes(mol.atoms) rot_axes, moi = axes_manager.get_vanilla_axes(bead) center = bead.center_of_mass(unwrap=True) diff --git a/tests/regression/baselines/benzaldehyde/axes_off.json b/tests/regression/baselines/benzaldehyde/axes_off.json index 5bddd53..9686d47 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.08580917390710577, + "united_atom:Rovibrational": 32.7616905666739, + "residue:FTmat-Transvibrational": 87.38657089591656, + "residue:FTmat-Rovibrational": 62.30339378754512, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 203.1091118167158 + "total": 203.01903591665805 } } } diff --git a/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json b/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json index a5d1af0..66c2f7c 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.05129761410051273, + "united_atom:Rovibrational": 49.686697381523466, + "residue:Transvibrational": 69.21750344995603, + "residue:Rovibrational": 67.99888878209293, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 208.1878625488175 + "total": 207.4359587202883 } } } diff --git a/tests/regression/baselines/benzaldehyde/frame_window.json b/tests/regression/baselines/benzaldehyde/frame_window.json index 70bb276..9f7e948 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": 42.23402688550062, + "united_atom:Rovibrational": 38.219068584436165, + "residue:FTmat-Transvibrational": 73.4310301096772, + "residue:FTmat-Rovibrational": 57.470843728209715, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 230.29580627384846 + "total": 231.83654080043905 } } } diff --git a/tests/regression/baselines/benzaldehyde/grouping_each.json b/tests/regression/baselines/benzaldehyde/grouping_each.json index 0a21847..50a38c1 100644 --- a/tests/regression/baselines/benzaldehyde/grouping_each.json +++ b/tests/regression/baselines/benzaldehyde/grouping_each.json @@ -3,7 +3,7 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.062499436482478445, + "united_atom:Rovibrational": 0.062499436482478535, "residue:FTmat-Transvibrational": 16.83857036769833, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -27,79 +27,79 @@ "2": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0022147884278620462, - "residue:FTmat-Transvibrational": 17.449372254125862, + "united_atom:Rovibrational": 0.0022147884278620493, + "residue:FTmat-Transvibrational": 17.449372254125855, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 31.909265242174982 }, - "total": 49.36085228472871 + "total": 49.3608522847287 }, "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 138.65701144028458, - "residue:FTmat-Transvibrational": 15.803976930845373, + "united_atom:Rovibrational": 0.001983835543157824, + "residue:FTmat-Transvibrational": 15.80397693084538, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 154.46098837112996 + "total": 15.805960766388537 }, "4": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.003874883925216773, - "residue:FTmat-Transvibrational": 23.899916844406114, + "residue:FTmat-Transvibrational": 23.899916844406135, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 23.90379172833133 + "total": 23.903791728331353 }, "5": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.010824819910336835, - "residue:FTmat-Transvibrational": 11.05479779559611, + "united_atom:Rovibrational": 0.010824819910336868, + "residue:FTmat-Transvibrational": 11.054797795596109, "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": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.00018982532508837594, - "residue:FTmat-Transvibrational": 19.723925127490933, + "united_atom:Rovibrational": 0.00018982532508837537, + "residue:FTmat-Transvibrational": 19.72392512749092, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 19.72411495281602 + "total": 19.724114952816006 }, "7": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.004033941970593011, - "residue:FTmat-Transvibrational": 18.90676882142135, + "residue:FTmat-Transvibrational": 18.906768821421363, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 18.910802763391942 + "total": 18.910802763391956 }, "8": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.020362757918507005, + "united_atom:Rovibrational": 0.020362757918507036, "residue:FTmat-Transvibrational": 16.13204209116967, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -111,14 +111,14 @@ "9": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 138.65525900218074, - "residue:FTmat-Transvibrational": 21.42548529236268, + "united_atom:Rovibrational": 0.00023139743934636996, + "residue:FTmat-Transvibrational": 21.42548529236267, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 160.08074429454342 + "total": 21.425716689802016 } } } diff --git a/tests/regression/baselines/benzaldehyde/selection_subset.json b/tests/regression/baselines/benzaldehyde/selection_subset.json index 6d50b1a..5b95eec 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.05129761410051273, + "united_atom:Rovibrational": 49.686697381523466, + "residue:FTmat-Transvibrational": 82.05934573652353, + "residue:FTmat-Rovibrational": 61.71704168262333, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 219.34599995216834 + "total": 213.99595390738622 } } } diff --git a/tests/regression/baselines/benzene/axes_off.json b/tests/regression/baselines/benzene/axes_off.json index 6177e0d..1232f65 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.16962646355884187, + "united_atom:Rovibrational": 37.767489105707035, + "residue:FTmat-Transvibrational": 71.55604397935048, + "residue:FTmat-Rovibrational": 48.02807537326126, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 161.29702964139057 + "total": 157.5212349218776 } } } diff --git a/tests/regression/baselines/benzene/combined_forcetorque_off.json b/tests/regression/baselines/benzene/combined_forcetorque_off.json index 16b5e37..3785730 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.1627566521736012, + "united_atom:Rovibrational": 40.69581240789943, + "residue:Transvibrational": 61.39556854139587, + "residue:Rovibrational": 49.491721969907516, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 151.31064169774515 + "total": 151.7458595713764 } } } diff --git a/tests/regression/baselines/benzene/frame_window.json b/tests/regression/baselines/benzene/frame_window.json index c1ffd00..c12b13b 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": 12.892173028619528, + "united_atom:Rovibrational": 34.98492056748487, + "residue:FTmat-Transvibrational": 71.74602192596502, + "residue:FTmat-Rovibrational": 55.81007796948714, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 173.89519974256632 + "total": 175.43319349155655 } } } diff --git a/tests/regression/baselines/benzene/grouping_each.json b/tests/regression/baselines/benzene/grouping_each.json index 36535d8..d6460fc 100644 --- a/tests/regression/baselines/benzene/grouping_each.json +++ b/tests/regression/baselines/benzene/grouping_each.json @@ -4,121 +4,121 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.001760679467943202, - "residue:FTmat-Transvibrational": 19.14539159233644, + "residue:FTmat-Transvibrational": 19.145391592336434, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 19.147152271804384 + "total": 19.147152271804377 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.010093246924291187, - "residue:FTmat-Transvibrational": 15.27551568157708, + "united_atom:Rovibrational": 0.010093246924291217, + "residue:FTmat-Transvibrational": 15.27551568157707, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 15.089233620075317 }, - "total": 30.374842548576687 + "total": 30.37484254857668 }, "2": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.07511923174012403, - "residue:FTmat-Transvibrational": 20.327785240055736, + "residue:FTmat-Transvibrational": 20.32778524005574, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 15.089233620075317 }, - "total": 35.492138091871176 + "total": 35.49213809187118 }, "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.934141461042106, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 9.937962393813999 + "total": 9.937962393813994 }, "4": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.026349364088976555, - "residue:FTmat-Transvibrational": 7.206801915761131, + "residue:FTmat-Transvibrational": 7.206801915761134, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.233151279850108 + "total": 7.2331512798501105 }, "5": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0015259047993877776, - "residue:FTmat-Transvibrational": 8.539848138171388, + "residue:FTmat-Transvibrational": 8.539848138171394, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 8.541374042970777 + "total": 8.541374042970782 }, "6": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0034710297151557107, - "residue:FTmat-Transvibrational": 15.469059953010003, + "residue:FTmat-Transvibrational": 15.46905995300999, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.472530982725159 + "total": 15.472530982725146 }, "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.685475655857545, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 22.686157506079564 + "total": 22.686157506079542 }, "9": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.004115086801073575, - "residue:FTmat-Transvibrational": 5.894912294581263, + "residue:FTmat-Transvibrational": 5.894912294581267, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 5.899027381382337 + "total": 5.89902738138234 } } } diff --git a/tests/regression/baselines/benzene/selection_subset.json b/tests/regression/baselines/benzene/selection_subset.json index ff2d09b..6845aba 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.1627566521736012, + "united_atom:Rovibrational": 40.69581240789943, + "residue:FTmat-Transvibrational": 83.31956662877224, + "residue:FTmat-Rovibrational": 45.37364572273796, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 159.27917642122793 + "total": 169.55178141158322 } } } diff --git a/tests/regression/baselines/cyclohexane/axes_off.json b/tests/regression/baselines/cyclohexane/axes_off.json index 5bf8028..cbb4b4a 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.9192999101058387, + "united_atom:Rovibrational": 21.293152671979605, + "residue:FTmat-Transvibrational": 86.88296288038606, + "residue:FTmat-Rovibrational": 61.34457371320608, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 169.02115517275246 + "total": 170.4399891756776 } } } diff --git a/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json b/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json index a548349..0a2e066 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.9083882969602073, "united_atom:Rovibrational": 24.234154676578637, - "residue:Transvibrational": 69.9872567772153, - "residue:Rovibrational": 68.68521019685565, + "residue:Transvibrational": 70.36545739512636, + "residue:Rovibrational": 69.36129379657234, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 163.50155250432303 + "total": 164.86929416523753 } } } diff --git a/tests/regression/baselines/cyclohexane/frame_window.json b/tests/regression/baselines/cyclohexane/frame_window.json index d21d437..dfe949a 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": 19.83149926936752, + "united_atom:Rovibrational": 73.96792995794401, + "residue:FTmat-Transvibrational": 76.41867545283402, + "residue:FTmat-Rovibrational": 63.268579628257925, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 231.09780323388605 + "total": 233.48668430840345 } } } diff --git a/tests/regression/baselines/cyclohexane/grouping_each.json b/tests/regression/baselines/cyclohexane/grouping_each.json index 364af0c..f48d5fa 100644 --- a/tests/regression/baselines/cyclohexane/grouping_each.json +++ b/tests/regression/baselines/cyclohexane/grouping_each.json @@ -4,73 +4,73 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0010533914066148877, - "residue:FTmat-Transvibrational": 13.254094261168165, + "residue:FTmat-Transvibrational": 13.25409426116816, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 13.25514765257478 + "total": 13.255147652574774 }, "1": { "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.658853641209102, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 19.658954599943364 + "total": 19.658954599943357 }, "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0037293322355179776, - "residue:FTmat-Transvibrational": 11.234013572018538, + "united_atom:Rovibrational": 0.0037293322355179833, + "residue:FTmat-Transvibrational": 11.234013572018535, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 11.237742904254056 + "total": 11.237742904254052 }, "4": { "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.90922736546474, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 11.931021147774642 + "total": 11.931021147774631 }, "6": { "components": { @@ -88,37 +88,37 @@ "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.088914144240295, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.0891363322821 + "total": 15.089136332282076 }, "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/selection_subset.json b/tests/regression/baselines/cyclohexane/selection_subset.json index b1a1444..c4297f3 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.9083882969602073, "united_atom:Rovibrational": 24.234154676578637, - "residue:FTmat-Transvibrational": 84.37184730911717, - "residue:FTmat-Rovibrational": 59.52377096811085, + "residue:FTmat-Transvibrational": 83.02143938359535, + "residue:FTmat-Rovibrational": 60.38982276412395, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 168.72470380748013 + "total": 168.55380512125814 } } } diff --git a/tests/regression/baselines/dna/axes_off.json b/tests/regression/baselines/dna/axes_off.json index 9504b7b..f7775a5 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": 0.8417875111286033, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 27.45710747332319, - "polymer:FTmat-Transvibrational": 48.62026970762269, + "residue:Rovibrational": 28.697967895577555, + "polymer:FTmat-Transvibrational": 48.2396946675769, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 92.64772999596995 + "total": 93.1228984014686 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.7972774672527945, + "united_atom:Rovibrational": 1.4917544859287981, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 25.287669468441067, - "polymer:FTmat-Transvibrational": 60.47397935339153, + "residue:Rovibrational": 27.42942321356182, + "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": 96.3291400425616 } } } diff --git a/tests/regression/baselines/dna/combined_forcetorque_off.json b/tests/regression/baselines/dna/combined_forcetorque_off.json index e867cee..449746a 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.3768006840852487, + "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.158104897263925 }, "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/frame_window.json b/tests/regression/baselines/dna/frame_window.json index c35d221..de5f16d 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.306080770984952, + "polymer:FTmat-Transvibrational": 48.2396946675769, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 92.94333932620614 + "total": 93.47139581858488 }, "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.4275653595082, + "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.3633213392 } } } diff --git a/tests/regression/baselines/dna/grouping_each.json b/tests/regression/baselines/dna/grouping_each.json index 2cbef74..1fe99c3 100644 --- a/tests/regression/baselines/dna/grouping_each.json +++ b/tests/regression/baselines/dna/grouping_each.json @@ -3,10 +3,10 @@ "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.3768006840852487, + "polymer:FTmat-Transvibrational": 12.341104347192614, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -17,16 +17,16 @@ "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 2cbef74..1fe99c3 100644 --- a/tests/regression/baselines/dna/selection_subset.json +++ b/tests/regression/baselines/dna/selection_subset.json @@ -3,10 +3,10 @@ "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.3768006840852487, + "polymer:FTmat-Transvibrational": 12.341104347192614, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -17,16 +17,16 @@ "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 4c28d3b..563fc25 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": 0.8860257587478036, + "united_atom:Rovibrational": 72.03827469435456, + "residue:FTmat-Transvibrational": 75.7178045416724, + "residue:FTmat-Rovibrational": 56.82926956884208, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 210.9386071250987 + "total": 213.37236080726956 } } } diff --git a/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json b/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json index 8c68cce..31ef492 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.0945863942121685, + "united_atom:Rovibrational": 82.3645515427813, + "residue:Transvibrational": 68.30761200383697, + "residue:Rovibrational": 59.2965466793037, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 215.05334534012698 + "total": 218.96428286378688 } } } diff --git a/tests/regression/baselines/ethyl-acetate/frame_window.json b/tests/regression/baselines/ethyl-acetate/frame_window.json index be566d0..f89758d 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": 29.40579085610341, + "united_atom:Rovibrational": 51.990361428188855, + "residue:FTmat-Transvibrational": 67.03974115661572, + "residue:FTmat-Rovibrational": 55.06851959311436, "united_atom:Conformational": 8.635471458692102, "residue:Conformational": 0.0, "residue:Orientational": 3.8984476469128193 }, - "total": 215.80571814986257 + "total": 216.03833213962727 } } } diff --git a/tests/regression/baselines/ethyl-acetate/grouping_each.json b/tests/regression/baselines/ethyl-acetate/grouping_each.json index e8330e0..6fa62cf 100644 --- a/tests/regression/baselines/ethyl-acetate/grouping_each.json +++ b/tests/regression/baselines/ethyl-acetate/grouping_each.json @@ -3,14 +3,14 @@ "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.339420001372433, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 13.381100248886003 + "total": 13.381100248885998 }, "1": { "components": { @@ -39,31 +39,31 @@ "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.34932045847677, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 17.438521356087392 + "total": 17.43852135608739 }, "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.544753730547699, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 14.790626932373925 + "total": 14.790626932373913 }, "5": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.026788453489210204, + "united_atom:Rovibrational": 0.02678845348921013, "residue:FTmat-Transvibrational": 9.570910150584444, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -75,7 +75,7 @@ "6": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.052298040051129174, + "united_atom:Rovibrational": 0.05229804005112911, "residue:FTmat-Transvibrational": 12.801663361822174, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -87,38 +87,38 @@ "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.40926078565227, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 16.70088616942484 + "total": 16.70088616942483 }, "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/selection_subset.json b/tests/regression/baselines/ethyl-acetate/selection_subset.json index 270dbbd..e8befd4 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.0945863942121685, + "united_atom:Rovibrational": 82.3645515427813, + "residue:FTmat-Transvibrational": 79.3546113986704, + "residue:FTmat-Rovibrational": 55.58023277682395, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 221.48547001014148 + "total": 226.29496835614057 } } } diff --git a/tests/regression/baselines/methane/axes_off.json b/tests/regression/baselines/methane/axes_off.json index dddf93d..e11174c 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": 42.10996455719709, + "united_atom:Rovibrational": 34.12776972010649, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.20875141839502 + "total": 76.23773427730359 } } } diff --git a/tests/regression/baselines/methane/combined_forcetorque_off.json b/tests/regression/baselines/methane/combined_forcetorque_off.json index 318c30c..bb219d5 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": 42.10996455719709, + "united_atom:Rovibrational": 34.072764680966635, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.168127574067 + "total": 76.18272923816372 } } } diff --git a/tests/regression/baselines/methane/frame_window.json b/tests/regression/baselines/methane/frame_window.json index 9a45dc9..c763747 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.47491947577109, + "united_atom:Rovibrational": 34.26604141713925, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 74.48255240941317 + "total": 74.74096089291034 } } } diff --git a/tests/regression/baselines/methane/grouping_each.json b/tests/regression/baselines/methane/grouping_each.json index 3b31963..8e723da 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/selection_subset.json b/tests/regression/baselines/methane/selection_subset.json index 318c30c..bb219d5 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": 42.10996455719709, + "united_atom:Rovibrational": 34.072764680966635, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.168127574067 + "total": 76.18272923816372 } } } diff --git a/tests/regression/baselines/methanol/axes_off.json b/tests/regression/baselines/methanol/axes_off.json index d16ce04..a631b7f 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": 42.53228254354206, + "residue:FTmat-Transvibrational": 73.3941369795574, + "residue:FTmat-Rovibrational": 41.3922077822835, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 152.45023271322518 + "total": 157.31862730538296 } } } diff --git a/tests/regression/baselines/methanol/combined_forcetorque_off.json b/tests/regression/baselines/methanol/combined_forcetorque_off.json index 634a9de..84e6fb2 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": 63.011170818927425, + "residue:Rovibrational": 31.631180680507523, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 143.94659955847422 + "total": 144.23295864102172 } } } diff --git a/tests/regression/baselines/methanol/frame_window.json b/tests/regression/baselines/methanol/frame_window.json index 41bd2a3..079f0cc 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": 63.22483760687048, + "residue:FTmat-Rovibrational": 29.43214053441657, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 125.64852880150801 + "total": 127.33252007669316 } } } diff --git a/tests/regression/baselines/methanol/grouping_each.json b/tests/regression/baselines/methanol/grouping_each.json index bba3b3c..8d3a25e 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.095998287789704, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 8.482684780549986 + "total": 8.482684780550787 }, "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/selection_subset.json b/tests/regression/baselines/methanol/selection_subset.json index 293daec..aa37195 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": 78.60873072810506, + "residue:FTmat-Rovibrational": 27.28134724177411, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 151.94722026765817 + "total": 155.48068511146596 } } } diff --git a/tests/regression/baselines/octonol/axes_off.json b/tests/regression/baselines/octonol/axes_off.json index bc391e6..0a7dc47 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.3104271940682139, + "united_atom:Rovibrational": 16.91243787411125, + "residue:FTmat-Transvibrational": 85.14543434017183, + "residue:FTmat-Rovibrational": 60.1858724623901, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 201.75720638000655 + "total": 205.18481533202498 } } } diff --git a/tests/regression/baselines/octonol/combined_forcetorque_off.json b/tests/regression/baselines/octonol/combined_forcetorque_off.json index 920589a..94f8b1a 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.35379238473384655, + "united_atom:Rovibrational": 19.154228264604267, + "residue:Transvibrational": 73.4888773906637, + "residue:Rovibrational": 61.888014555961526, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 197.70076468713353 + "total": 197.5155560572469 } } } diff --git a/tests/regression/baselines/octonol/frame_window.json b/tests/regression/baselines/octonol/frame_window.json index 5c07dcc..f36623a 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": 70.87271844699075, + "united_atom:Rovibrational": 162.26463085986254, + "residue:FTmat-Transvibrational": 74.64608750357672, + "residue:FTmat-Rovibrational": 60.91083610153494, "united_atom:Conformational": 16.651144380045313, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 406.37330124036134 + "total": 411.1365672106176 } } } diff --git a/tests/regression/baselines/octonol/grouping_each.json b/tests/regression/baselines/octonol/grouping_each.json index b480174..dc2c905 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.571797812433093, "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.241358919104748, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 21.24448750099809 + "total": 21.24448750099806 }, "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.615636453348772, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.621412304282756 + "total": 7.621412304282781 }, "6": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00028812747686091, - "residue:FTmat-Transvibrational": 16.555914111511576, + "residue:FTmat-Transvibrational": 16.555914111511562, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 16.556202238988437 + "total": 16.556202238988423 }, "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.977612663758993, "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/selection_subset.json b/tests/regression/baselines/octonol/selection_subset.json index 5f9d18f..b3c6cf8 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.35379238473384655, + "united_atom:Rovibrational": 19.154228264604267, + "residue:FTmat-Transvibrational": 85.63275438200148, + "residue:FTmat-Rovibrational": 57.14905396128441, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 202.78843646155286 + "total": 204.92047245390756 } } } diff --git a/tests/regression/baselines/water/axes_off.json b/tests/regression/baselines/water/axes_off.json index 9b798bd..71fecf1 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.83953711865945, + "united_atom:Rovibrational": 17.5849044028192, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.5292978562903 + "total": 67.42444152147866 } } } diff --git a/tests/regression/baselines/water/combined_forcetorque_off.json b/tests/regression/baselines/water/combined_forcetorque_off.json index 2e63256..1572abf 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.83953711865945, + "united_atom:Rovibrational": 17.626794905166232, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 67.46633202382569 } } } diff --git a/tests/regression/baselines/water/frame_window.json b/tests/regression/baselines/water/frame_window.json index c6ae550..02eebcc 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.474173116049116, + "united_atom:Rovibrational": 16.996700484317767, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 64.37811411967567 + "total": 63.470873600366886 } } } diff --git a/tests/regression/baselines/water/grouping_each.json b/tests/regression/baselines/water/grouping_each.json index acccd86..c88ee7c 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/selection_subset.json b/tests/regression/baselines/water/selection_subset.json index 2e63256..1572abf 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.83953711865945, + "united_atom:Rovibrational": 17.626794905166232, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 67.46633202382569 } } } diff --git a/tests/regression/baselines/water/water_off.json b/tests/regression/baselines/water/water_off.json index 2e63256..1572abf 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.83953711865945, + "united_atom:Rovibrational": 17.626794905166232, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 67.46633202382569 } } } diff --git a/tests/unit/CodeEntropy/entropy/test_vibrational_entropy_math.py b/tests/unit/CodeEntropy/entropy/test_vibrational_entropy_math.py index 2554571..07d14f7 100644 --- a/tests/unit/CodeEntropy/entropy/test_vibrational_entropy_math.py +++ b/tests/unit/CodeEntropy/entropy/test_vibrational_entropy_math.py @@ -16,17 +16,21 @@ def get_KT2J(self, temp): return RM() -def test_matrix_eigenvalues_returns_complex_dtype_possible(run_manager): +def test_matrix_eigenvalues_returns_real_dtype_for_symmetric_matrix(run_manager): ve = VibrationalEntropy(run_manager=run_manager) - m = np.array([[0.0, -1.0], [1.0, 0.0]]) + m = np.array([[2.0, -1.0], [-1.0, 2.0]]) eigs = ve._matrix_eigenvalues(m) assert eigs.shape == (2,) + assert not np.iscomplexobj(eigs) def test_frequencies_from_lambdas_filters_nonpositive_and_near_zero(run_manager): + """Near-zero eigenvalue is scaled to the spectrum's magnitude, not fixed.""" ve = VibrationalEntropy(run_manager=run_manager) - lambdas = np.array([-1.0, 0.0, 1e-12, 1.0, 4.0]) + scale = 4.0 + noise = np.finfo(float).eps * scale + lambdas = np.array([-1.0, 0.0, noise, 1.0, scale]) freqs = ve._frequencies_from_lambdas(lambdas, temp=298.0) assert freqs.size == 2 diff --git a/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py b/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py index 19ed381..9637571 100644 --- a/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py +++ b/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py @@ -501,6 +501,7 @@ def test_build_ua_vectors_uses_vanilla_axes_when_not_customised(): np.eye(3), np.array([1.0, 2.0, 3.0]), ) + axes_manager.get_principal_axes.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])) @@ -623,6 +624,7 @@ def test_get_residue_axes_vanilla_uses_make_whole_and_vanilla_axes(): np.eye(3), np.array([1.0, 2.0, 3.0]), ) + axes_manager.get_principal_axes.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( @@ -654,6 +656,7 @@ def test_get_polymer_axes_uses_make_whole_and_vanilla_axes(): np.eye(3), np.array([1.0, 2.0, 3.0]), ) + axes_manager.get_principal_axes.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 2b856a0..eb1b32d 100644 --- a/tests/unit/CodeEntropy/levels/test_axes.py +++ b/tests/unit/CodeEntropy/levels/test_axes.py @@ -327,7 +327,7 @@ def test_get_vanilla_axes_sorts_eigenvalues_desc_by_abs(monkeypatch): 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) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) mol.atoms = MagicMock() # avoid real MDAnalysis unwrap @@ -340,6 +340,83 @@ def test_get_vanilla_axes_sorts_eigenvalues_desc_by_abs(monkeypatch): assert np.allclose(moments, np.array([-10.0, 3.0, 1.0])) +def _tensor(eigenvalues, seed=0): + q, _ = np.linalg.qr(np.random.default_rng(seed).normal(size=(3, 3))) + return q @ np.diag(eigenvalues) @ q.T + + +def _group_with(tensor): + group = MagicMock() + group.atoms.moment_of_inertia.return_value = tensor + return group + + +def test_get_principal_axes_sorts_by_descending_eigenvalue(): + ax = AxesCalculator() + + axes = ax.get_principal_axes(_group_with(np.diag([1.0, 3.0, 2.0]))) + + # eigenvalues 3, 2, 1 => rows along y, z, x + assert np.allclose(axes, [[0, 1, 0], [0, 0, 1], [1, 0, 0]]) + + +@pytest.mark.parametrize( + "eigenvalues", + [ + (1.0, 2.0, 5.0), # all distinct + (0.0, 0.845, 0.845), # linear bead + (5.0, 5.0, 1.0), # symmetric top, degenerate pair on top + (2.0, 2.0, 2.0), # spherical top + ], +) +def test_get_principal_axes_is_orthonormal_and_right_handed(eigenvalues): + ax = AxesCalculator() + + axes = ax.get_principal_axes(_group_with(_tensor(eigenvalues))) + + assert np.allclose(axes @ axes.T, np.eye(3), atol=1e-12) + assert np.isclose(np.linalg.det(axes), 1.0) + + +@pytest.mark.parametrize( + "eigenvalues", + [(1.0, 2.0, 5.0), (0.0, 0.845, 0.845), (5.0, 5.0, 1.0), (2.0, 2.0, 2.0)], +) +def test_get_principal_axes_ignores_arbitrary_eigenvector_choices( + monkeypatch, eigenvalues +): + ax = AxesCalculator() + group = _group_with(_tensor(eigenvalues)) + reference = ax.get_principal_axes(group) + real_eigh = np.linalg.eigh + rng = np.random.default_rng(1) + + def arbitrary_eigh(matrix): + w, v = real_eigh(matrix) + v = v * rng.choice([-1.0, 1.0], size=3) + for i in range(2): + if abs(w[i] - w[i + 1]) <= 1e-9 * max(abs(w).max(), 1e-300): + t = rng.uniform(0, 2 * np.pi) + c, s = np.cos(t), np.sin(t) + a, b = v[:, i].copy(), v[:, i + 1].copy() + v[:, i], v[:, i + 1] = c * a + s * b, -s * a + c * b + return w, v + + monkeypatch.setattr(np.linalg, "eigh", arbitrary_eigh) + + for _ in range(25): + assert np.allclose(ax.get_principal_axes(group), reference, atol=1e-9) + + +def test_get_principal_axes_passes_wrap_to_moment_of_inertia(): + ax = AxesCalculator() + group = _group_with(np.diag([3.0, 2.0, 1.0])) + + ax.get_principal_axes(group, wrap=True) + + group.atoms.moment_of_inertia.assert_called_once_with(wrap=True) + + def test_find_bonded_atoms_selects_heavy_and_hydrogen_groups(): ax = AxesCalculator() @@ -626,6 +703,7 @@ 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", lambda *_a, **_k: np.eye(3)) heavy_atoms = _FakeAtomGroup( [ @@ -647,9 +725,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 @@ -839,7 +914,8 @@ 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", 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) @@ -859,7 +935,7 @@ 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_principal.assert_called_once() get_vanilla.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) @@ -936,7 +1012,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", get_principal) topology = _ua_topology(heavy_atom_index=1, residue_heavy_indices=(1,)) @@ -954,7 +1031,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 +1049,7 @@ 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", 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) @@ -1282,7 +1359,7 @@ 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", lambda *_a, **_k: np.eye(3)) monkeypatch.setattr(ax, "get_chain", lambda residue, first, last: [backbone_atom]) monkeypatch.setattr( ax, @@ -1328,7 +1405,7 @@ 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", lambda *_a, **_k: np.eye(3)) monkeypatch.setattr( ax, "get_chain", lambda residue, edge_atom_1, edge_atom_2: backbone_atoms ) @@ -1376,7 +1453,7 @@ 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", 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 @@ -1758,7 +1835,7 @@ 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", lambda *_a, **_k: np.eye(3)) uas = _FakeAtomGroup( [ _atom(index=0, mass=12.0, pos=(1, 1, 1)), @@ -1812,7 +1889,7 @@ 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", lambda *_a, **_k: np.eye(3)) def _select_atoms(q): if q == "mass 2 to 999": @@ -1859,8 +1936,7 @@ 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", lambda *_a, **_k: np.eye(3)) def _select_atoms(q): if q == "mass 2 to 999": @@ -1929,7 +2005,7 @@ 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", 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 +2034,7 @@ 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", lambda *_a, **_k: np.eye(3)) centre, axes = ax.get_terminal_axes( residue, heavy_atoms[0], dimensions=np.array([1, 1, 1]) )