def test_kernik_py_vs_mat(self):
        protocol = protocols.SingleActionPotentialProtocol(1800)

        baseline_model = kernik.KernikModel()
        baseline_model.generate_response(protocol)
        mat_baseline = np.loadtxt('model_data/original_baseline_3000ms.csv')
        compare_voltage_plots(baseline_model, mat_baseline)
    def test_run_comparing_experiment_raises_value_error_double_protocol(self):
        parameters = [
            ga_configs.Parameter(name='g_na', default_value=3671.2302),
            ga_configs.Parameter(name='g_f_s', default_value=30.10312),
        ]
        sap_protocol = protocols.SingleActionPotentialProtocol()
        sap_config = ga_configs.ParameterTuningConfig(
            population_size=2,
            max_generations=2,
            protocol=sap_protocol,
            tunable_parameters=parameters,
            params_lower_bound=0.5,
            params_upper_bound=1.5,
            mutate_probability=1.,
            mate_probability=0.9,
            gene_swap_probability=0.5,
            gene_mutation_probability=0.1,
            tournament_size=2)
        configs = generate_config_list()
        configs.append(sap_config)

        with self.assertRaises(ValueError) as ve:
            parameter_tuning_experiments.run_comparison_experiment(
                configs=configs, iterations=2)

        self.assertEqual('Configs do not have unique protocols.',
                         str(ve.exception))
    def test_evaluate_performance_with_combined_protocol(self):
        config = ga_configs.ParameterTuningConfig(
            population_size=2,
            max_generations=2,
            protocol=protocols.SingleActionPotentialProtocol(),
            tunable_parameters=[
                ga_configs.Parameter(name='g_b_na', default_value=0.95),
                ga_configs.Parameter(name='g_na', default_value=3671.2302)
            ],
            params_lower_bound=0.9,
            params_upper_bound=1.1,
            mutate_probability=1.,
            mate_probability=0.9,
            gene_swap_probability=0.5,
            gene_mutation_probability=0.15,
            tournament_size=2)
        single_ap_ga = parameter_tuning_genetic_algorithm.\
            ParameterTuningGeneticAlgorithm(config=config)
        single_ap_error = single_ap_ga._evaluate_performance(
            new_parameters=[0.94, 3000.])

        config.secondary_protocol = protocols.IrregularPacingProtocol(
            duration=5, stimulation_offsets=[0.1, 0.2])
        combined_protocol_ga = parameter_tuning_genetic_algorithm.\
            ParameterTuningGeneticAlgorithm(config=config)
        combined_protocol_error = combined_protocol_ga._evaluate_performance(
            new_parameters=[0.94, 3000.])

        # Combined protocol error should be larger than a single protocol error.
        self.assertGreater(combined_protocol_error, single_ap_error)
Example #4
0
 def setUp(self):
     config = ga_configs.ParameterTuningConfig(
         population_size=2,
         max_generations=2,
         protocol=protocols.SingleActionPotentialProtocol(),
         tunable_parameters=[
             ga_configs.Parameter(name='g_b_na', default_value=1.),
             ga_configs.Parameter(name='g_na', default_value=3600.)
         ],
         params_lower_bound=0.9,
         params_upper_bound=1.1,
         mate_probability=0.9,
         mutate_probability=1.,
         gene_swap_probability=0.5,
         gene_mutation_probability=0.15,
         tournament_size=2)
     self.ga_result = genetic_algorithm_results.GAResultParameterTuning(
         config=config)
     generation_one = [
         genetic_algorithm_results.ParameterTuningIndividual(
             parameters=[0.95, 3671.2302], fitness=0),
         genetic_algorithm_results.ParameterTuningIndividual(
             parameters=[0.1, 3400.0], fitness=2),
     ]
     generation_two = [
         genetic_algorithm_results.ParameterTuningIndividual(
             parameters=[0.6, 3500.0], fitness=5),
         genetic_algorithm_results.ParameterTuningIndividual(
             parameters=[0.9, 3600.0], fitness=9),
     ]
     self.ga_result.generations.append(generation_one)
     self.ga_result.generations.append(generation_two)
Example #5
0
def plot_all_in_system_of_equations(duration=10):
    model = paci_2018.PaciModel()
    model.generate_response(
        protocol=protocols.SingleActionPotentialProtocol(duration=duration))

    for i in range(len(model.y_names)):
        plt.figure()
        plt.plot([timestamp[i] for timestamp in model.full_y])
        plt.savefig('figures/before_hold_i_na_480/{}.png'.format(
            model.y_names[i]))
Example #6
0
    def test_generate_trace_SAP(self):
        protocol = protocols.SingleActionPotentialProtocol()

        baseline_model = paci_2018.PaciModel()
        baseline_model.generate_response(protocol)

        self.assertTrue(
            len(baseline_model.t) > 100, 'Paci errored in less than .4s')
        self.assertTrue(
            min(baseline_model.y_voltage) < -.01,
            'baseline Paci min is greater than .01')
        self.assertTrue(
            max(baseline_model.y_voltage) < .06,
            'baseline Paci max is greater than .06')
Example #7
0
    def test_no_ion_selective_setter(self):
        protocol = protocols.SingleActionPotentialProtocol()
        paci_baseline = paci_2018.PaciModel()
        ion_selective_scales = {'I_CaL': .4, 'I_NaCa': .4}
        paci_no_ion = paci_2018.PaciModel()

        baseline_trace = paci_baseline.generate_response(protocol)
        paci_baseline.no_ion_selective = ion_selective_scales
        baseline_no_ion_trace = paci_baseline.generate_response(
            protocol, is_no_ion_selective=True)

        tst.assert_raises(AssertionError, tst.assert_array_equal,
                          baseline_trace.y, baseline_no_ion_trace.y,
                          'generate_no_ion_trace() does not update trace')
Example #8
0
    def test_no_ion_selective_IK1_no_effect(self):
        protocol = protocols.SingleActionPotentialProtocol()
        paci_k1_increase = paci_2018.PaciModel(
            updated_parameters={'G_K1': 1.4})
        ion_selective_scales = {'I_K1': .4}
        paci_k1_no_ion = paci_2018.PaciModel(
            no_ion_selective_dict=ion_selective_scales)

        trace_ion_selective = paci_k1_increase.generate_response(protocol)
        trace_no_ion_selective = paci_k1_no_ion.generate_response(
            protocol, is_no_ion_selective=True)

        tst.assert_raises(AssertionError, tst.assert_array_equal,
                          trace_ion_selective.y, trace_no_ion_selective.y,
                          'generate_no_ion_trace() does not update trace')
Example #9
0
    def test_write_data(self):
        path_to_output = './data/paci_sap_baseline.csv'
        protocol = protocols.SingleActionPotentialProtocol()
        baseline_trace = paci_2018.generate_trace(protocol)

        write_voltage_data.save_data_to_file(baseline_trace)
        with open(path_to_output) as csv_file:
            csv_reader = csv.reader(csv_file)
            loaded_data = np.array(list(csv_reader))

        print(len(loaded_data))

        tst.assert_raises(AssertionError, tst.assert_array_equal,
                          baseline_trace.y, loaded_data[:, 1],
                          'loaded data is equal to Paci')
    def test_generate_trace_SAP(self):
        protocol = protocols.SingleActionPotentialProtocol(1800)

        baseline_model = kernik.KernikModel()
        baseline_model.generate_response(protocol)
        import seaborn as sns
        plt.plot(baseline_model.t, baseline_model.y_voltage)
        pdb.set_trace()

        self.assertTrue(
            len(baseline_model.t) > 100, 'Kernik errored in less than .4s')
        self.assertTrue(
            min(baseline_model.y_voltage) < -10,
            'baseline Kernik min is greater than -.01')
        self.assertTrue(
            max(baseline_model.y_voltage) < 60,
            'baseline Kernik max is greater than .06')
Example #11
0
def plot_voltage_currents():
    kernik_protocol = protocols.SingleActionPotentialProtocol(983)
    baseline_kernik = KernikModel()
    baseline_kernik.generate_response(kernik_protocol)

    coi = ['I_K1', 'I_Kr', 'I_Ks', 'I_CaL', 'I_Na', 'I_To']
    currents_df = get_current_data(baseline_kernik.current_response_info.currents, coi, baseline_kernik.t)

    fig = plt.figure(figsize=(10,8))
    plt.plot(baseline_kernik.t, baseline_kernik.y_voltage, label='Kernik')
    plt.axis([0, 983, -80, 40])
    ax = plt.gca()
    ax.tick_params(labelsize=18)
    ax.tick_params(axis='x', labelcolor='none')
    plt.ylabel('Voltage (mV)', fontsize=20)
    #plt.savefig('figures/voltage.svg')

    plt.show()
 def setUp(self):
     config = ga_configs.ParameterTuningConfig(
         population_size=2,
         max_generations=2,
         protocol=protocols.SingleActionPotentialProtocol(),
         tunable_parameters=[
             ga_configs.Parameter(name='g_b_na', default_value=0.95),
             ga_configs.Parameter(name='g_na', default_value=3671.2302)
         ],
         params_lower_bound=0.9,
         params_upper_bound=1.1,
         mutate_probability=1.0,
         mate_probability=0.9,
         gene_swap_probability=0.5,
         gene_mutation_probability=0.15,
         tournament_size=2)
     self.ga = parameter_tuning_genetic_algorithm.\
         ParameterTuningGeneticAlgorithm(config=config)
Example #13
0
    def test_update_parameters(self):
        protocol = protocols.SingleActionPotentialProtocol()
        tunable_parameters = [
            ga_configs.Parameter(name='G_Na', default_value=1),
            ga_configs.Parameter(name='G_F', default_value=1),
            ga_configs.Parameter(name='G_Ks', default_value=1),
            ga_configs.Parameter(name='G_Kr', default_value=1),
            ga_configs.Parameter(name='G_K1', default_value=1),
            ga_configs.Parameter(name='G_bNa', default_value=1),
            ga_configs.Parameter(name='G_NaL', default_value=1),
            ga_configs.Parameter(name='G_CaL', default_value=1),
            ga_configs.Parameter(name='G_pCa', default_value=1),
            ga_configs.Parameter(name='G_bCa', default_value=1)
        ]
        new_params = [.7, .7, .7, .7, .7, .7, .7, .7, .7, .7]

        baseline_trace = paci_2018.generate_trace(protocol)
        new_trace = paci_2018.generate_trace(protocol, tunable_parameters,
                                             new_params)

        tst.assert_raises(AssertionError, tst.assert_array_equal,
                          baseline_trace.y, new_trace.y,
                          'updating parameters does not change trace')
Example #14
0
def main():
    protocol = protocols.SingleActionPotentialProtocol()
    save_data_to_file(paci_2018.generate_trace(protocol))
    load_and_plot_data('./data/paci_sap_baseline.csv')
Example #15
0
def plot_baseline_single_action_potential_trace():
    trace = paci_2018.generate_trace(
        protocol=protocols.SingleActionPotentialProtocol(duration=2))
    trace.plot()
    plt.savefig(
        'figures/Single AP Figure/baseline_single_action_potential_trace.svg')
    ga_configs.Parameter(name='G_F', default_value=1),
    ga_configs.Parameter(name='G_Ks', default_value=1),
    ga_configs.Parameter(name='G_Kr', default_value=1),
    ga_configs.Parameter(name='G_K1', default_value=1),
    ga_configs.Parameter(name='G_bNa', default_value=1),
    ga_configs.Parameter(name='G_NaL', default_value=1),
    ga_configs.Parameter(name='G_CaL', default_value=1),
    ga_configs.Parameter(name='G_pCa', default_value=1),
    ga_configs.Parameter(name='G_bCa', default_value=1),
    ga_configs.Parameter(name='K_NaCa', default_value=1)
]
# Parameters are sorted alphabetically to maintain order during each
# generation of the genetic algorithm.
PARAMETERS.sort(key=lambda x: x.name)

SAP_PROTOCOL_KERNIK = protocols.SingleActionPotentialProtocol(1800)

VC_PROTOCOL = protocols.VoltageClampProtocol(steps=[
    protocols.VoltageClampStep(duration=0.050, voltage=-0.08),
    protocols.VoltageClampStep(duration=0.050, voltage=-0.12),
    protocols.VoltageClampStep(duration=0.500, voltage=-0.057),
    protocols.VoltageClampStep(duration=0.025, voltage=-0.04),
    protocols.VoltageClampStep(duration=0.075, voltage=0.02),
    protocols.VoltageClampStep(duration=0.025, voltage=-0.08),
    protocols.VoltageClampStep(duration=0.250, voltage=0.04),
    protocols.VoltageClampStep(duration=1.900, voltage=-0.03),
    protocols.VoltageClampStep(duration=0.750, voltage=0.04),
    protocols.VoltageClampStep(duration=1.725, voltage=-0.03),
    protocols.VoltageClampStep(duration=0.650, voltage=-0.08),
])
def generate_config_list():
    parameters = [
        ga_configs.Parameter(name='g_na', default_value=3671.2302),
        ga_configs.Parameter(name='g_f_s', default_value=30.10312),
    ]
    sap_protocol = protocols.SingleActionPotentialProtocol()
    ip_protocol = protocols.IrregularPacingProtocol(duration=3,
                                                    stimulation_offsets=[0.1])
    vc_protocol = protocols.VoltageClampProtocol(steps=[
        protocols.VoltageClampStep(duration=0.1, voltage=-0.08),
        protocols.VoltageClampStep(duration=0.1, voltage=-0.12),
        protocols.VoltageClampStep(duration=0.5, voltage=-0.06),
        protocols.VoltageClampStep(duration=0.05, voltage=-0.04),
        protocols.VoltageClampStep(duration=0.15, voltage=0.02),
        protocols.VoltageClampStep(duration=0.025, voltage=-0.08),
        protocols.VoltageClampStep(duration=0.3, voltage=0.04)
    ])
    sap_config = ga_configs.ParameterTuningConfig(
        population_size=2,
        max_generations=2,
        protocol=sap_protocol,
        tunable_parameters=parameters,
        params_lower_bound=0.5,
        params_upper_bound=1.5,
        mutate_probability=1.,
        mate_probability=0.9,
        gene_swap_probability=0.5,
        gene_mutation_probability=0.1,
        tournament_size=2)
    ip_config = ga_configs.ParameterTuningConfig(population_size=2,
                                                 max_generations=2,
                                                 protocol=ip_protocol,
                                                 tunable_parameters=parameters,
                                                 params_lower_bound=0.5,
                                                 params_upper_bound=1.5,
                                                 mutate_probability=1.,
                                                 mate_probability=0.9,
                                                 gene_swap_probability=0.5,
                                                 gene_mutation_probability=0.1,
                                                 tournament_size=2)
    vc_config = ga_configs.ParameterTuningConfig(population_size=2,
                                                 max_generations=2,
                                                 protocol=vc_protocol,
                                                 tunable_parameters=parameters,
                                                 params_lower_bound=0.5,
                                                 params_upper_bound=1.5,
                                                 mutate_probability=1.,
                                                 mate_probability=0.9,
                                                 gene_swap_probability=0.5,
                                                 gene_mutation_probability=0.1,
                                                 tournament_size=2)
    combined_config = ga_configs.ParameterTuningConfig(
        population_size=2,
        max_generations=2,
        protocol=ip_protocol,
        tunable_parameters=parameters,
        params_lower_bound=0.5,
        params_upper_bound=1.5,
        mutate_probability=1.,
        mate_probability=0.9,
        gene_swap_probability=0.5,
        gene_mutation_probability=0.1,
        tournament_size=2,
        secondary_protocol=vc_protocol)

    return [sap_config, ip_config, vc_config, combined_config]
"""

##Single Action Potential
"""
The SingleActionPotentialProtocol() class name is a misnomer. It should
be called SpontaneousProtocol(). You initialize the protocol with:
    - duration: float – the amount of time you want the model to run
                spontaneously
"""
# 1. Imports
from kernik import KernikModel
import protocols
import matplotlib.pyplot as plt

DURATION = 983  # Length of Kernik AP, in milliseconds
SAP_PROTOCOL_KERNIK = protocols.SingleActionPotentialProtocol(DURATION)

# STOP AND OPEN ./protocols.py. Look at the SingleActionPotentialProtocol
# so you understand what the kernik_protocol variable holds.

baseline_kernik = KernikModel()  # Initialize the baseline kernik individual
baseline_kernik.generate_response(SAP_PROTOCOL_KERNIK)  # Run model

plt.plot(baseline_kernik.t, baseline_kernik.y_voltage)
plt.show()

## ----------------------------------------------------------------------

##VC Protocol
VC_PROTOCOL = protocols.VoltageClampProtocol(steps=[
    protocols.VoltageClampStep(duration=0.050, voltage=-0.08),