← Back to Workflows

GPCR Ligand Screening

AI-powered virtual screening workflow to identify novel ligands for G protein-coupled receptor targets.

Overview

G protein-coupled receptors (GPCRs) are the largest family of membrane proteins and the target of approximately 34% of FDA-approved drugs. Traditional GPCR drug discovery is slow and expensive due to challenges in structure determination and screening.

Omic accelerates GPCR drug discovery by combining AlphaFold structure predictions with AI-powered virtual screening. This workflow covers the complete process from target preparation through lead optimization.

1

Prepare Target Structure

Retrieve experimental structure or use AlphaFold prediction. Identify and prepare binding sites for virtual screening.

from omic import Omic, AlphaFold

client = Omic(api_key="your_api_key")

# Get GPCR structure from AlphaFold
target = AlphaFold.get_structure(
    uniprot_id="P35462",  # 5-HT2A receptor
    include_confidence=True
)

# Identify binding sites
binding_sites = target.find_binding_sites(
    method="fpocket",
    include_orthosteric=True,
    include_allosteric=True
)

print(f"Found {len(binding_sites)} binding sites")
for site in binding_sites:
    print(f"  {site.name}: volume={site.volume:.0f}ų, "
          f"druggability={site.druggability:.2f}")

# Prepare orthosteric site for screening
primary_site = binding_sites.get_orthosteric()
prepared_site = primary_site.prepare(
    add_hydrogens=True,
    optimize_hbonds=True,
    grid_resolution=0.375
)
2

Define Compound Library

Select compounds from public databases or upload proprietary libraries. Apply filters to focus on drug-like molecules.

from omic import ChEMBL, PubChem

# Get known GPCR ligands from ChEMBL for reference
known_ligands = ChEMBL.get_activities(
    target_class="GPCR",
    activity_type="Ki",
    max_value=100  # nM
)

# Build screening library
library = client.create_compound_library(
    sources=[
        PubChem.get_collection("drug-like"),
        "s3://your-bucket/proprietary-compounds.sdf"
    ],
    filters={
        "mw_range": (250, 550),
        "logp_range": (-1, 5),
        "hbd_max": 5,
        "hba_max": 10,
        "rotatable_bonds_max": 10,
        "tpsa_range": (20, 140)
    },
    diversity_selection={
        "method": "maxmin",
        "target_size": 1000000
    }
)

print(f"Library size: {library.size:,} compounds")
3

Run Virtual Screening

Execute AI-powered docking using ensemble scoring methods for high accuracy hit identification.

# Run virtual screening
screening_job = client.virtual_screen(
    target=target,
    binding_site=prepared_site,
    library=library,
    methods={
        "docking": ["vina", "glide_sp"],
        "rescoring": ["rf_score", "gnina"],
        "consensus": "rank_by_rank"
    },
    options={
        "exhaustiveness": 16,
        "num_poses": 5,
        "flex_residues": ["F339", "F340", "W336"]
    }
)

# Monitor progress
screening_job.wait(progress=True)

# Get results
results = screening_job.results
print(f"Screening complete: {results.compounds_screened:,} compounds")
print(f"Hits (top 1%): {results.num_hits:,} compounds")
4

Analyze Hits

Review top-scoring compounds, analyze binding modes, and predict ADMET properties.

# Get top hits
hits = results.get_top_hits(n=1000)

# Cluster by scaffold
clusters = hits.cluster_by_scaffold(
    method="murcko",
    min_cluster_size=5
)

print(f"Found {len(clusters)} scaffold clusters")

# Analyze each cluster
for cluster in clusters[:10]:
    print(f"
Cluster {cluster.id}: {cluster.size} compounds")
    print(f"  Representative: {cluster.representative.smiles}")
    print(f"  Best score: {cluster.best_score:.2f}")

    # Predict ADMET for cluster representative
    admet = client.predict_admet(cluster.representative)
    print(f"  Solubility: {admet.solubility}")
    print(f"  hERG liability: {admet.herg_liability}")
    print(f"  CYP inhibition: {admet.cyp_inhibition}")

# Predict selectivity against off-targets
selectivity = client.predict_selectivity(
    compounds=hits.top(100),
    off_targets=["5HT2B", "5HT2C", "D2", "H1"]
)

# Visualize binding modes
hits.top(10).visualize_poses("binding_poses.html")
5

Optimize Leads

Use generative chemistry to design improved analogs with better potency, selectivity, and drug-like properties.

# Select lead compound for optimization
lead = clusters[0].representative

# Generate optimized analogs
optimization_job = client.optimize_compound(
    lead=lead,
    target=target,
    binding_site=prepared_site,
    objectives={
        "binding_affinity": {"direction": "maximize", "weight": 1.0},
        "selectivity_5ht2b": {"direction": "minimize", "weight": 0.8},
        "solubility": {"direction": "maximize", "weight": 0.5},
        "metabolic_stability": {"direction": "maximize", "weight": 0.5}
    },
    constraints={
        "mw_max": 500,
        "similarity_min": 0.6,  # Tanimoto to lead
        "synthetic_accessibility_max": 4.0
    },
    num_generations=50,
    population_size=100
)

# Get optimized compounds
optimized = optimization_job.wait()

print(f"Generated {len(optimized.compounds)} optimized analogs")
for compound in optimized.top(10):
    print(f"  {compound.smiles}")
    print(f"    Predicted Ki: {compound.predicted_ki:.1f} nM")
    print(f"    Selectivity: {compound.selectivity_ratio:.1f}x")
    print(f"    SA score: {compound.sa_score:.2f}")

# Export for synthesis
optimized.top(20).to_sdf("leads_for_synthesis.sdf")

Supported GPCR Classes

Class A (Rhodopsin-like)

Largest family including aminergic, peptide, and lipid receptors. Excellent AlphaFold coverage.

Class B (Secretin-like)

Includes GLP-1R and other peptide hormone receptors. Important for metabolic diseases.

Class C (Glutamate-like)

Includes mGluRs and GABA receptors. Allosteric modulation opportunities.

Start screening your GPCR targets

Access AI-powered virtual screening with our platform or discuss custom solutions for your targets.

Contact Us