Coherent feed-forward loop Created 2026-10-20 Updated 2026-10-25
The direct path and the indirect path of a coherent feed-forward loop have matching overall signs. The all-activating case with an AND rule can delay activation while allowing rapid removal of the production signal when the direct input disappears.
Use the logic approximation for gene regulation, zero basal production and initially vanishing X, Y and Z. Let , , and assume the activated Q level exceeds the X activation threshold. The circuit combines a coherent feed-forward loop with negative autoregulation. While X is below its self-repression threshold it obeys , hence X first crosses at
Y production begins then. While X remains above , . The AND gate for Z first becomes active when Y reaches , so
The approximation drops the short X build-up time because . Strictly the input must last longer than this onset time to produce a nonzero amount of Z. This requires : at equality the threshold is approached only asymptotically, and below it Z never switches on. No numerical delay follows without the threshold-to-production ratio.
In the strong negative autoregulation limit, X is held close to ; a smooth repression law regularizes the rapid switching of the ideal Boolean rule. After the input disappears at , production of X stops and . It takes for X to fall below . Until then Y remains at and the Z AND gate stays on, so Z stays at . After that Z decays by dilution, taking another to halve. Therefore
More generally replace the first by . This distinguishes disappearance of the external ligand from disappearance of the persistent X transcription factor.
Use the logic approximation for gene regulation: production is either or zero, and every species has linear removal rate . Put and assume zero basal expression, inactive X before time zero, and all required thresholds strictly between and . The input is for and zero otherwise. The common ordinary differential equation is , with Boolean production gate . Both networks therefore have
where the latter uses the stipulated attained steady state. Define the threshold-crossing delay
Because , . In both networks, stays zero until and then follows until the OFF response. Write for the activation threshold of on Z in diagram (a), and for the level of that blocks Y's repression in diagram (b); these thresholds were not supplied numerically.
Diagram (a). All three inputs X, Y and must permit Z production. Since Y has already crossed its Z threshold before starts, the final permission arrives at
Thus until and subsequently. Solving gives
For the frequently adopted but extra convention that both required thresholds are , this is . At the OFF step, X's direct AND input disappears, so immediately. Y also decays immediately. remains at while Y remains above ; it starts decaying at . This is a coherent feed-forward loop persistence response: activation is delayed, while removal of the direct required input switches production off promptly.
Diagram (b). The production gate is . Z initially rises, Y switches Z production off at , and restores production at . The continuous solution during the ON phase is
The derivative changes from positive to negative at , and from negative to positive at . Consequently the first temporary minimum following the initial pulse occurs at
Its value is . At the OFF step Z again decays immediately because X is required for production, with Y and behaving as above. If a required threshold is unattainable, these late switching events do not occur; equal production and removal rates alone do not fix threshold values.
The plotted thresholds are explicitly illustrative, with , and .
Add the activating link from to and multiply the two Hill activation functions for the target:
The extra Hill constant has units of concentration and is its Hill coefficient. Both inputs are required for substantial target production: if either is zero, the production term for vanishes. This all-activating circuit is a coherent feed-forward loop. A product of graded input functions implements the specified AND rule; it is a phenomenological rule rather than a complete molecular promoter model.
Retain the parameter values of parts (b) and (c), and set , . Continue the same Python script with the altered right-hand side:
def and_rhs(state, X):
    Y, Z = state
    return np.array([2*hill(X, 1, 2) - Y,
                     3*hill(X, 2, 4)*hill(Y, 1, 4) - Z])

times = np.linspace(0, 10, 1001)
plt.figure(figsize=(7, 4))
for X in [1, 3]:
    trajectory = integrate(lambda s: and_rhs(s, X), [0, 0], times)
    plt.plot(times, trajectory[:, 0], "--", label=f"Y, X={X}")
    plt.plot(times, trajectory[:, 1], label=f"Z, X={X}")
plt.xlabel("Time")
plt.ylabel("Concentration")
plt.legend()
plt.tight_layout()
plt.show()
At , and . At , and . In both simulations first accumulates and opens the additional gate; therefore initially grows more slowly than under direct activation alone. The equilibrium concentration of is unchanged by the added outgoing interaction.
Figure 1.
AND feed-forward dynamics and the effect of activation thresholds
. The left panel compares fixed inputs X=1 and X=3 from the zero state. The right panel compares the full feed-forward equilibrium response with direct activation alone and with individual Hill constants increased. Details.
The quasi-steady-state approximation for sets . Substituting into the equation gives
Its equilibrium concentration is therefore
For constant input this is also the exact equilibrium of the full two-variable model: the fast- assumption is needed to replace the transient dynamics, not to calculate a fixed point.
Relative to the direct-activation result, . The extra activation gate suppresses the response at low input and can sharpen its rise. The high-input limit is , which need not reach because saturates at .
For the parameters in part (d), the following Python continuation plots the expression and changes each Hill constant separately:
def z_equilibrium(X, Kxy=1, Kxz=2, Kyz=1):
    Yeq = 2 * hill(X, Kxy, 2)
    return 3 * hill(X, Kxz, 4) * hill(Yeq, Kyz, 4)

X_grid = np.linspace(0, 5, 501)
plt.figure(figsize=(7, 4))
plt.plot(X_grid, 3*hill(X_grid, 2, 4), ":", label="Direct activation")
for parameters, label in [((1, 2, 1), "Baseline"),
                          ((2, 2, 1), "Kxy=2"),
                          ((1, 3, 1), "Kxz=3"),
                          ((1, 2, 2), "Kyz=2")]:
    plt.plot(X_grid, z_equilibrium(X_grid, *parameters), label=label)
plt.xlabel("X concentration")
plt.ylabel("Equilibrium Z")
plt.legend()
plt.tight_layout()
plt.show()
Increasing lowers at fixed finite , delaying opening of the indirect gate. Increasing delays opening of the direct gate. Neither changes the limiting response as , provided the constants remain finite. Increasing makes a given less effective and also lowers the high-input plateau. These changes are visible in the preceding figure. At small , the response is proportional to , while both gates are far below saturation, explaining the increased low-input suppression.
For a persistence detector, retain finite dynamics and use, for example,
with unit loss rates, , , and initially . On switching the input on, and
The time to reach the half-activation threshold of the indirect gate is
An isolated input pulse of duration ends well before this threshold; a duration-four pulse persists long enough to open the gate. The large but finite Hill coefficient makes this a graded filter, not a perfectly sharp cutoff. Once vanishes, its direct gate closes immediately and stops production of , which then decays with time constant one. The protein output itself does not drop discontinuously. This delayed-on, prompt-production-off mechanism is the characteristic persistence detector interpretation of an AND-type coherent feed-forward loop.[ref]
This final Python continuation simulates both pulse durations. Each discontinuity is placed on the time grid and the input is held constant within each integration step:
def persistence_rhs(state, X):
    Y, Z = state
    return np.array([hill(X, 1, 4) - Y,
                     hill(X, 1, 4)*hill(Y, 0.7, 8) - Z])

def pulse_trajectory(duration, dt=0.005):
    times = np.arange(round(8/dt) + 1) * dt
    out = np.zeros((len(times), 2))
    for j in range(len(times)-1):
        X = 2.0 if 1 <= times[j] + dt/2 < 1 + duration else 0.0
        # Each step is integrated with its constant input.
        out[j+1] = integrate(lambda s: persistence_rhs(s, X),
                             out[j], [0, dt])[-1]
    return times, out

fig, axes = plt.subplots(1, 2, figsize=(10, 4))
for duration in [0.25, 4]:
    times, out = pulse_trajectory(duration)
    axes[0].plot(times, out[:, 0], label=f"Y, duration {duration}")
    axes[1].plot(times, out[:, 1], label=f"Z, duration {duration}")
    print(duration, "maximum output", out[:, 1].max())
axes[0].axhline(0.7, color="black", linestyle=":")
for ax in axes:
    ax.set_xlabel("Time")
    ax.set_ylabel("Concentration")
    ax.legend()
plt.tight_layout()
plt.show()
The chosen example produces peak of about for the short pulse and for the long pulse. These are original illustrative simulations, not fitted experimental measurements.
Figure 1.
A coherent feed-forward loop distinguishes short and persistent input pulses
. Both inputs switch from zero to X=2 at time one. One ends after 0.25 time units and the other after four. The intermediate Y crosses its activation threshold only for the sustained input, producing a much larger target response. Details.
Finally, the strict instantaneous- reduction used for the equilibrium calculation has no separate intermediate accumulation delay. Its remaining one-variable dynamics can still attenuate short pulses through ordinary output relaxation, but it cannot demonstrate the additional delay caused by finite buildup. The pulse test therefore uses the full two-variable model.
Persistence detector Created 2026-10-20 Updated 2026-10-25
A persistence detector responds strongly to a sustained input and weakly to short isolated inputs. In an activating coherent feed-forward loop, an intermediate protein accumulates toward a threshold while the target also requires the direct input. Eliminating that intermediate by an instantaneous quasi-steady-state approximation removes its accumulation delay.