package affectors; import main.Globals; import main.Node; /** This is one third of a dimerization between a membrane bound and a cytoplasmic protein, leading to a membrane bound complex. Use this affector in the undimerized, membrane- bound species. Use the B version in the cytoplasmic undimerized species and the C version in the dimer. Be careful to put the membrane and cytoplasmic species in the right order in the initializer. The node_scale for each of the singleton proteins is the scaling factor for the >other< singleton (i.e. in the membrane node, give cytoNode0 as node_scale and vice-versa). The membrane bound Node will be taken from the membrane of the same cell as the cytoplasmic Node.

Formula
dMEMBRANE_NODE/dt = - r * max_CYTO_NODE * MEMBRANE_NODE * CYTO_NODE

Parameters
Membrane Node [MEMBRANE_NODE] The undimerized Node that is on the membrane
Cytoplasmic Node [CYTO_NODE] The undimerized Node that is in the cytoplasm
Dimerization rate [r_DIMER] The rate of the dimerization reaction.
Maximum Cyto [max_CYTO] The maximum relative concentration of the cytoplasmic Node.

Usage
&NODEX

&DimerizeCytoMem_CAff MEMBRANE_NODE CYTO_NODE r_DIMER max_CYTO
&endNODEX */ public class DimerizeCytoMem_AAff extends Affector { /** The rate of the dimerization reaction. */ int kParam; /** The scaling factor of the other undimerized node in this reaction (i.e. max for cytoplasmic node). */ int nodeScaleParam; static final String desc = "Dimerize membrane-bound & cytoplasmic node; version A for membrane-bound node"; static final String [] nodeDescriptions = {"Membrane-bound node", "Cytoplasmic node"}; static final String [] paramDescriptions = {"Second-order rate constant", "Scale factor (max value) for cytoplasmic node"}; static final int [] whichSides = {-1, -1}; public DimerizeCytoMem_AAff() {} 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) { kParam = param_nums[0]; nodeScaleParam = param_nums[1]; } public float getValue(Node which_node) { return -Globals.characteristicTime * params[kParam] * params[nodeScaleParam] * Nodes[0].getIntegrationValue(side) * Nodes[1].getIntegrationValue(); } public float getNCValue(Node which_node) { return -Globals.characteristicTime * params[kParam] * params[nodeScaleParam] * Nodes[1].getIntegrationValue(); } }