One-Site Binding: Association and Dissociation Simulation

This notebook simulates and plots one-site association and dissociation traces for multiple ligand concentrations.

[5]:
import numpy as np
from pykingenie.utils.signal_surface import (
    one_site_association_analytical,
    one_site_dissociation_analytical,
)
from pykingenie.utils.plotting import plot_traces
from pykingenie.utils.palettes import VIRIDIS
from notebook_helpers import show_plotly_static

Package Functions Used

This notebook uses pykingenie package utilities directly:

  • one_site_association_analytical

  • one_site_dissociation_analytical

  • plot_traces

[6]:
# Kinetic parameters
Kd = 0.125           # μM
koff = 0.005          # 1/s
smax = 5.0           # response units
s0 = 0.0

# Log-spaced concentrations (μM)
concentrations = np.logspace(-3, 0, 6)
t_assoc = np.linspace(0, 300, 400)
t_disso = np.linspace(0, 300, 400)
[7]:
assoc_xs, assoc_ys, assoc_legends = [], [], []
disso_xs, disso_ys, disso_legends = [], [], []
colors = [VIRIDIS[int(i)] for i in np.linspace(0, len(VIRIDIS) - 1, len(concentrations))]

for conc in concentrations:
    assoc = one_site_association_analytical(
        t_assoc, s0=s0, s_max=smax, k_off=koff, Kd=Kd, A=conc, t0=0
    )
    disso = one_site_dissociation_analytical(t_disso, s0=assoc[-1], k_off=koff, t0=0)

    assoc_xs.append(t_assoc)
    assoc_ys.append(assoc)
    assoc_legends.append(f"{conc:.3g} uM")

    disso_xs.append(t_disso)
    disso_ys.append(disso)
    disso_legends.append(f"{conc:.3g} uM")

show = [True] * len(concentrations)
[8]:
combined_xs, combined_ys, combined_legends = [], [], []

for i, conc in enumerate(concentrations):
    t_disso_shifted = t_disso + t_assoc[-1]
    combined_xs.append([assoc_xs[i], t_disso_shifted])
    combined_ys.append([assoc_ys[i], disso_ys[i]])
    combined_legends.append(f"{conc:.3g} µM")

fig_combined = plot_traces(
    xs=combined_xs,
    ys=combined_ys,
    legends=combined_legends,
    colors=colors[:len(concentrations)],
    show=show,
    marker_size=1,
    line_width=4,
)

fig_combined.update_layout(
    title={"text": "One-Site Association + Dissociation Traces", "font": {"size": 34}},
    xaxis_title="Time (s)",
    yaxis_title="Response",
    font={"size": 22},
    legend={"font": {"size": 20}},
)

fig_combined.update_xaxes(title_font={"size": 26}, tickfont={"size": 20})
fig_combined.update_yaxes(title_font={"size": 26}, tickfont={"size": 20})

# Static image output is GitHub-friendly
show_plotly_static(fig_combined)
../_images/notebooks_1_one_site_assoc_disso_simulation_5_0.png