package affectors; import main.Node; import main.Globals; /** This is one half of an affector that cleaves a single node into two other nodes. The rate of cleavage is regulated by a separate activator node (an enzyme). Use this affector in the uncleaved species. Use the B version in each of the product species. This "EC" version is for membrane-bound nodes.

Formula
dNODEX/dt = - CMax * SUBSTRATE * ( (ACTIVATOR ^ nu) / ( K ^ nu + ACTIVATOR ^ nu) )

Parameters
Substrate [SUBSTRATE] The uncleaved Node
Activator [ACTIVATOR] The regulator Node which is activating cleavage
Kappa [K_ACTIVATOR_SUBSTRATE] The level of the activator at which it acts half-maximally.
nu [nu_ACTIVATOR_SUBSTRATE] Cooperativity of the activation term.
CMax [CMax_SUBSTRATE] Maximal rate of cleavage.

Usage
&SUBSTRATE

&CleavageA_ECAff SUBSTRATE ACTIVATOR K_ACTIVATOR_SUBSTRATE nu_ACTIVATOR_SUBSTRATE C_SUBSTRATE
&endSUBSTRATE */ public class CleavageA_ECAff extends Affector { /** The level of activator at which the cleavage reaction proceeds half-maximally. */ int kappaParam; /** The "cooperativity" exponent for activation. */ int nuParam; /** The maximal rate of cleavage. */ int cMaxParam; static final String desc = "Cleavage of a membrane-bound substrate, regulated by an activator; version A for substrate"; static final String [] nodeDescriptions = {"Uncleaved substrate", "Activator of cleavage"}; static final String [] paramDescriptions = {"Kappa: half-maximal activity of the activator of cleavage", "nu: cooperativity of activating term", "Cmax: maximal rate of cleavage"}; static final int [] whichSides = {-1, -1}; public CleavageA_ECAff() {} 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) { kappaParam = param_nums[0]; nuParam = param_nums[1]; cMaxParam = param_nums[2]; } public float getValue(Node which_node) { float cleaver = Nodes[1].getIntegrationValue(side); float source = Nodes[0].getIntegrationValue(side); float theTerm = params[cMaxParam] * source * Phi(cleaver, params[kappaParam], params[nuParam]); return -Globals.characteristicTime * theTerm; } public float getNCValue(Node which_node) { float cleaver = Nodes[1].getIntegrationValue(side); float theTerm = params[cMaxParam] * Phi(cleaver, params[kappaParam], params[nuParam]); return -Globals.characteristicTime * theTerm; } }