package affectors; import main.Node; import main.Globals; import main.Cell; /** A variant of Txn1Aff that integrates an external influence from a neighboring cell (e.g. a signalling protein) and activates transcription as a function of the total activator presented on all cell faces. Use this if you want to skip the signal transduction cascade between a ligand on neighboring cells and transcription. Everything else is the same as Txn1Aff.
Formula
dnodex/dt = (1 / H_nodex) * ACTIVATOR(neighbors)^nu / (K^nu + ACTIVATOR(neighbors)^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
*/
public class Txn1ECAff extends Affector {
/** The level of activator at which transcription proceeds half-maximally. */
int kParam;
/** The "cooperativity" exponent for activation. */
int nuParam;
/** The half-life of the transcript. */
int halfLifeParam;
static final String desc = "Transcription dependent on an extrinsic activator";
static final String [] nodeDescriptions = {"Activator"};
static final String [] paramDescriptions = {"Kappa: half-maximal level of activator",
"nu: cooperativity of activation",
"Half-life of transcript produced"};
public Txn1ECAff() { }
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)
{
kParam = param_nums[0];
nuParam = param_nums[1];
halfLifeParam = param_nums[2];
}
public float getValue(Node which_node) {
float total_activator = 0;
// total_activator sums contributions from all six neighbors, thus integrating sided input into non-sided form
for(int i = 0; i< Globals.cellNumSides; i++) {
total_activator += Nodes[i].getIntegrationValue(getOtherSide(i));
}
return ((Globals.characteristicTime / params[halfLifeParam]) *
Phi(total_activator,params[kParam],params[nuParam]));
}
// Affector::fixNodes over-ridden to fill Nodes[] with activator concentrations from all six neighbors; thus this non-sided affector uses a sided node
public void fixNodes(Cell cell, String [] node_names) throws Exception {
if(notFixed) {
Nodes = new Node[Globals.cellNumSides];
for(int i = 0; i < Globals.cellNumSides; i++) {
Nodes[i] = cell.getNeighborNode(i,node_names[0]);
}
notFixed = false;
}
}
}
&nodex
&Txn1ECAff ACTIVATOR K_ACTIVATORnodex nu ACTIVATORnodex H_nodex
&endnodex