package affectors; import main.Node; import main.Globals; import main.Cell; /** The simplest regulated transcription affector. Transcription rate is a sigmoid function of activator concentration with transcription proceeding at half its maximum possible rate when the activator concentration equals the half-max parameter, and with the rates on either side of this half-max dependent on how non-linear the sigmoid is. The activator may be either membrane-bound or intracellular, as long as it is on the same cell as the target mRNA.

Formula
dnodex/dt = (1 / H_nodex) * ACTIVATOR^nu / (K^nu + ACTIVATOR^nu)

Parameters
Activator [ACTIVATOR] The transcriptional activator Node
Half-max activation level [K_ACTIVATORnodex] The concentration of activator at which transcription proceeds at half its maximal rate
Cooperativity [nu_ACTIVATORnodex] The non-linearity of the activating function. The higher the value, the sharper the curves in the S-shaped activation function
mRNA Half-life [H_nodex] The half life of the product mRNA

Usage
&nodex

&Txn1Aff ACTIVATOR K_ACTIVATORnodex nu ACTIVATORnodex H_nodex
&endnodex */ public class CompAct2Aff extends Affector { /** the efficiency with which A and B activate transcription when bound. Should be between 0 and 1 to be meaningful. */ int rhoParamA, rhoParamB; /** The level of activator at which transcription proceeds half-maximally. */ int kParamA, kParamB; /** The "cooperativity" exponent for activation. */ int nuParamA, nuParamB; /** The half-life of the transcript. */ int halfLifeParam; static final String desc = "Transcription dependent on an activator"; static final String [] nodeDescriptions = {"ActivatorA", "ActivatorB"}; static final String [] paramDescriptions = {"RhoA: the efficiency with which activator A promotes transcription when bound", "KappaA: half-maximal level of activator", "nuA: cooperativity of activation", "RhoB: the efficiency with which activator B promotes transcription when bound", "KappaB: half-maximal level of activator", "nuB: cooperativity of activation", "Half-life of transcript produced"}; public CompAct2Aff() {} protected void setLabelsAndTypes() { setDescriptions(this.desc, nodeDescriptions, paramDescriptions); this.Type[GUI_CAPABLE] = 1; this.Type[CERTIFICATION] = Affector.RETURNS_DERIV; this.Type[MATHTYPE] = Affector.FF; this.Type[TERMTYPE] = Affector.PRODUCTION; } public void setParameterNumbers(int [] param_nums) { rhoParamA = param_nums[0]; kParamA = param_nums[1]; nuParamA = param_nums[2]; rhoParamB = param_nums[3]; kParamB = param_nums[4]; nuParamB = param_nums[5]; halfLifeParam = param_nums[6]; } public float getValue(Node which_node) { return ((Globals.characteristicTime / params[halfLifeParam]) * (params[rhoParamA]*theta( Nodes[0].getIntegrationValue(), Nodes[1].getIntegrationValue(), params[kParamA], params[nuParamA], params[kParamB], params[nuParamB] ) + params[rhoParamB]*theta( Nodes[1].getIntegrationValue(), Nodes[0].getIntegrationValue(), params[kParamB], params[nuParamB], params[kParamA], params[nuParamA] )) ); } private float theta(float A, float B, float kA, float nuA, float kB, float nuB) { float phiA = Phi(A,kA,nuA); float phiB = Phi(B,kB,nuB); return (phiA*(1 - phiB))/(1 - phiA*phiB); } }