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 product species. Use the A version in the unphosphorylated species. For either membrane-bound or cytoplasmic kinases, as long as target is cytoplasmic.

Formula
dPRODUCT/dt = Pmax * SUBSTRATE * (KINASE^nu / (K_KINASE^nu + KINASE^nu))

Parameters
Substrate [SUBSTRATE] The unphosphorylated Node
Kinase [KINASE] The kinase Node.
Half-max activation [K_KINASE_SUBSTRATE] The concentration of kinase at which it phosphorylates at half its maximum rate.
Cooperativity [nu_KINASE_SUBSTRATE] The non-linearity in kinase activity as kinase concentration increases.
Max reaction rate [P_KINASE] The maximum reaction rate.

Usage
&PRODUCT

&PhosphorylationB_ICAff SUBSTRATE KINASE K_KINASE_SUBSTRATE nu_KINASE_SUBSTRATE P_KINASE
&endPRODUCT

@see PhosphorylationA_ICAff
@see DephosphorylationA_ICAff */ public class PhosphorylationB_ICAff extends Affector { /** The level of kinase at which phosphorylation proceeds at half-maximally. */ int kappaParam; /** The "cooperativity" exponent for the reaction. */ int nuParam; /** The maximal reaction rate. */ int pMaxParam; static final String desc = "Intracellular phosphorylation of a substrate; version B for product"; static final String [] nodeDescriptions = {"Unphosphorylated substrate", "Kinase"}; static final String [] paramDescriptions = {"Kappa: half-maximal activity of the phosphatase", "nu: cooperativity of reaction", "Pmax: maximal reaction rate"}; static final int [] whichSides = {-1, -1}; public PhosphorylationB_ICAff() {} protected void setLabelsAndTypes() { setDescriptions(this.desc, nodeDescriptions, paramDescriptions); setSided(true, whichSides); this.Type[GUI_CAPABLE] = 1; this.Type[CERTIFICATION] = Affector.RETURNS_DERIV; this.Type[MATHTYPE] = Affector.FF; this.Type[TERMTYPE] = Affector.CONVERSION; } public void setParameterNumbers(int [] param_nums) { kappaParam = param_nums[0]; nuParam = param_nums[1]; pMaxParam = param_nums[2]; } public float getValue(Node which_node) { float total_kinase = Nodes[1].getIntegrationValue(); float source = Nodes[0].getIntegrationValue(); float theTerm = params[pMaxParam] * source * Phi(total_kinase, params[kappaParam], params[nuParam]); return Globals.characteristicTime * theTerm; } }