Docking and scoring notebook¶

Protocol for docking ligands into a target protein and rescoring the poses:

  1. RDKit generates a diverse, low-energy set of conformations for each ligand.
  2. 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).
  3. smina (https://sourceforge.net/projects/smina/) docks the conformers into the site (rigid or flexible side chains).
  4. 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.

How the notebook fits together

In [1]:
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)
Out[1]:
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.sdf are titled with their SMILES strings rather than names, so the check below offers the SDF's Molecule_Name field (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.sdf in this folder is the full 400-molecule set, in the same format; point LIGAND_SDF at 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.

In [2]:
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.

In [3]:
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
In [4]:
# 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])
Out[4]:
No description has been provided for this image

Browse individual input structures¶

Use the slider (or Prev / Next) to step through the molecules.

In [5]:
dt.molecule_browser(input_mols)
1/9  blind_challenge_001   heavy atoms: 21   SMILES: O=C(Nc1ccc2c(c1)CNC2)c1cccc2cn[nH]c12
No description has been provided for this image

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.

In [6]:
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.

In [7]:
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
In [8]:
# 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
No description has been provided for this image

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 .cif downloaded 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 01 is a local code rather than a PDB Chemical Component Dictionary one (the MOE header maps it to A1B89), 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.

In [9]:
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
No description has been provided for this image

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

In [10]:
# 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.

In [11]:
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()
No description has been provided for this image
Protein with ligand bound
No description has been provided for this image
Ligand in the binding site
Protein (RasMol secondary structure):helixsheetcoil/turn

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:

  • --minimize performs 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.pdb holding 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) and at_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, --cpu and 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).

In [12]:
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.

In [13]:
# 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
1/540   blind_challenge_008 (pose_450)   smina affinity: -18.01 kcal/mol
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.

In [14]:
pose_table.head(10) if pose_table is not None else None
Out[14]:
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
In [15]:
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
No description has been provided for this image
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¶

In [16]:
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)
1/540   blind_challenge_006 (pose_306)   smina affinity: -12.32 kcal/mol   AEV-PLIG pK: 6.91
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.

In [17]:
# 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.

In [18]:
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