package affectors; import main.Node; import main.Globals; /** This is one half of an affector that phosphrylates a single node. Use this affector in the unphosphorylated species. Use the B version in the product species. For either membrane-bound or cytoplasmic kinases, as long as target is cytoplasmic.

Formula
dSUBSTRATE/dt = -Pmax * SUBSTRATE * KINASE

Parameters
Substrate [SUBSTRATE] The unphosphorylated Node
Kinase [KINASE] The kinase Node.
Max reaction rate [P_KINASE] The maximum rate at which kinase converts substrate.

Usage
&SUBSTRATE

&Phosphorylation1StepA_ICAff SUBSTRATE KINASE P_KINASE
&endSUBSTRATE

@see Phosphor1StepB_ICAff
@see Dephosphor1StepB_ICAff */ public class Phosphor1StepA_ICAff extends Affector { /** The maximal reaction rate. */ int pMaxParam; static final String desc = "Intracellular direct phosphorylation of a substrate by a kinase; version A for substrate"; static final String [] nodeDescriptions = {"Unphosphorylated substrate", "Kinase"}; static final String [] paramDescriptions = {"Pmax: maximal reaction rate"}; static final int [] whichSides = {-1, -1}; public Phosphor1StepA_ICAff() {} protected void setLabelsAndTypes() { setDescriptions(this.desc, nodeDescriptions, paramDescriptions); setSided(true, whichSides); 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) { pMaxParam = param_nums[0]; } public float getValue(Node which_node) { float total_kinase = Nodes[1].getIntegrationValue(); float source = Nodes[0].getIntegrationValue(); float theTerm = params[pMaxParam] * source * total_kinase; return -Globals.characteristicTime * theTerm; } public float getNCValue(Node which_node) { float total_kinase = Nodes[1].getIntegrationValue(); float theTerm = params[pMaxParam] * total_kinase; return -Globals.characteristicTime * theTerm; } }