Multi-engine ensemble docking pipeline for virtual screening. Use when docking ligand libraries against protein targets with tiered accuracy. Integrates Uni-Dock (GPU fast scan), DiffDock (deep learning), and GNINA (CNN scoring) for consensus-based hit ranking.
Tiered accuracy. Consensus confidence. One command.
┌─────────────────────────────────────────────────────────┐
│ ENSEMBLE DOCKING │
├─────────────────────────────────────────────────────────┤
│ Stage 1: Uni-Dock (GPU) → Fast scan, top 100 │
│ Stage 2: DiffDock (Deep) → Flexible binding, top 20│
│ Stage 3: Consensus Scoring → Aggregated ranking │
├─────────────────────────────────────────────────────────┤
│ Fallback: GNINA (CPU) → CNN-scored Vina │
└─────────────────────────────────────────────────────────┘
# Fast screening (Uni-Dock only)
pymolcode.dock --protein target.pdb --library compounds.sdf --mode fast
# Deep analysis (DiffDock only)
pymolcode.dock --protein target.pdb --library compounds.sdf --mode deep
# Full ensemble pipeline (recommended)
pymolcode.dock --protein target.pdb --library compounds.sdf --mode ensemble
# With options
pymolcode.dock \
--protein target.pdb \
--library library.sdf \
--mode ensemble \
--top-n 20 \
--gpu 0 \
--output results/
| Mode | Stage 1 | Stage 2 | Output | Use Case |
|---|---|---|---|---|
fast | Uni-Dock | — | 100 | Large library screening |
deep | — | DiffDock | 20 | Small set, high accuracy |
ensemble | Uni-Dock | DiffDock | 20 | Production screening |
ensemble-docking/
├── SKILL.md # This file
├── references/
│ ├── uni-dock.md # Uni-Dock integration guide
│ ├── diffdock.md # DiffDock integration guide
│ ├── gnina.md # GNINA fallback setup
│ ├── consensus.md # Scoring methodology
│ └── outputs.md # Result formats
└── scripts/
├── pipeline.py # Main orchestration
├── stage1_unidock.py # Fast scan module
├── stage2_diffdock.py # Deep dock module
├── stage3_consensus.py # Scoring aggregator
└── fallback_gnina.py # CPU fallback
{
"job_id": "dock_20260228_abc123",
"protein": "target.pdb",
"library_size": 10000,
"mode": "ensemble",
"results": [
{
"rank": 1,
"ligand_id": "compound_0042",
"unidock_score": -9.2,
"diffdock_confidence": 0.89,
"consensus_score": 0.92,
"pose": "poses/compound_0042_best.pdb"
}
],
"timing": {
"stage1_unidock": "45s",
"stage2_diffdock": "180s",
"stage3_consensus": "2s"
}
}
from pymolcode.skills.research import EnsembleDocking
# Initialize pipeline
dock = EnsembleDocking(gpu=0)
# Run ensemble docking
results = dock.run(
protein="target.pdb",
library="compounds.sdf",
mode="ensemble",
top_n=20
)
# Access top hits
for hit in results.top_hits:
print(f"{hit.ligand_id}: score={hit.consensus_score:.2f}")
Formula:
consensus_score = 0.4 × norm(unidock) + 0.6 × diffdock_confidence
Components:
Designed by Daedalus. Built for elegance.