Generated Code

The following is python code generated by the CellML API from this CellML file. (Back to language selection)

The raw code is available.

# Size of variable arrays:
sizeAlgebraic = 35
sizeStates = 16
sizeConstants = 134
from math import *
from numpy import *

def createLegends():
    legend_states = [""] * sizeStates
    legend_rates = [""] * sizeStates
    legend_algebraic = [""] * sizeAlgebraic
    legend_voi = ""
    legend_constants = [""] * sizeConstants
    legend_voi = "time in component environment (second)"
    legend_states[0] = "ADP_m in component ADP_m (millimolar)"
    legend_algebraic[32] = "V_ANT in component calcium_dynamics (flux)"
    legend_algebraic[30] = "V_ATPase in component oxidative_phosphorylation (flux)"
    legend_algebraic[11] = "V_SL in component V_SL (flux)"
    legend_states[1] = "NADH in component NADH (millimolar)"
    legend_algebraic[26] = "V_O2 in component oxidative_phosphorylation (flux)"
    legend_algebraic[9] = "V_IDH in component V_IDH (flux)"
    legend_algebraic[10] = "V_KGDH in component V_KGDH (flux)"
    legend_algebraic[13] = "V_MDH in component V_MDH (flux)"
    legend_states[2] = "ISOC in component ISOC (millimolar)"
    legend_algebraic[8] = "V_ACO in component V_ACO (flux)"
    legend_states[3] = "alpha_KG in component alpha_KG (millimolar)"
    legend_algebraic[15] = "V_AAT in component V_AAT (flux)"
    legend_states[4] = "SCoA in component SCoA (millimolar)"
    legend_states[5] = "Suc in component Suc (millimolar)"
    legend_algebraic[12] = "V_SDH in component V_SDH (flux)"
    legend_states[6] = "FUM in component FUM (millimolar)"
    legend_algebraic[16] = "V_FH in component V_FH (flux)"
    legend_states[7] = "MAL in component MAL (millimolar)"
    legend_states[8] = "OAA in component OAA (millimolar)"
    legend_algebraic[7] = "V_CS in component V_CS (flux)"
    legend_states[9] = "ASP in component ASP (millimolar)"
    legend_algebraic[18] = "V_C_ASP in component V_C_ASP (flux)"
    legend_states[10] = "Ca_m in component Ca_m (micromolar)"
    legend_constants[0] = "f in component Ca_m (dimensionless)"
    legend_algebraic[33] = "V_uni in component calcium_dynamics (flux)"
    legend_algebraic[34] = "V_NaCa in component calcium_dynamics (flux)"
    legend_algebraic[1] = "Ca_i in component Ca_i (micromolar)"
    legend_constants[1] = "stim_start in component Ca_i (second)"
    legend_constants[2] = "stim_end in component Ca_i (second)"
    legend_algebraic[0] = "stim_period in component Ca_i (second)"
    legend_constants[3] = "stim_duration in component Ca_i (second)"
    legend_constants[4] = "pulse_value in component Ca_i (micromolar)"
    legend_constants[5] = "Na_i in component Na_i (millimolar)"
    legend_constants[6] = "ATP_i in component ATP_i (millimolar)"
    legend_algebraic[2] = "ATP_m in component ATP_m (millimolar)"
    legend_constants[7] = "Cm in component ATP_m (millimolar)"
    legend_algebraic[3] = "ADP_i in component ADP_i (millimolar)"
    legend_constants[8] = "pulse_value in component ADP_i (millimolar)"
    legend_constants[9] = "GLU in component GLU (millimolar)"
    legend_constants[10] = "Mg in component Mg (millimolar)"
    legend_constants[11] = "H in component H (millimolar)"
    legend_constants[12] = "Pi in component Pi (millimolar)"
    legend_constants[13] = "CoA in component CoA (millimolar)"
    legend_constants[14] = "AcCoA in component AcCoA (millimolar)"
    legend_constants[15] = "FAD in component FAD (millimolar)"
    legend_constants[16] = "FADH2 in component FADH2 (millimolar)"
    legend_algebraic[4] = "NAD in component NAD (millimolar)"
    legend_constants[17] = "C_PN in component NAD (millimolar)"
    legend_constants[18] = "NADPH in component NADPH (millimolar)"
    legend_states[11] = "O2_m in component O2_m (millimolar)"
    legend_constants[19] = "shunt in component O2_m (dimensionless)"
    legend_algebraic[20] = "VTr_ROS in component VTr_ROS (flux)"
    legend_states[12] = "O2_i in component O2_i (millimolar)"
    legend_algebraic[14] = "V_SOD in component V_SOD (flux)"
    legend_states[13] = "H2O2 in component H2O2 (millimolar)"
    legend_algebraic[19] = "V_CAT in component V_CAT (flux)"
    legend_algebraic[21] = "V_GPX in component V_GPX (flux)"
    legend_states[14] = "GSH in component GSH (millimolar)"
    legend_algebraic[23] = "V_GR in component V_GR (flux)"
    legend_algebraic[5] = "GSSG in component GSSG (millimolar)"
    legend_constants[20] = "GT in component GSSG (millimolar)"
    legend_algebraic[6] = "CIT in component CIT (millimolar)"
    legend_constants[21] = "C_Kint in component CIT (millimolar)"
    legend_states[15] = "delta_psi_m in component mitochondrial_membrane (volt)"
    legend_constants[22] = "R in component mitochondrial_membrane (volt_coulomb_per_mole_kelvin)"
    legend_constants[23] = "T in component mitochondrial_membrane (kelvin)"
    legend_constants[24] = "F in component mitochondrial_membrane (coulomb_per_mole)"
    legend_constants[25] = "C_mito in component mitochondrial_membrane (millimolar_per_volt)"
    legend_algebraic[25] = "V_He in component oxidative_phosphorylation (flux)"
    legend_algebraic[27] = "V_He_F in component oxidative_phosphorylation (flux)"
    legend_algebraic[31] = "V_Hu in component oxidative_phosphorylation (flux)"
    legend_algebraic[28] = "V_Hleak in component oxidative_phosphorylation (flux)"
    legend_constants[26] = "Km_AcCoA in component V_CS (millimolar)"
    legend_constants[27] = "Km_OAA in component V_CS (millimolar)"
    legend_constants[28] = "Kcat_CS in component V_CS (first_order_rate_constant)"
    legend_constants[29] = "ET_CS in component V_CS (millimolar)"
    legend_constants[30] = "Kf_ACO in component V_ACO (first_order_rate_constant)"
    legend_constants[31] = "KE_ACO in component V_ACO (dimensionless)"
    legend_constants[32] = "Kh_1 in component V_IDH (millimolar)"
    legend_constants[33] = "Kh_2 in component V_IDH (millimolar)"
    legend_constants[34] = "Km_ISOC in component V_IDH (millimolar)"
    legend_constants[35] = "Ka_ADP in component V_IDH (millimolar)"
    legend_constants[36] = "Ka_Ca in component V_IDH (micromolar)"
    legend_constants[37] = "Km_NAD in component V_IDH (millimolar)"
    legend_constants[38] = "Ki_NADH in component V_IDH (millimolar)"
    legend_constants[39] = "Kcat_IDH in component V_IDH (first_order_rate_constant)"
    legend_constants[40] = "ET_IDH in component V_IDH (millimolar)"
    legend_constants[41] = "ni in component V_IDH (dimensionless)"
    legend_constants[42] = "Km_alpha_KG in component V_KGDH (millimolar)"
    legend_constants[43] = "Kcat_KGDH in component V_KGDH (first_order_rate_constant)"
    legend_constants[44] = "ET_KGDH in component V_KGDH (millimolar)"
    legend_constants[45] = "Kd_Mg in component V_KGDH (millimolar)"
    legend_constants[46] = "Kd_Ca in component V_KGDH (micromolar)"
    legend_constants[47] = "n_alpha_KG in component V_KGDH (dimensionless)"
    legend_constants[48] = "Km_NAD in component V_KGDH (millimolar)"
    legend_constants[49] = "kf_SL in component V_SL (second_order_rate_constant)"
    legend_constants[50] = "Ke_SL in component V_SL (millimolar)"
    legend_constants[51] = "Kisdh_OAA in component V_SDH (millimolar)"
    legend_constants[52] = "Kcat_SDH in component V_SDH (first_order_rate_constant)"
    legend_constants[53] = "ET_SDH in component V_SDH (millimolar)"
    legend_constants[54] = "Km_Suc in component V_SDH (millimolar)"
    legend_constants[55] = "Ki_FUM in component V_SDH (millimolar)"
    legend_constants[56] = "Km_MAL in component V_MDH (millimolar)"
    legend_constants[57] = "Kcat_MDH in component V_MDH (first_order_rate_constant)"
    legend_constants[58] = "ET_MDH in component V_MDH (millimolar)"
    legend_constants[59] = "Ki_OAA in component V_MDH (millimolar)"
    legend_constants[132] = "fh_a in component V_MDH (dimensionless)"
    legend_constants[133] = "fh_i in component V_MDH (dimensionless)"
    legend_constants[60] = "Km_NAD in component V_MDH (millimolar)"
    legend_constants[61] = "kh1 in component V_MDH (millimolar)"
    legend_constants[62] = "kh2 in component V_MDH (millimolar)"
    legend_constants[63] = "kh3 in component V_MDH (millimolar)"
    legend_constants[64] = "kh4 in component V_MDH (millimolar)"
    legend_constants[65] = "k_offset in component V_MDH (dimensionless)"
    legend_constants[66] = "Ke_FH in component V_FH (dimensionless)"
    legend_constants[67] = "kf_FH in component V_FH (first_order_rate_constant)"
    legend_constants[68] = "Ke_AAT in component V_AAT (dimensionless)"
    legend_constants[69] = "kf_AAT in component V_AAT (second_order_rate_constant)"
    legend_constants[70] = "k_C_ASP in component V_C_ASP (first_order_rate_constant)"
    legend_constants[71] = "k1_SOD in component V_SOD (second_order_rate_constant)"
    legend_constants[72] = "k3_SOD in component V_SOD (second_order_rate_constant)"
    legend_constants[73] = "k5_SOD in component V_SOD (first_order_rate_constant)"
    legend_constants[74] = "ET_SOD in component V_SOD (millimolar)"
    legend_constants[75] = "Ki_H2O2 in component V_SOD (millimolar)"
    legend_constants[76] = "k1_CAT in component V_CAT (second_order_rate_constant)"
    legend_constants[77] = "ET_CAT in component V_CAT (millimolar)"
    legend_constants[78] = "fr in component V_CAT (per_millimolar)"
    legend_constants[79] = "phi1_GPX in component V_GPX (millimolar_second)"
    legend_constants[80] = "phi2_GPX in component V_GPX (millimolar_second)"
    legend_constants[81] = "ET_GPX in component V_GPX (millimolar)"
    legend_constants[82] = "k1_GR in component V_GR (first_order_rate_constant)"
    legend_constants[83] = "KM_GSSG in component V_GR (millimolar)"
    legend_constants[84] = "KM_NADPH in component V_GR (millimolar)"
    legend_constants[85] = "ET_GR in component V_GR (millimolar)"
    legend_algebraic[17] = "V_IMAC in component V_IMAC (flux)"
    legend_constants[86] = "Gmax in component V_IMAC (millimolar_per_second_volt)"
    legend_constants[87] = "GL in component V_IMAC (millimolar_per_second_volt)"
    legend_constants[88] = "a in component V_IMAC (dimensionless)"
    legend_constants[89] = "b in component V_IMAC (dimensionless)"
    legend_constants[90] = "kappa in component V_IMAC (per_volt)"
    legend_constants[91] = "delta_psi_bm in component V_IMAC (volt)"
    legend_constants[92] = "Kcc in component V_IMAC (millimolar)"
    legend_constants[93] = "j in component VTr_ROS (dimensionless)"
    legend_constants[94] = "rho_res in component oxidative_phosphorylation (millimolar)"
    legend_constants[95] = "rho_res_F in component oxidative_phosphorylation (millimolar)"
    legend_constants[96] = "ra in component oxidative_phosphorylation (first_order_rate_constant)"
    legend_constants[97] = "rc1 in component oxidative_phosphorylation (first_order_rate_constant)"
    legend_algebraic[22] = "Ares in component oxidative_phosphorylation (volt)"
    legend_constants[131] = "Ares_F in component oxidative_phosphorylation (volt)"
    legend_constants[98] = "r1 in component oxidative_phosphorylation (dimensionless)"
    legend_constants[99] = "r2 in component oxidative_phosphorylation (dimensionless)"
    legend_constants[100] = "r3 in component oxidative_phosphorylation (dimensionless)"
    legend_constants[101] = "rb in component oxidative_phosphorylation (first_order_rate_constant)"
    legend_constants[102] = "rc2 in component oxidative_phosphorylation (first_order_rate_constant)"
    legend_constants[103] = "Kres in component oxidative_phosphorylation (dimensionless)"
    legend_constants[104] = "Kres_F in component oxidative_phosphorylation (dimensionless)"
    legend_constants[105] = "gH in component oxidative_phosphorylation (millimolar_per_second_volt)"
    legend_constants[106] = "delta_psi_B in component oxidative_phosphorylation (volt)"
    legend_constants[107] = "g in component oxidative_phosphorylation (dimensionless)"
    legend_algebraic[24] = "delta_mu_H in component oxidative_phosphorylation (volt)"
    legend_constants[108] = "delta_pH in component oxidative_phosphorylation (dimensionless)"
    legend_constants[109] = "rho_F1 in component oxidative_phosphorylation (millimolar)"
    legend_constants[110] = "pa in component oxidative_phosphorylation (first_order_rate_constant)"
    legend_constants[111] = "pc1 in component oxidative_phosphorylation (first_order_rate_constant)"
    legend_algebraic[29] = "AF1 in component oxidative_phosphorylation (volt)"
    legend_constants[112] = "p1 in component oxidative_phosphorylation (dimensionless)"
    legend_constants[113] = "p2 in component oxidative_phosphorylation (dimensionless)"
    legend_constants[114] = "p3 in component oxidative_phosphorylation (dimensionless)"
    legend_constants[115] = "pb in component oxidative_phosphorylation (first_order_rate_constant)"
    legend_constants[116] = "pc2 in component oxidative_phosphorylation (first_order_rate_constant)"
    legend_constants[117] = "KF1 in component oxidative_phosphorylation (millimolar)"
    legend_constants[118] = "h in component calcium_dynamics (dimensionless)"
    legend_constants[119] = "delta_psi_0 in component calcium_dynamics (volt)"
    legend_constants[120] = "Vmax_ANT in component calcium_dynamics (flux)"
    legend_constants[121] = "L in component calcium_dynamics (dimensionless)"
    legend_constants[122] = "na in component calcium_dynamics (dimensionless)"
    legend_constants[123] = "Vmax_uni in component calcium_dynamics (flux)"
    legend_constants[124] = "K_act in component calcium_dynamics (micromolar)"
    legend_constants[125] = "K_trans in component calcium_dynamics (micromolar)"
    legend_constants[126] = "n in component calcium_dynamics (dimensionless)"
    legend_constants[127] = "Vmax_NaCa in component calcium_dynamics (flux)"
    legend_constants[128] = "KNa in component calcium_dynamics (millimolar)"
    legend_constants[129] = "KCa in component calcium_dynamics (micromolar)"
    legend_constants[130] = "b in component calcium_dynamics (dimensionless)"
    legend_rates[0] = "d/dt ADP_m in component ADP_m (millimolar)"
    legend_rates[1] = "d/dt NADH in component NADH (millimolar)"
    legend_rates[2] = "d/dt ISOC in component ISOC (millimolar)"
    legend_rates[3] = "d/dt alpha_KG in component alpha_KG (millimolar)"
    legend_rates[4] = "d/dt SCoA in component SCoA (millimolar)"
    legend_rates[5] = "d/dt Suc in component Suc (millimolar)"
    legend_rates[6] = "d/dt FUM in component FUM (millimolar)"
    legend_rates[7] = "d/dt MAL in component MAL (millimolar)"
    legend_rates[8] = "d/dt OAA in component OAA (millimolar)"
    legend_rates[9] = "d/dt ASP in component ASP (millimolar)"
    legend_rates[10] = "d/dt Ca_m in component Ca_m (micromolar)"
    legend_rates[11] = "d/dt O2_m in component O2_m (millimolar)"
    legend_rates[12] = "d/dt O2_i in component O2_i (millimolar)"
    legend_rates[13] = "d/dt H2O2 in component H2O2 (millimolar)"
    legend_rates[14] = "d/dt GSH in component GSH (millimolar)"
    legend_rates[15] = "d/dt delta_psi_m in component mitochondrial_membrane (volt)"
    return (legend_states, legend_algebraic, legend_voi, legend_constants)

def initConsts():
    constants = [0.0] * sizeConstants; states = [0.0] * sizeStates;
    states[0] = 0.1
    states[1] = 0.01
    states[2] = 0.01
    states[3] = 0.01
    states[4] = 0.01
    states[5] = 0.01
    states[6] = 0.01
    states[7] = 0.01
    states[8] = 0.01
    states[9] = 0.01
    states[10] = 0.01
    constants[0] = 0.0003
    constants[1] = 0
    constants[2] = 10000
    constants[3] = 0.4
    constants[4] = 1
    constants[5] = 10.0
    constants[6] = 6.5
    constants[7] = 15.0
    constants[8] = 0.15
    constants[9] = 20
    constants[10] = 0.4
    constants[11] = 2.5E-5
    constants[12] = 20.0
    constants[13] = 0.02
    constants[14] = 0.0002
    constants[15] = 0.01
    constants[16] = 1.24
    constants[17] = 10.0
    constants[18] = 1.0
    states[11] = 0.01
    constants[19] = 0.05
    states[12] = 0.01
    states[13] = 0.01
    states[14] = 0.01
    constants[20] = 1.0
    constants[21] = 1.0
    states[15] = 0.01
    constants[22] = 8.315
    constants[23] = 310.16
    constants[24] = 96480
    constants[25] = 1.812
    constants[26] = 1.26E-2
    constants[27] = 6.4E-4
    constants[28] = 3.2
    constants[29] = 0.4
    constants[30] = 12.5
    constants[31] = 2.22
    constants[32] = 8.1E-5
    constants[33] = 5.98E-5
    constants[34] = 1.52
    constants[35] = 6.2E-2
    constants[36] = 1.41
    constants[37] = 0.923
    constants[38] = 0.19
    constants[39] = 1.94
    constants[40] = 0.109
    constants[41] = 1
    constants[42] = 1.94
    constants[43] = 0.15
    constants[44] = 0.5
    constants[45] = 0.0308
    constants[46] = 1.27
    constants[47] = 1.2
    constants[48] = 38.7
    constants[49] = 0.127
    constants[50] = 3.115
    constants[51] = 0.15
    constants[52] = 1.0
    constants[53] = 0.5
    constants[54] = 3.0E-2
    constants[55] = 1.3
    constants[56] = 1.493
    constants[57] = 2.775E1
    constants[58] = 0.154
    constants[59] = 3.1E-3
    constants[60] = 0.2244
    constants[61] = 1.13E-5
    constants[62] = 26.7
    constants[63] = 6.68E-9
    constants[64] = 5.62E-6
    constants[65] = 3.99E-2
    constants[66] = 1.0
    constants[67] = 0.83
    constants[68] = 6.6
    constants[69] = 0.644
    constants[70] = 0.01
    constants[71] = 2.4E6
    constants[72] = 4.8E4
    constants[73] = 5.0E-1
    constants[74] = 0.4E-3
    constants[75] = 0.5
    constants[76] = 1.7E4
    constants[77] = 0.001
    constants[78] = 50.0
    constants[79] = 0.15
    constants[80] = 0.5
    constants[81] = 0.00141
    constants[82] = 0.0308
    constants[83] = 1.94
    constants[84] = 38.7
    constants[85] = 1.27E-3
    constants[86] = 7.82
    constants[87] = 0.0782
    constants[88] = 1.0E-3
    constants[89] = 1.0E4
    constants[90] = 70.0
    constants[91] = 0.004
    constants[92] = 0.01
    constants[93] = 0.12
    constants[94] = 0.0006
    constants[95] = 0.0045
    constants[96] = 6.394E-10
    constants[97] = 2.656E-19
    constants[98] = 2.077E-18
    constants[99] = 1.728E-9
    constants[100] = 1.059E-26
    constants[101] = 1.762E-13
    constants[102] = 8.632E-27
    constants[103] = 1.35E18
    constants[104] = 5.765E13
    constants[105] = 0.01
    constants[106] = 0.05
    constants[107] = 0.85
    constants[108] = -0.6
    constants[109] = 0.06
    constants[110] = 1.656E-5
    constants[111] = 9.651E-14
    constants[112] = 1.346E-8
    constants[113] = 7.739E-7
    constants[114] = 6.65E-15
    constants[115] = 3.373E-7
    constants[116] = 4.585E-14
    constants[117] = 1.71E6
    constants[118] = 0.5
    constants[119] = 0.091
    constants[120] = 0.05
    constants[121] = 110.0
    constants[122] = 2.8
    constants[123] = 0.000625
    constants[124] = 0.38
    constants[125] = 19.0
    constants[126] = 3.0
    constants[127] = 0.005
    constants[128] = 9.4
    constants[129] = 3.75E-1
    constants[130] = 0.5
    constants[131] = ((constants[22]*constants[23])/constants[24])*log(constants[104]*(power(constants[16]/constants[15], 0.500000)))
    constants[132] = 1.00000/(1.00000+constants[11]/constants[61]+(power(constants[11], 2.00000))/(constants[61]*constants[62]))+constants[65]
    constants[133] = power(1.00000/(1.00000+constants[63]/constants[11]+(constants[63]*constants[64])/(power(constants[11], 2.00000))), 2.00000)
    return (states, constants)

def computeRates(voi, states, constants):
    rates = [0.0] * sizeStates; algebraic = [0.0] * sizeAlgebraic
    algebraic[4] = constants[17]-states[1]
    algebraic[9] = (constants[39]*constants[40])/(1.00000+constants[11]/constants[32]+constants[33]/constants[11]+(power(constants[34]/states[2], constants[41]))/((1.00000+states[0]/constants[35])*(1.00000+states[10]/constants[36]))+(constants[37]/algebraic[4])*(1.00000+states[1]/constants[38])+((power(constants[34]/states[2], constants[41]))*(constants[37]/algebraic[4])*(1.00000+states[1]/constants[38]))/((1.00000+states[0]/constants[35])*(1.00000+states[10]/constants[36])))
    algebraic[6] = constants[21]-(states[2]+states[3]+states[4]+states[5]+states[6]+states[7]+states[8])
    algebraic[8] = constants[30]*(algebraic[6]-states[2]/constants[31])
    rates[2] = algebraic[8]-algebraic[9]
    algebraic[2] = constants[7]-states[0]
    algebraic[11] = constants[49]*(states[4]*states[0]-(states[5]*algebraic[2]*constants[13])/constants[50])
    algebraic[10] = (constants[43]*constants[44])/(1.00000+(power(constants[42]/states[3], constants[47]))/((1.00000+constants[10]/constants[45])*(1.00000+states[10]/constants[46]))+(constants[48]/algebraic[4])/((1.00000+constants[10]/constants[45])*(1.00000+states[10]/constants[46])))
    rates[4] = algebraic[10]-algebraic[11]
    algebraic[12] = (constants[52]*constants[53])/(1.00000+(constants[54]/states[5])*(1.00000+states[8]/constants[51])*(1.00000+states[6]/constants[55]))
    rates[5] = algebraic[11]-algebraic[12]
    algebraic[15] = constants[69]*(states[8]*constants[9]-(states[3]*states[9])/constants[68])
    rates[3] = algebraic[15]+algebraic[9]+-algebraic[10]
    algebraic[16] = constants[67]*(states[6]-states[7]/constants[66])
    rates[6] = algebraic[12]-algebraic[16]
    algebraic[13] = (constants[57]*constants[58]*constants[132]*constants[133])/(1.00000+(constants[56]/states[7])*(1.00000+states[8]/constants[59])+constants[60]/algebraic[4]+(constants[56]/states[7])*(1.00000+states[8]/constants[59])*(constants[60]/algebraic[4]))
    rates[7] = algebraic[16]-algebraic[13]
    algebraic[7] = (constants[28]*constants[29])/(1.00000+constants[26]/constants[14]+constants[27]/states[8]+(constants[26]/constants[14])*(constants[27]/states[8]))
    rates[8] = algebraic[13]-(algebraic[7]+algebraic[15])
    algebraic[18] = constants[70]*states[9]
    rates[9] = algebraic[15]-algebraic[18]
    algebraic[17] = (constants[88]+constants[89]/(1.00000+constants[92]/states[12]))*(constants[87]+constants[86]/(1.00000+exp(constants[90]*(constants[91]-states[15]))))*states[15]
    algebraic[20] = constants[93]*(algebraic[17]/states[15])*(states[15]-((constants[22]*constants[23])/constants[24])*log(states[11]/states[12], 10))
    algebraic[14] = (2.00000*constants[71]*constants[73]*(constants[71]+constants[72]*(1.00000+states[13]/constants[75]))*constants[74]*states[12])/(constants[73]*(2.00000*constants[71]+constants[72]*(1.00000+states[13]/constants[75]))+states[12]*constants[71]*constants[72]*(1.00000+states[13]/constants[75]))
    rates[12] = algebraic[20]-algebraic[14]
    algebraic[19] = 2.00000*constants[76]*constants[77]*states[13]*exp(-constants[78]*states[13])
    algebraic[21] = (constants[81]*states[13]*states[14])/(constants[79]*states[14]+constants[80]*states[13])
    rates[13] = algebraic[14]-(algebraic[19]+algebraic[21])
    algebraic[5] = 2.00000*(constants[20]-states[14])
    algebraic[23] = (constants[82]*constants[85])/(1.00000+constants[83]/algebraic[5]+constants[84]/constants[18]+(constants[83]/algebraic[5])*(constants[84]/constants[18]))
    rates[14] = algebraic[23]-algebraic[21]
    algebraic[22] = ((constants[22]*constants[23])/constants[24])*log(constants[103]*(power(states[1]/algebraic[4], 0.500000)))
    algebraic[24] = ((constants[22]*constants[23])/constants[24])*constants[108]+states[15]
    algebraic[26] = 0.500000*constants[94]*((((constants[96]+constants[97]*exp((6.00000*constants[24]*constants[106])/(constants[22]*constants[23])))*exp((algebraic[22]*constants[24])/(constants[22]*constants[23]))-constants[96]*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23])))+constants[102]*exp((algebraic[22]*constants[24])/(constants[22]*constants[23]))*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23])))/((1.00000+constants[98]*exp((constants[24]*algebraic[22])/(constants[22]*constants[23])))*exp((6.00000*constants[24]*constants[106])/(constants[22]*constants[23]))+(constants[99]+constants[100]*exp((constants[24]*algebraic[22])/(constants[22]*constants[23])))*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))
    rates[1] = -algebraic[26]+algebraic[9]+algebraic[10]+algebraic[13]
    rates[11] = constants[19]*algebraic[26]-algebraic[20]
    algebraic[3] = custom_piecewise([greater_equal(voi , 100.000) & less(voi , 300.000), constants[8] , True, 0.0500000])
    algebraic[32] = constants[120]*((1.00000-(0.0500000*constants[6]*0.450000*0.800000*states[0])/(0.450000*algebraic[3]*0.0500000*algebraic[2]))/((1.00000+((0.0500000*constants[6])/(0.450000*algebraic[3]))*exp((-constants[118]*constants[24]*constants[119])/(constants[22]*constants[23])))*(1.00000+(0.450000*0.800000*states[0])/(0.0500000*algebraic[2]))))
    algebraic[29] = ((constants[22]*constants[23])/constants[24])*log(constants[117]*(algebraic[2]/(states[0]*constants[12])))
    algebraic[30] = -constants[109]*(((100.000*constants[110]+constants[111]*exp((3.00000*constants[24]*constants[106])/(constants[22]*constants[23])))*exp((algebraic[29]*constants[24])/(constants[22]*constants[23]))-(constants[110]*exp((3.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))+constants[116]*exp((algebraic[29]*constants[24])/(constants[22]*constants[23]))*exp((3.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))/((1.00000+constants[112]*exp((constants[24]*algebraic[29])/(constants[22]*constants[23])))*exp((3.00000*constants[24]*constants[106])/(constants[22]*constants[23]))+(constants[113]+constants[114]*exp((constants[24]*algebraic[29])/(constants[22]*constants[23])))*exp((3.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))
    rates[0] = algebraic[32]-(algebraic[30]+algebraic[11])
    algebraic[0] = custom_piecewise([greater_equal(voi , 100.000) & less(voi , 300.000), 0.500000 , True, 4.00000])
    algebraic[1] = custom_piecewise([greater_equal(voi , constants[1]) & less_equal(voi , constants[2]) & less_equal((voi-constants[1])-floor((voi-constants[1])/algebraic[0])*algebraic[0] , constants[3]), constants[4] , True, 0.100000])
    algebraic[33] = constants[123]*(((algebraic[1]/constants[125])*(power(1.00000+algebraic[1]/constants[125], 3.00000))*((2.00000*constants[24]*(states[15]-constants[119]))/(constants[22]*constants[23])))/(power(1.00000+algebraic[1]/constants[125], 4.00000)+(constants[121]/(power(1.00000+algebraic[1]/constants[124], constants[122])))*(1.00000-exp((-2.00000*constants[24]*(states[15]-constants[119]))/(constants[22]*constants[23])))))
    algebraic[34] = constants[127]*((exp((constants[130]*constants[24]*(states[15]-constants[119]))/(constants[22]*constants[23]))*exp(log(algebraic[1]/states[10])))/((power(1.00000+constants[128]/constants[5], constants[126]))*(1.00000+constants[129]/states[10])))
    rates[10] = constants[0]*1.00000*(algebraic[33]-algebraic[34])
    algebraic[25] = 6.00000*constants[94]*((constants[96]*exp((constants[24]*algebraic[22])/(constants[22]*constants[23]))-(constants[96]+constants[101])*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23])))/((1.00000+constants[98]*exp((constants[24]*algebraic[22])/(constants[22]*constants[23])))*exp((6.00000*constants[24]*constants[106])/(constants[22]*constants[23]))+(constants[99]+constants[100]*exp((constants[24]*algebraic[22])/(constants[22]*constants[23])))*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))
    algebraic[27] = 6.00000*constants[95]*((constants[96]*exp((constants[24]*constants[131])/(constants[22]*constants[23]))-(constants[96]+constants[101])*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23])))/((1.00000+constants[98]*exp((constants[24]*constants[131])/(constants[22]*constants[23])))*exp((6.00000*constants[24]*constants[106])/(constants[22]*constants[23]))+(constants[99]+constants[100]*exp((constants[24]*constants[131])/(constants[22]*constants[23])))*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))
    algebraic[31] = -3.00000*constants[109]*((100.000*constants[110]*(1.00000+exp((constants[24]*algebraic[29])/(constants[22]*constants[23])))-(constants[110]+constants[115])*exp((3.00000*constants[24]*algebraic[24])/(constants[22]*constants[23])))/((1.00000+constants[112]*exp((constants[24]*algebraic[29])/(constants[22]*constants[23])))*exp((3.00000*constants[24]*constants[106])/(constants[22]*constants[23]))+(constants[113]+constants[114]*exp((constants[24]*algebraic[29])/(constants[22]*constants[23])))*exp((3.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))
    algebraic[28] = constants[105]*algebraic[24]
    rates[15] = (algebraic[25]+algebraic[27]+-(algebraic[31]+algebraic[32]+algebraic[28]+algebraic[34]+2.00000*algebraic[33]))/constants[25]
    return(rates)

def computeAlgebraic(constants, states, voi):
    algebraic = array([[0.0] * len(voi)] * sizeAlgebraic)
    states = array(states)
    voi = array(voi)
    algebraic[4] = constants[17]-states[1]
    algebraic[9] = (constants[39]*constants[40])/(1.00000+constants[11]/constants[32]+constants[33]/constants[11]+(power(constants[34]/states[2], constants[41]))/((1.00000+states[0]/constants[35])*(1.00000+states[10]/constants[36]))+(constants[37]/algebraic[4])*(1.00000+states[1]/constants[38])+((power(constants[34]/states[2], constants[41]))*(constants[37]/algebraic[4])*(1.00000+states[1]/constants[38]))/((1.00000+states[0]/constants[35])*(1.00000+states[10]/constants[36])))
    algebraic[6] = constants[21]-(states[2]+states[3]+states[4]+states[5]+states[6]+states[7]+states[8])
    algebraic[8] = constants[30]*(algebraic[6]-states[2]/constants[31])
    algebraic[2] = constants[7]-states[0]
    algebraic[11] = constants[49]*(states[4]*states[0]-(states[5]*algebraic[2]*constants[13])/constants[50])
    algebraic[10] = (constants[43]*constants[44])/(1.00000+(power(constants[42]/states[3], constants[47]))/((1.00000+constants[10]/constants[45])*(1.00000+states[10]/constants[46]))+(constants[48]/algebraic[4])/((1.00000+constants[10]/constants[45])*(1.00000+states[10]/constants[46])))
    algebraic[12] = (constants[52]*constants[53])/(1.00000+(constants[54]/states[5])*(1.00000+states[8]/constants[51])*(1.00000+states[6]/constants[55]))
    algebraic[15] = constants[69]*(states[8]*constants[9]-(states[3]*states[9])/constants[68])
    algebraic[16] = constants[67]*(states[6]-states[7]/constants[66])
    algebraic[13] = (constants[57]*constants[58]*constants[132]*constants[133])/(1.00000+(constants[56]/states[7])*(1.00000+states[8]/constants[59])+constants[60]/algebraic[4]+(constants[56]/states[7])*(1.00000+states[8]/constants[59])*(constants[60]/algebraic[4]))
    algebraic[7] = (constants[28]*constants[29])/(1.00000+constants[26]/constants[14]+constants[27]/states[8]+(constants[26]/constants[14])*(constants[27]/states[8]))
    algebraic[18] = constants[70]*states[9]
    algebraic[17] = (constants[88]+constants[89]/(1.00000+constants[92]/states[12]))*(constants[87]+constants[86]/(1.00000+exp(constants[90]*(constants[91]-states[15]))))*states[15]
    algebraic[20] = constants[93]*(algebraic[17]/states[15])*(states[15]-((constants[22]*constants[23])/constants[24])*log(states[11]/states[12], 10))
    algebraic[14] = (2.00000*constants[71]*constants[73]*(constants[71]+constants[72]*(1.00000+states[13]/constants[75]))*constants[74]*states[12])/(constants[73]*(2.00000*constants[71]+constants[72]*(1.00000+states[13]/constants[75]))+states[12]*constants[71]*constants[72]*(1.00000+states[13]/constants[75]))
    algebraic[19] = 2.00000*constants[76]*constants[77]*states[13]*exp(-constants[78]*states[13])
    algebraic[21] = (constants[81]*states[13]*states[14])/(constants[79]*states[14]+constants[80]*states[13])
    algebraic[5] = 2.00000*(constants[20]-states[14])
    algebraic[23] = (constants[82]*constants[85])/(1.00000+constants[83]/algebraic[5]+constants[84]/constants[18]+(constants[83]/algebraic[5])*(constants[84]/constants[18]))
    algebraic[22] = ((constants[22]*constants[23])/constants[24])*log(constants[103]*(power(states[1]/algebraic[4], 0.500000)))
    algebraic[24] = ((constants[22]*constants[23])/constants[24])*constants[108]+states[15]
    algebraic[26] = 0.500000*constants[94]*((((constants[96]+constants[97]*exp((6.00000*constants[24]*constants[106])/(constants[22]*constants[23])))*exp((algebraic[22]*constants[24])/(constants[22]*constants[23]))-constants[96]*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23])))+constants[102]*exp((algebraic[22]*constants[24])/(constants[22]*constants[23]))*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23])))/((1.00000+constants[98]*exp((constants[24]*algebraic[22])/(constants[22]*constants[23])))*exp((6.00000*constants[24]*constants[106])/(constants[22]*constants[23]))+(constants[99]+constants[100]*exp((constants[24]*algebraic[22])/(constants[22]*constants[23])))*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))
    algebraic[3] = custom_piecewise([greater_equal(voi , 100.000) & less(voi , 300.000), constants[8] , True, 0.0500000])
    algebraic[32] = constants[120]*((1.00000-(0.0500000*constants[6]*0.450000*0.800000*states[0])/(0.450000*algebraic[3]*0.0500000*algebraic[2]))/((1.00000+((0.0500000*constants[6])/(0.450000*algebraic[3]))*exp((-constants[118]*constants[24]*constants[119])/(constants[22]*constants[23])))*(1.00000+(0.450000*0.800000*states[0])/(0.0500000*algebraic[2]))))
    algebraic[29] = ((constants[22]*constants[23])/constants[24])*log(constants[117]*(algebraic[2]/(states[0]*constants[12])))
    algebraic[30] = -constants[109]*(((100.000*constants[110]+constants[111]*exp((3.00000*constants[24]*constants[106])/(constants[22]*constants[23])))*exp((algebraic[29]*constants[24])/(constants[22]*constants[23]))-(constants[110]*exp((3.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))+constants[116]*exp((algebraic[29]*constants[24])/(constants[22]*constants[23]))*exp((3.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))/((1.00000+constants[112]*exp((constants[24]*algebraic[29])/(constants[22]*constants[23])))*exp((3.00000*constants[24]*constants[106])/(constants[22]*constants[23]))+(constants[113]+constants[114]*exp((constants[24]*algebraic[29])/(constants[22]*constants[23])))*exp((3.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))
    algebraic[0] = custom_piecewise([greater_equal(voi , 100.000) & less(voi , 300.000), 0.500000 , True, 4.00000])
    algebraic[1] = custom_piecewise([greater_equal(voi , constants[1]) & less_equal(voi , constants[2]) & less_equal((voi-constants[1])-floor((voi-constants[1])/algebraic[0])*algebraic[0] , constants[3]), constants[4] , True, 0.100000])
    algebraic[33] = constants[123]*(((algebraic[1]/constants[125])*(power(1.00000+algebraic[1]/constants[125], 3.00000))*((2.00000*constants[24]*(states[15]-constants[119]))/(constants[22]*constants[23])))/(power(1.00000+algebraic[1]/constants[125], 4.00000)+(constants[121]/(power(1.00000+algebraic[1]/constants[124], constants[122])))*(1.00000-exp((-2.00000*constants[24]*(states[15]-constants[119]))/(constants[22]*constants[23])))))
    algebraic[34] = constants[127]*((exp((constants[130]*constants[24]*(states[15]-constants[119]))/(constants[22]*constants[23]))*exp(log(algebraic[1]/states[10])))/((power(1.00000+constants[128]/constants[5], constants[126]))*(1.00000+constants[129]/states[10])))
    algebraic[25] = 6.00000*constants[94]*((constants[96]*exp((constants[24]*algebraic[22])/(constants[22]*constants[23]))-(constants[96]+constants[101])*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23])))/((1.00000+constants[98]*exp((constants[24]*algebraic[22])/(constants[22]*constants[23])))*exp((6.00000*constants[24]*constants[106])/(constants[22]*constants[23]))+(constants[99]+constants[100]*exp((constants[24]*algebraic[22])/(constants[22]*constants[23])))*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))
    algebraic[27] = 6.00000*constants[95]*((constants[96]*exp((constants[24]*constants[131])/(constants[22]*constants[23]))-(constants[96]+constants[101])*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23])))/((1.00000+constants[98]*exp((constants[24]*constants[131])/(constants[22]*constants[23])))*exp((6.00000*constants[24]*constants[106])/(constants[22]*constants[23]))+(constants[99]+constants[100]*exp((constants[24]*constants[131])/(constants[22]*constants[23])))*exp((constants[107]*6.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))
    algebraic[31] = -3.00000*constants[109]*((100.000*constants[110]*(1.00000+exp((constants[24]*algebraic[29])/(constants[22]*constants[23])))-(constants[110]+constants[115])*exp((3.00000*constants[24]*algebraic[24])/(constants[22]*constants[23])))/((1.00000+constants[112]*exp((constants[24]*algebraic[29])/(constants[22]*constants[23])))*exp((3.00000*constants[24]*constants[106])/(constants[22]*constants[23]))+(constants[113]+constants[114]*exp((constants[24]*algebraic[29])/(constants[22]*constants[23])))*exp((3.00000*constants[24]*algebraic[24])/(constants[22]*constants[23]))))
    algebraic[28] = constants[105]*algebraic[24]
    return algebraic

def custom_piecewise(cases):
    """Compute result of a piecewise function"""
    return select(cases[0::2],cases[1::2])

def solve_model():
    """Solve model with ODE solver"""
    from scipy.integrate import ode
    # Initialise constants and state variables
    (init_states, constants) = initConsts()

    # Set timespan to solve over
    voi = linspace(0, 10, 500)

    # Construct ODE object to solve
    r = ode(computeRates)
    r.set_integrator('vode', method='bdf', atol=1e-06, rtol=1e-06, max_step=1)
    r.set_initial_value(init_states, voi[0])
    r.set_f_params(constants)

    # Solve model
    states = array([[0.0] * len(voi)] * sizeStates)
    states[:,0] = init_states
    for (i,t) in enumerate(voi[1:]):
        if r.successful():
            r.integrate(t)
            states[:,i+1] = r.y
        else:
            break

    # Compute algebraic variables
    algebraic = computeAlgebraic(constants, states, voi)
    return (voi, states, algebraic)

def plot_model(voi, states, algebraic):
    """Plot variables against variable of integration"""
    import pylab
    (legend_states, legend_algebraic, legend_voi, legend_constants) = createLegends()
    pylab.figure(1)
    pylab.plot(voi,vstack((states,algebraic)).T)
    pylab.xlabel(legend_voi)
    pylab.legend(legend_states + legend_algebraic, loc='best')
    pylab.show()

if __name__ == "__main__":
    (voi, states, algebraic) = solve_model()
    plot_model(voi, states, algebraic)