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 = 82
sizeStates = 29
sizeConstants = 63
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] = "V in component membrane (millivolt)"
    legend_constants[0] = "R in component membrane (joule_per_kilomole_kelvin)"
    legend_constants[1] = "T in component membrane (kelvin)"
    legend_constants[2] = "F in component membrane (coulomb_per_mole)"
    legend_constants[3] = "C in component membrane (microF)"
    legend_constants[53] = "RTONF in component membrane (millivolt)"
    legend_algebraic[66] = "i_Na in component fast_sodium_current (nanoA)"
    legend_algebraic[71] = "i_CaL in component L_type_calcium_current (nanoA)"
    legend_algebraic[67] = "i_to in component transient_outward_potassium_current (nanoA)"
    legend_algebraic[42] = "i_Kr in component rapid_delayed_rectifier_potassium_current (nanoA)"
    legend_algebraic[34] = "i_f in component hyperpolarising_activated_current (nanoA)"
    legend_algebraic[68] = "i_st in component sustained_outward_potassium_current (nanoA)"
    legend_algebraic[50] = "i_K1 in component time_independent_potassium_current (nanoA)"
    legend_algebraic[65] = "i_NaCa in component sodium_calcium_exchange_current (nanoA)"
    legend_algebraic[52] = "i_p in component sodium_potassium_pump (nanoA)"
    legend_algebraic[51] = "i_b in component background_current (nanoA)"
    legend_algebraic[70] = "i_ACh in component acetylcholine_sensitive_current (nanoA)"
    legend_algebraic[17] = "i_Stim in component membrane (nanoA)"
    legend_constants[4] = "stim_start in component membrane (second)"
    legend_constants[5] = "stim_end in component membrane (second)"
    legend_constants[6] = "stim_period in component membrane (second)"
    legend_constants[7] = "stim_duration in component membrane (second)"
    legend_constants[8] = "stim_amplitude in component membrane (nanoA)"
    legend_constants[9] = "g_f in component hyperpolarising_activated_current (microS)"
    legend_constants[10] = "ACh in component acetylcholine_sensitive_current (millimolar)"
    legend_states[1] = "y in component hyperpolarising_activated_current_y_gate (dimensionless)"
    legend_algebraic[0] = "y_inf in component hyperpolarising_activated_current_y_gate (dimensionless)"
    legend_algebraic[19] = "tau_y in component hyperpolarising_activated_current_y_gate (second)"
    legend_constants[11] = "g_Kr in component rapid_delayed_rectifier_potassium_current (microS)"
    legend_constants[55] = "E_K in component rapid_delayed_rectifier_potassium_current (millivolt)"
    legend_constants[12] = "Ki in component intracellular_potassium_concentration (millimolar)"
    legend_constants[13] = "Kc in component extracellular_potassium_concentration (millimolar)"
    legend_states[2] = "paf in component rapid_delayed_rectifier_potassium_current_paf_gate (dimensionless)"
    legend_states[3] = "pas in component rapid_delayed_rectifier_potassium_current_pas_gate (dimensionless)"
    legend_states[4] = "pik in component rapid_delayed_rectifier_potassium_current_pik_gate (dimensionless)"
    legend_algebraic[1] = "paf_infinity in component rapid_delayed_rectifier_potassium_current_paf_gate (dimensionless)"
    legend_algebraic[20] = "tau_paf in component rapid_delayed_rectifier_potassium_current_paf_gate (second)"
    legend_algebraic[2] = "pas_infinity in component rapid_delayed_rectifier_potassium_current_pas_gate (dimensionless)"
    legend_algebraic[21] = "tau_pas in component rapid_delayed_rectifier_potassium_current_pas_gate (second)"
    legend_algebraic[3] = "pik_infinity in component rapid_delayed_rectifier_potassium_current_pik_gate (dimensionless)"
    legend_algebraic[22] = "alpha_pik in component rapid_delayed_rectifier_potassium_current_pik_gate (per_second)"
    legend_algebraic[35] = "beta_pik in component rapid_delayed_rectifier_potassium_current_pik_gate (per_second)"
    legend_algebraic[43] = "tau_pik in component rapid_delayed_rectifier_potassium_current_pik_gate (second)"
    legend_constants[14] = "g_K1 in component time_independent_potassium_current (microS)"
    legend_algebraic[49] = "g_K1_prime in component time_independent_potassium_current (microS)"
    legend_constants[15] = "g_b in component background_current (microS)"
    legend_constants[16] = "E_b in component background_current (millivolt)"
    legend_constants[17] = "I_p in component sodium_potassium_pump (nanoA)"
    legend_constants[18] = "Nai in component intracellular_sodium_concentration (millimolar)"
    legend_constants[19] = "kNaCa in component sodium_calcium_exchange_current (nanoA)"
    legend_algebraic[61] = "x1 in component sodium_calcium_exchange_current (dimensionless)"
    legend_algebraic[62] = "x2 in component sodium_calcium_exchange_current (dimensionless)"
    legend_algebraic[63] = "x3 in component sodium_calcium_exchange_current (dimensionless)"
    legend_algebraic[64] = "x4 in component sodium_calcium_exchange_current (dimensionless)"
    legend_algebraic[58] = "k41 in component sodium_calcium_exchange_current (dimensionless)"
    legend_constants[54] = "k34 in component sodium_calcium_exchange_current (dimensionless)"
    legend_algebraic[55] = "k23 in component sodium_calcium_exchange_current (dimensionless)"
    legend_algebraic[56] = "k21 in component sodium_calcium_exchange_current (dimensionless)"
    legend_algebraic[54] = "k32 in component sodium_calcium_exchange_current (dimensionless)"
    legend_constants[58] = "k43 in component sodium_calcium_exchange_current (dimensionless)"
    legend_algebraic[60] = "k12 in component sodium_calcium_exchange_current (dimensionless)"
    legend_algebraic[59] = "k14 in component sodium_calcium_exchange_current (dimensionless)"
    legend_constants[20] = "Qci in component sodium_calcium_exchange_current (dimensionless)"
    legend_constants[21] = "Qn in component sodium_calcium_exchange_current (dimensionless)"
    legend_constants[22] = "Qco in component sodium_calcium_exchange_current (dimensionless)"
    legend_constants[23] = "Kci in component sodium_calcium_exchange_current (millimolar)"
    legend_constants[24] = "K1ni in component sodium_calcium_exchange_current (millimolar)"
    legend_constants[25] = "K2ni in component sodium_calcium_exchange_current (millimolar)"
    legend_constants[26] = "K3ni in component sodium_calcium_exchange_current (millimolar)"
    legend_constants[27] = "Kcni in component sodium_calcium_exchange_current (millimolar)"
    legend_constants[28] = "K3no in component sodium_calcium_exchange_current (millimolar)"
    legend_constants[29] = "K1no in component sodium_calcium_exchange_current (millimolar)"
    legend_constants[30] = "K2no in component sodium_calcium_exchange_current (millimolar)"
    legend_constants[31] = "Kco in component sodium_calcium_exchange_current (millimolar)"
    legend_algebraic[53] = "do in component sodium_calcium_exchange_current (dimensionless)"
    legend_algebraic[57] = "di in component sodium_calcium_exchange_current (dimensionless)"
    legend_constants[32] = "Cao in component extracellular_calcium_concentration (millimolar)"
    legend_constants[33] = "Nao in component extracellular_sodium_concentration (millimolar)"
    legend_states[5] = "Casub in component intracellular_calcium_concentration (millimolar)"
    legend_constants[34] = "g_Na in component fast_sodium_current (microlitre_per_second)"
    legend_constants[56] = "E_Na in component fast_sodium_current (millivolt)"
    legend_states[6] = "m in component fast_sodium_current_m_gate (dimensionless)"
    legend_states[7] = "h1 in component fast_sodium_current_h1_gate (dimensionless)"
    legend_states[8] = "h2 in component fast_sodium_current_h2_gate (dimensionless)"
    legend_algebraic[23] = "alpha_m in component fast_sodium_current_m_gate (per_second)"
    legend_algebraic[36] = "beta_m in component fast_sodium_current_m_gate (per_second)"
    legend_constants[35] = "delta_m in component fast_sodium_current_m_gate (millivolt)"
    legend_algebraic[4] = "E0_m in component fast_sodium_current_m_gate (millivolt)"
    legend_algebraic[5] = "alpha_h1 in component fast_sodium_current_h1_gate (per_second)"
    legend_algebraic[24] = "beta_h1 in component fast_sodium_current_h1_gate (per_second)"
    legend_algebraic[37] = "h1_inf in component fast_sodium_current_h1_gate (dimensionless)"
    legend_algebraic[44] = "tau_h1 in component fast_sodium_current_h1_gate (second)"
    legend_algebraic[6] = "alpha_h2 in component fast_sodium_current_h2_gate (per_second)"
    legend_algebraic[25] = "beta_h2 in component fast_sodium_current_h2_gate (per_second)"
    legend_algebraic[38] = "h2_inf in component fast_sodium_current_h2_gate (dimensionless)"
    legend_algebraic[45] = "tau_h2 in component fast_sodium_current_h2_gate (second)"
    legend_constants[36] = "g_CaL in component L_type_calcium_current (microS)"
    legend_constants[37] = "E_CaL in component L_type_calcium_current (millivolt)"
    legend_states[9] = "d in component L_type_calcium_current_d_gate (dimensionless)"
    legend_states[10] = "f in component L_type_calcium_current_f_gate (dimensionless)"
    legend_states[11] = "f2 in component L_type_calcium_current_f2_gate (dimensionless)"
    legend_algebraic[7] = "alpha_d in component L_type_calcium_current_d_gate (per_second)"
    legend_algebraic[26] = "beta_d in component L_type_calcium_current_d_gate (per_second)"
    legend_algebraic[39] = "d_inf in component L_type_calcium_current_d_gate (dimensionless)"
    legend_algebraic[46] = "tau_d in component L_type_calcium_current_d_gate (second)"
    legend_constants[38] = "act_shift in component L_type_calcium_current_d_gate (millivolt)"
    legend_constants[39] = "slope_factor_act in component L_type_calcium_current_d_gate (millivolt)"
    legend_algebraic[8] = "f_inf in component L_type_calcium_current_f_gate (dimensionless)"
    legend_algebraic[27] = "tau_f in component L_type_calcium_current_f_gate (second)"
    legend_constants[40] = "inact_shift in component L_type_calcium_current_f_gate (millivolt)"
    legend_algebraic[9] = "f2_inf in component L_type_calcium_current_f2_gate (dimensionless)"
    legend_algebraic[28] = "tau_f2 in component L_type_calcium_current_f2_gate (second)"
    legend_constants[41] = "inact_shift in component L_type_calcium_current_f2_gate (millivolt)"
    legend_constants[57] = "E_K in component transient_outward_potassium_current (millivolt)"
    legend_constants[42] = "g_to in component transient_outward_potassium_current (microS)"
    legend_states[12] = "r in component transient_outward_potassium_current_r_gate (dimensionless)"
    legend_states[13] = "q_fast in component transient_outward_potassium_current_qfast_gate (dimensionless)"
    legend_states[14] = "q_slow in component transient_outward_potassium_current_qslow_gate (dimensionless)"
    legend_algebraic[29] = "tau_r in component transient_outward_potassium_current_r_gate (second)"
    legend_algebraic[10] = "r_infinity in component transient_outward_potassium_current_r_gate (dimensionless)"
    legend_algebraic[30] = "tau_qfast in component transient_outward_potassium_current_qfast_gate (second)"
    legend_algebraic[11] = "qfast_infinity in component transient_outward_potassium_current_qfast_gate (dimensionless)"
    legend_algebraic[31] = "tau_qslow in component transient_outward_potassium_current_qslow_gate (second)"
    legend_algebraic[12] = "qslow_infinity in component transient_outward_potassium_current_qslow_gate (dimensionless)"
    legend_constants[43] = "E_st in component sustained_outward_potassium_current (millivolt)"
    legend_constants[44] = "g_st in component sustained_outward_potassium_current (microS)"
    legend_states[15] = "qa in component sustained_outward_potassium_current_qa_gate (dimensionless)"
    legend_states[16] = "qi in component sustained_outward_potassium_current_qi_gate (dimensionless)"
    legend_algebraic[47] = "tau_qa in component sustained_outward_potassium_current_qa_gate (second)"
    legend_algebraic[13] = "qa_infinity in component sustained_outward_potassium_current_qa_gate (dimensionless)"
    legend_algebraic[32] = "alpha_qa in component sustained_outward_potassium_current_qa_gate (per_second)"
    legend_algebraic[40] = "beta_qa in component sustained_outward_potassium_current_qa_gate (per_second)"
    legend_algebraic[48] = "tau_qi in component sustained_outward_potassium_current_qi_gate (second)"
    legend_algebraic[14] = "alpha_qi in component sustained_outward_potassium_current_qi_gate (per_second)"
    legend_algebraic[33] = "beta_qi in component sustained_outward_potassium_current_qi_gate (per_second)"
    legend_algebraic[41] = "qi_infinity in component sustained_outward_potassium_current_qi_gate (dimensionless)"
    legend_algebraic[69] = "g_ACh in component acetylcholine_sensitive_current (microS)"
    legend_constants[45] = "g_ACh_max in component acetylcholine_sensitive_current (microS)"
    legend_constants[46] = "K_ACh in component acetylcholine_sensitive_current (millimolar)"
    legend_states[17] = "achf in component acetylcholine_sensitive_current_achf_gate (dimensionless)"
    legend_states[18] = "achs in component acetylcholine_sensitive_current_achs_gate (dimensionless)"
    legend_constants[47] = "alpha_achf in component acetylcholine_sensitive_current_achf_gate (per_second)"
    legend_algebraic[15] = "beta_achf in component acetylcholine_sensitive_current_achf_gate (per_second)"
    legend_constants[48] = "alpha_achs in component acetylcholine_sensitive_current_achs_gate (per_second)"
    legend_algebraic[16] = "beta_achs in component acetylcholine_sensitive_current_achs_gate (per_second)"
    legend_states[19] = "Cai in component intracellular_calcium_concentration (millimolar)"
    legend_constants[59] = "V_up in component intracellular_calcium_concentration (micrometre3)"
    legend_constants[60] = "V_rel in component intracellular_calcium_concentration (micrometre3)"
    legend_constants[61] = "V_sub in component intracellular_calcium_concentration (micrometre3)"
    legend_constants[62] = "Vi in component intracellular_calcium_concentration (micrometre3)"
    legend_constants[49] = "V_cell in component intracellular_calcium_concentration (micrometre3)"
    legend_algebraic[73] = "i_up in component intracellular_calcium_concentration (millimolar_per_second)"
    legend_algebraic[74] = "i_tr in component intracellular_calcium_concentration (millimolar_per_second)"
    legend_algebraic[76] = "i_rel in component intracellular_calcium_concentration (millimolar_per_second)"
    legend_algebraic[72] = "i_diff in component intracellular_calcium_concentration (millimolar_per_second)"
    legend_states[20] = "Ca_up in component intracellular_calcium_concentration (millimolar)"
    legend_states[21] = "Ca_rel in component intracellular_calcium_concentration (millimolar)"
    legend_constants[50] = "P_rel in component intracellular_calcium_concentration (per_second)"
    legend_constants[51] = "K_up in component intracellular_calcium_concentration (millimolar)"
    legend_constants[52] = "tau_tr in component intracellular_calcium_concentration (second)"
    legend_states[22] = "f_TC in component intracellular_calcium_concentration (dimensionless)"
    legend_states[23] = "f_TMC in component intracellular_calcium_concentration (dimensionless)"
    legend_states[24] = "f_TMM in component intracellular_calcium_concentration (dimensionless)"
    legend_states[25] = "f_CMi in component intracellular_calcium_concentration (dimensionless)"
    legend_states[26] = "f_CMs in component intracellular_calcium_concentration (dimensionless)"
    legend_states[27] = "f_CQ in component intracellular_calcium_concentration (dimensionless)"
    legend_states[28] = "f_CSL in component intracellular_calcium_concentration (dimensionless)"
    legend_algebraic[75] = "diff_f_TC in component intracellular_calcium_concentration (per_second)"
    legend_algebraic[77] = "diff_f_TMC in component intracellular_calcium_concentration (per_second)"
    legend_algebraic[18] = "diff_f_TMM in component intracellular_calcium_concentration (per_second)"
    legend_algebraic[78] = "diff_f_CMi in component intracellular_calcium_concentration (per_second)"
    legend_algebraic[79] = "diff_f_CMs in component intracellular_calcium_concentration (per_second)"
    legend_algebraic[80] = "diff_f_CQ in component intracellular_calcium_concentration (per_second)"
    legend_algebraic[81] = "diff_f_CSL in component intracellular_calcium_concentration (per_second)"
    legend_rates[0] = "d/dt V in component membrane (millivolt)"
    legend_rates[1] = "d/dt y in component hyperpolarising_activated_current_y_gate (dimensionless)"
    legend_rates[2] = "d/dt paf in component rapid_delayed_rectifier_potassium_current_paf_gate (dimensionless)"
    legend_rates[3] = "d/dt pas in component rapid_delayed_rectifier_potassium_current_pas_gate (dimensionless)"
    legend_rates[4] = "d/dt pik in component rapid_delayed_rectifier_potassium_current_pik_gate (dimensionless)"
    legend_rates[6] = "d/dt m in component fast_sodium_current_m_gate (dimensionless)"
    legend_rates[7] = "d/dt h1 in component fast_sodium_current_h1_gate (dimensionless)"
    legend_rates[8] = "d/dt h2 in component fast_sodium_current_h2_gate (dimensionless)"
    legend_rates[9] = "d/dt d in component L_type_calcium_current_d_gate (dimensionless)"
    legend_rates[10] = "d/dt f in component L_type_calcium_current_f_gate (dimensionless)"
    legend_rates[11] = "d/dt f2 in component L_type_calcium_current_f2_gate (dimensionless)"
    legend_rates[12] = "d/dt r in component transient_outward_potassium_current_r_gate (dimensionless)"
    legend_rates[13] = "d/dt q_fast in component transient_outward_potassium_current_qfast_gate (dimensionless)"
    legend_rates[14] = "d/dt q_slow in component transient_outward_potassium_current_qslow_gate (dimensionless)"
    legend_rates[15] = "d/dt qa in component sustained_outward_potassium_current_qa_gate (dimensionless)"
    legend_rates[16] = "d/dt qi in component sustained_outward_potassium_current_qi_gate (dimensionless)"
    legend_rates[17] = "d/dt achf in component acetylcholine_sensitive_current_achf_gate (dimensionless)"
    legend_rates[18] = "d/dt achs in component acetylcholine_sensitive_current_achs_gate (dimensionless)"
    legend_rates[20] = "d/dt Ca_up in component intracellular_calcium_concentration (millimolar)"
    legend_rates[21] = "d/dt Ca_rel in component intracellular_calcium_concentration (millimolar)"
    legend_rates[19] = "d/dt Cai in component intracellular_calcium_concentration (millimolar)"
    legend_rates[5] = "d/dt Casub in component intracellular_calcium_concentration (millimolar)"
    legend_rates[22] = "d/dt f_TC in component intracellular_calcium_concentration (dimensionless)"
    legend_rates[23] = "d/dt f_TMC in component intracellular_calcium_concentration (dimensionless)"
    legend_rates[24] = "d/dt f_TMM in component intracellular_calcium_concentration (dimensionless)"
    legend_rates[25] = "d/dt f_CMi in component intracellular_calcium_concentration (dimensionless)"
    legend_rates[26] = "d/dt f_CMs in component intracellular_calcium_concentration (dimensionless)"
    legend_rates[27] = "d/dt f_CQ in component intracellular_calcium_concentration (dimensionless)"
    legend_rates[28] = "d/dt f_CSL in component intracellular_calcium_concentration (dimensionless)"
    return (legend_states, legend_algebraic, legend_voi, legend_constants)

def initConsts():
    constants = [0.0] * sizeConstants; states = [0.0] * sizeStates;
    states[0] = -69.760276376489
    constants[0] = 8314.472
    constants[1] = 310
    constants[2] = 96485.3415
    constants[3] = 2.9e-5
    constants[4] = 0.1
    constants[5] = 99999
    constants[6] = 1
    constants[7] = 0.001
    constants[8] = -2
    constants[9] = 0
    constants[10] = 0
    states[1] = 0.19584111039096
    constants[11] = 0.002
    constants[12] = 140
    constants[13] = 5.4
    states[2] = 0.00141762995766447
    states[3] = 0.00539771950846456
    states[4] = 0.98638204514681
    constants[14] = 0.015
    constants[15] = 0.002
    constants[16] = -40
    constants[17] = 0.1968
    constants[18] = 8
    constants[19] = 5.916
    constants[20] = 0.1369
    constants[21] = 0.4315
    constants[22] = 0
    constants[23] = 0.0207
    constants[24] = 395.3
    constants[25] = 2.289
    constants[26] = 26.44
    constants[27] = 26.44
    constants[28] = 4.663
    constants[29] = 1628
    constants[30] = 561.4
    constants[31] = 3.663
    constants[32] = 2
    constants[33] = 140
    states[5] = 3.27335718697622e-5
    constants[34] = 5e-7
    states[6] = 0.0132200747771872
    states[7] = 0.706622937059237
    states[8] = 0.701626826712569
    constants[35] = 1e-5
    constants[36] = 0.021
    constants[37] = 62.1
    states[9] = 4.23500474189711e-5
    states[10] = 0.998435073735753
    states[11] = 0.998424216938754
    constants[38] = 0
    constants[39] = -6.61
    constants[40] = -5
    constants[41] = -5
    constants[42] = 0.014
    states[12] = 0.00894826428663828
    states[13] = 0.994837524153424
    states[14] = 0.427382372349565
    constants[43] = -37.4
    constants[44] = 0
    states[15] = 0.0910882041816457
    states[16] = 0.890389014175329
    constants[45] = 0.0198
    constants[46] = 0.00035
    states[17] = 0.74242774587522
    states[18] = 0.746918323597392
    constants[47] = 73.1
    constants[48] = 3.7
    states[19] = 3.73317163732586e-5
    constants[49] = 4.39823e-6
    states[20] = 0.818671555213184
    states[21] = 0.682159360306652
    constants[50] = 1805.6
    constants[51] = 0.0006
    constants[52] = 0.06
    states[22] = 0.00739583869345967
    states[23] = 0.133773505989393
    states[24] = 0.765246381247448
    states[25] = 0.0154714370092264
    states[26] = 0.0135767851016544
    states[27] = 0.449992033196647
    states[28] = 1.21722016147587e-5
    constants[53] = (constants[0]*constants[1])/constants[2]
    constants[54] = constants[33]/(constants[28]+constants[33])
    constants[55] = constants[53]*log(constants[13]/constants[12])
    constants[56] = constants[53]*log(constants[33]/constants[18])
    constants[57] = constants[53]*log(constants[13]/constants[12])
    constants[58] = constants[18]/(constants[26]+constants[18])
    constants[59] = 0.0116000*constants[49]
    constants[60] = 0.00120000*constants[49]
    constants[61] = 0.0100000*constants[49]
    constants[62] = 0.460000*constants[49]-constants[61]
    return (states, constants)

def computeRates(voi, states, constants):
    rates = [0.0] * sizeStates; algebraic = [0.0] * sizeAlgebraic
    algebraic[15] = 120.000/(1.00000+exp(-(states[0]+50.0000)/15.0000))
    rates[17] = constants[47]*(1.00000-states[17])-algebraic[15]*states[17]
    algebraic[16] = 5.82000/(1.00000+exp(-(states[0]+50.0000)/15.0000))
    rates[18] = constants[48]*(1.00000-states[18])-algebraic[16]*states[18]
    algebraic[18] = 2277.00*2.50000*((1.00000-states[23])-states[24])-751.000*states[24]
    rates[24] = algebraic[18]
    algebraic[0] = 1.00000/(1.00000+exp(((states[0]+83.1900)-(-7.20000*(power(constants[10], 0.690000)))/(power(1.26000e-05, 0.690000)+power(constants[10], 0.690000)))/13.5600))
    algebraic[19] = 0.250000+2.00000*exp(-(power(states[0]+70.0000, 2.00000))/500.000)
    rates[1] = (algebraic[0]-states[1])/algebraic[19]
    algebraic[1] = 1.00000/(1.00000+exp((states[0]+10.2200)/-8.50000))
    algebraic[20] = 1.00000/(17.0000*exp(0.0398000*states[0])+0.211000*exp(-0.0510000*states[0]))
    rates[2] = (algebraic[1]-states[2])/algebraic[20]
    algebraic[2] = 1.00000/(1.00000+exp((states[0]+10.2200)/-8.50000))
    algebraic[21] = 0.335810+0.906730*exp(-(power(states[0]+10.0000, 2.00000))/988.050)
    rates[3] = (algebraic[2]-states[3])/algebraic[21]
    algebraic[8] = 1.00000/(1.00000+exp((states[0]-(-24.0000+constants[40]))/6.31000))
    algebraic[27] = 0.0100000+0.153900*exp(-(power(states[0]+40.0000, 2.00000))/185.670)
    rates[10] = (algebraic[8]-states[10])/algebraic[27]
    algebraic[9] = 1.00000/(1.00000+exp((states[0]-(-24.0000+constants[41]))/6.31000))
    algebraic[28] = 0.0600000+0.480760*2.25000*exp(-(power(states[0]--40.0000, 2.00000))/138.040)
    rates[11] = (algebraic[9]-states[11])/algebraic[28]
    algebraic[29] = 0.000596000+0.00311800/(1.03700*exp(0.0900000*(states[0]+30.6100))+0.396000*exp(-0.120000*(states[0]+23.8400)))
    algebraic[10] = 1.00000/(1.00000+exp((states[0]-7.44000)/-16.4000))
    rates[12] = (algebraic[10]-states[12])/algebraic[29]
    algebraic[30] = 0.0126600+4.72716/(1.00000+exp((states[0]+154.500)/23.9600))
    algebraic[11] = 1.00000/(1.00000+exp((states[0]+33.8000)/6.12000))
    rates[13] = (algebraic[11]-states[13])/algebraic[30]
    algebraic[31] = 0.100000+4.00000*exp(-(power(states[0]+65.0000, 2.00000))/500.000)
    algebraic[12] = 1.00000/(1.00000+exp((states[0]+33.8000)/6.12000))
    rates[14] = (algebraic[12]-states[14])/algebraic[31]
    algebraic[4] = states[0]+44.4000
    algebraic[23] = custom_piecewise([less(fabs(algebraic[4]) , constants[35]), (-460.000*-12.6730)/exp(algebraic[4]/-12.6730) , True, (-460.000*algebraic[4])/(exp(algebraic[4]/-12.6730)-1.00000)])
    algebraic[36] = 18400.0*exp(algebraic[4]/-12.6730)
    rates[6] = algebraic[23]*(1.00000-states[6])-algebraic[36]*states[6]
    algebraic[3] = (1.00000/(1.00000+exp((states[0]+4.90000)/15.1400)))*(1.00000-0.300000*exp(-(power(states[0], 2.00000))/500.000))
    algebraic[22] = 92.0100*exp(-0.0183000*states[0])
    algebraic[35] = 603.600*exp(0.00942000*states[0])
    algebraic[43] = 1.00000/(algebraic[22]+algebraic[35])
    rates[4] = (algebraic[3]-states[4])/algebraic[43]
    algebraic[5] = 44.9000*exp((states[0]+66.9000)/-5.57000)
    algebraic[24] = 1491.00/(1.00000+323.300*exp((states[0]+94.6000)/-12.9000))
    algebraic[37] = algebraic[5]/(algebraic[5]+algebraic[24])
    algebraic[44] = 0.0300000/(1.00000+exp((states[0]+40.0000)/6.00000))+0.000350000
    rates[7] = (algebraic[37]-states[7])/algebraic[44]
    algebraic[6] = 44.9000*exp((states[0]+66.9000)/-5.57000)
    algebraic[25] = 1491.00/(1.00000+323.300*exp((states[0]+94.6000)/-12.9000))
    algebraic[38] = algebraic[6]/(algebraic[6]+algebraic[25])
    algebraic[45] = 0.120000/(1.00000+exp((states[0]+60.0000)/2.00000))+0.00295000
    rates[8] = (algebraic[38]-states[8])/algebraic[45]
    algebraic[39] = 1.00000/(1.00000+exp((states[0]-(-3.20000+constants[38]))/constants[39]))
    algebraic[7] = (-26.1200*(states[0]+35.0000))/(exp((states[0]+35.0000)/-2.50000)-1.00000)+(-78.1100*states[0])/(exp(-0.208000*states[0])-1.00000)
    algebraic[26] = (10.5200*(states[0]-5.00000))/(exp(0.400000*(states[0]-5.00000))-1.00000)
    algebraic[46] = 1.00000/(algebraic[7]+algebraic[26])
    rates[9] = (algebraic[39]-states[9])/algebraic[46]
    algebraic[32] = 1.00000/(0.150000*exp(-states[0]/11.0000)+0.200000*exp(-states[0]/700.000))
    algebraic[40] = 1.00000/(16.0000*exp(states[0]/8.00000)+15.0000*exp(states[0]/50.0000))
    algebraic[47] = 0.00100000/(algebraic[32]+algebraic[40])
    algebraic[13] = 1.00000/(1.00000+exp((states[0]--49.1000)/-8.98000))
    rates[15] = (algebraic[13]-states[15])/algebraic[47]
    algebraic[14] = 0.150400/(3100.00*exp(states[0]/13.0000)+700.000*exp(states[0]/70.0000))
    algebraic[33] = 0.150400/(95.0000*exp(-states[0]/10.0000)+50.0000*exp(-states[0]/700.000))+0.000229000/(1.00000+exp(-states[0]/5.00000))
    algebraic[48] = 0.00100000/(algebraic[14]+algebraic[33])
    algebraic[41] = algebraic[14]/(algebraic[14]+algebraic[33])
    rates[16] = (algebraic[41]-states[16])/algebraic[48]
    algebraic[66] = (((constants[34]*(power(states[6], 3.00000))*(0.635000*states[7]+0.365000*states[8])*constants[33]*states[0]*constants[2])/constants[53])*(exp((states[0]-constants[56])/constants[53])-1.00000))/(exp(states[0]/constants[53])-1.00000)
    algebraic[69] = (constants[45]*states[17]*states[18]*(power(constants[10], 1.50000)))/(power(constants[46], 1.50000)+power(constants[10], 1.50000))
    algebraic[70] = (((algebraic[69]*constants[13])/(10.0000+constants[13]))*(states[0]-constants[55]))/(1.00000+exp(((states[0]-constants[55])-140.000)/(2.50000*constants[53])))
    algebraic[71] = constants[36]*states[9]*(0.675000*states[10]+0.325000*states[11])*(states[0]-constants[37])*(1.00000-((algebraic[70]*constants[10])/(9.00000e-05+constants[10]))/1.00000)
    algebraic[67] = constants[42]*states[12]*(0.450000*states[13]+0.550000*states[14])*(states[0]-constants[57])
    algebraic[42] = constants[11]*(0.900000*states[2]+0.100000*states[3])*states[4]*(states[0]-constants[55])
    algebraic[34] = states[1]*constants[9]*(states[0]--30.0000)
    algebraic[68] = constants[44]*states[15]*states[16]*(states[0]-constants[43])
    algebraic[49] = constants[14]*(0.500000+0.500000/(1.00000+exp((states[0]+30.0000)/5.00000)))
    algebraic[50] = (algebraic[49]*(power(constants[13]/(constants[13]+0.590000), 3.00000))*(states[0]+81.9000))/(1.00000+exp((1.39300*(states[0]+81.9000+3.60000))/constants[53]))
    algebraic[58] = exp((-constants[21]*states[0])/(2.00000*constants[53]))
    algebraic[53] = 1.00000+(constants[32]/constants[31])*(1.00000+exp((constants[22]*states[0])/constants[53]))+constants[33]/constants[29]+(power(constants[33], 2.00000))/(constants[29]*constants[30])+(power(constants[33], 3.00000))/(constants[29]*constants[30]*constants[28])
    algebraic[55] = (((power(constants[33], 2.00000))/(constants[29]*constants[30])+(power(constants[33], 3.00000))/(constants[29]*constants[30]*constants[28]))*exp((-constants[21]*states[0])/(2.00000*constants[53])))/algebraic[53]
    algebraic[56] = ((constants[32]/constants[31])*exp((-constants[22]*states[0])/constants[53]))/algebraic[53]
    algebraic[54] = exp((constants[21]*states[0])/(2.00000*constants[53]))
    algebraic[61] = algebraic[58]*constants[54]*(algebraic[55]+algebraic[56])+algebraic[56]*algebraic[54]*(constants[58]+algebraic[58])
    algebraic[57] = 1.00000+(states[5]/constants[23])*(1.00000+exp((-constants[20]*states[0])/constants[53])+constants[18]/constants[27])+constants[18]/constants[24]+(power(constants[18], 2.00000))/(constants[24]*constants[25])+(power(constants[18], 3.00000))/(constants[24]*constants[25]*constants[26])
    algebraic[60] = ((states[5]/constants[23])*exp((-constants[20]*states[0])/constants[53]))/algebraic[57]
    algebraic[59] = (((power(constants[18], 2.00000))/(constants[24]*constants[25])+(power(constants[18], 3.00000))/(constants[24]*constants[25]*constants[26]))*exp((constants[21]*states[0])/(2.00000*constants[53])))/algebraic[57]
    algebraic[62] = algebraic[54]*constants[58]*(algebraic[59]+algebraic[60])+algebraic[58]*algebraic[60]*(constants[54]+algebraic[54])
    algebraic[63] = algebraic[59]*constants[58]*(algebraic[55]+algebraic[56])+algebraic[60]*algebraic[55]*(constants[58]+algebraic[58])
    algebraic[64] = algebraic[55]*constants[54]*(algebraic[59]+algebraic[60])+algebraic[59]*algebraic[56]*(constants[54]+algebraic[54])
    algebraic[65] = (constants[19]*(algebraic[62]*algebraic[56]-algebraic[61]*algebraic[60]))/(algebraic[61]+algebraic[62]+algebraic[63]+algebraic[64])
    algebraic[52] = (constants[17]*(power(constants[18]/(5.64000+constants[18]), 3.00000))*(power(constants[13]/(0.621000+constants[13]), 2.00000))*1.60000)/(1.50000+exp(-(states[0]+60.0000)/40.0000))
    algebraic[51] = constants[15]*(states[0]-constants[16])
    algebraic[17] = custom_piecewise([greater_equal(voi , constants[4]) & less_equal(voi , constants[5]) & less_equal((voi-constants[4])-floor((voi-constants[4])/constants[6])*constants[6] , constants[7]), constants[8] , True, 0.00000])
    rates[0] = -(algebraic[66]+algebraic[71]+algebraic[67]+algebraic[42]+algebraic[34]+algebraic[68]+algebraic[50]+algebraic[65]+algebraic[52]+algebraic[51]+algebraic[70]+algebraic[17])/constants[3]
    algebraic[73] = 5.00000/(1.00000+constants[51]/states[19])
    algebraic[74] = (states[20]-states[21])/constants[52]
    rates[20] = algebraic[73]-(algebraic[74]*constants[60])/constants[59]
    algebraic[75] = 88800.0*states[19]*(1.00000-states[22])-446.000*states[22]
    rates[22] = algebraic[75]
    algebraic[77] = 227700.*states[19]*((1.00000-states[23])-states[24])-7.51000*states[23]
    rates[23] = algebraic[77]
    algebraic[76] = (constants[50]*(states[21]-states[5]))/(1.00000+power(0.00120000/states[5], 2.00000))
    algebraic[80] = 534.000*states[21]*(1.00000-states[27])-445.000*states[27]
    rates[21] = (algebraic[74]-algebraic[76])-10.0000*algebraic[80]
    algebraic[72] = (states[5]-states[19])/4.00000e-05
    algebraic[78] = 227700.*states[19]*(1.00000-states[25])-542.000*states[25]
    rates[19] = (algebraic[72]*constants[61]-algebraic[73]*constants[59])/constants[62]-(0.0450000*algebraic[78]+0.0310000*algebraic[75]+0.0620000*algebraic[77])
    rates[25] = algebraic[78]
    algebraic[79] = 227700.*states[5]*(1.00000-states[26])-542.000*states[26]
    rates[26] = algebraic[79]
    rates[27] = algebraic[80]
    algebraic[81] = 0.00100000*(115.000*states[5]*(1.00000-states[28])-1000.00*states[28])
    rates[5] = (((-(algebraic[71]-2.00000*algebraic[65])/(2.00000*constants[2])+algebraic[76]*constants[60])/constants[61]-algebraic[72])-0.0450000*algebraic[79])-(0.0310000/1.20000)*algebraic[81]
    rates[28] = algebraic[81]
    return(rates)

def computeAlgebraic(constants, states, voi):
    algebraic = array([[0.0] * len(voi)] * sizeAlgebraic)
    states = array(states)
    voi = array(voi)
    algebraic[15] = 120.000/(1.00000+exp(-(states[0]+50.0000)/15.0000))
    algebraic[16] = 5.82000/(1.00000+exp(-(states[0]+50.0000)/15.0000))
    algebraic[18] = 2277.00*2.50000*((1.00000-states[23])-states[24])-751.000*states[24]
    algebraic[0] = 1.00000/(1.00000+exp(((states[0]+83.1900)-(-7.20000*(power(constants[10], 0.690000)))/(power(1.26000e-05, 0.690000)+power(constants[10], 0.690000)))/13.5600))
    algebraic[19] = 0.250000+2.00000*exp(-(power(states[0]+70.0000, 2.00000))/500.000)
    algebraic[1] = 1.00000/(1.00000+exp((states[0]+10.2200)/-8.50000))
    algebraic[20] = 1.00000/(17.0000*exp(0.0398000*states[0])+0.211000*exp(-0.0510000*states[0]))
    algebraic[2] = 1.00000/(1.00000+exp((states[0]+10.2200)/-8.50000))
    algebraic[21] = 0.335810+0.906730*exp(-(power(states[0]+10.0000, 2.00000))/988.050)
    algebraic[8] = 1.00000/(1.00000+exp((states[0]-(-24.0000+constants[40]))/6.31000))
    algebraic[27] = 0.0100000+0.153900*exp(-(power(states[0]+40.0000, 2.00000))/185.670)
    algebraic[9] = 1.00000/(1.00000+exp((states[0]-(-24.0000+constants[41]))/6.31000))
    algebraic[28] = 0.0600000+0.480760*2.25000*exp(-(power(states[0]--40.0000, 2.00000))/138.040)
    algebraic[29] = 0.000596000+0.00311800/(1.03700*exp(0.0900000*(states[0]+30.6100))+0.396000*exp(-0.120000*(states[0]+23.8400)))
    algebraic[10] = 1.00000/(1.00000+exp((states[0]-7.44000)/-16.4000))
    algebraic[30] = 0.0126600+4.72716/(1.00000+exp((states[0]+154.500)/23.9600))
    algebraic[11] = 1.00000/(1.00000+exp((states[0]+33.8000)/6.12000))
    algebraic[31] = 0.100000+4.00000*exp(-(power(states[0]+65.0000, 2.00000))/500.000)
    algebraic[12] = 1.00000/(1.00000+exp((states[0]+33.8000)/6.12000))
    algebraic[4] = states[0]+44.4000
    algebraic[23] = custom_piecewise([less(fabs(algebraic[4]) , constants[35]), (-460.000*-12.6730)/exp(algebraic[4]/-12.6730) , True, (-460.000*algebraic[4])/(exp(algebraic[4]/-12.6730)-1.00000)])
    algebraic[36] = 18400.0*exp(algebraic[4]/-12.6730)
    algebraic[3] = (1.00000/(1.00000+exp((states[0]+4.90000)/15.1400)))*(1.00000-0.300000*exp(-(power(states[0], 2.00000))/500.000))
    algebraic[22] = 92.0100*exp(-0.0183000*states[0])
    algebraic[35] = 603.600*exp(0.00942000*states[0])
    algebraic[43] = 1.00000/(algebraic[22]+algebraic[35])
    algebraic[5] = 44.9000*exp((states[0]+66.9000)/-5.57000)
    algebraic[24] = 1491.00/(1.00000+323.300*exp((states[0]+94.6000)/-12.9000))
    algebraic[37] = algebraic[5]/(algebraic[5]+algebraic[24])
    algebraic[44] = 0.0300000/(1.00000+exp((states[0]+40.0000)/6.00000))+0.000350000
    algebraic[6] = 44.9000*exp((states[0]+66.9000)/-5.57000)
    algebraic[25] = 1491.00/(1.00000+323.300*exp((states[0]+94.6000)/-12.9000))
    algebraic[38] = algebraic[6]/(algebraic[6]+algebraic[25])
    algebraic[45] = 0.120000/(1.00000+exp((states[0]+60.0000)/2.00000))+0.00295000
    algebraic[39] = 1.00000/(1.00000+exp((states[0]-(-3.20000+constants[38]))/constants[39]))
    algebraic[7] = (-26.1200*(states[0]+35.0000))/(exp((states[0]+35.0000)/-2.50000)-1.00000)+(-78.1100*states[0])/(exp(-0.208000*states[0])-1.00000)
    algebraic[26] = (10.5200*(states[0]-5.00000))/(exp(0.400000*(states[0]-5.00000))-1.00000)
    algebraic[46] = 1.00000/(algebraic[7]+algebraic[26])
    algebraic[32] = 1.00000/(0.150000*exp(-states[0]/11.0000)+0.200000*exp(-states[0]/700.000))
    algebraic[40] = 1.00000/(16.0000*exp(states[0]/8.00000)+15.0000*exp(states[0]/50.0000))
    algebraic[47] = 0.00100000/(algebraic[32]+algebraic[40])
    algebraic[13] = 1.00000/(1.00000+exp((states[0]--49.1000)/-8.98000))
    algebraic[14] = 0.150400/(3100.00*exp(states[0]/13.0000)+700.000*exp(states[0]/70.0000))
    algebraic[33] = 0.150400/(95.0000*exp(-states[0]/10.0000)+50.0000*exp(-states[0]/700.000))+0.000229000/(1.00000+exp(-states[0]/5.00000))
    algebraic[48] = 0.00100000/(algebraic[14]+algebraic[33])
    algebraic[41] = algebraic[14]/(algebraic[14]+algebraic[33])
    algebraic[66] = (((constants[34]*(power(states[6], 3.00000))*(0.635000*states[7]+0.365000*states[8])*constants[33]*states[0]*constants[2])/constants[53])*(exp((states[0]-constants[56])/constants[53])-1.00000))/(exp(states[0]/constants[53])-1.00000)
    algebraic[69] = (constants[45]*states[17]*states[18]*(power(constants[10], 1.50000)))/(power(constants[46], 1.50000)+power(constants[10], 1.50000))
    algebraic[70] = (((algebraic[69]*constants[13])/(10.0000+constants[13]))*(states[0]-constants[55]))/(1.00000+exp(((states[0]-constants[55])-140.000)/(2.50000*constants[53])))
    algebraic[71] = constants[36]*states[9]*(0.675000*states[10]+0.325000*states[11])*(states[0]-constants[37])*(1.00000-((algebraic[70]*constants[10])/(9.00000e-05+constants[10]))/1.00000)
    algebraic[67] = constants[42]*states[12]*(0.450000*states[13]+0.550000*states[14])*(states[0]-constants[57])
    algebraic[42] = constants[11]*(0.900000*states[2]+0.100000*states[3])*states[4]*(states[0]-constants[55])
    algebraic[34] = states[1]*constants[9]*(states[0]--30.0000)
    algebraic[68] = constants[44]*states[15]*states[16]*(states[0]-constants[43])
    algebraic[49] = constants[14]*(0.500000+0.500000/(1.00000+exp((states[0]+30.0000)/5.00000)))
    algebraic[50] = (algebraic[49]*(power(constants[13]/(constants[13]+0.590000), 3.00000))*(states[0]+81.9000))/(1.00000+exp((1.39300*(states[0]+81.9000+3.60000))/constants[53]))
    algebraic[58] = exp((-constants[21]*states[0])/(2.00000*constants[53]))
    algebraic[53] = 1.00000+(constants[32]/constants[31])*(1.00000+exp((constants[22]*states[0])/constants[53]))+constants[33]/constants[29]+(power(constants[33], 2.00000))/(constants[29]*constants[30])+(power(constants[33], 3.00000))/(constants[29]*constants[30]*constants[28])
    algebraic[55] = (((power(constants[33], 2.00000))/(constants[29]*constants[30])+(power(constants[33], 3.00000))/(constants[29]*constants[30]*constants[28]))*exp((-constants[21]*states[0])/(2.00000*constants[53])))/algebraic[53]
    algebraic[56] = ((constants[32]/constants[31])*exp((-constants[22]*states[0])/constants[53]))/algebraic[53]
    algebraic[54] = exp((constants[21]*states[0])/(2.00000*constants[53]))
    algebraic[61] = algebraic[58]*constants[54]*(algebraic[55]+algebraic[56])+algebraic[56]*algebraic[54]*(constants[58]+algebraic[58])
    algebraic[57] = 1.00000+(states[5]/constants[23])*(1.00000+exp((-constants[20]*states[0])/constants[53])+constants[18]/constants[27])+constants[18]/constants[24]+(power(constants[18], 2.00000))/(constants[24]*constants[25])+(power(constants[18], 3.00000))/(constants[24]*constants[25]*constants[26])
    algebraic[60] = ((states[5]/constants[23])*exp((-constants[20]*states[0])/constants[53]))/algebraic[57]
    algebraic[59] = (((power(constants[18], 2.00000))/(constants[24]*constants[25])+(power(constants[18], 3.00000))/(constants[24]*constants[25]*constants[26]))*exp((constants[21]*states[0])/(2.00000*constants[53])))/algebraic[57]
    algebraic[62] = algebraic[54]*constants[58]*(algebraic[59]+algebraic[60])+algebraic[58]*algebraic[60]*(constants[54]+algebraic[54])
    algebraic[63] = algebraic[59]*constants[58]*(algebraic[55]+algebraic[56])+algebraic[60]*algebraic[55]*(constants[58]+algebraic[58])
    algebraic[64] = algebraic[55]*constants[54]*(algebraic[59]+algebraic[60])+algebraic[59]*algebraic[56]*(constants[54]+algebraic[54])
    algebraic[65] = (constants[19]*(algebraic[62]*algebraic[56]-algebraic[61]*algebraic[60]))/(algebraic[61]+algebraic[62]+algebraic[63]+algebraic[64])
    algebraic[52] = (constants[17]*(power(constants[18]/(5.64000+constants[18]), 3.00000))*(power(constants[13]/(0.621000+constants[13]), 2.00000))*1.60000)/(1.50000+exp(-(states[0]+60.0000)/40.0000))
    algebraic[51] = constants[15]*(states[0]-constants[16])
    algebraic[17] = custom_piecewise([greater_equal(voi , constants[4]) & less_equal(voi , constants[5]) & less_equal((voi-constants[4])-floor((voi-constants[4])/constants[6])*constants[6] , constants[7]), constants[8] , True, 0.00000])
    algebraic[73] = 5.00000/(1.00000+constants[51]/states[19])
    algebraic[74] = (states[20]-states[21])/constants[52]
    algebraic[75] = 88800.0*states[19]*(1.00000-states[22])-446.000*states[22]
    algebraic[77] = 227700.*states[19]*((1.00000-states[23])-states[24])-7.51000*states[23]
    algebraic[76] = (constants[50]*(states[21]-states[5]))/(1.00000+power(0.00120000/states[5], 2.00000))
    algebraic[80] = 534.000*states[21]*(1.00000-states[27])-445.000*states[27]
    algebraic[72] = (states[5]-states[19])/4.00000e-05
    algebraic[78] = 227700.*states[19]*(1.00000-states[25])-542.000*states[25]
    algebraic[79] = 227700.*states[5]*(1.00000-states[26])-542.000*states[26]
    algebraic[81] = 0.00100000*(115.000*states[5]*(1.00000-states[28])-1000.00*states[28])
    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)