diff --git a/package/AUTHORS b/package/AUTHORS index e8e41573d9..4cd9d75a3a 100644 --- a/package/AUTHORS +++ b/package/AUTHORS @@ -280,6 +280,7 @@ Chronological list of authors - Amarendra Mohan - Shubham Mittal - Charity Grey + - Dhanushka Weerakoon External code ------------- diff --git a/package/CHANGELOG b/package/CHANGELOG index fd0b869186..9edcd0b45e 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -17,11 +17,13 @@ The rules for this file: ??/??/?? IAlibay, orbeckst, marinegor, tylerjereddy, ljwoods2, marinegor, spyke7, talagayev, tanii1125, BradyAJohnston, hejamu, jeremyleung521, harshitgajjela-droid, kunjsinha, aygarwal, jauy123, Dreamstick9, - ollyfutur, Amarendra22, charity-g, ParthUppal523 + ollyfutur, Amarendra22, charity-g, ParthUppal523, DhanushkaWeerakoon * 2.11.0 Fixes +* Fix mismatch in target and reference groupselection coordinates which + can occur during RMSD calculations (Issue #2797) * `MDAnalysis.analysis.nucleicacids.WatsonCrickDist`, `MinorPairDist`, and `MajorPairDist` now match residue names against the full resname instead of only the first character, fixing incorrect behaviour with diff --git a/package/MDAnalysis/analysis/rms.py b/package/MDAnalysis/analysis/rms.py index 4b76723e7b..54dac2c0ff 100644 --- a/package/MDAnalysis/analysis/rms.py +++ b/package/MDAnalysis/analysis/rms.py @@ -733,7 +733,7 @@ def _prepare(self): if self._groupselections_atoms: self._groupselections_ref_coords64 = [ ( - self.reference.select_atoms( + self.reference.universe.select_atoms( *s["reference"] ).positions.astype(np.float64) ) diff --git a/testsuite/MDAnalysisTests/analysis/test_rms.py b/testsuite/MDAnalysisTests/analysis/test_rms.py index 9479c96ead..48c13fc670 100644 --- a/testsuite/MDAnalysisTests/analysis/test_rms.py +++ b/testsuite/MDAnalysisTests/analysis/test_rms.py @@ -194,6 +194,10 @@ def correct_values_group(self): def correct_values_backbone_group(self): return [[0, 1, 0, 0, 0], [49, 50, 4.6997, 1.9154, 2.7139]] + @pytest.fixture() + def correct_values_alphacarbons_group(self): + return [[0, 1, 0, 0], [49, 50, 1.6521, 1.6371]] + def test_rmsd(self, universe, correct_values, client_RMSD): # client_RMSD is defined in testsuite/analysis/conftest.py # among with other testing fixtures. During testing, it will @@ -509,6 +513,30 @@ def test_rmsd_misuse_selec_raises_TypeError(self, universe): select=42, ) + def test_group_selections_outside_atomgroup( + self, + universe, + correct_values_alphacarbons_group, + client_RMSD + ): + ca = universe.select_atoms('name CA') + CORE = 'backbone and (resid 1-29 or resid 60-121 or resid 160-214)' + RMSD = MDAnalysis.analysis.rms.RMSD( + ca, + ca, + select=CORE, + groupselections=[CORE], + ) + RMSD.run(step=49, **client_RMSD) + + assert_almost_equal( + RMSD.results.rmsd, + correct_values_alphacarbons_group, + 4, + err_msg="error: rmsd profile should match" + "between true values and calculated values" + ) + class TestRMSF(object): @pytest.fixture()