Compound → Target → Olink Panel¶
Given a compound (drug, natural product, or chemical), find which Olink assay targets it binds.
Motivation¶
Researchers using mass spectrometry (e.g., GNPS) identify compounds from nature that may have drug potential. The question is: can we measure the target protein with Olink PEA?
This pipeline answers that by cross-referencing:
- BindingDB — 3.2M experimentally measured compound-target binding affinities
- ChEMBL — approved drug mechanisms of action and targets
- Olink protein_map — which targets are available on Olink panels
Usage¶
# Download the data $ uv run bioingest-cli download bindingdb # 15MB curated subset $ uv run bioingest-cli download chembl # 1GB SQLite # Build the cross-reference view $ uv run python -c " from bioingest.compound_target import build_compound_target_view, save_view from pathlib import Path results = build_compound_target_view(data_dir=Path('data'), affinity_cutoff_nm=1000) save_view(results, Path('data/compound_target_olink.tsv')) " ChEMBL: 1,847 drug-target mechanisms BindingDB: 42,318 high-affinity pairs (≤1000nM) Total: 44,165 compound-target pairs, 8,421 on Olink Saved: data/compound_target_olink.tsv
Output¶
TSV with columns:
| Column | Description |
|---|---|
| compound_name | Drug or compound name |
| compound_id | ChEMBL ID (if from ChEMBL) |
| smiles | Chemical structure (SMILES format) |
| target_uniprot | UniProt ID of the protein target |
| mechanism | Mechanism of action (ChEMBL only) |
| action_type | Inhibitor, agonist, antagonist, etc. |
| affinity_nm | Binding affinity in nM (BindingDB only) |
| affinity_type | Ki, IC50, or Kd |
| source | ChEMBL or BindingDB |
| olink_available | "yes" if target is on an Olink panel |
| olink_panels | Which panels (Explore HT, Nomic Flex, etc.) |
Example rows¶
compound_name target_uniprot affinity_nm source olink_available olink_panels
Imatinib P00519 1.2 BindingDB yes Explore HT
Aspirin P23219 50.0 BindingDB yes Explore HT
Nivolumab P01730 ChEMBL yes Explore HT
Caffeine P29274 840.0 BindingDB yes Explore HT
Curcumin P10636 320.0 BindingDB yes Explore HT
Data Sources¶
| Source | Measurements | Coverage | Download |
|---|---|---|---|
| BindingDB (curated) | 180K | Articles curated by BindingDB team | 15 MB |
| BindingDB (full) | 3.2M | All sources (ChEMBL, patents, PubChem) | 564 MB |
| ChEMBL SQLite | 2M+ | Approved drugs + bioactivities | 1 GB |
| protein_map | 26K | UniProt → panel membership | Already built |
How It Works¶
flowchart LR
BDB[(BindingDB\n3.2M affinities)] --> MERGE
CHEMBL[(ChEMBL\ndrug mechanisms)] --> MERGE
MERGE[Cross-reference] --> FILTER{Target on\nOlink panel?}
FILTER -->|yes| OUT[compound_target_olink.tsv]
PMAP[(protein_map\n26K UniProt IDs)] --> FILTER
- ChEMBL: SQL query on
drug_mechanismtable → compound + target UniProt + action type - BindingDB: Parse TSV, filter entries with Ki/IC50/Kd ≤ 1000nM (default cutoff)
- Cross-reference: Check each target UniProt against protein_map (Olink) + competitor panels
- Output: Sorted with Olink-available targets first, then by affinity strength
Configuration¶
results = build_compound_target_view(
data_dir=Path("data"),
affinity_cutoff_nm=1000, # Only include affinities ≤ 1 uM
# Use 100 for high-confidence hits only
# Use 10000 for broader coverage
)
Use Cases¶
| Scenario | How |
|---|---|
| Natural product target prediction | Input SMILES → search BindingDB → filter olink_available |
| Olink follow-up study design | Filter TSV to olink_available=yes → plan PEA experiment |
| Drug repurposing candidates | Query ChEMBL approved drugs → check which targets overlap with your disease |
| Competitor comparison | Which compound-target pairs are measurable on MSD vs Olink? |
Related¶
- BioIngest — Data acquisition (downloads BindingDB + ChEMBL)
- Platform Overlap — Compare targets across 10 assay platforms
- Entity Resolution — How protein names are normalized