package affectors; import main.Node; import main.Globals; /** This is similar to the Psi function except the inhibitor is in a neighboring cell from the one that contains the target Node. The input node used is from the neighboring cells. Use this version only for membrane-bound components, and only when the interaction in which it takes part is an interaction across a membrane (i.e. I have used it to repress heterodimerizations between ligand and receptor).

Formula
dnodex/dt = 1 - (NODEY ^ nu) / (K ^ nu + NODEY ^ nu)

Parameters
Affecting Node [NODEY] Usually an inhibitor Node. Will come from the face of a cell opposite to nodex's cell.
Half-maximal inhibition level [K_NODEYnodex] The concentration of inhibitor at which transcription is reduced by half.
Cooperativity [nu_NODEYnodex] The non-linearity of the inhibiting function. The higher the value, the sharper the curves in the S-shaped inhibition function.

Usage
&nodex

&PsiECAff NODEY K_NODEYnodex nu_NODEYnodex
&endProductAff &endnodex/code> */ public class PsiECAff extends Affector { /** The half-maximal coefficient. */ int kParam; /** The "cooperativity" exponent. */ int nuParam; static final String desc = "Sigmoid turn-off formula"; static final String [] nodeDescriptions = {"Inhibitor"}; static final String [] paramDescriptions = {"Kappa: half-maximal coefficient", "nu: cooperativity"}; static final int [] whichSides = {-1}; public PsiECAff() {} protected void setLabelsAndTypes() { setDescriptions(this.desc, nodeDescriptions, paramDescriptions); setSided(true, whichSides); this.Type[GUI_CAPABLE] = 1; this.Type[CERTIFICATION] = Affector.RETURNS_DERIV; } public void setParameterNumbers(int [] param_nums) { kParam = param_nums[0]; nuParam = param_nums[1]; } public float getValue(Node which_node) { return (Globals.characteristicTime * Psi(Nodes[0].getIntegrationValue(otherSide),params[kParam],params[nuParam])); } }