package affectors; import main.Node; import main.Globals; import main.Cell; /** Txn2b implements transcriptional activation under the control of one extracellular activator expressed on neighboring cells and one cytoplasmic inhibitor, the latter of which competetively inhibits the activator. The inhibitor behaves as if it titrates away the activator according to some dose-response curve; another way to look at it is that the inhibitor raises the threshhold for activation.
Formula
EFFECTIVE_ACT = ACTIVATOR(neighbors) * ( 1 - INHIBITOR^nu_INHIB / (K_INHIBITOR^nu_INHIB + INHIBITOR^nu_INHIB))
dnodex/dt = (1 / H_nodex) * EFFECTIVE_ACT^nu_ACT / (K_ACT^nu_ACT + EFFECTIVE_ACT^nu_ACT)
Parameters
Inhibitor [INHIBITOR] | The inhibitor Node |
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 |
Activator 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 |
Half-max inhibition level [K_INHIBITOR] | The concentration of inhibitor at which transcription proceeds at half the rate it would have otherwise |
Inhibition Cooperativity [nu_INHIBITOR] | The non-linearity of the inhibiting function. The higher the value, the sharper the curves in the upside-down S-shaped inhibition function |
Usage
&nodex
&Txn2bAff INHIBITOR ACTIVATOR K_ACTIVATORnodex nu_ACTIVATORnodex H_nodex K_INHIBITORnodex nu_INHIBITORnodex
&endnodex
NOTE - you can accomplish this same function using the meta-enhancers, and those are a more general framework for putting together transcription terms. */ public class Txn2bAff 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; /** The level of inhibitor at which half the activator has been neutralized. */ int kInhibitParam; /** The "cooperativity" exponent for inhibition. */ int rhoParam; static final String desc = "Transcription dependent on an activator, squelched by an inhibitor"; static final String [] nodeDescriptions = {"Inhibitor", "Activator"}; static final String [] paramDescriptions = {"Kappa activator: half-maximal level of activator", "nu: cooperativity of activation", "Half-life of transcript produced", "Kappa inhibitor: half-maximal level of inhibitor", "rho: cooperativity of inhibition"}; public Txn2bAff() {} 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]; kInhibitParam = param_nums[3]; rhoParam = param_nums[4]; } public float getValue(Node which_node) { float total_activator = 0; float modulation; // total_activator sums contributions from all six neighbors, thus integrating sided input into non-sided form for(int i = 1; i <= Globals.cellNumSides; i++) { total_activator += Nodes[i].getIntegrationValue(getOtherSide(i-1)); } modulation = Psi(Nodes[0].getIntegrationValue(0),params[kInhibitParam],params[rhoParam]); return ((Globals.characteristicTime / params[halfLifeParam]) * Phi(total_activator*modulation,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 + 1]; int i; Nodes[0] = cell.getNode(node_names[0]); // inhibitor is intracellular for(i = 1; i <= Globals.cellNumSides; i++) { Nodes[i] = cell.getNeighborNode(i-1,node_names[1]); // activator is extracellular } notFixed = false; } } }