From fb3c00ad681fe753b9a5134c0b752009d76ecd42 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Thu, 4 Apr 2024 14:40:51 +0100 Subject: [PATCH 01/14] Add alchemical network creation userguide page --- .../setup/alchemical_network_creation.rst | 61 ++++++++++++++++++ docs/guide/setup/alchemical_network_model.rst | 46 +++++++++++++ .../setup/img/basic_alchemicalnetwork.png | Bin 0 -> 50026 bytes 3 files changed, 107 insertions(+) create mode 100644 docs/guide/setup/alchemical_network_creation.rst create mode 100644 docs/guide/setup/alchemical_network_model.rst create mode 100644 docs/guide/setup/img/basic_alchemicalnetwork.png diff --git a/docs/guide/setup/alchemical_network_creation.rst b/docs/guide/setup/alchemical_network_creation.rst new file mode 100644 index 000000000..7bc06f84f --- /dev/null +++ b/docs/guide/setup/alchemical_network_creation.rst @@ -0,0 +1,61 @@ +.. _alchemical_network_creation: + +Alchemical Networks: Creation +============================= + +In :ref:`the previous section ` we detail the +theory of :class:`.AlchemicalNetwork` objects and what they contain. Here +we explain how you can go about creating a :class:`.AlchemicalNetwork` +by combining its various components. + +Python API +---------- + +You can manually create a :class:`.AlchemicalNetwork` by creating a list +of :class:`.Transformation` objects. +The :ref:`cookbook on creating alchemical networks <../../cookbook/create_alchemical_network>` +demonstrates how to do this. + +Alchemical Network Planners +--------------------------- + +OpenFE provides convenience classes for creating :class:`.AlchemicalNetwork`. +These currently include; + +* :class:`.RBFEAlchemicalNetworkPlanner`: creating relative binding free energy networks using :class:`.RelativeHybridTopologyProtocol` +* :class:`.RHFEAlchemicalNetworkPlanner`: creating relative hydration free energy networks using :class:`.RelativeHybridTopologyProtocol` + +The :ref:`Relative Alchemical Network Planners cookbook <../../cookbook/rfe_alchemical_planners>` +demonstrates how to use these. + + +.. note:: + The Network Planners are provided for user convenience. Whilst they cover + majority of use cases, they may not currently offer the complete range + of options currently available through the Python API. + + +Command-line interface +---------------------- + +The Alchemical Network Planners can be used directly through the +:ref:`command line interface `. + +For example, you can create a relative binding free energy (RBFE) network +using: + +.. code:: bash + + $ openfe plan-rbfe-network -p protein.pdb -M dir_with_sdfs/ + +Similarly you can create a relative hydration free energy (RHFE) network +using: + +.. code:: bash + + $ openfe plan-rhfe network -M dir_with_sdfs/ + +Please see the :ref:`RBFE CLI tutorial <../../tutorials/rbfe_cli_tutorial>` +for an example on how to use the CLI to run an RBFE campaign. + +.. todo: link to appropriate CLI page in the userguide? diff --git a/docs/guide/setup/alchemical_network_model.rst b/docs/guide/setup/alchemical_network_model.rst new file mode 100644 index 000000000..5794dc350 --- /dev/null +++ b/docs/guide/setup/alchemical_network_model.rst @@ -0,0 +1,46 @@ +.. _alchemical_network_model: + +Alchemical Networks: Planning a Simulation Campaign +=================================================== + +The goal of the setup stage is to create an :class:`.AlchemicalNetwork`, +which contains all the information needed for a campaign of simulations. +This section will describe the composition of the achemical network, +including the OpenFE objects that define chemistry, as well as +alchemical transformations. + +.. TODO provide a written or image based comparison between alchemical and thermodynamic cycles + +Like any network, the :class:`.AlchemicalNetwork` can be described in terms +of nodes and edges between nodes. The nodes are :class:`.ChemicalSystem`\ s, +which describe the specific molecules involved. The edges are +:class:`.Transformation` objects, which carry all the information about how +the simulation is to be performed. + +In practice, nodes must be associated with a transformation in order to be +relevant in an alchemical network; that is, there are no disconnected nodes. +This means that the alchemical network can be fully described by just the +edges (which contain information on the nodes they connect). Note that this +does not mean that the entire network must be fully connected -- just that +there are no solitary nodes. + +Each :class:`.Transformation` represents everything that is needed to +calculate the free energy differences between the two +:class:`.ChemicalSystem`\ s that are the nodes for that edge. In addition to +containing the information for each :class:`.ChemicalSystem`, the +:class:`.Transformation` also contains a :class:`.Protocol` and, when +relevant, atom mapping information for alchemical transformations. The latter +is often done through a :class:`.LigandNetwork`. + + +.. figure:: img/basic_alchemicalnetwork.png + :scale: 80% + + +.. TODO where to find details on settings + +See Also +-------- + +* :ref:`Alchemical Network API reference ` +* :ref:`Chemical Systems UserGuide entry ` diff --git a/docs/guide/setup/img/basic_alchemicalnetwork.png b/docs/guide/setup/img/basic_alchemicalnetwork.png new file mode 100644 index 0000000000000000000000000000000000000000..710560b90983cad9a135c43a9c3184845afc8cd0 GIT binary patch literal 50026 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 literal 0 HcmV?d00001 From a658a0ab8f8caa8cfc4f51eff83294c4ca469aeb Mon Sep 17 00:00:00 2001 From: IAlibay Date: Thu, 4 Apr 2024 14:49:38 +0100 Subject: [PATCH 02/14] update note --- docs/guide/setup/alchemical_network_creation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/setup/alchemical_network_creation.rst b/docs/guide/setup/alchemical_network_creation.rst index 7bc06f84f..1102a5353 100644 --- a/docs/guide/setup/alchemical_network_creation.rst +++ b/docs/guide/setup/alchemical_network_creation.rst @@ -32,7 +32,7 @@ demonstrates how to use these. .. note:: The Network Planners are provided for user convenience. Whilst they cover majority of use cases, they may not currently offer the complete range - of options currently available through the Python API. + of options available through the Python API. Command-line interface From 49d6cfc43c37e41357e159a1bbb84341ba4a17bb Mon Sep 17 00:00:00 2001 From: IAlibay Date: Thu, 4 Apr 2024 14:51:32 +0100 Subject: [PATCH 03/14] add reference label --- docs/guide/cli/index.rst | 2 ++ .../guide/setup/chemical_systems_and_thermodynamic_cycles.rst | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/guide/cli/index.rst b/docs/guide/cli/index.rst index a60f64945..658a5755e 100644 --- a/docs/guide/cli/index.rst +++ b/docs/guide/cli/index.rst @@ -1,3 +1,5 @@ +.. userguide_cli_interface:: + CLI Interface ============= diff --git a/docs/guide/setup/chemical_systems_and_thermodynamic_cycles.rst b/docs/guide/setup/chemical_systems_and_thermodynamic_cycles.rst index c499427f0..c5e08c61c 100644 --- a/docs/guide/setup/chemical_systems_and_thermodynamic_cycles.rst +++ b/docs/guide/setup/chemical_systems_and_thermodynamic_cycles.rst @@ -1,4 +1,6 @@ +.. userguide_chemical_systems:: + ChemicalSystems and thermodynamic cycles ======================================== -issue #759 \ No newline at end of file +issue #759 From 5923d17c6ab62897478f69cc7aa5d6729352cd1f Mon Sep 17 00:00:00 2001 From: IAlibay Date: Thu, 4 Apr 2024 14:54:30 +0100 Subject: [PATCH 04/14] remove duplicate files and add reference label --- docs/guide/cli/index.rst | 2 +- docs/guide/setup/alchemical_network.rst | 48 ------------------- ...mical_systems_and_thermodynamic_cycles.rst | 2 +- docs/guide/setup/define_rbfe.rst | 22 --------- docs/guide/setup/define_rhfe.rst | 21 -------- 5 files changed, 2 insertions(+), 93 deletions(-) delete mode 100644 docs/guide/setup/alchemical_network.rst delete mode 100644 docs/guide/setup/define_rbfe.rst delete mode 100644 docs/guide/setup/define_rhfe.rst diff --git a/docs/guide/cli/index.rst b/docs/guide/cli/index.rst index 658a5755e..481492eb4 100644 --- a/docs/guide/cli/index.rst +++ b/docs/guide/cli/index.rst @@ -1,4 +1,4 @@ -.. userguide_cli_interface:: +.. _userguide_cli_interface: CLI Interface ============= diff --git a/docs/guide/setup/alchemical_network.rst b/docs/guide/setup/alchemical_network.rst deleted file mode 100644 index dc15aaf2a..000000000 --- a/docs/guide/setup/alchemical_network.rst +++ /dev/null @@ -1,48 +0,0 @@ -.. _alchemical-network-model: - -Alchemical Networks: Representation of a Simulation -=================================================== - -The goal of the setup stage is to create an :class:`.AlchemicalNetwork`, -which contains all the information needed for a campaign of simulations. -This section will describe the composition of the achemical network, -including describing the OpenFE objects that describe chemistry, as well as -alchemical transformations. - -.. TODO provide a written or image based comparison between alchemical and thermodynamic cycles - -Like any network, the :class:`.AlchemicalNetwork` can be described in terms -of nodes and edges between nodes. The nodes are :class:`.ChemicalSystem`\ s, -which describe the specific molecules involved. The edges are -:class:`.Transformation` objects, which carry all the information about how -the simulation is to be performed. - -In practice, nodes must be associated with a transformation in order to be -relevant in an alchemical network; that is, there are no disconnected nodes. -This means that the alchemical network can be fully described by just the -edges (which contain information on the nodes they connect). Note that this -does not mean that the entire network must be fully connected -- just that -there are no solitary nodes. - -Each :class:`.Transformation` represents everything that is needed to -calculate the free energy differences between the two -:class:`.ChemicalSystem`\ s that are the nodes for that edge. In addition to -containing the information for each :class:`.ChemicalSystem`, the -:class:`.Transformation` also contains a :class:`.Protocol` and, when -relevant, atom mapping information for alchemical transformations. - -A :class:`.ChemicalSystem` is made up of one or more ``ChemicalComponent``\ -s. Each component represents a conceptual part of the total molecular -system. A ligand would be represented by a :class:`.SmallMoleculeComponent`. -A protein would be a :class:`.ProteinComponent`. The solvent to be added is -represented as a :class:`.SolventComponent`. This allows us to easily -identify what is changing between two nodes -- for example, a relative -binding free energy (RBFE) edge for ligand binding would have the same -solvent and protein components, but different ligand components. - -The :class:`.Protocol` object describes how the simulation should be run. -This includes choice of algorithm, as well as specific settings for the -edge. Each protocol has its own :class:`.Settings` subclass, which contains -all the settings relevant for that protocol. - -.. TODO where to find details on settings diff --git a/docs/guide/setup/chemical_systems_and_thermodynamic_cycles.rst b/docs/guide/setup/chemical_systems_and_thermodynamic_cycles.rst index c5e08c61c..a702ca881 100644 --- a/docs/guide/setup/chemical_systems_and_thermodynamic_cycles.rst +++ b/docs/guide/setup/chemical_systems_and_thermodynamic_cycles.rst @@ -1,4 +1,4 @@ -.. userguide_chemical_systems:: +.. _userguide_chemical_systems: ChemicalSystems and thermodynamic cycles ======================================== diff --git a/docs/guide/setup/define_rbfe.rst b/docs/guide/setup/define_rbfe.rst deleted file mode 100644 index c70bceea3..000000000 --- a/docs/guide/setup/define_rbfe.rst +++ /dev/null @@ -1,22 +0,0 @@ -.. _define-rbfe: - -Defining RBFE Calculations -========================== - -An :class:`.AlchemicalNetwork` for relative binding free energy calculations -can be easily created with a :class:`.RBFEAlchemicalNetworkPlanner`. - -Creating the :class:`.AlchemicalNetwork` basically involves the following -three steps: - -1. Creating a :class:`.LigandNetwork` to represent the planned ligand - transformations. -2. Creating a :class:`.ChemicalSystem` (which combines protein, solvent, and - ligand) for each ligand. -3. Using the :class:`.LigandNetwork` to create the - :class:`.AlchemicalNetwork` (where each node is a - :class:`.ChemicalSystem` and the edges also carry information about the - :class:`.Protocol`). - -Each aspect of this can be performed manually. For details on customizing -the :class:`.LigandNetwork`, see :ref:`define_ligand_network`. diff --git a/docs/guide/setup/define_rhfe.rst b/docs/guide/setup/define_rhfe.rst deleted file mode 100644 index 3b066938c..000000000 --- a/docs/guide/setup/define_rhfe.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. _define-rsfe: - -Defining Relative Hydration Free Energy Calculations -==================================================== - -Relative hydration free energy calculations are very similar to -:ref:`relative binding free energy calculations `. The -main difference is that there is no protein component. - -You can easily set up an :class:`.AlchemicalNetwork` for an RHFE with the -:class:`.RHFEAlchemicalNetworkPlanner`. - -Just as with the RBFE, the RHFE involves setting up a -:class:`.LigandNetwork` and a :class:`.ChemicalSystem` for each ligand, and -then using these (along with the provided :class:`.Protocol`) to create the -associated :class:`.AlchemicalNetwork`. - -To customize beyond what the RHFE planner can do, many of the same documents -that help with customizing RBFE setups are also relevant: - -* :ref:`define_ligand_network` From 4a9e53c55bf0cd297ad461c999f0ed529e830336 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Thu, 4 Apr 2024 14:57:25 +0100 Subject: [PATCH 05/14] update index --- docs/guide/setup/index.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/guide/setup/index.rst b/docs/guide/setup/index.rst index d28efc305..e2a60cfb9 100644 --- a/docs/guide/setup/index.rst +++ b/docs/guide/setup/index.rst @@ -31,9 +31,8 @@ instructions can be found under: creating_atom_mappings_and_scores defining_protocols creating_ligand_networks - alchemical_network - define_rbfe - define_rhfe + alchemical_network_model + alchemical_network_creation If you intend to set up your alchemical network using the Python interface, but to run it using the CLI, you will want to export the network in the same From 0f2ccc80ceec4247a5f790747f2f121a28c16ecb Mon Sep 17 00:00:00 2001 From: IAlibay Date: Thu, 4 Apr 2024 15:02:47 +0100 Subject: [PATCH 06/14] relative links --- docs/guide/setup/alchemical_network_creation.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/guide/setup/alchemical_network_creation.rst b/docs/guide/setup/alchemical_network_creation.rst index 1102a5353..fa8d875cf 100644 --- a/docs/guide/setup/alchemical_network_creation.rst +++ b/docs/guide/setup/alchemical_network_creation.rst @@ -13,7 +13,7 @@ Python API You can manually create a :class:`.AlchemicalNetwork` by creating a list of :class:`.Transformation` objects. -The :ref:`cookbook on creating alchemical networks <../../cookbook/create_alchemical_network>` +The `cookbook on creating alchemical networks <../../cookbook/create_alchemical_network>`_ demonstrates how to do this. Alchemical Network Planners @@ -25,7 +25,7 @@ These currently include; * :class:`.RBFEAlchemicalNetworkPlanner`: creating relative binding free energy networks using :class:`.RelativeHybridTopologyProtocol` * :class:`.RHFEAlchemicalNetworkPlanner`: creating relative hydration free energy networks using :class:`.RelativeHybridTopologyProtocol` -The :ref:`Relative Alchemical Network Planners cookbook <../../cookbook/rfe_alchemical_planners>` +The `Relative Alchemical Network Planners cookbook <../../cookbook/rfe_alchemical_planners>`_ demonstrates how to use these. @@ -55,7 +55,7 @@ using: $ openfe plan-rhfe network -M dir_with_sdfs/ -Please see the :ref:`RBFE CLI tutorial <../../tutorials/rbfe_cli_tutorial>` +Please see the `RBFE CLI tutorial <../../tutorials/rbfe_cli_tutorial>`_ for an example on how to use the CLI to run an RBFE campaign. .. todo: link to appropriate CLI page in the userguide? From 062ca93e0fe4010ed67c4d54e4d8d6dac10083ec Mon Sep 17 00:00:00 2001 From: IAlibay Date: Thu, 4 Apr 2024 15:17:13 +0100 Subject: [PATCH 07/14] fix rbfe_cli_tutorial link --- docs/guide/setup/alchemical_network_creation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/setup/alchemical_network_creation.rst b/docs/guide/setup/alchemical_network_creation.rst index fa8d875cf..d3f9360f1 100644 --- a/docs/guide/setup/alchemical_network_creation.rst +++ b/docs/guide/setup/alchemical_network_creation.rst @@ -55,7 +55,7 @@ using: $ openfe plan-rhfe network -M dir_with_sdfs/ -Please see the `RBFE CLI tutorial <../../tutorials/rbfe_cli_tutorial>`_ +Please see the `RBFE CLI tutorial <../../tutorials/rbfe_cli_tutorial.html>`_ for an example on how to use the CLI to run an RBFE campaign. .. todo: link to appropriate CLI page in the userguide? From 1280bac1cd5d6e5c5960b5df735aad260b4da0e3 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Thu, 4 Apr 2024 15:18:39 +0100 Subject: [PATCH 08/14] fix create_alchemical_network cookbook link --- docs/guide/setup/alchemical_network_creation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/setup/alchemical_network_creation.rst b/docs/guide/setup/alchemical_network_creation.rst index d3f9360f1..bca694b42 100644 --- a/docs/guide/setup/alchemical_network_creation.rst +++ b/docs/guide/setup/alchemical_network_creation.rst @@ -13,7 +13,7 @@ Python API You can manually create a :class:`.AlchemicalNetwork` by creating a list of :class:`.Transformation` objects. -The `cookbook on creating alchemical networks <../../cookbook/create_alchemical_network>`_ +The `cookbook on creating alchemical networks <../../cookbook/create_alchemical_network.html>`_ demonstrates how to do this. Alchemical Network Planners From 34879183c0a1374647e4aed439aa6f2cfa9a5a02 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Fri, 5 Apr 2024 12:01:08 +0100 Subject: [PATCH 09/14] uncommited stuff --- docs/guide/setup/alchemical_network_creation.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/guide/setup/alchemical_network_creation.rst b/docs/guide/setup/alchemical_network_creation.rst index bca694b42..1a2cca815 100644 --- a/docs/guide/setup/alchemical_network_creation.rst +++ b/docs/guide/setup/alchemical_network_creation.rst @@ -22,10 +22,10 @@ Alchemical Network Planners OpenFE provides convenience classes for creating :class:`.AlchemicalNetwork`. These currently include; -* :class:`.RBFEAlchemicalNetworkPlanner`: creating relative binding free energy networks using :class:`.RelativeHybridTopologyProtocol` -* :class:`.RHFEAlchemicalNetworkPlanner`: creating relative hydration free energy networks using :class:`.RelativeHybridTopologyProtocol` +* :class:`.RBFEAlchemicalNetworkPlanner`: creating relative binding free energy networks using the :class:`.RelativeHybridTopologyProtocol` +* :class:`.RHFEAlchemicalNetworkPlanner`: creating relative hydration free energy networks using the :class:`.RelativeHybridTopologyProtocol` -The `Relative Alchemical Network Planners cookbook <../../cookbook/rfe_alchemical_planners>`_ +The `Relative Alchemical Network Planners cookbook <../../cookbook/rfe_alchemical_planners.html>`_ demonstrates how to use these. From 705a24c9d593e067a50b531ff30e707926ad2ab5 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Fri, 5 Apr 2024 12:06:34 +0100 Subject: [PATCH 10/14] Change cookbook and tutorial links to refs --- docs/guide/setup/alchemical_network_creation.rst | 6 +++--- docs/tutorials/rbfe_cli_tutorial.rst | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/guide/setup/alchemical_network_creation.rst b/docs/guide/setup/alchemical_network_creation.rst index 1a2cca815..36d6bcb1c 100644 --- a/docs/guide/setup/alchemical_network_creation.rst +++ b/docs/guide/setup/alchemical_network_creation.rst @@ -13,7 +13,7 @@ Python API You can manually create a :class:`.AlchemicalNetwork` by creating a list of :class:`.Transformation` objects. -The `cookbook on creating alchemical networks <../../cookbook/create_alchemical_network.html>`_ +The :ref:`cookbook on creating alchemical networks ` demonstrates how to do this. Alchemical Network Planners @@ -25,7 +25,7 @@ These currently include; * :class:`.RBFEAlchemicalNetworkPlanner`: creating relative binding free energy networks using the :class:`.RelativeHybridTopologyProtocol` * :class:`.RHFEAlchemicalNetworkPlanner`: creating relative hydration free energy networks using the :class:`.RelativeHybridTopologyProtocol` -The `Relative Alchemical Network Planners cookbook <../../cookbook/rfe_alchemical_planners.html>`_ +The :ref:`Relative Alchemical Network Planners cookbook ` demonstrates how to use these. @@ -55,7 +55,7 @@ using: $ openfe plan-rhfe network -M dir_with_sdfs/ -Please see the `RBFE CLI tutorial <../../tutorials/rbfe_cli_tutorial.html>`_ +Please see the :ref:`RBFE CLI tutorial ` for an example on how to use the CLI to run an RBFE campaign. .. todo: link to appropriate CLI page in the userguide? diff --git a/docs/tutorials/rbfe_cli_tutorial.rst b/docs/tutorials/rbfe_cli_tutorial.rst index 3bde06a64..82ed09b36 100644 --- a/docs/tutorials/rbfe_cli_tutorial.rst +++ b/docs/tutorials/rbfe_cli_tutorial.rst @@ -1,2 +1,4 @@ +.. _rbfe_cli_tutorial: + .. include:: /ExampleNotebooks/rbfe_tutorial/cli_tutorial.md :parser: myst_parser.sphinx_ From f02b620ba1fe292f672dc98586ab0603c346dee5 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Mon, 8 Apr 2024 09:13:02 +0100 Subject: [PATCH 11/14] switch to Hannah's image for the AlchemicalNetwork --- docs/guide/setup/alchemical_network_model.rst | 3 +-- ..._alchemicalnetwork.png => AlchemicalNetwork.png} | Bin 2 files changed, 1 insertion(+), 2 deletions(-) rename docs/guide/setup/img/{basic_alchemicalnetwork.png => AlchemicalNetwork.png} (100%) diff --git a/docs/guide/setup/alchemical_network_model.rst b/docs/guide/setup/alchemical_network_model.rst index 5794dc350..53cdaae85 100644 --- a/docs/guide/setup/alchemical_network_model.rst +++ b/docs/guide/setup/alchemical_network_model.rst @@ -33,8 +33,7 @@ relevant, atom mapping information for alchemical transformations. The latter is often done through a :class:`.LigandNetwork`. -.. figure:: img/basic_alchemicalnetwork.png - :scale: 80% +.. figure:: img/AlchemicalNetwork.png .. TODO where to find details on settings diff --git a/docs/guide/setup/img/basic_alchemicalnetwork.png b/docs/guide/setup/img/AlchemicalNetwork.png similarity index 100% rename from docs/guide/setup/img/basic_alchemicalnetwork.png rename to docs/guide/setup/img/AlchemicalNetwork.png From 728d6218c92d8199e7f3b75e239ba15b13f50f53 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Mon, 8 Apr 2024 09:15:55 +0100 Subject: [PATCH 12/14] Actually copy over the right image --- docs/guide/setup/img/AlchemicalNetwork.png | Bin 50026 -> 21996 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/guide/setup/img/AlchemicalNetwork.png b/docs/guide/setup/img/AlchemicalNetwork.png index 710560b90983cad9a135c43a9c3184845afc8cd0..1e8061fc3111f96789db48c4d899bb9f7cd9cbe8 100644 GIT binary patch literal 21996 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 literal 50026 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 From 8a362faa4692a39cb4d251cf0cc6b8590c470b5f Mon Sep 17 00:00:00 2001 From: richard gowers Date: Wed, 10 Apr 2024 16:07:34 +0100 Subject: [PATCH 13/14] docs: fix links to cookbook nblink entities this adds a reference anchor in the nbsphinx prolog for each nblink included cookbook include rfe_alchemical_planners in cookbook list --- docs/conf.py | 1 + docs/cookbook/index.rst | 1 + docs/guide/setup/alchemical_network_creation.rst | 6 +++--- docs/tutorials/index.rst | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index f32519365..ac8671ba9 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -246,4 +246,5 @@ :octicon:`rocket` Run in Colab + .. _{{ env.doc2path(env.docname, base=None) }}: """) diff --git a/docs/cookbook/index.rst b/docs/cookbook/index.rst index e7b43b5c9..15774c1cc 100644 --- a/docs/cookbook/index.rst +++ b/docs/cookbook/index.rst @@ -153,6 +153,7 @@ List of Cookbooks dumping_transformation choose_protocol generate_ligand_network + rfe_alchemical_planners network_from_orion_fepp hand_write_ligand_network ligandnetwork_vis diff --git a/docs/guide/setup/alchemical_network_creation.rst b/docs/guide/setup/alchemical_network_creation.rst index 36d6bcb1c..7bd386802 100644 --- a/docs/guide/setup/alchemical_network_creation.rst +++ b/docs/guide/setup/alchemical_network_creation.rst @@ -13,7 +13,7 @@ Python API You can manually create a :class:`.AlchemicalNetwork` by creating a list of :class:`.Transformation` objects. -The :ref:`cookbook on creating alchemical networks ` +The :ref:`cookbook on creating alchemical networks ` demonstrates how to do this. Alchemical Network Planners @@ -25,7 +25,7 @@ These currently include; * :class:`.RBFEAlchemicalNetworkPlanner`: creating relative binding free energy networks using the :class:`.RelativeHybridTopologyProtocol` * :class:`.RHFEAlchemicalNetworkPlanner`: creating relative hydration free energy networks using the :class:`.RelativeHybridTopologyProtocol` -The :ref:`Relative Alchemical Network Planners cookbook ` +The :ref:`Relative Alchemical Network Planners cookbook ` demonstrates how to use these. @@ -55,7 +55,7 @@ using: $ openfe plan-rhfe network -M dir_with_sdfs/ -Please see the :ref:`RBFE CLI tutorial ` +Please see the :ref:`RBFE CLI tutorial ` for an example on how to use the CLI to run an RBFE campaign. .. todo: link to appropriate CLI page in the userguide? diff --git a/docs/tutorials/index.rst b/docs/tutorials/index.rst index fa1e22343..936c2cf1f 100644 --- a/docs/tutorials/index.rst +++ b/docs/tutorials/index.rst @@ -23,7 +23,7 @@ relative binding free energy calculation. Relative Free Energies CLI tutorial ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The :any:`Relative Free Energies with the OpenFE CLI ` +The :ref:`Relative Free Energies with the OpenFE CLI ` tutorial walks users through how to use the OpenFE command line to calculate relative binding free energies of various ligands against the TYK2 target. From 2bb2d4ecfc13dc5da1ca0a27f7e87296cca96bf3 Mon Sep 17 00:00:00 2001 From: richard gowers Date: Wed, 10 Apr 2024 17:01:58 +0100 Subject: [PATCH 14/14] docs: derp include nblink for rfe planners notebook --- docs/cookbook/rfe_alchemical_planners.nblink | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/cookbook/rfe_alchemical_planners.nblink diff --git a/docs/cookbook/rfe_alchemical_planners.nblink b/docs/cookbook/rfe_alchemical_planners.nblink new file mode 100644 index 000000000..4c90528ae --- /dev/null +++ b/docs/cookbook/rfe_alchemical_planners.nblink @@ -0,0 +1,3 @@ +{ + "path": "../ExampleNotebooks/cookbook/rfe_alchemical_planners.ipynb" +}