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]));
}
}