Location: FCU_adenylylCyclase @ 5a8d8d5ffe72 / python / FCU_adenylylCyclase_Exported_old.py

Author:
Shelley Fong <s.fong@auckland.ac.nz>
Date:
2021-10-21 13:36:57+13:00
Desc:
Write out new parameters to JSON file
Permanent Source URI:
https://models.cellml.org/workspace/705/rawfile/5a8d8d5ffe72eceebbd464e38084b3f3353ac587/python/FCU_adenylylCyclase_Exported_old.py

# Size of variable arrays:
sizeAlgebraic = 132
sizeStates = 55
sizeConstants = 121
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_algebraic[2] = "q_L_B1_init in component environment (fmol)"
    legend_algebraic[0] = "q_L_M2_init in component environment (fmol)"
    legend_algebraic[4] = "q_ATP in component environment (fmol)"
    legend_algebraic[6] = "q_cAMP in component environment (fmol)"
    legend_algebraic[8] = "q_AC in component environment (fmol)"
    legend_algebraic[10] = "q_AC_ATP in component environment (fmol)"
    legend_algebraic[12] = "q_aGs_GTP_AC in component environment (fmol)"
    legend_algebraic[14] = "q_aGs_GTP_AC_ATP in component environment (fmol)"
    legend_algebraic[16] = "q_FSK_AC in component environment (fmol)"
    legend_algebraic[18] = "q_FSK_AC_ATP in component environment (fmol)"
    legend_algebraic[20] = "q_PDE in component environment (fmol)"
    legend_algebraic[21] = "q_PDE_cAMP in component environment (fmol)"
    legend_algebraic[22] = "q_five_AMP in component environment (fmol)"
    legend_algebraic[23] = "q_IBMX in component environment (fmol)"
    legend_algebraic[24] = "q_PDEinh in component environment (fmol)"
    legend_algebraic[25] = "q_aGs_GTP in component environment (fmol)"
    legend_algebraic[27] = "q_FSK in component environment (fmol)"
    legend_algebraic[29] = "q_aGi_GTP in component environment (fmol)"
    legend_algebraic[32] = "q_ACinh in component environment (fmol)"
    legend_algebraic[26] = "q_L_B1 in component environment (fmol)"
    legend_algebraic[28] = "q_R_B1 in component environment (fmol)"
    legend_algebraic[30] = "q_Gs in component environment (fmol)"
    legend_algebraic[33] = "q_LR_B1 in component environment (fmol)"
    legend_algebraic[37] = "q_R_B1Gs in component environment (fmol)"
    legend_algebraic[40] = "q_LR_B1Gs in component environment (fmol)"
    legend_algebraic[31] = "q_L_M2 in component environment (fmol)"
    legend_algebraic[34] = "q_R_M2 in component environment (fmol)"
    legend_algebraic[36] = "q_Gi in component environment (fmol)"
    legend_algebraic[39] = "q_LR_M2 in component environment (fmol)"
    legend_algebraic[42] = "q_R_M2Gi in component environment (fmol)"
    legend_algebraic[48] = "q_LR_M2Gi in component environment (fmol)"
    legend_algebraic[43] = "q_B1d in component environment (fmol)"
    legend_algebraic[47] = "q_BARK in component environment (fmol)"
    legend_algebraic[52] = "q_LR_B1_BARK in component environment (fmol)"
    legend_algebraic[61] = "q_LR_B1Gs_BARK in component environment (fmol)"
    legend_algebraic[1] = "q_B1p in component environment (fmol)"
    legend_algebraic[3] = "q_B1tot in component environment (fmol)"
    legend_algebraic[5] = "q_PKACI in component environment (fmol)"
    legend_algebraic[7] = "q_PKACI_B1p in component environment (fmol)"
    legend_algebraic[44] = "q_beta_gamma_Gs in component environment (fmol)"
    legend_algebraic[51] = "q_aGs_GDP in component environment (fmol)"
    legend_algebraic[53] = "q_beta_gamma_Gi in component environment (fmol)"
    legend_algebraic[63] = "q_aGi_GDP in component environment (fmol)"
    legend_states[0] = "q_ATP in component cAMP (fmol)"
    legend_states[1] = "q_cAMP in component cAMP (fmol)"
    legend_states[2] = "q_AC in component cAMP (fmol)"
    legend_states[3] = "q_AC_ATP in component cAMP (fmol)"
    legend_states[4] = "q_aGs_GTP_AC in component cAMP (fmol)"
    legend_states[5] = "q_aGs_GTP_AC_ATP in component cAMP (fmol)"
    legend_states[6] = "q_FSK_AC in component cAMP (fmol)"
    legend_states[7] = "q_FSK_AC_ATP in component cAMP (fmol)"
    legend_states[8] = "q_PDE in component cAMP (fmol)"
    legend_states[9] = "q_PDE_cAMP in component cAMP (fmol)"
    legend_states[10] = "q_five_AMP in component cAMP (fmol)"
    legend_states[11] = "q_IBMX in component cAMP (fmol)"
    legend_states[12] = "q_PDEinh in component cAMP (fmol)"
    legend_states[13] = "q_aGs_GTP in component cAMP (fmol)"
    legend_states[14] = "q_FSK in component cAMP (fmol)"
    legend_states[15] = "q_aGi_GTP in component cAMP (fmol)"
    legend_states[16] = "q_ACinh in component cAMP (fmol)"
    legend_states[17] = "q_L_B1 in component LRGbinding_B1AR (fmol)"
    legend_states[18] = "q_R_B1 in component LRGbinding_B1AR (fmol)"
    legend_states[19] = "q_Gs in component LRGbinding_B1AR (fmol)"
    legend_states[20] = "q_LR_B1 in component LRGbinding_B1AR (fmol)"
    legend_states[21] = "q_R_B1Gs in component LRGbinding_B1AR (fmol)"
    legend_states[22] = "q_LR_B1Gs in component LRGbinding_B1AR (fmol)"
    legend_states[23] = "q_L_M2 in component LRGbinding_M2 (fmol)"
    legend_states[24] = "q_R_M2 in component LRGbinding_M2 (fmol)"
    legend_states[25] = "q_Gi in component LRGbinding_M2 (fmol)"
    legend_states[26] = "q_LR_M2 in component LRGbinding_M2 (fmol)"
    legend_states[27] = "q_R_M2Gi in component LRGbinding_M2 (fmol)"
    legend_states[28] = "q_LR_M2Gi in component LRGbinding_M2 (fmol)"
    legend_states[29] = "q_LR_B1 in component B1AR (fmol)"
    legend_states[30] = "q_LR_B1Gs in component B1AR (fmol)"
    legend_states[31] = "q_B1d in component B1AR (fmol)"
    legend_states[32] = "q_BARK in component B1AR (fmol)"
    legend_states[33] = "q_LR_B1_BARK in component B1AR (fmol)"
    legend_states[34] = "q_LR_B1Gs_BARK in component B1AR (fmol)"
    legend_states[35] = "q_B1p in component B1AR (fmol)"
    legend_states[36] = "q_B1tot in component B1AR (fmol)"
    legend_states[37] = "q_PKACI in component B1AR (fmol)"
    legend_states[38] = "q_PKACI_B1p in component B1AR (fmol)"
    legend_states[39] = "q_R_B1 in component GsProtein (fmol)"
    legend_states[40] = "q_Gs in component GsProtein (fmol)"
    legend_states[41] = "q_R_B1Gs in component GsProtein (fmol)"
    legend_states[42] = "q_LR_B1 in component GsProtein (fmol)"
    legend_states[43] = "q_LR_B1Gs in component GsProtein (fmol)"
    legend_states[44] = "q_aGs_GTP in component GsProtein (fmol)"
    legend_states[45] = "q_beta_gamma_Gs in component GsProtein (fmol)"
    legend_states[46] = "q_aGs_GDP in component GsProtein (fmol)"
    legend_states[47] = "q_R_M2 in component GiProtein (fmol)"
    legend_states[48] = "q_Gi in component GiProtein (fmol)"
    legend_states[49] = "q_R_M2Gi in component GiProtein (fmol)"
    legend_states[50] = "q_LR_M2 in component GiProtein (fmol)"
    legend_states[51] = "q_LR_M2Gi in component GiProtein (fmol)"
    legend_states[52] = "q_aGi_GTP in component GiProtein (fmol)"
    legend_states[53] = "q_beta_gamma_Gi in component GiProtein (fmol)"
    legend_states[54] = "q_aGi_GDP in component GiProtein (fmol)"
    legend_algebraic[118] = "v1a in component cAMP (fmol_per_sec)"
    legend_algebraic[120] = "v1b in component cAMP (fmol_per_sec)"
    legend_algebraic[122] = "v2a in component cAMP (fmol_per_sec)"
    legend_algebraic[123] = "v2b in component cAMP (fmol_per_sec)"
    legend_algebraic[124] = "v3a in component cAMP (fmol_per_sec)"
    legend_algebraic[125] = "v3b in component cAMP (fmol_per_sec)"
    legend_algebraic[126] = "v4a in component cAMP (fmol_per_sec)"
    legend_algebraic[128] = "v4b in component cAMP (fmol_per_sec)"
    legend_algebraic[130] = "v5 in component cAMP (fmol_per_sec)"
    legend_algebraic[127] = "v6 in component cAMP (fmol_per_sec)"
    legend_algebraic[129] = "v7 in component cAMP (fmol_per_sec)"
    legend_algebraic[131] = "vGiAC in component cAMP (fmol_per_sec)"
    legend_algebraic[35] = "mu_ATP in component cAMP (J_per_mol)"
    legend_algebraic[41] = "mu_AC in component cAMP (J_per_mol)"
    legend_algebraic[38] = "mu_cAMP in component cAMP (J_per_mol)"
    legend_algebraic[45] = "mu_AC_ATP in component cAMP (J_per_mol)"
    legend_algebraic[105] = "mu_FSK in component cAMP (J_per_mol)"
    legend_algebraic[58] = "mu_FSK_AC in component cAMP (J_per_mol)"
    legend_algebraic[64] = "mu_FSK_AC_ATP in component cAMP (J_per_mol)"
    legend_algebraic[100] = "mu_aGs_GTP in component cAMP (J_per_mol)"
    legend_algebraic[49] = "mu_aGs_GTP_AC in component cAMP (J_per_mol)"
    legend_algebraic[54] = "mu_aGs_GTP_AC_ATP in component cAMP (J_per_mol)"
    legend_algebraic[70] = "mu_PDE in component cAMP (J_per_mol)"
    legend_algebraic[94] = "mu_PDEinh in component cAMP (J_per_mol)"
    legend_algebraic[76] = "mu_PDE_cAMP in component cAMP (J_per_mol)"
    legend_algebraic[88] = "mu_IBMX in component cAMP (J_per_mol)"
    legend_algebraic[82] = "mu_five_AMP in component cAMP (J_per_mol)"
    legend_algebraic[110] = "mu_aGi_GTP in component cAMP (J_per_mol)"
    legend_algebraic[114] = "mu_ACinh in component cAMP (J_per_mol)"
    legend_algebraic[46] = "mu_L_B1 in component LRGbinding_B1AR (J_per_mol)"
    legend_algebraic[50] = "mu_R_B1 in component LRGbinding_B1AR (J_per_mol)"
    legend_algebraic[55] = "mu_Gs in component LRGbinding_B1AR (J_per_mol)"
    legend_algebraic[59] = "mu_LR_B1 in component LRGbinding_B1AR (J_per_mol)"
    legend_algebraic[65] = "mu_R_B1Gs in component LRGbinding_B1AR (J_per_mol)"
    legend_algebraic[71] = "mu_LR_B1Gs in component LRGbinding_B1AR (J_per_mol)"
    legend_algebraic[77] = "vsig1_B1 in component LRGbinding_B1AR (fmol_per_sec)"
    legend_algebraic[83] = "vsig2_B1 in component LRGbinding_B1AR (fmol_per_sec)"
    legend_algebraic[89] = "vsig3_B1 in component LRGbinding_B1AR (fmol_per_sec)"
    legend_algebraic[95] = "vsig4_B1 in component LRGbinding_B1AR (fmol_per_sec)"
    legend_algebraic[56] = "mu_L_M2 in component LRGbinding_M2 (J_per_mol)"
    legend_algebraic[60] = "mu_R_M2 in component LRGbinding_M2 (J_per_mol)"
    legend_algebraic[66] = "mu_Gi in component LRGbinding_M2 (J_per_mol)"
    legend_algebraic[72] = "mu_LR_M2 in component LRGbinding_M2 (J_per_mol)"
    legend_algebraic[78] = "mu_R_M2Gi in component LRGbinding_M2 (J_per_mol)"
    legend_algebraic[84] = "mu_LR_M2Gi in component LRGbinding_M2 (J_per_mol)"
    legend_algebraic[90] = "vsig1_M2 in component LRGbinding_M2 (fmol_per_sec)"
    legend_algebraic[96] = "vsig2_M2 in component LRGbinding_M2 (fmol_per_sec)"
    legend_algebraic[101] = "vsig3_M2 in component LRGbinding_M2 (fmol_per_sec)"
    legend_algebraic[106] = "vsig4_M2 in component LRGbinding_M2 (fmol_per_sec)"
    legend_algebraic[102] = "vB11 in component B1AR (fmol_per_sec)"
    legend_algebraic[107] = "vB12 in component B1AR (fmol_per_sec)"
    legend_algebraic[111] = "vB21 in component B1AR (fmol_per_sec)"
    legend_algebraic[115] = "vB22 in component B1AR (fmol_per_sec)"
    legend_algebraic[17] = "vP1 in component B1AR (fmol_per_sec)"
    legend_algebraic[19] = "vP2 in component B1AR (fmol_per_sec)"
    legend_algebraic[67] = "mu_LR_B1 in component B1AR (J_per_mol)"
    legend_algebraic[73] = "mu_LR_B1Gs in component B1AR (J_per_mol)"
    legend_algebraic[79] = "mu_B1d in component B1AR (J_per_mol)"
    legend_algebraic[85] = "mu_BARK in component B1AR (J_per_mol)"
    legend_algebraic[91] = "mu_LR_B1_BARK in component B1AR (J_per_mol)"
    legend_algebraic[97] = "mu_LR_B1Gs_BARK in component B1AR (J_per_mol)"
    legend_algebraic[9] = "mu_B1p in component B1AR (J_per_mol)"
    legend_algebraic[11] = "mu_B1tot in component B1AR (J_per_mol)"
    legend_algebraic[13] = "mu_PKACI in component B1AR (J_per_mol)"
    legend_algebraic[15] = "mu_PKACI_B1p in component B1AR (J_per_mol)"
    legend_algebraic[103] = "vact1_Gs in component GsProtein (fmol_per_sec)"
    legend_algebraic[108] = "vact2_Gs in component GsProtein (fmol_per_sec)"
    legend_algebraic[112] = "vhyd_Gs in component GsProtein (fmol_per_sec)"
    legend_algebraic[116] = "vreassoc_Gs in component GsProtein (fmol_per_sec)"
    legend_algebraic[57] = "mu_R_B1 in component GsProtein (J_per_mol)"
    legend_algebraic[62] = "mu_Gs in component GsProtein (J_per_mol)"
    legend_algebraic[68] = "mu_R_B1Gs in component GsProtein (J_per_mol)"
    legend_algebraic[74] = "mu_LR_B1 in component GsProtein (J_per_mol)"
    legend_algebraic[80] = "mu_LR_B1Gs in component GsProtein (J_per_mol)"
    legend_algebraic[86] = "mu_aGs_GTP in component GsProtein (J_per_mol)"
    legend_algebraic[92] = "mu_beta_gamma_Gs in component GsProtein (J_per_mol)"
    legend_algebraic[98] = "mu_aGs_GDP in component GsProtein (J_per_mol)"
    legend_algebraic[113] = "vact1_Gi in component GiProtein (fmol_per_sec)"
    legend_algebraic[117] = "vact2_Gi in component GiProtein (fmol_per_sec)"
    legend_algebraic[119] = "vhyd_Gi in component GiProtein (fmol_per_sec)"
    legend_algebraic[121] = "vreassoc_Gi in component GiProtein (fmol_per_sec)"
    legend_algebraic[69] = "mu_R_M2 in component GiProtein (J_per_mol)"
    legend_algebraic[75] = "mu_Gi in component GiProtein (J_per_mol)"
    legend_algebraic[81] = "mu_R_M2Gi in component GiProtein (J_per_mol)"
    legend_algebraic[87] = "mu_LR_M2 in component GiProtein (J_per_mol)"
    legend_algebraic[93] = "mu_LR_M2Gi in component GiProtein (J_per_mol)"
    legend_algebraic[99] = "mu_aGi_GTP in component GiProtein (J_per_mol)"
    legend_algebraic[104] = "mu_beta_gamma_Gi in component GiProtein (J_per_mol)"
    legend_algebraic[109] = "mu_aGi_GDP in component GiProtein (J_per_mol)"
    legend_rates[0] = "d/dt q_ATP in component cAMP (fmol)"
    legend_rates[2] = "d/dt q_AC in component cAMP (fmol)"
    legend_rates[3] = "d/dt q_AC_ATP in component cAMP (fmol)"
    legend_rates[1] = "d/dt q_cAMP in component cAMP (fmol)"
    legend_rates[14] = "d/dt q_FSK in component cAMP (fmol)"
    legend_rates[6] = "d/dt q_FSK_AC in component cAMP (fmol)"
    legend_rates[7] = "d/dt q_FSK_AC_ATP in component cAMP (fmol)"
    legend_rates[13] = "d/dt q_aGs_GTP in component cAMP (fmol)"
    legend_rates[4] = "d/dt q_aGs_GTP_AC in component cAMP (fmol)"
    legend_rates[5] = "d/dt q_aGs_GTP_AC_ATP in component cAMP (fmol)"
    legend_rates[9] = "d/dt q_PDE_cAMP in component cAMP (fmol)"
    legend_rates[8] = "d/dt q_PDE in component cAMP (fmol)"
    legend_rates[11] = "d/dt q_IBMX in component cAMP (fmol)"
    legend_rates[12] = "d/dt q_PDEinh in component cAMP (fmol)"
    legend_rates[10] = "d/dt q_five_AMP in component cAMP (fmol)"
    legend_rates[15] = "d/dt q_aGi_GTP in component cAMP (fmol)"
    legend_rates[16] = "d/dt q_ACinh in component cAMP (fmol)"
    legend_rates[17] = "d/dt q_L_B1 in component LRGbinding_B1AR (fmol)"
    legend_rates[18] = "d/dt q_R_B1 in component LRGbinding_B1AR (fmol)"
    legend_rates[19] = "d/dt q_Gs in component LRGbinding_B1AR (fmol)"
    legend_rates[20] = "d/dt q_LR_B1 in component LRGbinding_B1AR (fmol)"
    legend_rates[21] = "d/dt q_R_B1Gs in component LRGbinding_B1AR (fmol)"
    legend_rates[22] = "d/dt q_LR_B1Gs in component LRGbinding_B1AR (fmol)"
    legend_rates[23] = "d/dt q_L_M2 in component LRGbinding_M2 (fmol)"
    legend_rates[24] = "d/dt q_R_M2 in component LRGbinding_M2 (fmol)"
    legend_rates[25] = "d/dt q_Gi in component LRGbinding_M2 (fmol)"
    legend_rates[26] = "d/dt q_LR_M2 in component LRGbinding_M2 (fmol)"
    legend_rates[27] = "d/dt q_R_M2Gi in component LRGbinding_M2 (fmol)"
    legend_rates[28] = "d/dt q_LR_M2Gi in component LRGbinding_M2 (fmol)"
    legend_rates[29] = "d/dt q_LR_B1 in component B1AR (fmol)"
    legend_rates[31] = "d/dt q_B1d in component B1AR (fmol)"
    legend_rates[32] = "d/dt q_BARK in component B1AR (fmol)"
    legend_rates[33] = "d/dt q_LR_B1_BARK in component B1AR (fmol)"
    legend_rates[30] = "d/dt q_LR_B1Gs in component B1AR (fmol)"
    legend_rates[34] = "d/dt q_LR_B1Gs_BARK in component B1AR (fmol)"
    legend_rates[35] = "d/dt q_B1p in component B1AR (fmol)"
    legend_rates[36] = "d/dt q_B1tot in component B1AR (fmol)"
    legend_rates[37] = "d/dt q_PKACI in component B1AR (fmol)"
    legend_rates[38] = "d/dt q_PKACI_B1p in component B1AR (fmol)"
    legend_rates[39] = "d/dt q_R_B1 in component GsProtein (fmol)"
    legend_rates[41] = "d/dt q_R_B1Gs in component GsProtein (fmol)"
    legend_rates[40] = "d/dt q_Gs in component GsProtein (fmol)"
    legend_rates[42] = "d/dt q_LR_B1 in component GsProtein (fmol)"
    legend_rates[43] = "d/dt q_LR_B1Gs in component GsProtein (fmol)"
    legend_rates[44] = "d/dt q_aGs_GTP in component GsProtein (fmol)"
    legend_rates[45] = "d/dt q_beta_gamma_Gs in component GsProtein (fmol)"
    legend_rates[46] = "d/dt q_aGs_GDP in component GsProtein (fmol)"
    legend_rates[47] = "d/dt q_R_M2 in component GiProtein (fmol)"
    legend_rates[49] = "d/dt q_R_M2Gi in component GiProtein (fmol)"
    legend_rates[48] = "d/dt q_Gi in component GiProtein (fmol)"
    legend_rates[50] = "d/dt q_LR_M2 in component GiProtein (fmol)"
    legend_rates[51] = "d/dt q_LR_M2Gi in component GiProtein (fmol)"
    legend_rates[52] = "d/dt q_aGi_GTP in component GiProtein (fmol)"
    legend_rates[53] = "d/dt q_beta_gamma_Gi in component GiProtein (fmol)"
    legend_rates[54] = "d/dt q_aGi_GDP in component GiProtein (fmol)"
    return (legend_states, legend_algebraic, legend_voi, legend_constants)

def initConsts():
    constants = [0.0] * sizeConstants; states = [0.0] * sizeStates;
    constants[0] = 617247
    constants[1] = 0.000128875
    constants[2] = 325858
    constants[3] = 0.0879301
    constants[4] = 8.57316e+07
    constants[5] = 9.96879e-18
    constants[6] = 107140
    constants[7] = 0.412077
    constants[8] = 391.191
    constants[9] = 54621.9
    constants[10] = 1.43707e+06
    constants[11] = 3357.07
    constants[12] = 143475
    constants[13] = 52.5633
    constants[14] = 77.1867
    constants[15] = 9827.69
    constants[16] = 2.93719e+09
    constants[17] = 262659
    constants[18] = 280724
    constants[19] = 2.08729e+06
    constants[20] = 6.45993e-05
    constants[21] = 29363.3
    constants[22] = 6.45993e-05
    constants[23] = 29363.3
    constants[24] = 0.0240723
    constants[25] = 0.00231579
    constants[26] = 0.0073331
    constants[27] = 9.10152e-05
    constants[28] = 0.0344808
    constants[29] = 443.387
    constants[30] = 16.6519
    constants[31] = 0.00519263
    constants[32] = 0.100013
    constants[33] = 2927.33
    constants[34] = 0.00048728
    constants[35] = 0.00048728
    constants[36] = 2.61293
    constants[37] = 45.1131
    constants[38] = 0.5322
    constants[39] = 2.81011
    constants[40] = 0.0202285
    constants[41] = 0.291608
    constants[42] = 16.1866
    constants[43] = 0.352723
    constants[44] = 0.00048728
    constants[45] = 0.00444855
    constants[46] = 74.311
    constants[47] = 0.0148023
    constants[48] = 5.11474e-06
    constants[49] = 0.00963373
    constants[50] = 8.65927
    constants[51] = 0.356212
    constants[52] = 0.407286
    constants[53] = 0.00361468
    constants[54] = 265.938
    constants[55] = 26.7494
    constants[56] = 265.938
    constants[57] = 2.00506
    constants[58] = 0.000245905
    constants[59] = 0.000290027
    constants[60] = 1.73472
    constants[61] = 0.00131755
    constants[62] = 0.0384141
    constants[63] = 3.19126e-10
    constants[64] = 9.01813e-05
    constants[65] = 0.990003
    constants[66] = 0.990003
    constants[67] = 0.0336751
    constants[68] = 0.0336751
    constants[69] = 0.0390101
    constants[70] = 1.2076e-06
    constants[71] = 0.0290698
    constants[72] = 0.0290698
    constants[73] = 0.00206275
    constants[74] = 0.00701566
    constants[75] = 34.4
    constants[76] = 189.99905570
    constants[77] = 0.0006143333
    constants[78] = 0.0314042742
    constants[79] = 0.000614333
    constants[80] = 0.0000126667
    constants[81] = 0.0000126667
    constants[82] = 0.0000126667
    constants[83] = 0.0009519
    constants[84] = 0.00031730
    constants[85] = 0.00031730
    constants[86] = 0.0007171258
    constants[87] = 1e-13
    constants[88] = 0.0007171258
    constants[89] = 3.80E-06
    constants[90] = 1e-18
    constants[91] = 4.81E-04
    constants[92] = 1e-16
    constants[93] = 0.000219725
    constants[94] = 0.145305
    constants[95] = 1.697e-06
    constants[96] = 0.0000508778
    constants[97] = 0.0000508778
    constants[98] = 0.00072
    constants[99] = 0.00836
    constants[100] = 0
    constants[101] = 1e-16
    constants[102] = 1e-16
    constants[103] = 1e-13
    constants[104] = 0.0228
    constants[105] = 0.0000508778
    constants[106] = 0.0000508778
    constants[107] = 0
    constants[108] = 0.0000508778
    constants[109] = 0.000221209
    constants[110] = 0.008778
    constants[111] = 0.00097622
    constants[112] = 2.44948e-05
    constants[113] = 1e-16
    constants[114] = 1e-16
    states[0] = 1e-16
    states[1] = 1e-16
    states[2] = 1e-16
    states[3] = 1e-16
    states[4] = 1e-16
    states[5] = 1e-16
    states[6] = 1e-16
    states[7] = 1e-16
    states[8] = 1e-16
    states[9] = 1e-16
    states[10] = 1e-16
    states[11] = 1e-16
    states[12] = 1e-16
    states[13] = 1e-16
    states[14] = 1e-16
    states[15] = 1e-16
    states[16] = 1e-16
    states[17] = 1e-16
    states[18] = 1e-16
    states[19] = 1e-16
    states[20] = 1e-16
    states[21] = 1e-16
    states[22] = 1e-16
    states[23] = 1e-16
    states[24] = 1e-16
    states[25] = 1e-16
    states[26] = 1e-16
    states[27] = 1e-16
    states[28] = 1e-16
    states[29] = 1e-16
    states[30] = 1e-16
    states[31] = 1e-16
    states[32] = 1e-16
    states[33] = 1e-16
    states[34] = 1e-16
    states[35] = 1e-16
    states[36] = 1e-16
    states[37] = 1e-16
    states[38] = 1e-16
    states[39] = 1e-16
    states[40] = 1e-16
    states[41] = 1e-16
    states[42] = 1e-16
    states[43] = 1e-16
    states[44] = 1e-16
    states[45] = 1e-16
    states[46] = 1e-16
    states[47] = 1e-16
    states[48] = 1e-16
    states[49] = 1e-16
    states[50] = 1e-16
    states[51] = 1e-16
    states[52] = 1e-16
    states[53] = 1e-16
    states[54] = 1e-16
    constants[115] = 8.31
    constants[116] = 310
    constants[117] = 96485
    constants[118] = 38.0
    constants[119] = 34.4
    constants[120] = 34.4
    return (states, constants)

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

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

    # Construct ODE object to solve
    r = ode(computeRates)
    r.set_integrator('vode', method='bdf', atol=1e-06, rtol=1e-06, max_step=1e-7)
    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 matplotlib.pyplot as plt
    (legend_states, legend_algebraic, legend_voi, legend_constants) = createLegends()

    if False:
        plt.figure(1)
        i_s = range(17, 22)
        plt.plot(voi, states[i_s].T)
        plt.xlabel('time (s)')
        plt.legend([legend_states[i] for i in i_s], loc='best')

    modNames = ['cAMP','B1AR','M2']

    #  comp ENVIRONMENT
    i_s = {c:[] for c in modNames}
    i_s['cAMP'] = [4,6,8,10]
    i_s['B1AR'] = [2,26,28,30,33,37,40,44,51]
    i_s['M2'] = [0,31,34,36,39,42,53,63]
    for name in i_s.keys():
        ids = i_s[name]
        figure, axes = plt.subplots(nrows=3, ncols=3)
        for j in range(len(ids)):
            plt.subplot(3,3,j+1)
            plt.plot(voi[2:-1], algebraic[ids[j]][2:-1].T)
            # plt.xlabel('time (s)')
            legstr = legend_algebraic[ids[j]].split(' ')[0] + legend_algebraic[ids[j]].split('(')[-1]
            plt.title(legstr)
        plt.suptitle(name+' env')

    #  comp INDIVIDUAL
    i_s['cAMP'] = list(range(4))+[13,15,16]
    i_s['B1AR'] = list(range(17,23))
    i_s['M2'] = list(range(23,29))
    for name in i_s.keys():
        ids = i_s[name]
        figure, axes = plt.subplots(nrows=3, ncols=3)
        for j in range(len(ids)):
            plt.subplot(3,3,j+1)
            plt.plot(voi[2:-1], states[ids[j]][2:-1].T)
            legstr = legend_states[ids[j]].split(' ')[0] + legend_states[ids[j]].split('(')[-1]
            plt.title(legstr)
        plt.suptitle(name+' subcomp')
    # figure.tight_layout()

    plt.show()

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