diff --git a/.binder/environment.yml b/.binder/environment.yml index 665fd15..9ed9164 100644 --- a/.binder/environment.yml +++ b/.binder/environment.yml @@ -27,6 +27,6 @@ dependencies: - python - rdkit - typing_extensions - - gufe>=0.9.4 + - gufe>=1.4.1 - openfe~=1.2 - py3dmol diff --git a/abfe_tutorial/python_tutorial.ipynb b/abfe_tutorial/abfe_tutorial.ipynb similarity index 96% rename from abfe_tutorial/python_tutorial.ipynb rename to abfe_tutorial/abfe_tutorial.ipynb index ace99f5..b1266b0 100644 --- a/abfe_tutorial/python_tutorial.ipynb +++ b/abfe_tutorial/abfe_tutorial.ipynb @@ -25,11 +25,13 @@ { "cell_type": "markdown", "id": "f9154ba7", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ - "# 0. Setup for Google Colab\n", + "## 0. Setup for Google Colab\n", "\n", - "If you are running this example in Google Colab, run the following cells to setup the environment. If you are running this notebook locally, skip down to `1. Overview`" + "If you are running this example in Google Colab, run the following cells to setup the environment. If you are running this notebook locally, skip down to `1. Loading the ligand`" ] }, { @@ -45,7 +47,7 @@ "if \"COLAB_RELEASE_TAG\" in os.environ:\n", " !pip install -q condacolab\n", " import condacolab\n", - " condacolab.install_from_url(\"https://github.com/OpenFreeEnergy/ExampleNotebooks/releases/download/april-2025/OpenFEforge-1.5.0.dev0-Linux-x86_64.sh\")" + " condacolab.install_from_url(\"https://github.com/OpenFreeEnergy/ExampleNotebooks/releases/download/april-2025/OpenFEforge-1.5.0a0-Linux-x86_64.sh\")" ] }, { @@ -73,17 +75,6 @@ " break" ] }, - { - "cell_type": "code", - "execution_count": 1, - "id": "fc97de03", - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import openfe" - ] - }, { "cell_type": "markdown", "id": "2fea29c3", @@ -96,6 +87,17 @@ "This can be loaded using the `SDMolSupplier` class from rdkit and passed to openfe." ] }, + { + "cell_type": "code", + "execution_count": 1, + "id": "fc97de03", + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import openfe" + ] + }, { "cell_type": "code", "execution_count": 2, @@ -131,9 +133,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/hannahbaumann/miniforge3/envs/openfe_dev/lib/python3.12/site-packages/gufe/components/explicitmoleculecomponent.py:93: UserWarning: Partial charges have been provided, these will preferentially be used instead of generating new partial charges\n", - " warnings.warn(wmsg)\n", - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.79it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.53it/s]\n" ] } ], @@ -231,33 +231,17 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 10, "id": "c31c712b-4844-477b-8aa4-ded6f0c8ca5f", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/hannahbaumann/miniforge3/envs/openfe_dev/lib/python3.12/site-packages/Bio/Application/__init__.py:39: BiopythonDeprecationWarning: The Bio.Application modules and modules relying on it have been deprecated.\n", - "\n", - "Due to the on going maintenance burden of keeping command line application\n", - "wrappers up to date, we have decided to deprecate and eventually remove these\n", - "modules.\n", - "\n", - "We instead now recommend building your command line and invoking it directly\n", - "with the subprocess module.\n", - " warnings.warn(\n" - ] - } - ], + "outputs": [], "source": [ - "from openfe.protocols.openmm_afe import AbsoluteBindingProtocol" + "from openfe.protocols.openmm_afe import AbsoluteBindingProtocol;" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "id": "fb839094", "metadata": {}, "outputs": [], @@ -267,7 +251,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "id": "8b99f77f-c70c-436d-b4eb-fb462a4b043e", "metadata": { "scrolled": true @@ -443,7 +427,7 @@ " 'host_max_distance': ,\n", " 'host_min_distance': ,\n", " 'host_selection': 'backbone',\n", - " 'rmsf_cutoff': },\n", + " 'rmsf_cutoff': },\n", " 'solvent_equil_output_settings': {'checkpoint_interval': ,\n", " 'checkpoint_storage_filename': 'checkpoint.chk',\n", " 'equil_npt_structure': 'equil_npt_structure.pdb',\n", @@ -550,7 +534,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 13, "id": "55067780-d228-4661-8c1e-5cb0217fd2dc", "metadata": {}, "outputs": [], @@ -577,7 +561,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 14, "id": "23f6322b-0336-4aa9-b9d0-ebe533dc5753", "metadata": {}, "outputs": [], @@ -611,7 +595,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 15, "id": "1231fad8-b37d-4008-a851-5ad546386286", "metadata": {}, "outputs": [], @@ -635,7 +619,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 16, "id": "b69efbcd-b888-4afc-a33e-01860889f408", "metadata": {}, "outputs": [], @@ -683,7 +667,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 17, "id": "44ba94ca", "metadata": {}, "outputs": [], @@ -718,7 +702,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 18, "id": "6dbedb47-46b9-4c22-ad74-a580174a359c", "metadata": {}, "outputs": [], @@ -729,7 +713,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "id": "be690ef1-3243-4114-b56f-5babbb660af6", "metadata": { "scrolled": true @@ -738,10 +722,10 @@ "source": [ "# Finally we can run the simulations\n", "path = pathlib.Path('./abfe_results')\n", - "path.mkdir()\n", "\n", - "# Execute the DAG\n", "# Commented out since this would be too expensive to run in this notebook.\n", + "# path.mkdir()\n", + "# Execute the DAG\n", "# dag_results = execute_DAG(dag, scratch_basedir=path, shared_basedir=path, n_retries=3)" ] }, @@ -782,7 +766,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 20, "id": "d0f6b8fb-dde2-442a-b641-3160a70e2f84", "metadata": {}, "outputs": [], @@ -803,7 +787,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 21, "id": "847b5663-2e6c-4cb2-aa9d-39d132fcff3d", "metadata": {}, "outputs": [], @@ -844,7 +828,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 22, "id": "f62f69a1-09c0-4a4a-9b37-9663b51a75ac", "metadata": {}, "outputs": [], @@ -862,7 +846,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 23, "id": "3b459b28-a4dc-4fa9-a961-b106c45d79ce", "metadata": {}, "outputs": [ @@ -875,7 +859,7 @@ " 'pint_unit_registry': 'openff_units'}" ] }, - "execution_count": 13, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -909,7 +893,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.8" + "version": "3.12.10" } }, "nbformat": 4, diff --git a/ahfe_tutorial/python_tutorial.ipynb b/ahfe_tutorial/ahfe_tutorial.ipynb similarity index 88% rename from ahfe_tutorial/python_tutorial.ipynb rename to ahfe_tutorial/ahfe_tutorial.ipynb index 08ae8e9..d5af938 100644 --- a/ahfe_tutorial/python_tutorial.ipynb +++ b/ahfe_tutorial/ahfe_tutorial.ipynb @@ -25,11 +25,13 @@ { "cell_type": "markdown", "id": "e26c8170", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ - "# 0. Setup for Google Colab\n", + "## 0. Setup for Google Colab\n", "\n", - "If you are running this example in Google Colab, run the following cells to setup the environment. If you are running this notebook locally, skip down to `1. Overview`" + "If you are running this example in Google Colab, run the following cells to setup the environment. If you are running this notebook locally, skip down to `1. Loading the ligand`" ] }, { @@ -73,17 +75,6 @@ " break" ] }, - { - "cell_type": "code", - "execution_count": 1, - "id": "fc97de03", - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import openfe" - ] - }, { "cell_type": "markdown", "id": "2fea29c3", @@ -96,6 +87,17 @@ "This can be loaded using the `SDMolSupplier` class from rdkit and passed to openfe." ] }, + { + "cell_type": "code", + "execution_count": 1, + "id": "fc97de03", + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import openfe" + ] + }, { "cell_type": "code", "execution_count": 2, @@ -200,13 +202,13 @@ "output_type": "stream", "text": [ "{'alchemical_settings': {},\n", - " 'integrator_settings': {'barostat_frequency': ,\n", + " 'integrator_settings': {'barostat_frequency': ,\n", " 'constraint_tolerance': 1e-06,\n", " 'langevin_collision_rate': ,\n", " 'n_restart_attempts': 20,\n", " 'reassign_velocities': False,\n", " 'remove_com': False,\n", - " 'timestep': },\n", + " 'timestep': },\n", " 'lambda_settings': {'lambda_elec': [0.0,\n", " 0.25,\n", " 0.5,\n", @@ -254,10 +256,15 @@ " 'off_toolkit_backend': 'ambertools',\n", " 'partial_charge_method': 'am1bcc'},\n", " 'protocol_repeats': 3,\n", - " 'solvation_settings': {'solvent_model': 'tip3p',\n", + " 'solvation_settings': {'box_shape': 'cube',\n", + " 'box_size': None,\n", + " 'box_vectors': None,\n", + " 'number_of_solvent_molecules': None,\n", + " 'solvent_model': 'tip3p',\n", " 'solvent_padding': },\n", - " 'solvent_engine_settings': {'compute_platform': None},\n", - " 'solvent_equil_output_settings': {'checkpoint_interval': ,\n", + " 'solvent_engine_settings': {'compute_platform': None,\n", + " 'gpu_device_index': None},\n", + " 'solvent_equil_output_settings': {'checkpoint_interval': ,\n", " 'checkpoint_storage_filename': 'checkpoint.chk',\n", " 'equil_npt_structure': 'equil_npt_structure.pdb',\n", " 'equil_nvt_structure': 'equil_nvt_structure.pdb',\n", @@ -267,7 +274,7 @@ " 'output_indices': 'not water',\n", " 'preminimized_structure': 'system.pdb',\n", " 'production_trajectory_filename': 'production_equil.xtc',\n", - " 'trajectory_write_interval': },\n", + " 'trajectory_write_interval': },\n", " 'solvent_equil_simulation_settings': {'equilibration_length': ,\n", " 'equilibration_length_nvt': ,\n", " 'minimization_steps': 5000,\n", @@ -281,30 +288,32 @@ " 'nonbonded_cutoff': ,\n", " 'nonbonded_method': 'PME',\n", " 'rigid_water': True,\n", - " 'small_molecule_forcefield': 'openff-2.0.0'},\n", - " 'solvent_output_settings': {'checkpoint_interval': ,\n", + " 'small_molecule_forcefield': 'openff-2.1.1'},\n", + " 'solvent_output_settings': {'checkpoint_interval': ,\n", " 'checkpoint_storage_filename': 'solvent_checkpoint.nc',\n", " 'forcefield_cache': 'db.json',\n", " 'output_filename': 'solvent.nc',\n", " 'output_indices': 'not water',\n", - " 'output_structure': 'hybrid_system.pdb'},\n", + " 'output_structure': 'hybrid_system.pdb',\n", + " 'positions_write_frequency': ,\n", + " 'velocities_write_frequency': None},\n", " 'solvent_simulation_settings': {'early_termination_target_error': ,\n", " 'equilibration_length': ,\n", " 'minimization_steps': 5000,\n", " 'n_replicas': 14,\n", " 'production_length': ,\n", - " 'real_time_analysis_interval': ,\n", - " 'real_time_analysis_minimum_time': ,\n", + " 'real_time_analysis_interval': ,\n", + " 'real_time_analysis_minimum_time': ,\n", " 'sampler_method': 'repex',\n", " 'sams_flatness_criteria': 'logZ-flatness',\n", " 'sams_gamma0': 1.0,\n", - " 'time_per_iteration': },\n", + " 'time_per_iteration': },\n", " 'thermo_settings': {'ph': None,\n", " 'pressure': ,\n", " 'redox_potential': None,\n", " 'temperature': },\n", - " 'vacuum_engine_settings': {'compute_platform': None},\n", - " 'vacuum_equil_output_settings': {'checkpoint_interval': ,\n", + " 'vacuum_engine_settings': {'compute_platform': None, 'gpu_device_index': None},\n", + " 'vacuum_equil_output_settings': {'checkpoint_interval': ,\n", " 'checkpoint_storage_filename': 'checkpoint.chk',\n", " 'equil_npt_structure': 'equil_structure.pdb',\n", " 'equil_nvt_structure': None,\n", @@ -314,7 +323,7 @@ " 'output_indices': 'not water',\n", " 'preminimized_structure': 'system.pdb',\n", " 'production_trajectory_filename': 'production_equil.xtc',\n", - " 'trajectory_write_interval': },\n", + " 'trajectory_write_interval': },\n", " 'vacuum_equil_simulation_settings': {'equilibration_length': ,\n", " 'equilibration_length_nvt': None,\n", " 'minimization_steps': 5000,\n", @@ -328,24 +337,26 @@ " 'nonbonded_cutoff': ,\n", " 'nonbonded_method': 'nocutoff',\n", " 'rigid_water': True,\n", - " 'small_molecule_forcefield': 'openff-2.0.0'},\n", - " 'vacuum_output_settings': {'checkpoint_interval': ,\n", + " 'small_molecule_forcefield': 'openff-2.1.1'},\n", + " 'vacuum_output_settings': {'checkpoint_interval': ,\n", " 'checkpoint_storage_filename': 'vacuum_checkpoint.nc',\n", " 'forcefield_cache': 'db.json',\n", " 'output_filename': 'vacuum.nc',\n", " 'output_indices': 'not water',\n", - " 'output_structure': 'hybrid_system.pdb'},\n", + " 'output_structure': 'hybrid_system.pdb',\n", + " 'positions_write_frequency': ,\n", + " 'velocities_write_frequency': None},\n", " 'vacuum_simulation_settings': {'early_termination_target_error': ,\n", " 'equilibration_length': ,\n", " 'minimization_steps': 5000,\n", " 'n_replicas': 14,\n", " 'production_length': ,\n", - " 'real_time_analysis_interval': ,\n", - " 'real_time_analysis_minimum_time': ,\n", + " 'real_time_analysis_interval': ,\n", + " 'real_time_analysis_minimum_time': ,\n", " 'sampler_method': 'repex',\n", " 'sams_flatness_criteria': 'logZ-flatness',\n", " 'sams_gamma0': 1.0,\n", - " 'time_per_iteration': }}\n" + " 'time_per_iteration': }}\n" ] } ], @@ -376,7 +387,7 @@ "$298.15\\ \\mathrm{kelvin}$" ], "text/plain": [ - "298.15 " + "" ] }, "execution_count": 8, @@ -424,7 +435,7 @@ "$1.0\\ \\mathrm{nanosecond}$" ], "text/plain": [ - "1.0 " + "" ] }, "execution_count": 10, @@ -492,20 +503,22 @@ "cell_type": "code", "execution_count": 13, "id": "137d3f96-00fc-4400-bf5d-b8ed355dbbec", - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'alchemical_settings': {},\n", - " 'integrator_settings': {'barostat_frequency': ,\n", + " 'integrator_settings': {'barostat_frequency': ,\n", " 'constraint_tolerance': 1e-06,\n", " 'langevin_collision_rate': ,\n", " 'n_restart_attempts': 20,\n", " 'reassign_velocities': False,\n", " 'remove_com': False,\n", - " 'timestep': },\n", + " 'timestep': },\n", " 'lambda_settings': {'lambda_elec': [0.0,\n", " 0.26,\n", " 0.5,\n", @@ -553,10 +566,15 @@ " 'off_toolkit_backend': 'ambertools',\n", " 'partial_charge_method': 'am1bcc'},\n", " 'protocol_repeats': 1,\n", - " 'solvation_settings': {'solvent_model': 'tip3p',\n", + " 'solvation_settings': {'box_shape': 'cube',\n", + " 'box_size': None,\n", + " 'box_vectors': None,\n", + " 'number_of_solvent_molecules': None,\n", + " 'solvent_model': 'tip3p',\n", " 'solvent_padding': },\n", - " 'solvent_engine_settings': {'compute_platform': 'CUDA'},\n", - " 'solvent_equil_output_settings': {'checkpoint_interval': ,\n", + " 'solvent_engine_settings': {'compute_platform': 'CUDA',\n", + " 'gpu_device_index': None},\n", + " 'solvent_equil_output_settings': {'checkpoint_interval': ,\n", " 'checkpoint_storage_filename': 'checkpoint.chk',\n", " 'equil_npt_structure': 'equil_npt_structure.pdb',\n", " 'equil_nvt_structure': 'equil_nvt_structure.pdb',\n", @@ -566,7 +584,7 @@ " 'output_indices': 'not water',\n", " 'preminimized_structure': 'system.pdb',\n", " 'production_trajectory_filename': 'production_equil.xtc',\n", - " 'trajectory_write_interval': },\n", + " 'trajectory_write_interval': },\n", " 'solvent_equil_simulation_settings': {'equilibration_length': ,\n", " 'equilibration_length_nvt': ,\n", " 'minimization_steps': 5000,\n", @@ -580,30 +598,32 @@ " 'nonbonded_cutoff': ,\n", " 'nonbonded_method': 'PME',\n", " 'rigid_water': True,\n", - " 'small_molecule_forcefield': 'openff-2.0.0'},\n", - " 'solvent_output_settings': {'checkpoint_interval': ,\n", + " 'small_molecule_forcefield': 'openff-2.1.1'},\n", + " 'solvent_output_settings': {'checkpoint_interval': ,\n", " 'checkpoint_storage_filename': 'solvent_checkpoint.nc',\n", " 'forcefield_cache': 'db.json',\n", " 'output_filename': 'solvent.nc',\n", " 'output_indices': 'not water',\n", - " 'output_structure': 'hybrid_system.pdb'},\n", + " 'output_structure': 'hybrid_system.pdb',\n", + " 'positions_write_frequency': ,\n", + " 'velocities_write_frequency': None},\n", " 'solvent_simulation_settings': {'early_termination_target_error': ,\n", " 'equilibration_length': ,\n", " 'minimization_steps': 5000,\n", " 'n_replicas': 14,\n", " 'production_length': ,\n", - " 'real_time_analysis_interval': ,\n", - " 'real_time_analysis_minimum_time': ,\n", + " 'real_time_analysis_interval': ,\n", + " 'real_time_analysis_minimum_time': ,\n", " 'sampler_method': 'repex',\n", " 'sams_flatness_criteria': 'logZ-flatness',\n", " 'sams_gamma0': 1.0,\n", - " 'time_per_iteration': },\n", + " 'time_per_iteration': },\n", " 'thermo_settings': {'ph': None,\n", " 'pressure': ,\n", " 'redox_potential': None,\n", " 'temperature': },\n", - " 'vacuum_engine_settings': {'compute_platform': None},\n", - " 'vacuum_equil_output_settings': {'checkpoint_interval': ,\n", + " 'vacuum_engine_settings': {'compute_platform': None, 'gpu_device_index': None},\n", + " 'vacuum_equil_output_settings': {'checkpoint_interval': ,\n", " 'checkpoint_storage_filename': 'checkpoint.chk',\n", " 'equil_npt_structure': 'equil_structure.pdb',\n", " 'equil_nvt_structure': None,\n", @@ -613,7 +633,7 @@ " 'output_indices': 'not water',\n", " 'preminimized_structure': 'system.pdb',\n", " 'production_trajectory_filename': 'production_equil.xtc',\n", - " 'trajectory_write_interval': },\n", + " 'trajectory_write_interval': },\n", " 'vacuum_equil_simulation_settings': {'equilibration_length': ,\n", " 'equilibration_length_nvt': None,\n", " 'minimization_steps': 5000,\n", @@ -627,24 +647,26 @@ " 'nonbonded_cutoff': ,\n", " 'nonbonded_method': 'nocutoff',\n", " 'rigid_water': True,\n", - " 'small_molecule_forcefield': 'openff-2.0.0'},\n", - " 'vacuum_output_settings': {'checkpoint_interval': ,\n", + " 'small_molecule_forcefield': 'openff-2.1.1'},\n", + " 'vacuum_output_settings': {'checkpoint_interval': ,\n", " 'checkpoint_storage_filename': 'vacuum_checkpoint.nc',\n", " 'forcefield_cache': 'db.json',\n", " 'output_filename': 'vacuum.nc',\n", " 'output_indices': 'not water',\n", - " 'output_structure': 'hybrid_system.pdb'},\n", + " 'output_structure': 'hybrid_system.pdb',\n", + " 'positions_write_frequency': ,\n", + " 'velocities_write_frequency': None},\n", " 'vacuum_simulation_settings': {'early_termination_target_error': ,\n", " 'equilibration_length': ,\n", " 'minimization_steps': 5000,\n", " 'n_replicas': 14,\n", " 'production_length': ,\n", - " 'real_time_analysis_interval': ,\n", - " 'real_time_analysis_minimum_time': ,\n", + " 'real_time_analysis_interval': ,\n", + " 'real_time_analysis_minimum_time': ,\n", " 'sampler_method': 'repex',\n", " 'sams_flatness_criteria': 'logZ-flatness',\n", " 'sams_gamma0': 1.0,\n", - " 'time_per_iteration': }}\n" + " 'time_per_iteration': }}\n" ] } ], @@ -815,46 +837,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "be690ef1-3243-4114-b56f-5babbb660af6", "metadata": { "scrolled": true }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/hannahbaumann/openfe/openfe/protocols/openmm_rfe/_rfe_utils/compute.py:56: UserWarning: Non-GPU platform selected: CPU, this may significantly impact simulation performance\n", - " warnings.warn(wmsg)\n", - "WARNING:root:Non-GPU platform selected: CPU, this may significantly impact simulation performance\n", - "WARNING:openmmtools.multistate.multistatereporter:Warning: The openmmtools.multistate API is experimental and may change in future releases\n", - "WARNING:root:Non-GPU platform selected: CPU, this may significantly impact simulation performance\n", - "WARNING:openmmtools.multistate.multistatesampler:Warning: The openmmtools.multistate API is experimental and may change in future releases\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Please cite the following:\n", - "\n", - " Friedrichs MS, Eastman P, Vaidyanathan V, Houston M, LeGrand S, Beberg AL, Ensign DL, Bruns CM, and Pande VS. Accelerating molecular dynamic simulations on graphics processing unit. J. Comput. Chem. 30:864, 2009. DOI: 10.1002/jcc.21209\n", - " Eastman P and Pande VS. OpenMM: A hardware-independent framework for molecular simulations. Comput. Sci. Eng. 12:34, 2010. DOI: 10.1109/MCSE.2010.27\n", - " Eastman P and Pande VS. Efficient nonbonded interactions for molecular dynamics on a graphics processing unit. J. Comput. Chem. 31:1268, 2010. DOI: 10.1002/jcc.21413\n", - " Eastman P and Pande VS. Constant constraint matrix approximation: A robust, parallelizable constraint method for molecular simulations. J. Chem. Theor. Comput. 6:434, 2010. DOI: 10.1021/ct900463w\n", - " Chodera JD and Shirts MR. Replica exchange and expanded ensemble simulations as Gibbs multistate: Simple improvements for enhanced mixing. J. Chem. Phys., 135:194110, 2011. DOI:10.1063/1.3660669\n", - " \n" - ] - } - ], + "outputs": [], "source": [ "# Finally we can run the simulations\n", "path = pathlib.Path('./ahfe_results')\n", - "path.mkdir()\n", "\n", + "# Commented out since this would be too expensive to run in this notebook, uncomment if you would like to run locally.\n", + "# path.mkdir()\n", "# Execute the DAG\n", - "dag_results = execute_DAG(dag, scratch_basedir=path, shared_basedir=path, n_retries=3)" + "# dag_results = execute_DAG(dag, scratch_basedir=path, shared_basedir=path, n_retries=3)" ] }, { @@ -892,15 +888,15 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "d0f6b8fb-dde2-442a-b641-3160a70e2f84", "metadata": {}, "outputs": [], "source": [ - "# Get the complex and solvent results\n", - "protocol_results = protocol.gather([dag_results])\n", + "# # Get the complex and solvent results\n", + "# protocol_results = protocol.gather([dag_results])\n", "\n", - "print(f\"AHFE dG: {protocol_results.get_estimate()}, err {protocol_results.get_uncertainty()}\")" + "# print(f\"AHFE dG: {protocol_results.get_estimate()}, err {protocol_results.get_uncertainty()}\")" ] }, { @@ -913,27 +909,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "847b5663-2e6c-4cb2-aa9d-39d132fcff3d", "metadata": {}, "outputs": [], "source": [ - "# Save the results in a json file\n", - "import gzip\n", - "import json\n", - "import gufe\n", - "outdict = {\n", - " \"estimate\": protocol_results.get_estimate(),\n", - " \"uncertainty\": protocol_results.get_uncertainty(),\n", - " \"protocol_result\": protocol_results.to_dict(),\n", - " \"unit_results\": {\n", - " unit.key: unit.to_keyed_dict()\n", - " for unit in dag_results.protocol_unit_results\n", - " }\n", - "}\n", + "# # Save the results in a json file\n", + "# import gzip\n", + "# import json\n", + "# import gufe\n", + "# outdict = {\n", + "# \"estimate\": protocol_results.get_estimate(),\n", + "# \"uncertainty\": protocol_results.get_uncertainty(),\n", + "# \"protocol_result\": protocol_results.to_dict(),\n", + "# \"unit_results\": {\n", + "# unit.key: unit.to_keyed_dict()\n", + "# for unit in dag_results.protocol_unit_results\n", + "# }\n", + "# }\n", "\n", - "with open(\"ahfe_json/benzene_results.json\") as stream:\n", - " json.dump(outdict, stream, cls=gufe.tokenization.JSON_HANDLER.encoder)" + "# with open(\"ahfe_json/benzene_results.json\") as stream:\n", + "# json.dump(outdict, stream, cls=gufe.tokenization.JSON_HANDLER.encoder)" ] }, { @@ -954,7 +950,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "id": "f62f69a1-09c0-4a4a-9b37-9663b51a75ac", "metadata": {}, "outputs": [], @@ -972,7 +968,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "id": "3b459b28-a4dc-4fa9-a961-b106c45d79ce", "metadata": {}, "outputs": [ @@ -985,7 +981,7 @@ " 'pint_unit_registry': 'openff_units'}" ] }, - "execution_count": 20, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -993,6 +989,14 @@ "source": [ "estimate" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f65ef93f-89be-4c15-8ac6-014509625be4", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -1011,7 +1015,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.6" + "version": "3.12.10" } }, "nbformat": 4, diff --git a/openmm_md/plain_md.ipynb b/openmm_md/plain_md.ipynb index c705b22..ffc5107 100644 --- a/openmm_md/plain_md.ipynb +++ b/openmm_md/plain_md.ipynb @@ -69,7 +69,7 @@ "id": "fc27c86c", "metadata": {}, "source": [ - "# 0. Setup for Google Colab\n", + "## 0. Setup for Google Colab\n", "\n", "If you are running this example in Google Colab, run the following cells to setup the environment. If you are running this notebook locally, skip down to `1. Overview`" ] diff --git a/openmm_septop/python_tutorial.ipynb b/openmm_septop/septop_tutorial.ipynb similarity index 94% rename from openmm_septop/python_tutorial.ipynb rename to openmm_septop/septop_tutorial.ipynb index 7e6ddbb..47cb469 100644 --- a/openmm_septop/python_tutorial.ipynb +++ b/openmm_septop/septop_tutorial.ipynb @@ -15,7 +15,7 @@ "Each ligand is represented with its own set of coordinates, meaning that the interactions of all atoms of one ligand are turned off while simultaneously turning on the interactions of all atoms of the other ligand. Therefore, restraints are required: \n", "Ligands are restrained to the protein in the complex states using orientational (Boresch-style) restraints; in the solvent states ligands are restrained to remain apart from each other using a single harmonic distance restraint between the ligands. Restraints are not depicted in the thermodynamic cycle below for simplicity.\n", "\n", - "Note: In this `Protocol`, the coulombic interactions of the molecule are fully turned off (annihilated), while the Lennard-Jones interactions are decoupled, meaning the intermolecular interactions are turned off, whilst keeping the intramolecular Lennard-Jones interactions." + "**Note:** In this `Protocol`, the coulombic interactions of the molecule are fully turned off (annihilated), while the Lennard-Jones interactions are decoupled, meaning the intermolecular interactions are turned off, while keeping the intramolecular Lennard-Jones interactions." ] }, { @@ -26,15 +26,55 @@ "" ] }, + { + "cell_type": "markdown", + "id": "4df1661a", + "metadata": {}, + "source": [ + "## 0. Setup for Google Colab\n", + "\n", + "If you are running this example in Google Colab, run the following cells to setup the environment. If you are running this notebook locally, skip down to `1. Loading the ligands`" + ] + }, { "cell_type": "code", - "execution_count": 1, - "id": "fc97de03", + "execution_count": null, + "id": "e178d4d3", "metadata": {}, "outputs": [], "source": [ - "%matplotlib inline\n", - "import openfe" + "# NBVAL_SKIP\n", + "# Only run this cell if on google colab\n", + "import os\n", + "if \"COLAB_RELEASE_TAG\" in os.environ:\n", + " !pip install -q condacolab\n", + " import condacolab\n", + " condacolab.install_from_url(\"https://github.com/OpenFreeEnergy/ExampleNotebooks/releases/download/april-2025/OpenFEforge-1.5.0a0-Linux-x86_64.sh\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "111a9e15", + "metadata": {}, + "outputs": [], + "source": [ + "# NBVAL_SKIP\n", + "# Only run this cell if on google colab\n", + "import os\n", + "if \"COLAB_RELEASE_TAG\" in os.environ:\n", + " import condacolab\n", + " import locale\n", + " locale.getpreferredencoding = lambda: \"UTF-8\"\n", + " !mkdir inputs && cd inputs && openfe fetch rbfe-tutorial\n", + " for _ in range(3):\n", + " # Sometimes we have to re-run the check\n", + " try:\n", + " condacolab.check()\n", + " except:\n", + " pass\n", + " else:\n", + " break" ] }, { @@ -42,13 +82,24 @@ "id": "2fea29c3", "metadata": {}, "source": [ - "## Loading the ligands\n", + "## 1. Loading the ligands\n", "\n", "First we must load the chemical models between which we wish to calculate free energies.\n", "In this example these are initially stored in a molfile (`.sdf`) containing multiple molecules.\n", "This can be loaded using the `SDMolSupplier` class from rdkit and passed to openfe." ] }, + { + "cell_type": "code", + "execution_count": 1, + "id": "fc97de03", + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import openfe" + ] + }, { "cell_type": "code", "execution_count": 2, @@ -66,7 +117,7 @@ "id": "8e5de19a", "metadata": {}, "source": [ - "## Charging the ligands\n", + "## 2. Charging the ligands\n", "\n", "It is recommended to use a single set of charges for each ligand to ensure reproducibility between repeats or consistent charges between different legs of a calculation involving the same ligand, like a relative binding affinity calculation for example. \n", "\n", @@ -84,7 +135,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [02:38<00:00, 15.87s/it]\n" + "Generating charges: 100%|███████████████████████| 10/10 [02:49<00:00, 16.91s/it]\n" ] } ], @@ -110,15 +161,15 @@ "id": "6963be83", "metadata": {}, "source": [ - "## Creating the `LigandNetwork`\n", + "## 3. Creating the `LigandNetwork`\n", "\n", "The first step is to create a `LigandNetwork`. Here, we will be using the same process as in the relative hybrid topology `Protocol`, including the use of a mapper which is required by the scorer. **The mappings will not be used in the `Protocol`.** This is a temporary solution until we have developed a scorer specifically for the `SepTopProtocol`. Alternatively, the user can also manually define the edges they want to run when creating the transformations below, without creating a `LigandNetwork` first.\n", "\n", "The pipeline for creating a `LigandNetwork` can involve three components:\n", "\n", - "* **Atom Mapper**: Proposes potential atom mappings (descriptions of the alchemical change) for pairs of ligands. We will use the `LomapAtomMapper`. **The atom mapping will only be used to score the potential edges, the atom mapping is not used outside of the scorer**.\n", - "* **Scorer**: Given an atom mapping, provides an estimate of the quality of that mapping (higher scores are better). We will use `default_lomap_scorer`.\n", - "* **Network Planner**: Creates the actual `LigandNetwork`; different network planners provide different strategies. We will create a minimal spanning network with the `generate_minimal_spanning_network` method.\n", + "1. **Atom Mapper**: Proposes potential atom mappings (descriptions of the alchemical change) for pairs of ligands. We will use the `LomapAtomMapper`. *The atom mapping will only be used to score the potential edges, the atom mapping is not used outside of the scorer*.\n", + "2. **Scorer**: Given an atom mapping, provides an estimate of the quality of that mapping (higher scores are better). We will use `default_lomap_scorer`.\n", + "3. **Network Planner**: Creates the actual `LigandNetwork`; different network planners provide different strategies. We will create a minimal spanning network with the `generate_minimal_spanning_network` method.\n", "\n", "Each of these components could be replaced by other options." ] @@ -173,7 +224,7 @@ "outputs": [ { "data": { - "image/png": "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AEqqyJw5M0uXLiVPnjz89ttvtG/fntjYWKtjOR273X5765eePXuSMWNGixOJiIgrUgGUVFO4cGEWL16Mt7c3Cxcu5MMPP7Q6ktNZt24du3fvxtfXl+7du1sdR0REXJQKoKSqGjVqMHnyZAA++OADfvjhB4sTOZe4R+117NiRnDlzWpxGRERclQqgpLoOHTrc3ri4ffv27Nq1y+JEzmH//v0sX74cm81G3759rY4jIiIuTAVQ0sTo0aNp2LAh165do1mzZpw/f97qSA5vzJgxADRv3pzixYtbnEZERFyZCqCkCU9PT/773/9SsmRJTp48SYsWLbhx44bVsRzW+fPnmTVrFqCNn0VEJO2pAEqayZYtG8uWLSNbtmxs2bKF7t27Y7fbrY7lkL744gtu3rxJ1apVqVGjhtVxRETExakASpoqUaIE8+fPx9PTkxkzZjB27FirIzmcq1ev8uWXXwJm9E8bP4uISFpTAZQ0V69evdv3tw0YMIDly5dbnMixfPfdd1y8eJFHH32UFi1aWB1HRETcgAqgpItevXrRpUsXYmNjefnllzlw4IDVkRxCbGzs7VHRvn374uXlZXEiERFxByqAki5sNhtffPEFtWvXJiIigqZNm3L58mWrY1lu2bJlHD58mGzZstGpUyer44iIiJtQAZR0E/eEkCJFinD48GFefPFFbt26ZXUsS8U99q1bt274+flZnEZERNyFCqCkq9y5cxMcHEzmzJlZvXq1W295sn37djZu3IiXlxe9evWyOo6IiLgRFUBJd+XLl7+9592ECROYNm2axYmsETf616ZNGwoUKGBxGhERcScqgGKJFi1a8NFHHwHQo0cPNm7caHGi9HX8+PHbz0l251FQERGxhgqgWGbIkCG89NJLREdH07JlS44fP251pHQzfvx4YmNjefbZZ6lQoYLVcURExM2oAIplbDYb06dPp1KlSvz99980a9aMqKgoq2OluX/++ef2tLdG/0RExAoqgGIpX19flixZQr58+dizZw+vvvoqsbGxVsdKU1OnTiUqKoqyZcvSoEEDq+OIiIgbUgEUyxUsWJDFixeTMWNGlixZwvvvv291pDQTHR3NhAkTAOjXr58e+yYiIpZQARSHUK1aNaZOnQrA8OHDmTdvnsWJ0sb8+fM5deoUefPmpV27dlbHERERN6UCKA7j1VdfZcCAAQB06NCB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UYg4qunTp1O/fn0uX75M1apVCQ0NJTAw0OpYIoIKoIjT06IQcTSxsbG88847dO7cmVu3bvHyyy+zbt068ubNa3U0Efl/KoAiLkCLQsRRXLlyhVatWjF69GgA3nvvPebMmUOmTJksTiYid1IBFHERWhQiVjtz5gxPPvkkixcvxtvbm++//54PPvhAz/QVcUAqgCIuRItCxCo7d+4kKCiInTt3kitXLtauXUu7du2sjiUi96ECKOJitChE0tvSpUupXbs2p0+fpkyZMoSGhlKzZk2rY4nIA6gAirgYLQqR9GK32/nss89o0aIFV69epX79+mzevJlixYpZHU1EHkIFUMQFaVGIpLXo6Gi6du3KgAEDsNvtvPHGG/z0009kzZrV6mgikggqgCIuSotCJK1cvnyZhg0bMm3aNDw8PBg3bhxffPGFHusm4kRUAEVcmBaFSGo7cuQI1apVY+3atfj5+REcHEyfPn200lfEyagAirg4LQqR1LJhwwaqVq3KoUOHKFSoECEhITRu3NjqWCKSDCqAIi5Oi0IkNXz33Xc8++yzXLp0iaCgILZt20b58uWtjiUiyaQCKOIGtChEkis2NpbBgwfToUMHoqOjad26NevXrydfvnxWRxORFFABFHETWhQiSXX16lVefPFFRo0aBcDQoUOZO3euHusm4gJUAEXciBaFSGKdPXuWp556ioULF+Lt7c3MmTP56KOP8PDQvzZEXIH+ThZxM1oUIg/z22+/ERQUxP/+9z9y5szJ6tWrefXVV62OJSKpSAVQxM1oUYg8yLJly6hZsyanTp2iVKlShIaGUrt2batjiUgqUwEUcUNaFCJ3s9vtjB07lmbNmnHlyhWeeeYZNm/eTEBAgNXRRCQNqACKuCktCpE40dHRdO/enX79+mG32+natSvLly8ne/bsVkcTkTSiAijixho2bMjIkSMBLQpxV//88w+NGjViypQp2Gw2Pv/8c77++msyZMhgdTQRSUMqgCJu7p133tGiEDcVFhZG9erVWb16NZkzZ2bJkiX069dPj3UTcQMqgCJuTotC3NOmTZuoWrUqBw4coGDBgmzatImmTZtaHUtE0okKoIhoUYibmTVrFs888wwXL16kcuXKbNu2jccff9zqWCKSjlQARQTQohB3EBsby9ChQ3nttde4efMmLVu25NdffyV//vxWRxORdKYCKCK3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", + "image/png": "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AEqqyJw5M0uXLiVPnjz89ttvtG/fntjYWKtjOR273X5765eePXuSMWNGixOJiIgrUgGUVFO4cGEWL16Mt7c3Cxcu5MMPP7Q6ktNZt24du3fvxtfXl+7du1sdR0REXJQKoKSqGjVqMHnyZAA++OADfvjhB4sTOZe4R+117NiRnDlzWpxGRERclQqgpLoOHTrc3ri4ffv27Nq1y+JEzmH//v0sX74cm81G3759rY4jIiIuTAVQ0sTo0aNp2LAh165do1mzZpw/f97qSA5vzJgxADRv3pzixYtbnEZERFyZCqCkCU9PT/773/9SsmRJTp48SYsWLbhx44bVsRzW+fPnmTVrFqCNn0VEJO2pAEqayZYtG8uWLSNbtmxs2bKF7t27Y7fbrY7lkL744gtu3rxJ1apVqVGjhtVxRETExakASpoqUaIE8+fPx9PTkxkzZjB27FirIzmcq1ev8uWXXwJm9E8bP4uISFpTAZQ0V69evdv3tw0YMIDly5dbnMixfPfdd1y8eJFHH32UFi1aWB1HRETcgAqgpItevXrRpUsXYmNjefnllzlw4IDVkRxCbGzs7VHRvn374uXlZXEiERFxByqAki5sNhtffPEFtWvXJiIigqZNm3L58mWrY1lu2bJlHD58mGzZstGpUyer44iIiJtQAZR0E/eEkCJFinD48GFefPFFbt26ZXUsS8U99q1bt274+flZnEZERNyFCqCkq9y5cxMcHEzmzJlZvXq1W295sn37djZu3IiXlxe9evWyOo6IiLgRFUBJd+XLl7+9592ECROYNm2axYmsETf616ZNGwoUKGBxGhERcScqgGKJFi1a8NFHHwHQo0cPNm7caHGi9HX8+PHbz0l251FQERGxhgqgWGbIkCG89NJLREdH07JlS44fP251pHQzfvx4YmNjefbZZ6lQoYLVcURExM2oAIplbDYb06dPp1KlSvz99980a9aMqKgoq2OluX/++ef2tLdG/0RExAoqgGIpX19flixZQr58+dizZw+vvvoqsbGxVsdKU1OnTiUqKoqyZcvSoEEDq+OIiIgbUgEUyxUsWJDFixeTMWNGlixZwvvvv291pDQTHR3NhAkTAOjXr58e+yYiIpZQARSHUK1aNaZOnQrA8OHDmTdvnsWJ0sb8+fM5deoUefPmpV27dlbHERERN6UCKA7j1VdfZcCAAQB06NCB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UYg4qunTp1O/fn0uX75M1apVCQ0NJTAw0OpYIoIKoIjT06IQcTSxsbG88847dO7cmVu3bvHyyy+zbt068ubNa3U0Efl/KoAiLkCLQsRRXLlyhVatWjF69GgA3nvvPebMmUOmTJksTiYid1IBFHERWhQiVjtz5gxPPvkkixcvxtvbm++//54PPvhAz/QVcUAqgCIuRItCxCo7d+4kKCiInTt3kitXLtauXUu7du2sjiUi96ECKOJitChE0tvSpUupXbs2p0+fpkyZMoSGhlKzZk2rY4nIA6gAirgYLQqR9GK32/nss89o0aIFV69epX79+mzevJlixYpZHU1EHkIFUMQFaVGIpLXo6Gi6du3KgAEDsNvtvPHGG/z0009kzZrV6mgikggqgCIuSotCJK1cvnyZhg0bMm3aNDw8PBg3bhxffPGFHusm4kRUAEVcmBaFSGo7cuQI1apVY+3atfj5+REcHEyfPn200lfEyagAirg4LQqR1LJhwwaqVq3KoUOHKFSoECEhITRu3NjqWCKSDCqAIi5Oi0IkNXz33Xc8++yzXLp0iaCgILZt20b58uWtjiUiyaQCKOIGtChEkis2NpbBgwfToUMHoqOjad26NevXrydfvnxWRxORFFABFHETWhQiSXX16lVefPFFRo0aBcDQoUOZO3euHusm4gJUAEXciBaFSGKdPXuWp556ioULF+Lt7c3MmTP56KOP8PDQvzZEXIH+ThZxM1oUIg/z22+/ERQUxP/+9z9y5szJ6tWrefXVV62OJSKpSAVQxM1oUYg8yLJly6hZsyanTp2iVKlShIaGUrt2batjiUgqUwEUcUNaFCJ3s9vtjB07lmbNmnHlyhWeeeYZNm/eTEBAgNXRRCQNqACKuCktCpE40dHRdO/enX79+mG32+natSvLly8ne/bsVkcTkTSiAijixho2bMjIkSMBLQpxV//88w+NGjViypQp2Gw2Pv/8c77++msyZMhgdTQRSUMqgCJu7p133tGiEDcVFhZG9erVWb16NZkzZ2bJkiX069dPj3UTcQMqgCJuTotC3NOmTZuoWrUqBw4coGDBgmzatImmTZtaHUtE0okKoIhoUYibmTVrFs888wwXL16kcuXKbNu2jccff9zqWCKSjlQARQTQohB3EBsby9ChQ3nttde4efMmLVu25NdffyV//vxWRxORdKYCKCK3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", "text/plain": [ "
" ] @@ -212,7 +263,7 @@ "id": "056924a3", "metadata": {}, "source": [ - "## Creating a single `Transformation`\n", + "## 4. Creating a single `Transformation`\n", "\n", "The `LigandNetwork` only knows about the small molecules and the alchemical connections between them. It doesn't know anything about environment (e.g., solvent) or about the `Protocol` that will be used during the simulation.\n", "\n", @@ -289,28 +340,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "3f394a0d", "metadata": { "scrolled": true }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/hannahbaumann/miniforge3/envs/septop/lib/python3.12/site-packages/Bio/Application/__init__.py:39: BiopythonDeprecationWarning: The Bio.Application modules and modules relying on it have been deprecated.\n", - "\n", - "Due to the on going maintenance burden of keeping command line application\n", - "wrappers up to date, we have decided to deprecate and eventually remove these\n", - "modules.\n", - "\n", - "We instead now recommend building your command line and invoking it directly\n", - "with the subprocess module.\n", - " warnings.warn(\n" - ] - } - ], + "outputs": [], "source": [ "from openfe.protocols.openmm_septop import SepTopProtocol" ] @@ -394,7 +429,7 @@ "id": "1e29d1c8", "metadata": {}, "source": [ - "## Creating the `AlchemicalNetwork`\n", + "## 5. Creating the `AlchemicalNetwork`\n", "\n", "The `AlchemicalNetwork` contains all the information needed to run the entire campaign. It consists of a `Transformation` for each edge of the campaign. We'll loop over all the edges to make each transformation." ] @@ -439,7 +474,7 @@ "id": "6c61fe36", "metadata": {}, "source": [ - "## Running the SepTop simulations using the OpenFE CLI\n", + "## 6. Running the SepTop simulations using the OpenFE CLI\n", "\n", "We'll write out each transformation to disk, so that they can be run independently using the `openfe quickrun` command:" ] @@ -508,7 +543,7 @@ "id": "a0968657-7b60-4b10-ab3b-5303cf08caa1", "metadata": {}, "source": [ - "## Analysis" + "## 7. Analysis" ] }, { @@ -565,7 +600,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8bd82399-c523-4960-a0c1-38dbc0901b57", + "id": "b70822d2-5030-4ed9-87da-f166de551592", "metadata": {}, "outputs": [], "source": [] @@ -587,7 +622,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.8" + "version": "3.12.10" } }, "nbformat": 4, diff --git a/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb b/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb index 87bf2c2..0ade1da 100644 --- a/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb +++ b/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb @@ -15,7 +15,7 @@ "id": "6f3d03c2", "metadata": {}, "source": [ - "# 0. Setup for Google Colab\n", + "## 0. Setup for Google Colab\n", "\n", "If you are running this example in Google Colab, run the following cells to setup the environment. If you are running this notebook locally, skip down to `1. Overview`" ] @@ -61,21 +61,6 @@ " break" ] }, - { - "cell_type": "code", - "execution_count": 1, - "id": "6abcaae7-f5fd-483c-972f-5bb5b6d4908a", - "metadata": {}, - "outputs": [], - "source": [ - "# First we do a set of imports\n", - "import csv\n", - "from pprint import pprint\n", - "import cinnabar\n", - "from cinnabar import plotting as cinnabar_plotting\n", - "from cinnabar import femap, stats" - ] - }, { "cell_type": "markdown", "id": "22124f1f-5349-4174-830d-65c5bf9f560e", @@ -96,6 +81,21 @@ "In future versions of cinnabar this will no longer be needed." ] }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6abcaae7-f5fd-483c-972f-5bb5b6d4908a", + "metadata": {}, + "outputs": [], + "source": [ + "# First we do a set of imports\n", + "import csv\n", + "from pprint import pprint\n", + "import cinnabar\n", + "from cinnabar import plotting as cinnabar_plotting\n", + "from cinnabar import femap, stats" + ] + }, { "cell_type": "code", "execution_count": 2, @@ -533,7 +533,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.12.10" } }, "nbformat": 4, diff --git a/rbfe_tutorial/python_tutorial.ipynb b/rbfe_tutorial/rbfe_python_tutorial.ipynb similarity index 100% rename from rbfe_tutorial/python_tutorial.ipynb rename to rbfe_tutorial/rbfe_python_tutorial.ipynb