OpenFreeEnergy / OpenFreeEnergy/openfe

Extended equilibration workflows

Open
#1,661 1 comment 1 reaction 0 assignees View on GitHub

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

  1. Energy minimization (50k steps)
  2. Heat 0 → 300 K over 200 ps
  3. 200 ps with heavy-atom restraints (10 kcal/mol/Ų harmonic restraint)
  4. 200 ps with backbone restraints (10 kcal/mol/Ų harmonic restraint)
  5. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.