Install any skill in seconds. Free to start, no credit card required.
Get Started Free →DiffDock and DiffDock-L molecular docking. Use for protein-small-molecule pose prediction from PDB or sequence plus SMILES/SDF/MOL2, batch docking, virtual screening, and pose-confidence interpretation. Not for binding affinity prediction.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 404% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 213% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 496% | 0% |
DiffDock is a diffusion-based deep learning tool for molecular docking that predicts 3D binding poses of small molecule ligands to protein targets. It represents the state-of-the-art in computational docking, crucial for structure-based drug discovery and chemical biology.
Core Capabilities:
Key Distinction: DiffDock predicts binding poses (3D structure) and confidence (prediction certainty), NOT binding affinity (ΔG, Kd). Always combine with scoring functions (GNINA, MM/GBSA) for affinity assessment.
This skill should be used when:
Before proceeding with DiffDock tasks, verify the environment setup:
bash# Use the provided setup checker python scripts/setup_check.py
This script validates Python version, PyTorch with CUDA, PyTorch Geometric, RDKit, ESM, and other dependencies.
Option 1: Conda (Recommended)
bashgit clone https://github.com/gcorso/DiffDock.git cd DiffDock conda env create --file environment.yml conda activate diffdock
Option 2: Docker
bashdocker pull rbgcsail/diffdock docker run -it --gpus all --entrypoint /bin/bash rbgcsail/diffdock micromamba activate diffdock
Important Notes:
default_inference_args.yamlUse Case: Dock one ligand to one protein target
Input Requirements:
Command:
bashpython -m inference \ --config default_inference_args.yaml \ --protein_path protein.pdb \ --ligand_description "CC(=O)Oc1ccccc1C(=O)O" \ --out_dir results/single_docking/
Alternative (protein sequence):
bashpython -m inference \ --config default_inference_args.yaml \ --protein_sequence "MSKGEELFTGVVPILVELDGDVNGHKF..." \ --ligand_description ligand.sdf \ --out_dir results/sequence_docking/
Output Structure:
results/single_docking/
└── complex_0/
├── rank1.sdf # Convenience copy of top-ranked pose
├── rank1_confidence0.87.sdf # Top-ranked pose with confidence in filename
├── rank2_confidence0.42.sdf # Second-ranked pose
├── ...
└── rank10_confidence-1.23.sdf # 10th pose (default: 10 samples)Current inference.py registers --ligand_description for single-complex runs. Some upstream README text still says --ligand; use --ligand_description unless your local checkout explicitly supports a --ligand alias.
Use Case: Dock multiple ligands to proteins, virtual screening campaigns
Step 1: Prepare Batch CSV
Use the provided script to create or validate batch input:
bash# Create template python scripts/prepare_batch_csv.py --create --output batch_input.csv # Validate existing CSV python scripts/prepare_batch_csv.py my_input.csv --validate
CSV Format:
csvcomplex_name,protein_path,ligand_description,protein_sequence complex1,protein1.pdb,CC(=O)Oc1ccccc1C(=O)O, complex2,,COc1ccc(C#N)cc1,MSKGEELFT... complex3,protein3.pdb,ligand3.sdf,
Required Columns:
complex_name: Unique identifierprotein_path: PDB file path (leave empty if using sequence)ligand_description: SMILES string or ligand file pathprotein_sequence: Amino acid sequence (leave empty if using PDB)Step 2: Run Batch Docking
bashpython -m inference \ --config default_inference_args.yaml \ --protein_ligand_csv batch_input.csv \ --out_dir results/batch/ \ --batch_size 10
For Large Virtual Screening (>100 compounds):
Pre-compute protein embeddings for faster processing:
bash# Pre-compute embeddings python datasets/esm_embedding_preparation.py \ --protein_ligand_csv screening_input.csv \ --out_file protein_embeddings.pt # Run with pre-computed embeddings python -m inference \ --config default_inference_args.yaml \ --protein_ligand_csv screening_input.csv \ --esm_embeddings_path protein_embeddings.pt \ --out_dir results/screening/
After docking completes, analyze confidence scores and rank predictions:
bash# Analyze all results python scripts/analyze_results.py results/batch/ # Show top 5 per complex python scripts/analyze_results.py results/batch/ --top 5 # Filter by confidence threshold python scripts/analyze_results.py results/batch/ --threshold 0.0 # Export to CSV python scripts/analyze_results.py results/batch/ --export summary.csv # Show top 20 predictions across all complexes python scripts/analyze_results.py results/batch/ --best 20
The analysis script:
Understanding Scores:
| Score Range | Confidence Level | Interpretation | |------------|------------------|----------------| | > 0 | High | Strong prediction, likely accurate | | -1.5 to 0 | Moderate | Reasonable prediction, validate carefully | | < -1.5 | Low | Uncertain prediction, requires validation |
Critical Notes:
For detailed guidance: Read references/confidence_and_limitations.md using the Read tool
Create custom configuration for specific use cases:
bash# Copy template cp assets/custom_inference_config.yaml my_config.yaml # Edit parameters (see template for presets) # Then run with custom config python -m inference \ --config my_config.yaml \ --protein_ligand_csv input.csv \ --out_dir results/
Sampling Density:
samples_per_complex: 10 → Increase to 20-40 for difficult casesInference Steps:
inference_steps: 20 → Increase to 25-30 for higher accuracyTemperature Parameters (control diversity):
temp_sampling_tor: 7.04 → Increase for flexible ligands (8-10)temp_sampling_tor: 7.04 → Decrease for rigid ligands (5-6)Presets Available in Template:
For complete parameter reference: Read references/parameters_reference.md using the Read tool
For proteins with known flexibility, dock to multiple conformations:
python# Create ensemble CSV import pandas as pd conformations = ["conf1.pdb", "conf2.pdb", "conf3.pdb"] ligand = "CC(=O)Oc1ccccc1C(=O)O" data = { "complex_name": [f"ensemble_{i}" for i in range(len(conformations))], "protein_path": conformations, "ligand_description": [ligand] * len(conformations), "protein_sequence": [""] * len(conformations) } pd.DataFrame(data).to_csv("ensemble_input.csv", index=False)
Run docking with increased sampling:
bashpython -m inference \ --config default_inference_args.yaml \ --protein_ligand_csv ensemble_input.csv \ --samples_per_complex 20 \ --out_dir results/ensemble/
DiffDock generates poses; combine with other tools for affinity:
GNINA (Fast neural network scoring):
bashfor pose in results/single_docking/complex_0/*confidence*.sdf; do gnina -r protein.pdb -l "$pose" --score_only done
MM/GBSA (More accurate, slower): Use AmberTools MMPBSA.py or gmx_MMPBSA after energy minimization
Free Energy Calculations (Most accurate): Use OpenMM + OpenFE or GROMACS for FEP/TI calculations
Recommended Workflow:
DiffDock IS Designed For:
DiffDock IS NOT Designed For:
For complete limitations: Read references/confidence_and_limitations.md using the Read tool
Issue: Low confidence scores across all predictions
samples_per_complex (20-40), try ensemble docking, validate protein structureIssue: Out of memory errors
--batch_size 2 or process fewer complexes at onceIssue: Slow performance
python -c "import torch; print(torch.cuda.is_available())", use GPUIssue: Unrealistic binding poses
Issue: "Module not found" errors
python scripts/setup_check.py to diagnoseFor Best Results:
For interactive use, launch the web interface:
bashpython app/main.py # Navigate to http://localhost:7860
Or use the online demo without installation:
scripts/)prepare_batch_csv.py: Create and validate batch input CSV files
analyze_results.py: Analyze confidence scores and rank predictions
setup_check.py: Verify DiffDock environment setup
references/)parameters_reference.md: Complete parameter documentation
Read this file when users need:
confidence_and_limitations.md: Confidence score interpretation and tool limitations
Read this file when users need:
workflows_examples.md: Comprehensive workflow examples
Read this file when users need:
assets/)batch_template.csv: Template for batch processing
custom_inference_config.yaml: Configuration template
setup_check.py before starting large jobsprepare_batch_csv.py to catch errors earlyWhen using DiffDock, cite the appropriate papers:
DiffDock-L (current default model):
Corso et al. (2024) "Deep Confident Steps to New Pockets: Strategies for Docking Generalization"
ICLR 2024, arXiv:2402.18396Original DiffDock:
Corso et al. (2023) "DiffDock: Diffusion Steps, Twists, and Turns for Molecular Docking"
ICLR 2023, arXiv:2210.01776Other measured skills in the registry, with their headline benchmark lift.