Ejemplo n.º 1
0
def rao_inact_sum_stats(data):
    output = []
    for d in data.split_periodic(6400, adjust=True):
        d = d.trim(6000, 6400, adjust=True)
        current = d['ical.i_CaL']
        output = output + [max(current, key=abs)]
    for i in range(1, len(output)):
        output[i] = output[i] / output[0]
    output[0] = 1.
    return output
Ejemplo n.º 2
0
def dias_iv_sum_stats(data):
    output = []
    for d in data.split_periodic(5450, adjust=True):
        d = d.trim(5200, 5450, adjust=True)
        # ical should peak within the 250ms step
        curr = d['ical.i_CaL']
        index = np.argmax(np.abs(curr))
        if index == len(curr) - 1:
            output = output + [float('inf')]
        else:
            output = output + [curr[index]]
    return output
Ejemplo n.º 3
0
def rao_taui_sum_stats(data):
    out = []

    def single_exp(t, tau, A):
        return A * np.exp(-t / tau)

    for d in data.split_periodic(5100, adjust=True):
        d = d.trim(5000, 5100, adjust=True)
        curr = d['ical.i_CaL']
        index = np.argmax(np.abs(curr))
        time = d['engine.time']

        # separate decay portion
        decay = curr[index:]
        time = time[index:]
        t0 = time[0]
        time = [t - t0 for t in time]

        with warnings.catch_warnings():
            warnings.simplefilter('error', so.OptimizeWarning)
            warnings.simplefilter('error', RuntimeWarning)
            try:
                # fit to single exponential
                popt, _ = so.curve_fit(single_exp,
                                       time,
                                       decay,
                                       p0=[50., 1.],
                                       bounds=([0., -np.inf], np.inf))
                fit = [single_exp(t, popt[0], popt[1]) for t in time]

                # calculate r squared for fit
                ss_res = np.sum((np.array(decay) - np.array(fit))**2)
                ss_tot = np.sum(
                    (np.array(decay) - np.mean(np.array(decay)))**2)
                r2 = 1 - (ss_res / ss_tot)

                taui = popt[0]
                if r2 > 0.99:
                    out = out + [taui]
                else:
                    out = out + [float('inf')]
            except:
                out = out + [float('inf')]
    return out
Ejemplo n.º 4
0
def dias_iv_tau_sum_stats(data):
    out1 = []
    out2 = []

    def single_exp(t, tau, A, A0):
        return A * (1 - np.exp(-t / tau)) + A0

    for d in data.split_periodic(5450, adjust=True):
        d = d.trim(5200, 5450, adjust=True)
        curr = d['ical.i_CaL']
        index = np.argmax(np.abs(curr))
        out1 = out1 + [curr[index]]
        if (d['membrane.V'][0] >= vsteps_tau[0]
                and d['membrane.V'][0] <= vsteps_tau[-1]):
            # Separate decay portion
            time = d['engine.time']
            decay = curr[index:]
            time = time[index:]
            t0 = time[0]
            time = [t - t0 for t in time]
            # fit to single exponential
            with warnings.catch_warnings():
                warnings.simplefilter('error', so.OptimizeWarning)
                warnings.simplefilter('error', RuntimeWarning)
                try:
                    popt, _ = so.curve_fit(single_exp,
                                           time,
                                           decay,
                                           p0=[5., 1., 0.],
                                           bounds=([0., -np.inf,
                                                    -np.inf], np.inf))
                    taui = popt[0]
                    out2 = out2 + [taui]
                except:
                    out2 = out2 + [float('inf')]
    return out1 + out2
Ejemplo n.º 5
0
def dias_iv_sum_stats(data):
    output = []
    for d in data.split_periodic(5450, adjust=True):
        d = d.trim(5200, 5450, adjust=True)
        output = output + [max(d['ical.i_CaL'], key=abs)]
    return output