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
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,