Exemple #1
0
def schneider_taum_sum_stats(data):
    output = []
    for d in data.split_periodic(600, adjust=True):
        d = d.trim(500, 600, adjust=True)
        current = d['ina.i_Na']
        time = d['environment.time']

        # Remove constant
        c0 = d['ina.i_Na'][0]
        current = [(c_ - c0) for c_ in current]

        def sum_of_exp(t, taum, tauh):
            return ((1 - np.exp(-t / taum))**3 * np.exp(-t / tauh))

        with warnings.catch_warnings():
            warnings.simplefilter('error', so.OptimizeWarning)
            warnings.simplefilter('error', RuntimeWarning)
            try:
                imax = max(current, key=abs)
                current = [c_ / imax for c_ in current]
                if len(time) <= 1 or len(current) <= 1:
                    raise Exception('Failed simulation')
                popt, _ = so.curve_fit(sum_of_exp,
                                       time,
                                       current,
                                       p0=[0.5, 1.],
                                       bounds=([0., 0.], [1., 100.]))
                output = output + [popt[0] / max_tm]
            except:
                output = output + [float('inf')]
    return output
Exemple #2
0
def sakakibara_iv_sum_stats(data):
    output = []
    for d in data.split_periodic(10000, adjust=True):
        d = d.trim(9900, 10000, adjust=True)
        current = d['ina.i_Na']
        index = np.argmax(np.abs(current))
        output = output + [current[index] / sakakibara_iv_max_peak]
    return output
Exemple #3
0
def schneider_iv_sum_stats(data):
    output = []
    for d in data.split_periodic(512, adjust=True):
        d = d.trim(500, 512, adjust=True)
        current = d['ina.i_Na']
        index = np.argmax(np.abs(current))
        output = output + [current[index] / schneider_iv_max_peak]
    return output
Exemple #4
0
def sakakibara_act_sum_stats(data):
    output = []
    for d in data.split_periodic(10000, adjust=True):
        d = d.trim(9900, 10000, adjust=True)
        gate = d['ina.g']
        output = output + [max(gate)]
    for i in range(len(output)):
        output[i] = output[i] / output[-1]
    return output
Exemple #5
0
def sakakibara_inact_sum_stats(data):
    output = []
    for d in data.split_periodic(11030, adjust=True):
        d = d.trim(11000, 11030, adjust=True).npview()
        gate = d['ina.g']
        output = output + [max(gate)]
    for i in range(1, len(output)):
        output[i] = output[i] / output[0]
    output[0] = 1.
    return output
Exemple #6
0
def sakakibara_tauh_sum_stats(data):
    output = []

    def simple_exp(t, tauh):
        return np.exp(-t / tauh)

    for d in data.split_periodic(1100, adjust=True):
        d = d.trim(1000, 1100, adjust=True)
        current = d['ina.i_Na']
        time = d['environment.time']
        index = np.argmax(np.abs(current))

        # Set time zero to peak current
        current = current[index:]
        time = time[index:]
        t0 = time[0]
        time = [t - t0 for t in time]

        # Keep only decay phase (i.e. not beyond when current=0)
        index = np.argwhere(np.isclose(current, 0.0))
        if len(index) != 0:
            current = current[:index[0][0]]
            time = time[:index[0][0]]

        with warnings.catch_warnings():
            warnings.simplefilter('error', so.OptimizeWarning)
            warnings.simplefilter('error', RuntimeWarning)
            try:
                imax = max(current, key=abs)
                current = [c_ / imax for c_ in current]
                if len(time) <= 1 or len(current) <= 1:
                    raise Exception('Failed simulation')
                popt, _ = so.curve_fit(simple_exp,
                                       time,
                                       current,
                                       p0=[5],
                                       bounds=([0.01], [20.0]))
                tauh = popt[0]
                output = output + [tauh / max_th]
            except:
                output = output + [float('inf')]
    return output
Exemple #7
0
def sakakibara_tauh_depol_sum_stats(data):
    output = []

    def simple_exp(t, tauh):
        return np.exp(-t / tauh)

    for d in data.split_periodic(sum(twaits) + len(twaits) * 3000,
                                 adjust=True):
        with warnings.catch_warnings():
            warnings.simplefilter('error', so.OptimizeWarning)
            warnings.simplefilter('error', RuntimeWarning)
            try:
                # Get recovery curve
                rec = []
                trim1, trim2, trim3 = 1000, 2000, 3000
                for i, t in enumerate(twaits_split):
                    trace, data = d.split(t)
                    peak1 = max(trace.trim(trim1, trim2)['ina.i_Na'], key=abs)
                    peak2 = max(trace.trim(trim2 + twaits[i],
                                           trim3 + twaits[i])['ina.i_Na'],
                                key=abs)
                    rec.append(peak2 / peak1)
                    # Update trim times for next iteration (not adjusting time)
                    trim1 += twaits[i] + 3000
                    trim2 += twaits[i] + 3000
                    trim3 += twaits[i] + 3000

                # Fit double exponential to recovery curve
                popt, _ = so.curve_fit(simple_exp,
                                       twaits,
                                       1. - np.asarray(rec),
                                       p0=[1],
                                       bounds=([0], [100]))
                tauh = popt[0]
                output = output + [tauh / max_th_depol]
            except:
                output = output + [float('inf')]
    return output