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 = 50
sizeStates = 13
sizeConstants = 53
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_constants[0] = "R_cm in component cell (dimensionless)"
    legend_constants[1] = "R in component cell (kilojoule_per_mole_kelvin)"
    legend_constants[2] = "T in component cell (kelvin)"
    legend_constants[3] = "F in component cell (kilojoule_per_mole_millivolt)"
    legend_constants[50] = "S in component cell (kilojoule_per_mole)"
    legend_constants[51] = "Z in component cell (millivolt)"
    legend_algebraic[8] = "electric_potential in component cell (millivolt)"
    legend_constants[4] = "protonmotive_force in component cell (millivolt)"
    legend_algebraic[9] = "ex_membrane_potential in component cell (millivolt)"
    legend_algebraic[10] = "in_membrane_potential in component cell (millivolt)"
    legend_constants[5] = "c_buffi in component cell (molar_proton_per_pH_unit)"
    legend_constants[6] = "c_buffe in component cell (molar_proton_per_pH_unit)"
    legend_algebraic[0] = "pH_e in component cell (dimensionless)"
    legend_algebraic[4] = "pH_i in component cell (dimensionless)"
    legend_constants[7] = "pKa in component cell (dimensionless)"
    legend_states[0] = "He in component He (micromolar)"
    legend_states[1] = "Hi in component Hi (micromolar)"
    legend_algebraic[7] = "delta_pH in component cell (dimensionless)"
    legend_constants[8] = "dpH in component cell (dimensionless)"
    legend_algebraic[5] = "C0_i in component cell (molar_proton_per_pH_unit)"
    legend_algebraic[2] = "C0_e in component cell (molar_proton_per_pH_unit)"
    legend_algebraic[6] = "r_buffi in component cell (dimensionless)"
    legend_algebraic[3] = "r_buffe in component cell (dimensionless)"
    legend_constants[9] = "BN in component cell (dimensionless)"
    legend_algebraic[11] = "u in component cell (dimensionless)"
    legend_algebraic[13] = "EmN in component redox_potentials (millivolt)"
    legend_algebraic[32] = "EmU in component redox_potentials (millivolt)"
    legend_algebraic[29] = "Emc in component redox_potentials (millivolt)"
    legend_algebraic[31] = "Ema in component redox_potentials (millivolt)"
    legend_constants[10] = "EmN0 in component redox_potentials (millivolt)"
    legend_constants[11] = "EmU0 in component redox_potentials (millivolt)"
    legend_constants[12] = "Emc0 in component redox_potentials (millivolt)"
    legend_algebraic[12] = "NAD in component NAD (micromolar)"
    legend_states[2] = "NADH in component NADH (micromolar)"
    legend_algebraic[30] = "UQ in component UQ (micromolar)"
    legend_states[3] = "UQH2 in component UQH2 (micromolar)"
    legend_states[4] = "c_2 in component c_2 (micromolar)"
    legend_algebraic[28] = "c_3 in component c_3 (micromolar)"
    legend_constants[13] = "Nt in component NAD (micromolar)"
    legend_algebraic[34] = "vDH in component vDH (flux)"
    legend_algebraic[36] = "vC1 in component vC1 (flux)"
    legend_states[5] = "O2 in component O2 (micromolar)"
    legend_algebraic[39] = "vC4 in component vC4 (flux)"
    legend_constants[14] = "nA in component vSN (dimensionless)"
    legend_algebraic[38] = "vC3 in component vC3 (flux)"
    legend_algebraic[43] = "vSN in component vSN (flux)"
    legend_algebraic[44] = "vEX in component vEX (flux)"
    legend_algebraic[47] = "vPI in component vPI (flux)"
    legend_constants[52] = "vLK in component vLK (flux)"
    legend_algebraic[48] = "vCK in component vCK (flux)"
    legend_algebraic[49] = "vEFF in component vEFF (flux)"
    legend_algebraic[17] = "ADP_mi in component ADP_mi (micromolar)"
    legend_algebraic[14] = "ADP_ti in component ADP_ti (micromolar)"
    legend_algebraic[15] = "ADP_fi in component ADP_fi (micromolar)"
    legend_constants[15] = "kDDi in component ADP_fi (micromolar)"
    legend_constants[16] = "Mg_fi in component Mg_fi (micromolar)"
    legend_constants[17] = "Ai_SUM in component ADP_ti (micromolar)"
    legend_states[6] = "ATP_ti in component ATP_ti (micromolar)"
    legend_algebraic[19] = "ATP_mi in component ATP_mi (micromolar)"
    legend_algebraic[16] = "ATP_fi in component ATP_fi (micromolar)"
    legend_constants[18] = "kDTi in component ATP_fi (micromolar)"
    legend_algebraic[20] = "ADP_me in component ADP_me (micromolar)"
    legend_states[7] = "ADP_te in component ADP_te (micromolar)"
    legend_algebraic[18] = "ADP_fe in component ADP_fe (micromolar)"
    legend_constants[19] = "kDDe in component ADP_fe (micromolar)"
    legend_constants[20] = "Mg_fe in component Mg_fe (micromolar)"
    legend_algebraic[45] = "vUT in component vUT (flux)"
    legend_algebraic[46] = "vAK in component vAK (flux)"
    legend_algebraic[22] = "ATP_me in component ATP_me (micromolar)"
    legend_states[8] = "ATP_te in component ATP_te (micromolar)"
    legend_algebraic[21] = "ATP_fe in component ATP_fe (micromolar)"
    legend_constants[21] = "kDTe in component ATP_fe (micromolar)"
    legend_algebraic[23] = "AMP_e in component AMP_e (micromolar)"
    legend_constants[22] = "Ae_SUM in component AMP_e (micromolar)"
    legend_algebraic[24] = "Cr in component Cr (micromolar)"
    legend_constants[23] = "C_SUM in component Cr (micromolar)"
    legend_states[9] = "PCr in component PCr (micromolar)"
    legend_algebraic[26] = "Pi_ji in component Pi_ji (micromolar)"
    legend_states[10] = "Pi_ti in component Pi_ti (micromolar)"
    legend_algebraic[27] = "Pi_je in component Pi_je (micromolar)"
    legend_states[11] = "Pi_te in component Pi_te (micromolar)"
    legend_algebraic[25] = "P_SUM in component P_SUM (micromolar)"
    legend_constants[24] = "ct in component c_3 (micromolar)"
    legend_constants[25] = "Ut in component UQ (micromolar)"
    legend_states[12] = "a_2 in component a_2 (micromolar)"
    legend_algebraic[33] = "A3_2 in component a_2 (dimensionless)"
    legend_constants[26] = "Ema0 in component a_2 (millivolt)"
    legend_constants[27] = "at in component a_2 (micromolar)"
    legend_algebraic[1] = "a_3 in component a_3 (micromolar)"
    legend_constants[28] = "kDH in component vDH (flux)"
    legend_constants[29] = "KmN in component vDH (micromolar)"
    legend_constants[30] = "pD in component vDH (dimensionless)"
    legend_constants[31] = "kC1 in component vC1 (flux)"
    legend_algebraic[35] = "delta_GC1 in component vC1 (millivolt)"
    legend_constants[32] = "kC3 in component vC3 (flux)"
    legend_algebraic[37] = "delta_GC3 in component vC3 (millivolt)"
    legend_constants[33] = "kC4 in component vC4 (flux)"
    legend_constants[34] = "KmO in component vC4 (micromolar)"
    legend_constants[35] = "kSN in component vSN (flux)"
    legend_algebraic[41] = "delta_GSN in component vSN (millivolt)"
    legend_algebraic[40] = "delta_Gp in component vSN (kilojoule_per_mole)"
    legend_constants[36] = "delta_Gp0 in component vSN (kilojoule_per_mole)"
    legend_algebraic[42] = "gamma in component vSN (dimensionless)"
    legend_constants[37] = "kEX in component vEX (flux)"
    legend_constants[38] = "km_ADP in component vEX (micromolar)"
    legend_constants[39] = "km_A in component vUT (micromolar)"
    legend_constants[40] = "kUT in component vUT (flux)"
    legend_constants[41] = "kf_AK in component vAK (second_order_rate_constant)"
    legend_constants[42] = "kb_AK in component vAK (second_order_rate_constant)"
    legend_constants[43] = "kL1 in component vLK (flux)"
    legend_constants[44] = "kL2 in component vLK (per_millivolt)"
    legend_constants[45] = "kPI in component vPI (second_order_rate_constant)"
    legend_constants[46] = "kf_CK in component vCK (third_order_rate_constant)"
    legend_constants[47] = "kb_CK in component vCK (second_order_rate_constant)"
    legend_constants[48] = "pH_o in component vEFF (dimensionless)"
    legend_constants[49] = "k_EFF in component vEFF (flux)"
    legend_rates[2] = "d/dt NADH in component NADH (micromolar)"
    legend_rates[5] = "d/dt O2 in component O2 (micromolar)"
    legend_rates[1] = "d/dt Hi in component Hi (micromolar)"
    legend_rates[0] = "d/dt He in component He (micromolar)"
    legend_rates[6] = "d/dt ATP_ti in component ATP_ti (micromolar)"
    legend_rates[7] = "d/dt ADP_te in component ADP_te (micromolar)"
    legend_rates[8] = "d/dt ATP_te in component ATP_te (micromolar)"
    legend_rates[9] = "d/dt PCr in component PCr (micromolar)"
    legend_rates[10] = "d/dt Pi_ti in component Pi_ti (micromolar)"
    legend_rates[11] = "d/dt Pi_te in component Pi_te (micromolar)"
    legend_rates[4] = "d/dt c_2 in component c_2 (micromolar)"
    legend_rates[3] = "d/dt UQH2 in component UQH2 (micromolar)"
    legend_rates[12] = "d/dt a_2 in component a_2 (micromolar)"
    return (legend_states, legend_algebraic, legend_voi, legend_constants)

def initConsts():
    constants = [0.0] * sizeConstants; states = [0.0] * sizeStates;
    constants[0] = 15.0
    constants[1] = 0.0083
    constants[2] = 289.0
    constants[3] = 0.0965
    constants[4] = 190.0
    constants[5] = 0.022
    constants[6] = 0.025
    constants[7] = 6.8
    states[0] = 1.00
    states[1] = 1.00
    constants[8] = 0.001
    constants[9] = 5.0
    constants[10] = -320.0
    constants[11] = 85.0
    constants[12] = 250.0
    states[2] = 500.0
    states[3] = 1.00
    states[4] = 1.00
    constants[13] = 2970.0
    states[5] = 1.00
    constants[14] = 2.5
    constants[15] = 282
    constants[16] = 380.0
    constants[17] = 16260.0
    states[6] = 1.00
    constants[18] = 17
    states[7] = 1.00
    constants[19] = 347
    constants[20] = 4000.0
    states[8] = 1.00
    constants[21] = 24
    constants[22] = 1600.2
    constants[23] = 35000.0
    states[9] = 1.00
    states[10] = 1.00
    states[11] = 1.00
    constants[24] = 270.0
    constants[25] = 1350.0
    states[12] = 1.00
    constants[26] = 540.0
    constants[27] = 135.0
    constants[28] = 28074
    constants[29] = 100.0
    constants[30] = 0.8
    constants[31] = 238.95
    constants[32] = 136.41
    constants[33] = 136.41
    constants[34] = 120.0
    constants[35] = 34316.0
    constants[36] = 31.9
    constants[37] = 54572
    constants[38] = 3.5
    constants[39] = 150.0
    constants[40] = 686.5
    constants[41] = 862.10
    constants[42] = 22.747
    constants[43] = 2.5
    constants[44] = 0.038
    constants[45] = 69.421
    constants[46] = 1.9258
    constants[47] = 0.00087538
    constants[48] = 7.0
    constants[49] = 1.9258
    constants[50] = 2.30300*constants[1]*constants[2]
    constants[51] = 2.30300*constants[1]*(constants[2]/constants[3])
    constants[52] = constants[43]*(exp(constants[44]*constants[4])-1.00000)
    return (states, constants)

def computeRates(voi, states, constants):
    rates = [0.0] * sizeStates; algebraic = [0.0] * sizeAlgebraic
    algebraic[0] = -log(states[0]/1.00000e+06, 10)
    algebraic[4] = -log(states[1]/1.00000e+06, 10)
    algebraic[7] = constants[51]*(algebraic[4]-algebraic[0])
    algebraic[8] = -(constants[4]-algebraic[7])
    algebraic[11] = algebraic[8]/constants[4]
    algebraic[28] = constants[24]-states[4]
    algebraic[29] = constants[12]+constants[51]*log(algebraic[28]/states[4], 10)
    algebraic[31] = algebraic[29]+constants[4]*((2.00000+2.00000*algebraic[11])/2.00000)
    algebraic[33] = power(10.0000, (algebraic[31]-constants[26])/constants[51])
    rates[12] = constants[27]/(1.00000+algebraic[33])
    algebraic[12] = constants[13]-states[2]
    algebraic[34] = constants[28]*(1.00000/(power(1.00000+constants[29]/(algebraic[12]/states[2]), constants[30])))
    algebraic[13] = constants[10]+(constants[51]/2.00000)*log(algebraic[12]/states[2], 10)
    algebraic[30] = constants[25]-states[3]
    algebraic[32] = constants[11]+(constants[51]/2.00000)*log(algebraic[30]/states[3], 10)
    algebraic[35] = algebraic[32]-(algebraic[13]+constants[4]*(4.00000/2.00000))
    algebraic[36] = constants[31]*algebraic[35]
    rates[2] = (algebraic[34]-algebraic[36])*(constants[0]/constants[9])
    algebraic[37] = algebraic[29]-(algebraic[32]+constants[4]*((4.00000-2.00000*algebraic[11])/2.00000))
    algebraic[38] = constants[32]*algebraic[37]
    rates[3] = constants[0]*(algebraic[36]-algebraic[38])
    algebraic[39] = constants[33]*states[12]*states[4]*(1.00000/(1.00000+constants[34]/states[5]))
    rates[5] = -algebraic[39]
    rates[4] = (algebraic[38]+algebraic[39]*2.00000)*constants[0]*2.00000
    algebraic[14] = constants[17]-states[6]
    algebraic[40] = constants[36]/(constants[3]+constants[51]*log(1.00000e+06*(states[6]/(algebraic[14]*states[10])), 10))
    algebraic[41] = constants[14]*constants[4]-algebraic[40]
    algebraic[42] = power(10.0000, algebraic[41]/constants[51])
    algebraic[43] = constants[35]*((algebraic[42]-1.00000)/(algebraic[42]+1.00000))
    algebraic[10] = 0.650000*algebraic[8]
    algebraic[15] = algebraic[14]/(1.00000+constants[16]/constants[15])
    algebraic[16] = states[6]/(1.00000+constants[16]/constants[18])
    algebraic[18] = states[7]/(1.00000+constants[20]/constants[19])
    algebraic[21] = states[8]/(1.00000+constants[20]/constants[21])
    algebraic[44] = constants[37]*(algebraic[18]/(algebraic[18]+algebraic[21]*(power(10.0000, -algebraic[10]/constants[51])))-algebraic[15]/(algebraic[15]+algebraic[16]*(power(10.0000, -algebraic[10]/constants[51]))))*(1.00000/(1.00000+constants[38]/algebraic[18]))
    rates[6] = (algebraic[43]-algebraic[44])*constants[0]
    algebraic[5] = (power(10.0000, -algebraic[4])-power(10.0000, -algebraic[4]-constants[8]))/constants[8]
    algebraic[6] = constants[5]/algebraic[5]
    algebraic[26] = states[10]/(1.00000+power(10.0000, algebraic[4]-constants[7]))
    algebraic[27] = states[11]/(1.00000+power(10.0000, algebraic[0]-constants[7]))
    algebraic[47] = constants[45]*(states[0]*algebraic[27]-states[1]*algebraic[26])
    rates[1] = ((((4.00000-2.00000*algebraic[11])*algebraic[38]+4.00000*algebraic[36])-(2.00000*(2.00000+2.00000*algebraic[11])*algebraic[39]+constants[14]*algebraic[43]+algebraic[11]*algebraic[44]+(1.00000-algebraic[11])*algebraic[47]+constants[52]))*constants[0])/algebraic[6]
    rates[10] = (algebraic[47]-algebraic[43])*constants[0]
    algebraic[45] = constants[40]*(1.00000/(1.00000+constants[39]/states[8]))
    rates[11] = algebraic[45]-algebraic[47]
    algebraic[24] = constants[23]-states[9]
    algebraic[48] = constants[46]*states[7]*states[9]*states[0]-constants[47]*states[8]*algebraic[24]
    algebraic[20] = states[7]-algebraic[18]
    algebraic[22] = states[8]-algebraic[21]
    algebraic[23] = constants[22]-(states[8]+states[7])
    algebraic[46] = constants[41]*algebraic[20]*algebraic[18]-constants[42]*algebraic[22]*algebraic[23]
    rates[7] = algebraic[45]-(algebraic[44]+2.00000*algebraic[46]+algebraic[48])
    rates[8] = (algebraic[44]+algebraic[46]+algebraic[48])-algebraic[45]
    rates[9] = -algebraic[48]
    algebraic[2] = (power(10.0000, -algebraic[0])-power(10.0000, -algebraic[0]-constants[8]))/constants[8]
    algebraic[3] = constants[6]/algebraic[2]
    algebraic[49] = constants[49]*(constants[48]-algebraic[0])
    rates[0] = ((2.00000*(2.00000+2.00000*algebraic[11])*algebraic[39]+(4.00000-2.00000*algebraic[11])*algebraic[38]+4.00000*algebraic[36])-(constants[14]*algebraic[43]+algebraic[11]*algebraic[44]+(1.00000-algebraic[11])*algebraic[47]+constants[52]+algebraic[48]+algebraic[49]))/algebraic[3]
    return(rates)

def computeAlgebraic(constants, states, voi):
    algebraic = array([[0.0] * len(voi)] * sizeAlgebraic)
    states = array(states)
    voi = array(voi)
    algebraic[0] = -log(states[0]/1.00000e+06, 10)
    algebraic[4] = -log(states[1]/1.00000e+06, 10)
    algebraic[7] = constants[51]*(algebraic[4]-algebraic[0])
    algebraic[8] = -(constants[4]-algebraic[7])
    algebraic[11] = algebraic[8]/constants[4]
    algebraic[28] = constants[24]-states[4]
    algebraic[29] = constants[12]+constants[51]*log(algebraic[28]/states[4], 10)
    algebraic[31] = algebraic[29]+constants[4]*((2.00000+2.00000*algebraic[11])/2.00000)
    algebraic[33] = power(10.0000, (algebraic[31]-constants[26])/constants[51])
    algebraic[12] = constants[13]-states[2]
    algebraic[34] = constants[28]*(1.00000/(power(1.00000+constants[29]/(algebraic[12]/states[2]), constants[30])))
    algebraic[13] = constants[10]+(constants[51]/2.00000)*log(algebraic[12]/states[2], 10)
    algebraic[30] = constants[25]-states[3]
    algebraic[32] = constants[11]+(constants[51]/2.00000)*log(algebraic[30]/states[3], 10)
    algebraic[35] = algebraic[32]-(algebraic[13]+constants[4]*(4.00000/2.00000))
    algebraic[36] = constants[31]*algebraic[35]
    algebraic[37] = algebraic[29]-(algebraic[32]+constants[4]*((4.00000-2.00000*algebraic[11])/2.00000))
    algebraic[38] = constants[32]*algebraic[37]
    algebraic[39] = constants[33]*states[12]*states[4]*(1.00000/(1.00000+constants[34]/states[5]))
    algebraic[14] = constants[17]-states[6]
    algebraic[40] = constants[36]/(constants[3]+constants[51]*log(1.00000e+06*(states[6]/(algebraic[14]*states[10])), 10))
    algebraic[41] = constants[14]*constants[4]-algebraic[40]
    algebraic[42] = power(10.0000, algebraic[41]/constants[51])
    algebraic[43] = constants[35]*((algebraic[42]-1.00000)/(algebraic[42]+1.00000))
    algebraic[10] = 0.650000*algebraic[8]
    algebraic[15] = algebraic[14]/(1.00000+constants[16]/constants[15])
    algebraic[16] = states[6]/(1.00000+constants[16]/constants[18])
    algebraic[18] = states[7]/(1.00000+constants[20]/constants[19])
    algebraic[21] = states[8]/(1.00000+constants[20]/constants[21])
    algebraic[44] = constants[37]*(algebraic[18]/(algebraic[18]+algebraic[21]*(power(10.0000, -algebraic[10]/constants[51])))-algebraic[15]/(algebraic[15]+algebraic[16]*(power(10.0000, -algebraic[10]/constants[51]))))*(1.00000/(1.00000+constants[38]/algebraic[18]))
    algebraic[5] = (power(10.0000, -algebraic[4])-power(10.0000, -algebraic[4]-constants[8]))/constants[8]
    algebraic[6] = constants[5]/algebraic[5]
    algebraic[26] = states[10]/(1.00000+power(10.0000, algebraic[4]-constants[7]))
    algebraic[27] = states[11]/(1.00000+power(10.0000, algebraic[0]-constants[7]))
    algebraic[47] = constants[45]*(states[0]*algebraic[27]-states[1]*algebraic[26])
    algebraic[45] = constants[40]*(1.00000/(1.00000+constants[39]/states[8]))
    algebraic[24] = constants[23]-states[9]
    algebraic[48] = constants[46]*states[7]*states[9]*states[0]-constants[47]*states[8]*algebraic[24]
    algebraic[20] = states[7]-algebraic[18]
    algebraic[22] = states[8]-algebraic[21]
    algebraic[23] = constants[22]-(states[8]+states[7])
    algebraic[46] = constants[41]*algebraic[20]*algebraic[18]-constants[42]*algebraic[22]*algebraic[23]
    algebraic[2] = (power(10.0000, -algebraic[0])-power(10.0000, -algebraic[0]-constants[8]))/constants[8]
    algebraic[3] = constants[6]/algebraic[2]
    algebraic[49] = constants[49]*(constants[48]-algebraic[0])
    algebraic[1] = constants[27]-states[12]
    algebraic[9] = -0.350000*algebraic[8]
    algebraic[17] = algebraic[14]-algebraic[15]
    algebraic[19] = states[6]-algebraic[16]
    algebraic[25] = states[9]+states[8]*3.00000+states[7]*2.00000+algebraic[23]+states[11]+(states[6]*3.00000+algebraic[14]*2.00000+states[10])/constants[0]
    return algebraic

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)