for d in data.split_periodic(11000, adjust=True, closed_intervals=False): d = d.trim_left(10000, adjust=True) act_gate = d['ito.g'] output = output + [max(act_gate, key=abs)] norm = max(output) try: for i in range(len(output)): output[i] /= norm except: output = [float('inf'),]*len(output) return output wang_act = Experiment( dataset=wang_act_dataset, protocol=wang_act_protocol, conditions=wang_conditions, sum_stats=wang_act_sum_stats, description=wang_act_desc, Q10=None, Q10_factor=0.) # # Inactivation [Wang1993] # wang_inact_desc = """ Steady-state inactivation curve for ito in human atrial myocytes [Wang1993] cf Fig 2c. Voltage-dependent inactivation was assessed with the use of a two-pulse protocol with a 1000 ms prepulse to voltages between -80 and +40 mV, followed by a 1000 ms test pulse to +60 mV.
variances_act = [sd_**2 for sd_ in sd_act] mewes_act_dataset = np.asarray([vsteps_act, act, variances_act]) mewes_act_protocol = myokit.pacing.steptrain(vsteps_act, -40, 10000, 450) mewes_conditions = { 'phys.T': 295.15, # K 'ca_conc.Ca_o': 1.8 # mM } def mewes_act_sum_stats(data): output = [] for d in data.split_periodic(10450, adjust=True, closed_intervals=False): d = d.trim_left(10000, adjust=True) act_gate = d['ical.g'] output = output + [max(act_gate, key=abs)] norm = max(output) for i in range(len(output)): output[i] /= norm return output mewes_act = Experiment(dataset=mewes_act_dataset, protocol=mewes_act_protocol, conditions=mewes_conditions, sum_stats=mewes_act_sum_stats, description=mewes_act_desc, Q10=None, Q10_factor=0.)
def dias_iv_sum_stats(data): return dias_iv_tau_sum_stats(data, ss=True, tau=False) def dias_taua_sum_stats(data): return dias_iv_tau_sum_stats(data, ss=False, taua=True, taui=False) def dias_taui_sum_stats(data): return dias_iv_tau_sum_stats(data, ss=False, taua=False, taui=True) dias_iv = Experiment(dataset=dias_iv_dataset, protocol=dias_iv_protocol, conditions=dias_conditions, sum_stats=dias_iv_sum_stats, description=dias_iv_desc, Q10=Q10_cond, Q10_factor=1) dias_tau_act = Experiment(dataset=dias_taua_dataset, protocol=dias_iv_protocol, conditions=dias_conditions, sum_stats=dias_taui_sum_stats, description=dias_iv_desc, Q10=Q10_tau, Q10_factor=-1) dias_tau_inact = Experiment(dataset=dias_taui_dataset, protocol=dias_iv_protocol, conditions=dias_conditions, sum_stats=dias_taui_sum_stats, description=dias_iv_desc,
} def dias_iv_sum_stats(data): output = [] for d in data.split_periodic(5100, adjust=True): d = d.trim(5000, 5100, adjust=True) current = d['ina.i_Na'] index = np.argmax(np.abs(current)) output = output + [current[index] / max_observed_peak] return output dias2014_iv = Experiment(dataset=dias_iv_dataset, protocol=dias_iv_protocol, conditions=dias_conditions, sum_stats=dias_iv_sum_stats, description=dias_iv_description) ### Inactivation nakajima_desc = """Inactivation curve from Nakajima 2009. Measurements taken at room temperature so no adjustment. """ vsteps_inact, inact, sd_inact = data.Inact_Nakajima() variances_inact = [sd**2 for sd in sd_inact] nakajima_inact_dataset = np.asarray([vsteps_inact, inact, variances_inact]) nakajima_inact_protocol = availability_linear(-130, -20, 10, -120, -20, 5000, 500, 0, 100) nakajima_conditions = { 'membrane.Na_o': 145e3,
def nguyen_iv_sum_stats(data): output = [] for d in data.split_periodic(5300, adjust=True): d = d.trim(5000, 5300, adjust=True) current = d['icat.i_CaT'] index = np.argmax(np.abs(current)) output = output + [current[index] / max_iv_peak] return output nguyen_iv = Experiment(dataset=nguyen_iv_dataset, protocol=nguyen_iv_protocol, conditions=nguyen_conditions, sum_stats=nguyen_iv_sum_stats, description=nguyen_iv_desc, Q10=Q10_cond, Q10_factor=1) # # Steady-state inactivation [Nguyen2013] # nguyen_inact_desc = """Inactivation curve for icat from Nguyen 2013 Fig 5E. Recordings at room temperature. """ vsteps_inact, inact, sd_inact = data.Inact_Nguyen() variances_inact = [sd**2 for sd in sd_inact] nguyen_inact_dataset = np.asarray([vsteps_inact, inact, variances_inact])
} # K def sakakibara_iv_sum_stats(data): output = [] for d in data.split_periodic(11000, adjust=True): d = d.trim_left(10000, adjust=True) current = d['ina.i_Na'] output = output + [max(current, key=abs)] return output sakakibara_iv = Experiment(dataset=sakakibara_iv_dataset, protocol=sakakibara_iv_protocol, conditions=sakakibara_conditions, sum_stats=sakakibara_iv_sum_stats, description=sakakibara_iv_desc, Q10=Q10_cond, Q10_factor=1) # # IV curves for varying extracellular Sodium [Sakakibara1992] # sakakibara_iv_Nao2_desc = """ describes the protocol used to measure the differents IV-curves in the Sakakibara Paper (figure 3A) this protocol is for measuring the curve with Nao = 2mM page 5 of the paper : Test pulses were applied at 0.1 Hz """ Na_o = 2
d = d.trim_left(10000, adjust=True) current = d['ical.i_CaL'] peak = max(current, key=abs) ss = current[-1] try: output = output + [1 - ss / peak] except: output = output + [float('inf')] return output sun_inact_kin = Experiment( dataset=[sun_inact_kin_tf_dataset, sun_inact_kin_ts_dataset], protocol=sun_inact_kin_protocol, conditions=sun_conditions, sum_stats=sun_inact_kin_sum_stats, description=sun_inact_kin_desc, Q10=Q10_tau_inact, Q10_factor=-1) sun_inact_kin_fast = Experiment(dataset=sun_inact_kin_tf_dataset, protocol=sun_inact_kin_protocol, conditions=sun_conditions, sum_stats=sun_inact_kin_sum_stats_tf, description=sun_inact_kin_desc, Q10=Q10_tau_inact, Q10_factor=-1) sun_inact_kin_slow = Experiment(dataset=sun_inact_kin_ts_dataset, protocol=sun_inact_kin_protocol, conditions=sun_conditions,
'phys.T': 306.15, # K 'k_conc.K_i': 140, # mM 'k_conc.K_o': 5.4 } def firek_inact_sum_stats(data): output = [] for d in data.split_periodic(20800, adjust=True, closed_intervals=False): d = d.trim_left(20400, adjust=True) inact_gate = d['ito.g'] output = output + [max(inact_gate, key=abs)] norm = max(output) try: for i in range(len(output)): output[i] /= norm except: output = [ float('inf'), ] * len(output) return output firek_inact = Experiment(dataset=firek_inact_dataset, protocol=firek_inact_protocol, conditions=firek_conditions, sum_stats=firek_inact_sum_stats, description=firek_inact_desc, Q10=None, Q10_factor=0.)
toyoda_conditions = {'extra.K_o': 5.4e3, 'potassium.K_i': 130e3, 'phys.T': 308} def toyoda_iv_sum_stats(data): output = [] for d in data.split_periodic(11000, adjust=True): d = d.trim(5000, 6000, adjust=True) output = output + [d['ikr.i_Kr'][-1]] # / max_observed_peak_iv] return output toyoda_iv = Experiment(dataset=toyoda_iv_dataset, protocol=toyoda_iv_protocol, conditions=toyoda_conditions, sum_stats=toyoda_iv_sum_stats, description=toyoda_iv_desc, Q10=Q10_cond, Q10_factor=1) # # Activation kinetics [Toyoda2010] # toyoda_taua_desc = """Activation kinetics Toyoda 2010 (Fig 3C). Assessed by envelope-of-tails protocol. Series of depolarising steps of varying duration with single exponential fit to peak tail current elicited upon repolarisation to holding potential. Data recorded at 308K. """
# SUMMARY STATISTICS def Li_iv_80_sum_stats(data): output = [] for d in data.split_periodic(tperiod_iv_Li, adjust=True): d = d.trim_left(tpreMeasuring_iv_Li, adjust=True) current = d['i_caL.i_Ca_L'][:-1] # the last value is sometimes a nan # (because V =0 at the end of the simulation and that I in nygren model is not defined for V = 0) output = output + [max(current, key=abs) - current[-1]] return output # Experiment Li_iv_80 = Experiment(name=Li_iv_80_name, dataset=Li_iv_80_dataset, protocol=Li_iv_80_protocol, conditions=Li_conditions, sum_stats=Li_iv_80_sum_stats, description=Li_iv_80_desc, Q10=Q10_cond, Q10_factor=1) ####################################################################################################################### ### IV curve - Li 1997 Li_iv_60_name = "IV HP = -60mV" Li_iv_60_desc = """ describes the protocol used to measure the IV peak-current curve in the Li Paper figure 1C page 2 of the paper : I-V relations of Ica were determined using 300-ms depolarizing steps every 10s from HP of -80,-60, and -40 mV The magnitude was measured as the difference between the peak inward current and the steady state current at the end of the depolarizing step protocol used in figure 1C: single test pulse at a frequency of 0.1Hz : every 10s, the voltage step occurs. """
output_inact = output_inact + [float('inf')] return output_act + output_inact def courtemanche_act_kin_sum_stats(data): return courtemanche_kin_sum_stats(data, act=True, inact=False) def courtemanche_inact_kin_sum_stats(data): return courtemanche_kin_sum_stats(data, act=False, inact=True) courtemanche_kin = Experiment( dataset=[courtemanche_act_kin_dataset, courtemanche_inact_kin_dataset], protocol=courtemanche_kin_protocol, conditions=wang_conditions, sum_stats=courtemanche_kin_sum_stats, description=courtemanche_kin_desc, Q10=Q10_tau, Q10_factor=-1) courtemanche_act_kin = Experiment(dataset=courtemanche_act_kin_dataset, protocol=courtemanche_kin_protocol, conditions=wang_conditions, sum_stats=courtemanche_act_kin_sum_stats, description=courtemanche_kin_desc, Q10=Q10_tau, Q10_factor=-1) courtemanche_inact_kin = Experiment(dataset=courtemanche_inact_kin_dataset, protocol=courtemanche_kin_protocol, conditions=wang_conditions, sum_stats=courtemanche_inact_kin_sum_stats, description=courtemanche_kin_desc,
} def lu_iv_sum_stats(data): output = [] for d in data.split_periodic(5330, adjust=True): d = d.trim(5030, 5330, adjust=True) peak_curr = max(d['ikss.i_Kss'], key=abs) output = output + [peak_curr] return output lu_iv = Experiment(dataset=lu_iv_dataset, protocol=lu_iv_protocol, conditions=lu_conditions, sum_stats=lu_iv_sum_stats, description=lu_iv_desc, Q10=Q10_cond, Q10_factor=1) # # IV curve [Yang2005] # yang_iv_desc = """Peak, steady-state current density and inactivation time constants at voltage steps for 4-AP sensitive currents in HL-1 from Yang 2005 Figure 8B. Assuming steadystate current is ikss. Measurements taken at room temperature. """