Binding Landscape Analysis#

Analyze protein-ligand and protein-protein binding data to identify stable binding determinants and hot spots.

Overview#

Binding landscapes map mutations to affinity changes:

  • Position: Residue or modification site

  • Response: ΔΔG, IC50 change, or binding score

Spatial coherence identifies regions where binding effects are consistent, revealing true binding hot spots vs. noise.

Basic Example#

from phaselab.chem import (
    BindingLandscape,
    analyze_binding_coherence,
)

# Your binding data (e.g., alanine scan)
landscape = BindingLandscape(
    positions=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    affinities=[0.1, 0.2, 2.5, 2.8, 3.0, 2.7, 0.3, 0.1, -0.1, 0.0],
    target="ABL1",
    ligand="Imatinib",
    affinity_type="ddG",  # kcal/mol
)

# Analyze coherence
result = analyze_binding_coherence(landscape)

# View results
print(f"Hot spots identified: {len(result.hot_spots)}")
print(f"Validated: {result.is_validated}")

Finding Binding Hot Spots#

# Hot spots: large ΔΔG + high coherence
for hotspot in result.hot_spots:
    print(f"Hot spot at position {hotspot['position']}")
    print(f"  ΔΔG: {hotspot['effect']:.2f} kcal/mol")
    print(f"  Coherence: {hotspot['coherence']:.3f}")
    print(f"  Reliable: {'YES' if hotspot['coherence'] > 0.7 else 'NO'}")

# Stable binding regions
for region in result.stable_regions:
    print(f"Stable binding region: {region['start']}-{region['end']}")

IC50 and Other Metrics#

# Works with any affinity metric
landscape = BindingLandscape(
    positions=mutation_positions,
    affinities=fold_change_ic50,  # Log2 fold-change
    target="EGFR",
    ligand="Compound_X",
    affinity_type="log2_ic50_fc",
)

result = analyze_binding_coherence(
    landscape,
    effect_threshold=1.0,  # >2-fold change
)

Drug Discovery Application#

from phaselab.chem import (
    load_binding_data,
    identify_druggable_sites,
)

# Load binding data
landscape = load_binding_data(
    'binding_scan.csv',
    position_col='residue',
    binding_col='delta_delta_g',
)

# Analyze
result = analyze_binding_coherence(landscape)

# Find druggable regions
druggable = identify_druggable_sites(
    result,
    min_coherence=0.7,      # High confidence
    min_effect=2.0,          # Significant binding contribution
)

for site in druggable:
    print(f"Druggable site: {site['region']}")
    print(f"  Binding contribution: {site['total_ddg']:.1f} kcal/mol")
    print(f"  Confidence: {site['confidence']}")

Reaction Optimization#

The chemistry module also supports reaction condition optimization:

from phaselab.chem import (
    ReactionLandscape,
    analyze_reaction_coherence,
)

# Reaction screen data
landscape = ReactionLandscape(
    conditions=temperatures,  # Or pH, concentration, etc.
    yields=yield_values,
    reaction="Suzuki_coupling",
)

result = analyze_reaction_coherence(landscape)

# Find stable operating window
for window in result.stable_windows:
    print(f"Stable range: {window['min']}-{window['max']}")
    print(f"  Expected yield: {window['mean_yield']:.0f}%")
    print(f"  Variance: ±{window['std']:.0f}%")

HTS Screening Analysis#

Identify reliable hits from high-throughput screens:

from phaselab.chem import (
    ScreeningLandscape,
    analyze_screening_coherence,
)

# HTS data
landscape = ScreeningLandscape(
    compounds=compound_ids,
    activities=inhibition_values,
    assay="kinase_inhibition",
)

result = analyze_screening_coherence(landscape)

# Get reliable hits (active + coherent)
reliable_hits = result.reliable_hits
print(f"Reliable hits: {len(reliable_hits)} / {len(result.all_hits)}")

for hit in reliable_hits[:10]:
    print(f"{hit['compound']}: {hit['activity']:.1f}% (coh={hit['coherence']:.2f})")

Interpretation#

Binding Coherence Interpretation#

Coherence

Effect Size

Interpretation

High (>0.7)

Large ΔΔG

Reliable binding hot spot

High (>0.7)

Small ΔΔG

Stable but minor contribution

Low (<0.4)

Large ΔΔG

Artifact or context-dependent

Low (<0.4)

Small ΔΔG

Not a binding determinant

Next Steps#

  • /user_guide/howtos/integrate_with_rosetta - Combine with structure-based scoring

  • Claim Levels - Understanding confidence levels