package affectors; import main.Node; import main.Globals; /** Txn2a implements transcriptional activation under the control of one activator and one 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. The activator and inhibitor may be either cytoplasmic or membrane-bound, as long as both are in the same cell as the target.

Formula
EFFECTIVE_ACT = ACTIVATOR * ( 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_INHIBITORnodex] The concentration of inhibitor at which transcription proceeds at half the rate it would have otherwise
Inhibition Cooperativity [nu_INHIBITORnodex] 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

&Txn2aAff 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 Txn2aAff 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 Txn2aAff() {} 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 modulation; modulation = Psi(Nodes[0].getIntegrationValue(),params[kInhibitParam],params[rhoParam]); return ((Globals.characteristicTime / params[halfLifeParam]) * Phi((Nodes[1].getIntegrationValue() * modulation),params[kParam],params[nuParam])); } }