/*
 * This code is generated by BioUML FrameWork 
 * for BIOMD0000000033.xml diagram  at 2008.03.20 15:04:12
 */
import biouml.plugins.simulation.ae.NewtonSolver;
import biouml.plugins.simulation.java.JavaBaseModel;
import ru.biosoft.math.MathRoutines;

public class BIOMD0000000033 extends JavaBaseModel
{

/*
 * Write rules to calculate equation parameters
 */


/*
 * Write rules to calculate equation parameters excluding internal variables.
 */
    public void __internalRateVarInitFunc_0(double time, double[] x)
    {
        rate_AktActivationReaction = cell*(kAkt*x[14]*x[1]/(x[1] + KmAkt));
        rate_BRafByRap1ActivationReaction = cell*(kRap1ToBRaf*x[18]*x[3]/(x[3] + KmRap1ToBRaf));
        rate_BRafbyPPtaseDeactivationReaction = cell*(kdBRaf*_cell_Raf1PPtase_*x[2]/(x[2] + KmdBRaf));
        rate_C3GActivationReaction = cell*(kC3GNGF*x[25]*x[5]/(x[5] + KmC3GNGF));
        rate_EGFBindingReaction = cell*krbEGF*x[6]*x[26];
        rate_EGFUnbindingReaction = cell*kruEGF*x[24];
        rate_ErkActivationReaction = cell*(kpMekCytoplasmic*x[9]*x[8]/(x[8] + KmpMekCytoplasmic));
        rate_ErkDeactivationReaction = cell*(kdErk*_cell_PP2AActive_*x[7]/(x[7] + KmdErk));
        rate_MekDeactivationReaction = cell*(kdMek*_cell_PP2AActive_*x[9]/(x[9] + KmdMek));
        rate_MekbyBRafActivationReaction = cell*(kpBRaf*x[2]*x[10]/(x[10] + KmpBRaf));
        rate_MekbyRaf1ActivationReaction = cell*(kpRaf1*x[16]*x[10]/(x[10] + KmpRaf1));
        rate_NGFBindingReaction = krbNGF*x[11]*x[27]*cell;
        rate_NGFUnbindingReaction = kruNGF*x[25]*cell;
        rate_P90RskActivationReaction = cell*(kpP90Rsk*x[7]*x[13]/(x[13] + KmpP90Rsk));
        rate_PI3KbyEGFRActivationReaction = cell*(kPI3K*x[24]*x[15]/(x[15] + KmPI3K));
        rate_PI3KbyRasActivationReaction = cell*(kPI3KRas*x[20]*x[15]/(x[15] + KmPI3KRas));
        rate_Raf1ByAktDeactivationReaction = cell*(kdRaf1ByAkt*x[0]*x[16]/(x[16] + KmRaf1ByAkt));
        rate_Raf1ByRasActivationReaction = cell*(kRasToRaf1*x[20]*x[17]/(x[17] + KmRasToRaf1));
        rate_Raf1byPPtaseDeactivationReaction = cell*(kdRaf1*_cell_Raf1PPtase_*x[16]/(x[16] + KmdRaf1));
        rate_Rap1ActivationReaction = cell*(kC3G*x[4]*x[19]/(x[19] + KmC3G));
        rate_Rap1DeactivationReaction = cell*(kRapGap*_cell_RapGapActive_*x[18]/(x[18] + KmRapGap));
        rate_RasActivationReaction = cell*(kSos*x[22]*x[21]/(x[21] + KmSos));
        rate_RasDeactivationReaction = cell*(kRasGap*_cell_RasGapActive_*x[20]/(x[20] + KmRasGap));
        rate_SosActivationByEGFReaction = cell*(kEGF*x[24]*x[23]/(x[23] + KmEGF));
        rate_SosActivationByNGFReaction = cell*(kNGF*x[25]*x[23]/(x[23] + KmNGF));
        rate_SosDeactivationReaction = cell*(kdSos*x[12]*x[22]/(x[22] + KmdSos));
    }

    public void Init()
    {
        initialValues = getInitialValues();
/*
 * Initialize variables
 */
        _cell_PP2AActive_ = 120000.0; // initial value of $"cell.PP2AActive"
        _cell_Raf1PPtase_ = 120000.0; // initial value of $"cell.Raf1PPtase"
        _cell_RapGapActive_ = 120000.0; // initial value of $"cell.RapGapActive"
        _cell_RasGapActive_ = 120000.0; // initial value of $"cell.RasGapActive"
        cell = 1.0; // initial value of $cell
        KmAkt = 653951.0; // initial value of KmAkt
        KmC3G = 10965.6; // initial value of KmC3G
        KmC3GNGF = 12876.2; // initial value of KmC3GNGF
        KmEGF = 6086070.0; // initial value of KmEGF
        KmNGF = 2112.66; // initial value of KmNGF
        KmPI3K = 184912.0; // initial value of KmPI3K
        KmPI3KRas = 272056.0; // initial value of KmPI3KRas
        KmRaf1ByAkt = 119355.0; // initial value of KmRaf1ByAkt
        KmRap1ToBRaf = 1025460.0; // initial value of KmRap1ToBRaf
        KmRapGap = 295990.0; // initial value of KmRapGap
        KmRasGap = 1432410.0; // initial value of KmRasGap
        KmRasToRaf1 = 62464.6; // initial value of KmRasToRaf1
        KmSos = 35954.3; // initial value of KmSos
        KmdBRaf = 1.08795E7; // initial value of KmdBRaf
        KmdErk = 3496490.0; // initial value of KmdErk
        KmdMek = 518753.0; // initial value of KmdMek
        KmdRaf1 = 1061.71; // initial value of KmdRaf1
        KmdSos = 896896.0; // initial value of KmdSos
        KmpBRaf = 157948.0; // initial value of KmpBRaf
        KmpMekCytoplasmic = 1007340.0; // initial value of KmpMekCytoplasmic
        KmpP90Rsk = 763523.0; // initial value of KmpP90Rsk
        KmpRaf1 = 4768350.0; // initial value of KmpRaf1
        kAkt = 0.0566279; // initial value of kAkt
        kC3G = 1.40145; // initial value of kC3G
        kC3GNGF = 146.912; // initial value of kC3GNGF
        kEGF = 694.731; // initial value of kEGF
        kNGF = 389.428; // initial value of kNGF
        kPI3K = 10.6737; // initial value of kPI3K
        kPI3KRas = 0.0771067; // initial value of kPI3KRas
        kRap1ToBRaf = 2.20995; // initial value of kRap1ToBRaf
        kRapGap = 27.265; // initial value of kRapGap
        kRasGap = 1509.36; // initial value of kRasGap
        kRasToRaf1 = 0.884096; // initial value of kRasToRaf1
        kSos = 32.344; // initial value of kSos
        kdBRaf = 441.287; // initial value of kdBRaf
        kdErk = 8.8912; // initial value of kdErk
        kdMek = 2.83243; // initial value of kdMek
        kdRaf1 = 0.126329; // initial value of kdRaf1
        kdRaf1ByAkt = 15.1212; // initial value of kdRaf1ByAkt
        kdSos = 1611.97; // initial value of kdSos
        kpBRaf = 125.089; // initial value of kpBRaf
        kpMekCytoplasmic = 9.85367; // initial value of kpMekCytoplasmic
        kpP90Rsk = 0.0213697; // initial value of kpP90Rsk
        kpRaf1 = 185.759; // initial value of kpRaf1
        krbEGF = 2.18503E-5; // initial value of krbEGF
        krbNGF = 1.38209E-7; // initial value of krbNGF
        kruEGF = 0.0121008; // initial value of kruEGF
        kruNGF = 0.00723811; // initial value of kruNGF
    }

    /*
     * Model variables initial values
     */
    protected double _cell_PP2AActive_;
    protected double _cell_Raf1PPtase_;
    protected double _cell_RapGapActive_;
    protected double _cell_RasGapActive_;
    protected double rate_AktActivationReaction;
    protected double rate_BRafByRap1ActivationReaction;
    protected double rate_BRafbyPPtaseDeactivationReaction;
    protected double rate_C3GActivationReaction;
    protected double rate_EGFBindingReaction;
    protected double rate_EGFUnbindingReaction;
    protected double rate_ErkActivationReaction;
    protected double rate_ErkDeactivationReaction;
    protected double rate_MekDeactivationReaction;
    protected double rate_MekbyBRafActivationReaction;
    protected double rate_MekbyRaf1ActivationReaction;
    protected double rate_NGFBindingReaction;
    protected double rate_NGFUnbindingReaction;
    protected double rate_P90RskActivationReaction;
    protected double rate_PI3KbyEGFRActivationReaction;
    protected double rate_PI3KbyRasActivationReaction;
    protected double rate_Raf1ByAktDeactivationReaction;
    protected double rate_Raf1ByRasActivationReaction;
    protected double rate_Raf1byPPtaseDeactivationReaction;
    protected double rate_Rap1ActivationReaction;
    protected double rate_Rap1DeactivationReaction;
    protected double rate_RasActivationReaction;
    protected double rate_RasDeactivationReaction;
    protected double rate_SosActivationByEGFReaction;
    protected double rate_SosActivationByNGFReaction;
    protected double rate_SosDeactivationReaction;
    protected double cell;
    protected double KmAkt;
    protected double KmC3G;
    protected double KmC3GNGF;
    protected double KmEGF;
    protected double KmNGF;
    protected double KmPI3K;
    protected double KmPI3KRas;
    protected double KmRaf1ByAkt;
    protected double KmRap1ToBRaf;
    protected double KmRapGap;
    protected double KmRasGap;
    protected double KmRasToRaf1;
    protected double KmSos;
    protected double KmdBRaf;
    protected double KmdErk;
    protected double KmdMek;
    protected double KmdRaf1;
    protected double KmdSos;
    protected double KmpBRaf;
    protected double KmpMekCytoplasmic;
    protected double KmpP90Rsk;
    protected double KmpRaf1;
    protected double kAkt;
    protected double kC3G;
    protected double kC3GNGF;
    protected double kEGF;
    protected double kNGF;
    protected double kPI3K;
    protected double kPI3KRas;
    protected double kRap1ToBRaf;
    protected double kRapGap;
    protected double kRasGap;
    protected double kRasToRaf1;
    protected double kSos;
    protected double kdBRaf;
    protected double kdErk;
    protected double kdMek;
    protected double kdRaf1;
    protected double kdRaf1ByAkt;
    protected double kdSos;
    protected double kpBRaf;
    protected double kpMekCytoplasmic;
    protected double kpP90Rsk;
    protected double kpRaf1;
    protected double krbEGF;
    protected double krbNGF;
    protected double kruEGF;
    protected double kruNGF;

    public double[] extendResult(double time,double [] x)
    {
        this.time = time;


        double[] y = new double[28];
        y[0] = x[0];
        y[1] = x[1];
        y[2] = x[2];
        y[3] = x[3];
        y[4] = x[4];
        y[5] = x[5];
        y[6] = x[6];
        y[7] = x[7];
        y[8] = x[8];
        y[9] = x[9];
        y[10] = x[10];
        y[11] = x[11];
        y[12] = x[12];
        y[13] = x[13];
        y[14] = x[14];
        y[15] = x[15];
        y[16] = x[16];
        y[17] = x[17];
        y[18] = x[18];
        y[19] = x[19];
        y[20] = x[20];
        y[21] = x[21];
        y[22] = x[22];
        y[23] = x[23];
        y[24] = x[24];
        y[25] = x[25];
        y[26] = x[26];
        y[27] = x[27];
        return y;
    }
    public double[] getInitialValues()
    {
        double [] x = new double[28];
        this.time = 0.0;
        x[0] = 0.0; // - $"cell.AktActive"
        x[1] = 120000.0; // - $"cell.AktInactive"
        x[2] = 0.0; // - $"cell.BRafActive"
        x[3] = 120000.0; // - $"cell.BRafInactive"
        x[4] = 0.0; // - $"cell.C3GActive"
        x[5] = 120000.0; // - $"cell.C3GInactive"
        x[6] = 1.0002E7; // - $"cell.EGF"
        x[7] = 0.0; // - $"cell.ErkActive"
        x[8] = 600000.0; // - $"cell.ErkInactive"
        x[9] = 0.0; // - $"cell.MekActive"
        x[10] = 600000.0; // - $"cell.MekInactive"
        x[11] = 456000.0; // - $"cell.NGF"
        x[12] = 0.0; // - $"cell.P90RskActive"
        x[13] = 120000.0; // - $"cell.P90RskInactive"
        x[14] = 0.0; // - $"cell.PI3KActive"
        x[15] = 120000.0; // - $"cell.PI3KInactive"
        x[16] = 0.0; // - $"cell.Raf1Active"
        x[17] = 120000.0; // - $"cell.Raf1Inactive"
        x[18] = 0.0; // - $"cell.Rap1Active"
        x[19] = 120000.0; // - $"cell.Rap1Inactive"
        x[20] = 0.0; // - $"cell.RasActive"
        x[21] = 120000.0; // - $"cell.RasInactive"
        x[22] = 0.0; // - $"cell.SosActive"
        x[23] = 120000.0; // - $"cell.SosInactive"
        x[24] = 0.0; // - $"cell.boundEGFReceptor"
        x[25] = 0.0; // - $"cell.boundNGFReceptor"
        x[26] = 80000.0; // - $"cell.freeEGFReceptor"
        x[27] = 10000.0; // - $"cell.freeNGFReceptor"

        __internalRateVarInitFunc_0(time, x);

        return x;
    }

/*
 * code for algebraic rules calculations
 */

/*
 * end of code for algebraic rules calculations
 */

    protected void calculateRates(double time, double[] x)
    {

        __internalRateVarInitFunc_0(time, x);

    }

        /*
         * calculate dy/dt for 'BIOMD0000000033.xml' model
         */
    public void __internalDyDt_0(double time, double [] x, double[] result)
    {
        result[0] = +rate_AktActivationReaction;
        result[1] = -rate_AktActivationReaction;
        result[2] = +rate_BRafByRap1ActivationReaction-rate_BRafbyPPtaseDeactivationReaction;
        result[3] = -rate_BRafByRap1ActivationReaction+rate_BRafbyPPtaseDeactivationReaction;
        result[4] = +rate_C3GActivationReaction;
        result[5] = -rate_C3GActivationReaction;
        result[6] = -rate_EGFBindingReaction+rate_EGFUnbindingReaction;
        result[7] = +rate_ErkActivationReaction-rate_ErkDeactivationReaction;
        result[8] = -rate_ErkActivationReaction+rate_ErkDeactivationReaction;
        result[9] = -rate_MekDeactivationReaction+rate_MekbyBRafActivationReaction+rate_MekbyRaf1ActivationReaction;
        result[10] = +rate_MekDeactivationReaction-rate_MekbyBRafActivationReaction-rate_MekbyRaf1ActivationReaction;
        result[11] = -rate_NGFBindingReaction+rate_NGFUnbindingReaction;
        result[12] = +rate_P90RskActivationReaction;
        result[13] = -rate_P90RskActivationReaction;
        result[14] = +rate_PI3KbyEGFRActivationReaction+rate_PI3KbyRasActivationReaction;
        result[15] = -rate_PI3KbyEGFRActivationReaction-rate_PI3KbyRasActivationReaction;
        result[16] = -rate_Raf1ByAktDeactivationReaction+rate_Raf1ByRasActivationReaction-rate_Raf1byPPtaseDeactivationReaction;
        result[17] = +rate_Raf1ByAktDeactivationReaction-rate_Raf1ByRasActivationReaction+rate_Raf1byPPtaseDeactivationReaction;
        result[18] = +rate_Rap1ActivationReaction-rate_Rap1DeactivationReaction;
        result[19] = -rate_Rap1ActivationReaction+rate_Rap1DeactivationReaction;
        result[20] = +rate_RasActivationReaction-rate_RasDeactivationReaction;
        result[21] = -rate_RasActivationReaction+rate_RasDeactivationReaction;
        result[22] = +rate_SosActivationByEGFReaction+rate_SosActivationByNGFReaction-rate_SosDeactivationReaction;
        result[23] = -rate_SosActivationByEGFReaction-rate_SosActivationByNGFReaction+rate_SosDeactivationReaction;
        result[24] = +rate_EGFBindingReaction-rate_EGFUnbindingReaction;
        result[25] = +rate_NGFBindingReaction-rate_NGFUnbindingReaction;
        result[26] = -rate_EGFBindingReaction+rate_EGFUnbindingReaction;
        result[27] = -rate_NGFBindingReaction+rate_NGFUnbindingReaction;
    }
    protected double [] calculateResult(double time, double[] x)
    {
        double[] result = new double[28];
        __internalDyDt_0(time, x, result);
        return result;
    }
    public double[] dy_dt(double time, double[] x)
    {
        this.time = time;
        calculateRates( time,x );

        return calculateResult( time,x );
    }

} // class ...