コード例 #1
0
def compare_truth_pyfnnd(ca_data, learn_theta=(0, 1, 1, 1, 0), tau=0.6):
    '''
    '''
    from fit_neuron.evaluate import spkd_lib as spkd

    n_best, c_best, LL, theta_best = pyfnnd.deconvolve(
        ca_data.df_f.reshape(-1, 1).T,
        dt=0.0166,
        verbosity=1,
        learn_theta=learn_theta,  #tau = tau,
        spikes_tol=1E-5,
        params_tol=1E-5)

    resamp_spikes = MP_analy.downsample_spike_train(ca_data.spike_train,
                                                    ca_data.spike_time,
                                                    ca_data.fluor_time)
    resamp_spikes[resamp_spikes > 1] = 1
    n_best = np.roll(n_best, -1)

    pyfnnd.plotting.plot_fit(
        ca_data.df_f.reshape(-1, 1).T, n_best, c_best, theta_best, 0.0166)

    #    from sklearn.metrics import roc_curve, auc
    #    fpr, tpr, thresholds = roc_curve(resamp_spikes, n_best, pos_label = 1)
    #    my_auc = auc(fpr, tpr)

    #    plt.figure()
    #    plt.plot(fpr, tpr)
    #    plt.xlabel('False Positive Rate', fontsize = 18)
    #    plt.ylabel('True Positive Rate', fontsize = 18)
    #    plt.title('AUC = ' + str(my_auc))

    thresholds = np.arange(0.01, 1, 0.01)
    true_spk_times = ca_data.spike_time[ca_data.spike_train > 0.5]
    max_dist = 2 * len(true_spk_times)  # maximum distance for victor purpura
    vp = max_dist * np.ones(99)  # victor-purpura
    vp_cost = 5

    for i, thresh in enumerate(thresholds):
        if np.sum(
                n_best > thresh
        ) > max_dist:  # is you have a lot of bad spikes, calculating vp can be long
            continue
        else:
            vp[i] = spkd.victor_purpura_dist(
                ca_data.fluor_time[n_best > thresh], true_spk_times, vp_cost)

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    plt.plot(thresholds, 2 * vp / max_dist)
    plt.xlabel('Threshold', fontsize=18)
    plt.ylabel('Normalized VP distance ', fontsize=18)
    plt.title('Minimum distance: ' + str(min(2 * vp / max_dist)))
    MP_plot.prettify_axes(ax)

    example_spikes = threshold_spike_prob(n_best, 0.07)
    ca_data.plot_calcium_spikes()  # makes a new figure
    plt.plot(ca_data.fluor_time, example_spikes + 0.5)

    return np.min(2 * vp / max_dist)
コード例 #2
0
    def plot_calcium_spikes(self):
        fig = plt.figure()
        ax = fig.add_subplot(1,1,1)

        plt.plot(self.fluor_time, self.df_f)
        resampled_spikes = MP_analy.downsample_spike_train(self.spike_train, self.spike_time, self.fluor_time)
        plt.plot(self.fluor_time, resampled_spikes - 0.5)

        plt.xlabel( 'Time (s)', fontsize = 18)
        plt.ylabel('DF / F // spike probability', fontsize = 18)

        MP_plot.prettify_axes(ax)
コード例 #3
0
    def plot_calcium_spikes(self):
        fig = plt.figure()
        ax = fig.add_subplot(1, 1, 1)

        plt.plot(self.fluor_time, self.df_f)
        resampled_spikes = MP_analy.downsample_spike_train(
            self.spike_train, self.spike_time, self.fluor_time)
        plt.plot(self.fluor_time, resampled_spikes - 0.5)

        plt.xlabel('Time (s)', fontsize=18)
        plt.ylabel('DF / F // spike probability', fontsize=18)

        MP_plot.prettify_axes(ax)
コード例 #4
0
def compare_truth_pyfnnd( ca_data, learn_theta = (0, 1, 1, 1, 0), tau = 0.6 ):
    from fit_neuron.evaluate import spkd_lib as spkd
    
    n_best, c_best, LL, theta_best = pyfnnd.deconvolve( ca_data.df_f.reshape(-1, 1).T, 
        dt=0.0166, verbosity=1, learn_theta=learn_theta, #tau = tau,
        spikes_tol=1E-5, params_tol=1E-5 )
        
    resamp_spikes = MP_analy.downsample_spike_train(ca_data.spike_train, ca_data.spike_time, ca_data.fluor_time)
    resamp_spikes[resamp_spikes > 1 ] = 1
    n_best = np.roll(n_best, -1)
    
    pyfnnd.plotting.plot_fit(ca_data.df_f.reshape(-1, 1).T, n_best, c_best, theta_best, 0.0166)

#    from sklearn.metrics import roc_curve, auc
#    fpr, tpr, thresholds = roc_curve(resamp_spikes, n_best, pos_label = 1)
#    my_auc = auc(fpr, tpr)

#    plt.figure()
#    plt.plot(fpr, tpr)
#    plt.xlabel('False Positive Rate', fontsize = 18)
#    plt.ylabel('True Positive Rate', fontsize = 18)
#    plt.title('AUC = ' + str(my_auc))
    
    
    thresholds = np.arange(0.01, 1, 0.01)
    true_spk_times = ca_data.spike_time[ca_data.spike_train>0.5]
    max_dist = 2* len(true_spk_times ) # maximum distance for victor purpura
    vp = max_dist * np.ones(99) # victor-purpura
    vp_cost = 5
    
    for i, thresh in enumerate(thresholds):
        if np.sum(n_best > thresh) > max_dist: # is you have a lot of bad spikes, calculating vp can be long
            continue
        else:
            vp[i] = spkd.victor_purpura_dist(ca_data.fluor_time[n_best >thresh], true_spk_times, vp_cost)
    
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    plt.plot(thresholds, 2 * vp / max_dist )
    plt.xlabel('Threshold', fontsize = 18)
    plt.ylabel('Normalized VP distance ', fontsize = 18)
    plt.title('Minimum distance: ' + str(min(2 * vp / max_dist)) )
    MP_plot.prettify_axes(ax)


    example_spikes = threshold_spike_prob(n_best, 0.07)
    ca_data.plot_calcium_spikes() # makes a new figure
    plt.plot( ca_data.fluor_time, example_spikes + 0.5)
    
    return np.min(2 * vp / max_dist)