package affectors; import main.Node; import main.Globals; /** *

This is one half of an affector that converts a single node into another * based on some enzymatic activity. Use this affector in the substrate. Use * {@link EnzymeConversionEC_Pro_Aff} in the product. For cases in which the * enzyme, product and the substrate are all on the membrane. * *

Formula *
dSUBSTRATE/dt = -max * SUBSTRATE Phi(ENZYME,K_enzyme,nu_enzyme) * *

Parameters * * * * * * *
Substrate [SUBSTRATE] The substrate Node
Enzyme [ENZYME] The enzyme Node
max [max] Maximal rate of reaction.
k_enzyme [K_Enzyme] Concentration of enzyme where activity is half maximal.
nu_enzyme [nu_Enzyme] Apparent cooperativity of enzyme activity.
* *

Usage *
&SUBSTRATE *

* &EnzymeConversionEC_Sub_Aff SUBSTRATE ENZYME max K_enzyme nu_enzyme *
* &endNodep * * @author Josselin Milloz * @see EnzymeConversionEC_Pro_Aff */ public class EnzymeConversionEC_Sub_Aff extends Affector { int max; int k_enzyme; int nu_enzyme; static final String affectorDescription = "Enzymatic conversion. Use EnzymeConversionEC_Pro_Aff on product"; static final String [] nodeDescriptions = {"Substrate", "Enzyme"}; static final String [] paramDescriptions = {"Maximal rate of reaction", "half maximal enzyme concentration", "Cooperativity of enzyme"}; static final int [] whichSides = { -1,-1 }; public EnzymeConversionEC_Sub_Aff() {} protected void setLabelsAndTypes() { setDescriptions(affectorDescription, nodeDescriptions, paramDescriptions); setContainsTarget(true); setSided(true, whichSides); 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) { max = param_nums[0]; k_enzyme = param_nums[1]; nu_enzyme = param_nums[2]; } public float getValue(Node which_node) { float total_kinase = Nodes[1].getIntegrationValue(side); float source = Nodes[0].getIntegrationValue(side); float theTerm = params[max] * source * Phi(total_kinase, params[k_enzyme], params[nu_enzyme]); return -Globals.characteristicTime * theTerm; } public float getNCValue(Node which_node) { float total_kinase = Nodes[1].getIntegrationValue(side); float theTerm = params[max] * Phi(total_kinase, params[k_enzyme], params[nu_enzyme]); return -Globals.characteristicTime * theTerm; } }