- Author:
- Shelley Fong <sfon036@UoA.auckland.ac.nz>
- Date:
- 2024-09-27 09:52:37+12:00
- Desc:
- init
- Permanent Source URI:
- https://models.cellml.org/workspace/702/rawfile/841bbcd6641a430406471e20e4c7466aaea97112/fig4_CaL.py
import os
import matplotlib
matplotlib.use('agg')
import numpy as np
import matplotlib.pyplot as plt
import opencor as opencor
import timeit
start = timeit.default_timer()
def load_sedml(filename):
return opencor.open_simulation(filename)
start, stop, step = -100.1, 50.1, 2#2
Vm_plot = np.arange(start, stop + step, step)
Vm_plot = Vm_plot.reshape((1, Vm_plot.shape[0]))
file = load_sedml("Current_Ica.sedml")
def run_sim1(Vm_step, protocol, d_0, d_1, d_2, d_5, d_6, f_1, f_2, f_5, f_6, tau_d_const, tau_f_const):
Y = np.array((-70, 0.3, 0, 0, 1, 1)).reshape(6, 1)
period = [3000, 4000, 1000]
step1 = -40
stepf = -40
if protocol == 1: #Ma
period = [1000, 3000, 100, 100]
step1 = -80 #mV
step2 = -50
stepf = -50 #mV
elif protocol == 2: #Es-Salah_lamoureaux
period = [1000, 3000, 125, 100]
step1 = -80 # mV
step2 = -50
stepf = -50
else: #Veerman
period = [500, 500, 300, 100]
step1 = -80 # mV
step2 = -80
stepf = -80
col1 = step1 * np.ones(Vm_step.T.shape)
col2 = step2 * np.ones(Vm_step.T.shape)
col3 = Vm_step.T
col4 = stepf * np.ones(Vm_step.T.shape)
Vm_mat = np.hstack((col1, col2, col3, col4))
Time = sum(period) * np.ones((sum(period) * 100, len(Vm_step.T)))
ICaL = 0.01 * np.ones((sum(period) * 100, len(Vm_step.T)))
IV_cal = np.zeros(Vm_step.T.shape)
# sedml file
data = file.data()
x_act = np.zeros(Vm_step.T.shape)
x_inact = np.zeros(Vm_step.T.shape)
x_fca_inact = np.zeros(Vm_step.T.shape)
tau_act = np.zeros(Vm_step.T.shape)
tau_inact = np.zeros(Vm_step.T.shape)
tau_fca = np.zeros(Vm_step.T.shape)
for j in range(len(Vm_step.T)):
print(j)
file.reset(True)
file.clear_results()
if protocol == 1:
data.constants()["Current_IcaL/Ki"] = 0 # Ma
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 5
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 5
elif protocol == 2:
data.constants()["Current_IcaL/Ki"] = 0 # Es Salah
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 5
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 5
elif protocol == 4:
data.constants()["Current_IcaL/Ki"] = 0
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 0
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 2.5
else:
data.constants()["Current_IcaL/Ki"] = 0 # Veerman
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 0
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 1.8
data.constants()["Current_IcaL/d_0"] = d_0
data.constants()["Current_IcaL/d_1"] = d_1
data.constants()["Current_IcaL/d_2"] = d_2
data.constants()["Current_IcaL/d_5"] = d_5
data.constants()["Current_IcaL/d_6"] = d_6
data.constants()["Current_IcaL/f_1"] = f_1
data.constants()["Current_IcaL/f_2"] = f_2
data.constants()["Current_IcaL/f_5"] = f_5
data.constants()["Current_IcaL/f_6"] = f_6
data.constants()["Current_IcaL/tau_d_const"] = tau_d_const
data.constants()["Current_IcaL/tau_f_const"] = tau_f_const
# for v in Vm_step:
data.states()["Current_IcaL/v"] = Vm_step.T[j]
data.set_starting_point(0)
data.set_ending_point(10)
data.set_point_interval(10)
file.run()
ds = file.results().data_store()
x_inf_act = ds.voi_and_variables()["Current_IcaL/x_ca_inf_act"].values()
x_inf_inact = ds.voi_and_variables()["Current_IcaL/x_ca_inf_inact"].values()
x_fca_inf_inact = ds.voi_and_variables()["Current_IcaL/x_fca_inf_inact"].values()
tau_ca_act = ds.voi_and_variables()["Current_IcaL/tau_ca_act"].values()
tau_ca_inact = ds.voi_and_variables()["Current_IcaL/tau_ca_inact"].values()
tau_fca_inact = ds.voi_and_variables()["Current_IcaL/tau_fca"].values()
x_act[j] = x_inf_act[-1]
x_inact[j] = x_inf_inact[-1]
x_fca_inact[j] = x_fca_inf_inact[-1]
tau_act[j] = tau_ca_act[-1]
tau_inact[j] = tau_ca_inact[-1]
tau_fca[j] = tau_fca_inact[-1]
Y_init = Y.flatten()
for i in range(len(period)):
Y_init[0] = Vm_mat[j, i].T
timespan = [sum(period[0:(i)]), sum(period[0:i+1])]
# file = load_sedml(filename)
file.reset(True)
file.clear_results()
if protocol == 1:
data.constants()["Current_IcaL/Ki"] = 0 #Ma
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 5
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 5
elif protocol == 2:
data.constants()["Current_IcaL/Ki"] = 0 #Es Salah
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 5
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 5
elif protocol == 4:
data.constants()["Current_IcaL/Ki"] = 0
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 0
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 2.5
else:
data.constants()["Current_IcaL/Ki"] = 0 #Veerman
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 0
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 1.8
data.constants()["Current_IcaL/d_0"] = d_0
data.constants()["Current_IcaL/d_1"] = d_1
data.constants()["Current_IcaL/d_2"] = d_2
data.constants()["Current_IcaL/d_5"] = d_5
data.constants()["Current_IcaL/d_6"] = d_6
data.constants()["Current_IcaL/f_1"] = f_1
data.constants()["Current_IcaL/f_2"] = f_2
data.constants()["Current_IcaL/f_5"] = f_5
data.constants()["Current_IcaL/f_6"] = f_6
data.constants()["Current_IcaL/tau_d_const"] = tau_d_const
data.constants()["Current_IcaL/tau_f_const"] = tau_f_const
# data.constants()["main/k_new"] = k_new
data.states()["Current_IcaL/v"] = Y_init[0]
data.states()["Current_IcaL/ca_SR"] = Y_init[1]
data.states()["Current_IcaL/ca_i"] = Y_init[2]
data.states()["Current_IcaL/X_ca_act"] = Y_init[3]
data.states()["Current_IcaL/X_ca_inact"] = Y_init[4]
data.states()["Current_IcaL/X_fca_inact"] = Y_init[5]
data.set_starting_point(timespan[0])
data.set_ending_point(timespan[1])
data.set_point_interval(1)
file.run()
ds = file.results().data_store()
dv = ds.voi_and_variables()["Current_IcaL/v"].values()
dca_SR = ds.voi_and_variables()["Current_IcaL/ca_SR"].values()
dca_i = ds.voi_and_variables()["Current_IcaL/ca_i"].values()
dX_ca_act = ds.voi_and_variables()["Current_IcaL/X_ca_act"].values()
dX_ca_inact = ds.voi_and_variables()["Current_IcaL/X_ca_inact"].values()
dX_fca_inact = ds.voi_and_variables()["Current_IcaL/X_fca_inact"].values()
Time_hold = (ds.voi_and_variables()["Current_IcaL/t"].values()).T
Time_hold = Time_hold.reshape(Time_hold.shape[0], 1)
results = np.stack((dv, dca_SR, dca_i, dX_ca_act, dX_ca_inact, dX_fca_inact))
values_hold = results.T
Y_init = values_hold[-1, :]
ICaL_hold = np.zeros(Time_hold.shape)
for k in range(0,80):
timespan1 = [0,80]
# file.reset(True)
# file.clear_results()
if protocol == 1:
data.constants()["Current_IcaL/Ki"] = 0 # Ma
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 5
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 5
elif protocol == 2:
data.constants()["Current_IcaL/Ki"] = 0 # Es Salah
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 5
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 5
elif protocol == 4:
data.constants()["Current_IcaL/Ki"] = 0
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 0
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 2.5
else:
data.constants()["Current_IcaL/Ki"] = 0 # Veerman
data.constants()["Current_IcaL/Ko"] = 0
data.constants()["Current_IcaL/Na_i"] = 0
data.constants()["Current_IcaL/Nao"] = 0
data.constants()["Current_IcaL/Cao"] = 1.8
data.constants()["Current_IcaL/d_0"] = d_0
data.constants()["Current_IcaL/d_1"] = d_1
data.constants()["Current_IcaL/d_2"] = d_2
data.constants()["Current_IcaL/d_5"] = d_5
data.constants()["Current_IcaL/d_6"] = d_6
data.constants()["Current_IcaL/f_1"] = f_1
data.constants()["Current_IcaL/f_2"] = f_2
data.constants()["Current_IcaL/f_5"] = f_5
data.constants()["Current_IcaL/f_6"] = f_6
data.constants()["Current_IcaL/tau_d_const"] = tau_d_const
data.constants()["Current_IcaL/tau_f_const"] = tau_f_const
# data.constants()["main/k_new"] = k_new
data.states()["Current_IcaL/v"] = values_hold[k][0]
data.states()["Current_IcaL/ca_SR"] = values_hold[k][1]
data.states()["Current_IcaL/ca_i"] = values_hold[k][2]
data.states()["Current_IcaL/X_ca_act"] = values_hold[k][3]
data.states()["Current_IcaL/X_ca_inact"] = values_hold[k][4]
data.states()["Current_IcaL/X_fca_inact"] = values_hold[k][5]
data.set_starting_point(timespan1[0])
data.set_ending_point(timespan1[1])
data.set_point_interval(80)
file.run()
ds = file.results().data_store()
i_CaL = ds.voi_and_variables()["Current_IcaL/i_CaL"].values()
ICaL_hold[k] = i_CaL[0]
if i == 0:
Time_j = Time_hold
i_CaL_j = ICaL_hold
else:
Time_j = np.vstack((Time_j, Time_hold))
i_CaL_j = np.vstack((i_CaL_j, ICaL_hold))
if i == 2:
start = 30
index = np.count_nonzero((np.array(np.max(abs(ICaL_hold[start:-1])))))
IV_cal[j] = ICaL_hold[index+start-1]
return IV_cal, x_act, x_inact, x_fca_inact, tau_act, tau_inact, tau_fca
if __name__ == '__main__':
plt.figure(figsize=(15, 13))
d_0_list = [0.19016464505208927, 0.38010243347999983, 0.484048813248, 0.17779487373692016, 0.30802769137925234]
d_1_list = [7.724718062981113, 14.567438770685602, 8.770648120828913, 15.560795677650413, 12.966294189721642]
d_2_list = [6.388825030309134, 7.501436625497612, 7.8748150063959255, 5.861186262240001, 7.07914596471118]
d_5_list = [0.08803087507239495, 0.032552967698800464, 0.062165144462064205, 0.04001013436000526,
0.044909415506956644]
d_6_list = [-6.265773108811118, -7.305350518436171, - 7.6680726347258314, - 5.756217954563908, - 6.909880369241971]
f_1_list = [0.001644383040759749, 3.454960428030549E-4, 5.925134493322452E-4, 5.997599860362688E-4,
5.125898260571896E-4]
f_2_list = [-82.46034376474563, -43.41688999393955, - 52.77826478681527, - 52.32198132085614, - 49.50571203387032]
f_5_list = [818.2069824654249, 1580.8554165474573, 729.0226806467049, 3483.7555733487948, 1931.2112235143188]
f_6_list = [4.35226624639966, 6.131075895743708, 6.1849082640235915, 4.874098339328655, 5.730027499698651]
tau_d_const_list = [1.736167780874709, 1.6122826510533983, 1.6664595173798702, 1.6959986720577191,
1.6582469468303291]
tau_f_const_list = [97.74237390031138, 99.52320589734498, 97.14763412621564, 104.71683748974891, 100.46255917110318]
plt.subplot(2, 2, 1)
# protocol = 1
# ICaL_IV1 = run_sim1(Vm_plot, protocol, d_0_list[0], d_1_list[0], d_2_list[0], d_5_list[0], d_6_list[0], f_1_list[0],
# f_2_list[0], f_5_list[0], f_6_list[0],
# tau_d_const_list[0], tau_f_const_list[0])
# plt.plot(Vm_plot[0], ICaL_IV1[1], color='blue', label='Ma', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV1[2], color='blue', linewidth=4)
# protocol = 3
# ICaL_IV2 = run_sim1(Vm_plot, protocol, d_0_list[1], d_1_list[1], d_2_list[1], d_5_list[1], d_6_list[1], f_1_list[1],
# f_2_list[1], f_5_list[1], f_6_list[1],
# tau_d_const_list[1], tau_f_const_list[1])
# plt.plot(Vm_plot[0], ICaL_IV2[1], color='orangered', label='Veerman1', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV2[2], color='orangered', linewidth=4)
# protocol = 3
# ICaL_IV3 = run_sim1(Vm_plot, protocol, d_0_list[2], d_1_list[2], d_2_list[2], d_5_list[2], d_6_list[2], f_1_list[2],
# f_2_list[2], f_5_list[2], f_6_list[2],
# tau_d_const_list[2], tau_f_const_list[2])
# plt.plot(Vm_plot[0], ICaL_IV3[1], color='purple', label='Veerman2', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV3[2], color='purple', linewidth=4)
# protocol = 2
# ICaL_IV4 = run_sim1(Vm_plot, protocol, d_0_list[3], d_1_list[3], d_2_list[3], d_5_list[3], d_6_list[3], f_1_list[3],
# f_2_list[3], f_5_list[3], f_6_list[3],
# tau_d_const_list[3], tau_f_const_list[3])
# plt.plot(Vm_plot[0], ICaL_IV4[1], color='green', label='EsSalah', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV4[2], color='green', linewidth=4)
protocol = 4
ICaL_IV5 = run_sim1(Vm_plot, protocol, d_0_list[4], d_1_list[4], d_2_list[4], d_5_list[4], d_6_list[4], f_1_list[4],
f_2_list[4], f_5_list[4], f_6_list[4],
tau_d_const_list[4], tau_f_const_list[4])
plt.plot(Vm_plot[0], ICaL_IV5[1], color='black', label='Baseline', linewidth=4)
plt.plot(Vm_plot[0], ICaL_IV5[2], color='black', linewidth=4)
plt.xlabel('Voltage (mV)', fontsize=18)
plt.ylabel('Normalized I$_{CaL}$', fontsize=18)
plt.tick_params(axis='both', labelsize='18')
plt.xticks(np.arange(-100, 51, 50))
plt.yticks(np.arange(0, 1.1, 0.5))
plt.xlim(-100, 50)
plt.ylim(0, 1)
plt.title('A', fontsize=18)
# plt.legend(fontsize='15')
plt.subplot(2, 2, 2)
# plt.plot(Vm_plot[0], ICaL_IV1[0].T[0], color='blue', label='Ma', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV2[0].T[0], color='orangered', label='Veerman1', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV3[0].T[0], color='purple', label='Veerman2', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV4[0].T[0], color='green', label='EsSalah', linewidth=4)
plt.plot(Vm_plot[0], ICaL_IV5[0].T[0], color='black', label='Baseline', linewidth=4)
plt.xticks(np.arange(-100, 51, 50))
plt.yticks(np.arange(-65, 21, 20))
plt.xlim(-100, 50)
plt.ylim(-70, 20)
plt.tick_params(axis='both', labelsize='18')
plt.xlabel('Voltage (mV)', size='18')
plt.ylabel('I$_{ICaL}$ (pA/pF)', size='18')
plt.title('B', fontsize=18)
plt.subplot(2, 2, 3)
# plt.plot(Vm_plot[0], ICaL_IV1[4], color='blue', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV2[4], color='orangered', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV3[4], color='purple', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV4[4], color='green', linewidth=4)
plt.plot(Vm_plot[0], ICaL_IV5[4], color='black', linewidth=4)
plt.xlabel('Voltage (mV)', fontsize=18)
plt.ylabel('Tau$_{act},I_{CaL}$ (ms)', fontsize=18)
plt.tick_params(axis='both', labelsize='18')
plt.xticks(np.arange(-100, 51, 50))
plt.yticks(np.arange(1.5, 3.6, 0.5))
plt.xlim(-100, 50)
plt.ylim(1.5, 3.5)
plt.title('C', fontsize=18)
plt.subplot(2, 2, 4)
# plt.plot(Vm_plot[0], ICaL_IV1[5], color='blue', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV2[5], color='orangered', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV3[5], color='purple', linewidth=4)
# plt.plot(Vm_plot[0], ICaL_IV4[5], color='green', linewidth=4)
plt.plot(Vm_plot[0], ICaL_IV5[5], color='black', linewidth=4)
# plt.xlabel('Voltage (mV)', fontsize=18)
# plt.ylabel('Tau$_{inact},I_{CaL}$ (ms)', fontsize=18)
# plt.tick_params(axis='both', labelsize='18')
# plt.xticks(np.arange(-100, 51, 50))
# plt.yticks(np.arange(0, 1001, 500))
# plt.xlim(-100, 50)
# plt.ylim(0, 1000)
# plt.title('D', fontsize=18)
plt.tick_params(axis='both', labelsize='18')
plt.xlabel('Voltage (mV)', size='18')
plt.ylabel('Tau$_{inact},I_{CaL}$ (ms)', size='18')
plt.title('D', fontsize=18)
plt.subplots_adjust(left=0.1,
bottom=0.1,
right=0.9,
top=0.9,
wspace=0.3,
hspace=0.3)
stop = timeit.default_timer()
print('Time: ', stop - start)
plt.savefig('figures/Figure4_CaL.png')