From b81e7838805dd7a0aa4e4964095f7cb3f07833da Mon Sep 17 00:00:00 2001 From: tanii1125 Date: Sat, 13 Dec 2025 21:21:01 +0530 Subject: [PATCH 1/5] Reupload commits due to cli fail --- example/msd_nojump_demo.py | 48 ++++++++++++++++++++++++++++++ package/AUTHORS | 1 + package/MDAnalysis/analysis/msd.py | 29 ++++++++++++++++-- 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 example/msd_nojump_demo.py diff --git a/example/msd_nojump_demo.py b/example/msd_nojump_demo.py new file mode 100644 index 0000000000..c3ccb74afe --- /dev/null +++ b/example/msd_nojump_demo.py @@ -0,0 +1,48 @@ +# mypy: ignore-errors +import MDAnalysis as mda +from MDAnalysis.analysis.msd import EinsteinMSD +from MDAnalysis.tests.datafiles import RANDOM_WALK, RANDOM_WALK_TOPO +from MDAnalysis.transformations import NoJump +import matplotlib.pyplot as plt + +print("Using input files:") +print("Topology:", RANDOM_WALK_TOPO) +print("Trajectory:", RANDOM_WALK) + +u = mda.Universe(RANDOM_WALK_TOPO, RANDOM_WALK) + +# --- FIX: define box dimensions BEFORE NoJump runs --- +box = [100.0, 100.0, 100.0, 90.0, 90.0, 90.0] + + +def set_box(ts): + ts.dimensions = box + return ts + + +# Apply transformations in correct order +u.trajectory.add_transformations( + set_box, # must come first + NoJump(u), # requires PBC +) + +# Compute MSD +msd = EinsteinMSD(u, select="all", msd_type="xyz", fft=False) +msd.run() + +lagtimes = msd.results.delta_t_values +msd_values = msd.results.timeseries + +plt.figure(figsize=(6, 4)) +plt.plot(lagtimes, msd_values, label="Computed MSD") +plt.plot(lagtimes, 6 * lagtimes, "--", label="Theoretical 3D MSD (6τ)") +plt.xlabel("Lag time (τ)") +plt.ylabel("MSD") +plt.legend() +plt.title("Mean Squared Displacement with NoJump") + +plt.savefig("example/msd_nojump.png", dpi=150, bbox_inches="tight") + +plt.close() + +print("Saved plot to msd_nojump.png") diff --git a/package/AUTHORS b/package/AUTHORS index e23f2afcf2..cd9ab484a4 100644 --- a/package/AUTHORS +++ b/package/AUTHORS @@ -265,6 +265,7 @@ Chronological list of authors - Raúl Lois-Cuns - Pranay Pelapkar - Shreejan Dolai + - Tanisha Dubey External code ------------- diff --git a/package/MDAnalysis/analysis/msd.py b/package/MDAnalysis/analysis/msd.py index 3ce9eecaa7..5d4ecdf07e 100644 --- a/package/MDAnalysis/analysis/msd.py +++ b/package/MDAnalysis/analysis/msd.py @@ -69,8 +69,33 @@ back into the primary simulation cell. In MDAnalysis you can use the - :class:`~MDAnalysis.transformations.nojump.NoJump` - transformation. + :class:`~MDAnalysis.transformations.nojump.NoJump` + transformation. + transformation to unwrap coordinates on-the-fly. + + A minimal example: + + .. code-block:: python + + import MDAnalysis as mda + from MDAnalysis.transformations import NoJump + + u = mda.Universe(TOP, TRAJ) + + # Apply NoJump transformation to unwrap coordinates + nojump = NoJump(u) + u.trajectory.add_transformations(nojump) + + # Now the trajectory is unwrapped and MSD can be computed normally: + from MDAnalysis.analysis.msd import EinsteinMSD + MSD = EinsteinMSD(u, select="all", msd_type="xyz") + MSD.run() + + This example assumes that the trajectory contains periodic box + dimensions. If no periodic boundary information is present, box + dimensions must be defined before applying ``NoJump``. + + This replaces the need to preprocess trajectories externally. In GROMACS, for example, this can be done using `gmx trjconv`_ with the ``-pbc nojump`` flag. From 66d7f121aef095737d67faae9867d8f88ca39903 Mon Sep 17 00:00:00 2001 From: tanii1125 Date: Wed, 17 Dec 2025 16:18:55 +0530 Subject: [PATCH 2/5] Corrected indentation --- example/msd_nojump_demo.py | 48 ------------------------------ package/MDAnalysis/analysis/msd.py | 5 ++-- 2 files changed, 2 insertions(+), 51 deletions(-) delete mode 100644 example/msd_nojump_demo.py diff --git a/example/msd_nojump_demo.py b/example/msd_nojump_demo.py deleted file mode 100644 index c3ccb74afe..0000000000 --- a/example/msd_nojump_demo.py +++ /dev/null @@ -1,48 +0,0 @@ -# mypy: ignore-errors -import MDAnalysis as mda -from MDAnalysis.analysis.msd import EinsteinMSD -from MDAnalysis.tests.datafiles import RANDOM_WALK, RANDOM_WALK_TOPO -from MDAnalysis.transformations import NoJump -import matplotlib.pyplot as plt - -print("Using input files:") -print("Topology:", RANDOM_WALK_TOPO) -print("Trajectory:", RANDOM_WALK) - -u = mda.Universe(RANDOM_WALK_TOPO, RANDOM_WALK) - -# --- FIX: define box dimensions BEFORE NoJump runs --- -box = [100.0, 100.0, 100.0, 90.0, 90.0, 90.0] - - -def set_box(ts): - ts.dimensions = box - return ts - - -# Apply transformations in correct order -u.trajectory.add_transformations( - set_box, # must come first - NoJump(u), # requires PBC -) - -# Compute MSD -msd = EinsteinMSD(u, select="all", msd_type="xyz", fft=False) -msd.run() - -lagtimes = msd.results.delta_t_values -msd_values = msd.results.timeseries - -plt.figure(figsize=(6, 4)) -plt.plot(lagtimes, msd_values, label="Computed MSD") -plt.plot(lagtimes, 6 * lagtimes, "--", label="Theoretical 3D MSD (6τ)") -plt.xlabel("Lag time (τ)") -plt.ylabel("MSD") -plt.legend() -plt.title("Mean Squared Displacement with NoJump") - -plt.savefig("example/msd_nojump.png", dpi=150, bbox_inches="tight") - -plt.close() - -print("Saved plot to msd_nojump.png") diff --git a/package/MDAnalysis/analysis/msd.py b/package/MDAnalysis/analysis/msd.py index 5d4ecdf07e..d533ec26f9 100644 --- a/package/MDAnalysis/analysis/msd.py +++ b/package/MDAnalysis/analysis/msd.py @@ -69,9 +69,8 @@ back into the primary simulation cell. In MDAnalysis you can use the - :class:`~MDAnalysis.transformations.nojump.NoJump` - transformation. - transformation to unwrap coordinates on-the-fly. + :class:`~MDAnalysis.transformations.nojump.NoJump` + transformation to unwrap coordinates on-the-fly. A minimal example: From bbdcd687b68ec8b6ba86a20df8bae0be34812a82 Mon Sep 17 00:00:00 2001 From: Tanisha Dubey Date: Tue, 6 Jan 2026 23:05:56 +0530 Subject: [PATCH 3/5] Update package/MDAnalysis/analysis/msd.py Co-authored-by: Oliver Beckstein --- package/MDAnalysis/analysis/msd.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package/MDAnalysis/analysis/msd.py b/package/MDAnalysis/analysis/msd.py index f1a4361e6b..fb53875ae5 100644 --- a/package/MDAnalysis/analysis/msd.py +++ b/package/MDAnalysis/analysis/msd.py @@ -82,8 +82,7 @@ u = mda.Universe(TOP, TRAJ) # Apply NoJump transformation to unwrap coordinates - nojump = NoJump(u) - u.trajectory.add_transformations(nojump) + u.trajectory.add_transformations(NoJump(u)) # Now the trajectory is unwrapped and MSD can be computed normally: from MDAnalysis.analysis.msd import EinsteinMSD From a33352a090f9d1e8fb5925009ec145eb5237cbe4 Mon Sep 17 00:00:00 2001 From: Tanisha Dubey Date: Wed, 7 Jan 2026 00:15:57 +0530 Subject: [PATCH 4/5] Update package/MDAnalysis/analysis/msd.py Co-authored-by: Oliver Beckstein --- package/MDAnalysis/analysis/msd.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package/MDAnalysis/analysis/msd.py b/package/MDAnalysis/analysis/msd.py index fb53875ae5..033dfa8bbc 100644 --- a/package/MDAnalysis/analysis/msd.py +++ b/package/MDAnalysis/analysis/msd.py @@ -91,7 +91,11 @@ This example assumes that the trajectory contains periodic box dimensions. If no periodic boundary information is present, box - dimensions must be defined before applying ``NoJump``. + dimensions must be defined before applying ``NoJump``, which can + be accomplished by applying the + :class:`~MDAnalysis.transformations.boxdimensions.set_dimensions` + transformation *before* the + :class:`~MDAnalysis.transformations.nojump.NoJump` transformation. This replaces the need to preprocess trajectories externally. From 9a7e0d07d151db675128fb93697566caaefbb03b Mon Sep 17 00:00:00 2001 From: Oliver Beckstein Date: Wed, 7 Jan 2026 10:23:20 -0700 Subject: [PATCH 5/5] Update package/MDAnalysis/analysis/msd.py --- package/MDAnalysis/analysis/msd.py | 34 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/package/MDAnalysis/analysis/msd.py b/package/MDAnalysis/analysis/msd.py index 033dfa8bbc..814ea37bed 100644 --- a/package/MDAnalysis/analysis/msd.py +++ b/package/MDAnalysis/analysis/msd.py @@ -72,23 +72,23 @@ :class:`~MDAnalysis.transformations.nojump.NoJump` transformation to unwrap coordinates on-the-fly. - A minimal example: - - .. code-block:: python - - import MDAnalysis as mda - from MDAnalysis.transformations import NoJump - - u = mda.Universe(TOP, TRAJ) - - # Apply NoJump transformation to unwrap coordinates - u.trajectory.add_transformations(NoJump(u)) - - # Now the trajectory is unwrapped and MSD can be computed normally: - from MDAnalysis.analysis.msd import EinsteinMSD - MSD = EinsteinMSD(u, select="all", msd_type="xyz") - MSD.run() - + A minimal example: + + .. code-block:: python + + import MDAnalysis as mda + from MDAnalysis.transformations import NoJump + + u = mda.Universe(TOP, TRAJ) + + # Apply NoJump transformation to unwrap coordinates + u.trajectory.add_transformations(NoJump(u)) + + # Now the trajectory is unwrapped and MSD can be computed normally: + from MDAnalysis.analysis.msd import EinsteinMSD + MSD = EinsteinMSD(u, select="all", msd_type="xyz") + MSD.run() + This example assumes that the trajectory contains periodic box dimensions. If no periodic boundary information is present, box dimensions must be defined before applying ``NoJump``, which can