In [1]:
from dotenv import load_dotenv
load_dotenv()
Out[1]:
True
In [2]:
%load_ext autoreload
%autoreload 2

Docking a single ligand¶

This notebook shows you how to dock a single ligand to a protein

Setup¶

First, we'll import the necessary Deep Origin drug discovery modules.

In [3]:
from deeporigin.drug_discovery import (
    BRD_DATA_DIR,
    Pocket,
    Protein,
    Protonation,
    Docking,
    Ligand,
LigandSet,
)
from deeporigin.platform import DeepOriginClient
import deeporigin

deeporigin.__version__
Out[3]:
'0.0.0.dev0'

You don't have to explictitly initialize a client, but you can if you want:

In [4]:
client = DeepOriginClient()
client
/home/runner/work/do-dd-client/do-dd-client/.venv/lib/python3.11/site-packages/jwt/api_jwt.py:147: InsecureKeyLengthWarning: The HMAC key is 6 bytes long, which is below the minimum recommended length of 32 bytes for SHA256. See RFC 7518 Section 3.2.
  return self._jws.encode(
Out[4]:
DeepOrigin Platform Client for Local User (org_key=deeporigin, base_url=http://127.0.0.1:4931/)

Load protein and register on the platform¶

We use the same BRD protein as registered_protein in tests/test_functions_with_data_platform.py: load brd.pdb, remove waters, then sync so the structure exists on the platform for docking.

In [5]:
protein = Protein.from_file(BRD_DATA_DIR / "brd.pdb")
protein.remove_water()
protein.sync()
protein.id
Out[5]:
'brd'
In [6]:
## Load ligand
In [7]:
ligand = Ligand.from_sdf(BRD_DATA_DIR/"brd-2.sdf")
ligand.sync()
ligand
<rdkit.Chem.rdchem.Mol object at 0x7febb64c5ee0>
Out[7]:
In [8]:
ligand.id
Out[8]:
'brd-2'

Protonate Ligand¶

In [9]:
protonator = Protonation(ligand=ligand)
protonator.run()
Out[9]:

LigandSet with 1 ligand

SMILES: CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1 PROTONATED (pH=7.4) 2D

Properties: initial_smiles, r_exp_dg

Use .to_dataframe() to convert to a dataframe, .show_df() to view dataframewith structures, or .show() for 3D visualization, .prepare() to prepare ligands for docking

Work with a pocket¶

Here, we will use a previously identified novel pocket using the PocketFinder tool.

In [10]:
pockets = Pocket.from_result(protein_id=protein.id)
pocket = pockets[0]
pocket
Out[10]:
Pocket:
╭─────────────────────────┬──────────────────────────────────────╮
│ Name                    │ pocket_1                             │
├─────────────────────────┼──────────────────────────────────────┤
│ ID                      │ c002d6b3-0d66-4265-91db-8bec0392751d │
├─────────────────────────┼──────────────────────────────────────┤
│ Protein ID              │ brd                                  │
├─────────────────────────┼──────────────────────────────────────┤
│ Color                   │ red                                  │
├─────────────────────────┼──────────────────────────────────────┤
│ Center                  │ (-13.52, -4.94, 15.46)               │
├─────────────────────────┼──────────────────────────────────────┤
│ Box size                │ 14.00 × 14.00 × 19.00 Å              │
├─────────────────────────┼──────────────────────────────────────┤
│ Volume                  │ 300 ų                               │
├─────────────────────────┼──────────────────────────────────────┤
│ Total SASA              │ 1225.8883 Ų                         │
├─────────────────────────┼──────────────────────────────────────┤
│ Polar SASA              │ 309.8629 Ų                          │
├─────────────────────────┼──────────────────────────────────────┤
│ Polar/Apolar SASA ratio │ 0.3382689                            │
├─────────────────────────┼──────────────────────────────────────┤
│ Hydrophobicity          │ 29.92                                │
├─────────────────────────┼──────────────────────────────────────┤
│ Polarity                │ 10                                   │
├─────────────────────────┼──────────────────────────────────────┤
│ Drugability score       │ 0.94304204                           │
├─────────────────────────┼──────────────────────────────────────┤
│ Pocket count            │ 1                                    │
├─────────────────────────┼──────────────────────────────────────┤
│ Pocket min size         │ 30 ų                                │
╰─────────────────────────┴──────────────────────────────────────╯

Estimate cost¶

In [11]:
docking = Docking(protein=protein, pocket=pockets[0], ligand=ligand)
In [12]:
docking.quote()
docking.estimate
Out[12]:
0.2

Dock ligand¶

In [13]:
poses = docking.run()
In [14]:
poses.to_dataframe()
Out[14]:
box_size_z pose_score box_size_x pocket_id box_size_y pocket_center best_pose id protein_id binding_energy SMILES
0 20 0.904670 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... True 08E5F60ACA0CF brd -8.015328 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
1 20 0.898408 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 08ACE7D177B27 brd -8.961081 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
2 20 0.852781 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 08CDE114BC6F1 brd -7.692511 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
3 20 0.807688 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 08F02FF3AAE9D brd -9.012382 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
4 20 0.796831 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 08B186E997015 brd -7.441937 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
5 20 0.757949 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 0822FA6EF6A65 brd -8.609729 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
6 20 0.709940 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 08A00C4C6EA2B brd -8.411566 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
7 20 0.624421 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 08D90A1FB9522 brd -7.697807 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
8 20 0.594424 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 085AD49AD4EE4 brd -7.191995 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
9 20 0.585849 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 088A8C6BCE6B8 brd -6.837277 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
10 20 0.573230 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 08824450B182F brd -6.739297 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
11 20 0.544384 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 086B46F7208E9 brd -8.172841 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
12 20 0.537316 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 080663800F120 brd -7.280019 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
13 20 0.535973 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 08B010AA4A052 brd -8.083034 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
14 20 0.534965 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 08D8107C74D34 brd -7.644990 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1
15 20 0.513628 20 pocket-test-id 20 [-13.146394729614258, -5.712231636047363, 14.7... False 0813380E24280 brd -8.500072 CN(C)C(=O)c1cccc(-c2cn(C)c(=O)c3[nH]ccc23)c1

Show poses¶

In [15]:
poses.download()
protein.show(poses=poses)
Downloading files:   0%|          | 0/16 [00:00<?, ?file/s]
Downloading files:  69%|██████▉   | 11/16 [00:00<00:00, 103.20file/s]
Downloading files: 100%|██████████| 16/16 [00:00<00:00, 128.24file/s]

In [ ]: