OpenFreeEnergy / OpenFreeEnergy/openfe
Extended equilibration workflows
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 331
- Forks
- 56
- Avg merge
- 3d 9h
- Merged PRs (30d)
- 13
Description
Is your feature request related to a problem? Please describe.
OpenFE currently handles equilibration in a fixed way. For some workflows, especially when trying to reproduce published FEP results, this isn’t flexible enough. I need to define multi-stage equilibration sequences with different restraints, temperature ramps, and durations. Right now the only options are to modify internal OpenFE code or run equilibration separately, which breaks reproducibility.
Related discussion: https://github.com/OpenFreeEnergy/openfe/discussions/1652
Describe the solution you'd like
I’d like OpenFE to support fully configurable equilibration workflows, either through YAML/config files or through Python. The idea would be to allow a sequence of equilibration steps that are executed in order. Example of what a YAML-like definition could look like:
equilibration:
- minimize:
steps: 50000
- heat:
temp_start: 0
temp_end: 300
duration_ps: 200
- restrain:
target: heavy_atoms
force_constant_kcal_per_mol_A2: 10
duration_ps: 200
- restrain:
target: backbone
force_constant_kcal_per_mol_A2: 10
duration_ps: 200
- unrestrained:
duration_ps: 200
A Python equivalent where stages can be added to a list would also work. The key point is to allow users to define their own equilibration schedule without diving into the internals of OpenFE.
Describe alternatives you've considered
- Running equilibration manually with OpenMM/AMBER/GROMACS and then passing the equilibrated structure to OpenFE. This works, but is cumbersome breaks reproducibility since it lives outside the OpenFE run.
- Modifying OpenFE’s internal code or templates. Not maintainable and must be redone whenever OpenFE changes.
- Using the OpenMM script generator and manually doing the equilibration workflow. Still requires external orchestration.
None of these options integrate well with OpenFE.
Additional context
The workflow I’m trying to reproduce is from this paper: https://pubs.acs.org/doi/10.1021/acs.jpcb.3c06766
Their equilibration sequence:
Intialize each edge at λ=0.5, then
- Energy minimization (50k steps)
- Heat 0 → 300 K over 200 ps
- 200 ps with heavy-atom restraints (10 kcal/mol/Ų harmonic restraint)
- 200 ps with backbone restraints (10 kcal/mol/Ų harmonic restraint)
- 200 ps unrestrained
load initial coordinates for each edge
Supporting this directly in OpenFE would allow published workflows to be reproduced without patching internals or running equilibration outside the library.
I'm happy to help contribute to this in development if any of the core developers could give some guidance on the main tasks required.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing OpenFE’s current fixed equilibration workflow and the related discussion at #1652, then compare its behavior with the published sequence described in the issue. Determine how configurable ordered stages, restraints, temperature ramps, and durations should be represented and executed; done means a reproducible OpenFE workflow can define and run such a sequence without modifying internals or using external orchestration.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100