package affectors; import main.Node; import main.Globals; /** One third of a triplet of affectors which mediates dissociation of protein complexes. Use this one in the LIGAND. Use the A version in the ligand-bound state and the B version in the recycled RECEPTOR. They reverse the heterodimerization affectors. Note that the equation here is exactly the same as the Decay affector. This can be used for both cytoplasmic and membrane-bound proteins. As with the heterodimerization Affectors, the ligand and receptor must be scaled by the ratio between their dimensional maximum quantities, and that scaling happens in here only for the ligand (the complex is assumed to be on the same scale as the receptor).

Formula
dNODEX/dt = (receptorScale / ligandScale) * NODEX / H_NODEX

Parameters
Complex [NODEX] The Node represeting the dimer
Half-life [H_NODEX] The half-life of the complex before it splits apart.
Max ligand [max_LIGAND] The maximum dimensional amount of ligand relative to the receptors max.
Max receptor [max_RECEPT] The maximum dimensional amount of receptor relative to the ligands max.

Usage
&NODEX

&DissociationB_Aff NODEX H_NODEX max_LIGAND max_RECEPTOR
&endNODEX @see DissociationA_Aff @see DissociationB_Aff */ public class DissociationC_Aff extends Affector { /** The half-life in minutes of the "ligand"-bound "receptor" complex; reciprocal of the dissociation rate. */ int halfLifeParam; /** The ligand's scaling factor (maximum dimensional quantity of ligand). */ int ligandScale; /** The receptor's scaling factor (maximum dimensional quantity of receptor). */ int receptorScale; static final String desc = "Dissociation of a two-component complex; version C for ligand"; static final String [] nodeDescriptions = {"Complex"}; static final String [] paramDescriptions = {"Half-life of complex", "Scale factor for ligand", "Scale factor for receptor"}; static final int [] whichSides = { -1 }; public DissociationC_Aff() {} protected void setLabelsAndTypes() { setDescriptions(this.desc, nodeDescriptions, paramDescriptions); setSided(true, whichSides); this.Type[GUI_CAPABLE] = 1; this.Type[CERTIFICATION] = Affector.RETURNS_DERIV; this.Type[MATHTYPE] = Affector.KK; this.Type[TERMTYPE] = Affector.CONVERSION; //??? } public void setParameterNumbers(int [] param_nums) { halfLifeParam = param_nums[0]; ligandScale = param_nums[1]; receptorScale = param_nums[2]; } public float getValue(Node which_node) { return ((Globals.characteristicTime / params[halfLifeParam]) * (params[receptorScale] / params[ligandScale]) * Nodes[0].getIntegrationValue(side)); } }