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
Esempio n. 2
0
    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
Esempio n. 3
0
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
Esempio n. 5
0
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'])
Esempio n. 9
0
        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',
Esempio n. 10
0
        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':