diff --git a/package/CHANGELOG b/package/CHANGELOG index 0ed734f69c2..b868514676d 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -23,6 +23,8 @@ The rules for this file: * 2.0.0 Fixes + * Fixed MDAnalysis.analysis.align.alignto to reindex given mobile and + reference atoms before passing for alignment (issue #2977) * Only GRO files with unit cells defined with 3 or 9 entries are now supported (Issue #3305) * Ensures that reading and writing of GRO files with missing unit cell diff --git a/package/MDAnalysis/analysis/align.py b/package/MDAnalysis/analysis/align.py index d03656f0490..672a0b1c772 100644 --- a/package/MDAnalysis/analysis/align.py +++ b/package/MDAnalysis/analysis/align.py @@ -482,8 +482,8 @@ def alignto(mobile, reference, select=None, weights=None, ref_atoms = reference.atoms else: select = rms.process_selection(select) - mobile_atoms = mobile.select_atoms(*select['mobile']) - ref_atoms = reference.select_atoms(*select['reference']) + mobile_atoms = mobile.select_atoms(*select['mobile']).sort() + ref_atoms = reference.select_atoms(*select['reference']).sort() ref_atoms, mobile_atoms = get_matching_atoms(ref_atoms, mobile_atoms, diff --git a/testsuite/MDAnalysisTests/analysis/test_align.py b/testsuite/MDAnalysisTests/analysis/test_align.py index 6edc0ac8fa9..7435fd1fa9f 100644 --- a/testsuite/MDAnalysisTests/analysis/test_align.py +++ b/testsuite/MDAnalysisTests/analysis/test_align.py @@ -395,6 +395,12 @@ def test_alignto_partial_universe(self, universe, reference): assert_array_almost_equal(segB_bound.positions, segB_free.positions, decimal=3) + def test_alignto_sort(self, universe): + mobile = universe.atoms[:4] + ref = universe.atoms[[3, 2, 1, 0]] + np.testing.assert_allclose(align.alignto(mobile, ref, + select='bynum 1-4'), (0.0, 0.0)) + def _get_aligned_average_positions(ref_files, ref, select="all", **kwargs): u = mda.Universe(*ref_files, in_memory=True)