package affectors; import main.Node; import main.Globals; /** Txn6a takes two activators which synergize such that only in the presence of both can the target achieve full activity, and one inhibitor which reduces the effective concentration of the SECOND of these. This is like Txn3a but with an inhibitor that interferes with the cofactor. Parameters include as usual the half-life of the target and the K's and nu's for each regulator, but also a "leak" parameter delta which enables one to specify that one of the two activators can reach some fraction (equal to delta) in the absence of the other (which behaves as a non-essential cofactor). All inputs may be either cytoplasmic or membrane-bound as long as they reside in the same cell as the target.

Formula
INHIBITION = 1 - (INHIBITOR^nu_INH / (K_INH^nu_INH + INHIBITOR^nu_INH))
ACTIVATION1 = ACTIVATOR1^nu_ACT1 / (K_ACT1^nu_ACT1 + ACTIVATOR1^nu_ACT1)
ACTIVATION2 = (ACTIVATOR2 * INHIBITION)^nu_ACT2 / (K_ACT2^nu_ACT2 + (ACTIVATOR2 * INHIBITION)^nu_ACT2)
dnodex/dt = (1 / H_nodex) * ACTIVATION1 * (delta + (1 - delta) * ACTIVATION2)

Parameters
Inhibitor [INHIBITOR] The inhibitor Node
Activator1 [ACTIVATOR1] The first transcriptional activator Node
Activator2 [ACTIVATOR2] The second transcriptional activator Node, the "cofactor"
mRNA Half-life [H_nodex] The half life of the product mRNA
Half-max activation level for first activator [K_ACTIVATOR1nodex] The half-maximal concentration of the first activator
Activator 1 cooperativity [nu_ACTIVATOR1nodex] The non-linearity for the first activator. The higher the value, the sharper the curves in the S-shaped activation function
Half-max activation level for second activator [K_ACTIVATOR2nodex] The half-maximal concentration of the cofactor
Activator 2 cooperativity [nu_ACTIVATOR2nodex] The non-linearity for the second activator. The higher the value, the sharper the curves in the S-shaped activation function
Half-max inhibition level [K_INHIBITOR] The concentration of inhibitor at which half the cofactor is depleted
Inhibition Cooperativity [nu_INHIBITOR] The non-linearity of the inhibiting function. The higher the value, the sharper the curves in the upside-down S-shaped inhibition function
Leak fraction [delta_ACTIVATOR1nodex] The fraction of activation achievable in the absence of the cofactor

Usage
&nodex

&Txn6aAff INHIBITOR ACTIVATOR1 ACTIVATOR2 H_nodex K_ACTIVATOR1nodex nu_ACTIVATOR1nodex K_ACTIVATOR2nodex nu_ACTIVATOR2nodex K_INHIBITORnodex nu_INHIBITORnodex delta_ACTIVATOR1nodex
&endnodex */ public class Txn6aAff extends Affector { /** The half-life of the transcript. */ int halfLifeParam; /** The level of activator 1 at which transcription proceeds half-maximally. */ int kA1Param; /** The "cooperativity" exponent for activator 1. */ int nuA1Param; /** The level of activator 2 at which transcription proceeds half-maximally. */ int kA2Param; /** The "cooperativity" exponent for activator 2. */ int nuA2Param; /** The level of inhibitor at which half the activator has been depleted. */ int kLParam; /** The "cooperativity" exponent for inhibition. */ int nuLParam; /** The leak fraction. */ int deltaParam; static final String desc = "Transcription dependent on two synergizing activators, one competing with an inhibitor"; static final String [] nodeDescriptions = {"Inhibitor of activator 2", "Activator 1", "Activator 2"}; static final String [] paramDescriptions = {"Half-life of transcript produced", "Kappa activator 1: half-maximal level of activator 1", "nu1: cooperativity of activator 1", "Kappa activator 2: half-maximal level of activator 2", "nu2: cooperativity of activator 2", "Kappa inhibitor: half-maximal level of inhibitor", "nu_I: cooperativity of inhibition", "delta: leak fraction"}; public Txn6aAff() {} protected void setLabelsAndTypes() { setDescriptions(this.desc, nodeDescriptions, paramDescriptions); this.Type[GUI_CAPABLE] = 1; this.Type[CERTIFICATION] = Affector.RETURNS_DERIV; this.Type[MATHTYPE] = Affector.FF; this.Type[TERMTYPE] = Affector.PRODUCTION; } public void setParameterNumbers(int [] param_nums) { halfLifeParam = param_nums[0]; kA1Param = param_nums[1]; nuA1Param = param_nums[2]; kA2Param = param_nums[3]; nuA2Param = param_nums[4]; kLParam = param_nums[5]; nuLParam = param_nums[6]; deltaParam = param_nums[7]; } public float getValue(Node which_node) { float psi_I=0, phi_A1=0, phi_A2=0; psi_I = Psi(Nodes[0].getIntegrationValue(), params[kLParam], params[nuLParam]); phi_A1 = Phi(Nodes[1].getIntegrationValue(), params[kA1Param], params[nuA1Param]); phi_A2 = Phi((Nodes[2].getIntegrationValue() * psi_I), params[kA2Param], params[nuA2Param]); return ((Globals.characteristicTime / params[halfLifeParam]) * phi_A1 * (params[deltaParam] + ((1 - params[deltaParam]) * phi_A2))); } }