示例#1
0
def simulate_response_example_clamped_spiking(I_e):
    '''
    Response when SNR is clamped to a voltage for strong and weak synapse
    '''
    spike_at = 500.  # ms
    simTime = 700.  # ms

    my_nest.ResetKernel()
    model_list = models()
    my_nest.MyLoadModels(model_list, NEURON_MODELS)
    my_nest.MyLoadModels(model_list, SYNAPES_MODELS)

    SNR = MyGroup(NEURON_MODELS[0],
                  len(SYNAPES_MODELS) + 1,
                  mm=True,
                  mm_dt=0.1,
                  params={'I_e': I_e})

    SG = my_nest.Create('spike_generator', params={'spike_times': [spike_at]})

    for i in range(len(SYNAPES_MODELS)):
        my_nest.Connect(SG, [SNR[i]], model=SYNAPES_MODELS[i])

    my_nest.MySimulate(simTime)

    SNR.get_signal('v', 'V_m', stop=simTime)  # retrieve signal
    SNR.signals['V_m'] = SNR.signals['V_m'].my_time_slice(500, 560)

    return SNR
示例#2
0
def simulate_example(I_e):

    simTime = 1000.  # ms

    my_nest.ResetKernel()
    model_list, model_dict = models()
    my_nest.MyLoadModels(model_list, NEURON_MODELS)

    I_e0 = my_nest.GetDefaults(NEURON_MODELS[0])['I_e']
    SNR = MyGroup(NEURON_MODELS[0],
                  1,
                  sd=True,
                  mm=True,
                  mm_dt=1.,
                  params={'I_e': I_e + I_e0})

    my_nest.MySimulate(simTime)
    SNR.get_signal('v', 'V_m', stop=simTime)  # retrieve signal

    SNR.get_signal('s')  # retrieve signal
    meanRate = round(SNR.signals['spikes'].mean_rate(0, 1000), 1)
    print SNR.signals['spikes'].isi()
    SNR.signals['V_m'].my_set_spike_peak(21, spkSignal=SNR.signals['spikes'])

    s = '\n'
    s = s + 'Example:\n'
    s = s + ' %s %5s %3s %s %5s %3s \n' % ('Mean rate:', meanRate, 'Hz', 'I_e',
                                           I_e, 'pA')

    infoString = s

    return SNR, infoString
def simulate_steady_state_freq(frequencies, flag='ss'):
    global sname_nb
    
    relativeFacilitation=[]
    model_list=models()
    data={}
    n=len(frequencies)
    
    for syn in synapseModels:
        my_nest.ResetKernel()       
        my_nest.MyLoadModels( model_list, neuronModels )
        my_nest.MyLoadModels( model_list, [syn])
        
        ss=my_nest.GetDefaults(syn)       
        synapticEficacy = ss['weight']*ss['U'] 
            
        SNR = MyGroup( neuronModels[0], n, mm_dt = .1, params={'I_e':-150.},
                       record_from=['g_GABAA_2'], spath=spath, 
                       sname_nb=sname_nb )
        sname_nb+=1
        
        tSim=3*1000/frequencies[0]  
        spikeTimes=[]        
        for f in frequencies :
            isi  = 1000./f
            spikeTimes.append(numpy.arange(1,tSim,isi))
        
        
        if not LOAD:
            for target, st in zip(SNR, spikeTimes ) :
                source = my_nest.Create('spike_generator', 
                                    params={'spike_times':st} )
                my_nest.SetDefaults(syn, params={'delay':1.})
                my_nest.Connect(source, [target], model=syn)
        
            my_nest.MySimulate(tSim)
            SNR.get_signal( 'g','g_GABAA_2', stop=tSim ) # retrieve signal
            SNR.save_signal( 'g','g_GABAA_2', stop=tSim )
        
        elif LOAD: 
            SNR.load_signal( 'g','g_GABAA_2')

        signal=SNR.signals['g_GABAA_2']
        
        tmpSteadyState=[]
        for i, st in enumerate(spikeTimes, start=1):
            
            if SNR.mm_dt==0.1:  indecies=numpy.int64(numpy.ceil(st*10))+9
            elif SNR.mm_dt==1.: indecies=numpy.int64(numpy.ceil(st))
            
            values=signal[i].signal[indecies]-signal[i].signal[indecies-1]
            
            if flag=='ss':  tmpSteadyState.append(values[-1]/synapticEficacy)
            if flag=='max': tmpSteadyState.append(max(values)/synapticEficacy)
            
        relativeFacilitation.append(tmpSteadyState)
        
    relativeFacilitation=numpy.array(relativeFacilitation)
        
    return frequencies, relativeFacilitation
def simulate_recovery(revoceryTimes):
    global sname_nb
    
    relativeRecovery=[]
    model_list=models()
    data={}
    n=len(revoceryTimes)
    
    for syn in synapseModels:
        my_nest.ResetKernel()       
        my_nest.MyLoadModels( model_list, neuronModels )
        my_nest.MyLoadModels( model_list, [syn])
        
        ss=my_nest.GetDefaults(syn)       
        synapticEficacy = ss['weight']*ss['U'] 

        SNR = MyGroup( neuronModels[0], n, mm_dt = .1, params={'I_e':-150.},
                       record_from=['g_GABAA_2'], spath=spath, 
                       sname_nb=sname_nb)
        sname_nb+=1
        
        tSim=5000
        spikeTimes=[]
        for rt in revoceryTimes:
            spikeTimes.append(numpy.array([1.,11.,21.,31.,41.,41+rt]))
            
        if not LOAD:
            for target, st in zip(SNR, spikeTimes ) :
       
                source = my_nest.Create('spike_generator', 
                                    params={'spike_times':st} )
                my_nest.SetDefaults(syn, params={'delay':1.})
                my_nest.Connect(source, [target], model=syn)
        
            my_nest.MySimulate(tSim)
            SNR.get_signal( 'g','g_GABAA_2', stop=tSim ) # retrieve signal
            SNR.save_signal( 'g','g_GABAA_2', stop=tSim )
        
        elif LOAD: 
            SNR.load_signal( 'g','g_GABAA_2')
        
        signal=SNR.signals['g_GABAA_2']
        
        tmpSteadyState=[]
        for i, st in enumerate(spikeTimes, start=1):
            
            if SNR.mm_dt==0.1:  indecies=numpy.int64(numpy.ceil(st*10))+9
            elif SNR.mm_dt==1.: indecies=numpy.int64(numpy.ceil(st))
            
            values=signal[i].signal[indecies]-signal[i].signal[indecies-1]
            
            tmpSteadyState.append(values[-1]/synapticEficacy)
            #tmpSteadyState.append(max(values)/synapticEficacy)
            
        relativeRecovery.append(tmpSteadyState)
        
    relativeRecovery=numpy.array(relativeRecovery)
        
    return revoceryTimes, relativeRecovery
示例#5
0
def simulate_basa_line_STN(ctx_rate,
                           gpe_rate,
                           n_ctx,
                           n_gpe,
                           neuron_model,
                           syn_models,
                           stn_current,
                           sim_time=1000,
                           threads=8,
                           w_GPE_STN=0):

    Params_in = {}
    if w_GPE_STN: Params_in['GPE_STN_gaba_s'] = w_GPE_STN

    model_list, model_dict = models(Params_in)
    my_nest.ResetKernel(threads=threads)
    my_nest.MyLoadModels(model_dict, neuron_model)
    my_nest.MyLoadModels(model_dict, syn_models)

    SNR_list = []  # List with SNR groups for synapse.

    if n_ctx > 0: CTX = MyPoissonInput(n=n_ctx, sd=True)
    if n_gpe > 0: GPE = MyPoissonInput(n=n_gpe, sd=False)

    if n_ctx > 0:
        CTX.set_spike_times(rates=[ctx_rate],
                            times=[1],
                            t_stop=sim_time,
                            seed=0)
    if n_gpe > 0:
        GPE.set_spike_times(rates=[gpe_rate],
                            times=[1],
                            t_stop=sim_time,
                            seed=0)

    I_e = my_nest.GetDefaults(neuron_model[0])['I_e'] + stn_current

    STN = MyGroup(neuron_model[0],
                  n=1,
                  sd=True,
                  params={'I_e': I_e},
                  mm_dt=.1,
                  mm=True)

    if n_ctx > 0:
        my_nest.Connect(CTX[:], STN[:] * len(CTX[:]), model=syn_models[0])
    if n_gpe > 0:
        my_nest.Connect(GPE[:], STN[:] * len(GPE[:]), model=syn_models[1])

    my_nest.MySimulate(sim_time)

    STN.get_signal('s', start=0, stop=sim_time)
    STN.get_signal('v', recordable='V_m', start=0, stop=sim_time)

    return STN
示例#6
0
def simulate_voltage_ipsp(I_vec):

    simTime = 700.  # ms
    spikes_at = numpy.arange(500., len(I_vec) * simTime, simTime)  # ms

    voltage = []  # mV
    ipsp_weak = []  # mV
    ipsp_strong = []  # mV

    my_nest.ResetKernel()
    model_list = models()
    my_nest.MyLoadModels(model_list, NEURON_MODELS)
    my_nest.MyLoadModels(model_list, SYNAPES_MODELS)

    SNR = MyGroup(NEURON_MODELS[0], len(SYNAPES_MODELS), mm=True, mm_dt=0.1)

    SG = my_nest.Create('spike_generator', params={'spike_times': spikes_at})

    for i in range(len(SYNAPES_MODELS)):
        my_nest.Connect(SG, [SNR[i]], model=SYNAPES_MODELS[i])

    simTimeTot = 0
    for I_e in I_vec:

        my_nest.SetStatus(SNR[:], params={'I_e': float(I_e)})
        my_nest.MySimulate(simTime)
        simTimeTot += simTime

    SNR.get_signal('v', 'V_m', stop=simTimeTot)  # retrieve signal
    simTimeAcum = 0

    for I_e in I_vec:

        signal = SNR.signals['V_m'].my_time_slice(400 + simTimeAcum,
                                                  700 + simTimeAcum)
        simTimeAcum += simTime

        clamped_at = signal[1].signal[-1]
        minV = min(signal[1].signal)
        maxV = max(signal[1].signal)
        if abs(minV - clamped_at) < abs(maxV - clamped_at):

            size_weak = max(signal[1].signal) - clamped_at
            size_strong = max(signal[2].signal) - clamped_at
        else:
            size_weak = min(signal[1].signal) - clamped_at
            size_strong = min(signal[2].signal) - clamped_at

        voltage.append(clamped_at)
        ipsp_weak.append(size_weak)
        ipsp_strong.append(size_strong)

    ipsp = numpy.array([ipsp_weak, ipsp_strong])
    return voltage, ipsp
def simulate_example_inh_current(I_vec):

    simTime = 1000.  # ms
    my_nest.ResetKernel()
    model_list, model_dict = models()
    my_nest.MyLoadModels(model_list, NEURON_MODELS)
    df = my_nest.GetDefaults(NEURON_MODELS[0])
    n = len(I_vec)

    STN = MyGroup(NEURON_MODELS[0],
                  n,
                  sd=True,
                  mm=True,
                  mm_dt=1.0,
                  record_from=['V_m', 'u'])
    I_e0 = my_nest.GetStatus(STN[:])[0]['I_e']
    my_nest.SetStatus(STN[:], params={'I_e': I_e0 + I_E + 50})  # Set I_e

    I_e = my_nest.GetStatus(STN.ids, 'I_e')[0]
    scg = my_nest.Create('step_current_generator', n=n)
    rec = my_nest.GetStatus(STN[:])[0]['receptor_types']

    for source, target, I in zip(scg, STN[:], I_vec):
        my_nest.SetStatus([source], {
            'amplitude_times': [280., 700.],
            'amplitude_values': [float(I), 0.]
        })
        my_nest.Connect([source], [target],
                        params={'receptor_type': rec['CURR']})

    my_nest.MySimulate(simTime)
    STN.get_signal('v', 'V_m', stop=simTime)  # retrieve signal
    STN.get_signal('s')  # retrieve signal
    STN.signals['V_m'].my_set_spike_peak(21, spkSignal=STN.signals['spikes'])

    e = my_nest.GetStatus(STN.mm)[0]['events']  # get events
    #pylab.plot(e['u'])
    #pylab.show()
    meanRate = round(STN.signals['spikes'].mean_rate(0, 500), 1)

    s = '\n'
    s = s + 'Example inhibitory current:\n'
    s = s + ' %s %5s %3s %s %5s %3s \n' % ('Mean rate:', meanRate, 'Hz', 'I_e',
                                           I_e, 'pA')
    s = s + 'Steps:\n'
    s = s + ' %5s %3s \n' % (I_vec, 'pA')
    infoString = s

    return STN, infoString
示例#8
0
def simulate_basa_line_SNr(msn_rate, gpe_rate, stn_rate, n_msn, n_gpe, n_stn, neuron_model, snr_current, sim_time=1000, threads=8, stn_syn='STN_SNR_ampa_s'):

    SNR_INJECTED_CURRENT=snr_current
    SYNAPSE_MODEL_BACKROUND_STN=[stn_syn]
    
    model_list, model_dict=models()
    my_nest.ResetKernel(threads=threads)       
    my_nest.MyLoadModels( model_dict, neuron_model )
    my_nest.MyLoadModels( model_dict, SYNAPSE_MODEL_BACKROUND_MSN)       
    my_nest.MyLoadModels( model_dict, SYNAPSE_MODEL_BACKROUND_GPE)      
    my_nest.MyLoadModels( model_dict, SYNAPSE_MODEL_BACKROUND_STN)      
    
    SNR_list=[] # List with SNR groups for synapse. 
    
    if n_msn>0: MSN_base=MyPoissonInput(n=n_msn, sd=True)
    if n_gpe>0: GPE=MyPoissonInput(n=n_gpe, sd=False)
    if n_stn>0: STN=MyPoissonInput(n=n_stn, sd=False)
    
    if n_msn>0: MSN_base.set_spike_times(rates=[ msn_rate], times=[1], t_stop=sim_time, seed=0)    
    if n_gpe>0: GPE.set_spike_times(rates=[gpe_rate], times=[1], t_stop=sim_time, seed=0)     
    if n_stn>0: STN.set_spike_times(rates=[stn_rate], times=[1], t_stop=sim_time, seed=0)     
           
    I_e=my_nest.GetDefaults(neuron_model[0])['I_e']+SNR_INJECTED_CURRENT

    SNR=MyGroup( neuron_model[0], n=1, sd=True, params={'I_e':I_e}, mm_dt=.1, mm=True)    

        
    if n_msn>0: my_nest.Connect(MSN_base[:], SNR[:]*len(MSN_base[:]), model=SYNAPSE_MODEL_BACKROUND_MSN[0])
    if n_gpe>0: my_nest.Connect(GPE[:],SNR[:]*len(GPE[:]), model=SYNAPSE_MODEL_BACKROUND_GPE[0])   
    if n_stn>0: my_nest.Connect(STN[:],SNR[:]*len(STN[:]), model=SYNAPSE_MODEL_BACKROUND_STN[0])
                    
    my_nest.MySimulate(sim_time)    
    
    SNR.get_signal( 's', start=0, stop=sim_time )
    
    meanRate=round(SNR.signals['spikes'].mean_rate(1000,sim_time),1)
    spk=SNR.signals['spikes'].time_slice(1000,sim_time).raw_data()
    CV=numpy.std(numpy.diff(spk[:,0],axis=0))/numpy.mean(numpy.diff(spk[:,0],axis=0))

    SNR.get_signal( 'v',recordable='V_m', start=0, stop=sim_time )  
    SNR.signals['V_m'].my_set_spike_peak( 15, spkSignal= SNR.signals['spikes'] ) 
    pylab.rcParams.update( {'path.simplify':False}    )
    SNR.signals['V_m'].plot()
    pylab.title(str(meanRate)+ 'Hz, CV='+str(CV))
    pylab.show()
    
   
    return 
def simulate_ahp(I_vec):

    simTime = 3000.  # ms
    my_nest.ResetKernel()
    model_list, model_dict = models()
    my_nest.MyLoadModels(model_list, NEURON_MODELS)

    n = len(I_vec)

    STN = MyGroup(NEURON_MODELS[0], n, sd=True, mm=True, mm_dt=1.0)
    I_e0 = my_nest.GetStatus(STN[:])[0]['I_e']
    #my_nest.SetStatus(STN[:], params={'I_e':-10.}) # Set I_e
    my_nest.SetStatus(STN[:], params={'I_e': 1.0})  # Set I_e
    I_e = my_nest.GetStatus(STN.ids, 'I_e')[0]
    scg = my_nest.Create('step_current_generator', n=n)
    rec = my_nest.GetStatus(STN[:])[0]['receptor_types']

    for source, target, I in zip(scg, STN[:], I_vec):
        my_nest.SetStatus([source], {
            'amplitude_times': [500., 1000.],
            'amplitude_values': [float(I), 0.]
        })
        my_nest.Connect([source], [target],
                        params={'receptor_type': rec['CURR']})

    my_nest.MySimulate(simTime)

    STN.get_signal('s')  # retrieve signal
    STN.signals['spikes'] = STN.signals['spikes'].time_slice(700, 2000)

    delays = []
    for i, curr in enumerate(I_vec):
        delays.append(
            max(
                numpy.diff(
                    STN.signals['spikes'].spiketrains[i + 1.0].spike_times)))

    meanRate = round(STN.signals['spikes'].mean_rate(0, 500), 1)

    s = '\n'
    s = s + 'Example inhibitory current:\n'
    s = s + ' %s %5s %3s %s %5s %3s \n' % ('Mean rate:', meanRate, 'Hz', 'I_e',
                                           I_e, 'pA')
    s = s + 'Steps:\n'
    s = s + ' %5s %3s \n' % (I_vec, 'pA')
    infoString = s

    return I_vec, delays
示例#10
0
def simulate_basa_line_GPe(msn_rate, stn_rate, gpe_rate,  n_msn, n_stn, n_gpe, neuron_model, syn_models, gpe_current, sim_time=1000, threads=8):
    
    
    model_list, model_dict=models()
    my_nest.ResetKernel(threads=threads)       
    my_nest.MyLoadModels( model_dict, neuron_model )
    my_nest.MyLoadModels( model_dict, syn_models)       
    
    SNR_list=[] # List with SNR groups for synapse. 
    
    if n_msn>0: MSN=MyPoissonInput(n=n_msn, sd=False)
    if n_stn>0: STN=MyPoissonInput(n=n_stn, sd=False)
    if n_gpe>0: GPE=MyPoissonInput(n=n_gpe, sd=False)
    
    if n_msn>0: MSN.set_spike_times(rates=[msn_rate], times=[1], t_stop=sim_time, seed=0)    
    if n_stn>0: STN.set_spike_times(rates=[stn_rate], times=[1], t_stop=sim_time, seed=0)     
    if n_gpe>0: GPE.set_spike_times(rates=[gpe_rate], times=[1], t_stop=sim_time, seed=0)  
               
    I_e=my_nest.GetDefaults(neuron_model[0])['I_e']+gpe_current

    GPE_target=MyGroup( neuron_model[0], n=1, sd=True, params={'I_e':I_e}, 
                 mm_dt=.1, mm=True)    
        
    if n_msn>0: my_nest.Connect(MSN[:], GPE_target[:]*len(MSN[:]), model=syn_models[0])
    if n_stn>0: my_nest.Connect(STN[:],GPE_target[:]*len(STN[:]), model=syn_models[1])   
    if n_gpe>0: my_nest.Connect(GPE[:],GPE_target[:]*len(GPE[:]), model=syn_models[2])   
                    
    my_nest.MySimulate(sim_time)    
    
    GPE_target.get_signal( 's', start=0, stop=sim_time )
    
    meanRate=round(GPE_target.signals['spikes'].mean_rate(1000,sim_time),1)
    spk=GPE_target.signals['spikes'].time_slice(1000,sim_time).raw_data()
    CV=numpy.std(numpy.diff(spk[:,0],axis=0))/numpy.mean(numpy.diff(spk[:,0],axis=0))

    GPE_target.get_signal( 'v',recordable='V_m', start=0, stop=sim_time )   
    GPE_target.signals['V_m'].my_set_spike_peak( 15, spkSignal= GPE_target.signals['spikes'] ) 
    
             
    pylab.rcParams.update( {'path.simplify':False}    )
    
    GPE_target.signals['V_m'].plot()
    pylab.title(str(meanRate)+ 'Hz, CV='+str(CV))
    pylab.show()
    
   
    return        
def simulate_response_example_clamped_silent(I_e):
    '''
    Response when SNR is clamped to a voltage for Ref 2 and Ref 1 synapse
    '''
    spike_at = 500.  # ms
    simTime = 700.  # ms

    my_nest.ResetKernel()
    model_list, model_dict = models()
    my_nest.MyLoadModels(model_list, NEURON_MODELS)
    my_nest.MyLoadModels(model_list, SYNAPSE_MODELS)

    SNR = MyGroup(NEURON_MODELS[0],
                  len(SYNAPSE_MODELS),
                  mm=True,
                  mm_dt=0.1,
                  params={'I_e': I_e})

    SG = my_nest.Create('spike_generator', params={'spike_times': [spike_at]})

    for i in range(len(SYNAPSE_MODELS)):
        my_nest.Connect(SG, [SNR[i]], model=SYNAPSE_MODELS[i])

    my_nest.MySimulate(simTime)

    SNR.get_signal('v', 'V_m', stop=simTime)  # retrieve signal
    SNR.signals['V_m'] = SNR.signals['V_m'].my_time_slice(400, 700)

    clamped_at = SNR.signals['V_m'][1].signal[-1]
    size_MSN_weak = min(SNR.signals['V_m'][1].signal) - clamped_at
    size_MSN_strong = min(SNR.signals['V_m'][2].signal) - clamped_at
    size_GPE_ref = min(SNR.signals['V_m'][3].signal) - clamped_at
    s = ''
    s = s + ' %s %5s %3s \n' % ('Clamped at:', str(round(clamped_at, 1)), 'mV')
    s = s + ' %s %5s %3s \n' % (r'$\delta_w^{MSN}$',
                                str(round(size_MSN_weak, 1)), 'mV')
    s = s + ' %s %5s %3s \n' % (r'$\delta_s^{MSN}$',
                                str(round(size_MSN_strong, 1)), 'mV')
    s = s + ' %s %5s %3s \n' % (r'$\delta_s^{MSN}$', str(round(
        size_GPE_ref, 1)), 'mV')

    infoString = s

    return SNR, infoString
def simulate_example(I_e):

    simTime = 3000.  # ms

    my_nest.ResetKernel()
    model_list, model_dict = models()
    my_nest.MyLoadModels(model_list, NEURON_MODELS)

    I_e0 = my_nest.GetDefaults(NEURON_MODELS[0])['I_e']
    STN = MyGroup(NEURON_MODELS[0],
                  1,
                  sd=True,
                  mm=True,
                  mm_dt=1.,
                  params={'I_e': I_e + I_e0})
    '''
    scg = my_nest.Create( 'step_current_generator',n=1 )  
    rec=my_nest.GetStatus(STN[:])[0]['receptor_types']
    

    my_nest.SetStatus(scg, {'amplitude_times':[280.,1700.],
                                'amplitude_values':[100.0,0.]})
    my_nest.Connect( scg, STN.ids, 
                         params = { 'receptor_type' : rec['CURR'] } )
    
    '''
    my_nest.MySimulate(simTime)
    STN.get_signal('v', 'V_m', stop=simTime)  # retrieve signal

    STN.get_signal('s')  # retrieve signal
    meanRate = round(STN.signals['spikes'].mean_rate(0, 1000), 1)
    print STN.signals['spikes'].isi()
    STN.signals['V_m'].my_set_spike_peak(21, spkSignal=STN.signals['spikes'])

    s = '\n'
    s = s + 'Example:\n'
    s = s + ' %s %5s %3s %s %5s %3s \n' % ('Mean rate:', meanRate, 'Hz', 'I_e',
                                           I_e, 'pA')

    infoString = s

    return STN, infoString
示例#13
0
def simulate_example_rebound_spike(I_vec):
    
    simTime  = 5000.  # ms
    my_nest.ResetKernel()
    model_list, model_dict=models()
    my_nest.MyLoadModels( model_list, NEURON_MODELS )
    
    n=len(I_vec)
    
    GPE = MyGroup( NEURON_MODELS[0], n, sd=True,  mm=True, mm_dt = 1.0 )
    I_e0=my_nest.GetStatus(GPE[:])[0]['I_e']
    #my_nest.SetStatus(GPE[:], params={'I_e':-10.}) # Set I_e
    my_nest.SetStatus(GPE[:], params={'I_e':-10.}) # Set I_e
    I_e = my_nest.GetStatus(GPE.ids,'I_e')[0]
    scg = my_nest.Create( 'step_current_generator',n=n )  
    rec=my_nest.GetStatus(GPE[:])[0]['receptor_types']
    
    for source, target, I in zip(scg, GPE[:], I_vec):
        my_nest.SetStatus([source], {'amplitude_times':[500.,700.],
                                'amplitude_values':[float(I),0.]})
        my_nest.Connect( [source], [target], 
                         params = { 'receptor_type' : rec['CURR'] } )
    
    
    my_nest.MySimulate(simTime)
    GPE.get_signal( 'v','V_m', stop=simTime ) # retrieve signal
    GPE.get_signal( 's') # retrieve signal
    GPE.signals['V_m'].my_set_spike_peak( 21, spkSignal= GPE.signals['spikes'] )

    
    
    meanRate=round(GPE.signals['spikes'].mean_rate(0,500),1)

    s='\n'
    s =s + 'Example inhibitory current:\n'
    s = s + ' %s %5s %3s %s %5s %3s \n' % ( 'Mean rate:', meanRate,  'Hz', 
                                            'I_e', I_e,'pA' )
    s = s + 'Steps:\n'
    s = s + ' %5s %3s \n' % ( I_vec,  'pA' )
    infoString=s
    
    return GPE, infoString
示例#14
0
def simulate_example_GPE_snr():
    nFun = 0  # Function number
    nSim = 0  # Simulation number within function

    rates = numpy.array([20, 30])
    times = numpy.array([0., 5000.])
    nGPE = 10
    simTime = 10000.
    I_e = 0.

    my_nest.ResetKernel()
    model_list = models()
    my_nest.MyLoadModels(model_list, neuronModels)
    my_nest.MyLoadModels(model_list, synapseModels)

    GPE = MyGroup('spike_generator',
                  nGPE,
                  mm_dt=1.0,
                  mm=False,
                  sd=False,
                  spath=spath,
                  siter=str(nFun) + str(nSim))
    SNR = MyGroup(neuronModels[0],
                  n=len(synapseModels),
                  params={'I_e': I_e},
                  mm_dt=.1,
                  mm=False,
                  spath=spath,
                  siter=str(nFun) + str(nSim))
    nSim += 1
    if not LOAD:
        spikeTimes = []
        for i in range(nGPE):
            spikes = misc.inh_poisson_spikes(rates,
                                             times,
                                             t_stop=simTime,
                                             n_rep=1,
                                             seed=i)
            my_nest.SetStatus([GPE[i]], params={'spike_times': spikes})
            for spk in spikes:
                spikeTimes.append((i, spk))
        # add spike list for GPE to GPE spike list
        GPE.signals['spikes'] = my_signals.MySpikeList(spikeTimes, GPE.ids)
        GPE.save_signal('s')

        for i, syn in enumerate(synapseModels):
            my_nest.ConvergentConnect(GPE[:], [SNR[i]], model=syn)

        my_nest.MySimulate(simTime)
        SNR.save_signal('s')
        SNR.get_signal('s')  # retrieve signal
    elif LOAD:
        GPE.load_signal('s')
        SNR.load_signal('s')

    SNR_rates = [
        SNR.signals['spikes'].mean_rates(0, 5000),
        SNR.signals['spikes'].mean_rates(5000, 10000)
    ]
    for i in range(0, len(SNR_rates)):
        for j in range(0, len(SNR_rates[0])):
            SNR_rates[i][j] = int(SNR_rates[i][j])
    s = '\n'
    s = s + 'Example plot GPE and SNr:\n'
    s = s + 'Synapse models:\n'
    for syn in synapseModels:
        s = s + ' %s\n' % (syn)
    s = s + ' %s %5s %3s \n' % ('N GPE:', str(nGPE), '#')
    s = s + ' %s %5s %3s \n' % ('GPE Rates:',
                                str([str(round(r, 1)) for r in rates]), 'Hz')
    s = s + ' %s %5s %3s \n' % ('\nSNR Rates 0-5000:\n', str(
        SNR_rates[0]), 'Hz')
    s = s + ' %s %5s %3s \n' % ('\nSNR Rates 10000-5000:\n', str(
        SNR_rates[1]), 'Hz')
    s = s + ' %s %5s %3s \n' % ('\nTimes:', str(times), 'ms')
    s = s + ' %s %5s %3s \n' % ('I_e:', str(I_e), 'pA')

    infoString = s

    return GPE, SNR, infoString
def simulate_example_msn_snr():  
    nFun=0  # Function number
    nSim=0  # Simulation number within function
    
    rates=numpy.array([.1,.1])
    times=numpy.array([0.,25000.])
    nMSN =500
    simTime=100000.
    I_e=0.
    
    my_nest.ResetKernel()
    model_list=models()
    my_nest.MyLoadModels( model_list, neuronModels )
    my_nest.MyLoadModels( model_list, synapseModels )

    MSN = MyGroup( 'spike_generator', nMSN, mm_dt=1.0, mm=False, sd=False,
                   spath=spath, 
                   sname_nb=str(nFun)+str(nSim))  
    SNR = MyGroup( neuronModels[0], n=len(synapseModels), params={'I_e':I_e},
                   sd=True,
                   mm_dt = .1, mm=False, spath=spath, 
                   sname_nb=str(nFun)+str(nSim) )
    nSim+=1

    spikeTimes=[]
    for i in range(nMSN):
        spikes=misc.inh_poisson_spikes( rates, times,                        
                                    t_stop=simTime, 
                                    n_rep=1, seed=i )
        my_nest.SetStatus([MSN[i]], params={ 'spike_times':spikes } ) 
        for spk in spikes: spikeTimes.append((i,spk))   
    # add spike list for MSN to MSN spike list
    MSN.signals['spikes'] = my_signals.MySpikeList(spikeTimes, MSN.ids)     
    MSN.save_signal( 's') 
   
    noise=my_nest.Create('noise_generator', params={'std':100.})
    
    my_nest.Connect(noise,[SNR[0]],params={'receptor_type':5})
    my_nest.Connect(noise,[SNR[1]],params={'receptor_type':5})
    my_nest.Connect(noise,[SNR[2]],params={'receptor_type':5})
    
    for i, syn in enumerate(synapseModels):
        my_nest.ConvergentConnect(MSN[:],[SNR[i]], model=syn)
        
    my_nest.MySimulate( simTime )
    SNR.get_signal( 's' ) # retrieve signal




    
    SNR_rates=[SNR.signals['spikes'].mean_rates(0,5000), 
               SNR.signals['spikes'].mean_rates(5000, 10000)]     
    for i in range(0, len(SNR_rates)):      
        for j in range(0, len(SNR_rates[0])):
            SNR_rates[i][j]=int(SNR_rates[i][j])
    s='\n'
    s =s + 'Example plot MSN and SNr:\n' 
    s =s + 'Synapse models:\n'
    for syn in synapseModels:
        s = s + ' %s\n' % (syn )    
    s = s + ' %s %5s %3s \n' % ( 'N MSN:', str ( nMSN ),  '#' )    
    s = s + ' %s %5s %3s \n' % ( 'MSN Rates:',   str ( [str(round(r,1)) 
                                                        for r in rates]),'Hz' )     
    s = s + ' %s %5s %3s \n' % ( '\nSNR Rates 0-5000:\n',   
                                 str ( SNR_rates [0]) ,'Hz' )   
    s = s + ' %s %5s %3s \n' % ( '\nSNR Rates 10000-5000:\n',  
                                  str ( SNR_rates [1]) ,'Hz' )   
    s = s + ' %s %5s %3s \n' % ( '\nTimes:', str ( times), 'ms' )
    s = s + ' %s %5s %3s \n' % ( 'I_e:', str ( I_e ), 'pA' )
    
    infoString=s
 
    return MSN, SNR, infoString
示例#16
0
#! Spike train experiment 1. Train of 8 spikes at 20 Hz and the recovery spike
#! at 550 ms as in Planert 2009
spike_times = range(10, 430, 50)
spike_times.extend([430 + 550])

# input
sgs = my_nest.Create('spike_generator',
                     params={'spike_times': [float(sp) for sp in spike_times]})

syn_model = 'MSN_MSN_gaba_s'
my_nest.Connect(sgs, [MSN[0]], model=syn_model)  # connect MSNs
T = 2000  # simulation time
my_nest.Simulate(T)  # simulate

MSN.get_signal('v', 'V_m')

pylab.close('all')  # display
# Create figure where figsize(width,height) and figure dimenstions window
# width = figsize(width) x dpi and window hight = figsize(hight) x dpi
plot_settings.set_mode(mode='dynamic', w=700.0, h=400.0)
font_size_text = 10
fig = pylab.figure(facecolor='w')
pylab.suptitle('MSN to MSN')

ax_list = []
ax_list.append(MyAxes(fig, [.1, .37, .2, .26]))  # text box
ax_list.append(MyAxes(fig, [.50, .15, .40, .65]))  # voltage trace

ds = my_nest.GetDefaults(syn_model)
sn = my_nest.GetStatus(MSN[:])[0]
示例#17
0
def simulate_GPE_vs_SNR_rate():
    nFun = 1  # Function number
    nSim = 0  # Simulation number within function

    GPEmeanRates = numpy.arange(1, 50, 2)
    SNRmeanRates = []
    nGPE = 10
    simTime = 10000.
    I_e = 0.

    for r in GPEmeanRates:
        my_nest.ResetKernel()
        model_list = models()
        my_nest.MyLoadModels(model_list, neuronModels)
        my_nest.MyLoadModels(model_list, synapseModels)

        GPE = MyGroup('spike_generator',
                      nGPE,
                      mm_dt=1.0,
                      mm=False,
                      sd=False,
                      spath=spath,
                      siter=str(nFun) + str(nSim))
        SNR = MyGroup(neuronModels[0],
                      n=len(synapseModels),
                      params={'I_e': I_e},
                      mm_dt=.1,
                      mm=False,
                      spath=spath,
                      siter=str(nFun) + str(nSim))
        nSim += 1

        if not LOAD:
            spikeTimes = []
            for i in range(nGPE):
                spikes = misc.inh_poisson_spikes(numpy.array([r]),
                                                 numpy.array([0]),
                                                 t_stop=simTime,
                                                 n_rep=1,
                                                 seed=i)
                my_nest.SetStatus([GPE[i]], params={'spike_times': spikes})
                for spk in spikes:
                    spikeTimes.append((i, spk))
            # add spike list for GPE to GPE spike list
            GPE.signals['spikes'] = my_signals.MySpikeList(spikeTimes, GPE.ids)
            GPE.save_signal('s')

            for i, syn in enumerate(synapseModels):
                my_nest.ConvergentConnect(GPE[:], [SNR[i]], model=syn)

            my_nest.MySimulate(simTime)
            SNR.save_signal('s')
            SNR.get_signal('s')  # retrieve signal
        elif LOAD:
            SNR.load_signal('s')

        SNRmeanRates.append(SNR.signals['spikes'].mean_rates(0, simTime))

    SNRmeanRates = numpy.array(SNRmeanRates).transpose()
    GPEmeanRates = numpy.array(GPEmeanRates)

    THR = 2.
    rateAtThr = ''
    for SNRr in SNRmeanRates:
        tmp = str(GPEmeanRates[SNRr >= THR][-1])
        rateAtThr += ' ' + tmp[0:4]

    s = '\n'
    s = s + 'GPE vs SNr rate:\n'
    s = s + ' %s %5s %3s \n' % ('N GPEs:', str(nGPE), '#')
    s = s + ' \n%s \n%5s %3s \n' % ('GPE rates:', str(GPEmeanRates[0]) + '-' +
                                    str(GPEmeanRates[-1]), 'Hz')
    s = s + ' %s %5s %3s \n' % ('Threshold SNr:', str(THR), 'Hz')
    s = s + ' \n%s \n%5s %3s \n' % ('GPE rate at threshold SNr:',
                                    str(rateAtThr), 'Hz')
    s = s + ' \n%s %5s %3s \n' % ('Simulation time:', str(simTime), 'ms')
    s = s + ' %s %5s %3s \n' % ('I_e:', str(I_e), 'pA')
    infoString = s

    return GPEmeanRates, SNRmeanRates, infoString
示例#18
0
def simulate_selection_vs_neurons(selRateInterval=[0.0, 500.0], hz=20):
    sname_nb = hz

    nGPE = 500
    nExp = 5
    if hz > 7:
        nMaxSelected = 60
    else:
        nMaxSelected = 100

    baseRate = 0.1
    selectionRate = hz
    I_e = -5.

    simTime = 3500.
    model_list = models()
    selectionTime = 3000.
    selectionOnset = 500.

    expParams = []
    expIntervals = []

    iSNR = 0
    for syn in SYNAPSE_MODELS:
        for iSel in range(nMaxSelected):
            expIntervals.append([iSNR, iSNR + nExp])
            for iExp in range(nExp):
                expParams.append((syn, iSel, iExp, iSNR))
                iSNR += 1

    synIntervals = []
    iSNR = 0
    for syn in SYNAPSE_MODELS:
        synIntervals.append([iSNR, iSNR + nMaxSelected])
        iSNR += nMaxSelected

    my_nest.ResetKernel()
    my_nest.MyLoadModels(model_list, NEURONMODELS)
    my_nest.MyLoadModels(model_list, SYNAPSE_MODELS)

    SNR = MyGroup(NEURONMODELS[0],
                  n=len(expParams),
                  params={'I_e': I_e},
                  mm_dt=.1,
                  record_from=[''],
                  spath=SPATH,
                  sname_nb=sname_nb)

    sourceBack = []
    sourceSel = []
    for iExp in range(nExp):
        # Background
        tmpSourceBack = []
        for iGPE in range(nGPE - 1):
            spikeTimes = misc.inh_poisson_spikes([baseRate], [1],
                                                 t_stop=simTime,
                                                 n_rep=nExp,
                                                 seed=iGPE + 10 * iExp)

            if any(spikeTimes):
                tmpSourceBack.extend(
                    my_nest.Create('spike_generator',
                                   params={'spike_times': spikeTimes}))
        sourceBack.append(tmpSourceBack)

    if not LOAD:
        for syn, iSel, iExp, iSNR in expParams:
            print 'Connect SNR ' + str(SNR[iSNR]) + ' ' + syn
            target = SNR[iSNR]
            my_nest.ConvergentConnect(sourceBack[iExp][0:nGPE - iSel],
                                      [target],
                                      model=syn)
            my_nest.ConvergentConnect(sourceSel[iExp][0:iSel + 1], [target],
                                      model=syn)

        my_nest.MySimulate(simTime)

        SNR.save_signal('s')
        SNR.get_signal('s')  # retrieve signal

        #SNR.get_signal( 'v','V_m' ) # retrieve signal
        #SNR.signals['V_m'].plot()
        #SNR.signals['spikes'].raster_plot()
        #pylab.show()

    if LOAD:
        SNR.load_signal('s')

        #SNR.get_signal( 'v','V_m', stop=simTime ) # retrieve signal

        #SNR.signals['V_m'].plot(id_list=[5])
        #SNR.['spikes'].raster_plot()
        #pylab.show()
    t1 = selRateInterval[0]
    t2 = selRateInterval[1]

    tmpMeanRates1 = []
    tmpMeanRates2 = []
    tmpMeanRates3 = []
    tmpMeanRates4 = []
    tmpMeanRates1 = SNR.signals['spikes'].mean_rates(selectionOnset + t1,
                                                     selectionOnset + t2)
    for interval in expIntervals:
        tmpMeanRates3.append(
            numpy.mean(tmpMeanRates1[interval[0]:interval[1]], axis=0))

    for interval in synIntervals:
        tmpMeanRates4.append(tmpMeanRates3[interval[0]:interval[1]])

    meanRates = numpy.array(tmpMeanRates4)
    nbNeurons = numpy.arange(1, nMaxSelected + 1, 1)

    s = '\n'
    s = s + ' %s %5s %3s \n' % ('N GPEs:', str(nGPE), '#')
    s = s + ' %s %5s %3s \n' % ('N experiments:', str(nExp), '#')
    s = s + ' %s %5s %3s \n' % ('Base rate:', str(baseRate), 'Hz')
    s = s + ' %s %5s %3s \n' % ('Selection rate:', str(selectionRate), 'Hz')
    s = s + ' %s %5s %3s \n' % ('Selection time:', str(selectionTime), 'ms')
    s = s + ' %s %5s %3s \n' % ('I_e:', str(I_e), 'pA')

    infoString = s

    return nbNeurons, meanRates, infoString
示例#19
0
def simulate_example(hz=0, load=True):
    global NEURON_MODELS
    global SNAME
    global SPATH
    global SYNAPSE_MODELS
    global SEL_ONSET
    global I_E

    N_EXP = 200
    N_GPE = 50
    N_SEL = 30  # Number of selected GPE
    N_INH = 0  # Number of inhibited GPE
    RATE_BASE = 15  # Base rate
    RATE_SELE = hz  # Selection rate
    RATE_INHI = 0
    SAVE_AT = SPATH + '/' + NEURON_MODELS[0] + '-example.pkl'
    SEL_TIME = 20.
    sim_time = SEL_TIME + SEL_ONSET + 800.
    SNAME_NB = hz + 1000

    EXPERIMENTS = range(N_EXP)

    MODEL_LIST = models()
    my_nest.ResetKernel()
    my_nest.MyLoadModels(MODEL_LIST, NEURON_MODELS)
    my_nest.MyLoadModels(MODEL_LIST, SYNAPSE_MODELS)

    GPE_list = []  # GPE input for each experiment
    for i_exp in EXPERIMENTS:
        GPE = MyPoissonInput(n=N_GPE,
                             sd=True,
                             spath=SPATH,
                             sname_nb=SNAME_NB + i_exp)
        GPE_list.append(GPE)

    SNR_list = []  # SNR groups for each synapse
    for i_syn, syn in enumerate(SYNAPSE_MODELS):
        SNR = MyGroup(NEURON_MODELS[0],
                      n=N_EXP,
                      params={'I_e': I_E},
                      sd=True,
                      mm=False,
                      mm_dt=.1,
                      record_from=[''],
                      spath=SPATH,
                      sname_nb=SNAME_NB + i_syn)
        SNR_list.append(SNR)

    if not load:
        for i_exp in EXPERIMENTS:
            GPE = GPE_list[i_exp]

            # Set spike times
            # Base rate
            for id in GPE[:]:
                GPE.set_spike_times(id=id,
                                    rates=[RATE_BASE],
                                    times=[1],
                                    t_stop=sim_time)

            # Selection
            for id in GPE[N_GPE - N_SEL:N_GPE + 1]:
                rates = [RATE_BASE, RATE_SELE, RATE_BASE]
                times = [1, SEL_ONSET, SEL_TIME + SEL_ONSET]
                t_stop = sim_time
                GPE.set_spike_times(id=id,
                                    rates=rates,
                                    times=times,
                                    t_stop=t_stop)

            # Inhibition
            for id in GPE[N_GPE - N_SEL - N_INH:N_GPE + 1 - N_SEL]:
                rates = [RATE_BASE, RATE_INHI, RATE_BASE]
                times = [1, SEL_ONSET, SEL_TIME + SEL_ONSET]
                t_stop = sim_time
                GPE.set_spike_times(id=id,
                                    rates=rates,
                                    times=times,
                                    t_stop=t_stop)

            # Connect
            for i_syn, syn in enumerate(SYNAPSE_MODELS):
                target = SNR_list[i_syn][i_exp]
                my_nest.ConvergentConnect(GPE[:], [target], model=syn)

        my_nest.MySimulate(sim_time)

        for GPE in GPE_list:
            GPE.get_signal('s')
        for SNR in SNR_list:
            SNR.get_signal('s')

        misc.pickle_save([GPE_list, SNR_list], SAVE_AT)

    if load:
        GPE_list, SNR_list = misc.pickle_load(SAVE_AT)

    pre_ref = str(SNR_list[0].signals['spikes'].mean_rate(
        SEL_ONSET - 500, SEL_ONSET))
    pre_dyn = str(SNR_list[2].signals['spikes'].mean_rate(
        SEL_ONSET - 500, SEL_ONSET))

    s = '\n'
    s = s + 'Example:\n'
    s = s + ' %s %5s %3s \n' % ('N experiments:', str(len(EXPERIMENTS)), '#')
    s = s + ' %s %5s %3s \n' % ('Base rate:', str(RATE_BASE), 'Hz')
    s = s + ' %s %5s %3s \n' % ('Selection rate:', str(RATE_SELE), 'Hz')
    s = s + ' %s %5s %3s \n' % ('Selection time:', str(SEL_TIME), 'ms')
    s = s + ' %s %5s %3s \n' % ('Pre sel rate Ref:', pre_ref[0:4], 'Hz')
    s = s + ' %s %5s %3s \n' % ('Pre sel rate Dyn:', pre_dyn[0:4], 'Hz')

    return GPE_list, SNR_list, s
示例#20
0
def simulate_recovery(revoceryTimes, load=True):
    
    # Path were raw data is saved. For example the spike trains.
    save_result_at=OUTPUT_PATH+'/simulate_recovery.pkl'
    save_header_at=OUTPUT_PATH+'/simulate_recovery_header'   
    
    relativeRecovery=[]
    n=len(revoceryTimes)
    if not load:
        for syn in SYNAPSE_MODELS:
            my_nest.ResetKernel()  
            model_list, model_dict=models()     
            my_nest.MyLoadModels( model_list, NEURON_MODELS )
            my_nest.MyLoadModels( model_list, [syn])
            
            ss=my_nest.GetDefaults(syn)       
            synapticEficacy = ss['weight']*ss['U'] 
    
            SNR = MyGroup( NEURON_MODELS[0], n, mm=True, mm_dt = .1, 
                           params={'I_e':-150.}, record_from=['g_AMPA'])
            
            tSim=10000
            spikeTimes=[]
            for rt in revoceryTimes:
                #spikeTimes.append(numpy.array([1.,11.,21.,31.,41.,41+rt]))
                
                # Choosen so that it starts at a pairpulse ration of 0.2 
                spikeTimes.append(numpy.array([1.,11.,21.,31.,41.,
                                               51.,61.,71.,81.,91.,
                                               101.,111.,121.,131.,141.,
                                               151.,161.,171.,181.,191.,
                                               191+rt]))
     
            for target, st in zip(SNR, spikeTimes ) :
       
                source = my_nest.Create('spike_generator', 
                                    params={'spike_times':st} )
                my_nest.SetDefaults(syn, params={'delay':1.})
                my_nest.Connect(source, [target], model=syn)
        
            my_nest.MySimulate(tSim)
            SNR.get_signal( 'g','g_AMPA', stop=tSim ) # retrieve signal
            
            signal=SNR.signals['g_AMPA']
            
            tmpSteadyState=[]
            for i, st in enumerate(spikeTimes, start=1):
                
                if SNR.mm_dt==0.1:  indecies=numpy.int64(numpy.ceil(st*10))+9
                elif SNR.mm_dt==1.: indecies=numpy.int64(numpy.ceil(st))
                
                values=signal[i].signal[indecies]-signal[i].signal[indecies-1]
                
                tmpSteadyState.append(values[-1]/synapticEficacy)
                #tmpSteadyState.append(max(values)/synapticEficacy)
                
            relativeRecovery.append(tmpSteadyState)
            
        relativeRecovery=numpy.array(relativeRecovery)
        
        
        header=HEADER_SIMULATION_SETUP
        misc.text_save(header, save_header_at)    
        misc.pickle_save([revoceryTimes, relativeRecovery], save_result_at)
        

        
    elif load: 
            revoceryTimes, relativeRecovery=misc.pickle_load(save_result_at)
        
    return revoceryTimes, relativeRecovery
示例#21
0
def simulate_MSN_vs_SNR_rate(load=True):
    global SNR_INJECTED_CURRENT
    global N_MSN
    global N_GPE
    global N_STN
    global GPE_BASE_RATE

    # Path were raw data is saved. For example the spike trains.
    save_result_at = OUTPUT_PATH + '/simulate_MSN_vs_SNR_rate.pkl'
    save_header_at = OUTPUT_PATH + '/simulate_MSN_vs_SNR_rate_header'

    MSNmeanRates = numpy.arange(0.1, 3.1, 0.1)
    SNRmeanRates = []

    sim_time = 100000.

    if not load:
        for r in MSNmeanRates:
            my_nest.ResetKernel(threads=3)
            model_list, model_dict = models()
            my_nest.MyLoadModels(model_list, NEURON_MODELS)
            my_nest.MyLoadModels(model_list, SYNAPSE_MODELS_TESTED)
            my_nest.MyLoadModels(model_list, SYNAPSE_MODELS_BACKGROUND)

            MSN = MyPoissonInput(n=N_MSN)
            GPE = MyPoissonInput(n=N_GPE)
            STN = MyPoissonInput(n=N_STN)

            I_e = my_nest.GetDefaults(
                NEURON_MODELS[0])['I_e'] + SNR_INJECTED_CURRENT
            SNR = MyGroup(NEURON_MODELS[0],
                          n=len(SYNAPSE_MODELS_TESTED),
                          params={'I_e': I_e},
                          sd=True)

            for id in MSN[:]:
                MSN.set_spike_times(id=id,
                                    rates=numpy.array([r]),
                                    times=numpy.array([1]),
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random() * 10000.0))

            # Base rate GPE
            for id in GPE[:]:
                GPE.set_spike_times(id=id,
                                    rates=[GPE_BASE_RATE],
                                    times=[1],
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random() * 10000.0))

            # Base rate STN
            for id in STN[:]:
                STN.set_spike_times(id=id,
                                    rates=[STN_BASE_RATE],
                                    times=[1],
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random() * 10000.0))

            for i, syn in enumerate(SYNAPSE_MODELS_TESTED):
                my_nest.ConvergentConnect(MSN[:], [SNR[i]], model=syn)
                my_nest.ConvergentConnect(GPE[:], [SNR[i]],
                                          model=SYNAPSE_MODELS_BACKGROUND[0])
                my_nest.ConvergentConnect(STN[:], [SNR[i]],
                                          model=SYNAPSE_MODELS_BACKGROUND[1])

            my_nest.MySimulate(sim_time)

            SNR.get_signal('s')  # retrieve signal

            SNRmeanRates.append(SNR.signals['spikes'].mean_rates(
                1000.0, sim_time))

        SNRmeanRates = numpy.array(SNRmeanRates).transpose()
        MSNmeanRates = numpy.array(MSNmeanRates)

        rateAtThr = ''
        for SNRr in SNRmeanRates:
            tmp = str(MSNmeanRates[SNRr >= SELECTION_THR][-1])
            rateAtThr += ' ' + tmp[0:4]

        s = '\n'
        s = s + 'simulate_MSN_vs_SNR_rate:\n'
        s = s + ' %s %5s %3s \n' % ('N MSNs:', str(N_MSN), '#')
        s = s + ' \n%s \n%5s %3s \n' % ('MSN rates:', str(
            MSNmeanRates[0]) + '-' + str(MSNmeanRates[-1]), 'spikes/s')
        s = s + ' %s %5s %3s \n' % ('N GPes:', str(N_GPE), '#')
        s = s + ' %s %5s %3s \n' % ('Threshold SNr:', str(SELECTION_THR),
                                    'spikes/s')
        s = s + ' \n%s \n%5s %3s \n' % ('MSN rate right before threshold SNr:',
                                        str(rateAtThr), 'spikes/s')
        s = s + ' \n%s %5s %3s \n' % ('Simulation time:', str(sim_time), 'ms')
        s = s + ' %s %5s %3s \n' % ('Injected current:',
                                    str(SNR_INJECTED_CURRENT), 'pA')
        infoString = s

        header = HEADER_SIMULATION_SETUP + s
        misc.text_save(header, save_header_at)
        misc.pickle_save([MSNmeanRates, SNRmeanRates, infoString],
                         save_result_at)
    elif load:
        MSNmeanRates, SNRmeanRates, infoString = misc.pickle_load(
            save_result_at)

    return MSNmeanRates, SNRmeanRates, infoString
示例#22
0
def simulate_example(hz=0, load=True):
    global SNR_INJECTED_CURRENT
    global NEURON_MODELS
    global N_GPE
    global N_SEL
    global N_MSN
    global N_STN
    global MSN_RATE_BASE
    global STN_BASE_RATE
    global SNAME
    global SPATH
    global SYNAPSE_MODELS
    global SEL_ONSET
    global GPE_BASE_RATE

    #n_exp = 20
    n_exp = 200

    RATE_SELE = hz  # Selection rate
    save_at = SPATH + '/' + NEURON_MODELS[0] + '-example.pkl'

    sim_time = SEL_TIME + SEL_ONSET + 500.
    SNAME_NB = hz + 1000

    experiments = range(n_exp)

    MODEL_LIST = models()
    my_nest.ResetKernel()
    my_nest.MyLoadModels(MODEL_LIST, NEURON_MODELS)
    my_nest.MyLoadModels(MODEL_LIST, SYNAPSE_MODELS_TESTED)
    my_nest.MyLoadModels(MODEL_LIST, SYNAPSE_MODELS_BACKGROUND)

    GPE_list = []  # GPE input for each experiment
    for i_exp in experiments:
        GPE = MyPoissonInput(n=N_GPE,
                             sd=True,
                             spath=SPATH,
                             sname_nb=SNAME_NB + i_exp)
        GPE_list.append(GPE)

    MSN_list = []  # MSN input for each experiment
    for i_exp in experiments:
        MSN = MyPoissonInput(n=N_MSN, sd=False)
        MSN_list.append(MSN)

    STN_list = []  # MSN input for each experiment
    for i_exp in experiments:
        STN = MyPoissonInput(n=N_STN, sd=False)
        STN_list.append(STN)

    SNR_list = []  # SNR groups for each synapse
    I_e = my_nest.GetDefaults(NEURON_MODELS[0])['I_e'] + SNR_INJECTED_CURRENT
    for i_syn in range(len(SYNAPSE_MODELS_TESTED)):
        SNR = MyGroup(NEURON_MODELS[0], n=n_exp, params={'I_e': I_e}, sd=True)
        SNR_list.append(SNR)

    if not load:
        for i_exp in experiments:
            GPE = GPE_list[i_exp]
            MSN = MSN_list[i_exp]
            STN = STN_list[i_exp]

            # Set spike times
            # Base rate MSN
            for id in MSN[:]:
                MSN.set_spike_times(id=id,
                                    rates=[MSN_RATE_BASE],
                                    times=[1],
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random() * 10000.0))
            # Base rate STN
            for id in STN[:]:
                STN.set_spike_times(id=id,
                                    rates=[STN_BASE_RATE],
                                    times=[1],
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random() * 10000.0))

            # Set spike times
            # Base rate
            for id in GPE[0:N_GPE - N_SEL]:
                GPE.set_spike_times(id=id,
                                    rates=[GPE_BASE_RATE],
                                    times=[1],
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random() * 10000.0))

            # Selection
            for id in GPE[N_GPE - N_SEL:N_GPE]:
                rates = [GPE_BASE_RATE, RATE_SELE, GPE_BASE_RATE]
                times = [1, SEL_ONSET, SEL_TIME + SEL_ONSET]
                t_stop = sim_time
                GPE.set_spike_times(id=id,
                                    rates=rates,
                                    times=times,
                                    t_stop=t_stop,
                                    seed=int(numpy.random.random() * 10000.0))

            # Connect
            for i_syn, syn in enumerate(SYNAPSE_MODELS_TESTED):
                target = SNR_list[i_syn][i_exp]
                my_nest.ConvergentConnect(GPE[:], [target], model=syn)
                my_nest.ConvergentConnect(MSN[:], [target],
                                          model=SYNAPSE_MODELS_BACKGROUND[0])
                my_nest.ConvergentConnect(STN[:], [target],
                                          model=SYNAPSE_MODELS_BACKGROUND[1])

        my_nest.MySimulate(sim_time)

        for GPE in GPE_list:
            GPE.get_signal('s')
        for SNR in SNR_list:
            SNR.get_signal('s')

        misc.pickle_save([GPE_list, SNR_list], save_at)

    elif load:
        GPE_list, SNR_list = misc.pickle_load(save_at)

    pre_ref = str(SNR_list[0].signals['spikes'].mean_rate(
        SEL_ONSET - 5000, SEL_ONSET))
    pre_dyn = str(SNR_list[1].signals['spikes'].mean_rate(
        SEL_ONSET - 500, SEL_ONSET))

    statusSynapes = []
    for syn in SYNAPSE_MODELS_TESTED:
        statusSynapes.append(my_nest.GetDefaults(syn))

    s = '\n'
    s = s + 'Example:\n'
    s = s + ' %s %5s %3s \n' % ('N experiments:', str(len(experiments)), '#')
    s = s + ' %s %5s %3s \n' % ('N GPEs:', str(N_GPE), '#')

    s = s + ' %s %5s %3s \n' % ('Base rate:', str(GPE_BASE_RATE), 'spikes/s')
    s = s + ' %s %5s %3s \n' % ('Selection rate:', str(RATE_SELE), 'spikes/s')
    s = s + ' %s %5s %3s \n' % ('Selection time:', str(SEL_TIME), 'ms')
    s = s + ' %s %5s %3s \n' % ('Pre sel rate Ref:', pre_ref[0:4], 'spikes/s')
    s = s + ' %s %5s %3s \n' % ('Pre sel rate Dyn:', pre_dyn[0:4], 'spikes/s')
    for ss in statusSynapes:
        s = s + '\n'
        s = s + ' %s %10s\n' % ('Synapse', ss['synapsemodel'])
        s = s + ' %s %5s %3s\n' % ('Weight', str(round(ss['weight'], 1)), 'nS')

    return GPE_list, SNR_list, s
示例#23
0
def simulate_steady_state_freq(frequencies, flag='ss', load=True):
    
     # Path were raw data is saved. For example the spike trains.
    save_result_at=OUTPUT_PATH+'/simulate_steady_state_freq.pkl'
    save_header_at=OUTPUT_PATH+'/simulate_steady_state_freq_header'   
    
    relativeFacilitation=[]
    n=len(frequencies)
    if not load:    
        for syn in SYNAPSE_MODELS:
            my_nest.ResetKernel()   
            model_list, model_dict=models()    
            my_nest.MyLoadModels( model_list, NEURON_MODELS )
            my_nest.MyLoadModels( model_list, [syn])
            
                    
            SNR = MyGroup( NEURON_MODELS[0], n, mm=True, mm_dt = .1, 
                               params={'I_e':-150.},
                           record_from=['g_AMPA'] )

            tSim=5*1000/frequencies[0]  
            spikeTimes=[]    
            tmpSteadyState=[]    
            for f in frequencies :

                isi  = 1000./f
                spikeTimes.append(numpy.arange(1,tSim,isi))
            
            for target, st in zip(SNR, spikeTimes ) :
                    source = my_nest.Create('spike_generator', 
                                        params={'spike_times':st} )
                    my_nest.SetDefaults(syn, params={'delay':1.})
                    my_nest.Connect(source, [target], model=syn)
            
            my_nest.MySimulate(tSim)
                
            SNR.get_signal( 'g','g_AMPA', stop=tSim ) # retrieve signal
                  
            signal=SNR.signals['g_AMPA']
                
                
            for i, st in enumerate(spikeTimes, start=1):
                    
                    if SNR.mm_dt==0.1:  indecies=numpy.int64(numpy.ceil(st*10))+9
                    elif SNR.mm_dt==1.: indecies=numpy.int64(numpy.ceil(st))
                    
                    values=signal[i].signal[indecies]-signal[i].signal[indecies-1]
                    
                    ss=my_nest.GetDefaults(syn)       
                    synapticEficacy = ss['weight']*ss['U'] 
                    
                    if flag=='ss':  tmpSteadyState.append(values[-1]/synapticEficacy)
                    if flag=='max': tmpSteadyState.append(max(values)/synapticEficacy)
                    
            relativeFacilitation.append(tmpSteadyState)
            
        relativeFacilitation=numpy.array(relativeFacilitation)
        
    
        header=HEADER_SIMULATION_SETUP
        misc.text_save(header, save_header_at)
        misc.pickle_save([frequencies, relativeFacilitation], save_result_at)

        
    elif load: 
            frequencies, relativeFacilitation=misc.pickle_load(save_result_at)
        
    return frequencies, relativeFacilitation
示例#24
0
def simulate_example(hz_1=0., hz_2=100., load=True):
    global I_E
    global NEURON_MODELS
    global N_GPE
    global N_SEL
    global N_MSN
    global N_STN
    global MSN_RATE_BASE
    global STN_RATE_BASE
    global SNAME
    global SPATH
    global SYNAPSE_MODELS
    global SEL_ONSET

    N_EXP = 200

    RATE_BASE = 25  # Base rate
    RATE_SELE_1 = hz_1
    RATE_SELE_2 = hz_2  # Selection rate
    SAVE_AT = SPATH + '/' + NEURON_MODELS[0] + '-example.pkl'
    SEL_TIME_1 = 500.
    SEL_TIME_2 = 200.
    sim_time = SEL_TIME_1 + SEL_TIME_2 + SEL_ONSET + 500.
    SNAME_NB = hz_1 + hz_2 + 1000

    EXPERIMENTS = range(N_EXP)

    MODEL_LIST = models()
    my_nest.ResetKernel()
    my_nest.MyLoadModels(MODEL_LIST, NEURON_MODELS)
    my_nest.MyLoadModels(MODEL_LIST, SYNAPSE_MODELS_TESTED)
    my_nest.MyLoadModels(MODEL_LIST, SYNAPSE_MODELS_BACKGROUND)

    GPE_list = []  # GPE input for each experiment
    for i_exp in EXPERIMENTS:
        GPE = MyPoissonInput(n=N_GPE, sd=True)
        GPE_list.append(GPE)

    MSN_list = []  # MSN input for each experiment
    for i_exp in EXPERIMENTS:
        MSN = MyPoissonInput(n=N_MSN, sd=True)
        MSN_list.append(MSN)

    STN_list = []  # MSN input for each experiment
    for i_exp in EXPERIMENTS:
        STN = MyPoissonInput(n=N_STN, sd=True)
        STN_list.append(STN)

    SNR_list = []  # SNR groups for each synapse
    for i_syn in SYNAPSE_MODELS_TESTED:
        I_e = my_nest.GetDefaults(NEURON_MODELS[0])['I_e'] + I_E
        SNR = MyGroup(NEURON_MODELS[0],
                      n=N_EXP,
                      params={'I_e': I_e},
                      sd=True,
                      mm=False,
                      mm_dt=.1,
                      record_from=[''])
        SNR_list.append(SNR)

    if not load:
        for i_exp in EXPERIMENTS:
            GPE = GPE_list[i_exp]
            MSN = MSN_list[i_exp]
            STN = STN_list[i_exp]

            # Set spike times
            # Base rate MSN
            for id in MSN[:]:
                MSN.set_spike_times(id=id,
                                    rates=[MSN_RATE_BASE],
                                    times=[1],
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random() * 10000.0))

            # Base rate
            for id in GPE[0:N_GPE - N_SEL]:
                GPE.set_spike_times(id=id,
                                    rates=[RATE_BASE],
                                    times=[1],
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random() * 10000.0))
            # Base rate STN
            for id in STN[:]:
                STN.set_spike_times(id=id,
                                    rates=[STN_RATE_BASE],
                                    times=[1],
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random() * 10000.0))

            # Selection
            for id in GPE[N_GPE - N_SEL:N_GPE]:
                rates = [RATE_BASE, RATE_SELE_1, RATE_SELE_2, RATE_BASE]
                times = [
                    1, SEL_ONSET, SEL_ONSET + SEL_TIME_1,
                    SEL_ONSET + SEL_TIME_1 + SEL_TIME_2
                ]
                t_stop = sim_time
                GPE.set_spike_times(id=id,
                                    rates=rates,
                                    times=times,
                                    t_stop=t_stop,
                                    seed=int(numpy.random.random() * 10000.0))

            # Connect
            for i, syn in enumerate(SYNAPSE_MODELS_TESTED):
                target = SNR_list[i][i_exp]
                my_nest.ConvergentConnect(GPE[:], [target], model=syn)
                my_nest.ConvergentConnect(MSN[:], [target],
                                          model=SYNAPSE_MODELS_BACKGROUND[0])
                my_nest.ConvergentConnect(STN[:], [target],
                                          model=SYNAPSE_MODELS_BACKGROUND[1])

        my_nest.MySimulate(sim_time)

        for GPE in GPE_list:
            GPE.get_signal('s')
        for SNR in SNR_list:
            SNR.get_signal('s')

        misc.pickle_save([GPE_list, SNR_list], SAVE_AT)

    elif load:
        GPE_list, SNR_list = misc.pickle_load(SAVE_AT)

    pre_ref = str(SNR_list[0].signals['spikes'].mean_rate(
        SEL_ONSET - 500, SEL_ONSET))
    pre_dyn = str(SNR_list[1].signals['spikes'].mean_rate(
        SEL_ONSET - 500, SEL_ONSET))

    statusSynapes = []
    for syn in SYNAPSE_MODELS_TESTED:
        statusSynapes.append(my_nest.GetDefaults(syn))

    s = '\n'
    s = s + 'Example:\n'
    s = s + ' %s %5s %3s \n' % ('N experiments:', str(len(EXPERIMENTS)), '#')
    s = s + ' %s %5s %3s \n' % ('N GPEs:', str(N_GPE), '#')

    s = s + ' %s %5s %3s \n' % ('Base rate:', str(RATE_BASE), 'spikes/s')
    s = s + ' %s %5s %3s \n' % ('Selection rate:', str(RATE_SELE_1),
                                'spikes/s')
    s = s + ' %s %5s %3s \n' % ('Selection time:', str(SEL_TIME_1), 'ms')
    s = s + ' %s %5s %3s \n' % ('Selection rate:', str(RATE_SELE_2),
                                'spikes/s')
    s = s + ' %s %5s %3s \n' % ('Selection time:', str(SEL_TIME_2), 'ms')

    s = s + ' %s %5s %3s \n' % ('Pre sel rate Ref:', pre_ref[0:4], 'spikes/s')
    s = s + ' %s %5s %3s \n' % ('Pre sel rate Dyn:', pre_dyn[0:4], 'spikes/s')
    for ss in statusSynapes:
        s = s + '\n'
        s = s + ' %s %10s\n' % ('Synapse', ss['synapsemodel'])
        s = s + ' %s %5s %3s\n' % ('Weight', str(round(ss['weight'], 1)), 'nS')

    return GPE_list, SNR_list, s
示例#25
0
    sg[key] = my_nest.Create('spike_generator',
                             params={'spike_times': spikes[key]})

#! Connections
#! ===========
for i, key in enumerate(keys):
    my_nest.Connect(sg[key], [SNR.ids[i]], params={'weight': 1.}, model=syn)

#! Simulate
#! ========
T = int(spikes[keys[0]][-1] + 2000)  # simulation time
my_nest.Simulate(T)  # simulate

#! Plot
#! ====
SNR.get_signal('v', 'g_GABAA_1', stop=T)  # retrieve signal

delay = my_nest.GetDefaults(syn)['delay']
cond_peaks = {}
for id, analog_signal in SNR.signals['g_GABAA_1'].analog_signals.iteritems(
):  # find conductance peaks

    cond_peaks[keys[id - 1]] = []
    for i in spikes[keys[id - 1]]:
        i = int(10 * i) + delay * 10
        valley = numpy.min(analog_signal.signal[i - 20:i + 10])
        cond_peaks[keys[id - 1]].append(
            numpy.max(analog_signal.signal[i - 20:i + 10] - valley))

# Create figure where figsize(width,height) and figure dimenstions window
# width = figsize(width) x dpi and window hight = figsize(hight) x dpi
示例#26
0
def simulate_basa_line_GPe(msn_rate,
                           stn_rate,
                           gpe_rate,
                           n_msn,
                           n_stn,
                           n_gpe,
                           neuron_model,
                           syn_models,
                           gpe_current,
                           sim_time=1000,
                           threads=8):

    model_list, model_dict = models()
    my_nest.ResetKernel(threads=threads)
    my_nest.MyLoadModels(model_dict, neuron_model)
    my_nest.MyLoadModels(model_dict, syn_models)

    SNR_list = []  # List with SNR groups for synapse.

    if n_msn > 0: MSN = MyPoissonInput(n=n_msn, sd=False)
    if n_stn > 0: STN = MyPoissonInput(n=n_stn, sd=False)
    if n_gpe > 0: GPE = MyPoissonInput(n=n_gpe, sd=False)

    if n_msn > 0:
        MSN.set_spike_times(rates=[msn_rate],
                            times=[1],
                            t_stop=sim_time,
                            seed=0)
    if n_stn > 0:
        STN.set_spike_times(rates=[stn_rate],
                            times=[1],
                            t_stop=sim_time,
                            seed=0)
    if n_gpe > 0:
        GPE.set_spike_times(rates=[gpe_rate],
                            times=[1],
                            t_stop=sim_time,
                            seed=0)

    I_e = my_nest.GetDefaults(neuron_model[0])['I_e'] + gpe_current

    GPE_target = MyGroup(neuron_model[0],
                         n=1,
                         sd=True,
                         params={'I_e': I_e},
                         mm_dt=.1,
                         mm=True)

    if n_msn > 0:
        my_nest.Connect(MSN[:],
                        GPE_target[:] * len(MSN[:]),
                        model=syn_models[0])
    if n_stn > 0:
        my_nest.Connect(STN[:],
                        GPE_target[:] * len(STN[:]),
                        model=syn_models[1])
    if n_gpe > 0:
        my_nest.Connect(GPE[:],
                        GPE_target[:] * len(GPE[:]),
                        model=syn_models[2])

    my_nest.MySimulate(sim_time)

    GPE_target.get_signal('s', start=0, stop=sim_time)

    meanRate = round(GPE_target.signals['spikes'].mean_rate(1000, sim_time), 1)
    spk = GPE_target.signals['spikes'].time_slice(1000, sim_time).raw_data()
    CV = numpy.std(numpy.diff(spk[:, 0], axis=0)) / numpy.mean(
        numpy.diff(spk[:, 0], axis=0))

    GPE_target.get_signal('v', recordable='V_m', start=0, stop=sim_time)
    GPE_target.signals['V_m'].my_set_spike_peak(
        15, spkSignal=GPE_target.signals['spikes'])

    pylab.rcParams.update({'path.simplify': False})

    GPE_target.signals['V_m'].plot()
    pylab.title(str(meanRate) + 'Hz, CV=' + str(CV))
    pylab.show()

    return
示例#27
0
def simulate_basa_line_GPe(msn_rate,
                           stn_rate,
                           gpe_rate,
                           n_msn,
                           n_stn,
                           n_gpe,
                           neuron_model,
                           syn_models,
                           gpe_current,
                           sim_time=1000,
                           threads=8,
                           w_GPE_GPE=False,
                           w_STN_GPE=False):

    Params_in = {}
    if w_GPE_GPE: Params_in['GPE_GPE_gaba_s'] = w_GPE_GPE
    if w_STN_GPE: Params_in['STN_GPE_ampa_s'] = w_STN_GPE

    model_list, model_dict = models(Params_in)
    my_nest.ResetKernel(threads=threads)
    my_nest.MyLoadModels(model_dict, neuron_model)
    my_nest.MyLoadModels(model_dict, syn_models)

    SNR_list = []  # List with SNR groups for synapse.

    if n_msn > 0: MSN = MyPoissonInput(n=n_msn, sd=False)
    if n_stn > 0: STN = MyPoissonInput(n=n_stn, sd=False)
    if n_gpe > 0: GPE = MyPoissonInput(n=n_gpe, sd=False)

    if n_msn > 0:
        MSN.set_spike_times(rates=[msn_rate],
                            times=[1],
                            t_stop=sim_time,
                            seed=0)
    if n_stn > 0:
        STN.set_spike_times(rates=[stn_rate],
                            times=[1],
                            t_stop=sim_time,
                            seed=0)
    if n_gpe > 0:
        GPE.set_spike_times(rates=[gpe_rate],
                            times=[1],
                            t_stop=sim_time,
                            seed=0)

    I_e = my_nest.GetDefaults(neuron_model[0])['I_e'] + gpe_current

    GPE_target = MyGroup(neuron_model[0],
                         n=1,
                         sd=True,
                         params={'I_e': I_e},
                         mm_dt=.1,
                         mm=True)

    if n_msn > 0:
        my_nest.Connect(MSN[:],
                        GPE_target[:] * len(MSN[:]),
                        model=syn_models[0])
    if n_stn > 0:
        my_nest.Connect(STN[:],
                        GPE_target[:] * len(STN[:]),
                        model=syn_models[1])
    if n_gpe > 0:
        my_nest.Connect(GPE[:],
                        GPE_target[:] * len(GPE[:]),
                        model=syn_models[2])

    my_nest.MySimulate(sim_time)

    GPE_target.get_signal('s', start=0, stop=sim_time)
    GPE_target.get_signal('v', recordable='V_m', start=0, stop=sim_time)

    return GPE_target
示例#28
0
def simulate_example(load=True):

    global GPE_BASE_RATE
    global FILE_NAME
    global N_GPE
    global N_STN
    global N_MSN_BURST
    global N_MSN
    global NEURON_MODELS
    global OUTPUT_PATH
    global SEL_ONSET
    global SNR_INJECTED_CURRENT
    global SYNAPSE_MODELS_TESTED

    #n_exp =200 # number of experiments
    n_exp = 200  # number of experiments

    # Path were raw data is saved. For example the spike trains.
    save_result_at = OUTPUT_PATH + '/simulate_example.pkl'
    save_header_at = OUTPUT_PATH + '/simulate_example_header'

    burst_time = 500.
    sim_time = SEL_INTERVAL_2[1] + 500

    model_list = models()
    my_nest.ResetKernel(threads=8)
    my_nest.MyLoadModels(model_list, NEURON_MODELS)
    my_nest.MyLoadModels(model_list, SYNAPSE_MODELS_TESTED)
    my_nest.MyLoadModels(model_list, SYNAPSE_MODELS_BACKGROUND)

    SNR_list = []  # List with SNR groups for synapse.
    if not load:
        MSN_base = MyPoissonInput(n=N_MSN_BASE * n_exp)
        MSN_burst = MyPoissonInput(n=N_MSN_BURST * n_exp)
        GPE = MyPoissonInput(n=N_GPE * n_exp, sd=True)
        STN = MyPoissonInput(n=N_STN * n_exp, sd=True)

        # Set spike times MSN and GPe
        # Non bursting MSNs
        for id in MSN_base[:]:
            seed = numpy.random.random_integers(0, 1000000.0)
            MSN_base.set_spike_times(id=id,
                                     rates=[MSN_BASE_RATE],
                                     times=[1],
                                     t_stop=sim_time,
                                     seed=seed)

        # Background GPe
        for id in GPE[:]:
            seed = numpy.random.random_integers(0, 1000000.0)
            GPE.set_spike_times(id=id,
                                rates=[GPE_BASE_RATE],
                                times=[1],
                                t_stop=sim_time,
                                seed=seed)
        # Background STN
        for id in STN[:]:
            seed = numpy.random.random_integers(0, 1000000.0)
            STN.set_spike_times(id=id,
                                rates=[STN_BASE_RATE],
                                times=[1],
                                t_stop=sim_time,
                                seed=seed)

        # Bursting MSNs
        for id in MSN_burst[:]:
            rates = [
                MSN_BASE_RATE, MSN_BURST_RATE, MSN_BASE_RATE, MSN_BURST_RATE,
                MSN_BASE_RATE
            ]
            times = [
                1, SEL_INTERVAL_1[0], SEL_INTERVAL_1[1], SEL_INTERVAL_2[0],
                SEL_INTERVAL_2[1]
            ]
            t_stop = sim_time
            seed = numpy.random.random_integers(0, 1000000.0)

            MSN_burst.set_spike_times(id=id,
                                      rates=rates,
                                      times=times,
                                      t_stop=t_stop,
                                      seed=seed)

        for i_syn in range(len(SYNAPSE_MODELS_TESTED)):

            I_e = my_nest.GetDefaults(
                NEURON_MODELS[0])['I_e'] + SNR_INJECTED_CURRENT
            SNR = MyGroup(NEURON_MODELS[0],
                          n=n_exp,
                          sd=True,
                          params={'I_e': I_e},
                          mm_dt=.1,
                          record_from=[''])

            SNR_list.append(SNR)

        # Connect, experiment specific
        sources_MSN_SNR_base = numpy.arange(0, n_exp * N_MSN_BASE)
        sources_MSN_SNR_burst = numpy.arange(0, n_exp * N_MSN_BURST)

        targets_MSN_SNR_base = numpy.mgrid[0:n_exp, 0:N_MSN_BASE][0].reshape(
            1, N_MSN_BASE * n_exp)[0]
        targets_MSN_SNR_burst = numpy.mgrid[0:n_exp, 0:N_MSN_BURST][0].reshape(
            1, N_MSN_BURST * n_exp)[0]

        sources_GPE_SNR = numpy.arange(0, n_exp * N_GPE)
        targets_GPE_SNR = numpy.mgrid[0:n_exp,
                                      0:N_GPE][0].reshape(1, N_GPE * n_exp)[0]

        sources_STN_SNR = numpy.arange(0, n_exp * N_STN)
        targets_STN_SNR = numpy.mgrid[0:n_exp,
                                      0:N_STN][0].reshape(1, N_STN * n_exp)[0]

        for i_syn, syn in enumerate(SYNAPSE_MODELS_TESTED):
            syn = SYNAPSE_MODELS_TESTED[i_syn]
            SNR = SNR_list[i_syn]
            my_nest.Connect(MSN_base[sources_MSN_SNR_base],
                            SNR[targets_MSN_SNR_base],
                            model=syn)
            my_nest.Connect(MSN_burst[sources_MSN_SNR_burst],
                            SNR[targets_MSN_SNR_burst],
                            model=syn)
            my_nest.Connect(GPE[sources_GPE_SNR],
                            SNR[targets_GPE_SNR],
                            model=SYNAPSE_MODELS_BACKGROUND[0])
            my_nest.Connect(STN[sources_STN_SNR],
                            SNR[targets_STN_SNR],
                            model=SYNAPSE_MODELS_BACKGROUND[1])

        my_nest.MySimulate(sim_time)

        for SNR in SNR_list:
            SNR.get_signal('s', start=0, stop=sim_time)

        pre_ref_1 = str(SNR_list[0].signals['spikes'].mean_rate(
            SEL_ONSET - 500, SEL_ONSET))
        burst_1 = str(SNR_list[0].signals['spikes'].mean_rate(
            SEL_ONSET, SEL_ONSET + 200))
        burst_2 = str(SNR_list[0].signals['spikes'].mean_rate(
            SEL_ONSET + 1000, SEL_ONSET + 1200))
        s = '\n'
        s = s + 'Simulate example:\n'
        s = s + '%s %5s %3s \n' % ('Simulation time', str(sim_time), '#')
        s = s + '%s %5s %3s \n' % ('N experiments:', str(n_exp), '#')
        s = s + '%s %5s %3s \n' % ('MSN base rate:', str(MSN_BASE_RATE),
                                   'spikes/s')
        s = s + '%s %5s %3s \n' % ('MSN burst rate:', str(MSN_BURST_RATE),
                                   'spikes/s')
        s = s + '%s %5s %3s \n' % ('GPe rate:', str(GPE_BASE_RATE), 'spikes/s')
        s = s + '%s %5s %3s \n' % ('Burst time:', str(burst_time), 'ms')
        s = s + '%s %5s %3s \n' % ('Pre sel rate Ref:', pre_ref_1[0:4],
                                   'spikes/s')
        s = s + '%s %5s %3s \n' % ('Burst 1:', burst_1[0:4], 'spikes/s')
        s = s + '%s %5s %3s \n' % ('Burst 2:', burst_2[0:4], 'spikes/s')
        header = s
        misc.text_save(header, save_header_at)
        misc.pickle_save([SNR_list, s], save_result_at)

    else:
        SNR_list, s = misc.pickle_load(save_result_at)

    return SNR_list, s
def simulate_example(load=True):

    global SNR_INJECTED_CURRENT
    global NEURON_MODELS
    global N_GPE
    global N_MSN_BURST
    global N_MSN
    global GPE_BASE_RATE
    global FILE_NAME
    global OUTPUT_PATH
    global SYNAPSE_MODELS_TESTED
    global SEL_ONSET

    #n_exp =200 # number of experiments
    n_exp = 20  # number of experiments

    # Path were raw data is saved. For example the spike trains.
    save_result_at = OUTPUT_PATH + '/' + FILE_NAME + '-simulate_example.pkl'
    save_header_at = OUTPUT_PATH + '/' + FILE_NAME + '-simulate_example_header'

    burst_time = 500.
    sim_time = burst_time + SEL_ONSET + 1000.

    MODEL_LIST = models()
    my_nest.ResetKernel()
    my_nest.MyLoadModels(MODEL_LIST, NEURON_MODELS)
    my_nest.MyLoadModels(MODEL_LIST, SYNAPSE_MODELS_TESTED)
    my_nest.MyLoadModels(MODEL_LIST, SYNAPSE_MODELS_BACKGROUND)

    SNR_list = []  # List with SNR groups for synapse.
    if not load:
        MSN_base = MyPoissonInput(n=N_MSN_BASE * n_exp, sd=True)
        MSN_burst = MyPoissonInput(n=N_MSN_BURST * n_exp, sd=True)
        GPE = MyPoissonInput(n=N_GPE * n_exp, sd=True)

        # Set spike times MSN and GPe
        # Non bursting MSNs

        for id in MSN_base[:]:
            seed = numpy.random.random_integers(0, 1000000.0)
            MSN_base.set_spike_times(id=id,
                                     rates=[MSN_BASE_RATE],
                                     times=[1],
                                     t_stop=sim_time,
                                     seed=seed)

        # Background GPe
        for id in GPE[:]:
            seed = numpy.random.random_integers(0, 1000000.0)
            GPE.set_spike_times(id=id,
                                rates=[GPE_BASE_RATE],
                                times=[1],
                                t_stop=sim_time,
                                seed=seed)

        # Bursting MSNs
        for id in MSN_burst[:]:
            rates = [MSN_BASE_RATE, MSN_BURST_RATE, MSN_BASE_RATE]
            times = [1, SEL_ONSET, burst_time + SEL_ONSET]
            t_stop = sim_time
            seed = numpy.random.random_integers(0, 1000000.0)

            MSN_burst.set_spike_times(id=id,
                                      rates=rates,
                                      times=times,
                                      t_stop=t_stop,
                                      seed=seed)

        for i_syn in range(len(SYNAPSE_MODELS_TESTED)):

            params = []
            I_e = my_nest.GetDefaults(
                NEURON_MODELS[0])['I_e'] + SNR_INJECTED_CURRENT
            for i in range(n_exp):
                #params.append({'I_e':numpy.random.normal(I_e,
                #                                         0.1*I_e)})
                params.append({'I_e': I_e})

            #{'I_e':SNR_INJECTED_CURRENT}
            SNR = MyGroup(NEURON_MODELS[0],
                          n=n_exp,
                          sd=True,
                          params=params,
                          mm_dt=.1,
                          record_from=[''])

            SNR_list.append(SNR)

        # Connect, experiment specific
        sources_MSN_SNR_base = numpy.arange(0, n_exp * N_MSN_BASE)
        sources_MSN_SNR_burst = numpy.arange(0, n_exp * N_MSN_BURST)

        targets_MSN_SNR_base = numpy.mgrid[0:n_exp, 0:N_MSN_BASE][0].reshape(
            1, N_MSN_BASE * n_exp)[0]
        targets_MSN_SNR_burst = numpy.mgrid[0:n_exp, 0:N_MSN_BURST][0].reshape(
            1, N_MSN_BURST * n_exp)[0]

        sources_GPE_SNR = numpy.arange(0, n_exp * N_GPE)
        targets_GPE_SNR = numpy.mgrid[0:n_exp,
                                      0:N_GPE][0].reshape(1, N_GPE * n_exp)[0]

        for i_syn, syn in enumerate(SYNAPSE_MODELS_TESTED):
            syn = SYNAPSE_MODELS_TESTED[i_syn]
            SNR = SNR_list[i_syn]
            my_nest.Connect(MSN_base[sources_MSN_SNR_base],
                            SNR[targets_MSN_SNR_base],
                            model=syn)
            my_nest.Connect(MSN_burst[sources_MSN_SNR_burst],
                            SNR[targets_MSN_SNR_burst],
                            model=syn)
            my_nest.Connect(GPE[sources_GPE_SNR],
                            SNR[targets_GPE_SNR],
                            model=SYNAPSE_MODELS_BACKGROUND[0])

        my_nest.MySimulate(sim_time)

        MSN_base.get_signal('s', start=0, stop=sim_time)
        MSN_burst.get_signal('s', start=0, stop=sim_time)

        for SNR in SNR_list:
            SNR.get_signal('s', start=0, stop=sim_time)

        # Get firing rates of MSNs
        MSN_firing_rates = []

        MSN_all = copy.deepcopy(MSN_base)
        MSN_all.merge(MSN_burst)

        time_bin = 20.
        groups = [MSN_base, MSN_burst, MSN_all]
        for group in groups:
            timeAxis, firingRates = group.signals['spikes'].my_firing_rate(
                bin=time_bin, display=False)
            MSN_firing_rates.append([timeAxis, firingRates])

        # Pick out spikes for burst, base and all to use in scatter plot
        MSN_spikes_and_ids = []

        g1 = MSN_burst.slice(MSN_burst[0:N_MSN_BURST])
        g2 = MSN_base.slice(MSN_base[0:N_MSN_BASE])

        ids_MSN_burst = range(450, 450 + N_MSN_BURST)
        ids_MSN_base = [id for id in range(N_MSN) if id not in IDS_MSN_BURST]

        # Rename ids for plotting purpose

        g1_dict = dict([[id1, id2] for id1, id2 in zip(g1.ids, ids_MSN_burst)])
        g2_dict = dict([[id1, id2] for id1, id2 in zip(g2.ids, ids_MSN_base)])

        groups = [g1, g2]
        dics = [g1_dict, g2_dict]
        for group, dic in zip(groups, dics):
            raw_data = group.signals['spikes'].raw_data()
            for i in range(raw_data.shape[0]):
                raw_data[i, 1] = dic[raw_data[i, 1]]
            MSN_spikes_and_ids.append(raw_data)

        #times, binned_data=MSN_base.signals['spikes'].binned_raw_data(0, sim_time, res=1, clip=0)
        #filtered_binned_data=misc.time_resolved_rate(binned_data, 100, kernel_type='triangle', res=1)

        pre_ref_1 = str(SNR_list[0].signals['spikes'].mean_rate(
            SEL_ONSET - 500, SEL_ONSET))
        pre_ref_2 = str(SNR_list[1].signals['spikes'].mean_rate(
            SEL_ONSET - 500, SEL_ONSET))
        pre_dyn = str(SNR_list[2].signals['spikes'].mean_rate(
            SEL_ONSET - 500, SEL_ONSET))

        s = '\n'
        s = s + 'Simulate example:\n'
        s = s + '%s %5s %3s \n' % ('N experiments:', str(n_exp), '#')
        s = s + '%s %5s %3s \n' % ('Bin size MSN hz:', str(time_bin), 'ms')
        s = s + '%s %5s %3s \n' % ('MSN base rate:', str(MSN_BASE_RATE), 'Hz')
        s = s + '%s %5s %3s \n' % ('MSN burst rate:', str(MSN_BURST_RATE),
                                   'Hz')
        s = s + '%s %5s %3s \n' % ('GPe rate:', str(GPE_BASE_RATE), 'Hz')
        s = s + '%s %5s %3s \n' % ('Burst time:', str(burst_time), 'ms')
        s = s + '%s %5s %3s \n' % ('Pre sel rate Ref:', pre_ref_1[0:4], 'Hz')
        s = s + '%s %5s %3s \n' % ('Pre sel rate Ref:', pre_ref_2[0:4], 'Hz')
        s = s + '%s %5s %3s \n' % ('Pre sel rate Dyn:', pre_dyn[0:4], 'Hz')

        header = HEADER_SIMULATION_SETUP + s

        misc.pickle_save([MSN_firing_rates, MSN_spikes_and_ids, SNR_list, s],
                         save_result_at)
        misc.text_save(header, save_header_at)

    else:
        MSN_firing_rates, MSN_spikes_and_ids, SNR_list, s = misc.pickle_load(
            save_result_at)

    return MSN_firing_rates, MSN_spikes_and_ids, SNR_list, s
def simulate_example(MSN_hz=20, GPE_hz=0, load=True, n_gpe_sel=3, sel_time_GPE=500):
    global GPE_BASE_RATE
    global STN_BASE_RATE
    global MSN_BASE_RATE
    global MSN_BURST_TIME

    global NEURON_MODELS
    global N_GPE
    global N_STN
    global N_MSN
    global N_MSN_BURST

    global SNAME
    global SPATH
    global SYNAPSE_MODELS
    global SEL_ONSET
    global SNR_INJECTED_CURRENT
    
    n_exp = 200
   
    msn_rate_sel = MSN_hz # Selection rate     
    gpe_sel_rate = GPE_hz # Selection rate     

    sel_time_MSN = MSN_BURST_TIME
    sim_time = sel_time_MSN+SEL_ONSET+500.
    
    EXPERIMENTS=range(n_exp)
    
    MODEL_LIST=models()
    my_nest.ResetKernel()       
    my_nest.MyLoadModels( MODEL_LIST, NEURON_MODELS )
    my_nest.MyLoadModels( MODEL_LIST, SYNAPSE_MODELS)      
    my_nest.MyLoadModels( MODEL_LIST, SYNAPSE_MODELS_BACKGROUND)       
 
    
    MSN_list=[] # MSN input for each experiment
    for i_exp in EXPERIMENTS:
        MSN = MyPoissonInput( n=N_MSN+N_MSN_BURST, sd=True)
        MSN_list.append(MSN)
 
    GPE_list=[] # GPE input for each experiment
    for i_exp in EXPERIMENTS:
        GPE = MyPoissonInput( n=N_GPE+n_gpe_sel, sd=True)
        GPE_list.append(GPE)

    STN_list=[] # GPE input for each experiment
    for i_exp in EXPERIMENTS:
        STN = MyPoissonInput( n=N_STN, sd=True)
        STN_list.append(GPE)

    
    SNR_list=[] # SNR groups for each synapse
    
    
    for i, SNR_i_c in enumerate(SNR_INJECTED_CURRENT):
        I_e=my_nest.GetDefaults(NEURON_MODELS[0])['I_e']+SNR_i_c    
        SNR = MyGroup( NEURON_MODELS[0], n=n_exp, params={'I_e':I_e}, 
                       sd=True, mm=False,
                       mm_dt=.1, record_from=[''])
        SNR_list.append(SNR)

   
    if not load:
        for i_exp in EXPERIMENTS:    
            
            # MSN
            MSN = MSN_list[i_exp]
            
            # Set spike times
            # Base rate
            for id in MSN[0:N_MSN]:                 
                MSN.set_spike_times(id=id, rates=[MSN_BASE_RATE], times=[1], 
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random()*10000.0))               
      
            # Selection MSN        
            for id in MSN[N_MSN:N_MSN+N_MSN_BURST]: 
                rates = [MSN_BASE_RATE, msn_rate_sel, MSN_BASE_RATE]
                times = [1, SEL_ONSET, sel_time_MSN + SEL_ONSET]
                t_stop = sim_time
                MSN.set_spike_times(id=id, rates=rates, times=times, 
                                    t_stop=t_stop, 
                                    seed=int(numpy.random.random()*10000.0))     
        
     
            # GPE
            GPE = GPE_list[i_exp]
            
            # Set spike times
            # Base rate
            for id in GPE[:]:                 
                GPE.set_spike_times(id=id, rates=[GPE_BASE_RATE], times=[1], 
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random()*10000.0))               
      
            # Selection GPE        
            for id in GPE[N_GPE:N_GPE+n_gpe_sel]: 
                rates = [GPE_BASE_RATE, gpe_sel_rate, GPE_BASE_RATE]
                
                # If GPe excited smaller selection time
                times = [1, SEL_ONSET, sel_time_GPE + SEL_ONSET]
                t_stop = sim_time
                GPE.set_spike_times(id=id, rates=rates, times=times, 
                                    t_stop=t_stop, seed=int(numpy.random.random()*100000.0))     

            # Base rate STN
            for id in STN[:]:                 
                STN.set_spike_times(id=id, rates=[STN_BASE_RATE], times=[1], 
                                    t_stop=sim_time,
                                    seed=int(numpy.random.random()*10000.0))     
                
            idx_MSN_s=range(0,N_MSN-N_MSN_BURST)
            idx_MSN_s.extend(range(N_MSN,N_MSN+N_MSN_BURST))
            idx_GPE_s=range(0,N_GPE-n_gpe_sel)
            idx_GPE_s.extend(range(N_GPE,N_GPE+n_gpe_sel))
            
            # Connect with MSN burst         
            target=SNR_list[0][i_exp]
            my_nest.ConvergentConnect(MSN[idx_MSN_s], [target], model=SYNAPSE_MODELS[0])
            my_nest.ConvergentConnect(GPE[0:N_GPE], [target], model=SYNAPSE_MODELS[1])               
            my_nest.ConvergentConnect(STN[:], [target], model=SYNAPSE_MODELS_BACKGROUND[0]) 
      
            # With GPe pause
            target=SNR_list[1][i_exp]
            my_nest.ConvergentConnect(MSN[0:N_MSN], [target], model=SYNAPSE_MODELS[0])
            my_nest.ConvergentConnect(GPE[idx_GPE_s], [target], model=SYNAPSE_MODELS[1])                
            my_nest.ConvergentConnect(STN[:], [target], model=SYNAPSE_MODELS_BACKGROUND[0]) 
            
            # With MSN burst and GPe pause
            target=SNR_list[2][i_exp]
            my_nest.ConvergentConnect(MSN[idx_MSN_s], [target], model=SYNAPSE_MODELS[0])
            my_nest.ConvergentConnect(GPE[idx_GPE_s], [target], model=SYNAPSE_MODELS[1])         
            my_nest.ConvergentConnect(STN[:], [target], model=SYNAPSE_MODELS_BACKGROUND[0]) 
                      
        my_nest.MySimulate( sim_time )

        for MSN in MSN_list: 
            MSN.get_signal( 's' )      
        for GPE in GPE_list: 
            GPE.get_signal( 's' )   
        for SNR in SNR_list: 
            SNR.get_signal( 's' ) 

        misc.pickle_save([MSN_list, GPE_list,SNR_list] , save_at)

    if load:
        MSN_list, GPE_list, SNR_list=misc.pickle_load(save_at)
        
    pre_dyn_MSN=str(SNR_list[0].signals['spikes'].mean_rate(SEL_ONSET-500,
                                                            SEL_ONSET)) 
    pre_dyn_GPE=str(SNR_list[1].signals['spikes'].mean_rate(SEL_ONSET-500,
                                                            SEL_ONSET))   
      
    s='\n'
    s=s+'Example:\n'
    s = s + ' %s %5s %3s \n' % ( 'N experiments:', str ( len(EXPERIMENTS) ),  '#' )  
    s = s + ' %s %5s %3s \n' % ( 'N MSN:', str ( N_MSN ),  '#' )  
    s = s + ' %s %5s %3s \n' % ( 'N GPE:', str ( N_GPE ),  '#' )  
    s='\n'
    s = s + ' %s %5s %3s \n' % ( 'Base rate MSN:',   str ( MSN_BASE_RATE),'spikes/s' )     
    s = s + ' %s %5s %3s \n' % ( 'Sel rate MSN:', str ( msn_rate_sel ), 'spikes/s' )
    s = s + ' %s %5s %3s \n' % ( 'Sel time MSN:', str ( sel_time_MSN ), 'ms' )
    s='\n'
    s = s + ' %s %5s %3s \n' % ( 'Base rate GPe:',   str ( GPE_BASE_RATE),'spikes/s' )   
    s = s + ' %s %5s %3s \n' % ( 'Sel rate GPe:', str ( gpe_sel_rate ), 'spikes/s' )  
    s = s + ' %s %5s %3s \n' % ( 'Sel time GPe:', str ( sel_time_GPE ), 'ms' )
    s = s + ' %s %5s %3s \n' % ( 'Pre sel rate Dyn MSN:', pre_dyn_MSN[0:4], 'spikes/s' )
    s = s + ' %s %5s %3s \n' % ( 'Pre sel rate Dyn GPe:', pre_dyn_GPE[0:4], 'spikes/s' )
      
    return MSN_list, GPE_list, SNR_list, s

    info_string=s
    
    return MSN_hzs, GPE_hzs, data, info_string
示例#31
0
def simulate_basa_line_SNr(msn_rate,
                           gpe_rate,
                           stn_rate,
                           n_msn,
                           n_gpe,
                           n_stn,
                           neuron_model,
                           snr_current,
                           sim_time=1000,
                           threads=8,
                           stn_syn='STN_SNR_ampa_s'):

    SNR_INJECTED_CURRENT = snr_current
    SYNAPSE_MODEL_BACKROUND_STN = [stn_syn]

    model_list, model_dict = models()
    my_nest.ResetKernel(threads=threads)
    my_nest.MyLoadModels(model_dict, neuron_model)
    my_nest.MyLoadModels(model_dict, SYNAPSE_MODEL_BACKROUND_MSN)
    my_nest.MyLoadModels(model_dict, SYNAPSE_MODEL_BACKROUND_GPE)
    my_nest.MyLoadModels(model_dict, SYNAPSE_MODEL_BACKROUND_STN)

    SNR_list = []  # List with SNR groups for synapse.

    if n_msn > 0: MSN_base = MyPoissonInput(n=n_msn, sd=True)
    if n_gpe > 0: GPE = MyPoissonInput(n=n_gpe, sd=False)
    if n_stn > 0: STN = MyPoissonInput(n=n_stn, sd=False)

    if n_msn > 0:
        MSN_base.set_spike_times(rates=[msn_rate],
                                 times=[1],
                                 t_stop=sim_time,
                                 seed=0)
    if n_gpe > 0:
        GPE.set_spike_times(rates=[gpe_rate],
                            times=[1],
                            t_stop=sim_time,
                            seed=0)
    if n_stn > 0:
        STN.set_spike_times(rates=[stn_rate],
                            times=[1],
                            t_stop=sim_time,
                            seed=0)

    I_e = my_nest.GetDefaults(neuron_model[0])['I_e'] + SNR_INJECTED_CURRENT

    SNR = MyGroup(neuron_model[0],
                  n=1,
                  sd=True,
                  params={'I_e': I_e},
                  mm_dt=.1,
                  mm=True)

    if n_msn > 0:
        my_nest.Connect(MSN_base[:],
                        SNR[:] * len(MSN_base[:]),
                        model=SYNAPSE_MODEL_BACKROUND_MSN[0])
    if n_gpe > 0:
        my_nest.Connect(GPE[:],
                        SNR[:] * len(GPE[:]),
                        model=SYNAPSE_MODEL_BACKROUND_GPE[0])
    if n_stn > 0:
        my_nest.Connect(STN[:],
                        SNR[:] * len(STN[:]),
                        model=SYNAPSE_MODEL_BACKROUND_STN[0])

    my_nest.MySimulate(sim_time)

    SNR.get_signal('s', start=0, stop=sim_time)

    meanRate = round(SNR.signals['spikes'].mean_rate(1000, sim_time), 1)
    spk = SNR.signals['spikes'].time_slice(1000, sim_time).raw_data()
    CV = numpy.std(numpy.diff(spk[:, 0], axis=0)) / numpy.mean(
        numpy.diff(spk[:, 0], axis=0))

    SNR.get_signal('v', recordable='V_m', start=0, stop=sim_time)
    SNR.signals['V_m'].my_set_spike_peak(15, spkSignal=SNR.signals['spikes'])
    pylab.rcParams.update({'path.simplify': False})
    SNR.signals['V_m'].plot()
    pylab.title(str(meanRate) + 'Hz, CV=' + str(CV))
    pylab.show()

    return
def simulate_get_rates(msn_burst_rate=20, load=True, len_ms=500.):

    n_exp = 50
    sim_time = DP['SEL_TIME'] + DP['SEL_ONSET'] + 1000.

    experiments = range(n_exp)

    model_list = models()
    my_nest.ResetKernel()
    my_nest.MyLoadModels(model_list, DP['NEURON_MODELS'])
    my_nest.MyLoadModels(model_list, DP['SYNAPSE_MODELS_TESTED'])
    my_nest.MyLoadModels(model_list, DP['SYNAPSE_MODELS_BACKGROUND'])

    MSN_list = []  # MSN input for each experiment
    for i_exp in experiments:
        MSN = MyPoissonInput(n=DP['N_MSN'], sd=True)
        MSN_list.append(MSN)

    GPE_list = []  # GPE input for each experiment
    for i_exp in experiments:
        GPE = MyPoissonInput(n=DP['N_GPE'], sd=True)
        GPE_list.append(GPE)

    SNR_list = []  # SNR groups for each synapse
    for i_syn, syn in enumerate(DP['SYNAPSE_MODELS_TESTED']):

        I_e = my_nest.GetDefaults(
            DP['NEURON_MODELS'][0])['I_e'] + DP['SNR_INJECTED_CURRENT'][i_syn]
        SNR = MyGroup(DP['NEURON_MODELS'][0],
                      n=n_exp,
                      sd=True,
                      params={'I_e': I_e})
        SNR_list.append(SNR)

    for i_exp in experiments:
        MSN = MSN_list[i_exp]
        GPE = GPE_list[i_exp]

        # Set spike times
        # Base rate
        for id in MSN[1:DP['N_MSN']]:
            MSN.set_spike_times(id=id,
                                rates=[DP['MSN_BASE_RATE']],
                                times=[1],
                                t_stop=sim_time,
                                seed=int(numpy.random.random() * 10000.0))

        # Set spike times
        # Base rate
        for id in GPE[:]:
            GPE.set_spike_times(id=id,
                                rates=[DP['GPE_BASE_RATE']],
                                times=[1],
                                t_stop=sim_time,
                                seed=int(numpy.random.random() * 10000.0))

        # Selection
        for id in MSN[DP['N_MSN'] - DP['N_MSN_BURST'] - 50:DP['N_MSN'] - 50]:
            rates = [DP['MSN_BASE_RATE'], msn_burst_rate, DP['MSN_BASE_RATE']]
            times = [1, DP['SEL_ONSET'], DP['SEL_TIME'] + DP['SEL_ONSET']]
            t_stop = sim_time
            MSN.set_spike_times(id=id,
                                rates=rates,
                                times=times,
                                t_stop=t_stop,
                                seed=int(numpy.random.random() * 10000.0))

        # Connect
        for i_syn, syn in enumerate(DP['SYNAPSE_MODELS_TESTED']):
            target = SNR_list[i_syn][i_exp]
            my_nest.ConvergentConnect(MSN[:], [target], model=syn)
            my_nest.ConvergentConnect(GPE[:], [target],
                                      model=DP['SYNAPSE_MODELS_BACKGROUND'][0])

    my_nest.MySimulate(sim_time)

    for SNR in SNR_list:
        SNR.get_signal('s')

    rate_ref_1 = str(SNR_list[0].signals['spikes'].mean_rate(
        DP['SEL_ONSET'], DP['SEL_ONSET'] + len_ms))
    rate_ref_2 = str(SNR_list[1].signals['spikes'].mean_rate(
        DP['SEL_ONSET'], DP['SEL_ONSET'] + len_ms))
    rate_dyn = str(SNR_list[2].signals['spikes'].mean_rate(
        DP['SEL_ONSET'], DP['SEL_ONSET'] + len_ms))

    return [rate_ref_1, rate_ref_2, rate_dyn]