package affectors; import main.Node; import main.Globals; import main.Cell; /**Diploid version of Txn2bAff. Reduces to same result if the two alleles are * identical. Assumptions for diploidizing: * * 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 1 [INHIBITOR1] The inhibitor allele 1 * Node
Inhibitor 2 [INHIBITOR2] The inhibitor allele 2 * Node
Activator 1 [ACTIVATOR1] The transcriptional activator * allele 1 Node
Activator 2 [ACTIVATOR2] The transcriptional activator * allele 2 Node
Half-max activation level allele 1 [K_ACTIVATOR1nodex] The * concentration of activator allele 1 at which transcription proceeds at half * its maximal rate
Half-max activation level allele 2 [K_ACTIVATOR2nodex] The * concentration of activator allele 2 at which transcription proceeds at half * its maximal rate
Activator Cooperativity allele 1 [nu_ACTIVATOR1nodex] The * non-linearity of the activating function allele 1. The higher the value, the * sharper the curves in the S-shaped activation function
Activator Cooperativity allele 2 [nu_ACTIVATOR2nodex] The * non-linearity of the activating function allele 2. 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 allele 1 [K_INHIBITOR1] The * concentration of inhibitor allele 1 at which transcription proceeds at half * the rate it would have otherwise
Half-max inhibition level allele 2 [K_INHIBITOR2] The * concentration of inhibitor allele 2 at which transcription proceeds at half * the rate it would have otherwise
Inhibition Cooperativity allele 1 [nu_INHIBITOR1] The * non-linearity of the inhibiting function allele 1. The higher the value, the * sharper the curves in the upside-down S-shaped inhibition function
Inhibition Cooperativity allele 2 [nu_INHIBITOR2] The * non-linearity of the inhibiting function allele 2. The higher the value, the * sharper the curves in the upside-down S-shaped inhibition function
* *

Usage *
&nodex *

&Txn2bDipAff INHIBITOR1 INHIBITOR2 ACTIVATOR1 ACTIVATOR2 * K_ACTIVATOR1nodex K_ACTIVATOR2nodex nu_ACTIVATOR1nodex * nu_ACTIVATOR1nodex H_nodex K_INHIBITOR1nodex K_INHIBITOR2nodex * nu_INHIBITOR1nodex nu_INHIBITOR2nodex
* &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 Txn2bDipAff extends Affector { /** The level of activator at which transcription proceeds half-maximally. */ int kParam1; /** The level of activator at which transcription proceeds half-maximally. */ int kParam2; /** The "cooperativity" exponent for activation. */ int nuParam1; /** The "cooperativity" exponent for activation. */ int nuParam2; /** The half-life of the transcript. */ int halfLifeParam; /** The level of inhibitor allele 1 at which half the activator allele 1 has been neutralized. */ int kInhibitParam11; /** The level of inhibitor allele 1 at which half the activator allele 2 has been neutralized. */ int kInhibitParam12; /** The level of inhibitor allele 2 at which half the activator allele 1 has been neutralized. */ int kInhibitParam21; /** The level of inhibitor allele 2 at which half the activator allele 2 has been neutralized. */ int kInhibitParam22; /** The "cooperativity" exponent for inhibition allele 1 on activator 1. */ int rhoParam11; /** The "cooperativity" exponent for inhibition allele 1 on activator 2. */ int rhoParam12; /** The "cooperativity" exponent for inhibition allele 2 on activator 1. */ int rhoParam21; /** The "cooperativity" exponent for inhibition allele 2 on activator 2. */ int rhoParam22; static final String desc = "Diploid Transcription dependent on an activator, squelched by an inhibitor"; static final String [] nodeDescriptions = {"Inhibitor allele 1", "Inhibitor allele 2", "Activator allele 1", "Activator allelele 2"}; static final String [] paramDescriptions ={"Kappa: half-maximal level of activator allele 1", "Kappa: half-maximal level of activator allele 2", "nu: cooperativity of activation allele 1", "nu: cooperativity of activation allele 2", "Half-life of transcript produced", "Kappa: half-maximal level of inhibitor allele 1 on activator 1", "Kappa: half-maximal level of inhibitor allele 1 on activator 2", "Kappa: half-maximal level of inhibitor allele 2 on activator 1", "Kappa: half-maximal level of inhibitor allele 2 on activator 2", "rho: cooperativity of inhibition allele 1 on activator 1", "rho: cooperativity of inhibition allele 1 on activator 2", "rho: cooperativity of inhibition allele 2 on activator 1", "rho: cooperativity of inhibition allele 2 on activator 2"}; public Txn2bDipAff() {} 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) { kParam1 = param_nums[0]; kParam2 = param_nums[1]; nuParam1 = param_nums[2]; nuParam2 = param_nums[3]; halfLifeParam = param_nums[4]; kInhibitParam11 = param_nums[5]; kInhibitParam12 = param_nums[6]; kInhibitParam21 = param_nums[7]; kInhibitParam22 = param_nums[8]; rhoParam11 = param_nums[9]; rhoParam12 = param_nums[10]; rhoParam21 = param_nums[11]; rhoParam22 = param_nums[12]; } public float getValue(Node which_node) { float total_activator1 = 0; float total_activator2 = 0; /* 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_activator1 += Nodes[i+1].getIntegrationValue(getOtherSide(i-1)); total_activator2 += Nodes[i+7].getIntegrationValue(getOtherSide(i-1)); } float I11=Chi(Nodes[0].getIntegrationValue(),params[kInhibitParam11],params[rhoParam11]); float I12=Chi(Nodes[1].getIntegrationValue(),params[kInhibitParam12],params[rhoParam12]); float I21=Chi(Nodes[0].getIntegrationValue(),params[kInhibitParam21],params[rhoParam21]); float I22=Chi(Nodes[1].getIntegrationValue(),params[kInhibitParam22],params[rhoParam22]); float A1=Chi(total_activator1/(1.0f+0.5f*(I11+I21)),params[kParam1],params[nuParam1]); float A2=Chi(total_activator2/(1.0f+0.5f*(I12+I22)),params[kParam2],params[nuParam2]); return ((Globals.characteristicTime / params[halfLifeParam])*(A1+A2)/(2*(1+A1+A2))); } /* 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 allele 1 is intracellular Nodes[1] = cell.getNode(node_names[1]); // inhibitor allele 2 is intracellular for(i = 1; i <= Globals.cellNumSides; i++) { // activator allele 1 is extracellular and in Nodes[2:7] Nodes[i+1] = cell.getNeighborNode(i-1,node_names[2]); // activator allele 2 is extracellular and in Nodes[8:13] Nodes[i+7] = cell.getNeighborNode(i-1,node_names[3]); } notFixed = false; } } }