Docking and scoring notebook¶
Protocol for docking ligands into a target protein and rescoring the poses:
- RDKit generates a diverse, low-energy set of conformations for each ligand.
- The binding site is defined either from a protein–ligand complex PDB (the ligand is extracted for you) or from prepared files (protein without ligand + extracted ligand).
- smina (https://sourceforge.net/projects/smina/) docks the conformers into the site (rigid or flexible side chains).
- AEV-PLIG (Valsson et al., Commun. Chem. 2025) predicts the binding affinity (pK) of every pose.
The target is the Zika virus NS2B-NS3 protease, docking the nine-ligand Trial10.sdf trial set.
Kernel: docking_scoring conda env. One-off setup, in a terminal in the project folder (see ../README.md for details and for installing smina):
conda env create -f ../environment.yml
conda run -n docking_scoring python -m ipykernel install --user --name docking_scoring --display-name "Python (docking_scoring)"
conda run -n docking_scoring python ../aev_plig/download_models.py
Output files are written next to the input files they come from; all prediction results go to a predictions folder next to the docked SDF.
Widgets: each step has a panel with a Run button. Set AUTO_RUN = True in the next cell to run every step with the default settings when executing all cells.
import sys
from pathlib import Path
sys.path.insert(0, str(Path.cwd().parent)) # docking_tools.py is in the project root, one level up
import os
from pathlib import Path
import pandas as pd
from IPython.display import HTML, display
from rdkit import Chem
from rdkit.Chem import Draw
import docking_tools as dt
%matplotlib inline
AUTO_RUN = os.environ.get("DOCKING_AUTORUN") == "1" # set True to run all steps with defaults
dt.PROTEIN_COLOURING = "rasmol" # protein cartoons: "rasmol" (secondary structure), "rainbow" or "grey"
print(dt.cpu_note())
dt.library_versions()
24 cores available (16 performance + 8 efficiency)
| old env (docking) | this env | |
|---|---|---|
| python | 3.8.19 | 3.12.14 |
| rdkit | 2024.3.5 | 2026.09.1 |
| torch | 2.4.1 | 2.10.0 |
| torch_geometric | 2.6.1 | 2.8.0.post1 |
| torchani | 2.2.4 | 2.9.0 |
| py3Dmol | 2.5.4 | 2.5.4 |
| pandas | 2.0.3 | 3.0.6 |
| numpy | 1.24.4 | 2.5.3 |
| scipy | 1.10.1 | 1.18.1 |
| sklearn | 1.3.2 | 1.9.1 |
| biopandas | 0.5.1 | 0.5.2 |
| qcelemental | 0.30.1 | 0.51.2 |
| ipywidgets | 8.1.5 | 8.1.9 |
| matplotlib | 3.7.3 | 3.11.2 |
| pymol | - | 3.1.0 |
| openbabel | - | 3.2.1 |
1. Ligands to dock¶
Set the path of the SDF file of structures you want to dock. The name must be on the first line of each record, e.g.
AEM 10028511
MOE2019 2D
Conformers, docked poses and predictions will be written to the same folder as this file.
The nine molecules in
Trial10.sdfare titled with their SMILES strings rather than names, so the check below offers the SDF'sMolecule_Namefield (blind_challenge_001...) as the ligand ID - take it, because the name ends up in pose file names, the results tables and the plot labels.
openbind-blind-challenge-1-TEST-BLINDED.sdfin this folder is the full 400-molecule set, in the same format; pointLIGAND_SDFat it to run the whole challenge. Expect a long job - at exhaustiveness 20 the docking alone scales to many hours, so run it from a terminal rather than interactively.
LIGAND_SDF = Path("Trial10.sdf").resolve() # input structures to dock
input_mols = dt.load_sdf(LIGAND_SDF) # warns about unreadable or unnamed records
print(f"{len(input_mols)} molecules read from {LIGAND_SDF}")
9 molecules read from Trial10.sdf
Check ligand names¶
smina keeps only the molecule name, and the results (best pose per ligand, PDB export, plots) are grouped by name, so different structures must not share a name. If duplicates are found you can either use an identifier field from the SDF (e.g. ID, IDNUMBER, Record_ID – offered only if every molecule has a unique value) as the ligand ID, or have unique names assigned automatically (name, name_2, name_3 …). The original name is kept in the original_name property. The input SDF itself is not changed. Conformer generation is blocked until duplicates are resolved.
name_check = dt.LigandNamePanel(input_mols)
display(name_check.widget())
if AUTO_RUN and not name_check.resolved:
name_check.apply() # default: first unique identifier field, otherwise automatic names
Ligand names now from SD field 'Molecule_Name' (original names kept in 'original_name'): blind_challenge_001, blind_challenge_002, blind_challenge_003, blind_challenge_004, blind_challenge_005, blind_challenge_006, blind_challenge_007, blind_challenge_008, blind_challenge_009
# View as grid (re-run after applying a naming choice above)
Draw.MolsToGridImage([dt.to_2d(m) for m in input_mols], molsPerRow=4, subImgSize=(250, 200),
legends=[m.GetProp("_Name") for m in input_mols])
Browse individual input structures¶
Use the slider (or Prev / Next) to step through the molecules.
dt.molecule_browser(input_mols)
1/9 blind_challenge_001 heavy atoms: 21 SMILES: O=C(Nc1ccc2c(c1)CNC2)c1cccc2cn[nH]c12
3Dmol.js failed to load for some reason. Please check your browser console for error messages.
1b. Ionisation states with QupKake¶
QupKake (Abarbanel & Hutchison, J. Chem. Theory Comput. 2024) predicts micro-pKa values by combining GFN2-xTB calculations with graph neural networks. Each ligand is neutralised, QupKake predicts the pKa of every acidic and basic site, and the ionisation state at the chosen pH is set:
- the most basic site is protonated if its pKa is above the pH, and the most acidic site is deprotonated if its pKa is below it (at most one of each; other sites that also cross the pH are listed in also_crossing_pH);
- implausible basic sites are ignored (on by default): QupKake sometimes reports sulphonamide N, amide N or aryl-amine N (e.g. the N-aryl nitrogen of an aryl-piperazine) as the most basic site, which would put the charge in the wrong place – these are listed in ignored.
The ligands in their predicted states are written to <input>_pH7.4.sdf next to the input, and – with Dock the ligands in their predicted ionisation states ticked – that file is used for conformer generation and docking, so all later outputs are named <input>_pH7.4_… and never overwrite the results for the input states. The same prediction is made for the ligand from the PDB (section 3), which is used as the reference in the final table.
QupKake runs in its own conda environment (qupkake, with xtb 6.4.1); if it is not installed the input states are used. Re-run the conformer cell after running QupKake.
prot_panel = dt.ProtonationPanel(input_mols, LIGAND_SDF)
display(prot_panel.widget())
if AUTO_RUN and dt.qupkake_available():
prot_panel.run()
Running QupKake (GFN2-xTB + GNN); about 30 s for 10 molecules ...
[16:22:18] Running Uncharger [16:22:18] Running Uncharger [16:22:18] Running Uncharger [16:22:18] Running Uncharger [16:22:18] Running Uncharger [16:22:18] Running Uncharger [16:22:18] Running Uncharger [16:22:18] Running Uncharger [16:22:18] Running Uncharger
Ionisation states written to Trial10_pH7.4.sdf (table: Trial10_pH7.4.csv; QupKake files in qupkake/Trial10)
[16:22:39] Running Uncharger [16:22:39] Running Uncharger [16:22:39] Running Uncharger [16:22:39] Running Uncharger [16:22:39] Running Uncharger [16:22:39] Running Uncharger [16:22:39] Running Uncharger [16:22:39] Running Uncharger [16:22:39] Running Uncharger
| name | changed | input_charge | predicted_charge | protonated | deprotonated | ignored | also_crossing_pH | input_smiles | smiles | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | blind_challenge_001 | True | 0 | 1 | b:N11=7.44 | O=C(Nc1ccc2c(c1)CNC2)c1cccc2cn[nH]c12 | O=C(Nc1ccc2c(c1)C[NH2+]C2)c1cccc2cn[nH]c12 | |||
| 1 | blind_challenge_002 | True | 0 | 1 | b:N11=7.63 | O=C(Nc1ccc2c(c1)CNC2)c1cccn2nccc12 | O=C(Nc1ccc2c(c1)C[NH2+]C2)c1cccn2nccc12 | |||
| 2 | blind_challenge_003 | True | 0 | 1 | b:N20=7.71 | Cn1ccc2cccc(C(=O)Nc3ccc4c(c3)CNC4)c21 | Cn1ccc2cccc(C(=O)Nc3ccc4c(c3)C[NH2+]C4)c21 | |||
| 3 | blind_challenge_004 | True | 0 | 1 | b:N11=7.65 | O=C(Nc1ccc2c(c1)CNC2)c1nccc2cc[nH]c12 | O=C(Nc1ccc2c(c1)C[NH2+]C2)c1nccc2cc[nH]c12 | |||
| 4 | blind_challenge_005 | True | 0 | 1 | b:N11=7.62 | O=C(Nc1ccc2c(c1)CNC2)c1cccc2[nH]ccc12 | O=C(Nc1ccc2c(c1)C[NH2+]C2)c1cccc2[nH]ccc12 | |||
| 5 | blind_challenge_006 | True | 0 | 1 | b:N11=7.55 | O=C(Nc1ccc2c(c1)CNC2)c1cc(Cl)cc2cc[nH]c12 | O=C(Nc1ccc2c(c1)C[NH2+]C2)c1cc(Cl)cc2cc[nH]c12 | |||
| 6 | blind_challenge_007 | True | 0 | 1 | b:N16=7.63 | Cc1ccc(C(=O)Nc2ccc3c(c2)CNC3)c2[nH]ccc12 | Cc1ccc(C(=O)Nc2ccc3c(c2)C[NH2+]C3)c2[nH]ccc12 | |||
| 7 | blind_challenge_008 | False | 0 | 0 | b:N10=4.77 (aryl-amine N) | O=C(Nc1ccc2c(c1)NCC2)c1cccc2cc[nH]c12 | O=C(Nc1ccc2c(c1)NCC2)c1cccc2cc[nH]c12 | |||
| 8 | blind_challenge_009 | True | 0 | 1 | b:N11=7.60 | O=C(Nc1ccc2c(c1)CNC2)c1cccc2cc[nH]c12 | O=C(Nc1ccc2c(c1)C[NH2+]C2)c1cccc2cc[nH]c12 |
2. Conformation generation¶
From the RDKit documentation: conformer generation is a difficult and subtle task. smina rotates around torsions during docking, but it does not flip rings or change amide geometry, so supplying several ring/amide conformers helps.
Are there better alternatives within RDKit than the original cell? Yes. The original notebook called EmbedMultipleConfs(m, numConfs=3) with no pruning or minimisation, so it could return near-duplicate, unrelaxed geometries. This notebook uses:
| Step | What it does | Why |
|---|---|---|
| srETKDGv3 (default) / ETKDGv3 / ETKDG / ETDG | distance geometry + experimental torsion preferences | v3 has improved torsion libraries and macrocycle handling; the sr variant adds small-ring torsion preferences (better 3–7 membered ring puckers) |
pruneRmsThresh |
discards embeddings closer than the RMS threshold | diversity rather than duplicates |
| MMFF94 optimisation (UFF fallback) | relaxes bond lengths/angles and intramolecular clashes | cleaner starting geometry for docking |
| Energy window | drops conformers more than n kcal/mol above the minimum | removes strained geometries |
| Post-optimisation RMS de-duplication (symmetry-aware heavy-atom RMSD) | minimisation often collapses conformers onto each other | keeps only distinct ones |
| Optional stereoisomer enumeration | expands unassigned stereocentres | avoids docking an arbitrary isomer |
Other RDKit options not used here: Torsion-Fingerprint/Butina clustering for very large ensembles, and rdDistGeom.EmbedMultipleConfs with useRandomCoords=True (used automatically as a fallback when embedding fails). For a single rigid molecule set Conformers to embed = 1.
The output file is <input>_confs.sdf in the input folder.
DOCK_MOLS, DOCK_SDF = prot_panel.docking_input() # predicted ionisation states if QupKake was run
print(f"Docking {len(DOCK_MOLS)} ligands from {DOCK_SDF.name}")
conf_panel = dt.ConformerPanel(DOCK_MOLS, DOCK_SDF)
display(conf_panel.widget())
if AUTO_RUN:
conf_panel.run()
Docking 9 ligands from Trial10_pH7.4.sdf
Wrote 60 conformers to Trial10_pH7.4_confs.sdf
| name | embedded | kept | force field | |
|---|---|---|---|---|
| 0 | blind_challenge_001 | 17 | 8 | MMFF94 |
| 1 | blind_challenge_002 | 18 | 8 | MMFF94 |
| 2 | blind_challenge_003 | 15 | 5 | MMFF94 |
| 3 | blind_challenge_004 | 16 | 2 | MMFF94 |
| 4 | blind_challenge_005 | 15 | 8 | MMFF94 |
| 5 | blind_challenge_006 | 18 | 7 | MMFF94 |
| 6 | blind_challenge_007 | 18 | 7 | MMFF94 |
| 7 | blind_challenge_008 | 18 | 8 | MMFF94 |
| 8 | blind_challenge_009 | 18 | 7 | MMFF94 |
# Check the conformer file (re-run this cell after generating)
CONF_SDF = conf_panel.out_path
if CONF_SDF.exists():
confs = dt.load_sdf(CONF_SDF)
print(f"{len(confs)} conformers in {CONF_SDF}")
dt.molecule_browser(confs)
60 conformers in Trial10_pH7.4_confs.sdf
1/60 blind_challenge_001 heavy atoms: 21 SMILES: O=C(Nc1ccc2c(c1)C[NH2+]C2)c1cccc2cn[nH]c12
3Dmol.js failed to load for some reason. Please check your browser console for error messages.
3. Protein and binding site¶
Two options:
- Complex structure – a protein–ligand complex in PDB or mmCIF format (
.pdb,.cif,.mmcif, optionally.gz; mmCIF is now the PDB's standard format, e.g. a.cifdownloaded from RCSB). All ligands are listed with their chemical names and the largest is selected automatically – choose another from the list if the file contains several ligands. Waters, solvents and crystallisation additives (e.g. DMSO, glycerol, sulfate), ions and terminal caps are hidden; tick Also list solvents, ions, additives and caps to show them. Only the first alternate location (A) is used. The ligand's bond orders come from (in order): an optional SMILES template (its charges are kept, so it can set the protonation state); the file's hydrogens and formal charges; the ligand's PDB Chemical Component Dictionary entry from RCSB (for files without hydrogens such as RCSB X-ray structures – neutral form); or Open Babel perception. Two files are written next to the input:<stem>_protein.pdb(protein only, no ligand/other HETs) and<stem>_ligand_<RES><chain><num>.pdb/.sdf. For mmCIF input<stem>ends in_cif(e.g.ZIKV_NS2B-NS3_protease_cif_protein.pdb) so it never overwrites files made from a PDB of the same entry, which may use a different coordinate frame. - Prepared files – as in the original notebook: a protein PDB with no ligand plus the ligand extracted from the binding site (PDB).
This structure is MOE-prepared, with hydrogens on both the protein and the ligand, so the ligand's bond orders and its +1 charge come straight from the file. Its residue code
01is a local code rather than a PDB Chemical Component Dictionary one (the MOE header maps it toA1B89), which does not matter here because the hydrogens are present - no CCD lookup is needed. The bound ligand is the cationic benzamide[NH3+]Cc1cccc(NC(=O)c2cc(Cl)cc(NC(=O)OCc3ccccc3)c2)c1.Keep both chains. The receptor written by this step contains chain A (the NS2B cofactor) and chain B (the NS3 protease domain), and both are needed: of the 17 residues within 5 A of the ligand, 3 are from NS2B (Ser81, Gly82, Asp83) and 14 from NS3. The NS2B cofactor peptide completes the substrate groove, so docking into NS3 alone would be wrong.
Press Use this binding site after changing anything.
site = dt.BindingSiteSetup(complex_pdb=Path("ZIKV_NS2B-NS3_protease.pdb").resolve(),
protein_pdb=Path("ZIKV_NS2B-NS3_protease_protein.pdb").resolve(),
ligand_pdb=Path("ZIKV_NS2B-NS3_protease_ligand_01B203.pdb").resolve())
display(site.widget())
site.apply(); # applies the defaults; press the button to re-apply after changes
Protein for docking : ZIKV_NS2B-NS3_protease_protein.pdb (2919 ATOM records) Ligand (PDB) : ZIKV_NS2B-NS3_protease_ligand_01B203.pdb Ligand (SDF) : ZIKV_NS2B-NS3_protease_ligand_01B203.sdf Bond orders: RDKit DetermineBondOrders (net charge +1) SMILES: [NH3+]Cc1cccc(NC(=O)c2cc(Cl)cc(NC(=O)OCc3ccccc3)c2)c1
3Dmol.js failed to load for some reason. Please check your browser console for error messages.
# Ionisation state of the ligand from the PDB (crystal coordinates kept), with the same QupKake settings
REF_MOL = site.ligand_mol
if site.ligand_mol is not None and prot_panel.use.value and prot_panel.ionised is not None:
REF_MOL, ref_table = dt.ionise_reference_ligand(site.ligand_mol, LIGAND_SDF.parent / "qupkake" / "pdb_ligand",
prot_panel.ph.value, prot_panel.filter.value)
display(ref_table[["name", "changed", "input_charge", "predicted_charge", "protonated", "ignored", "smiles"]])
print("Reference ligand:", Chem.MolToSmiles(Chem.RemoveHs(REF_MOL)) if REF_MOL is not None else None)
[16:22:40] Running Uncharger [16:22:40] Removed positive charge.
[16:23:04] Running Uncharger [16:23:04] Removed positive charge.
| name | changed | input_charge | predicted_charge | protonated | ignored | smiles | |
|---|---|---|---|---|---|---|---|
| 0 | 01_B203 | False | 1 | 1 | b:N29=8.37 | [NH3+]Cc1cccc(NC(=O)c2cc(Cl)cc(NC(=O)OCc3ccccc... |
Reference ligand: [NH3+]Cc1cccc(NC(=O)c2cc(Cl)cc(NC(=O)OCc3ccccc3)c2)c1
Images of the complex and the binding site¶
The protein is coloured by secondary structure with the RasMol scheme (helix magenta-red, sheet yellow, coil/turn white – drawn light grey so it shows on a white background); change dt.PROTEIN_COLOURING in the first code cell for rainbow or grey. Ray-traced with PyMOL and saved as <stem>_complex.png and <stem>_site.png next to the input structure. In the binding-site image residues within 5 Å of the ligand are shown as sticks, and polar contacts as orange dashes. Untick Show binding-site side chains to redraw the binding-site image without the side chains (and their polar contacts); the residues stay labelled.
show_side_chains = dt.widgets.Checkbox(value=True, description="Show binding-site side chains",
layout=dt.widgets.Layout(width="400px"))
image_out = dt.widgets.Output()
def _draw_images(_=None):
global complex_png, site_png
image_out.clear_output()
with image_out:
complex_png, site_png = dt.make_images(site.protein, site.ligand_ref, site.image_prefix,
site_side_chains=show_side_chains.value)
dt.show_images_side_by_side([complex_png, site_png],
["Protein with ligand bound", "Ligand in the binding site"])
display(HTML(dt.colour_legend_html()))
show_side_chains.observe(_draw_images, names="value")
display(dt.widgets.VBox([show_side_chains, image_out]))
_draw_images()
4. Docking with smina¶
The Zika virus NS2B-NS3 protease cleaves the viral polyprotein and is required for replication, which makes it a long-standing antiviral target (https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6163217/). It is a two-component enzyme: the NS3 protease domain (chain B here) carries the catalytic triad His51-Asp75-Ser135, and a ~40-residue cofactor peptide from NS2B (chain A) wraps around it and completes the substrate-binding groove. The site is shallow, polar and strongly prefers basic P1/P2 groups, so most known inhibitors - including the ligand bound here and every ligand in the trial set - are cationic, which is why the pH 7.4 ionisation step in section 1b matters for this target.
The panel is pre-filled with the settings from the original notebook (--exhaustiveness 20 --seed 0 --autobox_ligand) and --cpu set to the number of cores detected. Notes:
--minimizeperforms only a local energy minimisation of the supplied coordinates (no search). Use it on poses that are already in the site, e.g. the crystal ligand SDF or a docked SDF — not on freshly generated conformers. The output defaults to<input>_minimized.sdf.Docking mode – Rigid receptor (default) or Flexible side chains. ⚠️ Flexible docking is much slower (typically 10–100× longer, rising steeply with the number of flexible residues). Residues can be chosen
- automatically – every residue with an atom within a user-defined distance of the site-defining ligand (default 5 Å), or
- manually – pick residues from the list (nearest first) and/or type extra ones (
A:41,A:145).
Gly, Ala and Pro are excluded (no side-chain torsions). smina then also writes
<output>_flexres.pdbholding the flexed side chains for every pose, in the same order as the docked SDF – the viewer and AEV-PLIG use it to pair each ligand pose with its own receptor conformation.Search-box check. The box is the autobox ligand's extent (all atoms, hydrogens included) plus autobox_add on every side; smina only searches inside it and gives no warning if a ligand is too big. The panel compares each ligand's longest span (from the conformer file) with the box and warns when a ligand is tight (less than 2 Å to spare along the smallest box side) or longer than the smallest box side, suggesting an autobox_add. After docking, poses with a heavy atom within 1 Å of a box face are reported, and the results tables get
box_margin(Å; negative = outside) andat_box_edge– a best pose at the edge means the box may be limiting that ligand.The docking log is written next to the output as
<output>.log, together with a run record<output>.run.json(smina version, full command, seed,--cpuand all settings, platform, SHA-256 of the inputs) so every run is self-describing. With this smina build the same seed gives the same poses for any--cpu(see README, Reproducibility).
panel = dt.SminaPanel(receptor=site.protein, autobox_ligand=site.ligand_pdb, ligands=CONF_SDF)
display(panel.widget())
if AUTO_RUN:
# DOCKING_FLEXIBLE=<distance in A> runs flexible side chains instead of a rigid receptor,
# choosing every flexible-capable residue within that distance of the site-defining ligand.
if os.environ.get("DOCKING_FLEXIBLE"):
panel.mode.value = "Flexible side chains (slower)"
panel.flex_dist.value = float(os.environ["DOCKING_FLEXIBLE"])
panel.find_flex_residues()
panel.run()
$ /usr/local/smina.osx.12 -r ZIKV_NS2B-NS3_protease_protein.pdb -l Trial10_pH7.4_confs.sdf -o Trial10_pH7.4_flexdocked.sdf --seed 0 --cpu 24 --autobox_ligand ZIKV_NS2B-NS3_protease_ligand_01B203.pdb --autobox_add 4.0 --exhaustiveness 20 --num_modes 9 --energy_range 3.0 --flexres A:83,B:129,B:150,B:152,B:130,B:161,B:75,B:135,B:51 --out_flex Trial10_pH7.4_flexdocked_flexres.pdb # smina master:dc3dfab+ Built Dec 1 2021. Based on AutoDock Vina 1.1.2. # mode flexible seed 0 cpu 24 exhaustiveness 20 scoring vina # platform Darwin arm64 started 2026-10-15T16:23:11+01:00 # run record: Trial10_pH7.4_flexdocked.run.json ✔ Box check (before docking): box 16.8 x 17.4 x 23.2 A (6,803 A^3); longest ligand 12.6 A, smallest box side 16.8 A. All ligands fit with >= 2 A to spare.
_______ _______ _________ _ _______
( ____ \( )\__ __/( ( /|( ___ )
| ( \/| () () | ) ( | \ ( || ( ) |
| (_____ | || || | | | | \ | || (___) |
(_____ )| |(_)| | | | | (\ \) || ___ |
) || | | | | | | | \ || ( ) |
/\____) || ) ( |___) (___| ) \ || ) ( |
\_______)|/ \|\_______/|/ )_)|/ \|
smina is based off AutoDock Vina. Please cite appropriately.
Weights Terms
-0.035579 gauss(o=0,_w=0.5,_c=8)
-0.005156 gauss(o=3,_w=2,_c=8)
0.840245 repulsion(o=0,_c=8)
-0.035069 hydrophobic(g=0.5,_b=1.5,_c=8)
-0.587439 non_dir_h_bond(g=-0.7,_b=0,_c=8)
1.923 num_tors_div
Flexible residues: A:83 B:51 B:75 B:129 B:130 B:135 B:150 B:152 B:161
Using random seed: 0
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.1 0.000 0.000 2 -12.6 1.623 2.253 3 -12.4 1.327 4.579 4 -11.9 1.191 1.630 5 -11.8 1.439 2.191 6 -11.0 2.344 6.393 7 -10.8 1.730 4.455 8 -10.7 2.281 4.613 9 -10.6 2.660 4.485 Refine time 98.999 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.4 0.000 0.000 2 -13.5 1.494 4.628 3 -13.4 1.073 1.652 4 -12.8 1.429 2.028 5 -12.8 1.749 4.990 6 -12.7 1.430 4.561 7 -12.5 1.927 2.773 8 -12.3 2.264 3.267 9 -12.2 2.307 3.145 Refine time 98.201 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.2 0.000 0.000 2 -13.5 1.415 2.116 3 -13.4 1.200 4.588 4 -12.9 1.199 1.761 5 -12.5 1.611 2.352 6 -12.2 1.505 4.901 7 -12.0 2.333 3.324 8 -11.5 2.944 4.995 9 -11.2 1.483 2.190 Refine time 101.299 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.8 0.000 0.000 2 -12.1 1.466 2.088 3 -11.7 1.283 1.739 4 -11.6 1.499 4.684 5 -11.6 1.060 4.618 6 -11.1 1.573 2.141 7 -11.1 2.185 3.261 8 -11.1 1.727 5.000 9 -10.8 2.259 4.879 Refine time 100.547 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.7 0.000 0.000 2 -12.6 1.490 1.968 3 -12.2 1.093 4.715 4 -12.0 1.577 2.038 5 -12.0 1.314 2.029 6 -11.8 1.701 4.850 7 -11.7 1.898 4.904 8 -11.0 2.394 3.169 9 -11.0 2.043 2.656 Refine time 100.491 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.3 0.000 0.000 2 -13.7 1.554 2.326 3 -13.1 1.277 4.545 4 -13.1 1.043 1.697 5 -12.7 1.316 4.778 6 -12.6 2.096 3.148 7 -12.5 1.391 2.185 8 -12.5 1.672 4.764 9 -12.3 2.417 5.163 Refine time 100.847 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.2 0.000 0.000 2 -12.5 1.484 1.944 3 -12.3 1.279 1.761 4 -12.3 1.090 4.523 5 -12.0 1.354 4.557 6 -12.0 1.926 2.571 7 -11.6 2.177 4.340 8 -11.4 1.546 4.603 9 -11.3 1.536 4.795 Refine time 96.703 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.6 0.000 0.000 2 -12.3 1.598 1.925 3 -12.3 1.648 4.747 4 -11.1 2.029 5.063 5 -11.0 1.507 2.048 6 -10.9 2.457 4.716 7 -10.9 2.162 4.565 8 -10.9 2.348 6.311 9 -10.6 1.126 4.770 Refine time 101.255 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -11.9 0.000 0.000 2 -11.9 1.410 2.083 3 -11.4 1.114 1.387 4 -11.1 1.485 4.617 5 -11.1 1.602 4.901 6 -11.1 1.341 2.042 7 -10.9 2.382 4.488 8 -10.9 1.975 4.558 9 -10.7 1.712 4.759 Refine time 94.372 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.8 0.000 0.000 2 -14.5 1.048 1.673 3 -14.2 1.483 2.120 4 -13.9 1.309 4.738 5 -13.8 1.328 4.675 6 -13.6 2.312 4.874 7 -13.2 1.182 2.168 8 -13.2 2.777 4.801 9 -13.1 1.685 4.986 Refine time 96.341 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -15.3 0.000 0.000 2 -15.2 1.223 4.602 3 -14.9 0.842 1.828 4 -14.7 1.553 2.039 5 -14.2 2.113 4.600 6 -13.8 1.297 4.699 7 -13.7 2.116 2.985 8 -13.7 2.124 4.759 9 -13.6 1.878 2.591 Refine time 95.835 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.2 0.000 0.000 2 -12.0 1.076 4.536 3 -11.9 1.442 4.832 4 -11.7 1.261 4.813 5 -10.9 2.106 5.758 6 -10.7 1.941 2.775 7 -10.7 1.665 4.825 8 -10.6 1.710 2.590 9 -10.4 1.877 4.490 Refine time 98.662 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.0 0.000 0.000 2 -12.8 1.023 4.573 3 -12.6 0.722 1.586 4 -12.6 1.179 4.626 5 -12.3 1.500 4.744 6 -12.1 1.424 4.812 7 -11.7 1.450 4.680 8 -11.6 2.059 6.171 9 -11.4 1.848 2.633 Refine time 94.618 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.2 0.000 0.000 2 -13.2 1.532 4.660 3 -13.2 1.275 2.284 4 -12.8 1.628 2.326 5 -12.8 1.199 4.600 6 -12.8 1.431 2.148 7 -12.4 1.793 4.863 8 -12.4 0.811 4.618 9 -12.4 1.847 2.522 Refine time 94.789 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.7 0.000 0.000 2 -12.6 0.973 4.440 3 -12.4 1.087 4.565 4 -12.3 1.398 1.991 5 -12.1 1.689 4.790 6 -12.1 1.458 4.663 7 -11.8 2.112 6.115 8 -11.4 1.949 4.264 9 -11.3 1.448 2.296 Refine time 94.951 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -11.9 0.000 0.000 2 -11.7 0.877 4.525 3 -11.6 1.030 1.503 4 -11.5 1.499 2.316 5 -11.4 1.203 2.028 6 -10.9 1.906 2.968 7 -10.9 2.153 4.854 8 -10.8 2.357 5.050 9 -10.8 1.557 4.867 Refine time 94.489 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.4 0.000 0.000 2 -13.3 1.040 4.495 3 -12.7 1.548 2.221 4 -12.4 1.144 4.646 5 -12.2 1.565 4.773 6 -12.0 1.309 2.024 7 -11.9 2.424 4.539 8 -11.9 1.004 2.017 9 -11.8 2.062 3.050 Refine time 99.474 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.0 0.000 0.000 2 -13.8 1.204 1.594 3 -13.4 1.542 1.910 4 -12.8 1.698 4.816 5 -12.8 2.077 3.337 6 -12.6 2.088 4.583 7 -12.5 1.473 2.289 8 -12.5 2.332 4.408 9 -12.4 2.089 3.218 Refine time 101.421 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.1 0.000 0.000 2 -14.1 0.908 1.314 3 -13.9 1.050 4.579 4 -13.6 0.979 2.097 5 -13.6 1.289 2.027 6 -13.3 1.616 4.500 7 -12.9 1.948 3.052 8 -12.7 1.330 2.198 9 -12.6 1.506 4.523 Refine time 101.040 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -11.6 0.000 0.000 2 -11.5 1.139 1.635 3 -11.5 1.170 4.390 4 -11.0 1.496 2.150 5 -10.8 1.462 4.656 6 -10.3 1.868 2.915 7 -10.1 2.332 4.669 8 -10.1 2.282 4.868 9 -10.0 1.703 2.760 Refine time 95.880 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -15.9 0.000 0.000 2 -15.9 1.173 4.546 3 -15.4 1.332 1.849 4 -14.6 1.468 2.047 5 -14.5 1.527 4.590 6 -14.4 2.060 4.789 7 -14.3 1.567 4.567 8 -14.3 1.098 4.744 9 -14.2 1.042 1.480 Refine time 99.341 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.6 0.000 0.000 2 -12.5 0.905 1.916 3 -12.2 1.210 4.506 4 -12.2 1.039 2.022 5 -11.8 1.346 4.794 6 -11.4 1.968 4.641 7 -11.2 1.628 2.562 8 -11.1 2.113 4.648 9 -10.9 1.856 4.978 Refine time 99.704 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.3 0.000 0.000 2 -11.9 1.102 1.897 3 -11.8 1.210 4.637 4 -11.4 1.584 2.071 5 -11.3 1.423 2.118 6 -11.2 1.022 4.691 7 -11.2 1.805 2.614 8 -10.9 1.618 4.780 9 -10.8 2.185 4.767 Refine time 98.605 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.4 0.000 0.000 2 -14.1 1.010 4.528 3 -14.0 1.085 4.829 4 -13.9 1.871 4.525 5 -13.7 1.321 2.029 6 -13.3 1.978 6.219 7 -13.1 2.188 3.786 8 -13.1 2.127 4.834 9 -12.8 1.834 4.587 Refine time 99.411 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.3 0.000 0.000 2 -12.8 1.089 1.707 3 -12.6 1.081 4.618 4 -12.3 1.475 2.224 5 -12.2 1.461 2.447 6 -11.9 1.417 2.068 7 -11.4 2.069 2.888 8 -11.3 1.722 2.378 9 -11.3 2.409 4.456 Refine time 95.936 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.8 0.000 0.000 2 -12.2 1.077 1.617 3 -11.9 1.311 1.906 4 -11.9 1.122 1.813 5 -11.8 1.107 4.717 6 -11.7 1.383 2.348 7 -11.4 1.364 2.037 8 -11.1 1.734 2.623 9 -11.1 1.368 4.690 Refine time 99.805 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.6 0.000 0.000 2 -13.3 0.959 1.353 3 -13.1 0.703 1.207 4 -13.0 1.077 4.670 5 -12.5 1.650 2.524 6 -12.4 1.336 2.057 7 -12.1 1.378 4.641 8 -11.9 1.940 4.229 9 -11.9 1.159 4.533 Refine time 97.768 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.3 0.000 0.000 2 -13.8 1.136 1.748 3 -13.4 1.164 2.173 4 -13.3 1.205 1.663 5 -13.2 0.984 4.599 6 -13.1 1.521 2.340 7 -12.9 1.650 4.944 8 -12.3 1.790 4.188 9 -12.2 1.801 5.558 Refine time 98.917 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -15.3 0.000 0.000 2 -14.9 1.062 1.907 3 -14.9 1.258 1.813 4 -14.8 0.811 1.322 5 -14.1 1.087 4.476 6 -13.8 1.626 4.522 7 -13.8 1.702 4.914 8 -13.8 1.686 2.581 9 -13.7 1.436 2.148 Refine time 100.244 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -15.2 0.000 0.000 2 -15.0 1.190 1.949 3 -14.7 1.477 4.820 4 -14.6 1.616 2.198 5 -14.3 1.424 1.873 6 -14.2 2.022 2.667 7 -14.2 1.628 2.564 8 -14.1 1.460 4.859 9 -13.7 2.348 5.809 Refine time 99.105 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.7 0.000 0.000 2 -13.2 0.895 4.496 3 -12.6 1.668 2.396 4 -12.5 1.416 2.288 5 -12.4 1.484 2.351 6 -12.3 1.451 2.109 7 -12.3 1.737 2.565 8 -12.2 1.642 2.666 9 -12.1 1.798 5.632 Refine time 99.346 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.4 0.000 0.000 2 -13.8 1.361 2.107 3 -13.8 1.405 2.165 4 -13.1 1.910 4.857 5 -12.8 1.979 2.666 6 -12.8 2.267 4.817 7 -12.7 1.850 4.801 8 -12.2 1.920 2.613 9 -12.1 2.168 4.878 Refine time 97.794 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.8 0.000 0.000 2 -12.7 1.256 1.857 3 -12.0 1.781 4.730 4 -11.9 1.475 1.902 5 -11.6 1.751 2.472 6 -10.9 1.672 4.844 7 -10.8 1.940 5.032 8 -10.8 2.091 4.744 9 -10.6 3.009 4.521 Refine time 98.996 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.1 0.000 0.000 2 -12.6 1.356 2.146 3 -12.3 1.352 1.920 4 -11.8 1.773 4.757 5 -11.5 1.851 4.757 6 -11.3 1.954 4.843 7 -11.2 1.717 2.265 8 -11.2 2.320 4.890 9 -11.1 2.116 5.029 Refine time 101.924 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.3 0.000 0.000 2 -12.3 1.421 2.075 3 -11.4 1.418 2.014 4 -11.3 1.504 4.733 5 -11.0 2.028 4.997 6 -10.7 2.807 3.840 7 -10.4 2.307 4.941 8 -10.3 1.917 4.884 9 -10.2 2.225 6.046 Refine time 107.008 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.4 0.000 0.000 2 -14.0 1.429 2.156 3 -13.3 1.862 4.809 4 -13.0 2.328 3.393 5 -12.9 2.262 4.871 6 -12.8 1.964 4.998 7 -12.8 1.685 4.829 8 -12.7 2.021 4.781 9 -12.6 2.324 5.166 Refine time 106.237 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.8 0.000 0.000 2 -13.1 1.286 1.891 3 -12.8 1.821 4.800 4 -12.5 2.248 3.360 5 -12.3 1.537 2.251 6 -12.3 1.599 4.777 7 -12.2 2.219 3.251 8 -12.1 2.311 4.887 9 -12.1 1.908 4.829 Refine time 102.639 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.8 0.000 0.000 2 -13.7 1.415 1.920 3 -13.3 1.476 2.114 4 -12.6 1.637 4.883 5 -12.6 1.594 2.129 6 -12.1 1.703 4.670 7 -11.9 1.997 4.960 8 -11.9 2.357 5.011 9 -11.8 2.547 4.934 Refine time 101.894 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.4 0.000 0.000 2 -12.9 1.183 1.879 3 -12.5 1.340 5.004 4 -12.5 1.607 2.156 5 -12.3 1.489 2.154 6 -11.8 1.079 4.957 7 -11.5 1.103 1.732 8 -11.3 2.085 4.702 9 -11.2 1.475 4.763 Refine time 103.405 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.0 0.000 0.000 2 -13.8 1.097 1.660 3 -13.0 1.243 4.984 4 -13.0 1.483 2.098 5 -12.1 1.472 2.202 6 -12.0 1.436 5.147 7 -12.0 2.292 6.471 8 -11.9 2.066 4.738 9 -11.9 2.519 3.718 Refine time 103.061 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.6 0.000 0.000 2 -14.1 1.199 1.630 3 -13.9 1.490 2.018 4 -13.8 1.266 4.970 5 -13.2 1.449 4.925 6 -13.2 1.533 2.204 7 -13.0 2.465 3.463 8 -12.8 0.972 4.949 9 -12.7 1.191 2.039 Refine time 107.918 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.3 0.000 0.000 2 -14.2 0.972 1.459 3 -13.6 1.126 4.935 4 -13.5 1.238 1.937 5 -13.0 1.266 4.892 6 -12.5 1.968 4.611 7 -12.1 2.364 6.591 8 -12.0 2.023 4.872 9 -12.0 2.410 5.163 Refine time 101.459 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.2 0.000 0.000 2 -14.0 0.761 1.482 3 -13.5 1.509 2.012 4 -12.6 0.921 1.705 5 -12.5 1.287 1.845 6 -12.4 0.897 4.891 7 -12.3 1.963 4.730 8 -12.3 1.358 4.859 9 -12.1 1.458 4.791 Refine time 103.175 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.4 0.000 0.000 2 -12.7 1.239 4.921 3 -12.5 1.010 4.905 4 -12.4 1.544 2.071 5 -11.5 1.609 5.079 6 -11.4 2.470 3.675 7 -11.2 2.521 3.839 8 -11.0 1.773 5.181 9 -11.0 2.036 4.737 Refine time 107.025 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.5 0.000 0.000 2 -13.3 0.722 1.370 3 -12.1 0.965 4.913 4 -12.1 1.038 1.830 5 -11.7 2.551 3.758 6 -11.6 1.600 2.337 7 -11.0 1.364 4.870 8 -11.0 2.014 4.822 9 -10.9 1.976 4.585 Refine time 102.192 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -17.1 0.000 0.000 2 -17.0 1.362 1.944 3 -16.7 1.086 1.911 4 -15.9 1.813 2.491 5 -15.1 1.558 4.750 6 -15.0 1.737 4.714 7 -14.8 2.566 5.344 8 -14.7 1.539 2.647 9 -14.3 2.346 6.218 Refine time 96.496 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -15.2 0.000 0.000 2 -14.8 1.103 1.825 3 -14.5 1.777 2.471 4 -13.8 1.718 2.488 5 -13.7 1.355 1.883 6 -13.5 1.622 4.697 7 -13.2 2.172 4.527 8 -13.0 2.070 3.441 9 -13.0 2.430 6.612 Refine time 95.597 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.2 0.000 0.000 2 -13.2 1.312 1.813 3 -12.9 1.045 1.868 4 -11.0 1.801 4.938 5 -10.8 2.087 3.357 6 -10.7 1.420 2.400 7 -10.7 1.921 5.203 8 -10.7 2.618 6.117 9 -10.7 2.649 6.597 Refine time 98.741 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.3 0.000 0.000 2 -13.1 1.302 1.943 3 -12.5 1.052 1.569 4 -12.1 1.407 2.043 5 -11.2 1.165 4.771 6 -11.2 0.761 4.636 7 -10.8 2.534 5.614 8 -10.7 2.111 3.143 9 -10.6 2.204 6.124 Refine time 96.495 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.3 0.000 0.000 2 -13.1 1.323 1.928 3 -12.5 0.920 1.699 4 -11.8 1.321 4.589 5 -11.6 1.330 1.999 6 -11.4 1.923 2.598 7 -11.3 1.703 2.515 8 -11.2 0.980 4.670 9 -10.8 1.944 5.097 Refine time 99.284 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -18.0 0.000 0.000 2 -18.0 1.432 1.888 3 -17.7 1.180 2.033 4 -17.0 1.668 2.440 5 -16.5 1.762 4.912 6 -16.5 1.330 2.049 7 -16.3 1.622 4.592 8 -16.2 1.579 4.856 9 -16.1 2.148 3.475 Refine time 97.789 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -14.9 0.000 0.000 2 -14.9 1.291 1.935 3 -13.6 1.310 4.612 4 -13.4 1.484 2.186 5 -13.3 1.822 2.659 6 -13.3 1.384 4.675 7 -13.0 1.591 4.949 8 -12.8 1.751 4.789 9 -12.7 2.135 6.602 Refine time 94.981 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -16.0 0.000 0.000 2 -15.8 1.233 2.060 3 -14.6 1.353 4.687 4 -14.5 1.684 4.890 5 -14.3 1.760 2.612 6 -14.3 2.187 4.588 7 -14.0 1.796 2.552 8 -13.9 2.095 3.301 9 -13.7 2.506 6.078 Refine time 95.710 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.0 0.000 0.000 2 -11.9 1.392 1.842 3 -11.6 1.230 1.530 4 -11.5 0.975 1.605 5 -10.7 1.541 4.843 6 -10.3 2.068 4.594 7 -10.2 1.043 4.623 8 -10.1 1.774 5.041 9 -10.0 1.851 2.686 Refine time 98.569 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.8 0.000 0.000 2 -13.3 1.024 2.159 3 -13.0 1.190 1.736 4 -12.7 1.135 1.836 5 -12.3 1.554 2.504 6 -11.9 1.413 4.680 7 -11.8 1.419 4.831 8 -11.8 1.472 4.730 9 -11.7 1.846 2.774 Refine time 98.777 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.4 0.000 0.000 2 -12.5 1.109 1.788 3 -12.5 1.365 2.188 4 -12.3 1.372 1.721 5 -11.8 1.147 4.564 6 -11.6 1.776 4.367 7 -11.4 1.053 1.547 8 -11.4 1.950 3.166 9 -11.3 1.063 4.733 Refine time 98.762 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.5 0.000 0.000 2 -12.1 1.328 1.943 3 -12.1 0.961 1.890 4 -11.4 1.278 4.685 5 -11.4 1.263 1.892 6 -10.9 1.678 2.659 7 -10.5 1.110 4.712 8 -10.5 2.760 4.802 9 -10.3 2.239 6.244 Refine time 100.351 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.4 0.000 0.000 2 -12.9 1.428 2.203 3 -12.8 1.391 1.723 4 -12.7 0.911 1.989 5 -12.6 1.333 4.663 6 -12.4 1.096 4.602 7 -11.9 1.366 4.596 8 -11.8 2.074 4.600 9 -11.7 2.118 2.876 Refine time 99.446 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -13.8 0.000 0.000 2 -13.4 1.222 2.199 3 -13.3 1.095 1.874 4 -13.1 1.126 1.763 5 -12.6 0.998 4.559 6 -12.3 1.590 4.804 7 -12.1 1.856 2.917 8 -11.7 2.052 3.294 9 -11.4 1.942 3.414 Refine time 99.568 Using random seed: 0 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----|
| (kcal/mol) | rmsd l.b.| rmsd u.b. 1 -12.8 0.000 0.000 2 -12.3 1.001 1.878 3 -12.3 1.382 2.065 4 -12.2 1.093 4.715 5 -12.0 1.405 4.648 6 -11.7 1.527 1.981 7 -11.5 1.015 4.599 8 -11.1 2.505 3.510 9 -10.8 2.104 4.762 Refine time 97.763 Loop time 5970.598 smina finished with exit code 0. Output: Trial10_pH7.4_flexdocked.sdf Log: Trial10_pH7.4_flexdocked.log Run record: Trial10_pH7.4_flexdocked.run.json Flexible side chains (one model per pose): Trial10_pH7.4_flexdocked_flexres.pdb ✔ Coverage: all 9 ligands have poses. Note: 18 of 540 poses could not be read as written by smina and were rebuilt from the submitted ligand (coordinates kept, bond orders from the input). ⚠ Box check: 4 of 540 poses have a heavy atom within 1 Å of the box edge (0 outside it); ligands: blind_challenge_001, blind_challenge_003. The box may be limiting these ligands - consider a larger autobox_add.
5. View docking results¶
Poses are sorted by smina score (best first). Step through them with the slider; the ligand from the original PDB (reference) is shown with red carbons and the current pose with green carbons. Untick Ligand from PDB (red) to hide the reference ligand.
After flexible docking each pose is shown together with its own flexed side chains (magenta carbons), with the original crystal side-chain positions overlaid in thin grey (toggle). The receptor for each pose is rebuilt from the rigid protein plus that pose's model in <output>_flexres.pdb.
# Re-run this cell after smina has finished
DOCKED_SDF = Path(panel.output.value)
poses, pose_table, FLEX_PDB = [], None, None
if DOCKED_SDF.exists():
poses = dt.load_poses(DOCKED_SDF)
FLEX_PDB = dt.flex_file_for(DOCKED_SDF) # present only after flexible docking
FLEX_PDB = FLEX_PDB if FLEX_PDB.exists() else None
print(f"{len(poses)} poses in {DOCKED_SDF}")
if FLEX_PDB:
print(f"Flexible side chains: {FLEX_PDB}")
pose_table = dt.results_browser(poses, site.protein, site.ligand_ref, flex_pdb=FLEX_PDB)
else:
print(f"{DOCKED_SDF} not found - press 'Run smina' above, then re-run this cell")
Note: 18 of 540 poses could not be read as written by smina and were rebuilt from the submitted ligand (coordinates kept, bond orders from the input). 540 poses in Trial10_pH7.4_flexdocked.sdf Flexible side chains: Trial10_pH7.4_flexdocked_flexres.pdb
Flexible residues (magenta): ASP A83, HIS B51, ASP B75, ASP B129, TYR B130, SER B135, TYR B150, ASN B152, TYR B161
Protein (RasMol secondary structure):helixsheetcoil/turn
3Dmol.js failed to load for some reason. Please check your browser console for error messages.
pose_table.head(10) if pose_table is not None else None
| pose_id | name | minimizedAffinity | |
|---|---|---|---|
| 0 | pose_450 | blind_challenge_008 | -18.00898 |
| 1 | pose_451 | blind_challenge_008 | -18.00148 |
| 2 | pose_452 | blind_challenge_008 | -17.73066 |
| 3 | pose_405 | blind_challenge_008 | -17.08411 |
| 4 | pose_453 | blind_challenge_008 | -17.02842 |
| 5 | pose_406 | blind_challenge_008 | -16.99608 |
| 6 | pose_407 | blind_challenge_008 | -16.72805 |
| 7 | pose_454 | blind_challenge_008 | -16.51290 |
| 8 | pose_455 | blind_challenge_008 | -16.50707 |
| 9 | pose_456 | blind_challenge_008 | -16.34045 |
6. Binding-affinity prediction with AEV-PLIG¶
AEV-PLIG is a graph neural network scoring function (atomic environment vectors + protein–ligand interaction graphs). The model used is model_GATv2Net_ligsim90_fep_benchmark (ensemble of 10), copied with the prediction code into ../aev_plig/ in this project. Predictions are pK values (higher = tighter binding); the spread across the 10 models is reported as AEV_PLIG_pK_std.
Metal-containing binding sites. AEV-PLIG reads only the standard amino acids, so metal ions (e.g. Zn, Mg), waters and cofactors are ignored. On its CASF-2016 test set, complexes with a metal coordinating the ligand were predicted less accurately (RMSE 1.44 vs 1.00 pK units). smina has no metal-specific term either. Treat scores for metalloenzymes with caution; see the ../README section Metal-containing binding sites. This ZIKV NS2B-NS3 protease structure has no metal in the binding site, so that caveat does not apply here.
All results are exported to predictions/ next to the docked SDF:
| File | Content |
|---|---|
poses/<docked>/pose_<i>.sdf |
one file per pose (AEV-PLIG input) |
poses/<docked>/pose_<i>_receptor.pdb |
flexible docking only: the receptor with that pose's flexed side chains (each pose is scored against its own receptor) |
<docked>_aevplig_input.csv |
AEV-PLIG input table |
<docked>_predictions.csv |
raw AEV-PLIG output (10 models + mean) |
<docked>_summary.csv |
name, pose, smina score, pK, pK std, best-pose flags |
<docked>_scored.sdf |
all poses annotated with pK |
<docked>_best_poses.sdf |
highest-pK pose per ligand |
<docked>_best_poses_table.csv |
best pose per ligand plus the ligand from the original PDB in its crystal pose: AEV-PLIG pK (also the red dashed line on the plot) and smina scores, the box check (box_margin, at_box_edge), plus ligand efficiency (heavy_atoms, LE_AEV_PLIG = 1.364 × pK / heavy atoms, LE_smina = −smina score / heavy atoms; kcal/mol per heavy atom) – minimizedAffinity after local minimisation in the site (comparable with the docked poses), smina_score_only for the unmodified crystal coordinates and minimizedRMSD (how far minimisation moved it) |
pdb_ligand/ |
the PDB ligand as scored by smina, its minimised pose and the smina log |
<docked>_best_poses.pse |
PyMOL session of the best poses (section 7) |
best_poses_pdb/<docked>/<ligand>_<pose>_ligand.pdb and ..._complex.pdb |
highest-pK pose per ligand in PDB format: ligand only, and protein–ligand complex (ligand = chain L, resname LIG) using that pose's own receptor (flexed side chains after flexible docking); REMARKs give smina score and pK |
<docked>_smina_vs_aevplig.png |
score comparison plot |
copies of docked SDF, receptor, _flexres.pdb (flexible), reference ligand, conformers and images |
for a self-contained record |
predict_button = dt.widgets.Button(description="Run AEV-PLIG", button_style="success", icon="play")
predict_out = dt.widgets.Output()
summary = None
def _predict(_=None):
global summary
predict_out.clear_output()
with predict_out:
if not DOCKED_SDF.exists():
print("No docked SDF yet - run smina and the 'View docking results' cell first")
return
extras = [CONF_SDF, site.ligand_pdb, site.ligand_ref, complex_png, site_png,
DOCKED_SDF.with_suffix(".log")]
# smina scores for the ligand from the PDB in its crystal pose (same smina + scoring function)
ref_smina = None
if REF_MOL is not None:
ref_smina = dt.smina_score_ligand(REF_MOL, site.protein,
DOCKED_SDF.parent / "predictions" / "pdb_ligand",
smina=panel.smina.value, scoring=panel.scoring_arg)
summary = dt.run_aev_plig(DOCKED_SDF, site.protein, extra_files=extras, flex_pdb=FLEX_PDB,
reference_mol=REF_MOL, # also score the ligand from the PDB
reference_smina=ref_smina)
display(summary.head(10))
predict_button.on_click(_predict)
display(dt.widgets.VBox([predict_button, predict_out]))
if AUTO_RUN:
_predict()
PDB ligand smina: score_only -5.13, minimized -7.68 kcal/mol (RMSD 1.45 Å) Note: 18 of 540 poses could not be read as written by smina and were rebuilt from the submitted ligand (coordinates kept, bond orders from the input). Flexible docking: building a receptor with flexed side chains for each pose
$ python process_and_predict.py --dataset_csv=predictions/Trial10_pH7.4_flexdocked_aevplig_input.csv --data_name=Trial10_pH7.4_flexdocked --trained_model_name=model_GATv2Net_ligsim90_fep_benchmark --num_workers=24 --output_dir=predictions
PDB ligand 01_B203: AEV-PLIG pK 5.82 +/- 0.28 Best pose per ligand exported as PDB (9 ligands) to predictions/best_poses_pdb/Trial10_pH7.4_flexdocked
All results exported to predictions
| pose_id | name | minimizedAffinity | AEV_PLIG_pK | AEV_PLIG_pK_std | heavy_atoms | LE_AEV_PLIG | LE_smina | box_margin | at_box_edge | ... | preds_0 | preds_1 | preds_2 | preds_3 | preds_4 | preds_5 | preds_6 | preds_7 | preds_8 | preds_9 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | pose_306 | blind_challenge_006 | -12.32178 | 6.907495 | 0.330447 | 22 | 0.428341 | 0.560081 | 3.5756 | False | ... | 7.349104 | 6.949194 | 7.072760 | 6.847627 | 6.978534 | 6.545309 | 7.011075 | 6.291999 | 6.693471 | 7.335875 |
| 1 | pose_297 | blind_challenge_006 | -13.12000 | 6.844444 | 0.520139 | 22 | 0.424431 | 0.596364 | 3.5412 | False | ... | 7.593317 | 6.536379 | 6.893648 | 6.715978 | 7.285118 | 6.568797 | 7.297759 | 5.945539 | 6.317495 | 7.290411 |
| 2 | pose_342 | blind_challenge_007 | -13.40916 | 6.822422 | 0.248809 | 22 | 0.423066 | 0.609507 | 3.3606 | False | ... | 6.974670 | 6.674167 | 7.148452 | 6.673628 | 6.721202 | 6.673856 | 7.261190 | 6.424926 | 6.849293 | 6.822839 |
| 3 | pose_379 | blind_challenge_007 | -13.99876 | 6.779933 | 0.273102 | 22 | 0.420431 | 0.636307 | 3.2457 | False | ... | 6.991997 | 6.803526 | 6.919332 | 6.353972 | 6.801035 | 6.671678 | 7.338460 | 6.483839 | 6.666098 | 6.769393 |
| 4 | pose_63 | blind_challenge_001 | -12.64623 | 6.760910 | 0.389216 | 21 | 0.439216 | 0.602201 | 3.6120 | False | ... | 7.369019 | 6.508353 | 7.135159 | 6.402383 | 6.423962 | 6.860282 | 6.459449 | 6.332380 | 6.852284 | 7.265831 |
| 5 | pose_362 | blind_challenge_007 | -13.89716 | 6.715205 | 0.258574 | 22 | 0.416417 | 0.631689 | 2.8842 | False | ... | 6.706265 | 6.252880 | 6.896774 | 6.662331 | 6.999681 | 6.563230 | 7.074929 | 6.635466 | 6.445806 | 6.914698 |
| 6 | pose_301 | blind_challenge_006 | -11.45414 | 6.709193 | 0.285616 | 22 | 0.416044 | 0.520643 | 4.6153 | False | ... | 6.437403 | 6.791747 | 7.036193 | 7.183414 | 6.605046 | 6.746300 | 6.209325 | 6.791051 | 6.495994 | 6.795457 |
| 7 | pose_52 | blind_challenge_001 | -12.51171 | 6.688302 | 0.288329 | 21 | 0.434499 | 0.595796 | 4.3762 | False | ... | 6.443880 | 7.004278 | 6.794853 | 7.019207 | 6.744461 | 6.993061 | 6.442625 | 6.807758 | 6.215051 | 6.417855 |
| 8 | pose_350 | blind_challenge_007 | -11.19731 | 6.678126 | 0.348028 | 22 | 0.414118 | 0.508969 | 3.7873 | False | ... | 7.103689 | 6.664917 | 6.909910 | 7.194733 | 6.682888 | 6.204497 | 6.679413 | 6.319148 | 6.211721 | 6.810340 |
| 9 | pose_303 | blind_challenge_006 | -11.23778 | 6.661716 | 0.354626 | 22 | 0.413100 | 0.510808 | 3.3664 | False | ... | 6.974382 | 6.503165 | 7.042624 | 6.405620 | 6.846090 | 6.761321 | 6.660392 | 5.904623 | 6.474832 | 7.044115 |
10 rows × 23 columns
Step through poses ranked by AEV-PLIG pK¶
if summary is not None:
dt.results_browser(poses, site.protein, site.ligand_ref, predictions=summary, sort_by="AEV_PLIG_pK",
flex_pdb=FLEX_PDB)
Flexible residues (magenta): ASP A83, HIS B51, ASP B75, ASP B129, TYR B130, SER B135, TYR B150, ASN B152, TYR B161
Protein (RasMol secondary structure):helixsheetcoil/turn
3Dmol.js failed to load for some reason. Please check your browser console for error messages.
# Best pose per ligand by AEV-PLIG, plus the ligand from the original PDB in its crystal pose.
# Ligand efficiency (kcal/mol per heavy atom): LE_AEV_PLIG = 1.364 x pK / heavy atoms; LE_smina = -smina score / heavy atoms
# (best poses are also exported as PDB: ligand only + protein-ligand complex)
if summary is not None:
best_table = pd.read_csv(DOCKED_SDF.parent / "predictions" / f"{DOCKED_SDF.stem}_best_poses_table.csv")
display(best_table.style.format({"minimizedAffinity": "{:.2f}", "AEV_PLIG_pK": "{:.2f}",
"AEV_PLIG_pK_std": "{:.2f}", "smina_score_only": "{:.2f}",
"minimizedRMSD": "{:.2f}", "LE_AEV_PLIG": "{:.3f}",
"LE_smina": "{:.3f}", "box_margin": "{:.2f}"}, na_rep="–")
.apply(lambda r: ["background-color: #fde2e2" if r["source"] == "ligand from PDB" else ""] * len(r),
axis=1).hide(axis="index"))
best_pdb_dir = DOCKED_SDF.parent / "predictions" / "best_poses_pdb" / DOCKED_SDF.stem
print(f"PDB files in {best_pdb_dir}:")
for f in sorted(best_pdb_dir.glob("*.pdb")):
print(" ", f.name)
| source | name | pose_id | minimizedAffinity | AEV_PLIG_pK | AEV_PLIG_pK_std | heavy_atoms | LE_AEV_PLIG | LE_smina | box_margin | at_box_edge | smina_score_only | minimizedRMSD |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| docked (best AEV-PLIG pose) | blind_challenge_006 | pose_306 | -12.32 | 6.91 | 0.33 | 22 | 0.428 | 0.560 | 3.58 | False | – | – |
| docked (best AEV-PLIG pose) | blind_challenge_007 | pose_342 | -13.41 | 6.82 | 0.25 | 22 | 0.423 | 0.610 | 3.36 | False | – | – |
| docked (best AEV-PLIG pose) | blind_challenge_001 | pose_63 | -12.65 | 6.76 | 0.39 | 21 | 0.439 | 0.602 | 3.61 | False | – | – |
| docked (best AEV-PLIG pose) | blind_challenge_003 | pose_146 | -12.73 | 6.56 | 0.32 | 22 | 0.407 | 0.579 | 3.07 | False | – | – |
| docked (best AEV-PLIG pose) | blind_challenge_004 | pose_189 | -12.61 | 6.50 | 0.28 | 21 | 0.422 | 0.600 | 3.48 | False | – | – |
| docked (best AEV-PLIG pose) | blind_challenge_009 | pose_477 | -11.96 | 6.42 | 0.45 | 21 | 0.417 | 0.570 | 3.45 | False | – | – |
| docked (best AEV-PLIG pose) | blind_challenge_002 | pose_111 | -12.56 | 6.40 | 0.47 | 21 | 0.416 | 0.598 | 3.79 | False | – | – |
| docked (best AEV-PLIG pose) | blind_challenge_005 | pose_257 | -13.79 | 6.33 | 0.34 | 21 | 0.411 | 0.657 | 4.57 | False | – | – |
| docked (best AEV-PLIG pose) | blind_challenge_008 | pose_422 | -13.01 | 6.27 | 0.32 | 21 | 0.407 | 0.619 | 2.03 | False | – | – |
| ligand from PDB | 01_B203 | crystal pose | -7.68 | 5.82 | 0.28 | 29 | 0.274 | 0.265 | 4.00 | False | -5.13 | 1.45 |
PDB files in predictions/best_poses_pdb/Trial10_pH7.4_flexdocked: blind_challenge_001_pose_63_complex.pdb blind_challenge_001_pose_63_ligand.pdb blind_challenge_002_pose_111_complex.pdb blind_challenge_002_pose_111_ligand.pdb blind_challenge_003_pose_146_complex.pdb blind_challenge_003_pose_146_ligand.pdb blind_challenge_004_pose_189_complex.pdb blind_challenge_004_pose_189_ligand.pdb blind_challenge_005_pose_257_complex.pdb blind_challenge_005_pose_257_ligand.pdb blind_challenge_006_pose_306_complex.pdb blind_challenge_006_pose_306_ligand.pdb blind_challenge_007_pose_342_complex.pdb blind_challenge_007_pose_342_ligand.pdb blind_challenge_008_pose_422_complex.pdb blind_challenge_008_pose_422_ligand.pdb blind_challenge_009_pose_477_complex.pdb blind_challenge_009_pose_477_ligand.pdb
7. Export best poses as a PyMOL session¶
Saves predictions/<docked>_best_poses.pse with the best AEV-PLIG pose of each ligand, ready to open in PyMOL:
receptor– cartoon (RasMol secondary-structure colours) with binding-site side chains as light-blue sticks- one group per ligand, ranked by pK (
01_<ligand>,02_<ligand>…) containing the pose (_pose), its polar contacts (_hbonds) and, after flexible docking, that pose's flexed side chains (_flexed, magenta) PDB_ligand– the ligand from the original PDB (red carbons)
Only the top-ranked ligand is switched on initially (tick Show all ligands to enable every one); toggle groups in PyMOL's object panel. Each pose's title shows its name, pose id, pK and smina score.
pse_all = dt.widgets.Checkbox(value=False, description="Show all ligands when the session opens")
pse_button = dt.widgets.Button(description="Export PyMOL session", button_style="success", icon="download")
pse_out = dt.widgets.Output()
def _export_pse(_=None):
pse_out.clear_output()
with pse_out:
if summary is None:
print("Run AEV-PLIG first (section 6)")
return
dt.export_pymol_session(DOCKED_SDF, site.protein, reference_ligand=site.ligand_ref,
enable="all" if pse_all.value else "top")
pse_button.on_click(_export_pse)
display(dt.widgets.VBox([pse_all, pse_button, pse_out]))
if AUTO_RUN:
_export_pse()
Note: 18 of 540 poses could not be read as written by smina and were rebuilt from the submitted ligand (coordinates kept, bond orders from the input).
PyMOL session with 9 best poses written to predictions/Trial10_pH7.4_flexdocked_best_poses.pse