def make_2models_figure(ax, MODEL1, MODEL2, I0=300e-12,\
                        color1='r', color2='b'):

    params = models.get_model_params(MODEL1, {})
    
    Inorm = np.array([1. if (tt>100e-3 and tt<500e-3) else 0 for tt in t])
    if params.has_key('Istep'):
        I0 = params['Istep']
    I = I0*Inorm

    if (MODEL1.split('-')[0]=='iAdExp') or (MODEL1.split('-')[0]=='iLIF'):
        v1, va1, spikes1 = single_experiment(t, 0., 0., 0., 0., 1e9, -70e-3, params,\
                              MODEL=MODEL1, full_I_traces=I, return_threshold=True)
        v2, va2, spikes2 = single_experiment(t, 0., 0., 0., 0., 1e9, -70e-3, params,\
                                  MODEL=MODEL2, full_I_traces=I, return_threshold=True)
    else:
        v1, spikes1 = single_experiment(t, 0., 0., 0., 0., 1e9, -70e-3, params,\
                                  MODEL=MODEL1, full_I_traces=I)
        v2, spikes2 = single_experiment(t, 0., 0., 0., 0., 1e9, -70e-3, params,\
                                  MODEL=MODEL2, full_I_traces=I)

    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
    ax.plot(1e3*t, 1e3*v1, color=color1)
    ax.plot(1e3*t, -85+10*Inorm, 'k')
    ax.plot(1e3*t, 1e3*v2+30, color=color2)
    if (MODEL1.split('-')[0]=='iAdExp') or (MODEL1.split('-')[0]=='iLIF'):
        ax.plot(1e3*t, 1e3*va1, 'k:')
        ax.plot(1e3*t, 1e3*va2+30, 'k:')
    ax.plot([1e3*t[0], 1e3*t[0]], [1e3*v1[0], 1e3*v2[0]+30], 'k>', ms=10)
    ax.annotate('-70mV', (.1,.3), xycoords='axes fraction')


    # plt.tight_layout()
    ax.plot([10,10],[-25,-15], 'gray', lw=3)
    ax.plot([10,60],[-25,-25], 'gray', lw=3)
    ax.annotate('10mV', (16,-10), textcoords='data', size=13)
    ax.annotate(str(int(abs(1e12*I0)))+'pA', (16,-20), textcoords='data',size=13)
    ax.annotate('50ms', (17,-40), textcoords='data', size=13)
    ax.annotate('-70mV', (-10, -70), textcoords='data', size=13)
def make_2models_figure(ax, MODEL1, MODEL2, I0=300e-12, color1="r", color2="b"):

    params = models.get_model_params(MODEL1, {})

    Inorm = np.array([1.0 if (tt > 100e-3 and tt < 500e-3) else 0 for tt in t])
    if params.has_key("Istep"):
        I0 = params["Istep"]
    I = I0 * Inorm

    if (MODEL1.split("-")[0] == "iAdExp") or (MODEL1.split("-")[0] == "iLIF"):
        v1, va1, spikes1 = single_experiment(
            t, 0.0, 0.0, 0.0, 0.0, 1e9, -70e-3, params, MODEL=MODEL1, full_I_traces=I, return_threshold=True
        )
        v2, va2, spikes2 = single_experiment(
            t, 0.0, 0.0, 0.0, 0.0, 1e9, -70e-3, params, MODEL=MODEL2, full_I_traces=I, return_threshold=True
        )
    else:
        v1, spikes1 = single_experiment(t, 0.0, 0.0, 0.0, 0.0, 1e9, -70e-3, params, MODEL=MODEL1, full_I_traces=I)
        v2, spikes2 = single_experiment(t, 0.0, 0.0, 0.0, 0.0, 1e9, -70e-3, params, MODEL=MODEL2, full_I_traces=I)

    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
    ax.plot(1e3 * t, 1e3 * v1, color=color1)
    ax.plot(1e3 * t, -85 + 10 * Inorm, "k")
    ax.plot(1e3 * t, 1e3 * v2 + 30, color=color2)
    if (MODEL1.split("-")[0] == "iAdExp") or (MODEL1.split("-")[0] == "iLIF"):
        ax.plot(1e3 * t, 1e3 * va1, "k:")
        ax.plot(1e3 * t, 1e3 * va2 + 30, "k:")
    ax.plot([1e3 * t[0], 1e3 * t[0]], [1e3 * v1[0], 1e3 * v2[0] + 30], "k>", ms=10)
    ax.annotate("-70mV", (0.1, 0.3), xycoords="axes fraction")

    # plt.tight_layout()
    ax.plot([10, 10], [-25, -15], "gray", lw=3)
    ax.plot([10, 60], [-25, -25], "gray", lw=3)
    ax.annotate("10mV", (16, -10), textcoords="data", size=13)
    ax.annotate(str(int(abs(1e12 * I0))) + "pA", (16, -20), textcoords="data", size=13)
    ax.annotate("50ms", (17, -40), textcoords="data", size=13)
    ax.annotate("-70mV", (-10, -70), textcoords="data", size=13)
def make_model_figure(MODEL, I0=100e-12,
                      savefig=False, for_title=None):

    params = models.get_model_params(MODEL, {})
    
    Inorm = np.array([1. if (tt>100e-3 and tt<500e-3) else 0 for tt in t])
    if params.has_key('Istep'):
        I0 = params['Istep']
    I = I0*Inorm
        
    fig = plt.figure(figsize=(6,4))
    ax = plt.subplot(111, frameon=False)
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
    
    plt.title(params['name']+'\n', fontsize=25)
    
    if MODEL.split('-')[0]=='aEIF':
        [v1, va1], spikes = single_experiment(t, 0., 0., 0., 0., 1e9, -70e-3, params,\
                                  MODEL=MODEL, full_I_traces=I)
        [v2, va2], spikes2 = single_experiment(t, 0., 0., 0., 0., 1e9, -70e-3, params,\
                                  MODEL=MODEL, full_I_traces=-I)
        plt.plot(1e3*t, 1e3*v1, 'k', label='soma')
        plt.plot(1e3*t, 1e3*va1, 'r', label='axon')
        plt.plot(1e3*t, -85+10*Inorm, 'k')
        plt.plot(1e3*t, 1e3*v2, 'k--')
        plt.plot(1e3*t, 1e3*va2, 'r--')
        plt.plot(1e3*t, -85-10*Inorm, 'k--')
        plt.legend(loc='upper right', frameon=False)
        
    elif MODEL.split('-')[0]=='iLIF' or MODEL.split('-')[0]=='iAdExp':
        v1, va1, spikes = single_experiment(t, 0., 0., 0., 0., 1e9, -70e-3, params,\
                     MODEL=MODEL, full_I_traces=I, return_threshold=True)
        v2, va2, spikes2 = single_experiment(t, 0., 0., 0., 0., 1e9, -70e-3, params,\
                     MODEL=MODEL, full_I_traces=-I, return_threshold=True)
        plt.plot(1e3*t, 1e3*v1, 'k', label=r'$V_\mathrm{m}$')
        plt.plot(1e3*t, 1e3*va1, 'r', label=r'$\theta$')
        plt.plot(1e3*t, -85+10*Inorm, 'k')
        plt.plot(1e3*t, 1e3*v2, 'k--')
        plt.plot(1e3*t, -85-10*Inorm, 'k--')
        plt.legend(loc='upper right', frameon=False)
    else:
        v1, spikes = single_experiment(t, 0., 0., 0., 0., 1e9, -70e-3, params,\
                                  MODEL=MODEL, full_I_traces=I)
        v2, spikes2 = single_experiment(t, 0., 0., 0., 0., 1e9, -70e-3, params,\
                                  MODEL=MODEL, full_I_traces=-I)
        plt.plot(1e3*t, 1e3*v1, 'k')
        plt.plot(1e3*t, -85+10*Inorm, 'k')
        plt.plot(1e3*t, 1e3*v2, 'k--')
        plt.plot(1e3*t, -85-10*Inorm, 'k--')

    if MODEL is not 'Wang-Buszaki':
        for s in spikes:
            plt.plot([1e3*s,1e3*s], [5e3*params['delta_v']+\
                                     1e3*params['vthresh'],20], 'k:')
        for s in spikes2:
            plt.plot([1e3*s,1e3*s], [5e3*params['delta_v']+\
                                     1e3*params['vthresh'],20], 'k:')

    plt.tight_layout()
    plt.plot([10,10],[-25,-15], 'gray', lw=3)
    plt.plot([10,60],[-25,-25], 'gray', lw=3)
    plt.annotate('10mV', (16,-10), textcoords='data', size=13)
    plt.annotate(str(int(1e12*I0))+'pA', (16,-20), textcoords='data',size=13)
    plt.annotate('50ms', (17,-40), textcoords='data', size=13)
    if savefig==True:
        fig.savefig('../figures/'+MODEL+'_step_response.svg',\
                    format='svg', transparent=True)
    return fig
def make_model_figure(MODEL, I0=100e-12, savefig=False, for_title=None):

    params = models.get_model_params(MODEL, {})

    Inorm = np.array([1.0 if (tt > 100e-3 and tt < 500e-3) else 0 for tt in t])
    if params.has_key("Istep"):
        I0 = params["Istep"]
    I = I0 * Inorm

    fig = plt.figure(figsize=(6, 4))
    ax = plt.subplot(111, frameon=False)
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

    plt.title(params["name"] + "\n", fontsize=25)

    if MODEL.split("-")[0] == "aEIF":
        [v1, va1], spikes = single_experiment(t, 0.0, 0.0, 0.0, 0.0, 1e9, -70e-3, params, MODEL=MODEL, full_I_traces=I)
        [v2, va2], spikes2 = single_experiment(
            t, 0.0, 0.0, 0.0, 0.0, 1e9, -70e-3, params, MODEL=MODEL, full_I_traces=-I
        )
        plt.plot(1e3 * t, 1e3 * v1, "k", label="soma")
        plt.plot(1e3 * t, 1e3 * va1, "r", label="axon")
        plt.plot(1e3 * t, -85 + 10 * Inorm, "k")
        plt.plot(1e3 * t, 1e3 * v2, "k--")
        plt.plot(1e3 * t, 1e3 * va2, "r--")
        plt.plot(1e3 * t, -85 - 10 * Inorm, "k--")
        plt.legend(loc="upper right", frameon=False)

    elif MODEL.split("-")[0] == "iLIF" or MODEL.split("-")[0] == "iAdExp":
        v1, va1, spikes = single_experiment(
            t, 0.0, 0.0, 0.0, 0.0, 1e9, -70e-3, params, MODEL=MODEL, full_I_traces=I, return_threshold=True
        )
        v2, va2, spikes2 = single_experiment(
            t, 0.0, 0.0, 0.0, 0.0, 1e9, -70e-3, params, MODEL=MODEL, full_I_traces=-I, return_threshold=True
        )
        plt.plot(1e3 * t, 1e3 * v1, "k", label=r"$V_\mathrm{m}$")
        plt.plot(1e3 * t, 1e3 * va1, "r", label=r"$\theta$")
        plt.plot(1e3 * t, -85 + 10 * Inorm, "k")
        plt.plot(1e3 * t, 1e3 * v2, "k--")
        plt.plot(1e3 * t, -85 - 10 * Inorm, "k--")
        plt.legend(loc="upper right", frameon=False)
    else:
        v1, spikes = single_experiment(t, 0.0, 0.0, 0.0, 0.0, 1e9, -70e-3, params, MODEL=MODEL, full_I_traces=I)
        v2, spikes2 = single_experiment(t, 0.0, 0.0, 0.0, 0.0, 1e9, -70e-3, params, MODEL=MODEL, full_I_traces=-I)
        plt.plot(1e3 * t, 1e3 * v1, "k")
        plt.plot(1e3 * t, -85 + 10 * Inorm, "k")
        plt.plot(1e3 * t, 1e3 * v2, "k--")
        plt.plot(1e3 * t, -85 - 10 * Inorm, "k--")

    if MODEL is not "Wang-Buszaki":
        for s in spikes:
            plt.plot([1e3 * s, 1e3 * s], [5e3 * params["delta_v"] + 1e3 * params["vthresh"], 20], "k:")
        for s in spikes2:
            plt.plot([1e3 * s, 1e3 * s], [5e3 * params["delta_v"] + 1e3 * params["vthresh"], 20], "k:")

    plt.tight_layout()
    plt.plot([10, 10], [-25, -15], "gray", lw=3)
    plt.plot([10, 60], [-25, -25], "gray", lw=3)
    plt.annotate("10mV", (16, -10), textcoords="data", size=13)
    plt.annotate(str(int(1e12 * I0)) + "pA", (16, -20), textcoords="data", size=13)
    plt.annotate("50ms", (17, -40), textcoords="data", size=13)
    if savefig == True:
        fig.savefig("../figures/" + MODEL + "_step_response.svg", format="svg", transparent=True)
    return fig
def make_simulation_for_model(MODEL, args, return_output=False,\
                              sampling='low'):

    if sampling is 'low':
        # discretization and seed
        SEED = np.arange(2)+1
        dt, tstop = 1e-4, 2.
    else:
        SEED = np.arange(3)+1
        dt, tstop = 1e-5, 10.

                              
    params = models.get_model_params(MODEL, {}) # paramters of the model, see models.py
        
    ### PARAMETERS OF THE EXPERIMENT
    if len(args.RANGE_FOR_3D)>1:
        params['RANGE_FOR_3D'] = args.RANGE_FOR_3D
        
    muV_min, muV_max, sV_min1, sV_max1, sV_min2, sV_max2, Ts_ratio = params['RANGE_FOR_3D']
    muGn_min, muGn_max = 1.15, 8.

    ### cell and synaptic parameters, see models.py !!
    sim_params = {'dt':dt, 'tstop':tstop}
    t_long = np.arange(0,int(tstop/dt))*dt

    muV = np.linspace(muV_min, muV_max, args.DISCRET_muV, endpoint=True)

    # trying with the linear autocorrelation 
    args.DISCRET_muG = args.DISCRET_TvN
    Tv_ratio = np.linspace(1./muGn_max+Ts_ratio, 1./muGn_min+Ts_ratio, args.DISCRET_muG, endpoint=True)
    muGn = 1./(Tv_ratio-Ts_ratio)

    muV, sV, muGn = np.meshgrid(muV, np.zeros(args.DISCRET_sV), muGn)
    Tv_ratio = Ts_ratio+1./muGn

    for i in range(args.DISCRET_muV):
        sv1 = sV_min1+i*(sV_min2-sV_min1)/(args.DISCRET_muV-1)
        sv2 = sV_max1+i*(sV_max2-sV_max1)/(args.DISCRET_muV-1)
        for l in range(args.DISCRET_muG):
            sV[:,i,l] = np.linspace(sv1,sv2,args.DISCRET_sV,endpoint=True)

    I0, Gs, f, Q, Ts = params_variations_calc(muGn,muV,sV,Ts_ratio*np.ones(muGn.shape),params)

    Fout = np.zeros((args.DISCRET_sV, args.DISCRET_muV, args.DISCRET_muG, len(SEED)))

    # measuring the subthreshold fluctuations properties
    muV_exp, sV_exp, TvN_exp = 0*Fout, 0*Fout, 0*Fout

    for i_muV in range(args.DISCRET_muV):
        print '[[[[]]]]=====> muV : ', round(1e3*muV[0, i_muV, 0],1), 'mV'
        for i_sV in range(args.DISCRET_sV):
            print '[[[]]]====> sV : ', round(1e3*sV[i_sV, i_muV, 0],1), 'mV'
            for ig in range(args.DISCRET_muG):
                print '[]=> muGn : ', round(muGn[i_sV, i_muV, ig],1),\
                    'TvN : ', round(100*Tv_ratio[i_sV, i_muV, ig],1), '%'
                for i_s in range(len(SEED)):
                    v, spikes = single_experiment(\
                        t_long, I0[i_sV, i_muV, ig],\
                        Gs[i_sV, i_muV, ig],\
                        f[i_sV, i_muV, ig],\
                        Q[i_sV, i_muV, ig],\
                        Ts[i_sV, i_muV, ig],\
                        muV[i_sV, i_muV, ig],\
                        params, MODEL=MODEL,
                        seed=SEED[i_s]+i_muV+i_sV+ig)

                    Fout[i_sV, i_muV, ig, i_s] =\
                      len(spikes)/t_long.max()

                    muV_exp[i_sV, i_muV, ig, i_s],\
                      sV_exp[i_sV, i_muV, ig, i_s],\
                      TvN_exp[i_sV, i_muV, ig, i_s] = \
                        measuring_subthre_dynamics(v, spikes, dt,\
                                   Tm0=params['Cm']/params['Gl'])

    data_path = '../data/'+MODEL+'_'+args.SUFFIX_NAME+'.npz'


    D = dict(muV=1e3*muV.flatten(), sV=1e3*sV.flatten(),\
             TvN=Ts_ratio+1./muGn.flatten(),\
             muGn=muGn.flatten(),\
             Fout=Fout.mean(axis=-1).flatten(),\
             s_Fout=Fout.std(axis=-1).flatten(),\
             muV_exp=1e3*muV_exp.mean(axis=-1).flatten(),\
             sV_exp=1e3*sV_exp.mean(axis=-1).flatten(),\
             TvN_exp=TvN_exp.mean(axis=-1).flatten(),\
             s_muV_exp=1e3*muV_exp.std(axis=-1).flatten(),\
             s_sV_exp=1e3*sV_exp.std(axis=-1).flatten(),\
             s_TvN_exp=TvN_exp.std(axis=-1).flatten(),\
             MODEL=MODEL,\
             Gl=params['Gl'], Cm=params['Cm'], El=params['El'])

    np.savez(data_path,**D)    
Example #6
0
def make_simulation_for_model(MODEL, args, return_output=False,\
                              sampling='low'):

    if sampling is 'low':
        # discretization and seed
        SEED = np.arange(2) + 1
        dt, tstop = 1e-4, 2.
    else:
        SEED = np.arange(3) + 1
        dt, tstop = 1e-5, 10.

    params = models.get_model_params(
        MODEL, {})  # paramters of the model, see models.py

    ### PARAMETERS OF THE EXPERIMENT
    if len(args.RANGE_FOR_3D) > 1:
        params['RANGE_FOR_3D'] = args.RANGE_FOR_3D

    muV_min, muV_max, sV_min1, sV_max1, sV_min2, sV_max2, Ts_ratio = params[
        'RANGE_FOR_3D']
    muGn_min, muGn_max = 1.15, 8.

    ### cell and synaptic parameters, see models.py !!
    sim_params = {'dt': dt, 'tstop': tstop}
    t_long = np.arange(0, int(tstop / dt)) * dt

    muV = np.linspace(muV_min, muV_max, args.DISCRET_muV, endpoint=True)

    # trying with the linear autocorrelation
    args.DISCRET_muG = args.DISCRET_TvN
    Tv_ratio = np.linspace(1. / muGn_max + Ts_ratio,
                           1. / muGn_min + Ts_ratio,
                           args.DISCRET_muG,
                           endpoint=True)
    muGn = 1. / (Tv_ratio - Ts_ratio)

    muV, sV, muGn = np.meshgrid(muV, np.zeros(args.DISCRET_sV), muGn)
    Tv_ratio = Ts_ratio + 1. / muGn

    for i in range(args.DISCRET_muV):
        sv1 = sV_min1 + i * (sV_min2 - sV_min1) / (args.DISCRET_muV - 1)
        sv2 = sV_max1 + i * (sV_max2 - sV_max1) / (args.DISCRET_muV - 1)
        for l in range(args.DISCRET_muG):
            sV[:, i, l] = np.linspace(sv1, sv2, args.DISCRET_sV, endpoint=True)

    I0, Gs, f, Q, Ts = params_variations_calc(muGn, muV, sV,
                                              Ts_ratio * np.ones(muGn.shape),
                                              params)

    Fout = np.zeros(
        (args.DISCRET_sV, args.DISCRET_muV, args.DISCRET_muG, len(SEED)))

    # measuring the subthreshold fluctuations properties
    muV_exp, sV_exp, TvN_exp = 0 * Fout, 0 * Fout, 0 * Fout

    for i_muV in range(args.DISCRET_muV):
        print '[[[[]]]]=====> muV : ', round(1e3 * muV[0, i_muV, 0], 1), 'mV'
        for i_sV in range(args.DISCRET_sV):
            print '[[[]]]====> sV : ', round(1e3 * sV[i_sV, i_muV, 0], 1), 'mV'
            for ig in range(args.DISCRET_muG):
                print '[]=> muGn : ', round(muGn[i_sV, i_muV, ig],1),\
                    'TvN : ', round(100*Tv_ratio[i_sV, i_muV, ig],1), '%'
                for i_s in range(len(SEED)):
                    v, spikes = single_experiment(\
                        t_long, I0[i_sV, i_muV, ig],\
                        Gs[i_sV, i_muV, ig],\
                        f[i_sV, i_muV, ig],\
                        Q[i_sV, i_muV, ig],\
                        Ts[i_sV, i_muV, ig],\
                        muV[i_sV, i_muV, ig],\
                        params, MODEL=MODEL,
                        seed=SEED[i_s]+i_muV+i_sV+ig)

                    Fout[i_sV, i_muV, ig, i_s] =\
                      len(spikes)/t_long.max()

                    muV_exp[i_sV, i_muV, ig, i_s],\
                      sV_exp[i_sV, i_muV, ig, i_s],\
                      TvN_exp[i_sV, i_muV, ig, i_s] = \
                        measuring_subthre_dynamics(v, spikes, dt,\
                                   Tm0=params['Cm']/params['Gl'])

    data_path = '../data/' + MODEL + '_' + args.SUFFIX_NAME + '.npz'


    D = dict(muV=1e3*muV.flatten(), sV=1e3*sV.flatten(),\
             TvN=Ts_ratio+1./muGn.flatten(),\
             muGn=muGn.flatten(),\
             Fout=Fout.mean(axis=-1).flatten(),\
             s_Fout=Fout.std(axis=-1).flatten(),\
             muV_exp=1e3*muV_exp.mean(axis=-1).flatten(),\
             sV_exp=1e3*sV_exp.mean(axis=-1).flatten(),\
             TvN_exp=TvN_exp.mean(axis=-1).flatten(),\
             s_muV_exp=1e3*muV_exp.std(axis=-1).flatten(),\
             s_sV_exp=1e3*sV_exp.std(axis=-1).flatten(),\
             s_TvN_exp=TvN_exp.std(axis=-1).flatten(),\
             MODEL=MODEL,\
             Gl=params['Gl'], Cm=params['Cm'], El=params['El'])

    np.savez(data_path, **D)