package affectors; import main.Globals; import main.Node; import main.Cell; /** This is one half of a membrane-bound dimerization reaction where one single Node resides in one cell and the other single Node resides in a neighboring cell. All Nodes, including the dimer, must be membrane-bound. Use this affector in each of the undimerized nodes. Use the B version in the dimer. The node_scale (max) for each of the singleton proteins is the scaling factor for the >other< singleton.

Formula
dSINGLE_NODE1/dt = - r * max * SINGLE_NODE1 * SINGLE_NODE2

Parameters
Membrane Node [SINGLE_NODE1] The undimerized Node that is in the same membrane as the dimer
Opposite Node [SINGLE_NODE2] The undimerized Node that is in the opposite membrane from the dimer
Dimerization rate [r_DIMER] The rate of the dimerization reaction.
Maximum Cyto [max] The maximum relative concentration of the >other< undimerized Node.

Usage
&SINGLE_NODE

&DimerizeCrossMemrane_AAff SINGLE_NODE1 SINGLE_NODE2 r_DIMER max
&endSINGLE_NODE */ public class DimerizeCrossMembrane_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 second input node). */ int nodeScaleParam; static final String desc = "Dimerize membrane-bound nodes; version A for monomers"; static final String [] nodeDescriptions = {"Target node", "Other node"}; static final String [] paramDescriptions = {"Second-order reaction rate constant", "Scale factor (max value) for other node"}; static final int [] whichSides = {-1, 1}; public DimerizeCrossMembrane_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(otherSide); } public float getNCValue(Node which_node) { return -Globals.characteristicTime * params[kParam] * params[nodeScaleParam] * Nodes[1].getIntegrationValue(otherSide); } }