package affectors; import main.Node; import main.Globals; /** This is one half of an affector that dephosphorylates a single node at a speed determined by a phosphatase enzyme according to a sigmoid curve. Use this affector in the phosphorylated species. Use the B version in the product species. For either membrane-bound or cytoplasmic phosphatases, as long as target is cytoplasmic.

Formula
dSUBSTRATE_P/dt = -Pmax * SUBSTRATE_P * (PHOSPHO^nu / (K_PHOSPHO^nu + PHOSPHO^nu))

Parameters
Substrate [SUBSTRATE_P] The unphosphorylated Node
Phosphotase [PHOSPHO] The phosphatase Node.
Half-max activation [K_PHOSPHO_SUBSTRATE_P] The concentration of phosphatase at which it de-phosphorylates at half its maximum rate.
Cooperativity [nu_PHOSPHO_SUBSTRATE_P] The non-linearity in phosphatase activity as phosphatase concentration increases.
Max reaction rate [P_PHOSPHO] The maximum reaction rate.

Usage
&SUBSTRATE_P

&DephosphorylationA_ICAff SUBSTRATE_P PHOSPHO K_PHOSPHO_SUBSTRATE_P nu_PHOSPHO_SUBSTRATE_P P_PHOSPHO
&endSUBSTRATE_P

@see DephosphorylationB_ICAff
@see PhosphorylationB_ICAff */ public class DephosphorylationA_ICAff extends Affector { /** The level of phosphatase at which the reaction proceeds half-maximally. */ int kappaParam; /** The "cooperativity" exponent for the reaction. */ int nuParam; /** The maximal reaction rate. */ int dMaxParam; static final String desc = "Intracellular dephosphorylation of a substrate; version A for substrate"; static final String [] nodeDescriptions = {"Phosphorylated substrate", "Phosphatase"}; static final String [] paramDescriptions = {"Kappa: half-maximal activity of the phosphatase", "nu: cooperativity of reaction", "Dmax: maximal reaction rate"}; public DephosphorylationA_ICAff() {} protected void setLabelsAndTypes() { setDescriptions(this.desc, nodeDescriptions, paramDescriptions); setContainsTarget(true); this.Type[GUI_CAPABLE] = 1; this.Type[CERTIFICATION] = Affector.RETURNS_DERIV; this.Type[MATHTYPE] = Affector.GG; this.Type[TERMTYPE] = Affector.CONVERSION; } public void setParameterNumbers(int [] param_nums) { kappaParam = param_nums[0]; nuParam = param_nums[1]; dMaxParam = param_nums[2]; } public float getValue(Node which_node) { float total_phosphatase = Nodes[1].getIntegrationValue(); float source = Nodes[0].getIntegrationValue(); float theTerm = params[dMaxParam] * source * Phi(total_phosphatase, params[kappaParam], params[nuParam]); return -Globals.characteristicTime * theTerm; } public float getNCValue(Node which_node) { float total_phosphatase = Nodes[1].getIntegrationValue(); float theTerm = params[dMaxParam] * Phi(total_phosphatase, params[kappaParam], params[nuParam]); return -Globals.characteristicTime * theTerm; } }