package affectors; import main.Node; import main.Globals; /** * TxnLeakyCyce implements leaky transcriptional activation under the control of two equivalent activators * and one inhibitor. The activation is a sigmoidal curve based on the sum of the two activators. * The inhibitor is a noncompetetive inhibitor of transcription. The activator and inhibitor are * cytoplasmic. There is a basal rate of transcription which is not affected by the activator, but * which is inhibited by the repressor. This is used for the transcription of cyce in the endocycle. *

* Formula *
dcyce/dt = 1/Hcyce (base+(1-base)(((ACT1+ACT2)/K_Act)^nu_Act/(1+(((ACT1+ACT2)/K_Act))^nu_Act+(INH/K_Inh)^nu_Inh))) Psi[INH, K_Inh, nu_Inh] *

* Parameters * * * * * * * * * * *
Half life of cyce [Hcyce] Half life of cyce
Basal transcription rate [base] The basal transcription rate of cyce in absence of activator
Activator 1 [ACT1] The first activator node of cyce transcription
Activator 2 [ACT2] The second activator node of cyce transcription
Inhibitor [INH] The inhibitor node of cyce transcription
Half maximal activation level [K_Act] The concentration of activator at which transcription proceeds at half its maximal rate
Half maximal inhibition level [K_Inh] The concentration of inhibitor at which transcription is half of what it would be otherwise
Activation cooperativity [nu_Act] The non-linearity of the activating function. The higher the value, the sharper the curves in the S-shaped activation function
Inhibition cooperativity [nu_Inh] The non-linearity of the inhibition function. The higher the value, the sharper the curves in the S-shaped inhibition function
*

* Usage *
&cyce *

* &TxnLeakyCyceAff ACT1 ACT2 INH H_cyce base K_Act K_Inh nu_Act nu_Inh *
* &endcyce * * @author Kerry Kim */ public class TxnLeakyCyceAff extends Affector { /** Half life of RNA:*/ int h_cyce; /** base transcriptional rate */ int base; /** Half maximal activation concentration */ int k_act; /** Half maximal inhibition concentration */ int k_inh; /** Cooperativity of activation */ int nu_act; /** Cooperativity of inhibition */ int nu_inh; static final String affectorDescription = "Leaky transcription activated by sum of 2 activators, 1 inhibitor"; static final String [] nodeDescriptions = {"Activator 1","Activator 2","Inhibitor"}; static final String [] paramDescriptions = {"Half life of RNA", "Base transcription rate", "Half maximal activation", "Half maximal inhibition", "Cooperativity of activation", "Cooperativity of inhibition"}; /* This list of integers specifies whether each Node used by the Affector is in the same cell as the Affectors Node, or is a neighboring cell. Put -1 for Nodes in the same cell, 1 for Nodes in neighboring cells. The numbers here correspond to the descriptions in nodeDescriptions above. */ static final int [] whichSides = { -1,-1,-1}; /* Constructor for this Affector. All Affectors must use a no-argument constructor, and currently there is no need to do anything in the constructor of most Affectors. You do need to change the name here from TemplateAff to [YourAffectorsName]Aff. */ public TxnLeakyCyceAff() {} /* Tells the rest of Ingeneue about this Affector. See the tutorial for the meaning of each line. */ protected void setLabelsAndTypes() { setDescriptions(affectorDescription, nodeDescriptions, paramDescriptions); this.Type[GUI_CAPABLE] = 1; this.Type[CERTIFICATION] = Affector.RETURNS_DERIV; this.Type[MATHTYPE] = Affector.FF; this.Type[TERMTYPE] = Affector.PRODUCTION; } /* This is where the rest of Ingeneue gives this Affector indices to each parameter that it uses. You should make a line for each parameter in the same order as they are described in paramDescriptions above, and then assign the values from param_nums as shown in the example below. */ public void setParameterNumbers(int [] param_nums) { h_cyce = param_nums[0]; base = param_nums[1]; k_act = param_nums[2]; k_inh = param_nums[3]; nu_act = param_nums[4]; nu_inh = param_nums[5]; } /* This is the formula for this Affector. Use Nodes[a].getIntegrationValue(side) to get the value of a node, where a is the position of the node in the nodeDescriptions array (starting from 0). Use params[parameterIndex] to get the value of a parameter, where parameterIndex is the index value assigned in setParameterNumbers (for instance, firstParameter or secondParameter in the example above). Most Affectors should be multiplied by Globals.characteristicTime. This example is the formula for DecayAff. */ public float getValue(Node which_node) { float act = (Nodes[0].getIntegrationValue()+Nodes[1].getIntegrationValue())/params[k_act]; act=(float)Math.pow((double)act,(double)params[nu_act]); float inh=Nodes[2].getIntegrationValue()/params[k_inh]; inh=(float)Math.pow((double)inh,(double)params[nu_inh]); float noncomp=1-(inh/(1+inh)); return (Globals.characteristicTime/params[h_cyce])*(params[base]+(1-params[base])*(act/(1+act+inh)))*noncomp; } }