Exemplo n.º 1
0
def first_pulse_features(pair, pulse_responses, pulse_response_amps):

    avg_psp = TSeriesList(pulse_responses).mean()
    dt = avg_psp.dt
    avg_psp_baseline = float_mode(avg_psp.data[:int(10e-3 / dt)])
    avg_psp_bsub = avg_psp.copy(data=avg_psp.data - avg_psp_baseline)
    lower_bound = -float('inf')
    upper_bound = float('inf')
    xoffset = pair.synapse_prediction.ic_fit_xoffset
    if xoffset is None:
        xoffset = 14 * 10e-3
    synapse_type = pair.synapse_prediction.synapse_type
    if synapse_type == 'ex':
        amp_sign = '+'
    elif synapse_type == 'in':
        amp_sign = '-'
    else:
        raise Exception(
            'Synapse type is not defined, reconsider fitting this pair %s %d->%d'
            % (pair.expt_id, pair.pre_cell_id, pair.post_cell_id))

    weight = np.ones(len(
        avg_psp.data)) * 10.  # set everything to ten initially
    weight[int(10e-3 / dt):int(12e-3 / dt)] = 0.  # area around stim artifact
    weight[int(12e-3 / dt):int(19e-3 / dt)] = 30.  # area around steep PSP rise

    psp_fits = fit_psp(avg_psp,
                       xoffset=(xoffset, lower_bound, upper_bound),
                       yoffset=(avg_psp_baseline, lower_bound, upper_bound),
                       sign=amp_sign,
                       weight=weight)

    amp_cv = np.std(pulse_response_amps) / np.mean(pulse_response_amps)

    features = {
        'ic_fit_amp': psp_fits.best_values['amp'],
        'ic_fit_latency': psp_fits.best_values['xoffset'] - 10e-3,
        'ic_fit_rise_time': psp_fits.best_values['rise_time'],
        'ic_fit_decay_tau': psp_fits.best_values['decay_tau'],
        'ic_amp_cv': amp_cv,
        'avg_psp': avg_psp_bsub.data
    }
    #'ic_fit_NRMSE': psp_fits.nrmse()} TODO: nrmse not returned from psp_fits?

    return features
Exemplo n.º 2
0
                     name=("n = %d" % n_synapses))
 rec_plot[t, c].plot(recovery_grand_trace.time_values,
                     recovery_grand_trace.data,
                     pen={
                         'color': color,
                         'width': 2
                     })
 rec_plot[t, c].setLabels(left=('Vm', 'V'))
 rec_plot[t, c].setLabels(bottom=('t', 's'))
 if deconv is True:
     rec_deconv = deconv_train(rec_pass_qc[:2])
     rec_deconv_grand = TSeriesList(rec_deconv[0]).mean()
     rec_ind_deconv_grand = TSeriesList(rec_deconv[1]).mean()
     #log_rec_plt.plot(rec_deconv_grand.time_values, rec_deconv_grand.data,
     #                    pen={'color': color, 'width': 2})
     rec_deconv_ind_grand2 = rec_ind_deconv_grand.copy(t0=delta +
                                                       0.2)
     #log_rec_plt.plot(rec_deconv_ind_grand2.time_values, rec_deconv_ind_grand2.data,
     #                    pen={'color': color, 'width': 2})
     [
         deconv_rec_plot[t, c].plot(ind.time_values,
                                    ind.data,
                                    pen=trace_color)
         for ind in rec_deconv[0]
     ]
     [
         deconv_rec_plot[t, c].plot(rec.time_values,
                                    rec.data,
                                    pen=trace_color)
         for rec in rec_deconv[1]
     ]
     deconv_rec_plot[t, c].plot(rec_ind_deconv_grand.time_values,