From d5c903c79c722e2ddaec617c799143ecbaaf3a07 Mon Sep 17 00:00:00 2001 From: Lester Hedges Date: Thu, 5 Feb 2026 10:26:41 +0000 Subject: [PATCH 1/3] Add GCMC ghost waters to perturbed positions array. --- src/somd2/runner/_repex.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/somd2/runner/_repex.py b/src/somd2/runner/_repex.py index c6025a9..1be0c5e 100644 --- a/src/somd2/runner/_repex.py +++ b/src/somd2/runner/_repex.py @@ -310,6 +310,21 @@ def _create_dynamics( ): from openmm.unit import angstrom + # Get the positions from the context. + positions = ( + dynamics.context() + .getState(getPositions=True) + .getPositions(asNumpy=True) + ) + + # The positions array also contains the ghost water atoms that + # were added during the GCMC setup. We need to make sure that + # we copy these over to the perturbed positions array. + diff = len(positions) - len(perturbed_positions) + perturbed_positions = _np.concatenate( + [perturbed_positions, positions[-diff:]] + ) + dynamics.context().setPeriodicBoxVectors(*perturbed_box * angstrom) dynamics.context().setPositions(perturbed_positions * angstrom) From 7cbae0749838606617c6d43e6a0c39dd134ef958 Mon Sep 17 00:00:00 2001 From: Lester Hedges Date: Thu, 5 Feb 2026 11:38:33 +0000 Subject: [PATCH 2/3] Make position units consistent. --- src/somd2/runner/_repex.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/somd2/runner/_repex.py b/src/somd2/runner/_repex.py index 1be0c5e..553335b 100644 --- a/src/somd2/runner/_repex.py +++ b/src/somd2/runner/_repex.py @@ -315,7 +315,7 @@ def _create_dynamics( dynamics.context() .getState(getPositions=True) .getPositions(asNumpy=True) - ) + ) / angstrom # The positions array also contains the ghost water atoms that # were added during the GCMC setup. We need to make sure that From 9e836185a18607ea3030aa722184c63a3c1a8b1d Mon Sep 17 00:00:00 2001 From: Lester Hedges Date: Thu, 5 Feb 2026 12:52:44 +0000 Subject: [PATCH 3/3] Don't append positions when diff is zero. --- src/somd2/runner/_repex.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/somd2/runner/_repex.py b/src/somd2/runner/_repex.py index 553335b..fb42401 100644 --- a/src/somd2/runner/_repex.py +++ b/src/somd2/runner/_repex.py @@ -321,9 +321,10 @@ def _create_dynamics( # were added during the GCMC setup. We need to make sure that # we copy these over to the perturbed positions array. diff = len(positions) - len(perturbed_positions) - perturbed_positions = _np.concatenate( - [perturbed_positions, positions[-diff:]] - ) + if diff != 0: + perturbed_positions = _np.concatenate( + [perturbed_positions, positions[-diff:]] + ) dynamics.context().setPeriodicBoxVectors(*perturbed_box * angstrom) dynamics.context().setPositions(perturbed_positions * angstrom)