From 307715a9387c9d74983bf890e441288bb1f564d9 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Thu, 30 Apr 2026 11:05:53 -0700 Subject: [PATCH 01/15] add openfold output cell --- cookbook/openfold3_to_openfe.ipynb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index e048e05..b1f1177 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -218,6 +218,24 @@ "`run_openfold predict --query_json=queries.json --runner_yaml output_settings.yml`" ] }, + { + "cell_type": "markdown", + "id": "9c1ab9ee-71f5-4587-bea1-35097621c039", + "metadata": {}, + "source": [ + "### Evaluating OpenFold output" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "32cd3cbd-9d5f-4214-90da-a84ed645d35b", + "metadata": {}, + "outputs": [], + "source": [ + "# confidence scores for each ligand are at assets/of3_tyk2_output/{lig_name}/*/*confidences*.json" + ] + }, { "cell_type": "markdown", "id": "b4adde29-282a-45f6-96a6-c8de0700a266", From a968c9fe893fffee95009c006e4ebd92926069ce Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Thu, 30 Apr 2026 14:21:39 -0700 Subject: [PATCH 02/15] reorganizing sections --- cookbook/openfold3_to_openfe.ipynb | 644 +++++++++++++---------------- 1 file changed, 298 insertions(+), 346 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index b1f1177..815584e 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -35,48 +35,18 @@ }, { "cell_type": "markdown", - "id": "1e89d5ef-e362-4335-9cbb-9752341b29f9", + "id": "2fea29c3", "metadata": {}, "source": [ - "## Overview\n", - "\n", - "In this example notebook we demonstrate how to predict and run simulations for different ligands bound to tyrosine kinase 2 (TYK2). The dataset comes from the [Wang et al. JACS 2015 dataset](https://pubs.acs.org/doi/10.1021/ja512751q).\n", - "\n", - "
\n", - "\n", - "\n", - "**The tutorial is broken into the following steps:**\n", - "\n", - "1. Running cofolding with OpenFold3 on a set of TYK2 ligands\n", - "\n", - "2. Processing the OpenFold3 output for use with OpenFE\n", - "\n", - " a) Choosing a reference protein structure\n", - "\n", - " b) Aligning & extracting the necessary ligands & protein structures.\n", - "\n", - " c) Fixing & protonating the reference protein structure.\n", - "\n", - "\n", - "3. Loading structures into OpenFE Components\n", - "\n", - "4. Creating a free energy transformation with 3 protocol options\n", - "\n", - " a) Absolute Binding Free Energy Transformation\n", - "\n", - " b) SepTop Relative Binding Free Energy Transformation\n", - "\n", - " c) Hybrid Topology Relative Binding Free Energy Transformation" + "## 1. Run cofolding with OpenFold3 on a set of TYK2 ligands" ] }, { "cell_type": "markdown", - "id": "2fea29c3", + "id": "ef3bdb1f-504a-4311-8e0a-c28265b006cb", "metadata": {}, "source": [ - "## 1. Run cofolding with OpenFold3 on a set of TYK2 ligands\n", - "\n", - "### Preparing the Input JSON for OpenFold\n", + "### Preparing the input JSON for OpenFold\n", "\n", "First we need to create an input JSON file for OpenFold. This step requires assembling two key pieces of information:\n", "\n", @@ -84,6 +54,7 @@ "- Protein sequence (extracted from the PDB file)\n", "\n", "In this workflow, we begin with an SDF file containing the ligands.\n", + "\n", "We extract the SMILES representation for each ligand and store them in a dictionary alongside their ligand identifiers." ] }, @@ -96,12 +67,14 @@ }, "outputs": [], "source": [ - "ligands_file = \"assets/tyk2_ligands.sdf\"\n", "from rdkit.Chem.Descriptors3D import Asphericity\n", "from rdkit import Chem\n", "\n", + "ligands_file = \"assets/tyk2_ligands.sdf\"\n", + "\n", "ligands_dict = {}\n", "sppl = Chem.SDMolSupplier(ligands_file, removeHs=True)\n", + "\n", "for mol in sppl:\n", " smi = Chem.MolToSmiles(mol)\n", " name = mol.GetProp(\"_Name\")\n", @@ -143,7 +116,7 @@ "id": "80da7967-8046-44e4-aef7-c81ac6712f98", "metadata": {}, "source": [ - "We then create the JSON file that will be the OpenFold input." + "Next we create the JSON file that will be the OpenFold input." ] }, { @@ -199,23 +172,29 @@ "source": [ "### Running OpenFold\n", "\n", - "#### Defining the output settings\n", + "#### Defining the OpenFold settings\n", "\n", - "By default OpenFold3 outputs `.mmcif` files, but OpenFE requires `.pdb` files. We can ask OpenFold to generate this instead by defining it in the output settings.\n", + "we define the following settings in a `settings.yaml` file to be passed to OpenFold:\n", "\n", - "To do this, create an `output_settings.yml` file to specify .pdb as the output file format:\n", + "```json\n", + "model_update:\n", + " presets:\n", + " - predict\n", + " - low_mem\n", + " custom:\n", + " settings:\n", + " memory:\n", + " eval:\n", + " use_cueq_triangle_kernels: true\n", + " use_deepspeed_evo_attention: false\n", "\n", - "```\n", - "output_writer_settings:\n", - " # change output format to pdb (default: mmcif):\n", - " structure_format: pdb\n", - "```\n", "\n", + "```\n", "#### Running OpenFold\n", "\n", "With all these inputs, you can now run OpenFold:\n", "\n", - "`run_openfold predict --query_json=queries.json --runner_yaml output_settings.yml`" + "`run_openfold predict --query_json=queries.json --runner_yaml settings.yaml`" ] }, { @@ -223,361 +202,196 @@ "id": "9c1ab9ee-71f5-4587-bea1-35097621c039", "metadata": {}, "source": [ - "### Evaluating OpenFold output" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "32cd3cbd-9d5f-4214-90da-a84ed645d35b", - "metadata": {}, - "outputs": [], - "source": [ - "# confidence scores for each ligand are at assets/of3_tyk2_output/{lig_name}/*/*confidences*.json" - ] - }, - { - "cell_type": "markdown", - "id": "b4adde29-282a-45f6-96a6-c8de0700a266", - "metadata": {}, - "source": [ - "## 2. Processing the OpenFold3 output for use with OpenFE\n", + "#### Evaluating OpenFold output\n", + "\n", + "confidence scores for each ligand are at ``assets/of3_tyk2_output/{lig_name}/seed_42/*confidences.json``\n", "\n", "
\n", "⚠️ Important Note:\n", - " Here we use the first model for each complex predicted by OpenFold3. In practice you would filter through all predicted models, possibly using pose busters (github.com/maabuu/posebusters) and some other scoring metrics to identify the most plausible inputs.\n", + " Here we use the first model for each complex predicted by OpenFold3. In practice you would filter through all predicted models using confidence scores, and possibly using pose busters (github.com/maabuu/posebusters).\n", "
" ] }, { "cell_type": "markdown", - "id": "eaf920be-9e16-402b-9fc5-8e1d4f3712cf", + "id": "721074db-8266-4c3e-b592-64220e0cfd8f", "metadata": {}, "source": [ - "### Preparing & extracting the structures\n", - "\n", - "Now that we have a set of predicted structures, we must extract the relevant information from the PDB files.\n", - "This means:\n", - "\n", - "a) Choosing a reference protein structure which will be used for all binding affinity predictions\n", - "\n", - " - This is necessary for RBFE simulations, where a single structure must be kept constant throughout the transformations. Note that for ABFE simulations, this step can be avoided.\n", - " - For the sake of this demonstration, we will be choosing the predicted structure that is bound to the ligand occupying the largest volume. The idea here being that hopefully the binding site of that structure can accomodate all the other ligands. We note that in practice this is not always true.\n", - "\n", - "b) Aligning the structures to the reference & extracting the necessary structures\n", - "\n", - " - This is so that we can extract the ligands and use them with the chosen structure.\n", - "\n", - "c) Fixing & protonating the reference protein structure.\n", - "\n", - "\n", - "#### a) Choosing a reference protein structure\n", - "\n", - "As mentioned above, we will select a reference protein structure for all simulations going forward. To do this, we naively select the structure bound to a ligand with the largest volume.\n", - "\n", - "Here we load in all the structures into MDAnalysis, extract the ligands into RDKit molecules using their initial SMILES definitions as bond/formal charge templates, and then get the ligand with the largest volume using the `Asphericity` 3D descriptor." + "## 2. Running OpenFE Protocols with OpenFold structures" ] }, { - "cell_type": "code", - "execution_count": 4, - "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", + "cell_type": "markdown", + "id": "249ec515-cfad-4f49-8dba-ee2438b1adf4", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Extracting ligand from lig_ejm_50_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_jmc_23_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_43_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_42_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_31_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_47_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_46_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_48_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_jmc_28_seed_42_sample_1_model.pdb\n", - "\n", - "Largest ligand is lig_jmc_27 with volume 0.5209626577896912\n" - ] - } - ], "source": [ - "import pathlib\n", - "import MDAnalysis as mda\n", - "from MDAnalysis.analysis import align\n", - "from rdkit import Chem, rdBase\n", - "from rdkit.Chem import AllChem\n", - "from rdkit.Chem.Descriptors3D import Asphericity\n", - "import warnings\n", + "We will demonstrate how to use OpenFold generated structures with three different OpenFE protocols:\n", "\n", - "# don't show warnings that are expected and not an issue\n", - "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") \n", - "\n", - "# gather all the complexes and align to a single structure\n", - "# which has the largest ligand by volume \n", - "of_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", - "output_root = pathlib.Path(\"openfold_to_openfe\")\n", - "temp_dir = pathlib.Path(output_root,\"temp_ligands\")\n", - "temp_dir.mkdir(exist_ok=True,parents=True)\n", - "# load all the output pdbs and calculate ligand volumes\n", - "ligand_volumes = {}\n", + "a) Absolute Binding Free Energy\n", "\n", - "for output_file in of_results_root.glob(\"*/*/*.pdb\"):\n", - " ligand_name = output_file.name.split('_seed')[0]\n", - " print(f\"Extracting ligand from {output_file.name}\")\n", - " with warnings.catch_warnings(): \n", - " warnings.simplefilter(\"ignore\")\n", - " u = mda.Universe(str(output_file))\n", - " ligand = u.select_atoms(\"resname LIG\")\n", - " # write the ligand to a temporary file\n", - " ligand.write(str(temp_dir / f\"{ligand_name}.pdb\"))\n", - " # now load back with rdkit\n", - " rdkit_mol = Chem.MolFromPDBFile(str(temp_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", - " # now use a template from the SMILES definitions to make sure the bond orders are correct\n", - " template_mol = Chem.MolFromSmiles(ligands_dict[ligand_name])\n", - " # don't show rdkit's \"WARNING: More than one matching pattern found - picking one\" for every ligand\n", - " with rdBase.BlockLogs(): \n", - " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", - " # calculate the volume\n", - " vsa = Asphericity(rdkit_mol)\n", - " ligand_volumes[ligand_name] = vsa\n", + "b) Separated Topologies\n", "\n", - "# find the ligand with the largest volume\n", - "largest_ligand = max(ligand_volumes, key=ligand_volumes.get)\n", - "print(f\"\\nLargest ligand is {largest_ligand} with volume {ligand_volumes[largest_ligand]}\")" + "c) Hybrid Topology\n" ] }, { "cell_type": "markdown", - "id": "6056e755-0da0-4712-b4ae-7a721c94851d", + "id": "48d2bae8-79d2-41d9-a3eb-61d6c2c25924", "metadata": {}, "source": [ - "#### b) Aligning & extracting the necessary structures\n", - "\n", - "Next we align all the models back to the reference structure. We then extract all the ligands and the protein atoms from the reference." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "26c10e11-f001-44e5-87a4-2939ead048a8", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Aligning lig_ejm_50_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Aligning lig_jmc_23_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Aligning lig_ejm_43_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Aligning lig_ejm_42_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Aligning lig_ejm_31_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Aligning lig_ejm_47_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Aligning lig_jmc_27_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Aligning lig_ejm_46_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Aligning lig_ejm_48_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Aligning lig_jmc_28_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n" - ] - } - ], - "source": [ - "reference_pdb = pathlib.Path(of_results_root, largest_ligand, \"seed_42\", f\"{largest_ligand}_seed_42_sample_1_model.pdb\")\n", - "other_pdbs = of_results_root.glob(\"*/*/*_seed_42_sample_1_model.pdb\")\n", - "output_dir = pathlib.Path(\"openfold_to_openfe/p_aligned/\")\n", - "output_dir.mkdir(exist_ok=True)\n", - "\n", - "ref = mda.Universe(reference_pdb)\n", - "for pdb in other_pdbs:\n", - " print(f\"Aligning {pdb.name} to {reference_pdb.name}\")\n", - " ligand = pdb.name.split('_seed')[0]\n", - " mob = mda.Universe(pdb)\n", + "### Creating OpenFE components from the inputs\n", "\n", - " # Align mobile → reference using protein backbone\n", - " ref_prot = ref.select_atoms(\"protein and backbone\")\n", - " mob_prot = mob.select_atoms(\"protein and backbone\")\n", - " \n", - " # Perform alignment in-place\n", - " align.alignto(mob_prot, ref_prot)\n", - " aligned_ligand = mob.select_atoms(\"resname LIG\")\n", - " aligned_ligand.write(f'{output_dir}/{ligand}.pdb')\n", - " # load back into rdkit to add hydrogens\n", - " rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand}.pdb', removeHs=True)\n", - " # use the template to assign bond orders\n", - " template_mol = Chem.MolFromSmiles(ligands_dict[ligand])\n", - " with rdBase.BlockLogs(): \n", - " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", - " # Add hydrogens\n", - " rdkit_mol = AllChem.AddHs(rdkit_mol, addCoords=True)\n", - " # Set the molecule name\n", - " rdkit_mol.SetProp('_Name', f\"{ligand}\")\n", - " # write to sdf\n", - " Chem.MolToMolFile(rdkit_mol, output_dir / f\"{ligand}_prepped.sdf\")\n", + "Now we can create OpenFE components from the files we prepared above.\n", + "#### Loading ligands and assigning partial charges\n", "\n", - " # For the reference pdb, save the protein alone\n", - " if pdb.name.split('_seed')[0] == largest_ligand:\n", - " full_protein = mob.select_atoms(\"protein\")\n", - " full_protein.write(f'{output_dir}/protein.pdb')" + "First we load the ligands and assign partial charges to them using OpenFF's NAGL model." ] }, { "cell_type": "markdown", - "id": "fe3ca792-4615-4be3-8a41-feb0819e968d", + "id": "6419b4ec-6513-47ca-bb66-0eb17a7224c3", "metadata": {}, "source": [ - "
\n", - "⚠️ Important Note:\n", - "

\n", - " Here simply we assign ligand protonation states to those we defined at the start of this exercise. Additionally, below we will assign protein protonation states using PDBFixer at pH 7 without accounting for the ligand.

\n", - " In practice more care would be taken when protonating the complexes, using more complex tools such as Maestro or OpenEye's Spruce. For example, ligand protonation states may change depending on the chemical environment they are bound to.\n", - "
" + "### 2a) Absolute Binding Free Energy (ABFE) Transformation\n", + "\n", + "The ABFE protocol requires the least amount of post-processing of the OpenFold outputs.\n", + "\n", + "For the sake of simplicity, we will only create a Transformation for `lig_jmc_27`, but this process is generalizable to the rest of the ligands in the series.\n" ] }, { "cell_type": "markdown", - "id": "10b42b56-2f47-4215-8397-fcf7473c4860", + "id": "cdeee4e3-ce8c-4151-9ef7-5a6017ac3dcb", "metadata": {}, "source": [ - "#### c) Fixing & protonating the reference protein structure\n", - "\n", - "The PDB contains the heavy atoms of the protein but is missing hydrogens and caps. Here we call PDBFixer to add hydrogens at pH 7 and add protein caps." + "#### Loading and assigning partial charges to the ligand(s)" ] }, { "cell_type": "code", "execution_count": 6, - "id": "ea82c47d-9794-424c-8d27-a9c6e69d29e8", + "id": "09725e7d-b959-4221-b027-1488b6fea22a", "metadata": {}, "outputs": [], "source": [ - "# now run the reference protein through pdbfixer\n", - "! pdbfixer openfold_to_openfe/p_aligned/protein.pdb --add-atoms=all --add-residues --output=openfold_to_openfe/p_aligned/protein_fixed.pdb" - ] - }, - { - "cell_type": "markdown", - "id": "89e52270-514c-4b21-8179-07c7319ff468", - "metadata": {}, - "source": [ - "## 3. Creating OpenFE components from the inputs\n", - "\n", - "Now we can create OpenFE components from the files we prepared above.\n", - "\n", - "### Loading ligands and assigning partial charges\n", - "\n", - "First we load the ligands and assign them partial charges using OpenFF's NAGL model." + "import openfe\n", + "supp = Chem.SDMolSupplier(\"assets/tyk2_ligands.sdf\", removeHs=False)\n", + "all_ligands = [openfe.SmallMoleculeComponent.from_rdkit(mol) for mol in supp]\n", + "ligand = [lig for lig in all_ligands if lig.name == 'lig_jmc_27'][0]" ] }, { "cell_type": "code", "execution_count": 7, - "id": "fc97de03", + "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.85it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.57it/s]\n" ] } ], "source": [ - "import glob\n", - "import openfe\n", "from openfe.protocols.openmm_utils.omm_settings import OpenFFPartialChargeSettings\n", "from openfe.protocols.openmm_utils.charge_generation import bulk_assign_partial_charges\n", "\n", - "# Load all the ligands\n", - "ligand_sdfs = glob.glob('openfold_to_openfe/p_aligned/*_prepped.sdf')\n", - "ligands = []\n", - "for l in ligand_sdfs:\n", - " ligand = openfe.SmallMoleculeComponent.from_sdf_file(l)\n", - " ligands.append(ligand)\n", - "\n", "# Generate partial charges\n", "charge_settings = OpenFFPartialChargeSettings(partial_charge_method=\"nagl\")\n", "\n", "charged_ligands = bulk_assign_partial_charges(\n", - " molecules=ligands,\n", + " molecules=[ligand],\n", " overwrite=False,\n", " method=charge_settings.partial_charge_method,\n", " toolkit_backend=charge_settings.off_toolkit_backend,\n", " generate_n_conformers=1,\n", " nagl_model=None,\n", - " processors=1\n", + " processors=1,\n", ")" ] }, { "cell_type": "markdown", - "id": "0d1e9f9d-ebe0-4fd5-be6f-fe03f7db75ee", + "id": "a84b9dfa-e92a-43fa-baae-a725778122cb", "metadata": {}, "source": [ - "Then we can load the reference protein to a ProteinComponent." + "#### Fixing & protonating the protein structure\n", + "\n", + "The PDB contains the heavy atoms of the protein but is missing hydrogens and caps. Here we call PDBFixer to add hydrogens at pH 7 and add protein caps." ] }, { "cell_type": "code", "execution_count": 8, - "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", + "id": "ea82c47d-9794-424c-8d27-a9c6e69d29e8", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/site-packages/gufe/components/explicitmoleculecomponent.py:59: UserWarning: Molecule (name='tyk2') doesn't have any hydrogen atoms present. If this is unexpected, consider loading the molecule with `removeHs=False`\n", - " warnings.warn(\n" + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=37394) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + " pid, fd = os.forkpty()\n" ] } ], "source": [ - "protein = openfe.ProteinComponent.from_pdb_file(\"openfold_to_openfe/p_aligned/protein.pdb\", name=\"tyk2\")" + "# now run the reference protein through pdbfixer\n", + "! pdbfixer assets/of3_tyk2_output/lig_jmc_27/seed_42/lig_jmc_27_seed_42_sample_1_model.pdb --add-atoms=all --add-residues --output=openfold_to_openfe/lig_jmc_27_seed_42_sample_1_model_fixed.pdb" ] }, { "cell_type": "markdown", - "id": "7936a780-99a5-4bcb-addf-64646b9f3a4d", + "id": "8c55d160-558f-426f-8a8c-9ae46d191cff", "metadata": {}, "source": [ - "Finally, let's also define a SolventComponent which we will use to define our Transformations." + "Then we can load the reference protein to a ProteinComponent." ] }, { "cell_type": "code", "execution_count": 9, - "id": "30373ee0-d777-4828-b89a-5a8fdbc56c41", - "metadata": {}, - "outputs": [], + "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "ProteinComponent(name=tyk2)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "solvent = openfe.SolventComponent()" + "protein = openfe.ProteinComponent.from_pdb_file(\"openfold_to_openfe/lig_jmc_27_seed_42_sample_1_model_fixed.pdb\", name=\"tyk2\")\n", + "protein" ] }, { "cell_type": "markdown", - "id": "8a83aff9-a356-4a3f-aeed-cc3a0e989cf5", + "id": "4d11803b-6d4b-4507-8c98-6ff40f75680e", "metadata": {}, "source": [ - "## 4. Creating a Binding Free Energy Transformation\n", - "\n", - "### 4a) Absolute Binding Free Energy\n", - "Using these inputs, we can create ABFE Transformations. For the sake of simplicity, we will only create a Transformation for `lig_jmc_27`, but this process is generalizable to the rest of the ligands in the series.\n", - "\n", - "First we create the `ChemicalSystems` defining the end states of the simulation:" + "We must also define a SolventComponent which we will use to define our Transformations." ] }, { "cell_type": "code", "execution_count": 10, - "id": "c405e50c-1df3-4bef-8278-393550e1fc6a", + "id": "30373ee0-d777-4828-b89a-5a8fdbc56c41", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "SmallMoleculeComponent(name=lig_jmc_27)" + "SolventComponent(name=O, Na+, Cl-)" ] }, "execution_count": 10, @@ -586,9 +400,24 @@ } ], "source": [ - "# choose the first ligand\n", - "ligand = [l for l in charged_ligands if l.name == 'lig_jmc_27'][0]\n", - "ligand" + "solvent = openfe.SolventComponent()\n", + "solvent" + ] + }, + { + "cell_type": "markdown", + "id": "e1ef09d2-ec8b-4577-8510-c67cb89fc5b5", + "metadata": {}, + "source": [ + "#### Creating the ``Transformation``" + ] + }, + { + "cell_type": "markdown", + "id": "695c61c4-3fa6-4e1a-939f-5349e6829627", + "metadata": {}, + "source": [ + "Create the `ChemicalSystems` defining the end states of the simulation:" ] }, { @@ -598,15 +427,13 @@ "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "(ChemicalSystem(name=state_A, components={'ligand': SmallMoleculeComponent(name=lig_jmc_27), 'protein': ProteinComponent(name=tyk2), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", - " ChemicalSystem(name=state_B, components={'protein': ProteinComponent(name=tyk2), 'solvent': SolventComponent(name=O, Na+, Cl-)}))" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "ChemicalSystem(name=complex, components={'ligand': SmallMoleculeComponent(name=lig_jmc_27), 'protein': ProteinComponent(name=tyk2), 'solvent': SolventComponent(name=O, Na+, Cl-)})\n", + "\n", + "ChemicalSystem(name=solvent, components={'protein': ProteinComponent(name=tyk2), 'solvent': SolventComponent(name=O, Na+, Cl-)})\n" + ] } ], "source": [ @@ -617,20 +444,22 @@ " 'ligand': ligand,\n", " 'protein': protein,\n", " 'solvent': solvent,\n", - "}, name=\"state_A\")\n", + "}, name=\"complex\")\n", "\n", "# state B is the system without the ligand\n", "stateB = openfe.ChemicalSystem({\n", " 'protein': protein,\n", " 'solvent': solvent,\n", - "}, name=\"state_B\")\n", + "}, name=\"solvent\")\n", "\n", - "stateA, stateB" + "print(stateA)\n", + "print(\"\")\n", + "print(stateB)" ] }, { "cell_type": "markdown", - "id": "b576d9b0-b81e-4dc1-8bf0-26fc1585b757", + "id": "e32fb4ef-dbf5-4a9a-90c4-b64d9e5af6ce", "metadata": {}, "source": [ "Next we create the Protocol. We use the default settings, except to help us execute in parallel we set the number of repeats to 1." @@ -652,7 +481,7 @@ }, { "cell_type": "markdown", - "id": "8a643c9b-5510-4ae4-9b10-0af779821e66", + "id": "6bf8af4c-9894-4af3-84f8-2ed3830120ad", "metadata": {}, "source": [ "Finally we create the `Transformation` object." @@ -676,7 +505,7 @@ }, { "cell_type": "markdown", - "id": "f89a9800-9d25-470c-845f-87479095806e", + "id": "34ec9c8d-cb7f-4cad-9794-b73629a11246", "metadata": {}, "source": [ "This transformation can now be run using `openfe quickrun`." @@ -684,17 +513,23 @@ }, { "cell_type": "markdown", - "id": "f9e4f4a1-ed28-4d33-b73b-865dc5023b93", + "id": "cc023ddb-d32a-4f78-bea1-a4f9efddf902", + "metadata": {}, + "source": [ + "### 2b) Separated Topologies RBFE Transformation" + ] + }, + { + "cell_type": "markdown", + "id": "a90d2205-1c68-4349-95b1-e20f607d4a86", "metadata": {}, "source": [ - "### 4b) Separated Topologies Relative Binding Free Energy Transformation\n", - "\n", "We can instead build a SepTop RBFE Transformation. Here we will do the transformation between `lig_jmc_27` and `lig_ejm_46`." ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "7ad01abd-097c-466d-9a3f-74a67e4d9015", "metadata": {}, "outputs": [], @@ -705,7 +540,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "71d4ff18-a837-443d-bc02-69554e7d76cf", "metadata": {}, "outputs": [], @@ -729,7 +564,7 @@ }, { "cell_type": "markdown", - "id": "ebde65ab-8a9c-4426-a0c4-91aefd6dea68", + "id": "54484f2f-347b-498e-b5e2-60e8c8db446a", "metadata": {}, "source": [ "Next we create the Protocol. We use the default settings, except to help us execute in parallel we set the number of repeats to 1." @@ -737,7 +572,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "3e343c11-b693-4700-b1ea-2fa7951afa88", "metadata": {}, "outputs": [], @@ -751,7 +586,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "a531a0cb-3eda-4d25-89d8-347f470d40ea", "metadata": {}, "outputs": [], @@ -767,7 +602,7 @@ }, { "cell_type": "markdown", - "id": "d59f5d1b-f078-49c2-9965-9cb8abc64a71", + "id": "db4344c5-c300-4b6e-aa0a-a7cae9c6380f", "metadata": {}, "source": [ "This transformation can now be run using `openfe quickrun`." @@ -775,17 +610,166 @@ }, { "cell_type": "markdown", - "id": "316727a4-aa8b-43dd-916d-b73244ee829a", + "id": "6e16e781-c6dc-4a62-85a7-0bc59678e916", "metadata": {}, "source": [ - "### 4c) Creating a Hybrid Topology Relative Binding Free Energy Transformation\n", + "### 2c) Creating a Hybrid Topology Relative Binding Free Energy Transformation\n", "\n", "Finally we create a Hybrid Topology RBFE Transformation. Again, as per the SepTop example above, we will do the transformation between `lig_jmc_27` and `lig_ejm_46`." ] }, + { + "cell_type": "markdown", + "id": "eaf920be-9e16-402b-9fc5-8e1d4f3712cf", + "metadata": {}, + "source": [ + "### Preparing & extracting the structures\n", + "\n", + "Now that we have a set of predicted structures, we must extract the relevant information from the PDB files.\n", + "This means:\n", + "\n", + "a) Choosing a reference protein structure which will be used for all binding affinity predictions\n", + "\n", + " - This is necessary for RBFE simulations, where a single structure must be kept constant throughout the transformations. Note that for ABFE simulations, this step can be avoided.\n", + " - For the sake of this demonstration, we will be choosing the predicted structure that is bound to the ligand occupying the largest volume. The idea here being that hopefully the binding site of that structure can accomodate all the other ligands. We note that in practice this is not always true.\n", + "\n", + "b) Aligning the structures to the reference & extracting the necessary structures\n", + "\n", + " - This is so that we can extract the ligands and use them with the chosen structure.\n", + "\n", + "c) Fixing & protonating the reference protein structure.\n", + "\n", + "\n", + "#### a) Choosing a reference protein structure\n", + "\n", + "As mentioned above, we will select a reference protein structure for all simulations going forward. To do this, we naively select the structure bound to a ligand with the largest volume.\n", + "\n", + "Here we load in all the structures into MDAnalysis, extract the ligands into RDKit molecules using their initial SMILES definitions as bond/formal charge templates, and then get the ligand with the largest volume using the `Asphericity` 3D descriptor." + ] + }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, + "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", + "metadata": {}, + "outputs": [], + "source": [ + "import pathlib\n", + "import MDAnalysis as mda\n", + "from MDAnalysis.analysis import align\n", + "from rdkit import Chem, rdBase\n", + "from rdkit.Chem import AllChem\n", + "from rdkit.Chem.Descriptors3D import Asphericity\n", + "import warnings\n", + "\n", + "# don't show warnings that are expected and not an issue\n", + "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") \n", + "\n", + "# gather all the complexes and align to a single structure\n", + "# which has the largest ligand by volume \n", + "of_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", + "output_root = pathlib.Path(\"openfold_to_openfe\")\n", + "temp_dir = pathlib.Path(output_root,\"temp_ligands\")\n", + "temp_dir.mkdir(exist_ok=True,parents=True)\n", + "# load all the output pdbs and calculate ligand volumes\n", + "ligand_volumes = {}\n", + "\n", + "for output_file in of_results_root.glob(\"*/*/*.pdb\"):\n", + " ligand_name = output_file.name.split('_seed')[0]\n", + " print(f\"Extracting ligand from {output_file.name}\")\n", + " with warnings.catch_warnings(): \n", + " warnings.simplefilter(\"ignore\")\n", + " u = mda.Universe(str(output_file))\n", + " ligand = u.select_atoms(\"resname LIG\")\n", + " # write the ligand to a temporary file\n", + " ligand.write(str(temp_dir / f\"{ligand_name}.pdb\"))\n", + " # now load back with rdkit\n", + " rdkit_mol = Chem.MolFromPDBFile(str(temp_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", + " # now use a template from the SMILES definitions to make sure the bond orders are correct\n", + " template_mol = Chem.MolFromSmiles(ligands_dict[ligand_name])\n", + " # don't show rdkit's \"WARNING: More than one matching pattern found - picking one\" for every ligand\n", + " with rdBase.BlockLogs(): \n", + " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", + " # calculate the volume\n", + " vsa = Asphericity(rdkit_mol)\n", + " ligand_volumes[ligand_name] = vsa\n", + "\n", + "# find the ligand with the largest volume\n", + "largest_ligand = max(ligand_volumes, key=ligand_volumes.get)\n", + "print(f\"\\nLargest ligand is {largest_ligand} with volume {ligand_volumes[largest_ligand]}\")" + ] + }, + { + "cell_type": "markdown", + "id": "6056e755-0da0-4712-b4ae-7a721c94851d", + "metadata": {}, + "source": [ + "#### b) Aligning & extracting the necessary structures\n", + "\n", + "Next we align all the models back to the reference structure. We then extract all the ligands and the protein atoms from the reference." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26c10e11-f001-44e5-87a4-2939ead048a8", + "metadata": {}, + "outputs": [], + "source": [ + "reference_pdb = pathlib.Path(of_results_root, largest_ligand, \"seed_42\", f\"{largest_ligand}_seed_42_sample_1_model.pdb\")\n", + "other_pdbs = of_results_root.glob(\"*/*/*_seed_42_sample_1_model.pdb\")\n", + "output_dir = pathlib.Path(\"openfold_to_openfe/p_aligned/\")\n", + "output_dir.mkdir(exist_ok=True)\n", + "\n", + "ref = mda.Universe(reference_pdb)\n", + "for pdb in other_pdbs:\n", + " print(f\"Aligning {pdb.name} to {reference_pdb.name}\")\n", + " ligand = pdb.name.split('_seed')[0]\n", + " mob = mda.Universe(pdb)\n", + "\n", + " # Align mobile → reference using protein backbone\n", + " ref_prot = ref.select_atoms(\"protein and backbone\")\n", + " mob_prot = mob.select_atoms(\"protein and backbone\")\n", + " \n", + " # Perform alignment in-place\n", + " align.alignto(mob_prot, ref_prot)\n", + " aligned_ligand = mob.select_atoms(\"resname LIG\")\n", + " aligned_ligand.write(f'{output_dir}/{ligand}.pdb')\n", + " # load back into rdkit to add hydrogens\n", + " rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand}.pdb', removeHs=True)\n", + " # use the template to assign bond orders\n", + " template_mol = Chem.MolFromSmiles(ligands_dict[ligand])\n", + " with rdBase.BlockLogs(): \n", + " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", + " # Add hydrogens\n", + " rdkit_mol = AllChem.AddHs(rdkit_mol, addCoords=True)\n", + " # Set the molecule name\n", + " rdkit_mol.SetProp('_Name', f\"{ligand}\")\n", + " # write to sdf\n", + " Chem.MolToMolFile(rdkit_mol, output_dir / f\"{ligand}_prepped.sdf\")\n", + "\n", + " # For the reference pdb, save the protein alone\n", + " if pdb.name.split('_seed')[0] == largest_ligand:\n", + " full_protein = mob.select_atoms(\"protein\")\n", + " full_protein.write(f'{output_dir}/protein.pdb')" + ] + }, + { + "cell_type": "markdown", + "id": "fe3ca792-4615-4be3-8a41-feb0819e968d", + "metadata": {}, + "source": [ + "
\n", + "⚠️ Important Note:\n", + "

\n", + " Here simply we assign ligand protonation states to those we defined at the start of this exercise. Additionally, below we will assign protein protonation states using PDBFixer at pH 7 without accounting for the ligand.

\n", + " In practice more care would be taken when protonating the complexes, using more complex tools such as Maestro or OpenEye's Spruce. For example, ligand protonation states may change depending on the chemical environment they are bound to.\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, "id": "31d18f6d-b938-4de3-9b2f-3c6e9bedd827", "metadata": {}, "outputs": [], @@ -815,7 +799,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "b5186710-f89e-4c86-998f-4e9fe076a2d8", "metadata": {}, "outputs": [], @@ -837,42 +821,10 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "c8db1e94-c146-4daf-bdb2-4383b4fcd0d6", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:kartograf.atom_mapper:#################################\n", - "INFO:kartograf.atom_mapper:Map Heavy Atoms \n", - "INFO:kartograf.atom_mapper:#################################\n", - "INFO:kartograf.atom_mapper:Masking Atoms\n", - "INFO:kartograf.atom_mapper:Build Distance Matrix\n", - "INFO:kartograf.atom_mapper:Calculate Mapping\n", - "INFO:kartograf.atom_mapper:Find Maximal overlapping connected sets of mapped atoms\n", - "INFO:kartograf.atom_mapper:#################################\n", - "INFO:kartograf.atom_mapper:Map Hydrogen Atoms: \n", - "INFO:kartograf.atom_mapper:#################################\n", - "INFO:kartograf.atom_mapper:Masking Atoms\n", - "INFO:kartograf.atom_mapper:Build Distance Matrix\n", - "INFO:kartograf.atom_mapper:Calculate Mapping\n", - "INFO:kartograf.atom_mapper:Find Maximal overlapping connected sets of mapped atoms\n", - "INFO:kartograf.atom_mapper:Filtering bond breaks\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from kartograf import KartografAtomMapper\n", "\n", @@ -891,7 +843,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "7d3c436c-fd93-4a3e-9933-e43b00783931", "metadata": {}, "outputs": [], @@ -915,7 +867,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "b161b5b6-7718-4a47-b834-e3d88082bb31", "metadata": {}, "outputs": [], @@ -945,7 +897,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "3bbd3d6d-35f0-490f-8fdd-4debc7874e23", "metadata": {}, "outputs": [], @@ -975,7 +927,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "8b374e77-64fb-48a1-b9ae-9b1dba74ebb5", "metadata": {}, "outputs": [], From 96b8b76e28691729a92761caddbb20ef679d5585 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Thu, 30 Apr 2026 14:42:34 -0700 Subject: [PATCH 03/15] adjusting ordering logic --- cookbook/openfold3_to_openfe.ipynb | 511 +++++++++++++++++++++-------- 1 file changed, 368 insertions(+), 143 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index 815584e..999264d 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -226,25 +226,7 @@ "metadata": {}, "source": [ "We will demonstrate how to use OpenFold generated structures with three different OpenFE protocols:\n", - "\n", - "a) Absolute Binding Free Energy\n", - "\n", - "b) Separated Topologies\n", - "\n", - "c) Hybrid Topology\n" - ] - }, - { - "cell_type": "markdown", - "id": "48d2bae8-79d2-41d9-a3eb-61d6c2c25924", - "metadata": {}, - "source": [ - "### Creating OpenFE components from the inputs\n", - "\n", - "Now we can create OpenFE components from the files we prepared above.\n", - "#### Loading ligands and assigning partial charges\n", - "\n", - "First we load the ligands and assign partial charges to them using OpenFF's NAGL model." + "Absolute Binding Free Energy (ABFE), Separated Topologies RBFE, and Hybrid Topology RBFE.\n" ] }, { @@ -252,7 +234,7 @@ "id": "6419b4ec-6513-47ca-bb66-0eb17a7224c3", "metadata": {}, "source": [ - "### 2a) Absolute Binding Free Energy (ABFE) Transformation\n", + "### Creating an Absolute Binding Free Energy (ABFE) Transformation\n", "\n", "The ABFE protocol requires the least amount of post-processing of the OpenFold outputs.\n", "\n", @@ -269,7 +251,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "id": "09725e7d-b959-4221-b027-1488b6fea22a", "metadata": {}, "outputs": [], @@ -282,7 +264,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", "metadata": {}, "outputs": [ @@ -290,7 +272,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.57it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.68it/s]\n" ] } ], @@ -324,7 +306,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "id": "ea82c47d-9794-424c-8d27-a9c6e69d29e8", "metadata": {}, "outputs": [ @@ -332,7 +314,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=37394) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=39178) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -352,7 +334,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", "metadata": { "scrolled": true @@ -364,7 +346,7 @@ "ProteinComponent(name=tyk2)" ] }, - "execution_count": 9, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -384,7 +366,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "id": "30373ee0-d777-4828-b89a-5a8fdbc56c41", "metadata": {}, "outputs": [ @@ -394,7 +376,7 @@ "SolventComponent(name=O, Na+, Cl-)" ] }, - "execution_count": 10, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -409,7 +391,7 @@ "id": "e1ef09d2-ec8b-4577-8510-c67cb89fc5b5", "metadata": {}, "source": [ - "#### Creating the ``Transformation``" + "#### Creating the ABFE ``Transformation``" ] }, { @@ -422,7 +404,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "987a1657-82d0-4310-9fe7-4eecd289632a", "metadata": {}, "outputs": [ @@ -467,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "id": "037cb959-8f0c-4a09-844a-30e39590eabf", "metadata": {}, "outputs": [], @@ -489,7 +471,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "id": "ef7a9ebf-e0d7-4dda-aac5-d4428b120814", "metadata": {}, "outputs": [], @@ -511,12 +493,287 @@ "This transformation can now be run using `openfe quickrun`." ] }, + { + "cell_type": "markdown", + "id": "df8cb66d-c201-4a22-b87a-a1e5501d4be4", + "metadata": {}, + "source": [ + "### Preparing OpenFold outputs for Relative Binding Free Energies" + ] + }, + { + "cell_type": "markdown", + "id": "9dd96548-7190-4851-b1ed-fb2d8c1bd87b", + "metadata": {}, + "source": [ + "RBFE transformations require additional preparation, including:\n", + "\n", + "a) Choosing a reference protein structure which will be used for all binding affinity predictions\n", + "\n", + " - This is necessary for RBFE simulations, where a single structure must be kept constant throughout the transformations. Note that for ABFE simulations, this step can be avoided.\n", + " - For the sake of this demonstration, we will be choosing the predicted structure that is bound to the ligand occupying the largest volume. The idea here being that hopefully the binding site of that structure can accomodate all the other ligands. We note that in practice this is not always true.\n", + "\n", + "b) Aligning the structures to the reference & extracting the necessary structures\n", + "\n", + " - This is so that we can extract the ligands and use them with the chosen structure.\n", + "\n", + "c) Fixing & protonating the reference protein structure, as we did above for the ABFE protein structure.\n" + ] + }, + { + "cell_type": "markdown", + "id": "02a82dbd-5a01-43c5-af33-654b706a5721", + "metadata": {}, + "source": [ + "\n", + "#### a) Choosing a reference protein structure\n", + "\n", + "As mentioned above, we will select a reference protein structure for all simulations going forward. To do this, we naively select the structure bound to a ligand with the largest volume.\n", + "\n", + "Here we load in all the structures into MDAnalysis, extract the ligands into RDKit molecules using their initial SMILES definitions as bond/formal charge templates, and then get the ligand with the largest volume using the `Asphericity` 3D descriptor." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "c7b239c1-eaf3-466e-84ef-0700eab300e6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extracting ligand from lig_ejm_50_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_jmc_23_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_43_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_42_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_31_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_47_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_46_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_48_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_jmc_28_seed_42_sample_1_model.pdb\n", + "\n", + "Largest ligand is lig_jmc_27 with volume 0.5209626577896912\n" + ] + } + ], + "source": [ + "import pathlib\n", + "import MDAnalysis as mda\n", + "from MDAnalysis.analysis import align\n", + "from rdkit import Chem, rdBase\n", + "from rdkit.Chem import AllChem\n", + "from rdkit.Chem.Descriptors3D import Asphericity\n", + "import warnings\n", + "\n", + "# don't show warnings that are expected and not an issue\n", + "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") \n", + "\n", + "# gather all the complexes and align to a single structure\n", + "# which has the largest ligand by volume \n", + "of_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", + "output_root = pathlib.Path(\"openfold_to_openfe\")\n", + "temp_dir = pathlib.Path(output_root,\"temp_ligands\")\n", + "temp_dir.mkdir(exist_ok=True,parents=True)\n", + "# load all the output pdbs and calculate ligand volumes\n", + "ligand_volumes = {}\n", + "\n", + "for output_file in of_results_root.glob(\"*/*/*.pdb\"):\n", + " ligand_name = output_file.name.split('_seed')[0]\n", + " print(f\"Extracting ligand from {output_file.name}\")\n", + " with warnings.catch_warnings(): \n", + " warnings.simplefilter(\"ignore\")\n", + " u = mda.Universe(str(output_file))\n", + " ligand = u.select_atoms(\"resname LIG\")\n", + " # write the ligand to a temporary file\n", + " ligand.write(str(temp_dir / f\"{ligand_name}.pdb\"))\n", + " # now load back with rdkit\n", + " rdkit_mol = Chem.MolFromPDBFile(str(temp_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", + " # now use a template from the SMILES definitions to make sure the bond orders are correct\n", + " template_mol = Chem.MolFromSmiles(ligands_dict[ligand_name])\n", + " # don't show rdkit's \"WARNING: More than one matching pattern found - picking one\" for every ligand\n", + " with rdBase.BlockLogs(): \n", + " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", + " # calculate the volume\n", + " vsa = Asphericity(rdkit_mol)\n", + " ligand_volumes[ligand_name] = vsa\n", + "\n", + "# find the ligand with the largest volume\n", + "largest_ligand = max(ligand_volumes, key=ligand_volumes.get)\n", + "print(f\"\\nLargest ligand is {largest_ligand} with volume {ligand_volumes[largest_ligand]}\")" + ] + }, + { + "cell_type": "markdown", + "id": "193dc76a-6e43-4e25-8b9d-5c0e4a79c3e9", + "metadata": {}, + "source": [ + "#### b) Aligning & extracting the necessary structures\n", + "\n", + "Next we align all the models back to the reference structure. We then extract all the ligands and the protein atoms from the reference." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "26c10e11-f001-44e5-87a4-2939ead048a8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Aligning lig_ejm_50_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Aligning lig_jmc_23_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Aligning lig_ejm_43_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Aligning lig_ejm_42_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Aligning lig_ejm_31_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Aligning lig_ejm_47_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Aligning lig_jmc_27_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Aligning lig_ejm_46_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Aligning lig_ejm_48_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Aligning lig_jmc_28_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n" + ] + } + ], + "source": [ + "reference_pdb = pathlib.Path(of_results_root, largest_ligand, \"seed_42\", f\"{largest_ligand}_seed_42_sample_1_model.pdb\")\n", + "other_pdbs = of_results_root.glob(\"*/*/*_seed_42_sample_1_model.pdb\")\n", + "output_dir = pathlib.Path(\"openfold_to_openfe/p_aligned/\")\n", + "output_dir.mkdir(exist_ok=True)\n", + "\n", + "ref = mda.Universe(reference_pdb)\n", + "for pdb in other_pdbs:\n", + " print(f\"Aligning {pdb.name} to {reference_pdb.name}\")\n", + " ligand = pdb.name.split('_seed')[0]\n", + " mob = mda.Universe(pdb)\n", + "\n", + " # Align mobile → reference using protein backbone\n", + " ref_prot = ref.select_atoms(\"protein and backbone\")\n", + " mob_prot = mob.select_atoms(\"protein and backbone\")\n", + " \n", + " # Perform alignment in-place\n", + " align.alignto(mob_prot, ref_prot)\n", + " aligned_ligand = mob.select_atoms(\"resname LIG\")\n", + " aligned_ligand.write(f'{output_dir}/{ligand}.pdb')\n", + " # load back into rdkit to add hydrogens\n", + " rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand}.pdb', removeHs=True)\n", + " # use the template to assign bond orders\n", + " template_mol = Chem.MolFromSmiles(ligands_dict[ligand])\n", + " with rdBase.BlockLogs(): \n", + " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", + " # Add hydrogens\n", + " rdkit_mol = AllChem.AddHs(rdkit_mol, addCoords=True)\n", + " # Set the molecule name\n", + " rdkit_mol.SetProp('_Name', f\"{ligand}\")\n", + " # write to sdf\n", + " Chem.MolToMolFile(rdkit_mol, output_dir / f\"{ligand}_prepped.sdf\")\n", + "\n", + " # For the reference pdb, save the protein alone\n", + " if pdb.name.split('_seed')[0] == largest_ligand:\n", + " full_protein = mob.select_atoms(\"protein\")\n", + " full_protein.write(f'{output_dir}/protein.pdb')" + ] + }, + { + "cell_type": "markdown", + "id": "e5b5141e-efe0-4bea-89e9-4896c00f4311", + "metadata": {}, + "source": [ + "
\n", + "⚠️ Important Note:\n", + "

\n", + " Here simply we assign ligand protonation states to those we defined at the start of this exercise. Additionally, below we will assign protein protonation states using PDBFixer at pH 7 without accounting for the ligand.

\n", + " In practice more care would be taken when protonating the complexes, using more complex tools such as Maestro or OpenEye's Spruce. For example, ligand protonation states may change depending on the chemical environment they are bound to.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "6bf56d93-222a-4651-b8cf-f451f0360878", + "metadata": {}, + "source": [ + "#### c) Fixing & protonating the reference protein structure\n", + "\n", + "The PDB contains the heavy atoms of the protein but is missing hydrogens and caps. Here we call PDBFixer to add hydrogens at pH 7 and add protein caps." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "fdfd428e-42af-49d3-9857-7a1b086f9ab2", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=39178) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + " pid, fd = os.forkpty()\n" + ] + } + ], + "source": [ + "# now run the reference protein through pdbfixer\n", + "! pdbfixer openfold_to_openfe/p_aligned/protein.pdb --add-atoms=all --add-residues --output=openfold_to_openfe/p_aligned/protein_fixed.pdb" + ] + }, + { + "cell_type": "markdown", + "id": "1153dbd0-998a-4f3f-8e47-a950c806d1dd", + "metadata": {}, + "source": [ + "#### d) Loading and assigning partial charges to the aligned ligands" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "992d53f3-d086-4283-9d6a-055be01588ad", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.86it/s]\n" + ] + } + ], + "source": [ + "import glob\n", + "import openfe\n", + "from openfe.protocols.openmm_utils.omm_settings import OpenFFPartialChargeSettings\n", + "from openfe.protocols.openmm_utils.charge_generation import bulk_assign_partial_charges\n", + "\n", + "# Load all the ligands\n", + "ligand_sdfs = glob.glob('openfold_to_openfe/p_aligned/*_prepped.sdf')\n", + "ligands = []\n", + "for l in ligand_sdfs:\n", + " ligand = openfe.SmallMoleculeComponent.from_sdf_file(l)\n", + " ligands.append(ligand)\n", + "\n", + "# Generate partial charges\n", + "charge_settings = OpenFFPartialChargeSettings(partial_charge_method=\"nagl\")\n", + "\n", + "charged_ligands = bulk_assign_partial_charges(\n", + " molecules=ligands,\n", + " overwrite=False,\n", + " method=charge_settings.partial_charge_method,\n", + " toolkit_backend=charge_settings.off_toolkit_backend,\n", + " generate_n_conformers=1,\n", + " nagl_model=None,\n", + " processors=1\n", + ")" + ] + }, { "cell_type": "markdown", "id": "cc023ddb-d32a-4f78-bea1-a4f9efddf902", "metadata": {}, "source": [ - "### 2b) Separated Topologies RBFE Transformation" + "### Creating a Separated Topologies RBFE Transformation" ] }, { @@ -524,12 +781,12 @@ "id": "a90d2205-1c68-4349-95b1-e20f607d4a86", "metadata": {}, "source": [ - "We can instead build a SepTop RBFE Transformation. Here we will do the transformation between `lig_jmc_27` and `lig_ejm_46`." + "We can now SepTop RBFE Transformation. Here we will do the transformation between `lig_jmc_27` and `lig_ejm_46`." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "7ad01abd-097c-466d-9a3f-74a67e4d9015", "metadata": {}, "outputs": [], @@ -540,7 +797,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "71d4ff18-a837-443d-bc02-69554e7d76cf", "metadata": {}, "outputs": [], @@ -572,7 +829,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "3e343c11-b693-4700-b1ea-2fa7951afa88", "metadata": {}, "outputs": [], @@ -586,7 +843,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "a531a0cb-3eda-4d25-89d8-347f470d40ea", "metadata": {}, "outputs": [], @@ -613,7 +870,7 @@ "id": "6e16e781-c6dc-4a62-85a7-0bc59678e916", "metadata": {}, "source": [ - "### 2c) Creating a Hybrid Topology Relative Binding Free Energy Transformation\n", + "### Creating a Hybrid Topology Relative Binding Free Energy Transformation\n", "\n", "Finally we create a Hybrid Topology RBFE Transformation. Again, as per the SepTop example above, we will do the transformation between `lig_jmc_27` and `lig_ejm_46`." ] @@ -622,37 +879,33 @@ "cell_type": "markdown", "id": "eaf920be-9e16-402b-9fc5-8e1d4f3712cf", "metadata": {}, - "source": [ - "### Preparing & extracting the structures\n", - "\n", - "Now that we have a set of predicted structures, we must extract the relevant information from the PDB files.\n", - "This means:\n", - "\n", - "a) Choosing a reference protein structure which will be used for all binding affinity predictions\n", - "\n", - " - This is necessary for RBFE simulations, where a single structure must be kept constant throughout the transformations. Note that for ABFE simulations, this step can be avoided.\n", - " - For the sake of this demonstration, we will be choosing the predicted structure that is bound to the ligand occupying the largest volume. The idea here being that hopefully the binding site of that structure can accomodate all the other ligands. We note that in practice this is not always true.\n", - "\n", - "b) Aligning the structures to the reference & extracting the necessary structures\n", - "\n", - " - This is so that we can extract the ligands and use them with the chosen structure.\n", - "\n", - "c) Fixing & protonating the reference protein structure.\n", - "\n", - "\n", - "#### a) Choosing a reference protein structure\n", - "\n", - "As mentioned above, we will select a reference protein structure for all simulations going forward. To do this, we naively select the structure bound to a ligand with the largest volume.\n", - "\n", - "Here we load in all the structures into MDAnalysis, extract the ligands into RDKit molecules using their initial SMILES definitions as bond/formal charge templates, and then get the ligand with the largest volume using the `Asphericity` 3D descriptor." - ] + "source": [] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extracting ligand from lig_ejm_50_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_jmc_23_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_43_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_42_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_31_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_47_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_46_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_ejm_48_seed_42_sample_1_model.pdb\n", + "Extracting ligand from lig_jmc_28_seed_42_sample_1_model.pdb\n", + "\n", + "Largest ligand is lig_jmc_27 with volume 0.5209626577896912\n" + ] + } + ], "source": [ "import pathlib\n", "import MDAnalysis as mda\n", @@ -699,77 +952,9 @@ "print(f\"\\nLargest ligand is {largest_ligand} with volume {ligand_volumes[largest_ligand]}\")" ] }, - { - "cell_type": "markdown", - "id": "6056e755-0da0-4712-b4ae-7a721c94851d", - "metadata": {}, - "source": [ - "#### b) Aligning & extracting the necessary structures\n", - "\n", - "Next we align all the models back to the reference structure. We then extract all the ligands and the protein atoms from the reference." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "26c10e11-f001-44e5-87a4-2939ead048a8", - "metadata": {}, - "outputs": [], - "source": [ - "reference_pdb = pathlib.Path(of_results_root, largest_ligand, \"seed_42\", f\"{largest_ligand}_seed_42_sample_1_model.pdb\")\n", - "other_pdbs = of_results_root.glob(\"*/*/*_seed_42_sample_1_model.pdb\")\n", - "output_dir = pathlib.Path(\"openfold_to_openfe/p_aligned/\")\n", - "output_dir.mkdir(exist_ok=True)\n", - "\n", - "ref = mda.Universe(reference_pdb)\n", - "for pdb in other_pdbs:\n", - " print(f\"Aligning {pdb.name} to {reference_pdb.name}\")\n", - " ligand = pdb.name.split('_seed')[0]\n", - " mob = mda.Universe(pdb)\n", - "\n", - " # Align mobile → reference using protein backbone\n", - " ref_prot = ref.select_atoms(\"protein and backbone\")\n", - " mob_prot = mob.select_atoms(\"protein and backbone\")\n", - " \n", - " # Perform alignment in-place\n", - " align.alignto(mob_prot, ref_prot)\n", - " aligned_ligand = mob.select_atoms(\"resname LIG\")\n", - " aligned_ligand.write(f'{output_dir}/{ligand}.pdb')\n", - " # load back into rdkit to add hydrogens\n", - " rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand}.pdb', removeHs=True)\n", - " # use the template to assign bond orders\n", - " template_mol = Chem.MolFromSmiles(ligands_dict[ligand])\n", - " with rdBase.BlockLogs(): \n", - " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", - " # Add hydrogens\n", - " rdkit_mol = AllChem.AddHs(rdkit_mol, addCoords=True)\n", - " # Set the molecule name\n", - " rdkit_mol.SetProp('_Name', f\"{ligand}\")\n", - " # write to sdf\n", - " Chem.MolToMolFile(rdkit_mol, output_dir / f\"{ligand}_prepped.sdf\")\n", - "\n", - " # For the reference pdb, save the protein alone\n", - " if pdb.name.split('_seed')[0] == largest_ligand:\n", - " full_protein = mob.select_atoms(\"protein\")\n", - " full_protein.write(f'{output_dir}/protein.pdb')" - ] - }, - { - "cell_type": "markdown", - "id": "fe3ca792-4615-4be3-8a41-feb0819e968d", - "metadata": {}, - "source": [ - "
\n", - "⚠️ Important Note:\n", - "

\n", - " Here simply we assign ligand protonation states to those we defined at the start of this exercise. Additionally, below we will assign protein protonation states using PDBFixer at pH 7 without accounting for the ligand.

\n", - " In practice more care would be taken when protonating the complexes, using more complex tools such as Maestro or OpenEye's Spruce. For example, ligand protonation states may change depending on the chemical environment they are bound to.\n", - "
" - ] - }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "31d18f6d-b938-4de3-9b2f-3c6e9bedd827", "metadata": {}, "outputs": [], @@ -799,7 +984,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "b5186710-f89e-4c86-998f-4e9fe076a2d8", "metadata": {}, "outputs": [], @@ -821,10 +1006,42 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "id": "c8db1e94-c146-4daf-bdb2-4383b4fcd0d6", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:kartograf.atom_mapper:#################################\n", + "INFO:kartograf.atom_mapper:Map Heavy Atoms \n", + "INFO:kartograf.atom_mapper:#################################\n", + "INFO:kartograf.atom_mapper:Masking Atoms\n", + "INFO:kartograf.atom_mapper:Build Distance Matrix\n", + "INFO:kartograf.atom_mapper:Calculate Mapping\n", + "INFO:kartograf.atom_mapper:Find Maximal overlapping connected sets of mapped atoms\n", + "INFO:kartograf.atom_mapper:#################################\n", + "INFO:kartograf.atom_mapper:Map Hydrogen Atoms: \n", + "INFO:kartograf.atom_mapper:#################################\n", + "INFO:kartograf.atom_mapper:Masking Atoms\n", + "INFO:kartograf.atom_mapper:Build Distance Matrix\n", + "INFO:kartograf.atom_mapper:Calculate Mapping\n", + "INFO:kartograf.atom_mapper:Find Maximal overlapping connected sets of mapped atoms\n", + "INFO:kartograf.atom_mapper:Filtering bond breaks\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "from kartograf import KartografAtomMapper\n", "\n", @@ -843,7 +1060,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "id": "7d3c436c-fd93-4a3e-9933-e43b00783931", "metadata": {}, "outputs": [], @@ -867,7 +1084,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "id": "b161b5b6-7718-4a47-b834-e3d88082bb31", "metadata": {}, "outputs": [], @@ -897,7 +1114,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "id": "3bbd3d6d-35f0-490f-8fdd-4debc7874e23", "metadata": {}, "outputs": [], @@ -927,7 +1144,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "id": "8b374e77-64fb-48a1-b9ae-9b1dba74ebb5", "metadata": {}, "outputs": [], @@ -962,11 +1179,19 @@ "id": "6cae5156-f80f-4520-baee-4199774d441a", "metadata": {}, "source": [ - "## 5. Creating networks and running the simulations\n", + "## 5. Running the ``Transformation`` simulations\n", "\n", "In practice, one would create entire network of Transformations, and then run all the simulations.\n", "This notebook will not cover these aspects. To find out more about this, please see the [OpenFE Tutorials](https://docs.openfree.energy/en/latest/tutorials/index.html)." ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f09a0d21-c0d3-4c39-9c9d-b0b1d61be2ae", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From 9c1bd177a2c983791172fa9c7d1bb54f24135bce Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Fri, 1 May 2026 18:26:42 -0700 Subject: [PATCH 04/15] add example portal image --- .../tyk2_lig_ejm_31_openfold_portal.png | Bin 0 -> 187526 bytes cookbook/openfold3_to_openfe.ipynb | 56 ++++++++++++++++-- 2 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 cookbook/assets/tyk2_lig_ejm_31_openfold_portal.png diff --git a/cookbook/assets/tyk2_lig_ejm_31_openfold_portal.png b/cookbook/assets/tyk2_lig_ejm_31_openfold_portal.png new file mode 100644 index 0000000000000000000000000000000000000000..7527e1487a526f29cd243afeefc943a57a329b6a GIT binary patch literal 187526 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%0Ad(M1{Ze=VV2ot*qV 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 literal 0 HcmV?d00001 diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index 999264d..932bfbe 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -17,7 +17,7 @@ "source": [ "## Introduction\n", "\n", - "This notebook offers a brief preview of some of the steps you may need to go through to calculate binding affinities using [OpenFE](https://docs.openfree.energy/en/latest/) with [OpenFold3](https://openfold-3.readthedocs.io/en/latest/) generated structures.\n", + "Here we show a brief preview of some of the steps you may need to go through to calculate binding affinities using [OpenFE](https://docs.openfree.energy/en/latest/) with [OpenFold3](https://openfold-3.readthedocs.io/en/latest/) generated structures.\n", "\n", "Notably, we will demonstrate how to generate a set of predictions, clean them up for use in molecular dynamics simulations, and then apply them to both relative binding free energy (RBFE) and absolute binding free energy (ABFE) methods." ] @@ -33,6 +33,42 @@ "" ] }, + { + "cell_type": "markdown", + "id": "f0d1c067-d461-4a28-b154-396f1517161b", + "metadata": {}, + "source": [ + "## Overview\n", + "\n", + "In this example notebook we demonstrate how to predict and run simulations for different ligands bound to tyrosine kinase 2 (TYK2). The dataset comes from the [Wang et al. JACS 2015 dataset](https://pubs.acs.org/doi/10.1021/ja512751q).\n", + "\n", + "
\n", + "\n", + "\n", + "**The tutorial is broken into the following steps:**\n", + "\n", + "1. Running cofolding with OpenFold3 on a set of TYK2 ligands\n", + "\n", + "2. Processing the OpenFold3 output for use with OpenFE\n", + "\n", + " a) Choosing a reference protein structure\n", + "\n", + " b) Aligning & extracting the necessary ligands & protein structures.\n", + "\n", + " c) Fixing & protonating the reference protein structure.\n", + "\n", + "\n", + "3. Loading structures into OpenFE Components\n", + "\n", + "4. Creating a free energy transformation with 3 protocol options\n", + "\n", + " a) Absolute Binding Free Energy Transformation\n", + "\n", + " b) SepTop Relative Binding Free Energy Transformation\n", + "\n", + " c) Hybrid Topology Relative Binding Free Energy Transformation" + ] + }, { "cell_type": "markdown", "id": "2fea29c3", @@ -206,6 +242,16 @@ "\n", "confidence scores for each ligand are at ``assets/of3_tyk2_output/{lig_name}/seed_42/*confidences.json``\n", "\n", + "If you are using the OpenFold portal, you can view the confidence scores interactively:\n", + "\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "id": "9481baf0-9f31-41f2-acf2-ec9b62552345", + "metadata": {}, + "source": [ "
\n", "⚠️ Important Note:\n", " Here we use the first model for each complex predicted by OpenFold3. In practice you would filter through all predicted models using confidence scores, and possibly using pose busters (github.com/maabuu/posebusters).\n", @@ -272,7 +318,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.68it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.49it/s]\n" ] } ], @@ -314,7 +360,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=39178) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=74212) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -709,7 +755,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=39178) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=74212) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -737,7 +783,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.86it/s]\n" + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.83it/s]\n" ] } ], From 23acdb67d5380963abb2a9f93b2dd51b99a92954 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Mon, 4 May 2026 09:32:40 +0200 Subject: [PATCH 05/15] add images --- cookbook/assets/abfe-cycle.png | 1 + cookbook/assets/rbfe-cycle.png | Bin 0 -> 134741 bytes cookbook/assets/septop_cycle.png | 1 + cookbook/openfold3_to_openfe.ipynb | 160 +++++++++++++++++------------ 4 files changed, 97 insertions(+), 65 deletions(-) create mode 120000 cookbook/assets/abfe-cycle.png create mode 100644 cookbook/assets/rbfe-cycle.png create mode 120000 cookbook/assets/septop_cycle.png diff --git a/cookbook/assets/abfe-cycle.png b/cookbook/assets/abfe-cycle.png new file mode 120000 index 0000000..c23d1d8 --- /dev/null +++ b/cookbook/assets/abfe-cycle.png @@ -0,0 +1 @@ +../../abfe_tutorial/abfe-cycle.png \ No newline at end of file diff --git a/cookbook/assets/rbfe-cycle.png b/cookbook/assets/rbfe-cycle.png new file mode 100644 index 0000000000000000000000000000000000000000..4c518d20fce1d5ae21df54518dcbc2e841351776 GIT binary patch literal 134741 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�MeA|G1M>c$JZ3GqaK>j{1w|hCJjz{C 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 wBOwoT|WyHWFTmF`$#C;!P{-M`r>SJ| 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

Hs%km5 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 a?G}wV{Ce>dKpeXV{K-qJNL5G}2me3zQi?+W literal 0 HcmV?d00001 diff --git a/cookbook/assets/septop_cycle.png b/cookbook/assets/septop_cycle.png new file mode 120000 index 0000000..49442dd --- /dev/null +++ b/cookbook/assets/septop_cycle.png @@ -0,0 +1 @@ +../../openmm_septop/septop_cycle.png \ No newline at end of file diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index 932bfbe..eeee630 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -42,31 +42,7 @@ "\n", "In this example notebook we demonstrate how to predict and run simulations for different ligands bound to tyrosine kinase 2 (TYK2). The dataset comes from the [Wang et al. JACS 2015 dataset](https://pubs.acs.org/doi/10.1021/ja512751q).\n", "\n", - "

\n", - "\n", - "\n", - "**The tutorial is broken into the following steps:**\n", - "\n", - "1. Running cofolding with OpenFold3 on a set of TYK2 ligands\n", - "\n", - "2. Processing the OpenFold3 output for use with OpenFE\n", - "\n", - " a) Choosing a reference protein structure\n", - "\n", - " b) Aligning & extracting the necessary ligands & protein structures.\n", - "\n", - " c) Fixing & protonating the reference protein structure.\n", - "\n", - "\n", - "3. Loading structures into OpenFE Components\n", - "\n", - "4. Creating a free energy transformation with 3 protocol options\n", - "\n", - " a) Absolute Binding Free Energy Transformation\n", - "\n", - " b) SepTop Relative Binding Free Energy Transformation\n", - "\n", - " c) Hybrid Topology Relative Binding Free Energy Transformation" + "
\n" ] }, { @@ -242,7 +218,7 @@ "\n", "confidence scores for each ligand are at ``assets/of3_tyk2_output/{lig_name}/seed_42/*confidences.json``\n", "\n", - "If you are using the OpenFold portal, you can view the confidence scores interactively:\n", + "If you are using the OpenFold portal, you can view the confidence scores interactively, where darker regions have higher confidence scores:\n", "\n", "
\n" ] @@ -280,8 +256,22 @@ "id": "6419b4ec-6513-47ca-bb66-0eb17a7224c3", "metadata": {}, "source": [ - "### Creating an Absolute Binding Free Energy (ABFE) Transformation\n", - "\n", + "### Creating an Absolute Binding Free Energy (ABFE) Transformation" + ] + }, + { + "cell_type": "markdown", + "id": "fd51d74c-5cdf-445a-8a89-7ff365bc1e1c", + "metadata": {}, + "source": [ + "
\n" + ] + }, + { + "cell_type": "markdown", + "id": "d34aab3e-8275-46ab-abc6-2a588224d889", + "metadata": {}, + "source": [ "The ABFE protocol requires the least amount of post-processing of the OpenFold outputs.\n", "\n", "For the sake of simplicity, we will only create a Transformation for `lig_jmc_27`, but this process is generalizable to the rest of the ligands in the series.\n" @@ -292,7 +282,9 @@ "id": "cdeee4e3-ce8c-4151-9ef7-5a6017ac3dcb", "metadata": {}, "source": [ - "#### Loading and assigning partial charges to the ligand(s)" + "#### Loading and assigning partial charges to the ligand(s)\n", + "\n", + "Load the ligands as openfe `SmallMoleculeComponent`s so that they can be understood by the OpenFE ecosystem. " ] }, { @@ -303,14 +295,40 @@ "outputs": [], "source": [ "import openfe\n", + "\n", "supp = Chem.SDMolSupplier(\"assets/tyk2_ligands.sdf\", removeHs=False)\n", - "all_ligands = [openfe.SmallMoleculeComponent.from_rdkit(mol) for mol in supp]\n", - "ligand = [lig for lig in all_ligands if lig.name == 'lig_jmc_27'][0]" + "all_ligands = [openfe.SmallMoleculeComponent.from_rdkit(mol) for mol in supp]" + ] + }, + { + "cell_type": "markdown", + "id": "257a7370-9c10-4cef-96f2-d4ae411c6222", + "metadata": {}, + "source": [ + "Choose one ligand for demonstration" ] }, { "cell_type": "code", "execution_count": 5, + "id": "b6f6fe49-08c2-462d-87ed-55f468dca669", + "metadata": {}, + "outputs": [], + "source": [ + "ligand = [lig for lig in all_ligands if lig.name == 'lig_jmc_27'][0]" + ] + }, + { + "cell_type": "markdown", + "id": "f0cd4185-3491-4bcb-9b4d-d160d84ad40e", + "metadata": {}, + "source": [ + "Assign partial charges to the ligands:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", "metadata": {}, "outputs": [ @@ -318,7 +336,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.49it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.52it/s]\n" ] } ], @@ -352,7 +370,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "ea82c47d-9794-424c-8d27-a9c6e69d29e8", "metadata": {}, "outputs": [ @@ -360,7 +378,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=74212) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=5309) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -380,11 +398,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", - "metadata": { - "scrolled": true - }, + "metadata": {}, "outputs": [ { "data": { @@ -392,7 +408,7 @@ "ProteinComponent(name=tyk2)" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -412,7 +428,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "30373ee0-d777-4828-b89a-5a8fdbc56c41", "metadata": {}, "outputs": [ @@ -422,7 +438,7 @@ "SolventComponent(name=O, Na+, Cl-)" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -450,7 +466,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "987a1657-82d0-4310-9fe7-4eecd289632a", "metadata": {}, "outputs": [ @@ -495,7 +511,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "037cb959-8f0c-4a09-844a-30e39590eabf", "metadata": {}, "outputs": [], @@ -517,7 +533,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "id": "ef7a9ebf-e0d7-4dda-aac5-d4428b120814", "metadata": {}, "outputs": [], @@ -581,7 +597,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "c7b239c1-eaf3-466e-84ef-0700eab300e6", "metadata": {}, "outputs": [ @@ -662,7 +678,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "26c10e11-f001-44e5-87a4-2939ead048a8", "metadata": {}, "outputs": [ @@ -747,7 +763,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "fdfd428e-42af-49d3-9857-7a1b086f9ab2", "metadata": {}, "outputs": [ @@ -755,7 +771,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=74212) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=5309) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -775,7 +791,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "992d53f3-d086-4283-9d6a-055be01588ad", "metadata": {}, "outputs": [ @@ -783,7 +799,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.83it/s]\n" + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.88it/s]\n" ] } ], @@ -822,6 +838,14 @@ "### Creating a Separated Topologies RBFE Transformation" ] }, + { + "cell_type": "markdown", + "id": "97f84495-88c8-49fe-987f-25ca25cdf210", + "metadata": {}, + "source": [ + "
\n" + ] + }, { "cell_type": "markdown", "id": "a90d2205-1c68-4349-95b1-e20f607d4a86", @@ -832,7 +856,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "id": "7ad01abd-097c-466d-9a3f-74a67e4d9015", "metadata": {}, "outputs": [], @@ -843,7 +867,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "71d4ff18-a837-443d-bc02-69554e7d76cf", "metadata": {}, "outputs": [], @@ -875,7 +899,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "3e343c11-b693-4700-b1ea-2fa7951afa88", "metadata": {}, "outputs": [], @@ -889,7 +913,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "id": "a531a0cb-3eda-4d25-89d8-347f470d40ea", "metadata": {}, "outputs": [], @@ -918,18 +942,24 @@ "source": [ "### Creating a Hybrid Topology Relative Binding Free Energy Transformation\n", "\n", - "Finally we create a Hybrid Topology RBFE Transformation. Again, as per the SepTop example above, we will do the transformation between `lig_jmc_27` and `lig_ejm_46`." + "
" ] }, { "cell_type": "markdown", - "id": "eaf920be-9e16-402b-9fc5-8e1d4f3712cf", + "id": "884c5615-b2d4-4dde-b949-7760733ec10a", "metadata": {}, - "source": [] + "source": [ + "Finally we create a Hybrid Topology RBFE Transformation.\n", + "\n", + "In addition to aligning the protein structures, \n", + "\n", + "Again, as per the SepTop example above, we will do the transformation between `lig_jmc_27` and `lig_ejm_46`." + ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", "metadata": {}, "outputs": [ @@ -1000,7 +1030,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "id": "31d18f6d-b938-4de3-9b2f-3c6e9bedd827", "metadata": {}, "outputs": [], @@ -1030,7 +1060,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "id": "b5186710-f89e-4c86-998f-4e9fe076a2d8", "metadata": {}, "outputs": [], @@ -1052,7 +1082,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "id": "c8db1e94-c146-4daf-bdb2-4383b4fcd0d6", "metadata": {}, "outputs": [ @@ -1106,7 +1136,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "id": "7d3c436c-fd93-4a3e-9933-e43b00783931", "metadata": {}, "outputs": [], @@ -1130,7 +1160,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "id": "b161b5b6-7718-4a47-b834-e3d88082bb31", "metadata": {}, "outputs": [], @@ -1160,7 +1190,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "id": "3bbd3d6d-35f0-490f-8fdd-4debc7874e23", "metadata": {}, "outputs": [], @@ -1190,7 +1220,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "id": "8b374e77-64fb-48a1-b9ae-9b1dba74ebb5", "metadata": {}, "outputs": [], From f6367c088c980d91c00025567673cb2068e7bea0 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Mon, 4 May 2026 10:00:02 +0200 Subject: [PATCH 06/15] add slide metadata --- cookbook/openfold3_to_openfe.ipynb | 631 +++++++++++++++++++++++++---- 1 file changed, 552 insertions(+), 79 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index eeee630..67ec59e 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -3,7 +3,13 @@ { "cell_type": "markdown", "id": "35354229", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "      \n", "\n", @@ -13,7 +19,13 @@ { "cell_type": "markdown", "id": "0d905dc8-e11b-4088-82f5-2c2cefef3973", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "## Introduction\n", "\n", @@ -25,7 +37,13 @@ { "cell_type": "markdown", "id": "ada5c811-8603-4473-8040-7fd370b4a1cf", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "
\n", "⚠️ Important Note:\n", @@ -36,7 +54,13 @@ { "cell_type": "markdown", "id": "f0d1c067-d461-4a28-b154-396f1517161b", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "## Overview\n", "\n", @@ -48,7 +72,13 @@ { "cell_type": "markdown", "id": "2fea29c3", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "## 1. Run cofolding with OpenFold3 on a set of TYK2 ligands" ] @@ -56,15 +86,33 @@ { "cell_type": "markdown", "id": "ef3bdb1f-504a-4311-8e0a-c28265b006cb", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "### Preparing the input JSON for OpenFold\n", "\n", "First we need to create an input JSON file for OpenFold. This step requires assembling two key pieces of information:\n", "\n", "- Ligand SMILES strings\n", - "- Protein sequence (extracted from the PDB file)\n", - "\n", + "- Protein sequence (extracted from the PDB file)\n" + ] + }, + { + "cell_type": "markdown", + "id": "2cfa0d3a-9eb5-4ddc-854f-b278469ae2e1", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ "In this workflow, we begin with an SDF file containing the ligands.\n", "\n", "We extract the SMILES representation for each ligand and store them in a dictionary alongside their ligand identifiers." @@ -75,7 +123,12 @@ "execution_count": 1, "id": "08962d91-a334-4c89-adf1-19be6f2bdb16", "metadata": { - "scrolled": true + "editable": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] }, "outputs": [], "source": [ @@ -97,7 +150,13 @@ "cell_type": "code", "execution_count": 2, "id": "1c55bfeb-c1bc-4af8-98da-43ff8c1de141", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "data": { @@ -126,7 +185,13 @@ { "cell_type": "markdown", "id": "80da7967-8046-44e4-aef7-c81ac6712f98", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "Next we create the JSON file that will be the OpenFold input." ] @@ -134,7 +199,13 @@ { "cell_type": "markdown", "id": "b3f0be0c-144c-4e96-9310-a8778111291c", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "
\n", " Note: In this example, we did not use the full FASTA sequence from UNIPROT for TYK2, but rather the sequence of the crystallographic structure.\n", @@ -145,7 +216,13 @@ "cell_type": "code", "execution_count": 3, "id": "25a8ba0c-311c-476e-9913-9b39611c708d", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "import json\n", @@ -180,7 +257,13 @@ { "cell_type": "markdown", "id": "a2546f36-2ca2-4793-ad4b-19b6e76574ae", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "### Running OpenFold\n", "\n", @@ -212,12 +295,30 @@ { "cell_type": "markdown", "id": "9c1ab9ee-71f5-4587-bea1-35097621c039", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "#### Evaluating OpenFold output\n", "\n", - "confidence scores for each ligand are at ``assets/of3_tyk2_output/{lig_name}/seed_42/*confidences.json``\n", - "\n", + "confidence scores for each ligand are at ``assets/of3_tyk2_output/{lig_name}/seed_42/*confidences.json``\n" + ] + }, + { + "cell_type": "markdown", + "id": "73368db9-350f-4851-922a-01469736dcc7", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ "If you are using the OpenFold portal, you can view the confidence scores interactively, where darker regions have higher confidence scores:\n", "\n", "
\n" @@ -226,7 +327,13 @@ { "cell_type": "markdown", "id": "9481baf0-9f31-41f2-acf2-ec9b62552345", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "
\n", "⚠️ Important Note:\n", @@ -237,7 +344,13 @@ { "cell_type": "markdown", "id": "721074db-8266-4c3e-b592-64220e0cfd8f", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "## 2. Running OpenFE Protocols with OpenFold structures" ] @@ -245,7 +358,13 @@ { "cell_type": "markdown", "id": "249ec515-cfad-4f49-8dba-ee2438b1adf4", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "We will demonstrate how to use OpenFold generated structures with three different OpenFE protocols:\n", "Absolute Binding Free Energy (ABFE), Separated Topologies RBFE, and Hybrid Topology RBFE.\n" @@ -254,7 +373,13 @@ { "cell_type": "markdown", "id": "6419b4ec-6513-47ca-bb66-0eb17a7224c3", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "### Creating an Absolute Binding Free Energy (ABFE) Transformation" ] @@ -262,7 +387,13 @@ { "cell_type": "markdown", "id": "fd51d74c-5cdf-445a-8a89-7ff365bc1e1c", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "source": [ "
\n" ] @@ -270,7 +401,13 @@ { "cell_type": "markdown", "id": "d34aab3e-8275-46ab-abc6-2a588224d889", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "The ABFE protocol requires the least amount of post-processing of the OpenFold outputs.\n", "\n", @@ -280,7 +417,13 @@ { "cell_type": "markdown", "id": "cdeee4e3-ce8c-4151-9ef7-5a6017ac3dcb", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "#### Loading and assigning partial charges to the ligand(s)\n", "\n", @@ -291,7 +434,13 @@ "cell_type": "code", "execution_count": 4, "id": "09725e7d-b959-4221-b027-1488b6fea22a", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "import openfe\n", @@ -321,7 +470,13 @@ { "cell_type": "markdown", "id": "f0cd4185-3491-4bcb-9b4d-d160d84ad40e", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "Assign partial charges to the ligands:" ] @@ -330,7 +485,13 @@ "cell_type": "code", "execution_count": 6, "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "name": "stderr", @@ -361,7 +522,12 @@ { "cell_type": "markdown", "id": "a84b9dfa-e92a-43fa-baae-a725778122cb", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "#### Fixing & protonating the protein structure\n", "\n", @@ -372,7 +538,14 @@ "cell_type": "code", "execution_count": 7, "id": "ea82c47d-9794-424c-8d27-a9c6e69d29e8", - "metadata": {}, + "metadata": { + "editable": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "name": "stderr", @@ -391,7 +564,13 @@ { "cell_type": "markdown", "id": "8c55d160-558f-426f-8a8c-9ae46d191cff", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "Then we can load the reference protein to a ProteinComponent." ] @@ -400,7 +579,13 @@ "cell_type": "code", "execution_count": 8, "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "data": { @@ -421,7 +606,13 @@ { "cell_type": "markdown", "id": "4d11803b-6d4b-4507-8c98-6ff40f75680e", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "We must also define a SolventComponent which we will use to define our Transformations." ] @@ -430,7 +621,13 @@ "cell_type": "code", "execution_count": 9, "id": "30373ee0-d777-4828-b89a-5a8fdbc56c41", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "data": { @@ -451,7 +648,13 @@ { "cell_type": "markdown", "id": "e1ef09d2-ec8b-4577-8510-c67cb89fc5b5", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "#### Creating the ABFE ``Transformation``" ] @@ -459,7 +662,13 @@ { "cell_type": "markdown", "id": "695c61c4-3fa6-4e1a-939f-5349e6829627", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "Create the `ChemicalSystems` defining the end states of the simulation:" ] @@ -468,7 +677,13 @@ "cell_type": "code", "execution_count": 10, "id": "987a1657-82d0-4310-9fe7-4eecd289632a", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "name": "stdout", @@ -504,7 +719,13 @@ { "cell_type": "markdown", "id": "e32fb4ef-dbf5-4a9a-90c4-b64d9e5af6ce", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "Next we create the Protocol. We use the default settings, except to help us execute in parallel we set the number of repeats to 1." ] @@ -513,7 +734,13 @@ "cell_type": "code", "execution_count": 11, "id": "037cb959-8f0c-4a09-844a-30e39590eabf", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "from openfe.protocols.openmm_afe import AbsoluteBindingProtocol\n", @@ -526,7 +753,13 @@ { "cell_type": "markdown", "id": "6bf8af4c-9894-4af3-84f8-2ed3830120ad", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "Finally we create the `Transformation` object." ] @@ -535,7 +768,13 @@ "cell_type": "code", "execution_count": 12, "id": "ef7a9ebf-e0d7-4dda-aac5-d4428b120814", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "abfe_transformation = openfe.Transformation(\n", @@ -550,7 +789,13 @@ { "cell_type": "markdown", "id": "34ec9c8d-cb7f-4cad-9794-b73629a11246", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "This transformation can now be run using `openfe quickrun`." ] @@ -558,7 +803,13 @@ { "cell_type": "markdown", "id": "df8cb66d-c201-4a22-b87a-a1e5501d4be4", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "### Preparing OpenFold outputs for Relative Binding Free Energies" ] @@ -566,7 +817,13 @@ { "cell_type": "markdown", "id": "9dd96548-7190-4851-b1ed-fb2d8c1bd87b", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "RBFE transformations require additional preparation, including:\n", "\n", @@ -585,7 +842,13 @@ { "cell_type": "markdown", "id": "02a82dbd-5a01-43c5-af33-654b706a5721", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "\n", "#### a) Choosing a reference protein structure\n", @@ -599,7 +862,13 @@ "cell_type": "code", "execution_count": 13, "id": "c7b239c1-eaf3-466e-84ef-0700eab300e6", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "name": "stdout", @@ -669,7 +938,13 @@ { "cell_type": "markdown", "id": "193dc76a-6e43-4e25-8b9d-5c0e4a79c3e9", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "#### b) Aligning & extracting the necessary structures\n", "\n", @@ -680,7 +955,13 @@ "cell_type": "code", "execution_count": 14, "id": "26c10e11-f001-44e5-87a4-2939ead048a8", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "name": "stdout", @@ -741,7 +1022,13 @@ { "cell_type": "markdown", "id": "e5b5141e-efe0-4bea-89e9-4896c00f4311", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "
\n", "⚠️ Important Note:\n", @@ -754,7 +1041,13 @@ { "cell_type": "markdown", "id": "6bf56d93-222a-4651-b8cf-f451f0360878", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "#### c) Fixing & protonating the reference protein structure\n", "\n", @@ -765,7 +1058,13 @@ "cell_type": "code", "execution_count": 15, "id": "fdfd428e-42af-49d3-9857-7a1b086f9ab2", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "name": "stderr", @@ -784,7 +1083,13 @@ { "cell_type": "markdown", "id": "1153dbd0-998a-4f3f-8e47-a950c806d1dd", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "#### d) Loading and assigning partial charges to the aligned ligands" ] @@ -793,7 +1098,13 @@ "cell_type": "code", "execution_count": 16, "id": "992d53f3-d086-4283-9d6a-055be01588ad", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "name": "stderr", @@ -833,7 +1144,13 @@ { "cell_type": "markdown", "id": "cc023ddb-d32a-4f78-bea1-a4f9efddf902", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "### Creating a Separated Topologies RBFE Transformation" ] @@ -841,7 +1158,13 @@ { "cell_type": "markdown", "id": "97f84495-88c8-49fe-987f-25ca25cdf210", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "
\n" ] @@ -849,7 +1172,13 @@ { "cell_type": "markdown", "id": "a90d2205-1c68-4349-95b1-e20f607d4a86", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "We can now SepTop RBFE Transformation. Here we will do the transformation between `lig_jmc_27` and `lig_ejm_46`." ] @@ -858,7 +1187,13 @@ "cell_type": "code", "execution_count": 17, "id": "7ad01abd-097c-466d-9a3f-74a67e4d9015", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "ligandA = [l for l in charged_ligands if l.name == 'lig_jmc_27'][0]\n", @@ -869,7 +1204,13 @@ "cell_type": "code", "execution_count": 18, "id": "71d4ff18-a837-443d-bc02-69554e7d76cf", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "# Create the two end states\n", @@ -892,7 +1233,13 @@ { "cell_type": "markdown", "id": "54484f2f-347b-498e-b5e2-60e8c8db446a", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "Next we create the Protocol. We use the default settings, except to help us execute in parallel we set the number of repeats to 1." ] @@ -901,7 +1248,13 @@ "cell_type": "code", "execution_count": 19, "id": "3e343c11-b693-4700-b1ea-2fa7951afa88", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "from openfe.protocols.openmm_septop import SepTopProtocol\n", @@ -915,7 +1268,13 @@ "cell_type": "code", "execution_count": 20, "id": "a531a0cb-3eda-4d25-89d8-347f470d40ea", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "septop_transformation = openfe.Transformation(\n", @@ -930,7 +1289,13 @@ { "cell_type": "markdown", "id": "db4344c5-c300-4b6e-aa0a-a7cae9c6380f", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "This transformation can now be run using `openfe quickrun`." ] @@ -938,7 +1303,13 @@ { "cell_type": "markdown", "id": "6e16e781-c6dc-4a62-85a7-0bc59678e916", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "### Creating a Hybrid Topology Relative Binding Free Energy Transformation\n", "\n", @@ -948,7 +1319,13 @@ { "cell_type": "markdown", "id": "884c5615-b2d4-4dde-b949-7760733ec10a", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "Finally we create a Hybrid Topology RBFE Transformation.\n", "\n", @@ -961,7 +1338,13 @@ "cell_type": "code", "execution_count": 21, "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "name": "stdout", @@ -1032,7 +1415,13 @@ "cell_type": "code", "execution_count": 22, "id": "31d18f6d-b938-4de3-9b2f-3c6e9bedd827", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "ligandA = [l for l in charged_ligands if l.name == 'lig_jmc_27'][0]\n", @@ -1042,7 +1431,13 @@ { "cell_type": "markdown", "id": "dfbf86dd-1162-4cf5-998a-2b2c01e6080c", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "Because the ligands are not guaranteed to be aligned, care must be taken to make sure that there is some core overlap between the ligands. Here we naively use the atom aligner in Kartograf to re-align the ligands." ] @@ -1050,7 +1445,13 @@ { "cell_type": "markdown", "id": "eb09cf7b-e9e9-4f98-b9a5-7f6cfc9c146b", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "
\n", "⚠️ Important Note:\n", @@ -1062,7 +1463,13 @@ "cell_type": "code", "execution_count": 23, "id": "b5186710-f89e-4c86-998f-4e9fe076a2d8", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "from kartograf.atom_aligner import align_mol_shape\n", @@ -1075,7 +1482,13 @@ { "cell_type": "markdown", "id": "d8617ab9-77c3-4103-a9fe-233262f19b74", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "With these aligned ligands, we can get a mapping between the two." ] @@ -1084,7 +1497,13 @@ "cell_type": "code", "execution_count": 24, "id": "c8db1e94-c146-4daf-bdb2-4383b4fcd0d6", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [ { "name": "stderr", @@ -1129,7 +1548,13 @@ { "cell_type": "markdown", "id": "aeb15ac9-9999-4bb9-b5e3-bda5dda01dc9", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "Next we define the end state `ChemicalSystem`s" ] @@ -1138,7 +1563,13 @@ "cell_type": "code", "execution_count": 25, "id": "7d3c436c-fd93-4a3e-9933-e43b00783931", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "# Complex transformation ChemicalSystems\n", @@ -1162,7 +1593,13 @@ "cell_type": "code", "execution_count": 26, "id": "b161b5b6-7718-4a47-b834-e3d88082bb31", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "# Solvent transformation ChemicalSystems\n", @@ -1183,7 +1620,13 @@ { "cell_type": "markdown", "id": "fe4f8dd1-ffdc-4167-97ca-a24b86002613", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "Then we create the Protocols for both the solvent and complex phases." ] @@ -1192,7 +1635,13 @@ "cell_type": "code", "execution_count": 27, "id": "3bbd3d6d-35f0-490f-8fdd-4debc7874e23", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "from openfe.protocols.openmm_rfe import RelativeHybridTopologyProtocol\n", @@ -1213,7 +1662,13 @@ { "cell_type": "markdown", "id": "9030db1c-35fe-4213-930c-b967832d9c7d", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "Finally we create the Transformations" ] @@ -1222,7 +1677,13 @@ "cell_type": "code", "execution_count": 28, "id": "8b374e77-64fb-48a1-b9ae-9b1dba74ebb5", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "transformation_complex = openfe.Transformation(\n", @@ -1245,7 +1706,13 @@ { "cell_type": "markdown", "id": "f08aaff4-97d0-4f53-bb32-1c7e247432aa", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "This transformation can now be run using `openfe quickrun`." ] @@ -1253,7 +1720,13 @@ { "cell_type": "markdown", "id": "6cae5156-f80f-4520-baee-4199774d441a", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, "source": [ "## 5. Running the ``Transformation`` simulations\n", "\n", From 64c3074eddc0bf5127bda32a735dbd4e2529544e Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Tue, 5 May 2026 17:27:10 +0200 Subject: [PATCH 07/15] updating some language --- cookbook/openfold3_to_openfe.ipynb | 63 +++++++++++++++++------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index 67ec59e..5a0391c 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -27,11 +27,14 @@ "tags": [] }, "source": [ - "## Introduction\n", - "\n", - "Here we show a brief preview of some of the steps you may need to go through to calculate binding affinities using [OpenFE](https://docs.openfree.energy/en/latest/) with [OpenFold3](https://openfold-3.readthedocs.io/en/latest/) generated structures.\n", + "## Overview\n", "\n", - "Notably, we will demonstrate how to generate a set of predictions, clean them up for use in molecular dynamics simulations, and then apply them to both relative binding free energy (RBFE) and absolute binding free energy (ABFE) methods." + "1. Predict structures using OpenFold3\n", + "2. Clean and process the predicted structures for use in the following OpenFE protocols:\n", + " - Absolute Binding Free Energy Protocol (ABFE)\n", + " - Relative Binding Free Energy Protocols (RBFEs)\n", + " - Separated Topology\n", + " - Hybrid Topology\n" ] }, { @@ -47,13 +50,13 @@ "source": [ "
\n", "⚠️ Important Note:\n", - " Please note that this notebook does not offer an exhaustive look into everything you may need to do when parsing OpenFold3 inputs into OpenFE. Where possible, we offer insights into some of the other hurdles you may face, but you are likely to encounter more in production settings.\n", + " We will not cover everything needed to use OpenFold3 inputs in OpenFE! We will offer insights into some common considerations, but expect more in production settings.\n", "
" ] }, { "cell_type": "markdown", - "id": "f0d1c067-d461-4a28-b154-396f1517161b", + "id": "2fea29c3", "metadata": { "editable": true, "slideshow": { @@ -62,25 +65,23 @@ "tags": [] }, "source": [ - "## Overview\n", - "\n", - "In this example notebook we demonstrate how to predict and run simulations for different ligands bound to tyrosine kinase 2 (TYK2). The dataset comes from the [Wang et al. JACS 2015 dataset](https://pubs.acs.org/doi/10.1021/ja512751q).\n", - "\n", - "
\n" + "## 1. Run cofolding with OpenFold3 on a set of TYK2 ligands" ] }, { "cell_type": "markdown", - "id": "2fea29c3", + "id": "6c14eb39-036b-44d3-93e3-b29a635a7e2b", "metadata": { "editable": true, "slideshow": { - "slide_type": "slide" + "slide_type": "fragment" }, "tags": [] }, "source": [ - "## 1. Run cofolding with OpenFold3 on a set of TYK2 ligands" + "We will show how to predict and set up simulations for different ligands bound to tyrosine kinase 2 (TYK2).The dataset comes from the [Wang et al. JACS 2015 dataset](https://pubs.acs.org/doi/10.1021/ja512751q).\n", + "\n", + "
\n" ] }, { @@ -89,14 +90,14 @@ "metadata": { "editable": true, "slideshow": { - "slide_type": "fragment" + "slide_type": "slide" }, "tags": [] }, "source": [ "### Preparing the input JSON for OpenFold\n", "\n", - "First we need to create an input JSON file for OpenFold. This step requires assembling two key pieces of information:\n", + "This step requires assembling two key pieces of information:\n", "\n", "- Ligand SMILES strings\n", "- Protein sequence (extracted from the PDB file)\n" @@ -108,14 +109,14 @@ "metadata": { "editable": true, "slideshow": { - "slide_type": "slide" + "slide_type": "fragment" }, "tags": [] }, "source": [ - "In this workflow, we begin with an SDF file containing the ligands.\n", + "The SDF file `tyk2_ligands.sdf` contains all ligands for this exercise.\n", "\n", - "We extract the SMILES representation for each ligand and store them in a dictionary alongside their ligand identifiers." + "For each ligand, extract SMILES representation store in a dictionary alongside its ligand identifier." ] }, { @@ -139,7 +140,6 @@ "\n", "ligands_dict = {}\n", "sppl = Chem.SDMolSupplier(ligands_file, removeHs=True)\n", - "\n", "for mol in sppl:\n", " smi = Chem.MolToSmiles(mol)\n", " name = mol.GetProp(\"_Name\")\n", @@ -265,11 +265,11 @@ "tags": [] }, "source": [ - "### Running OpenFold\n", + "### Generating Structures with OpenFold\n", "\n", "#### Defining the OpenFold settings\n", "\n", - "we define the following settings in a `settings.yaml` file to be passed to OpenFold:\n", + "We define the following settings in a `settings.yaml` file to be passed to OpenFold:\n", "\n", "```json\n", "model_update:\n", @@ -284,10 +284,17 @@ " use_deepspeed_evo_attention: false\n", "\n", "\n", - "```\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "1557d01d-6a84-4531-83b8-b879a50a0ac6", + "metadata": {}, + "source": [ "#### Running OpenFold\n", "\n", - "With all these inputs, you can now run OpenFold:\n", + "With all these inputs, you can now run **OpenFold3**:\n", "\n", "`run_openfold predict --query_json=queries.json --runner_yaml settings.yaml`" ] @@ -497,7 +504,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.52it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.65it/s]\n" ] } ], @@ -551,7 +558,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=5309) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=64970) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -1070,7 +1077,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=5309) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=64970) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -1110,7 +1117,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.88it/s]\n" + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.85it/s]\n" ] } ], From c90d481705f0a1d38c50f4a3031ef4e86b8ff08b Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Wed, 6 May 2026 09:48:00 +0200 Subject: [PATCH 08/15] update ligand prep for abfe --- cookbook/openfold3_to_openfe.ipynb | 165 ++++++++++++++++++----------- 1 file changed, 104 insertions(+), 61 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index 5a0391c..176f591 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -434,44 +434,100 @@ "source": [ "#### Loading and assigning partial charges to the ligand(s)\n", "\n", - "Load the ligands as openfe `SmallMoleculeComponent`s so that they can be understood by the OpenFE ecosystem. " + "Load the ligands as openfe `SmallMoleculeComponent`s so that they can be understood by the OpenFE ecosystem." + ] + }, + { + "cell_type": "markdown", + "id": "5ec171f2-b162-4801-b3d2-204768770e55", + "metadata": {}, + "source": [ + "Extract the ligand cofolded with the protein from the output .pdb:" ] }, { "cell_type": "code", "execution_count": 4, - "id": "09725e7d-b959-4221-b027-1488b6fea22a", - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "fragment" - }, - "tags": [] - }, + "id": "8e22e331-c533-4557-b1fb-ef570c0c054c", + "metadata": {}, "outputs": [], "source": [ - "import openfe\n", + "import pathlib\n", + "import warnings\n", + "import MDAnalysis as mda\n", + "from rdkit import Chem, rdBase\n", + "from rdkit.Chem import AllChem\n", + "\n", + "# don't show warnings that are expected and not an issue\n", + "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") \n", + "\n", + "output_root = pathlib.Path(\"openfold_to_openfe\")\n", + "temp_dir = pathlib.Path(output_root,\"temp_ligands\")\n", + "temp_dir.mkdir(exist_ok=True,parents=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6a6a999f-f961-4909-add8-e8c3bc804c99", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extracting protein and ligand from lig_jmc_27_seed_42_sample_1_model.pdb\n" + ] + } + ], + "source": [ + "ligand_name = 'lig_jmc_27'\n", + "pdb_path = pathlib.Path(f\"assets/of3_tyk2_output/{ligand_name}/seed_42/{ligand_name}_seed_42_sample_1_model.pdb\")\n", + "output_dir = pathlib.Path(\"openfold_to_openfe/\")\n", + "output_dir.mkdir(exist_ok=True)\n", "\n", - "supp = Chem.SDMolSupplier(\"assets/tyk2_ligands.sdf\", removeHs=False)\n", - "all_ligands = [openfe.SmallMoleculeComponent.from_rdkit(mol) for mol in supp]" + "pdb_universe = mda.Universe(pdb_path)\n", + "\n", + "print(f\"Extracting protein and ligand from {pdb_path.name}\")\n", + "aligned_ligand = pdb_universe.select_atoms(\"resname LIG\")\n", + "aligned_ligand.write(f'{output_dir}/{ligand_name}.pdb')\n", + "\n", + "# load back into rdkit to add hydrogens\n", + "rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand_name}.pdb', removeHs=True)\n", + "# use the template to assign bond orders\n", + "template_mol = Chem.MolFromSmiles(ligands_dict[ligand_name])\n", + "with rdBase.BlockLogs(): \n", + " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", + "# Add hydrogens\n", + "rdkit_mol = AllChem.AddHs(rdkit_mol, addCoords=True)\n", + "# Set the molecule name\n", + "rdkit_mol.SetProp('_Name', f\"{ligand_name}\")\n", + "# write to sdf\n", + "ligand_prepped_path = output_dir / f\"{ligand_name}_prepped.sdf\"\n", + "Chem.MolToMolFile(rdkit_mol, ligand_prepped_path)\n", + "\n", + "# save the protein alone\n", + "full_protein = pdb_universe.select_atoms(\"protein\")\n", + "full_protein.write(f'{output_dir}/protein.pdb')" ] }, { "cell_type": "markdown", - "id": "257a7370-9c10-4cef-96f2-d4ae411c6222", + "id": "b1b544a9-9b92-43f3-8b88-7af9205621b5", "metadata": {}, "source": [ - "Choose one ligand for demonstration" + "Load the ligand as an openfe ``SmallMoleculeComponent``" ] }, { "cell_type": "code", - "execution_count": 5, - "id": "b6f6fe49-08c2-462d-87ed-55f468dca669", + "execution_count": 6, + "id": "c4dca30b-bafb-4d03-80c4-83684655ddcf", "metadata": {}, "outputs": [], "source": [ - "ligand = [lig for lig in all_ligands if lig.name == 'lig_jmc_27'][0]" + "import openfe\n", + "ligand = openfe.SmallMoleculeComponent.from_sdf_file(ligand_prepped_path)" ] }, { @@ -490,7 +546,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", "metadata": { "editable": true, @@ -504,7 +560,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.65it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.86it/s]\n" ] } ], @@ -521,7 +577,7 @@ " method=charge_settings.partial_charge_method,\n", " toolkit_backend=charge_settings.off_toolkit_backend,\n", " generate_n_conformers=1,\n", - " nagl_model=None,\n", + " nagl_model=\"openff-gnn-am1bcc-1.0.0.pt\",\n", " processors=1,\n", ")" ] @@ -543,7 +599,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "ea82c47d-9794-424c-8d27-a9c6e69d29e8", "metadata": { "editable": true, @@ -558,7 +614,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=64970) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=92981) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -584,7 +640,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", "metadata": { "editable": true, @@ -600,7 +656,7 @@ "ProteinComponent(name=tyk2)" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -626,7 +682,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "30373ee0-d777-4828-b89a-5a8fdbc56c41", "metadata": { "editable": true, @@ -642,7 +698,7 @@ "SolventComponent(name=O, Na+, Cl-)" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -682,7 +738,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "987a1657-82d0-4310-9fe7-4eecd289632a", "metadata": { "editable": true, @@ -739,7 +795,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "id": "037cb959-8f0c-4a09-844a-30e39590eabf", "metadata": { "editable": true, @@ -773,7 +829,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "ef7a9ebf-e0d7-4dda-aac5-d4428b120814", "metadata": { "editable": true, @@ -857,7 +913,6 @@ "tags": [] }, "source": [ - "\n", "#### a) Choosing a reference protein structure\n", "\n", "As mentioned above, we will select a reference protein structure for all simulations going forward. To do this, we naively select the structure bound to a ligand with the largest volume.\n", @@ -867,7 +922,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "c7b239c1-eaf3-466e-84ef-0700eab300e6", "metadata": { "editable": true, @@ -900,7 +955,6 @@ "import pathlib\n", "import MDAnalysis as mda\n", "from MDAnalysis.analysis import align\n", - "from rdkit import Chem, rdBase\n", "from rdkit.Chem import AllChem\n", "from rdkit.Chem.Descriptors3D import Asphericity\n", "import warnings\n", @@ -911,9 +965,7 @@ "# gather all the complexes and align to a single structure\n", "# which has the largest ligand by volume \n", "of_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", - "output_root = pathlib.Path(\"openfold_to_openfe\")\n", - "temp_dir = pathlib.Path(output_root,\"temp_ligands\")\n", - "temp_dir.mkdir(exist_ok=True,parents=True)\n", + "\n", "# load all the output pdbs and calculate ligand volumes\n", "ligand_volumes = {}\n", "\n", @@ -960,7 +1012,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "26c10e11-f001-44e5-87a4-2939ead048a8", "metadata": { "editable": true, @@ -1063,7 +1115,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "fdfd428e-42af-49d3-9857-7a1b086f9ab2", "metadata": { "editable": true, @@ -1077,7 +1129,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=64970) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=92981) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -1103,7 +1155,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "id": "992d53f3-d086-4283-9d6a-055be01588ad", "metadata": { "editable": true, @@ -1117,7 +1169,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.85it/s]\n" + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.83it/s]\n" ] } ], @@ -1192,7 +1244,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "7ad01abd-097c-466d-9a3f-74a67e4d9015", "metadata": { "editable": true, @@ -1209,7 +1261,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "71d4ff18-a837-443d-bc02-69554e7d76cf", "metadata": { "editable": true, @@ -1253,7 +1305,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "id": "3e343c11-b693-4700-b1ea-2fa7951afa88", "metadata": { "editable": true, @@ -1273,7 +1325,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "id": "a531a0cb-3eda-4d25-89d8-347f470d40ea", "metadata": { "editable": true, @@ -1343,7 +1395,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", "metadata": { "editable": true, @@ -1373,21 +1425,12 @@ } ], "source": [ - "import pathlib\n", - "import MDAnalysis as mda\n", "from MDAnalysis.analysis import align\n", - "from rdkit import Chem, rdBase\n", - "from rdkit.Chem import AllChem\n", "from rdkit.Chem.Descriptors3D import Asphericity\n", - "import warnings\n", - "\n", - "# don't show warnings that are expected and not an issue\n", - "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") \n", "\n", "# gather all the complexes and align to a single structure\n", "# which has the largest ligand by volume \n", "of_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", - "output_root = pathlib.Path(\"openfold_to_openfe\")\n", "temp_dir = pathlib.Path(output_root,\"temp_ligands\")\n", "temp_dir.mkdir(exist_ok=True,parents=True)\n", "# load all the output pdbs and calculate ligand volumes\n", @@ -1420,7 +1463,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "id": "31d18f6d-b938-4de3-9b2f-3c6e9bedd827", "metadata": { "editable": true, @@ -1468,7 +1511,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "id": "b5186710-f89e-4c86-998f-4e9fe076a2d8", "metadata": { "editable": true, @@ -1502,7 +1545,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "id": "c8db1e94-c146-4daf-bdb2-4383b4fcd0d6", "metadata": { "editable": true, @@ -1568,7 +1611,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "id": "7d3c436c-fd93-4a3e-9933-e43b00783931", "metadata": { "editable": true, @@ -1598,7 +1641,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "id": "b161b5b6-7718-4a47-b834-e3d88082bb31", "metadata": { "editable": true, @@ -1640,7 +1683,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "id": "3bbd3d6d-35f0-490f-8fdd-4debc7874e23", "metadata": { "editable": true, @@ -1682,7 +1725,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "id": "8b374e77-64fb-48a1-b9ae-9b1dba74ebb5", "metadata": { "editable": true, From 8ac0ae9795853933a6b69b4bf8c93305ca57c02f Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Wed, 6 May 2026 10:31:49 +0200 Subject: [PATCH 09/15] update env --- cookbook/openfold3_to_openfe.ipynb | 174 +++++++++++++++-------------- environment.yaml | 2 +- 2 files changed, 93 insertions(+), 83 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index 176f591..0b4a93a 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -462,8 +462,12 @@ "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") \n", "\n", "output_root = pathlib.Path(\"openfold_to_openfe\")\n", - "temp_dir = pathlib.Path(output_root,\"temp_ligands\")\n", - "temp_dir.mkdir(exist_ok=True,parents=True)" + "\n", + "output_dir = pathlib.Path(output_root, \"abfe_prep/\")\n", + "output_dir.mkdir(exist_ok=True, parents=True)\n", + "\n", + "tmp_ligand_dir = pathlib.Path(output_root, \"temp_ligands\")\n", + "tmp_ligand_dir.mkdir(exist_ok=True)\n" ] }, { @@ -483,8 +487,6 @@ "source": [ "ligand_name = 'lig_jmc_27'\n", "pdb_path = pathlib.Path(f\"assets/of3_tyk2_output/{ligand_name}/seed_42/{ligand_name}_seed_42_sample_1_model.pdb\")\n", - "output_dir = pathlib.Path(\"openfold_to_openfe/\")\n", - "output_dir.mkdir(exist_ok=True)\n", "\n", "pdb_universe = mda.Universe(pdb_path)\n", "\n", @@ -494,6 +496,7 @@ "\n", "# load back into rdkit to add hydrogens\n", "rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand_name}.pdb', removeHs=True)\n", + "\n", "# use the template to assign bond orders\n", "template_mol = Chem.MolFromSmiles(ligands_dict[ligand_name])\n", "with rdBase.BlockLogs(): \n", @@ -513,41 +516,23 @@ }, { "cell_type": "markdown", - "id": "b1b544a9-9b92-43f3-8b88-7af9205621b5", - "metadata": {}, - "source": [ - "Load the ligand as an openfe ``SmallMoleculeComponent``" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "c4dca30b-bafb-4d03-80c4-83684655ddcf", - "metadata": {}, - "outputs": [], - "source": [ - "import openfe\n", - "ligand = openfe.SmallMoleculeComponent.from_sdf_file(ligand_prepped_path)" - ] - }, - { - "cell_type": "markdown", - "id": "f0cd4185-3491-4bcb-9b4d-d160d84ad40e", + "id": "30816423-6c25-47bb-a90c-4870e85567c1", "metadata": { - "editable": true, "slideshow": { - "slide_type": "fragment" + "slide_type": "slide" }, "tags": [] }, "source": [ - "Assign partial charges to the ligands:" + "#### Fixing & protonating the protein structure\n", + "\n", + "The PDB contains the heavy atoms of the protein but is missing hydrogens and caps. Here we call PDBFixer to add hydrogens at pH 7 and add protein caps." ] }, { "cell_type": "code", - "execution_count": 7, - "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", + "execution_count": 8, + "id": "ea82c47d-9794-424c-8d27-a9c6e69d29e8", "metadata": { "editable": true, "slideshow": { @@ -560,50 +545,44 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.86it/s]\n" + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=97949) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + " pid, fd = os.forkpty()\n" ] } ], "source": [ - "from openfe.protocols.openmm_utils.omm_settings import OpenFFPartialChargeSettings\n", - "from openfe.protocols.openmm_utils.charge_generation import bulk_assign_partial_charges\n", - "\n", - "# Generate partial charges\n", - "charge_settings = OpenFFPartialChargeSettings(partial_charge_method=\"nagl\")\n", - "\n", - "charged_ligands = bulk_assign_partial_charges(\n", - " molecules=[ligand],\n", - " overwrite=False,\n", - " method=charge_settings.partial_charge_method,\n", - " toolkit_backend=charge_settings.off_toolkit_backend,\n", - " generate_n_conformers=1,\n", - " nagl_model=\"openff-gnn-am1bcc-1.0.0.pt\",\n", - " processors=1,\n", - ")" + "# now run the reference protein through pdbfixer\n", + "! pdbfixer assets/of3_tyk2_output/lig_jmc_27/seed_42/lig_jmc_27_seed_42_sample_1_model.pdb --add-atoms=all --add-residues --output=openfold_to_openfe/lig_jmc_27_seed_42_sample_1_model_fixed.pdb" + ] + }, + { + "cell_type": "markdown", + "id": "93d67ad4-6c06-4555-8760-06294e45f05f", + "metadata": {}, + "source": [ + "#### Loading the OpenFE Components" ] }, { "cell_type": "markdown", - "id": "a84b9dfa-e92a-43fa-baae-a725778122cb", + "id": "eaa991f1-3ecf-4f15-b637-4538a0078b7e", "metadata": { + "editable": true, "slideshow": { - "slide_type": "slide" + "slide_type": "fragment" }, "tags": [] }, "source": [ - "#### Fixing & protonating the protein structure\n", - "\n", - "The PDB contains the heavy atoms of the protein but is missing hydrogens and caps. Here we call PDBFixer to add hydrogens at pH 7 and add protein caps." + "Then we can load the reference protein to a ProteinComponent." ] }, { "cell_type": "code", - "execution_count": 8, - "id": "ea82c47d-9794-424c-8d27-a9c6e69d29e8", + "execution_count": 9, + "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", "metadata": { "editable": true, - "scrolled": true, "slideshow": { "slide_type": "fragment" }, @@ -611,22 +590,43 @@ }, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=92981) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", - " pid, fd = os.forkpty()\n" - ] + "data": { + "text/plain": [ + "ProteinComponent(name=tyk2)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# now run the reference protein through pdbfixer\n", - "! pdbfixer assets/of3_tyk2_output/lig_jmc_27/seed_42/lig_jmc_27_seed_42_sample_1_model.pdb --add-atoms=all --add-residues --output=openfold_to_openfe/lig_jmc_27_seed_42_sample_1_model_fixed.pdb" + "protein = openfe.ProteinComponent.from_pdb_file(\"openfold_to_openfe/lig_jmc_27_seed_42_sample_1_model_fixed.pdb\", name=\"tyk2\")\n", + "protein" + ] + }, + { + "cell_type": "markdown", + "id": "b1b544a9-9b92-43f3-8b88-7af9205621b5", + "metadata": {}, + "source": [ + "Load the ligand as an openfe ``SmallMoleculeComponent``" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c4dca30b-bafb-4d03-80c4-83684655ddcf", + "metadata": {}, + "outputs": [], + "source": [ + "import openfe\n", + "ligand = openfe.SmallMoleculeComponent.from_sdf_file(ligand_prepped_path)" ] }, { "cell_type": "markdown", - "id": "8c55d160-558f-426f-8a8c-9ae46d191cff", + "id": "f0cd4185-3491-4bcb-9b4d-d160d84ad40e", "metadata": { "editable": true, "slideshow": { @@ -635,13 +635,13 @@ "tags": [] }, "source": [ - "Then we can load the reference protein to a ProteinComponent." + "Assign partial charges to the ligands:" ] }, { "cell_type": "code", - "execution_count": 9, - "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", + "execution_count": 7, + "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", "metadata": { "editable": true, "slideshow": { @@ -651,19 +651,29 @@ }, "outputs": [ { - "data": { - "text/plain": [ - "ProteinComponent(name=tyk2)" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.85it/s]\n" + ] } ], "source": [ - "protein = openfe.ProteinComponent.from_pdb_file(\"openfold_to_openfe/lig_jmc_27_seed_42_sample_1_model_fixed.pdb\", name=\"tyk2\")\n", - "protein" + "from openfe.protocols.openmm_utils.omm_settings import OpenFFPartialChargeSettings\n", + "from openfe.protocols.openmm_utils.charge_generation import bulk_assign_partial_charges\n", + "\n", + "# Generate partial charges\n", + "charge_settings = OpenFFPartialChargeSettings(partial_charge_method=\"nagl\")\n", + "\n", + "charged_ligands = bulk_assign_partial_charges(\n", + " molecules=[ligand],\n", + " overwrite=False,\n", + " method=charge_settings.partial_charge_method,\n", + " toolkit_backend=charge_settings.off_toolkit_backend,\n", + " generate_n_conformers=1,\n", + " nagl_model=\"openff-gnn-am1bcc-1.0.0.pt\",\n", + " processors=1,\n", + ")" ] }, { @@ -977,9 +987,9 @@ " u = mda.Universe(str(output_file))\n", " ligand = u.select_atoms(\"resname LIG\")\n", " # write the ligand to a temporary file\n", - " ligand.write(str(temp_dir / f\"{ligand_name}.pdb\"))\n", + " ligand.write(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"))\n", " # now load back with rdkit\n", - " rdkit_mol = Chem.MolFromPDBFile(str(temp_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", + " rdkit_mol = Chem.MolFromPDBFile(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", " # now use a template from the SMILES definitions to make sure the bond orders are correct\n", " template_mol = Chem.MolFromSmiles(ligands_dict[ligand_name])\n", " # don't show rdkit's \"WARNING: More than one matching pattern found - picking one\" for every ligand\n", @@ -1129,7 +1139,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=92981) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=97949) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -1431,8 +1441,8 @@ "# gather all the complexes and align to a single structure\n", "# which has the largest ligand by volume \n", "of_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", - "temp_dir = pathlib.Path(output_root,\"temp_ligands\")\n", - "temp_dir.mkdir(exist_ok=True,parents=True)\n", + "tmp_ligand_dir = pathlib.Path(output_root,\"temp_ligands\")\n", + "tmp_ligand_dir.mkdir(exist_ok=True,parents=True)\n", "# load all the output pdbs and calculate ligand volumes\n", "ligand_volumes = {}\n", "\n", @@ -1444,9 +1454,9 @@ " u = mda.Universe(str(output_file))\n", " ligand = u.select_atoms(\"resname LIG\")\n", " # write the ligand to a temporary file\n", - " ligand.write(str(temp_dir / f\"{ligand_name}.pdb\"))\n", + " ligand.write(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"))\n", " # now load back with rdkit\n", - " rdkit_mol = Chem.MolFromPDBFile(str(temp_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", + " rdkit_mol = Chem.MolFromPDBFile(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", " # now use a template from the SMILES definitions to make sure the bond orders are correct\n", " template_mol = Chem.MolFromSmiles(ligands_dict[ligand_name])\n", " # don't show rdkit's \"WARNING: More than one matching pattern found - picking one\" for every ligand\n", diff --git a/environment.yaml b/environment.yaml index 6b1d00b..1bdcad7 100644 --- a/environment.yaml +++ b/environment.yaml @@ -14,5 +14,5 @@ dependencies: - pytest-cov - pytest-xdist - python - - openfe==1.11.0 + - openfe==1.11.1 - openff-interchange-base != 0.5.1 # https://github.com/openforcefield/openff-interchange/issues/1450 From a73f83322c8ab8c841abc06f2b596c65b86033cc Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Wed, 6 May 2026 10:32:07 +0200 Subject: [PATCH 10/15] update slide formatting --- cookbook/openfold3_to_openfe.ipynb | 178 ++++++++++++++++++----------- 1 file changed, 113 insertions(+), 65 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index 0b4a93a..0ac1180 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -290,7 +290,13 @@ { "cell_type": "markdown", "id": "1557d01d-6a84-4531-83b8-b879a50a0ac6", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "#### Running OpenFold\n", "\n", @@ -437,19 +443,17 @@ "Load the ligands as openfe `SmallMoleculeComponent`s so that they can be understood by the OpenFE ecosystem." ] }, - { - "cell_type": "markdown", - "id": "5ec171f2-b162-4801-b3d2-204768770e55", - "metadata": {}, - "source": [ - "Extract the ligand cofolded with the protein from the output .pdb:" - ] - }, { "cell_type": "code", "execution_count": 4, "id": "8e22e331-c533-4557-b1fb-ef570c0c054c", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "outputs": [], "source": [ "import pathlib\n", @@ -470,11 +474,31 @@ "tmp_ligand_dir.mkdir(exist_ok=True)\n" ] }, + { + "cell_type": "markdown", + "id": "5ec171f2-b162-4801-b3d2-204768770e55", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "Extract the ligand cofolded with the protein from the output .pdb:" + ] + }, { "cell_type": "code", "execution_count": 5, "id": "6a6a999f-f961-4909-add8-e8c3bc804c99", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "outputs": [ { "name": "stdout", @@ -531,7 +555,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "id": "ea82c47d-9794-424c-8d27-a9c6e69d29e8", "metadata": { "editable": true, @@ -540,16 +564,7 @@ }, "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=97949) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", - " pid, fd = os.forkpty()\n" - ] - } - ], + "outputs": [], "source": [ "# now run the reference protein through pdbfixer\n", "! pdbfixer assets/of3_tyk2_output/lig_jmc_27/seed_42/lig_jmc_27_seed_42_sample_1_model.pdb --add-atoms=all --add-residues --output=openfold_to_openfe/lig_jmc_27_seed_42_sample_1_model_fixed.pdb" @@ -574,13 +589,28 @@ "tags": [] }, "source": [ - "Then we can load the reference protein to a ProteinComponent." + "Now we can define the protein, ligand, and solvent in OpenFE." ] }, { "cell_type": "code", "execution_count": 9, - "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", + "id": "97da58c4-b4da-478a-918a-a487e5c7317b", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import openfe" + ] + }, + { + "cell_type": "markdown", + "id": "ca1b4341-f636-45d8-9b20-ed313cc95213", "metadata": { "editable": true, "slideshow": { @@ -588,6 +618,21 @@ }, "tags": [] }, + "source": [ + "Load the protein as an OpenFE ``ProteinComponent``" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "outputs": [ { "data": { @@ -595,7 +640,7 @@ "ProteinComponent(name=tyk2)" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -608,19 +653,30 @@ { "cell_type": "markdown", "id": "b1b544a9-9b92-43f3-8b88-7af9205621b5", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, "source": [ "Load the ligand as an openfe ``SmallMoleculeComponent``" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 11, "id": "c4dca30b-bafb-4d03-80c4-83684655ddcf", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "outputs": [], "source": [ - "import openfe\n", "ligand = openfe.SmallMoleculeComponent.from_sdf_file(ligand_prepped_path)" ] }, @@ -640,12 +696,12 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 12, "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", "metadata": { "editable": true, "slideshow": { - "slide_type": "fragment" + "slide_type": "" }, "tags": [] }, @@ -654,7 +710,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.85it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.65it/s]\n" ] } ], @@ -692,12 +748,12 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "id": "30373ee0-d777-4828-b89a-5a8fdbc56c41", "metadata": { "editable": true, "slideshow": { - "slide_type": "fragment" + "slide_type": "" }, "tags": [] }, @@ -708,7 +764,7 @@ "SolventComponent(name=O, Na+, Cl-)" ] }, - "execution_count": 10, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -748,7 +804,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "id": "987a1657-82d0-4310-9fe7-4eecd289632a", "metadata": { "editable": true, @@ -805,7 +861,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "id": "037cb959-8f0c-4a09-844a-30e39590eabf", "metadata": { "editable": true, @@ -839,7 +895,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "id": "ef7a9ebf-e0d7-4dda-aac5-d4428b120814", "metadata": { "editable": true, @@ -932,7 +988,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "id": "c7b239c1-eaf3-466e-84ef-0700eab300e6", "metadata": { "editable": true, @@ -1022,7 +1078,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "id": "26c10e11-f001-44e5-87a4-2939ead048a8", "metadata": { "editable": true, @@ -1125,7 +1181,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "id": "fdfd428e-42af-49d3-9857-7a1b086f9ab2", "metadata": { "editable": true, @@ -1139,7 +1195,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=97949) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.13/pty.py:95: DeprecationWarning: This process (pid=1244) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -1165,7 +1221,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 20, "id": "992d53f3-d086-4283-9d6a-055be01588ad", "metadata": { "editable": true, @@ -1179,7 +1235,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.83it/s]\n" + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.71it/s]\n" ] } ], @@ -1254,7 +1310,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 21, "id": "7ad01abd-097c-466d-9a3f-74a67e4d9015", "metadata": { "editable": true, @@ -1271,7 +1327,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "id": "71d4ff18-a837-443d-bc02-69554e7d76cf", "metadata": { "editable": true, @@ -1315,7 +1371,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "id": "3e343c11-b693-4700-b1ea-2fa7951afa88", "metadata": { "editable": true, @@ -1335,7 +1391,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "id": "a531a0cb-3eda-4d25-89d8-347f470d40ea", "metadata": { "editable": true, @@ -1405,7 +1461,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 25, "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", "metadata": { "editable": true, @@ -1473,7 +1529,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 26, "id": "31d18f6d-b938-4de3-9b2f-3c6e9bedd827", "metadata": { "editable": true, @@ -1521,7 +1577,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 27, "id": "b5186710-f89e-4c86-998f-4e9fe076a2d8", "metadata": { "editable": true, @@ -1555,7 +1611,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 28, "id": "c8db1e94-c146-4daf-bdb2-4383b4fcd0d6", "metadata": { "editable": true, @@ -1621,7 +1677,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 29, "id": "7d3c436c-fd93-4a3e-9933-e43b00783931", "metadata": { "editable": true, @@ -1651,7 +1707,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 30, "id": "b161b5b6-7718-4a47-b834-e3d88082bb31", "metadata": { "editable": true, @@ -1693,7 +1749,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 31, "id": "3bbd3d6d-35f0-490f-8fdd-4debc7874e23", "metadata": { "editable": true, @@ -1735,7 +1791,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 32, "id": "8b374e77-64fb-48a1-b9ae-9b1dba74ebb5", "metadata": { "editable": true, @@ -1793,14 +1849,6 @@ "In practice, one would create entire network of Transformations, and then run all the simulations.\n", "This notebook will not cover these aspects. To find out more about this, please see the [OpenFE Tutorials](https://docs.openfree.energy/en/latest/tutorials/index.html)." ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f09a0d21-c0d3-4c39-9c9d-b0b1d61be2ae", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -1819,7 +1867,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.13" + "version": "3.13.13" }, "widgets": { "application/vnd.jupyter.widget-state+json": { From 0b3a7749db7fa030438f53324c5286d5c11f5b0f Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Wed, 6 May 2026 10:35:07 +0200 Subject: [PATCH 11/15] update warning box --- cookbook/openfold3_to_openfe.ipynb | 115 ++++++++++++++++------------- 1 file changed, 65 insertions(+), 50 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index 0ac1180..b35864f 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -542,6 +542,7 @@ "cell_type": "markdown", "id": "30816423-6c25-47bb-a90c-4870e85567c1", "metadata": { + "editable": true, "slideshow": { "slide_type": "slide" }, @@ -570,10 +571,35 @@ "! pdbfixer assets/of3_tyk2_output/lig_jmc_27/seed_42/lig_jmc_27_seed_42_sample_1_model.pdb --add-atoms=all --add-residues --output=openfold_to_openfe/lig_jmc_27_seed_42_sample_1_model_fixed.pdb" ] }, + { + "cell_type": "markdown", + "id": "3072cbd5-e273-4d44-aff4-e3c94bc53476", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "
\n", + "⚠️ Note:\n", + " In practice more care would be taken when protonating the complexes, using more complex tools such as Maestro or OpenEye's Spruce.\n", + " \n", + "For example, ligand protonation states may change depending on the chemical environment they are bound to.\n", + "
" + ] + }, { "cell_type": "markdown", "id": "93d67ad4-6c06-4555-8760-06294e45f05f", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "source": [ "#### Loading the OpenFE Components" ] @@ -594,7 +620,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "id": "97da58c4-b4da-478a-918a-a487e5c7317b", "metadata": { "editable": true, @@ -624,7 +650,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", "metadata": { "editable": true, @@ -640,7 +666,7 @@ "ProteinComponent(name=tyk2)" ] }, - "execution_count": 10, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -666,7 +692,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "c4dca30b-bafb-4d03-80c4-83684655ddcf", "metadata": { "editable": true, @@ -696,7 +722,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", "metadata": { "editable": true, @@ -710,7 +736,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.65it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.72it/s]\n" ] } ], @@ -748,7 +774,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "id": "30373ee0-d777-4828-b89a-5a8fdbc56c41", "metadata": { "editable": true, @@ -764,7 +790,7 @@ "SolventComponent(name=O, Na+, Cl-)" ] }, - "execution_count": 13, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -804,7 +830,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "id": "987a1657-82d0-4310-9fe7-4eecd289632a", "metadata": { "editable": true, @@ -861,7 +887,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "id": "037cb959-8f0c-4a09-844a-30e39590eabf", "metadata": { "editable": true, @@ -870,7 +896,15 @@ }, "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ERROR! Session/line number was not unique in database. History logging moved to new session 13\n" + ] + } + ], "source": [ "from openfe.protocols.openmm_afe import AbsoluteBindingProtocol\n", "\n", @@ -895,7 +929,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 14, "id": "ef7a9ebf-e0d7-4dda-aac5-d4428b120814", "metadata": { "editable": true, @@ -988,7 +1022,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "id": "c7b239c1-eaf3-466e-84ef-0700eab300e6", "metadata": { "editable": true, @@ -1078,7 +1112,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 16, "id": "26c10e11-f001-44e5-87a4-2939ead048a8", "metadata": { "editable": true, @@ -1144,25 +1178,6 @@ " full_protein.write(f'{output_dir}/protein.pdb')" ] }, - { - "cell_type": "markdown", - "id": "e5b5141e-efe0-4bea-89e9-4896c00f4311", - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "fragment" - }, - "tags": [] - }, - "source": [ - "
\n", - "⚠️ Important Note:\n", - "

\n", - " Here simply we assign ligand protonation states to those we defined at the start of this exercise. Additionally, below we will assign protein protonation states using PDBFixer at pH 7 without accounting for the ligand.

\n", - " In practice more care would be taken when protonating the complexes, using more complex tools such as Maestro or OpenEye's Spruce. For example, ligand protonation states may change depending on the chemical environment they are bound to.\n", - "
" - ] - }, { "cell_type": "markdown", "id": "6bf56d93-222a-4651-b8cf-f451f0360878", @@ -1181,7 +1196,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 17, "id": "fdfd428e-42af-49d3-9857-7a1b086f9ab2", "metadata": { "editable": true, @@ -1195,7 +1210,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.13/pty.py:95: DeprecationWarning: This process (pid=1244) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.13/pty.py:95: DeprecationWarning: This process (pid=5400) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", " pid, fd = os.forkpty()\n" ] } @@ -1221,7 +1236,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "id": "992d53f3-d086-4283-9d6a-055be01588ad", "metadata": { "editable": true, @@ -1235,7 +1250,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.71it/s]\n" + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.78it/s]\n" ] } ], @@ -1310,7 +1325,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "id": "7ad01abd-097c-466d-9a3f-74a67e4d9015", "metadata": { "editable": true, @@ -1327,7 +1342,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "id": "71d4ff18-a837-443d-bc02-69554e7d76cf", "metadata": { "editable": true, @@ -1371,7 +1386,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "id": "3e343c11-b693-4700-b1ea-2fa7951afa88", "metadata": { "editable": true, @@ -1391,7 +1406,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "id": "a531a0cb-3eda-4d25-89d8-347f470d40ea", "metadata": { "editable": true, @@ -1461,7 +1476,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 23, "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", "metadata": { "editable": true, @@ -1529,7 +1544,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "id": "31d18f6d-b938-4de3-9b2f-3c6e9bedd827", "metadata": { "editable": true, @@ -1577,7 +1592,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 25, "id": "b5186710-f89e-4c86-998f-4e9fe076a2d8", "metadata": { "editable": true, @@ -1611,7 +1626,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 26, "id": "c8db1e94-c146-4daf-bdb2-4383b4fcd0d6", "metadata": { "editable": true, @@ -1677,7 +1692,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 27, "id": "7d3c436c-fd93-4a3e-9933-e43b00783931", "metadata": { "editable": true, @@ -1707,7 +1722,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 28, "id": "b161b5b6-7718-4a47-b834-e3d88082bb31", "metadata": { "editable": true, @@ -1749,7 +1764,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 29, "id": "3bbd3d6d-35f0-490f-8fdd-4debc7874e23", "metadata": { "editable": true, @@ -1791,7 +1806,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 30, "id": "8b374e77-64fb-48a1-b9ae-9b1dba74ebb5", "metadata": { "editable": true, From baf9da56de10769c9fb923f0f840bda1602c5f6f Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Wed, 6 May 2026 12:20:36 +0200 Subject: [PATCH 12/15] factor out some functions --- cookbook/openfold3_to_openfe.ipynb | 294 ++++++++++++----------------- 1 file changed, 116 insertions(+), 178 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index b35864f..5cc1f51 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -4,7 +4,6 @@ "cell_type": "markdown", "id": "35354229", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -20,7 +19,6 @@ "cell_type": "markdown", "id": "0d905dc8-e11b-4088-82f5-2c2cefef3973", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -41,7 +39,6 @@ "cell_type": "markdown", "id": "ada5c811-8603-4473-8040-7fd370b4a1cf", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -58,7 +55,6 @@ "cell_type": "markdown", "id": "2fea29c3", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -72,7 +68,6 @@ "cell_type": "markdown", "id": "6c14eb39-036b-44d3-93e3-b29a635a7e2b", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -88,7 +83,6 @@ "cell_type": "markdown", "id": "ef3bdb1f-504a-4311-8e0a-c28265b006cb", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -107,7 +101,6 @@ "cell_type": "markdown", "id": "2cfa0d3a-9eb5-4ddc-854f-b278469ae2e1", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -122,9 +115,25 @@ { "cell_type": "code", "execution_count": 1, + "id": "65af114c-b151-4bcd-b1b5-448abbe43fc5", + "metadata": { + "slideshow": { + "slide_type": "skip" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import warnings\n", + "# don't show warnings that are expected and not an issue\n", + "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") " + ] + }, + { + "cell_type": "code", + "execution_count": 2, "id": "08962d91-a334-4c89-adf1-19be6f2bdb16", "metadata": { - "editable": true, "scrolled": true, "slideshow": { "slide_type": "fragment" @@ -138,20 +147,19 @@ "\n", "ligands_file = \"assets/tyk2_ligands.sdf\"\n", "\n", - "ligands_dict = {}\n", + "ligand_smiles = {}\n", "sppl = Chem.SDMolSupplier(ligands_file, removeHs=True)\n", "for mol in sppl:\n", " smi = Chem.MolToSmiles(mol)\n", " name = mol.GetProp(\"_Name\")\n", - " ligands_dict[name] = smi" + " ligand_smiles[name] = smi" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "1c55bfeb-c1bc-4af8-98da-43ff8c1de141", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -173,20 +181,19 @@ " 'lig_jmc_28': 'C[C@@H]1C[C@@H]1C(=O)Nc1cc(NC(=O)c2c(Cl)cccc2Cl)ccn1'}" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ligands_dict" + "ligand_smiles" ] }, { "cell_type": "markdown", "id": "80da7967-8046-44e4-aef7-c81ac6712f98", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -200,7 +207,6 @@ "cell_type": "markdown", "id": "b3f0be0c-144c-4e96-9310-a8778111291c", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -214,10 +220,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "25a8ba0c-311c-476e-9913-9b39611c708d", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -237,7 +242,7 @@ "# Build the queries dictionary\n", "queries = {}\n", "\n", - "for name, smiles in ligands_dict.items():\n", + "for name, smiles in ligand_smiles.items():\n", " queries[name] = {\n", " \"chains\": [\n", " protein_info,\n", @@ -258,7 +263,6 @@ "cell_type": "markdown", "id": "a2546f36-2ca2-4793-ad4b-19b6e76574ae", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -271,7 +275,7 @@ "\n", "We define the following settings in a `settings.yaml` file to be passed to OpenFold:\n", "\n", - "```json\n", + "```\n", "model_update:\n", " presets:\n", " - predict\n", @@ -291,7 +295,6 @@ "cell_type": "markdown", "id": "1557d01d-6a84-4531-83b8-b879a50a0ac6", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -309,7 +312,6 @@ "cell_type": "markdown", "id": "9c1ab9ee-71f5-4587-bea1-35097621c039", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -325,7 +327,6 @@ "cell_type": "markdown", "id": "73368db9-350f-4851-922a-01469736dcc7", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -341,7 +342,6 @@ "cell_type": "markdown", "id": "9481baf0-9f31-41f2-acf2-ec9b62552345", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -358,7 +358,6 @@ "cell_type": "markdown", "id": "721074db-8266-4c3e-b592-64220e0cfd8f", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -372,7 +371,6 @@ "cell_type": "markdown", "id": "249ec515-cfad-4f49-8dba-ee2438b1adf4", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -387,7 +385,6 @@ "cell_type": "markdown", "id": "6419b4ec-6513-47ca-bb66-0eb17a7224c3", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -401,7 +398,6 @@ "cell_type": "markdown", "id": "fd51d74c-5cdf-445a-8a89-7ff365bc1e1c", "metadata": { - "editable": true, "slideshow": { "slide_type": "" }, @@ -415,7 +411,6 @@ "cell_type": "markdown", "id": "d34aab3e-8275-46ab-abc6-2a588224d889", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -431,7 +426,6 @@ "cell_type": "markdown", "id": "cdeee4e3-ce8c-4151-9ef7-5a6017ac3dcb", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -445,10 +439,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "8e22e331-c533-4557-b1fb-ef570c0c054c", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -457,28 +450,24 @@ "outputs": [], "source": [ "import pathlib\n", - "import warnings\n", "import MDAnalysis as mda\n", + "from MDAnalysis.core.groups import AtomGroup\n", "from rdkit import Chem, rdBase\n", "from rdkit.Chem import AllChem\n", "\n", - "# don't show warnings that are expected and not an issue\n", - "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") \n", - "\n", "output_root = pathlib.Path(\"openfold_to_openfe\")\n", "\n", "output_dir = pathlib.Path(output_root, \"abfe_prep/\")\n", "output_dir.mkdir(exist_ok=True, parents=True)\n", "\n", "tmp_ligand_dir = pathlib.Path(output_root, \"temp_ligands\")\n", - "tmp_ligand_dir.mkdir(exist_ok=True)\n" + "tmp_ligand_dir.mkdir(exist_ok=True)" ] }, { "cell_type": "markdown", "id": "5ec171f2-b162-4801-b3d2-204768770e55", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -490,10 +479,45 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, + "id": "307df5ab-d79e-4592-b3ad-57334574249d", + "metadata": {}, + "outputs": [], + "source": [ + "def extract_protein_ligand(pdb_path:pathlib.Path)->(AtomGroup, AtomGroup):\n", + " print(f\"Extracting protein and ligand from {pdb_path.name}\")\n", + " pdb_universe = mda.Universe(pdb_path)\n", + " protein = pdb_universe.select_atoms(\"protein\")\n", + " ligand = pdb_universe.select_atoms(\"resname LIG\")\n", + "\n", + " return (protein, ligand)\n", + "\n", + "def prep_ligand(sdf_in:pathlib.Path, sdf_out:pathlib.Path, name:str, template_smiles:str)->None:\n", + " print(f\"Preparing {name}\")\n", + " # load back into rdkit to add hydrogens\n", + " rdkit_mol = Chem.MolFromPDBFile(str(sdf_in), removeHs=True)\n", + " \n", + " # use the template to assign bond orders\n", + " template_mol = Chem.MolFromSmiles(template_smiles)\n", + " with rdBase.BlockLogs(): \n", + " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", + " \n", + " # Add hydrogens\n", + " rdkit_mol = AllChem.AddHs(rdkit_mol, addCoords=True)\n", + " \n", + " # Set the molecule name\n", + " rdkit_mol.SetProp('_Name', f\"{name}\")\n", + " \n", + " # write to sdf\n", + " Chem.MolToMolFile(rdkit_mol, sdf_out)\n", + " print(f\"written to {sdf_out}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, "id": "6a6a999f-f961-4909-add8-e8c3bc804c99", "metadata": { - "editable": true, "slideshow": { "slide_type": "" }, @@ -504,7 +528,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Extracting protein and ligand from lig_jmc_27_seed_42_sample_1_model.pdb\n" + "Extracting protein and ligand from lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Preparing lig_jmc_27\n", + "written to openfold_to_openfe/abfe_prep/lig_jmc_27_prepped.sdf\n" ] } ], @@ -512,37 +538,24 @@ "ligand_name = 'lig_jmc_27'\n", "pdb_path = pathlib.Path(f\"assets/of3_tyk2_output/{ligand_name}/seed_42/{ligand_name}_seed_42_sample_1_model.pdb\")\n", "\n", - "pdb_universe = mda.Universe(pdb_path)\n", - "\n", - "print(f\"Extracting protein and ligand from {pdb_path.name}\")\n", - "aligned_ligand = pdb_universe.select_atoms(\"resname LIG\")\n", - "aligned_ligand.write(f'{output_dir}/{ligand_name}.pdb')\n", + "protein, ligand = extract_protein_ligand(pdb_path)\n", "\n", - "# load back into rdkit to add hydrogens\n", - "rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand_name}.pdb', removeHs=True)\n", + "protein.write(f'{output_dir}/protein.pdb')\n", + "ligand.write(f'{output_dir}/{ligand_name}.pdb')\n", "\n", - "# use the template to assign bond orders\n", - "template_mol = Chem.MolFromSmiles(ligands_dict[ligand_name])\n", - "with rdBase.BlockLogs(): \n", - " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", - "# Add hydrogens\n", - "rdkit_mol = AllChem.AddHs(rdkit_mol, addCoords=True)\n", - "# Set the molecule name\n", - "rdkit_mol.SetProp('_Name', f\"{ligand_name}\")\n", - "# write to sdf\n", - "ligand_prepped_path = output_dir / f\"{ligand_name}_prepped.sdf\"\n", - "Chem.MolToMolFile(rdkit_mol, ligand_prepped_path)\n", - "\n", - "# save the protein alone\n", - "full_protein = pdb_universe.select_atoms(\"protein\")\n", - "full_protein.write(f'{output_dir}/protein.pdb')" + "prepped_ligand_path = output_dir / f\"{ligand_name}_prepped.sdf\"\n", + "prep_ligand(\n", + " output_dir/f\"{ligand_name}.pdb\",\n", + " prepped_ligand_path,\n", + " ligand_name,\n", + " ligand_smiles[ligand_name]\n", + ")" ] }, { "cell_type": "markdown", "id": "30816423-6c25-47bb-a90c-4870e85567c1", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -556,10 +569,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "id": "ea82c47d-9794-424c-8d27-a9c6e69d29e8", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -575,7 +587,6 @@ "cell_type": "markdown", "id": "3072cbd5-e273-4d44-aff4-e3c94bc53476", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -594,7 +605,6 @@ "cell_type": "markdown", "id": "93d67ad4-6c06-4555-8760-06294e45f05f", "metadata": { - "editable": true, "slideshow": { "slide_type": "" }, @@ -608,7 +618,6 @@ "cell_type": "markdown", "id": "eaa991f1-3ecf-4f15-b637-4538a0078b7e", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -620,10 +629,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "id": "97da58c4-b4da-478a-918a-a487e5c7317b", "metadata": { - "editable": true, "slideshow": { "slide_type": "" }, @@ -638,7 +646,6 @@ "cell_type": "markdown", "id": "ca1b4341-f636-45d8-9b20-ed313cc95213", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -650,10 +657,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "88bbbbca-4f6a-4496-bea9-f621ffd8183e", "metadata": { - "editable": true, "slideshow": { "slide_type": "" }, @@ -666,7 +672,7 @@ "ProteinComponent(name=tyk2)" ] }, - "execution_count": 8, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -680,7 +686,6 @@ "cell_type": "markdown", "id": "b1b544a9-9b92-43f3-8b88-7af9205621b5", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -692,10 +697,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "id": "c4dca30b-bafb-4d03-80c4-83684655ddcf", "metadata": { - "editable": true, "slideshow": { "slide_type": "" }, @@ -703,14 +707,13 @@ }, "outputs": [], "source": [ - "ligand = openfe.SmallMoleculeComponent.from_sdf_file(ligand_prepped_path)" + "ligand = openfe.SmallMoleculeComponent.from_sdf_file(prepped_ligand_path)" ] }, { "cell_type": "markdown", "id": "f0cd4185-3491-4bcb-9b4d-d160d84ad40e", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -722,10 +725,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", "metadata": { - "editable": true, "slideshow": { "slide_type": "" }, @@ -736,7 +738,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.72it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.68it/s]\n" ] } ], @@ -762,7 +764,6 @@ "cell_type": "markdown", "id": "4d11803b-6d4b-4507-8c98-6ff40f75680e", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -774,10 +775,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "id": "30373ee0-d777-4828-b89a-5a8fdbc56c41", "metadata": { - "editable": true, "slideshow": { "slide_type": "" }, @@ -790,7 +790,7 @@ "SolventComponent(name=O, Na+, Cl-)" ] }, - "execution_count": 11, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -804,7 +804,6 @@ "cell_type": "markdown", "id": "e1ef09d2-ec8b-4577-8510-c67cb89fc5b5", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -818,7 +817,6 @@ "cell_type": "markdown", "id": "695c61c4-3fa6-4e1a-939f-5349e6829627", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -830,10 +828,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "id": "987a1657-82d0-4310-9fe7-4eecd289632a", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -875,7 +872,6 @@ "cell_type": "markdown", "id": "e32fb4ef-dbf5-4a9a-90c4-b64d9e5af6ce", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -887,24 +883,15 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "id": "037cb959-8f0c-4a09-844a-30e39590eabf", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ERROR! Session/line number was not unique in database. History logging moved to new session 13\n" - ] - } - ], + "outputs": [], "source": [ "from openfe.protocols.openmm_afe import AbsoluteBindingProtocol\n", "\n", @@ -917,7 +904,6 @@ "cell_type": "markdown", "id": "6bf8af4c-9894-4af3-84f8-2ed3830120ad", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -929,10 +915,9 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "id": "ef7a9ebf-e0d7-4dda-aac5-d4428b120814", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -953,7 +938,6 @@ "cell_type": "markdown", "id": "34ec9c8d-cb7f-4cad-9794-b73629a11246", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -967,7 +951,6 @@ "cell_type": "markdown", "id": "df8cb66d-c201-4a22-b87a-a1e5501d4be4", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -981,7 +964,6 @@ "cell_type": "markdown", "id": "9dd96548-7190-4851-b1ed-fb2d8c1bd87b", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1006,7 +988,6 @@ "cell_type": "markdown", "id": "02a82dbd-5a01-43c5-af33-654b706a5721", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1022,10 +1003,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "id": "c7b239c1-eaf3-466e-84ef-0700eab300e6", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1081,7 +1061,7 @@ " # now load back with rdkit\n", " rdkit_mol = Chem.MolFromPDBFile(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", " # now use a template from the SMILES definitions to make sure the bond orders are correct\n", - " template_mol = Chem.MolFromSmiles(ligands_dict[ligand_name])\n", + " template_mol = Chem.MolFromSmiles(ligand_smiles[ligand_name])\n", " # don't show rdkit's \"WARNING: More than one matching pattern found - picking one\" for every ligand\n", " with rdBase.BlockLogs(): \n", " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", @@ -1098,7 +1078,6 @@ "cell_type": "markdown", "id": "193dc76a-6e43-4e25-8b9d-5c0e4a79c3e9", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1112,10 +1091,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "id": "26c10e11-f001-44e5-87a4-2939ead048a8", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1162,7 +1140,7 @@ " # load back into rdkit to add hydrogens\n", " rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand}.pdb', removeHs=True)\n", " # use the template to assign bond orders\n", - " template_mol = Chem.MolFromSmiles(ligands_dict[ligand])\n", + " template_mol = Chem.MolFromSmiles(ligand_smiles[ligand])\n", " with rdBase.BlockLogs(): \n", " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", " # Add hydrogens\n", @@ -1182,7 +1160,6 @@ "cell_type": "markdown", "id": "6bf56d93-222a-4651-b8cf-f451f0360878", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1196,25 +1173,15 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 20, "id": "fdfd428e-42af-49d3-9857-7a1b086f9ab2", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.13/pty.py:95: DeprecationWarning: This process (pid=5400) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", - " pid, fd = os.forkpty()\n" - ] - } - ], + "outputs": [], "source": [ "# now run the reference protein through pdbfixer\n", "! pdbfixer openfold_to_openfe/p_aligned/protein.pdb --add-atoms=all --add-residues --output=openfold_to_openfe/p_aligned/protein_fixed.pdb" @@ -1224,7 +1191,6 @@ "cell_type": "markdown", "id": "1153dbd0-998a-4f3f-8e47-a950c806d1dd", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1236,10 +1202,9 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 21, "id": "992d53f3-d086-4283-9d6a-055be01588ad", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1250,7 +1215,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.78it/s]\n" + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.73it/s]\n" ] } ], @@ -1285,7 +1250,6 @@ "cell_type": "markdown", "id": "cc023ddb-d32a-4f78-bea1-a4f9efddf902", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1299,7 +1263,6 @@ "cell_type": "markdown", "id": "97f84495-88c8-49fe-987f-25ca25cdf210", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1313,7 +1276,6 @@ "cell_type": "markdown", "id": "a90d2205-1c68-4349-95b1-e20f607d4a86", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1325,10 +1287,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "id": "7ad01abd-097c-466d-9a3f-74a67e4d9015", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1342,10 +1303,9 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "id": "71d4ff18-a837-443d-bc02-69554e7d76cf", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1374,7 +1334,6 @@ "cell_type": "markdown", "id": "54484f2f-347b-498e-b5e2-60e8c8db446a", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1386,10 +1345,9 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "id": "3e343c11-b693-4700-b1ea-2fa7951afa88", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1406,10 +1364,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 25, "id": "a531a0cb-3eda-4d25-89d8-347f470d40ea", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1430,7 +1387,6 @@ "cell_type": "markdown", "id": "db4344c5-c300-4b6e-aa0a-a7cae9c6380f", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1444,7 +1400,6 @@ "cell_type": "markdown", "id": "6e16e781-c6dc-4a62-85a7-0bc59678e916", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1460,7 +1415,6 @@ "cell_type": "markdown", "id": "884c5615-b2d4-4dde-b949-7760733ec10a", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1469,17 +1423,16 @@ "source": [ "Finally we create a Hybrid Topology RBFE Transformation.\n", "\n", - "In addition to aligning the protein structures, \n", + "In addition to aligning the protein structures, we must also align the ligands.\n", "\n", "Again, as per the SepTop example above, we will do the transformation between `lig_jmc_27` and `lig_ejm_46`." ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 26, "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1529,7 +1482,7 @@ " # now load back with rdkit\n", " rdkit_mol = Chem.MolFromPDBFile(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", " # now use a template from the SMILES definitions to make sure the bond orders are correct\n", - " template_mol = Chem.MolFromSmiles(ligands_dict[ligand_name])\n", + " template_mol = Chem.MolFromSmiles(ligand_smiles[ligand_name])\n", " # don't show rdkit's \"WARNING: More than one matching pattern found - picking one\" for every ligand\n", " with rdBase.BlockLogs(): \n", " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", @@ -1544,10 +1497,9 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 27, "id": "31d18f6d-b938-4de3-9b2f-3c6e9bedd827", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1563,7 +1515,6 @@ "cell_type": "markdown", "id": "dfbf86dd-1162-4cf5-998a-2b2c01e6080c", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1577,7 +1528,6 @@ "cell_type": "markdown", "id": "eb09cf7b-e9e9-4f98-b9a5-7f6cfc9c146b", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1592,10 +1542,9 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 28, "id": "b5186710-f89e-4c86-998f-4e9fe076a2d8", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1614,7 +1563,6 @@ "cell_type": "markdown", "id": "d8617ab9-77c3-4103-a9fe-233262f19b74", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1626,10 +1574,9 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 29, "id": "c8db1e94-c146-4daf-bdb2-4383b4fcd0d6", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1659,7 +1606,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "" ] @@ -1680,7 +1627,6 @@ "cell_type": "markdown", "id": "aeb15ac9-9999-4bb9-b5e3-bda5dda01dc9", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1692,10 +1638,9 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 30, "id": "7d3c436c-fd93-4a3e-9933-e43b00783931", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1722,10 +1667,9 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 31, "id": "b161b5b6-7718-4a47-b834-e3d88082bb31", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1752,7 +1696,6 @@ "cell_type": "markdown", "id": "fe4f8dd1-ffdc-4167-97ca-a24b86002613", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1764,10 +1707,9 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 32, "id": "3bbd3d6d-35f0-490f-8fdd-4debc7874e23", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1794,7 +1736,6 @@ "cell_type": "markdown", "id": "9030db1c-35fe-4213-930c-b967832d9c7d", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1806,10 +1747,9 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 33, "id": "8b374e77-64fb-48a1-b9ae-9b1dba74ebb5", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1838,7 +1778,6 @@ "cell_type": "markdown", "id": "f08aaff4-97d0-4f53-bb32-1c7e247432aa", "metadata": { - "editable": true, "slideshow": { "slide_type": "fragment" }, @@ -1852,7 +1791,6 @@ "cell_type": "markdown", "id": "6cae5156-f80f-4520-baee-4199774d441a", "metadata": { - "editable": true, "slideshow": { "slide_type": "slide" }, @@ -1882,7 +1820,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.13" + "version": "3.11.15" }, "widgets": { "application/vnd.jupyter.widget-state+json": { From af0f12e1b9ebb723668ed6e699713c624bf27123 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Wed, 6 May 2026 17:31:29 +0200 Subject: [PATCH 13/15] cleaning up functions --- cookbook/openfold3_to_openfe.ipynb | 156 ++++++++++++++--------------- 1 file changed, 77 insertions(+), 79 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index 5cc1f51..cf03a70 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -126,7 +126,8 @@ "source": [ "import warnings\n", "# don't show warnings that are expected and not an issue\n", - "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") " + "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") \n", + "from typing import Iterable" ] }, { @@ -485,7 +486,6 @@ "outputs": [], "source": [ "def extract_protein_ligand(pdb_path:pathlib.Path)->(AtomGroup, AtomGroup):\n", - " print(f\"Extracting protein and ligand from {pdb_path.name}\")\n", " pdb_universe = mda.Universe(pdb_path)\n", " protein = pdb_universe.select_atoms(\"protein\")\n", " ligand = pdb_universe.select_atoms(\"resname LIG\")\n", @@ -510,7 +510,7 @@ " \n", " # write to sdf\n", " Chem.MolToMolFile(rdkit_mol, sdf_out)\n", - " print(f\"written to {sdf_out}\")" + " print(f\"Prepared ligand written to {sdf_out}\")" ] }, { @@ -528,9 +528,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Extracting protein and ligand from lig_jmc_27_seed_42_sample_1_model.pdb\n", "Preparing lig_jmc_27\n", - "written to openfold_to_openfe/abfe_prep/lig_jmc_27_prepped.sdf\n" + "Prepared ligand written to openfold_to_openfe/abfe_prep/lig_jmc_27_prepped.sdf\n" ] } ], @@ -697,7 +696,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "id": "c4dca30b-bafb-4d03-80c4-83684655ddcf", "metadata": { "slideshow": { @@ -725,7 +724,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "id": "0b78ec14-9ef9-4068-84ab-3271e6780d40", "metadata": { "slideshow": { @@ -738,7 +737,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.68it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.72it/s]\n" ] } ], @@ -775,7 +774,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "id": "30373ee0-d777-4828-b89a-5a8fdbc56c41", "metadata": { "slideshow": { @@ -790,7 +789,7 @@ "SolventComponent(name=O, Na+, Cl-)" ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -828,7 +827,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "id": "987a1657-82d0-4310-9fe7-4eecd289632a", "metadata": { "slideshow": { @@ -883,7 +882,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "id": "037cb959-8f0c-4a09-844a-30e39590eabf", "metadata": { "slideshow": { @@ -915,7 +914,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "id": "ef7a9ebf-e0d7-4dda-aac5-d4428b120814", "metadata": { "slideshow": { @@ -1003,7 +1002,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "id": "c7b239c1-eaf3-466e-84ef-0700eab300e6", "metadata": { "slideshow": { @@ -1016,18 +1015,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "Extracting ligand from lig_ejm_50_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_jmc_23_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_43_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_42_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_31_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_47_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_46_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_48_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_jmc_28_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_50_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_jmc_23_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_43_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_42_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_31_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_47_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_46_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_48_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_jmc_28_seed_42_sample_1_model.pdb\n", "\n", - "Largest ligand is lig_jmc_27 with volume 0.5209626577896912\n" + "Largest ligand_name is lig_jmc_27 with volume 0.5209626577896912\n" ] } ], @@ -1044,34 +1043,33 @@ "\n", "# gather all the complexes and align to a single structure\n", "# which has the largest ligand by volume \n", - "of_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", - "\n", - "# load all the output pdbs and calculate ligand volumes\n", - "ligand_volumes = {}\n", - "\n", - "for output_file in of_results_root.glob(\"*/*/*.pdb\"):\n", - " ligand_name = output_file.name.split('_seed')[0]\n", - " print(f\"Extracting ligand from {output_file.name}\")\n", - " with warnings.catch_warnings(): \n", - " warnings.simplefilter(\"ignore\")\n", - " u = mda.Universe(str(output_file))\n", - " ligand = u.select_atoms(\"resname LIG\")\n", - " # write the ligand to a temporary file\n", - " ligand.write(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"))\n", - " # now load back with rdkit\n", - " rdkit_mol = Chem.MolFromPDBFile(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", - " # now use a template from the SMILES definitions to make sure the bond orders are correct\n", - " template_mol = Chem.MolFromSmiles(ligand_smiles[ligand_name])\n", - " # don't show rdkit's \"WARNING: More than one matching pattern found - picking one\" for every ligand\n", - " with rdBase.BlockLogs(): \n", - " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", - " # calculate the volume\n", - " vsa = Asphericity(rdkit_mol)\n", - " ligand_volumes[ligand_name] = vsa\n", - "\n", - "# find the ligand with the largest volume\n", - "largest_ligand = max(ligand_volumes, key=ligand_volumes.get)\n", - "print(f\"\\nLargest ligand is {largest_ligand} with volume {ligand_volumes[largest_ligand]}\")" + "of3_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", + "\n", + "\n", + "def find_largest_ligand(ligand_sdfs:Iterable[pathlib.Path])->(str,float):\n", + " # load all the output pdbs and calculate ligand volumes\n", + " ligand_volumes = {}\n", + " for lig_sdf in ligand_sdfs:\n", + " ligand_name = lig_sdf.name.split('_seed')[0]\n", + " print(f\"Calculating volume of {lig_sdf.name}\")\n", + " _, ligand = extract_protein_ligand(lig_sdf)\n", + " # write the ligand to a temporary file\n", + " ligand.write(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"))\n", + " # now load back with rdkit\n", + " rdkit_mol = Chem.MolFromPDBFile(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", + " # now use a template from the SMILES definitions to make sure the bond orders are correct\n", + " template_mol = Chem.MolFromSmiles(ligand_smiles[ligand_name])\n", + " # don't show rdkit's \"WARNING: More than one matching pattern found - picking one\" for every ligand\n", + " with rdBase.BlockLogs(): \n", + " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", + " # calculate the volume\n", + " vsa = Asphericity(rdkit_mol)\n", + " ligand_volumes[ligand_name] = vsa\n", + " largest_ligand = max(ligand_volumes, key=ligand_volumes.get)\n", + " return largest_ligand, ligand_volumes[largest_ligand]\n", + " \n", + "largest_ligand, largest_vol= find_largest_ligand(of3_results_root.glob(\"*/*/*.pdb\"))\n", + "print(f\"\\nLargest ligand_name is {largest_ligand} with volume {largest_vol}\")" ] }, { @@ -1091,7 +1089,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "id": "26c10e11-f001-44e5-87a4-2939ead048a8", "metadata": { "slideshow": { @@ -1118,15 +1116,15 @@ } ], "source": [ - "reference_pdb = pathlib.Path(of_results_root, largest_ligand, \"seed_42\", f\"{largest_ligand}_seed_42_sample_1_model.pdb\")\n", - "other_pdbs = of_results_root.glob(\"*/*/*_seed_42_sample_1_model.pdb\")\n", + "reference_pdb = pathlib.Path(of3_results_root, largest_ligand, \"seed_42\", f\"{largest_ligand}_seed_42_sample_1_model.pdb\")\n", + "other_pdbs = of3_results_root.glob(\"*/*/*_seed_42_sample_1_model.pdb\")\n", "output_dir = pathlib.Path(\"openfold_to_openfe/p_aligned/\")\n", "output_dir.mkdir(exist_ok=True)\n", "\n", "ref = mda.Universe(reference_pdb)\n", "for pdb in other_pdbs:\n", " print(f\"Aligning {pdb.name} to {reference_pdb.name}\")\n", - " ligand = pdb.name.split('_seed')[0]\n", + " ligand_name = pdb.name.split('_seed')[0]\n", " mob = mda.Universe(pdb)\n", "\n", " # Align mobile → reference using protein backbone\n", @@ -1136,19 +1134,19 @@ " # Perform alignment in-place\n", " align.alignto(mob_prot, ref_prot)\n", " aligned_ligand = mob.select_atoms(\"resname LIG\")\n", - " aligned_ligand.write(f'{output_dir}/{ligand}.pdb')\n", + " aligned_ligand.write(f'{output_dir}/{ligand_name}.pdb')\n", " # load back into rdkit to add hydrogens\n", - " rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand}.pdb', removeHs=True)\n", + " rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand_name}.pdb', removeHs=True)\n", " # use the template to assign bond orders\n", - " template_mol = Chem.MolFromSmiles(ligand_smiles[ligand])\n", + " template_mol = Chem.MolFromSmiles(ligand_smiles[ligand_name])\n", " with rdBase.BlockLogs(): \n", " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", " # Add hydrogens\n", " rdkit_mol = AllChem.AddHs(rdkit_mol, addCoords=True)\n", " # Set the molecule name\n", - " rdkit_mol.SetProp('_Name', f\"{ligand}\")\n", + " rdkit_mol.SetProp('_Name', f\"{ligand_name}\")\n", " # write to sdf\n", - " Chem.MolToMolFile(rdkit_mol, output_dir / f\"{ligand}_prepped.sdf\")\n", + " Chem.MolToMolFile(rdkit_mol, output_dir / f\"{ligand_name}_prepped.sdf\")\n", "\n", " # For the reference pdb, save the protein alone\n", " if pdb.name.split('_seed')[0] == largest_ligand:\n", @@ -1173,7 +1171,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "id": "fdfd428e-42af-49d3-9857-7a1b086f9ab2", "metadata": { "slideshow": { @@ -1202,7 +1200,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "id": "992d53f3-d086-4283-9d6a-055be01588ad", "metadata": { "slideshow": { @@ -1215,7 +1213,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.73it/s]\n" + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.79it/s]\n" ] } ], @@ -1287,7 +1285,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "id": "7ad01abd-097c-466d-9a3f-74a67e4d9015", "metadata": { "slideshow": { @@ -1303,7 +1301,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "id": "71d4ff18-a837-443d-bc02-69554e7d76cf", "metadata": { "slideshow": { @@ -1345,7 +1343,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "id": "3e343c11-b693-4700-b1ea-2fa7951afa88", "metadata": { "slideshow": { @@ -1364,7 +1362,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "id": "a531a0cb-3eda-4d25-89d8-347f470d40ea", "metadata": { "slideshow": { @@ -1430,7 +1428,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", "metadata": { "slideshow": { @@ -1464,13 +1462,13 @@ "\n", "# gather all the complexes and align to a single structure\n", "# which has the largest ligand by volume \n", - "of_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", + "of3_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", "tmp_ligand_dir = pathlib.Path(output_root,\"temp_ligands\")\n", "tmp_ligand_dir.mkdir(exist_ok=True,parents=True)\n", "# load all the output pdbs and calculate ligand volumes\n", "ligand_volumes = {}\n", "\n", - "for output_file in of_results_root.glob(\"*/*/*.pdb\"):\n", + "for output_file in of3_results_root.glob(\"*/*/*.pdb\"):\n", " ligand_name = output_file.name.split('_seed')[0]\n", " print(f\"Extracting ligand from {output_file.name}\")\n", " with warnings.catch_warnings(): \n", @@ -1497,7 +1495,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "id": "31d18f6d-b938-4de3-9b2f-3c6e9bedd827", "metadata": { "slideshow": { @@ -1542,7 +1540,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "id": "b5186710-f89e-4c86-998f-4e9fe076a2d8", "metadata": { "slideshow": { @@ -1574,7 +1572,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "id": "c8db1e94-c146-4daf-bdb2-4383b4fcd0d6", "metadata": { "slideshow": { @@ -1638,7 +1636,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "id": "7d3c436c-fd93-4a3e-9933-e43b00783931", "metadata": { "slideshow": { @@ -1667,7 +1665,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "id": "b161b5b6-7718-4a47-b834-e3d88082bb31", "metadata": { "slideshow": { @@ -1707,7 +1705,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "id": "3bbd3d6d-35f0-490f-8fdd-4debc7874e23", "metadata": { "slideshow": { @@ -1747,7 +1745,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "id": "8b374e77-64fb-48a1-b9ae-9b1dba74ebb5", "metadata": { "slideshow": { From 982322a200c7326404b7e6900f850e8e63d93899 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Wed, 6 May 2026 17:49:23 +0200 Subject: [PATCH 14/15] protein alignment function --- cookbook/openfold3_to_openfe.ipynb | 219 +++++++++++++++++------------ 1 file changed, 126 insertions(+), 93 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index cf03a70..7f7efab 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -458,8 +458,8 @@ "\n", "output_root = pathlib.Path(\"openfold_to_openfe\")\n", "\n", - "output_dir = pathlib.Path(output_root, \"abfe_prep/\")\n", - "output_dir.mkdir(exist_ok=True, parents=True)\n", + "abfe_out_dir = pathlib.Path(output_root, \"abfe_prep/\")\n", + "abfe_out_dir.mkdir(exist_ok=True, parents=True)\n", "\n", "tmp_ligand_dir = pathlib.Path(output_root, \"temp_ligands\")\n", "tmp_ligand_dir.mkdir(exist_ok=True)" @@ -539,12 +539,12 @@ "\n", "protein, ligand = extract_protein_ligand(pdb_path)\n", "\n", - "protein.write(f'{output_dir}/protein.pdb')\n", - "ligand.write(f'{output_dir}/{ligand_name}.pdb')\n", + "protein.write(f'{abfe_out_dir}/protein.pdb')\n", + "ligand.write(f'{abfe_out_dir}/{ligand_name}.pdb')\n", "\n", - "prepped_ligand_path = output_dir / f\"{ligand_name}_prepped.sdf\"\n", + "prepped_ligand_path = abfe_out_dir / f\"{ligand_name}_prepped.sdf\"\n", "prep_ligand(\n", - " output_dir/f\"{ligand_name}.pdb\",\n", + " abfe_out_dir/f\"{ligand_name}.pdb\",\n", " prepped_ligand_path,\n", " ligand_name,\n", " ligand_smiles[ligand_name]\n", @@ -737,7 +737,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.72it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.80it/s]\n" ] } ], @@ -973,12 +973,12 @@ "\n", "a) Choosing a reference protein structure which will be used for all binding affinity predictions\n", "\n", - " - This is necessary for RBFE simulations, where a single structure must be kept constant throughout the transformations. Note that for ABFE simulations, this step can be avoided.\n", + " - This is necessary for RBFE simulations, where a single structure must be kept constant throughout the transformations.\n", " - For the sake of this demonstration, we will be choosing the predicted structure that is bound to the ligand occupying the largest volume. The idea here being that hopefully the binding site of that structure can accomodate all the other ligands. We note that in practice this is not always true.\n", "\n", "b) Aligning the structures to the reference & extracting the necessary structures\n", "\n", - " - This is so that we can extract the ligands and use them with the chosen structure.\n", + " - This is so that we can extract the ligands from all predictions and use them with the chosen reference structure.\n", "\n", "c) Fixing & protonating the reference protein structure, as we did above for the ABFE protein structure.\n" ] @@ -1010,26 +1010,7 @@ }, "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Calculating volume of lig_ejm_50_seed_42_sample_1_model.pdb\n", - "Calculating volume of lig_jmc_23_seed_42_sample_1_model.pdb\n", - "Calculating volume of lig_ejm_43_seed_42_sample_1_model.pdb\n", - "Calculating volume of lig_ejm_42_seed_42_sample_1_model.pdb\n", - "Calculating volume of lig_ejm_31_seed_42_sample_1_model.pdb\n", - "Calculating volume of lig_ejm_47_seed_42_sample_1_model.pdb\n", - "Calculating volume of lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Calculating volume of lig_ejm_46_seed_42_sample_1_model.pdb\n", - "Calculating volume of lig_ejm_48_seed_42_sample_1_model.pdb\n", - "Calculating volume of lig_jmc_28_seed_42_sample_1_model.pdb\n", - "\n", - "Largest ligand_name is lig_jmc_27 with volume 0.5209626577896912\n" - ] - } - ], + "outputs": [], "source": [ "import pathlib\n", "import MDAnalysis as mda\n", @@ -1038,16 +1019,8 @@ "from rdkit.Chem.Descriptors3D import Asphericity\n", "import warnings\n", "\n", - "# don't show warnings that are expected and not an issue\n", - "warnings.filterwarnings(action=\"ignore\", message=r\"Unit cell dimensions not found\") \n", - "\n", - "# gather all the complexes and align to a single structure\n", - "# which has the largest ligand by volume \n", - "of3_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", - "\n", - "\n", "def find_largest_ligand(ligand_sdfs:Iterable[pathlib.Path])->(str,float):\n", - " # load all the output pdbs and calculate ligand volumes\n", + " \"\"\"gather all the complexes and align to a single structure which has the largest ligand by volume\"\"\"\n", " ligand_volumes = {}\n", " for lig_sdf in ligand_sdfs:\n", " ligand_name = lig_sdf.name.split('_seed')[0]\n", @@ -1066,10 +1039,56 @@ " vsa = Asphericity(rdkit_mol)\n", " ligand_volumes[ligand_name] = vsa\n", " largest_ligand = max(ligand_volumes, key=ligand_volumes.get)\n", - " return largest_ligand, ligand_volumes[largest_ligand]\n", - " \n", + " return largest_ligand, ligand_volumes[largest_ligand]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "eb57e727-60f0-4945-861a-56032817f309", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Calculating volume of lig_ejm_50_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_jmc_23_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_43_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_42_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_31_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_47_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_46_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_48_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_jmc_28_seed_42_sample_1_model.pdb\n", + "\n", + "Largest ligand_name is lig_jmc_27 with volume 0.521\n" + ] + } + ], + "source": [ + "of3_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", "largest_ligand, largest_vol= find_largest_ligand(of3_results_root.glob(\"*/*/*.pdb\"))\n", - "print(f\"\\nLargest ligand_name is {largest_ligand} with volume {largest_vol}\")" + "print(f\"\\nLargest ligand_name is {largest_ligand} with volume {largest_vol:.3f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "5c7639ea-8081-4bc1-bf67-2afc1f495230", + "metadata": {}, + "source": [ + "Choose the corresponding protein as the reference protein" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "a18f49cb-a504-410b-8d49-481d272666f3", + "metadata": {}, + "outputs": [], + "source": [ + "reference_pdb = pathlib.Path(of3_results_root, largest_ligand, \"seed_42\", f\"{largest_ligand}_seed_42_sample_1_model.pdb\")" ] }, { @@ -1089,7 +1108,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 20, "id": "26c10e11-f001-44e5-87a4-2939ead048a8", "metadata": { "slideshow": { @@ -1097,6 +1116,49 @@ }, "tags": [] }, + "outputs": [], + "source": [ + "def align_proteins_to_ref(all_pdbs, ref_pdb, out_dir):\n", + " ref_u = mda.Universe(reference_pdb)\n", + " ref_prot = ref_u.select_atoms(\"protein and backbone\")\n", + " for pdb in all_pdbs:\n", + " print(f\"Aligning {pdb.name} to {reference_pdb.name}\")\n", + " ligand_name = pdb.name.split('_seed')[0]\n", + " mobile_u = mda.Universe(pdb)\n", + " \n", + " # Align mobile → reference using protein backbone\n", + " mobile_protein = mobile_u.select_atoms(\"protein and backbone\")\n", + " \n", + " # Perform alignment in-place\n", + " align.alignto(mobile_protein, ref_prot)\n", + " aligned_ligand = mobile_u.select_atoms(\"resname LIG\")\n", + " aligned_ligand.write(f'{out_dir}/{ligand_name}.pdb')\n", + " # load back into rdkit to add hydrogens\n", + " rdkit_mol = Chem.MolFromPDBFile(f'{out_dir}/{ligand_name}.pdb', removeHs=True)\n", + " # use the template to assign bond orders\n", + " template_mol = Chem.MolFromSmiles(ligand_smiles[ligand_name])\n", + " with rdBase.BlockLogs(): \n", + " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", + " # Add hydrogens\n", + " rdkit_mol = AllChem.AddHs(rdkit_mol, addCoords=True)\n", + " # Set the molecule name\n", + " rdkit_mol.SetProp('_Name', f\"{ligand_name}\")\n", + " # write to sdf\n", + " Chem.MolToMolFile(rdkit_mol, out_dir / f\"{ligand_name}_prepped.sdf\")\n", + " \n", + " # For the reference pdb, save the protein alone\n", + " if pdb.name.split('_seed')[0] == largest_ligand:\n", + " full_protein = mobile_u.select_atoms(\"protein\")\n", + " full_protein.write(f'{out_dir}/protein.pdb')\n", + " \n", + " print(f\"\\nStructures aligned and written to {out_dir}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "73573473-ad11-423c-9b9f-bef57a5046ac", + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1111,47 +1173,18 @@ "Aligning lig_jmc_27_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", "Aligning lig_ejm_46_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", "Aligning lig_ejm_48_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Aligning lig_jmc_28_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n" + "Aligning lig_jmc_28_seed_42_sample_1_model.pdb to lig_jmc_27_seed_42_sample_1_model.pdb\n", + "\n", + "Structures aligned and written to openfold_to_openfe/p_aligned\n" ] } ], "source": [ - "reference_pdb = pathlib.Path(of3_results_root, largest_ligand, \"seed_42\", f\"{largest_ligand}_seed_42_sample_1_model.pdb\")\n", - "other_pdbs = of3_results_root.glob(\"*/*/*_seed_42_sample_1_model.pdb\")\n", - "output_dir = pathlib.Path(\"openfold_to_openfe/p_aligned/\")\n", - "output_dir.mkdir(exist_ok=True)\n", - "\n", - "ref = mda.Universe(reference_pdb)\n", - "for pdb in other_pdbs:\n", - " print(f\"Aligning {pdb.name} to {reference_pdb.name}\")\n", - " ligand_name = pdb.name.split('_seed')[0]\n", - " mob = mda.Universe(pdb)\n", - "\n", - " # Align mobile → reference using protein backbone\n", - " ref_prot = ref.select_atoms(\"protein and backbone\")\n", - " mob_prot = mob.select_atoms(\"protein and backbone\")\n", - " \n", - " # Perform alignment in-place\n", - " align.alignto(mob_prot, ref_prot)\n", - " aligned_ligand = mob.select_atoms(\"resname LIG\")\n", - " aligned_ligand.write(f'{output_dir}/{ligand_name}.pdb')\n", - " # load back into rdkit to add hydrogens\n", - " rdkit_mol = Chem.MolFromPDBFile(f'{output_dir}/{ligand_name}.pdb', removeHs=True)\n", - " # use the template to assign bond orders\n", - " template_mol = Chem.MolFromSmiles(ligand_smiles[ligand_name])\n", - " with rdBase.BlockLogs(): \n", - " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", - " # Add hydrogens\n", - " rdkit_mol = AllChem.AddHs(rdkit_mol, addCoords=True)\n", - " # Set the molecule name\n", - " rdkit_mol.SetProp('_Name', f\"{ligand_name}\")\n", - " # write to sdf\n", - " Chem.MolToMolFile(rdkit_mol, output_dir / f\"{ligand_name}_prepped.sdf\")\n", + "p_aligned_dir = pathlib.Path(\"openfold_to_openfe/p_aligned/\")\n", + "p_aligned_dir.mkdir(exist_ok=True)\n", "\n", - " # For the reference pdb, save the protein alone\n", - " if pdb.name.split('_seed')[0] == largest_ligand:\n", - " full_protein = mob.select_atoms(\"protein\")\n", - " full_protein.write(f'{output_dir}/protein.pdb')" + "all_pdbs = of3_results_root.glob(\"*/*/*_seed_42_sample_1_model.pdb\")\n", + "align_proteins_to_ref(all_pdbs, reference_pdb, p_aligned_dir)" ] }, { @@ -1171,7 +1204,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "id": "fdfd428e-42af-49d3-9857-7a1b086f9ab2", "metadata": { "slideshow": { @@ -1200,7 +1233,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "id": "992d53f3-d086-4283-9d6a-055be01588ad", "metadata": { "slideshow": { @@ -1213,7 +1246,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.79it/s]\n" + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.78it/s]\n" ] } ], @@ -1285,7 +1318,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "id": "7ad01abd-097c-466d-9a3f-74a67e4d9015", "metadata": { "slideshow": { @@ -1301,7 +1334,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 25, "id": "71d4ff18-a837-443d-bc02-69554e7d76cf", "metadata": { "slideshow": { @@ -1343,7 +1376,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 26, "id": "3e343c11-b693-4700-b1ea-2fa7951afa88", "metadata": { "slideshow": { @@ -1362,7 +1395,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 27, "id": "a531a0cb-3eda-4d25-89d8-347f470d40ea", "metadata": { "slideshow": { @@ -1428,7 +1461,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 28, "id": "25ef33bf-fb1a-45da-96e4-004f77ef7d34", "metadata": { "slideshow": { @@ -1495,7 +1528,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 29, "id": "31d18f6d-b938-4de3-9b2f-3c6e9bedd827", "metadata": { "slideshow": { @@ -1540,7 +1573,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 30, "id": "b5186710-f89e-4c86-998f-4e9fe076a2d8", "metadata": { "slideshow": { @@ -1572,7 +1605,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 31, "id": "c8db1e94-c146-4daf-bdb2-4383b4fcd0d6", "metadata": { "slideshow": { @@ -1636,7 +1669,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 32, "id": "7d3c436c-fd93-4a3e-9933-e43b00783931", "metadata": { "slideshow": { @@ -1665,7 +1698,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 33, "id": "b161b5b6-7718-4a47-b834-e3d88082bb31", "metadata": { "slideshow": { @@ -1705,7 +1738,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 34, "id": "3bbd3d6d-35f0-490f-8fdd-4debc7874e23", "metadata": { "slideshow": { @@ -1745,7 +1778,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 35, "id": "8b374e77-64fb-48a1-b9ae-9b1dba74ebb5", "metadata": { "slideshow": { From 744b3ae26a82b9dcbd765e8f4558994268b61c5b Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Wed, 6 May 2026 17:54:16 +0200 Subject: [PATCH 15/15] clean up hybrid top cells --- cookbook/openfold3_to_openfe.ipynb | 71 ++++++++++-------------------- 1 file changed, 24 insertions(+), 47 deletions(-) diff --git a/cookbook/openfold3_to_openfe.ipynb b/cookbook/openfold3_to_openfe.ipynb index 7f7efab..2888ccc 100644 --- a/cookbook/openfold3_to_openfe.ipynb +++ b/cookbook/openfold3_to_openfe.ipynb @@ -737,7 +737,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.80it/s]\n" + "Generating charges: 100%|█████████████████████████| 1/1 [00:00<00:00, 1.84it/s]\n" ] } ], @@ -1246,7 +1246,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.78it/s]\n" + "Generating charges: 100%|███████████████████████| 10/10 [00:05<00:00, 1.81it/s]\n" ] } ], @@ -1456,7 +1456,7 @@ "\n", "In addition to aligning the protein structures, we must also align the ligands.\n", "\n", - "Again, as per the SepTop example above, we will do the transformation between `lig_jmc_27` and `lig_ejm_46`." + "We will again use the transformation between `lig_jmc_27` and `lig_ejm_46` as an example." ] }, { @@ -1474,56 +1474,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "Extracting ligand from lig_ejm_50_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_jmc_23_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_43_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_42_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_31_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_47_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_jmc_27_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_46_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_ejm_48_seed_42_sample_1_model.pdb\n", - "Extracting ligand from lig_jmc_28_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_50_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_jmc_23_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_43_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_42_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_31_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_47_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_jmc_27_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_46_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_ejm_48_seed_42_sample_1_model.pdb\n", + "Calculating volume of lig_jmc_28_seed_42_sample_1_model.pdb\n", "\n", - "Largest ligand is lig_jmc_27 with volume 0.5209626577896912\n" + "Largest ligand_name is lig_jmc_27 with volume 0.521\n" ] } ], "source": [ - "from MDAnalysis.analysis import align\n", - "from rdkit.Chem.Descriptors3D import Asphericity\n", - "\n", - "# gather all the complexes and align to a single structure\n", - "# which has the largest ligand by volume \n", "of3_results_root = pathlib.Path(\"assets/of3_tyk2_output/\")\n", - "tmp_ligand_dir = pathlib.Path(output_root,\"temp_ligands\")\n", - "tmp_ligand_dir.mkdir(exist_ok=True,parents=True)\n", - "# load all the output pdbs and calculate ligand volumes\n", - "ligand_volumes = {}\n", - "\n", - "for output_file in of3_results_root.glob(\"*/*/*.pdb\"):\n", - " ligand_name = output_file.name.split('_seed')[0]\n", - " print(f\"Extracting ligand from {output_file.name}\")\n", - " with warnings.catch_warnings(): \n", - " warnings.simplefilter(\"ignore\")\n", - " u = mda.Universe(str(output_file))\n", - " ligand = u.select_atoms(\"resname LIG\")\n", - " # write the ligand to a temporary file\n", - " ligand.write(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"))\n", - " # now load back with rdkit\n", - " rdkit_mol = Chem.MolFromPDBFile(str(tmp_ligand_dir / f\"{ligand_name}.pdb\"), removeHs=True)\n", - " # now use a template from the SMILES definitions to make sure the bond orders are correct\n", - " template_mol = Chem.MolFromSmiles(ligand_smiles[ligand_name])\n", - " # don't show rdkit's \"WARNING: More than one matching pattern found - picking one\" for every ligand\n", - " with rdBase.BlockLogs(): \n", - " rdkit_mol = AllChem.AssignBondOrdersFromTemplate(template_mol, rdkit_mol)\n", - " # calculate the volume\n", - " vsa = Asphericity(rdkit_mol)\n", - " ligand_volumes[ligand_name] = vsa\n", - "\n", - "# find the ligand with the largest volume\n", - "largest_ligand = max(ligand_volumes, key=ligand_volumes.get)\n", - "print(f\"\\nLargest ligand is {largest_ligand} with volume {ligand_volumes[largest_ligand]}\")" + "largest_ligand, largest_vol= find_largest_ligand(of3_results_root.glob(\"*/*/*.pdb\"))\n", + "print(f\"\\nLargest ligand_name is {largest_ligand} with volume {largest_vol:.3f}\")\n" ] }, { @@ -1833,6 +1802,14 @@ "In practice, one would create entire network of Transformations, and then run all the simulations.\n", "This notebook will not cover these aspects. To find out more about this, please see the [OpenFE Tutorials](https://docs.openfree.energy/en/latest/tutorials/index.html)." ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fab60c32-e717-43b3-b8e7-81d2e2aaa9c9", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {