Domain: Biology — Genetics

Problem:
In \(\textit{Saccharomyces cerevisiae}\) (baker’s yeast), the mitogen-activated protein kinase (MAPK) cascade mediates the mating response to pheromones. When extracellular \(\alpha\)-factor binds to the G-protein-coupled receptor \(\text{Ste2}\), it triggers a phosphorylation cascade involving three kinases: \(\text{Ste11}\) (MAPKKK), \(\text{Ste7}\) (MAPKK), and \(\text{Fus3}\) (MAPK). This cascade exhibits ultrasensitivity due to dual phosphorylation mechanisms, as observed experimentally in dose–response curves.

Consider a simplified deterministic ODE model of the yeast MAPK cascade, focusing on the dual phosphorylation steps for \(\text{Ste7}\) and \(\text{Fus3}\), assuming \(\text{Ste11}\) is fully activatable. The total concentrations are fixed as \(T_{Ste7} = 0.5,\mu\text{M}) and (T_{Fus3} = 1.0,\mu\text{M}\). The input to the system is the fraction of active receptor \(f\) (\(0 \le f \le 1\)), which determines the concentration of active Ste11, \([Ste11^*] = f \cdot 1.0,\mu\text{M}\).

\(\text{Ste7}\) is phosphorylated in two steps by active \(\text{Ste11}\) with a rate constant \(k_1 = 10,\mu\text{M}^{-1}\text{min}^{-1}\) per step and dephosphorylated by \(\text{Ptc2/Ptc3}\) with rate \(k_{d1} = 0.5,\text{min}^{-1}\). The reactions are: \(S0 \to S1 \to S2\), where \(S0\), \(S1\), and \(S2\) represent unphosphorylated, mono-, and di-phosphorylated Ste7, respectively. The steady-state constraint is \(S0 + S1 + S2 = T_{Ste7}\). Similarly, \(\text{Fus3}\) is phosphorylated by active \(\text{Ste7}\) (\(S2\)) with \(k_2 = 5,\mu\text{M}^{-1}\text{min}^{-1}\) per step and dephosphorylated with \(k_{d2} = 1.0,\text{min}^{-1}\). The reactions are \(F0 \to F1 \to F2\), where \(F2\) represents active \(\text{Fus3}\), and \(F0 + F1 + F2 = T_{Fus3}\).

At steady state, the activation fractions of the di-phosphorylated species can be expressed in terms of the activation parameters \(\eta_S = \frac{k_1 [Ste11^*]}{k_{d1}}\) and \(\eta_F = \frac{k_2 S2}{k_{d2}}\), giving the Goldbeter–Koshland form \(\frac{S2}{T_{Ste7}} = \frac{\eta_S^2}{1 + 2\eta_S + \eta_S^2}\). However, to account for phosphatase saturation (as observed experimentally in the \(\text{Msg5}\) phosphatase), the dephosphorylation terms must follow Michaelis–Menten kinetics: \(v_{dephos} = k_d \cdot \frac{[substrate]}{K_m + [substrate]}\), where \(K_m = 0.1,\mu\text{M}\). This introduces nonlinearities that require solving the full steady-state equations numerically for (\(S0, S1, S2, F0, F1, F2\)).

The output of the pathway is gene expression of the mating gene *FUS1*, driven by active \(\text{Fus3}\). The expression level is given by a Hill function \(E = \frac{F2_{eff}^2}{K^2 + F2_{eff}^2}\), with \(K = 0.3,\mu\text{M}\) and effective active \(\text{Fus3}\) concentration \(F2_{eff} = 0.8 \cdot F2\) (reflecting \(20\%\) sequestration by \(\text{Ste5}\) scaffold proteins).

Your task is to compute the steady-state active \(\text{Fus3}\) fraction \(\frac{F2}{T_{Fus3}}\) and the corresponding output \(E\) for \(f\) ranging from \(0.1\) to \(1.0\). Due to the nested dependence of \(F2\) on \(S2\) and of \(S2\) on \(f\), an iterative or fully coupled numerical approach is required.

Finally, for \(f = 0.6\), report the steady-state results as a list of three values: \([\frac{S2}{T_{Ste7}}, \frac{F2}{T_{Fus3}}, E]\), each rounded to four decimal places. Solve using NumPy and SciPy.

Answer: \([0.8000, 0.2515, 0.3102]\)

Solution code:
import numpy as np
from scipy.optimize import fsolve

# --- Parameters ---
T_Ste7 = 0.5   # μM
T_Fus3 = 1.0   # μM
k1, kd1 = 10.0, 0.5
k2, kd2 = 5.0, 1.0
Km = 0.1       # μM (phosphatase saturation)
K = 0.3        # μM (Hill constant for gene expression)
sequestration = 0.8  # 20% sequestered Fus3
f = 0.6        # fraction of active Ste11

# Active Ste11 concentration
Ste11_active = f * 1.0

# --- Steady-state system definition ---
def steady_state(vars):
    S0, S1, S2, F0, F1, F2 = vars

    # Ste7 fluxes
    v1f = k1 * Ste11_active * S0
    v1r = kd1 * S1 / (Km + S1)
    v2f = k1 * Ste11_active * S1
    v2r = kd1 * S2 / (Km + S2)

    # Fus3 fluxes (depends on active Ste7 = S2)
    v3f = k2 * S2 * F0
    v3r = kd2 * F1 / (Km + F1)
    v4f = k2 * S2 * F1
    v4r = kd2 * F2 / (Km + F2)

    # Ste7 balances
    eq1 = -v1f + v1r                     # S0
    eq2 = v1f - v2f - v1r + v2r          # S1
    eq3 = (S0 + S1 + S2) - T_Ste7        # mass conservation

    # Fus3 balances
    eq4 = -v3f + v3r                     # F0
    eq5 = v3f - v4f - v3r + v4r          # F1
    eq6 = (F0 + F1 + F2) - T_Fus3        # mass conservation

    return [eq1, eq2, eq3, eq4, eq5, eq6]

# --- Initial guess ---
guess = [0.3, 0.1, 0.1, 0.3, 0.3, 0.4]

# --- Solve steady-state ---
solution, info, ier, msg = fsolve(steady_state, guess, full_output=True)

if ier != 1:
    print("Solver failed:", msg)

S0, S1, S2, F0, F1, F2 = solution

# --- Compute metrics ---
S2_frac = S2 / T_Ste7
F2_frac = F2 / T_Fus3
F2_eff = sequestration * F2
E = (F2_eff ** 2) / (K ** 2 + F2_eff ** 2)

print(f"S2/T_Ste7 = {S2_frac:.4f}")
print(f"F2/T_Fus3 = {F2_frac:.4f}")
print(f"E = {E:.4f}")
print("\nFinal Answer (rounded list):")
print([round(S2_frac,4), round(F2_frac,4), round(E,4)])