def compute_free_residual(sim, index, calib_data, condition='free'): Cdata = load_dict(load_dict('data/best_chelatedZn_config.npz')['filename']) try: sim_data = load_dict( os.path.join('data', 'calib', sim.params_filename(index) + '.npz')) Residual = 1. for cond in ['20Hz_protocol', '3Hz_protocol']: tcond = (sim_data['t']>(sim_data['%s_tstart' % cond]-calib_data['DT0_%s' % cond])) &\ (sim_data['t']<sim_data['%s_tstart' % cond]-calib_data['DT0_%s' % cond]+\ calib_data['DTfull_%s' % cond]) # normalizing to peak in the exp first_peak_cond = (calib_data['t_%s' % cond] < calib_data['DT0_%s' % cond] + 50) # exp data trace_exp = calib_data['Iexp_freeZn_%s' % cond] trace_exp0 = calib_data['Iexp_chelatedZn_%s' % cond] # model data trace_model = -1e3 * ( sim_data['Ic'][tcond] - sim_data['Ic'][tcond][0]) # - sign trace_model0 = -1e3 * (Cdata['Ic'][tcond] - Cdata['Ic'][tcond][0]) # normalizing to peak factor_model = np.max(trace_model[first_peak_cond]) factor_model0 = np.max(trace_model0[first_peak_cond]) # trace_model0 *= factor_model/factor_model0 # norm to peak, MAX trace_model /= factor_model trace_model0 /= factor_model0 factor_exp = np.max(trace_exp[first_peak_cond]) factor_exp0 = np.max(trace_exp0[first_peak_cond]) trace_exp /= factor_exp trace_exp0 /= factor_exp0 diff_model = trace_model0 - trace_model diff_exp = trace_exp0 - trace_exp Residual *= 1 + np.mean( np.abs(diff_model - diff_exp)) / np.std(diff_exp) except FileNotFoundError: print(sim.params_filename(index) + '.npz', 'not found') Residual = 1e10 return Residual
def load_data(self, filename): data = load_dict(filename) self.params = {} for key, val in data.items(): if key in self.keys_for_saving(): setattr(self, key, val) else: self.params[key] = val
def plot_sim(filename, ge, omf_data=None, Umodel_data=None, mf_data=None): ## load file data = ntwk.load_dict_from_hdf5(filename) # ## plot fig, AX = ntwk.activity_plots(data, smooth_population_activity=10, COLORS=COLORS, pop_act_log_scale=True) if Umodel_data is not None: AX[2].plot(Umodel_data['t'], Umodel_data['desired_Vm'], '-', lw=2, color='dimgrey', label='mean-field') if mf_data is None: mf = ntwk.FastMeanField(data, tstop=6., dt=2.5e-3, tau=20e-3) mf.build_TF_func(tf_sim_file='neural_network_dynamics/theory/tf_sim_points.npz') X, mVm, sVm = mf.run_single_connectivity_sim(mf.ecMatrix, verbose=True) t = np.linspace(0, data['tstop'], X.shape[1]) for i, label in enumerate(data['REC_POPS']): AX[-1].plot(t, 1e-2+X[i,:], '--', lw=1, color=COLORS[i]) ge.plot(t, 1e3*mVm[i,:], sy=1e3*sVm[i,:], color='k', lw=1, label='mean-field', ax=AX[2+i]) AX[2+i].plot(t, 1e3*(mVm[i,:]-sVm[i,:]), 'k-', lw=0.5) AX[2+i].plot(t, 1e3*(mVm[i,:]+sVm[i,:]), 'k-', lw=0.5) # AX[2].plot(mf_data['t'], mf_data['desired_Vm'], 'k--', lw=2, label='U-model') # AX[2].legend(frameon=False, loc='best') if omf_data is None: try: omf_data = load_dict(filename.replace('ntwk.h5', 'mf.npz')) except FileNotFoundError: pass if omf_data is not None: t = np.linspace(0, data['tstop'], len(omf_data['pyrExc'])) for i, label in enumerate(data['REC_POPS']): AX[-1].plot(t, 1e-2+omf_data[label], '-', lw=4, color=COLORS[i], alpha=.5) # AX[-1].plot(t, omf_data[label], 'k--') figM, _, _ = plot_matrix(data) ntwk.show()
def compute_chelated_residual(sim, index, calib_data, condition='chelated'): try: sim_data = load_dict( os.path.join('data', 'calib', sim.params_filename(index) + '.npz')) Residual = 1. for cond in ['20Hz_protocol', '3Hz_protocol']: tcond = (sim_data['t']>(sim_data['%s_tstart' % cond]-calib_data['DT0_%s' % cond])) &\ (sim_data['t']<sim_data['%s_tstart' % cond]-calib_data['DT0_%s' % cond]+\ calib_data['DTfull_%s' % cond]) trace_model = -1e3 * ( sim_data['Ic'][tcond] - sim_data['Ic'][tcond][0]) # - sign trace_exp = calib_data['Iexp_chelatedZn_%s' % cond] Residual *= 1 + np.sum((trace_model - trace_exp)**2) / np.sum( (trace_exp)**2) except FileNotFoundError: print(sim.params_filename(index) + '.npz', 'not found') Residual = 1e10 return Residual
def demo_plot(): fig, AX = ge.figure(axes=(1, 2), figsize=(2, 1)) for key, color, l in zip( ['AMPA-only', 'chelated-Zinc', 'free-Zinc'], [ge.blue, 'k', ge.green], ['$g_{AMPA}$', '$g_{NMDA}$ (chelated)', '$g_{NMDA}$ (free)']): data = load_dict('data/nmda-spike/demo-%s.npz' % key) AX[0].plot(data['t'], data['Vm_soma'], color=color, label=key) AX[1].plot(data['t'], data['gNMDA_syn'], color=color, label=l + ' ') for e, n in zip(data['events'], data['NSYNs']): ge.annotate(AX[1], ' $N_{syn}$=%i' % n, (e, 0), xycoords='data', rotation=90, ha='right', size='xx-small') ge.legend(AX[0], size='x-small') ge.legend(AX[1], size='xx-small', ncol=3) ge.set_plot(AX[0], ylabel='$V_m$ (mV)') ge.set_plot(AX[1], ylabel='$g$ (nS)', xlabel='time (ms)')
} if not os.path.isfile('data/draft_mf_result.npz') or\ input('Do you want to peform again the mean-field simulation ? [y/N]\n')=='y': print('performing calculus [...]') X = ntwk.mean_field.solve_mean_field_first_order( Model, DYN_SYSTEM, INPUTS=INPUTS, CURRENT_INPUTS=CURRENT_INPUTS, dt=dt, tstop=tstop) np.savez('data/draft_mf_result.npz', **X) else: X = load_dict('data/draft_mf_result.npz') fig, AX = ntwk.activity_plots(data, COLORS=COLORS, smooth_population_activity=10, pop_act_log_scale=True) for i, pop in enumerate(REC_POPS): AX[-1].plot(1e3 * t, 1e-2 + X[pop], color=COLORS[i], lw=3, alpha=0.6) um = Umodel() ge.plot(um.predict_Vm(1e-3 * t_sim, data['Rate_AffExc_pyrExc']), fig_args={'figsize': (3, 1)}) ge.show()
'tauRiseNMDA': 3,# [ms], Farinella et al., 2014 'tauDecayNMDA': 100,# [ms] --- Destexhe et al.:. 25-125ms, Farinella et al., 2014: 70ms 'cMg': 1., # mM 'etaMg': 0.33, # 1/mM 'V0NMDA':1./0.08,# [mV] 'Mg_NMDA':1.,# mM } if sys.argv[-1]=='plot': from analyz.IO.npz import load_dict from datavyz import ges as ge data = load_dict('data.npz') fig, AX = ge.figure(axes=(1,3), figsize=(2.,1.)) ge.plot(data['t'], Y=[data['Vsoma'], data['Vdend']], LABELS=['soma', 'dend'], COLORS=['k', ge.blue], ax=AX[0], axes_args={'ylabel':'Vm (mV)', 'xlim':[0, data['t'][-1]]}) ge.plot(data['t'], Y=[data['Casoma'], data['Cadend']], COLORS=['k', ge.blue], ax=AX[1], axes_args={'ylabel':'[Ca$^{2+}$] (nM)', 'xlabel':'time (ms)', 'xlim':[0, data['t'][-1]]}) ge.scatter(data['Espike_times'], data['Espike_IDs'], color=ge.green,ax=AX[2],no_set=True,ms=3) ge.scatter(data['Ispike_times'], data['Espike_IDs'].max()*1.2+data['Ispike_IDs'], color=ge.red, ax=AX[2], no_set=True, ms=3) ge.set_plot(AX[2], [], xlim=[0, data['t'][-1]]) fig.savefig('/home/yann/Desktop/trace.svg') ge.show()
return Residual if __name__ == '__main__': import sys, os from model import Model from analyz.workflow.batch_run import GridSimulation # if not os.path.isfile('data/passive-props.npz'): # print('provide the ') Model['qAMPA'] = 0. # NBQX in experiments # loading data from previous calib ! passive = load_dict('data/passive-props.npz') for key, val in passive.items(): Model[key] = val # build the stimulation stim = build_stimulation() if len(sys.argv) == 1: best_chelated_config = load_dict('data/best_chelatedZn_config.npz') for key, val in best_chelated_config.items(): Model[key] = val Npicked = compute_time_varying_synaptic_recruitment( Model['Nsyn1'], Model['Nsyn2'], Model['Tnsyn20Hz'], Model['Tnsyn3Hz'])
fig1, ax = vis.plot_segments(SEGMENTS['comp_type'] != 'axon', bar_scale_args={}, fig_args=dict(figsize=(1.5, 2.4), left=0, bottom=0, top=0, right=0)) vis.add_dots(ax, PROX, 50, ge.orange) vis.add_dots(ax, DIST, 50, ge.orange) ge.show() elif args.protocol == 'syn-number': tstop, t0_stim = 300, 20 if args.plot: data = load_dict( os.path.join('data', 'branco-syn-number-%s.npz' % suffix)) fig, AX = ge.figure(axes=(1, 2), figsize=(.7, 1), right=4., hspace=0.1, bottom=0.1) ge.title(AX[0], '%i to %i synapses (by 2)' % (N_PULSES[0], N_PULSES[-1])) for synapses_loc, label, ax in zip([PROX, DIST], ['prox', 'dist'], AX): for i in range(len(data['v-%s' % label])): ax.plot(data['t'], data['v-%s' % label][i], label=label, color='k',
output = run_model(Model) np.savez(os.path.join('data', 'calib', fn + '.npz'), **output) elif sys.argv[1] == 'calib-analysis': # EXPERIMENTAL VALUES expRm, expCm = 45.89e6, 311.89e-12 sim = GridSimulation(os.path.join('data', 'calib', 'passive-grid.npz')) sim_results = {'Rm': np.zeros(sim.N), 'Cm': np.zeros(sim.N)} for index in range(int(sim.N)): output = load_dict( os.path.join('data', 'calib', sim.params_filename(index) + '.npz')) Rm, Cm = perform_ICcharact(1e-3 * output['t'], 1e-3 * output['Vm_soma'], t0=50e-3, t1=150e-3) sim_results['Rm'][index], sim_results['Cm'][index] = Rm, Cm # perform minimization to_minimize = (1+np.abs(sim_results['Rm']-expRm)/sim_results['Rm'])*\ (1+np.abs(sim_results['Cm']-expCm)/sim_results['Cm']) ibest = np.argmin(to_minimize) # save results as default passive props passive_props = { 'filename':