IMDv2 generic support implmentation with tests#141
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR extends imdclient to handle more IMDv2 streaming patterns (notably variable energy-packet ordering) and adds/updates integration tests and simulation inputs to validate IMDv2 behavior across supported engines.
Changes:
- Update IMDv2 frame parsing to tolerate multiple leading energy packets before coordinates and to reuse cached energies when energies are omitted.
- Add IMDv2 integration test coverage alongside existing IMDv3 tests for NAMD, GROMACS, and LAMMPS.
- Add new IMDv2 engine input/config files and rename/refactor test datafile constants to separate v2/v3 variants.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| imdclient/IMDClient.py | Adjust IMDv2 producer parsing to handle multiple/optional energy packets before coordinates. |
| imdclient/tests/base.py | Refactor integration test base class and add an IMDv2-specific integration test class. |
| imdclient/tests/test_namd.py | Split shared NAMD fixtures and add IMDv2 + IMDv3 integration test classes with version-specific inputs. |
| imdclient/tests/test_lammps.py | Split shared LAMMPS fixtures and add IMDv2 + IMDv3 integration test classes with version-specific inputs. |
| imdclient/tests/test_gromacs.py | Split shared GROMACS fixtures and add IMDv2 + IMDv3 integration test classes with version-specific inputs. |
| imdclient/tests/minimalreader.py | Handle missing box data when converting to MDAnalysis dimensions during stream processing. |
| imdclient/tests/datafiles.py | Rename/split datafile constants to explicitly distinguish v2 vs v3 simulation inputs. |
| imdclient/data/namd/md/namd_v2_nst_1.namd | Add NAMD IMDv2 test configuration (NST=1). |
| imdclient/data/namd/md/namd_v2_nst_8.namd | Add NAMD IMDv2 test configuration (NST=8). |
| imdclient/data/lammps/md/lammps_v2_nst_1.in | Add LAMMPS IMDv2 test input (NST=1). |
| imdclient/data/lammps/md/lammps_v2_nst_8.in | Add LAMMPS IMDv2 test input (NST=8). |
| imdclient/data/lammps/md/lammps_v3_nst_1.in | Expand LAMMPS IMDv3 fix options to explicitly enable time/box/coords/vel/forces. |
| imdclient/data/lammps/md/lammps_v3_nst_8.in | Expand LAMMPS IMDv3 fix options to explicitly enable time/box/coords/vel/forces. |
| imdclient/data/gromacs/md/gromacs_v2_nst1.mdp | Add GROMACS IMDv2 test MDP (NST=1). |
| imdclient/data/gromacs/md/gromacs_v2_nst8.mdp | Add GROMACS IMDv2 test MDP (NST=8). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
fca1842 to
bd67a88
Compare
orbeckst
left a comment
There was a problem hiding this comment.
As discussed in meeting, wrap the GROMACS streamed coordinates into the unit cell by
- extracting the ts.dimensions from the saved trajectory
- create two on-the-fly transformations
- use the transformations with the in-memory universe that you build with the numpy array of the IMD data
This should generate an in-memory trajectory of wrapped coordinates.
e7a22a3 to
f39d6b3
Compare
- v2 unexpected packets case - trate sending only in v2
|
@orbeckst - This PR is finally done after a bit of back and forth trying to figure out issues with using v2 in GROMACS. Thank you to you and @HeydenLabASU for the discussion and suggestions on solving this issue. |
This PR provides generic IMDv2 support for handling various v2 streaming scenarios in
imdclientFixes #140 , #143
Changes made in this Pull Request:
IMD-unwrap=Truein session infotratesending viaIMDClientobjectNote: IMDv2 in GROMACS seems to expects transmission rate from the user via the client, as discussed in #143
It ignores
IMD-nstin the*.mdpfile. Thus theIMDClientobject was modified to sendIMD_TRATEright afterIMD_GOas set in the object initiation when using v2.PR Checklist