package affectors; import main.Node; import main.Globals; /** Translation of an mRNA into protein. Put this affector in the protein, not the mRNA, as it is changing the concentration of the protein. This affector works for both cytoplasmic and membrane proteins. If the protein will be membrane-bound, this affector divides the translation rate by the number of sides that the protein node has so each side gets 1 / num_sides of the total translation. Note that there is no translation rate because this has been "non-dimensionalized" out of the equations.
Formula
dNODEX/dt = nodex
Parameters
Messenger [nodex] | The mRNA Node |
Half-life [H_NODEX] | The half-life of the protein Node. |
Usage
*/
public class TlnRegUpAff extends Affector {
/** Half-life of the protein product; don't ask why. */
int halfLifeParam,
kReg,
nuReg;
static final String desc = "Regulated translation";
static final String [] nodeDescriptions = {"Messenger RNA", "Regulator"};
static final String [] paramDescriptions = {"Half-life of protein product", "half-max regulator", "cooperativity of regulator"};
static final int [] whichSides = {-1, -1};
public TlnRegUpAff() {}
protected void setLabelsAndTypes() {
setDescriptions(this.desc, nodeDescriptions, paramDescriptions);
setSided(true, whichSides);
this.Type[GUI_CAPABLE] = 1;
this.Type[CERTIFICATION] = Affector.RETURNS_DERIV;
this.Type[MATHTYPE] = Affector.KK;
this.Type[TERMTYPE] = Affector.PRODUCTION;
}
public void setParameterNumbers(int [] param_nums)
{
halfLifeParam = param_nums[0];
kReg = param_nums[1];
nuReg = param_nums[2];
}
public float getValue(Node which_node) {
float trans = ((Globals.characteristicTime / params[halfLifeParam]) / which_node.numSides) * Nodes[0].getIntegrationValue(0);
trans *= Phi(Nodes[1].getIntegrationValue(0), params[kReg], params[nuReg]);
return trans;
}
}
&NODEX
&TlnAff nodex H_NODEX
&endNODEX