Skip to content

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:

  1. BindingDB — 3.2M experimentally measured compound-target binding affinities
  2. ChEMBL — approved drug mechanisms of action and targets
  3. 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
  1. ChEMBL: SQL query on drug_mechanism table → compound + target UniProt + action type
  2. BindingDB: Parse TSV, filter entries with Ki/IC50/Kd ≤ 1000nM (default cutoff)
  3. Cross-reference: Check each target UniProt against protein_map (Olink) + competitor panels
  4. 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?