Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
349 commits
Select commit Hold shift + click to select a range
b24ea6b
Some restaints updates
hannahbaumann Jan 10, 2025
ee11781
Dry run and make run function in the RunUnit
hannahbaumann Jan 13, 2025
06b04a2
Delete commented out parts
hannahbaumann Jan 13, 2025
fd81c70
Add test for user charges
hannahbaumann Jan 13, 2025
f26f886
Small test
hannahbaumann Jan 14, 2025
69e6d8c
Small fix
hannahbaumann Jan 14, 2025
4f59bc5
Add more tests
hannahbaumann Jan 14, 2025
101f49a
More tests
hannahbaumann Jan 14, 2025
98059a0
Add tests for cutoff and pressure
hannahbaumann Jan 14, 2025
080526f
Merge branch 'main' into start_septop
hannahbaumann Jan 15, 2025
0bd8b7d
Add tests for reference xml
hannahbaumann Jan 16, 2025
40c3772
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Jan 16, 2025
7faae6e
Test distance solvent restraint in dry run
hannahbaumann Jan 16, 2025
3fa964f
Add slow test for solvent restraints
hannahbaumann Jan 20, 2025
46465fb
Small changes
hannahbaumann Jan 23, 2025
c54c113
Merge branch 'main' into start_septop
hannahbaumann Jan 23, 2025
9e711fd
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Jan 24, 2025
d06d7ca
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Jan 28, 2025
7f10674
First step towards using omm-restraints class
hannahbaumann Jan 29, 2025
74c88ab
Small fixes
hannahbaumann Jan 29, 2025
956f3f9
Fix type
hannahbaumann Jan 29, 2025
0516aad
Fix atom selection solvent restraints
hannahbaumann Jan 29, 2025
9166110
Fix modeller positions
hannahbaumann Jan 29, 2025
e22c703
Use separate structures for getting Boresch restraints
hannahbaumann Jan 31, 2025
13769c6
Add equil traj output
hannahbaumann Jan 31, 2025
5515687
Add traj output equil
hannahbaumann Jan 31, 2025
c000832
Subclass MDOutputSettings for SepTop
hannahbaumann Feb 4, 2025
60db5a6
Use traj for getting Boresch restraints
hannahbaumann Feb 10, 2025
9ed4ee6
Sanitize rdmol
hannahbaumann Feb 11, 2025
6ac3004
Merge branch 'main' into start_septop
hannahbaumann Feb 11, 2025
77bfba0
Small fixes
hannahbaumann Feb 11, 2025
efc351a
Add missing import
hannahbaumann Feb 11, 2025
f031006
Update nojump
hannahbaumann Feb 13, 2025
4f1f7de
Small fix
hannahbaumann Feb 13, 2025
cc2aa27
Add restraint equ
hannahbaumann Feb 14, 2025
6587df9
Add missing arg restraint equ
hannahbaumann Feb 14, 2025
4047bd7
Add check for traj write interval
hannahbaumann Feb 14, 2025
bd8c2d1
Merge branch 'main' into start_septop
hannahbaumann Feb 14, 2025
feb6a97
Small fix
hannahbaumann Feb 14, 2025
9cd84d9
Change nojump
hannahbaumann Feb 14, 2025
fa1e497
Merge upstream changes
hannahbaumann Feb 27, 2025
99a0465
Some more restraint changes
hannahbaumann Feb 27, 2025
95bc3c3
Update tests
hannahbaumann Feb 27, 2025
02f02f8
EnforcePeriodic and remove femto restraints
hannahbaumann Feb 28, 2025
7f36893
Merge branch 'main' into start_septop
hannahbaumann Feb 28, 2025
86ad7b5
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Mar 3, 2025
bb880a7
Merge branch 'main' into start_septop
hannahbaumann Mar 3, 2025
99a8386
Switch to omm-restraints in the solvent and add standard state correc…
hannahbaumann Mar 5, 2025
aa4f79d
Forgot to remove something
hannahbaumann Mar 5, 2025
5bc8202
Test out something
hannahbaumann Mar 5, 2025
4061098
Harmonic restraints solvent changes
hannahbaumann Mar 7, 2025
6c5e40a
Introduce lambda_restraints param for solvent
hannahbaumann Mar 14, 2025
a8a7008
Revert solvent restraints back to old way
hannahbaumann Mar 14, 2025
bb5b2ea
Mypy fixes
hannahbaumann Mar 14, 2025
763f154
Merge branch 'main' into start_septop
hannahbaumann Mar 14, 2025
8155483
Mypy ignore
hannahbaumann Mar 14, 2025
7ff06c6
Small fix in estimates
hannahbaumann Mar 14, 2025
8b3b533
Update tests
hannahbaumann Mar 14, 2025
406ee07
Restructure Setup Units
hannahbaumann Mar 19, 2025
b1c2e9d
Update protocol settings
hannahbaumann Mar 19, 2025
6ed8181
mypy fixes
hannahbaumann Mar 19, 2025
a5b78a9
Remove unnecessary function
hannahbaumann Mar 19, 2025
0ca65e6
Merge branch 'main' into start_septop
hannahbaumann Mar 19, 2025
dd29739
Add additional settings validation
hannahbaumann Mar 19, 2025
5f9a1fc
mypy fix
hannahbaumann Mar 19, 2025
3e8ee0b
Some more API changes in the Setup units
hannahbaumann Mar 20, 2025
896a5f7
Mypy fixes of the day
hannahbaumann Mar 20, 2025
d5c167a
Merge branch 'main' into start_septop
hannahbaumann Mar 20, 2025
a885191
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Mar 20, 2025
8e6d340
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Mar 20, 2025
02243de
Small fix
hannahbaumann Mar 20, 2025
f44a35c
MOve equilibration from setup to run
hannahbaumann Mar 20, 2025
a3ca799
Update test result file
hannahbaumann Mar 20, 2025
cceaa4f
Update _pre_equilibration and tests
hannahbaumann Mar 21, 2025
cb6dba7
Some more API changes
hannahbaumann Mar 21, 2025
23f1896
Update slow tests
hannahbaumann Mar 21, 2025
40a4db3
mypy fix
hannahbaumann Mar 21, 2025
406d89c
Remove unused functions
hannahbaumann Mar 21, 2025
af84399
Enforce periodic boundary
hannahbaumann Mar 25, 2025
c171fbc
Update write frequency
hannahbaumann Apr 3, 2025
88ea11e
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Apr 4, 2025
729864b
Add short prequ complex setup
hannahbaumann Apr 4, 2025
9c2837f
Update omm-restraints
hannahbaumann Apr 4, 2025
dcac3a8
Merge branch 'main' into start_septop
hannahbaumann Apr 4, 2025
47128df
Fix equilibration setup
hannahbaumann Apr 9, 2025
578ca4b
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Apr 9, 2025
7d17558
Use max fc angle for Boresch finding and sanitize rdmol
hannahbaumann Apr 15, 2025
dac4491
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Apr 15, 2025
551caec
Switch to min for force constant Boresch selection
hannahbaumann Apr 16, 2025
c7d8733
Merge branch 'main' into start_septop
hannahbaumann Apr 23, 2025
e820815
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Apr 23, 2025
369888a
Add missing import
hannahbaumann Apr 24, 2025
7d91feb
Merge branch 'main' into start_septop
hannahbaumann Apr 24, 2025
07d55f2
Update default settings
hannahbaumann Apr 28, 2025
15e9183
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Apr 28, 2025
c445c11
Remove some unnecessary print things
hannahbaumann May 2, 2025
777e79e
Merge branch 'main' into start_septop
hannahbaumann May 2, 2025
ed60b46
Some small fixes
hannahbaumann May 20, 2025
dbc3afd
Merge branch 'main' into start_septop
hannahbaumann May 20, 2025
11731fd
Merge branch 'main' into start_septop
hannahbaumann Jun 2, 2025
12ef50f
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Jun 4, 2025
94d68f2
Add septop API docs
IAlibay Jun 5, 2025
bda1ce4
Add SepTop user guide and tutorial
hannahbaumann Jun 6, 2025
e73b680
Merge pull request #3 from hannahbaumann/septop_user_guide
hannahbaumann Jun 6, 2025
affb2bb
Merge branch 'main' into start_septop
hannahbaumann Jun 6, 2025
610b556
Remove SepTop API ref for now till other PR merged
hannahbaumann Jun 6, 2025
88840d2
small fix
hannahbaumann Jun 6, 2025
0715458
Some changes to the user guide
hannahbaumann Jun 6, 2025
aa0fdcc
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Jun 10, 2025
78354fa
Address review comments user guide
hannahbaumann Jun 10, 2025
90ee5d5
Update text
IAlibay Jun 10, 2025
b288874
Update docs/guide/protocols/septop.rst
hannahbaumann Jun 10, 2025
c5c710a
Merge branch 'main' into start_septop
IAlibay Jun 12, 2025
9b84f9d
Remove ununsed femto constants file
hannahbaumann Jun 13, 2025
0735f21
Switch from is_close to assert_all_close
hannahbaumann Jun 13, 2025
aeea9f4
Merge branch 'main' into start_septop
hannahbaumann Jun 13, 2025
b7a3a2e
Move compute energy to conftest
hannahbaumann Jun 13, 2025
8ab0a32
Return openff unit for calculate energy
hannahbaumann Jun 13, 2025
30a2f3e
Merge pull request #2 from OpenFreeEnergy/septop_api_docs
hannahbaumann Jun 13, 2025
8c311e9
Fix unit names api docs
hannahbaumann Jun 13, 2025
1d70d60
Update init to fix docs
hannahbaumann Jun 13, 2025
21088fd
Merge branch 'main' into start_septop
hannahbaumann Jun 13, 2025
8318698
Update docs/guide/protocols/septop.rst
hannahbaumann Jun 13, 2025
e08f9e8
Update docs/guide/protocols/septop.rst
hannahbaumann Jun 13, 2025
67c6cc5
Test api build
hannahbaumann Jun 13, 2025
d413072
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Jun 13, 2025
06e89f4
Address some review comments
hannahbaumann Jun 13, 2025
47c00b0
Fix indentation
hannahbaumann Jun 13, 2025
5f7716a
Merge branch 'main' into start_septop
hannahbaumann Jun 16, 2025
3852ea3
Update openfe/protocols/openmm_septop/equil_septop_method.py
hannahbaumann Jun 16, 2025
6a2cdb7
Update openfe/protocols/openmm_septop/equil_septop_method.py
hannahbaumann Jun 16, 2025
90aac5c
Update openfe/protocols/openmm_septop/equil_septop_method.py
hannahbaumann Jun 16, 2025
1e0e137
Update openfe/protocols/openmm_septop/equil_septop_method.py
hannahbaumann Jun 16, 2025
3097669
Update openfe/protocols/openmm_septop/base.py
hannahbaumann Jun 16, 2025
9c1c8e5
Update openfe/protocols/openmm_septop/equil_septop_method.py
hannahbaumann Jun 16, 2025
c629e96
Update openfe/protocols/openmm_septop/equil_septop_method.py
hannahbaumann Jun 16, 2025
6ffc25e
Update openfe/protocols/openmm_septop/equil_septop_method.py
hannahbaumann Jun 16, 2025
2ae1ebb
Update openfe/protocols/openmm_septop/equil_septop_method.py
hannahbaumann Jun 16, 2025
b476858
Merge omm-restraints changes
hannahbaumann Jun 16, 2025
87b855b
Address review comments base.py
hannahbaumann Jun 16, 2025
09dbd4c
Update openfe/protocols/openmm_septop/base.py
hannahbaumann Jun 16, 2025
1a1fe22
Update openfe/protocols/openmm_septop/base.py
hannahbaumann Jun 16, 2025
094e81a
Small fix
hannahbaumann Jun 16, 2025
2d6bbc1
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Jun 16, 2025
ad4d12e
Test if this fixes rst problems
hannahbaumann Jun 16, 2025
b2f80d1
Update openfe/protocols/openmm_septop/equil_septop_method.py
hannahbaumann Jun 16, 2025
577ac3e
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Jun 16, 2025
c2ee83b
More review addressing
hannahbaumann Jun 16, 2025
c3b089b
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Jun 16, 2025
b1f0b40
Updating doc strings, type hints and other things
hannahbaumann Jun 16, 2025
24ec9c0
Switch from BACE to eg5 in tests
hannahbaumann Jun 17, 2025
d604e67
Addressing more review comments
hannahbaumann Jun 17, 2025
f8c0b42
Rename test files and add tokenization tests
hannahbaumann Jun 17, 2025
60c3fa2
Add citation and due credit test
hannahbaumann Jun 17, 2025
e1ca7c7
Update default settings to match other protocols
hannahbaumann Jun 17, 2025
55c9824
Merge branch 'main' into start_septop
hannahbaumann Jun 18, 2025
7bec29a
Update openfe/protocols/openmm_septop/equil_septop_settings.py
IAlibay Jun 18, 2025
c1550eb
Small fixes
hannahbaumann Jun 18, 2025
a22fd33
Merge branch 'main' into start_septop
hannahbaumann Jun 19, 2025
ea3baa1
Test api docs built
hannahbaumann Jun 20, 2025
2befe9b
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Jun 20, 2025
7093825
Another docs built test
hannahbaumann Jun 20, 2025
c7648cf
Test sphinx
hannahbaumann Jun 20, 2025
e93a6fc
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Jun 23, 2025
29fe940
Reverse docs test
hannahbaumann Jun 23, 2025
97d7387
Switch to Mixin class for _get_components and _handle_settings
hannahbaumann Jun 23, 2025
f54be85
Merge branch 'main' into start_septop
hannahbaumann Jun 24, 2025
97dda95
Set standard state correction in the solvent to zero
hannahbaumann Jun 24, 2025
9d71f6d
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Jun 24, 2025
93c197d
some tweaks to septop docs
mikemhenry Jun 24, 2025
3fc4eed
turn off main CI
mikemhenry Jun 24, 2025
1b1234b
Update openfe/protocols/openmm_septop/base.py
hannahbaumann Jun 25, 2025
c2a4d1e
Update openfe/protocols/openmm_septop/base.py
hannahbaumann Jun 26, 2025
3f79a88
Sort imports base.py
hannahbaumann Jun 26, 2025
a709fbc
Updates base.py
hannahbaumann Jun 26, 2025
b0f1e4f
Revert "Update openfe/protocols/openmm_septop/base.py"
hannahbaumann Jun 26, 2025
5926240
Revert "Update openfe/protocols/openmm_septop/base.py"
hannahbaumann Jun 26, 2025
bb26a61
Revert "Sort imports base.py"
hannahbaumann Jun 26, 2025
ac358e4
Address review comments for base.py
hannahbaumann Jun 26, 2025
b549394
Address equil_septop_methods review part 1
hannahbaumann Jun 26, 2025
25c4989
Merge branch 'main' into start_septop
hannahbaumann Jun 26, 2025
cca8e09
Address review comments tests
hannahbaumann Jun 26, 2025
fff7331
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Jun 26, 2025
6b9242b
Remove unused imports
hannahbaumann Jun 26, 2025
a151bf0
More removal of unused imports in utils.py
hannahbaumann Jun 26, 2025
5c10c2c
Functions in the _create method to reduce code length
hannahbaumann Jun 26, 2025
89e8035
black reformatting
hannahbaumann Jun 26, 2025
1da79c2
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Jun 27, 2025
d9e0e18
Changing to Quantity
hannahbaumann Jun 27, 2025
41fdeca
Small mypy fix
hannahbaumann Jun 27, 2025
04da3bb
type ignore Mixin
hannahbaumann Jun 27, 2025
1f0c084
Small fix mypy
hannahbaumann Jun 27, 2025
373512e
Add in type ignore
hannahbaumann Jun 27, 2025
09b4207
Mypy fix
hannahbaumann Jun 27, 2025
62b2f5e
More mypy stuff
hannahbaumann Jun 27, 2025
a528910
Small fix
hannahbaumann Jun 27, 2025
6483176
Merge remote-tracking branch 'upstream/omm-restraints' into start_septop
hannahbaumann Jun 27, 2025
820e2ca
add missing backtick and I think we want a literal text inline, not a…
mikemhenry Jun 27, 2025
e1de8a6
automock a few imports
mikemhenry Jun 27, 2025
feab5c2
undo ci skip
mikemhenry Jun 27, 2025
6b86d54
Merge branch 'start_septop' into septop-docs-tweaks
mikemhenry Jun 27, 2025
c41cc57
Merge pull request #4 from OpenFreeEnergy/septop-docs-tweaks
hannahbaumann Jun 30, 2025
9c706d9
Merge branch 'main' into start_septop
hannahbaumann Jun 30, 2025
3e2e4a7
Another mypy fix
hannahbaumann Jul 1, 2025
014cc4f
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Jul 1, 2025
d9f4eb0
Merge branch 'main' into start_septop
hannahbaumann Jul 1, 2025
32184b2
Merge branch 'main' into start_septop
hannahbaumann Jul 8, 2025
274fa25
Merge branch 'main' into start_septop
hannahbaumann Jul 29, 2025
97c5dc5
Merge remote-tracking branch 'upstream/main' into start_septop
hannahbaumann Jul 31, 2025
5af185a
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Jul 31, 2025
1579150
Fix conftest septop
hannahbaumann Jul 31, 2025
6091880
Fix some mypy issues
hannahbaumann Jul 31, 2025
b2cdfa9
More mypy fixes
hannahbaumann Jul 31, 2025
8592684
Forgot something
hannahbaumann Jul 31, 2025
30c3c17
And another one
hannahbaumann Jul 31, 2025
8a62d40
Merge branch 'main' into start_septop
hannahbaumann Jul 31, 2025
5e26f21
Merge branch 'main' into start_septop
hannahbaumann Aug 1, 2025
b61a5f4
Add result from longer run and update tests
hannahbaumann Aug 1, 2025
770725d
Remove CPU platform from slow tests
hannahbaumann Aug 1, 2025
4c8d3f3
Small fix
hannahbaumann Aug 1, 2025
52a3f77
Add tests for sams and independent sampling
hannahbaumann Aug 1, 2025
7425e06
Fix slow test
hannahbaumann Aug 1, 2025
6936be6
Add another test
hannahbaumann Aug 1, 2025
f7711c7
More tests
hannahbaumann Aug 4, 2025
a609f78
Add tests for SepTop utils
hannahbaumann Aug 4, 2025
b39157a
Remove unnecessary test
hannahbaumann Aug 4, 2025
e43f23f
Add news entry
hannahbaumann Aug 4, 2025
8fe93a4
First attempt to fix alignment
hannahbaumann Aug 8, 2025
33d4f25
Reverse protein alignment
hannahbaumann Aug 8, 2025
28eaf50
Merge branch 'main' into start_septop
hannahbaumann Aug 12, 2025
881126f
Add anchor finding strategy boresch selection
hannahbaumann Aug 12, 2025
26b0091
Merge branch 'main' into start_septop
hannahbaumann Aug 13, 2025
1b29d4e
Dont enforce periodic box in pre equilibration
hannahbaumann Aug 13, 2025
686631b
Merge branch 'main' into start_septop
hannahbaumann Aug 14, 2025
10c1981
Merge branch 'main' into start_septop
IAlibay Aug 14, 2025
141eb97
Image complex B before alignment
hannahbaumann Aug 14, 2025
dcd429d
Merge branch 'start_septop' of github.com:hannahbaumann/openfe_septop…
hannahbaumann Aug 14, 2025
c3d3536
Add box angle
hannahbaumann Aug 14, 2025
c53821a
Merge branch 'main' into start_septop
hannahbaumann Aug 22, 2025
2ea6d37
Add tmpdir to slow test
hannahbaumann Aug 27, 2025
1edbb43
Merge branch 'main' into start_septop
hannahbaumann Aug 27, 2025
e82f5e7
Fix tmp files test septop utils
hannahbaumann Aug 27, 2025
825ddc8
Merge branch 'main' into start_septop
hannahbaumann Sep 12, 2025
dc31215
Apply suggestions from code review
IAlibay Sep 17, 2025
d1128c3
Merge branch 'main' into start_septop
hannahbaumann Sep 17, 2025
f28ff8e
Update openfe/tests/protocols/openmm_septop/test_septop_protocol.py
IAlibay Sep 17, 2025
c805a97
Apply suggestions from code review
IAlibay Sep 17, 2025
a82ef53
Apply suggestions from code review
IAlibay Sep 17, 2025
fac9aee
Apply suggestions from code review
IAlibay Sep 22, 2025
dffae05
Apply suggestions from code review
IAlibay Sep 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?= -W --keep-going
SPHINXOPTS ?= -v -W --keep-going
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
Expand Down
4 changes: 3 additions & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
"openeye": ("https://docs.eyesopen.com/toolkits/python/", None),
"mdtraj": ("https://www.mdtraj.org/1.9.5/", None),
"openff.units": ("https://docs.openforcefield.org/projects/units/en/stable", None),
"gufe": ("https://gufe.readthedocs.io/en/latest/", None),
"gufe": ("https://gufe.openfree.energy/en/latest/", None),
}

autoclass_content = "both"
Expand Down Expand Up @@ -102,8 +102,10 @@
]

autodoc_mock_imports = [
"MDAnalysis",
"matplotlib",
"mdtraj",
"openfe_analysis",
"openmmforcefields",
"openmmtools",
"pymbar",
Expand Down
Binary file added docs/guide/protocols/img/septop_cycle.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/guide/protocols/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ Details on the theory and behaviour of different Protocols are listed here.
.. toctree::
relativehybridtopology
absolutesolvation
septop
plainmd
2 changes: 2 additions & 0 deletions docs/guide/protocols/relativehybridtopology.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.. _userguide_relative_hybrid_topology_protocol:

Relative Hybrid Topology Protocol
=================================

Expand Down
131 changes: 131 additions & 0 deletions docs/guide/protocols/septop.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
Separated Topologies Protocol
=============================

Overview
--------

The :class:`SepTopProtocol <.SepTopProtocol>` [1]_, [2]_ calculates the difference in binding free energy between two ligands.
This protocol essentially performs two absolute binding free energy calculations simultaneously in opposite directions,
by (alchemically) inserting one ligand into the binding site, while removing the other ligand at the same time.
In contrast to the :ref:`RelativeHybridTopologyProtocol <userguide_relative_hybrid_topology_protocol>`, the two ligand topologies are
completely separate (meaning there is no common core), making atom mapping unnecessary and allowing transformations between chemically diverse ligands.

The relative binding free energy is calculated through a thermodynamic cycle by transforming one ligand into the other ligand
both in the solvent and in the binding site.

Restraints are required to keep the weakly
coupled and fully decoupled ligand in the binding site region and thereby reduce the phase
space that needs to be sampled. In the :class:`SepTopProtocol <.SepTopProtocol>`
we apply orientational, or Boresch-style, restraints, as described below.

In this cycle, the interactions of one molecule are turned off while simultaneously turning on interactions of the other molecule both in the solvent and complex phases.
The relative binding free energy is then obtained via summation of free energy differences along the thermodynamic cycle.

.. figure:: img/septop_cycle.png
:scale: 50%

Thermodynamic cycle for the SepTop free energy protocol.

Scientific Details
------------------

Orientational restraints
~~~~~~~~~~~~~~~~~~~~~~~~

Orientational, or Boresch-style, restraints are automaticallly (unless manually specified) applied between three protein and three ligand atoms using one bond,
two angle, and three dihedral restraints. Reference atoms are picked based on different criteria, such as the root mean squared
fluctuation of the atoms in a short MD simulation, the secondary structure of the protein, and the distance between atoms, based on heuristics from Baumann et al. [2]_.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO (issued raised): update the docs here (and in ABFEs) to reflect the new picking, i.e. it's getting closer to a mix between Hannah's appproach and MDRestraintsGenerator.


Partial annihilation scheme
~~~~~~~~~~~~~~~~~~~~~~~~~~~

In the :class:`SepTopProtocol <.SepTopProtocol>` the coulombic interactions of the molecules are fully turned off (annihilated) in the respective non-interacting end states.
The Lennard-Jones interactions are instead decoupled, meaning the intermolecular interactions are turned off, keeping the intramolecular Lennard-Jones interactions.

The lambda schedule
~~~~~~~~~~~~~~~~~~~

Molecular interactions are modified along an alchemical path using a discrete set of lambda windows.
For the transformation of ligand A to ligand B in the binding site, the following steps are carried out, starting with ligand A being fully interacting in the binding site while ligand B is decoupled.

1. Insert the non-interacting dummy ligand B into the binding site and restrain it using orientational restraints. The contribution of the restraints is calculated analytically.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Separate issue raised: the description of the lambda schedule is non symmetric, i.e. number 5 describes transferring the ligand A to solvent, but none of these refer to transferring ligand B from the solvent (I think it's what is meant by "insert the non-interacting dummy", but the language probably needs to be improved).

2. Turn on the van der Waals (vdW) interactions of ligand B while also turning on orientational restraints on ligand A.
3. Turn on the electrostatic interactions of ligand B while at the same time turning off the electrostatics of ligand A.
4. Turn off vdW interactions of ligand A while simultaneously releasing restraints on ligand B.
5. Release the restraints of the now dummy ligand A analytically and transfer the ligand into the solvent.

The lambda schedule in the solvent phase is similar to the one in the complex, except that a single harmonic distance restraint is
applied between the respective central atom in the two ligands to keep the ligands apart while doing the alchemical transformation.
A soft-core potential from Beutler et al. [3]_ is applied to the Lennard-Jones potential to avoid instablilites in intermediate lambda windows.
The lambda schedule is defined in the ``lambda_settings`` objects ``lambda_elec_A``, ``lambda_elec_B``, ``lambda_vdw_A``, ``lambda_vdw_B``,
``lambda_restraints_A``, and ``lambda_restraints_B``.

Simulation overview
~~~~~~~~~~~~~~~~~~~

The :class:`.ProtocolDAG` of the :class:`SepTopProtocol <.SepTopProtocol>` contains :class:`.ProtocolUnit`\ s from both the complex and solvent transformations.
This means that both legs of the thermodynamic cycle are constructed and run sequentially in the same :class:`.ProtocolDAG`. This is different from the :class:`.RelativeHybridTopologyProtocol` where the :class:`.ProtocolDAG` only runs a single leg of a thermodynamic cycle.
If multiple ``protocol_repeats`` are run (default: ``protocol_repeats=3``), the :class:`.ProtocolDAG` contains multiple :class:`.ProtocolUnit`\ s of both complex and solvent transformations.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unclear from this text if that means that the same restraint will be used for all repeats.


Simulation steps
""""""""""""""""

Each :class:`.ProtocolUnit` (whether complex or solvent) carries out the following steps:

1. Parameterize the system using `OpenMMForceFields <https://github.com/openmm/openmmforcefields>`_ and `Open Force Field <https://github.com/openforcefield/openff-forcefields>`_.
2. Equilibrate the fully interacting system using a short MD simulation using the same approach as the :class:`.PlainMDProtocol` (in the solvent leg this will include rounds of NVT and NPT equilibration).
3. Add restraints to the system: Orientational restraints in the complex, a single harmonic distance restraint in the solvent leg.
4. Create an alchemical system.
5. Minimize the alchemical system.
6. Equilibrate and production simulate the alchemical system using the chosen multistate sampling method (under NPT conditions).
7. Analyze results for the transformation.


.. note:: Three different types of multistate sampling (i.e. replica swapping between lambda states) methods can be chosen; HREX, SAMS, and independent (no lambda swaps attempted).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: do we have tests for SAMS and Indendent?

Last I heard SAMS was broken - we might need to fix this elsewhere.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No tests for those currently. Will raise an issue for that.

By default the HREX approach is selected, this can be altered using ``solvent_simulation_settings.sampler_method`` or ``complex_simulation_settings.sampler_method`` (default: ``repex``).


Simulation details
""""""""""""""""""

Here are some details of how the simulation is carried out which are not detailed in the :class:`SepTopProtocol <.SepTopProtocol>`:

* The protocol applies a `LangevinMiddleIntegrator <https://openmmtools.readthedocs.io/en/latest/api/generated/openmmtools.mcmc.LangevinDynamicsMove.html>`_ which uses Langevin dynamics, with the LFMiddle discretization [4]_.
* A `Monte Carlo barostat <https://docs.openmm.org/latest/api-python/generated/openmm.openmm.MonteCarloBarostat.html>`_ is used in the NPT ensemble to maintain constant pressure.

Getting the free energy estimate
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The free energy differences are obtained from simulation data using the `MBAR estimator <https://www.alchemistry.org/wiki/Multistate_Bennett_Acceptance_Ratio>`_ (multistate Bennett acceptance ratio estimator) as implemented in the `PyMBAR package <https://pymbar.readthedocs.io/en/master/mbar.html>`_.
Both the MBAR estimates of the two legs of the thermodynamic cycle, and the overall relative binding free energy (of the entire cycle) are obtained,
which is different compared to the results in the :class:`.RelativeHybridTopologyProtocol` where results from two legs of the thermodynamic cycle are obtained separately.

In addition to the estimates of the free energy changes and their uncertainty, the protocol also returns some metrics to help assess convergence of the results, these are detailed in the :ref:`multistate analysis section <multistate_analysis>`.

See Also
--------

**Tutorials**

* :any:`Separated Topologies Free Energies tutorial <../../tutorials/septop_tutorial>`

**Cookbooks**

:ref:`Cookbooks <cookbooks>`

**API Documentation**

* :ref:`OpenMM Protocol Settings <openmm protocol settings api>`

References
----------

* `pymbar <https://pymbar.readthedocs.io/en/stable/>`_
* `yank <http://getyank.org/latest/>`_
* `OpenMMTools <https://openmmtools.readthedocs.io/en/stable/>`_
* `OpenMM <https://openmm.org/>`_

.. [1] Separated topologies--a method for relative binding free energy calculations using orientational restraints, G. Rocklin, D. Mobley, K. Dill; Chem Phys, 2013; 138(8):085104. doi: 10.1063/1.4792251.
.. [2] Broadening the Scope of Binding Free Energy Calculations Using a Separated Topologies Approach, H. Baumann, E. Dybeck, C. McClendon, F. Pickard IV, V. Gapsys, L. Pérez-Benito, D. Hahn, G. Tresadern, A. Mathiowetz, D. Mobley, J. Chem. Theory Comput., 2023, 19, 15, 5058–5076
.. [3] Avoiding singularities and numerical instabilities in free energy calculations based on molecular simulations, T.C. Beutler, A.E. Mark, R.C. van Schaik, P.R. Greber, and W.F. van Gunsteren, Chem. Phys. Lett., 222 529–539 (1994)
.. [4] Unified Efficient Thermostat Scheme for the Canonical Ensemble with Holonomic or Isokinetic Constraints via Molecular Dynamics, Zhijun Zhang, Xinzijian Liu, Kangyu Yan, Mark E. Tuckerman, and Jian Liu, J. Phys. Chem. A 2019, 123, 28, 6056-6079
3 changes: 2 additions & 1 deletion docs/reference/api/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ OpenFE API Reference
defining_and_executing_simulations
openmm_rfe
openmm_solvation_afe
openmm_septop
openmm_md
openmm_protocol_settings

.. _gufe: https://gufe.readthedocs.io/en/latest/api.html
.. _gufe: https://gufe.openfree.energy/en/stable/api.html
2 changes: 2 additions & 0 deletions docs/reference/api/openmm_protocol_settings.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ can be found on the individual Protocol API reference documentation pages:

* :ref:`OpenMM Absolute Solvation Free Energy <afe solvation protocol api>`
* :ref:`OpenMM Relative Free Energy <rfe protocol api>`
* :ref:`OpenMM Relative Free Energy using SepTop <septop protocol api>`
* :ref:`OpenMM Molecular Dynamics Protocol <md protocol api>`


Expand Down Expand Up @@ -121,6 +122,7 @@ These currently include the following Protocols:

* :ref:`OpenMM Absolute Solvation Free Energy <afe solvation protocol api>`
* :ref:`OpenMM Relative Free Energy <rfe protocol api>`
* :ref:`OpenMM Relative Free Energy using SepTop <septop protocol api>`


.. autopydantic_model:: MultiStateOutputSettings
Expand Down
83 changes: 83 additions & 0 deletions docs/reference/api/openmm_septop.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
OpenMM Separated Topologies Protocol
====================================

.. _septop protocol api:

This section provides details about the OpenMM Separated Topologies Protocol
implemented in OpenFE.

Protocol API specification
--------------------------

.. module:: openfe.protocols.openmm_septop.equil_septop_method

.. autosummary::
:nosignatures:
:toctree: generated/

SepTopProtocol
SepTopComplexSetupUnit
SepTopComplexRunUnit
SepTopSolventSetupUnit
SepTopSolventRunUnit
SepTopProtocolResult

Protocol Settings
-----------------

Below are the settings which can be tweaked in the protocol. The default settings (accessed using :meth:`SepTopProtocol.default_settings`) will automatically populate settings which we have found to be useful for running a Separated Topologies free energy calculation. There will however be some cases (such as when calculating difficult to converge systems) where you will need to tweak some of the following settings.


.. module:: openfe.protocols.openmm_septop.equil_septop_settings

.. autopydantic_model:: SepTopSettings
:model-show-json: False
:model-show-field-summary: False
:model-show-config-member: False
:model-show-config-summary: False
:model-show-validator-members: False
:model-show-validator-summary: False
:field-list-validators: False
:inherited-members: SettingsBaseModel
:exclude-members: get_defaults
:member-order: bysource


Protocol Specific Settings Classes
----------------------------------

Below are Settings classes which are unique to the `SepTopProtocol`.


.. autopydantic_model:: AlchemicalSettings
:model-show-json: False
:model-show-field-summary: False
:model-show-config-member: False
:model-show-config-summary: False
:model-show-validator-members: False
:model-show-validator-summary: False
:field-list-validators: False
:inherited-members: SettingsBaseModel
:member-order: bysource

.. autopydantic_model:: LambdaSettings
:model-show-json: False
:model-show-field-summary: False
:model-show-config-member: False
:model-show-config-summary: False
:model-show-validator-members: False
:model-show-validator-summary: False
:field-list-validators: False
:inherited-members: SettingsBaseModel
:member-order: bysource

.. autopydantic_model:: SepTopEquilOutputSettings
:model-show-json: False
:model-show-field-summary: False
:model-show-config-member: False
:model-show-config-summary: False
:model-show-validator-members: False
:model-show-validator-summary: False
:field-list-validators: False
:inherited-members: SettingsBaseModel
:member-order: bysource
6 changes: 6 additions & 0 deletions docs/tutorials/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ Absolute Free Energies

- :any:`Absolute Solvation Free Energy Protocol <ahfe_tutorial>`: A walk-through of calculating the hydration free energy of a benzene ligand.

Relative Free Energies using Separated Topologies
-------------------------------------------------

- :any:`SepTop Protocol <septop_tutorial>`: A walk-through of calculating the relative binding free energy between TYK2 ligands using a Separated Topologies approach.

Molecular Dynamics (MD)
-----------------------

Expand All @@ -45,6 +50,7 @@ Generating Partial Charges
rbfe_python_tutorial
rbfe_cli_tutorial
ahfe_tutorial
septop_tutorial
md_tutorial
plotting_with_cinnabar
charge_molecules_cli_tutorial
6 changes: 6 additions & 0 deletions docs/tutorials/septop_tutorial.nblink
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"path": "../ExampleNotebooks/openmm_septop/septop_tutorial.ipynb",
"extra-media": [
"../ExampleNotebooks/openmm_septop/septop_cycle.png"
]
}
23 changes: 23 additions & 0 deletions news/septop_protocol.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
**Added:**

* Added a new RBFE protocol based on Separated Topologies.

**Changed:**

* <news item>

**Deprecated:**

* <news item>

**Removed:**

* <news item>

**Fixed:**

* <news item>

**Security:**

* <news item>
29 changes: 29 additions & 0 deletions openfe/protocols/openmm_septop/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# This code is part of OpenFE and is licensed under the MIT license.
# For details, see https://github.com/OpenFreeEnergy/openfe
"""
Run SepTop free energy calculations using OpenMM and OpenMMTools.

"""

from .equil_septop_settings import (
SepTopSettings,
)

from .equil_septop_method import (
SepTopProtocol,
SepTopProtocolResult,
SepTopComplexSetupUnit,
SepTopComplexRunUnit,
SepTopSolventSetupUnit,
SepTopSolventRunUnit,
)

__all__ = [
"SepTopProtocol",
"SepTopSettings",
"SepTopProtocolResult",
"SepTopComplexSetupUnit",
"SepTopSolventSetupUnit",
"SepTopSolventRunUnit",
"SepTopComplexRunUnit",
]
Loading