Пример #1
0
def exercise4_curve(tau_refrac):
  hugs = p.Population(1, cellclass=p.IF_cond_exp)
  hugs.set("tau_refrac", tau_refrac)
  start = 100.
  stop = 1100.
  frequency = []
  currentSpace = linspace(0.1,5.0,50)
  for current in currentSpace:
    hugs.record()
    hugs.record_v()
    dcsource = p.DCSource(amplitude=current, start=start, stop=stop)
    dcsource.inject_into(hugs)
    p.run(1100.)
    spikes = hugs.getSpikes()
    frequency.append(len(spikes) / (stop - start))
    print(current, frequency[-1])
    p.reset() 
  return currentSpace, frequency
Пример #2
0
def sim(trial):
    global direction
    global inspikes
    global outspikes
    global outspikes2
    global outvolts
    direction=0
    #print direction
    p.reset()
    #for direction in dirs:
    for n in range(len(neuron)):
      neuron[n].set('spike_times',DATA[direction][n][trial])

    p.run(2000)

    outspikes=[0,0]
    outspikes2=[]
    outvolts=[]
    for i,o in enumerate(out):
        outspikes[i]=o.get_spike_counts().values()[0]
        outspikes2.append(o.getSpikes())
        outvolts.append(o.get_v())
    inspikes=[0,0,0,0,0]

    for i,n in enumerate(neuron):
        inspikes[i]=n.get_spike_counts().values()[0]
        
    """  
    fig = figure()
    ax = fig.add_subplot(1,1,1)
    hold(True)
    for i in range(nout):
        ax.plot(outspikes2[i][:,1],i*ones_like(outspikes2[i][:,1]),'b|')
    ax.set_ylim(-6,5)
    for i in range(nneurons):
   
#    ax.plot(DATA[direction][i][trial],-1-i*ones_like(DATA[direction][i][trial]),'r|')
        inspikes2=neuron[i].getSpikes()
        ax.plot(inspikes2,-1-i*ones_like(inspikes2),'r|')
    #ax2=fig.add_subplot(2,1,2)
    #ax2.plot(outvolts[0][:,1],outvolts[0][:,2])
    """
    return inspikes,outspikes
def exercise2():
    hugs = p.Population(1, cellclass=p.HH_cond_exp)
    start = 100.0
    stop = 1100.0
    frequency = []
    currentSpace = linspace(0.1, 10, 100)
    for current in currentSpace:
        hugs.record()
        hugs.record_v()
        dcsource = p.DCSource(amplitude=current, start=start, stop=stop)
        dcsource.inject_into(hugs)
        p.run(1100.0)
        spikes = hugs.getSpikes()
        frequency.append(len(spikes) / (stop - start))
        p.reset()
    plot(currentSpace, frequency)
    xlabel("Current/nA")
    ylabel("Frequency/kHz")
    savefig("../output/day4_figure2.png")
    show()
def subplot(v_rest = -65.0, out = '../output/day5figure1.png'):
    figure(figsize=(12, 10))

    suptitle('Threshold: ' + str(v_rest) +'mV')

    epspPot, econdGsyn, epspSpikes = exercise1(v_rest)
    p.reset()
    p.reset()
    ipspPot, icondGsyn, ipspSpikes = exercise2(v_rest)

    plt.subplot(2,2,1)
    plot(epspPot[:,1], epspPot[:,2])
    plot(epspSpikes[:,1], [max(epspPot[:,2])]*len(epspSpikes), '|', color='r', markersize=20.0)
    xlabel('Time/ms')
    ylabel('Membrane potential/mV')
    title('EPSPs after excitatory postsynaptic signal')

    plt.subplot(2,2,2)
    plot(ipspPot[:,1], ipspPot[:,2])
    plot(ipspSpikes[:,1], [max(ipspPot[:,2])]*len(ipspSpikes), '|', color='r', markersize=20.0)
    xlabel('Time/ms')
    ylabel('Membrane potential/mV')
    title('IPSPs after inhibitory presynaptic signal')

    plt.subplot(2,2,3)
    plot(econdGsyn[:,1], econdGsyn[:,2])
    plot(epspSpikes[:,1], [max(econdGsyn[:,2])]*len(epspSpikes), '|', color='r', markersize=20.0)
    xlabel('Time/ms')
    ylabel(u'Excitatory conductance/\u00B5S')

    plt.subplot(2,2,4)
    plot(icondGsyn[:,1], icondGsyn[:,3])
    plot(ipspSpikes[:,1], [max(icondGsyn[:,3])]*len(ipspSpikes), '|', color='r',markersize=20.0)
    xlabel('Time/ms')
    ylabel(u'Inhibitory conductance/\u00B5S')

    savefig(out)

    draw()
    show()
Пример #5
0
def exercise2():
  figure(figsize=(10,6))

  hugs = p.Population(1, cellclass=p.HH_cond_exp)
  start = 100.
  stop = 1100.
  frequency = []
  currentSpace = linspace(0.1,10,100)
  for current in currentSpace:
    hugs.record()
    hugs.record_v()
    dcsource = p.DCSource(amplitude=current, start=start, stop=stop)
    dcsource.inject_into(hugs)
    p.run(1100.)
    spikes = hugs.getSpikes()
    frequency.append(len(spikes) / (stop - start))
    p.reset() 
  plot(currentSpace, frequency)
  title('Current-frequency diagram for a HH model neuron')
  xlabel('Current/nA')
  ylabel('Frequency/kHz')
  savefig('../output/day4_figure2.png')
  show()
def exercise5(tau_m, v_thresh=-55.0):
    hugs = p.Population(1, cellclass=p.IF_cond_exp)
    hugs.set("tau_refrac", 2.0)
    hugs.set("tau_m", tau_m)
    hugs.set("v_thresh", v_thresh)

    start = 100.0
    stop = 400.0

    dcsource = p.DCSource(amplitude=0.95, start=start, stop=stop)
    dcsource.inject_into(hugs)

    hugs.record()
    hugs.record_v()

    p.run(500.0)

    pot = hugs.get_v()
    spikes = hugs.getSpikes()

    p.reset()

    return pot, spikes, (stop - start)
Пример #7
0
import pyNN.neuron as sim  # can of course replace `nest` with `neuron`, `brian`, etc.
import matplotlib.pyplot as plt
from quantities import nA

sim.setup()

cell = sim.Population(1, sim.HH_cond_exp())
step_current = sim.DCSource(start=20.0, stop=80.0)
step_current.inject_into(cell)

cell.record('v')

for amp in (-0.2, -0.1, 0.0, 0.1, 0.2):
    step_current.amplitude = amp
    sim.run(100.0)
    sim.reset(annotations={"amplitude": amp * nA})

data = cell.get_data()

sim.end()

for segment in data.segments:
    vm = segment.analogsignals[0]
    plt.plot(vm.times, vm,
             label=str(segment.annotations["amplitude"]))
plt.legend(loc="upper left")
plt.xlabel("Time (%s)" % vm.times.units._dimensionality)
plt.ylabel("Membrane potential (%s)" % vm.units._dimensionality)

plt.show()
import scipy.io as io

from pylab import *
import numpy as np
import pyNN.neuron as p

p.setup(timestep=0.1)
p.reset()
import NeuroTools.stgen as nts


# initialise DATA
data1 = io.loadmat('/home/bude/k0018000/NEUROprojekt/bootstrap_joe093-3-C3-MO.mat')['GDFcell'][0]
data2 = io.loadmat('/home/bude/k0018000/NEUROprojekt/bootstrap_joe108-7-C3-MO.mat')['GDFcell'][0]
data3 = io.loadmat('/home/bude/k0018000/NEUROprojekt/bootstrap_joe112-5-C3-MO.mat')['GDFcell'][0]
data4 = io.loadmat('/home/bude/k0018000/NEUROprojekt/bootstrap_joe112-6-C3-MO.mat')['GDFcell'][0]
data5 = io.loadmat('/home/bude/k0018000/NEUROprojekt/bootstrap_joe145-4-C3-MO.mat')['GDFcell'][0]
data = [data1, data2, data3, data4, data5]

ndirections = 6
nneurons = 5
ntrials = 30

DATA = [[[array([]) for i in range(ntrials)] for i in range(nneurons)] for i in range(ndirections)]
for i in range(ndirections):
    for j in range(nneurons):
        for k in range(ntrials):
            DATA[i][j][k]=data[j][i][data[j][i][:,0]==k+1,1]
            DATA[i][j][k].sort()
Пример #9
0
import pyNN.neuron as sim  # can of course replace `nest` with `neuron`, `brian`, etc.
import matplotlib.pyplot as plt
from quantities import nA

sim.setup()

cell = sim.Population(1, sim.HH_cond_exp())
step_current = sim.DCSource(start=20.0, stop=80.0)
step_current.inject_into(cell)

cell.record('v')

for amp in (-0.2, -0.1, 0.0, 0.1, 0.2):
    step_current.amplitude = amp
    sim.run(100.0)
    sim.reset(annotations={"amplitude": amp * nA})

data = cell.get_data()

sim.end()

for segment in data.segments:
    vm = segment.analogsignals[0]
    plt.plot(vm.times, vm, label=str(segment.annotations["amplitude"]))
plt.legend(loc="upper left")
plt.xlabel("Time (%s)" % vm.times.units._dimensionality)
plt.ylabel("Membrane potential (%s)" % vm.units._dimensionality)

plt.show()
def simulate():
    global direction
    global inspikes
    global outspikes
    global outspikes2
    global outvolts
    global prj
    print "Simulating..."
    # set inputs
    for ntrial in range(ntrials):
	for direction in dirs:
	    print "Training direction:", direction, ", trial:", ntrial+1
	    print "Reading data:"
	    trainingset = [DATA[direction][nneuron][ntrial] for nneuron in range(nneurons)]
	    trainingset = [trainingset[i][startstimulus < trainingset[i]] for i in range(nneurons)]
	    trainingset = [trainingset[i][trainingset[i] < endstimulus] for i in range(nneurons)]

	    # run simulation
	    p.reset()
	    for o in out:
		o.record()
		o.record_v()
	    for i, neuron in enumerate(neurons):
		neuron.set('spike_times', trainingset[i])
		#neuron[nneuron].set('spike_times',arange(1,1901,100))
		neuron.record()

	    p.run(2000)

	    outSpikeTimes = [[] for i in range(nout)]
	    outvolts = [[] for i in range(nout)]
	    ## plot spike trains
	    #fig = figure()
	    #hold(True)
	    #ax = fig.add_subplot(1,1,1)
	    #title("Direction "+str(direction)+", Trial "+str(ntrial+1))
	    for j, o in enumerate(out):
		spikes = list(o.getSpikes()[:,1])
		#print j, spikes, len(spikes), type(spikes)
		outSpikeTimes[j] = spikes
		outvolts[j] = o.get_v()
		print "--------------------------------"
		#print j, outSpikeTimes[j], len(outSpikeTimes[j])
		
		#ax.plot(outSpikeTimes[j], [j]*len(outSpikeTimes[j]), 'b|', markersize = 20.)

	    inspikes=[0 for i in range(nneurons)]
	    outspikes=[0 for i in range(nout)]
	    outspikes2=[]
	    outvolts=[]
	    for i,o in enumerate(out):
		outspikes[i] = o.get_spike_counts().values()[0]
		#outspikes2.append(o.getSpikes())
		outvolts.append(o.get_v())

	    for i,neuron in enumerate(neurons):
		inspikes[i] = neurons[i].get_spike_counts().values()[0]
		#print inspikes[i]

	    def learn():
		global direction
		global inspikes
		global outspikes
		global outspikes2
		global outvolts
		print "Learning..."
		#-----------------------------------------------------
		def updateWeights():
		    global direction
		    global inspikes
		    global outspikes
		    global outspikes2
		    global outvolts
		    global prj
		    print "outspikes:", outspikes
		    print "Updating..."
		    adjust=0.02
		    negadjust=0.02
		    nmax=inspikes.index(max(inspikes))
		    if (outspikes[0]<outspikes[1]) and (direction==dirs[1]):
			prj[2*nmax+1].setWeights(prj[2*nmax+1].getWeights()[0]+adjust)
			print 'correct 0'
			print "Updated to:", prj[2*nmax+1].getWeights()
		    elif (outspikes[0]>outspikes[1]) and (direction==dirs[0]): 
			prj[2*nmax+0].setWeights(prj[2*nmax+0].getWeights()[0]+adjust)
			print 'correct 3'
			print "Updated to:", prj[2*nmax+0].getWeights()
		    elif (outspikes[0]>=outspikes[1]) and (direction==dirs[1]):
			print 'wrong 0'
			prj[2*nmax+0].setWeights(max(0,prj[2*nmax+0].getWeights()[0]-negadjust))
			print "Updated to:", prj[2*nmax+0].getWeights()
		    elif (outspikes[0]<=outspikes[1]) and (direction==dirs[0]):
			prj[2*nmax+1].setWeights(max(0,prj[2*nmax+1].getWeights()[0]-negadjust))
			print 'wrong 3' 
			print "Updated to:", prj[2*nmax+1].getWeights()
		    else:
			print 'no 5'
		    print
		updateWeights()
		#-----------------------------------------------------
		for p in prj:
		    currentWeight = p.getWeights()[0]
		    print direction, ntrial, p, currentWeight

	    learn()
    goodWeights = [pr.getWeights() for i, pr in enumerate(prj)]
    print "goodWeights:", goodWeights 
    pickle.dump(goodWeights, open("goodWeightsFile.pkl", "wb"))
def validate():
    global direction
    global inspikes
    global outspikes
    global outspikes2
    global outvolts
    global prj
    
    prj = []
    for i in range(nneurons):
	for j in range(nout):
	    prj.append(p.Projection(neurons[i], out[j], target="excitatory",method=p.AllToAllConnector()))
	    prj[-1].setWeights(initweight)
    goodWeights = pickle.load(open("goodWeightsFile.pkl"))
    for i, pr in enumerate(prj):
	print goodWeights[i], pr
	pr.setWeights(goodWeights[i])
    print "Validating..."
    # set inputs
    for ntrial in range(ntrials, ntrials+nindependents):
	for direction in dirs:
	    print "Checking direction:", direction, ", trial:", ntrial+1
	    print "Reading data:"
	    trainingset = [DATA[direction][nneuron][ntrial] for nneuron in range(nneurons)]
	    trainingset = [trainingset[i][startstimulus < trainingset[i]] for i in range(nneurons)]
	    trainingset = [trainingset[i][trainingset[i] < endstimulus] for i in range(nneurons)]
	    #import pdb; pdb.set_trace()

	    # run simulation
	    p.reset()
	    for o in out:
		o.record()
		o.record_v()
	    for i, neuron in enumerate(neurons):
		neuron.set('spike_times', trainingset[i])
		#neuron[nneuron].set('spike_times',arange(1,1901,100))
		neuron.record()

	    p.run(2000)

	    outSpikeTimes = [[] for i in range(nout)]
	    outvolts = [[] for i in range(nout)]
	    ## plot spike trains
	    #fig = figure()
	    #hold(True)
	    #ax = fig.add_subplot(1,1,1)
	    #title("Direction "+str(direction)+", Trial "+str(ntrial+1))
	    for j, o in enumerate(out):
		spikes = list(o.getSpikes()[:,1])
		#print j, spikes, len(spikes), type(spikes)
		outSpikeTimes[j] = spikes
		outvolts[j] = o.get_v()
		#print j, outSpikeTimes[j], len(outSpikeTimes[j])
		
		#ax.plot(outSpikeTimes[j], [j]*len(outSpikeTimes[j]), 'b|', markersize = 20.)

	    inspikes=[0 for i in range(nneurons)]
	    outspikes=[0 for i in range(nout)]
	    outspikes2=[]
	    outvolts=[]
	    for i,o in enumerate(out):
		outspikes[i] = o.get_spike_counts().values()[0]
		#outspikes2.append(o.getSpikes())
		outvolts.append(o.get_v())
	    print "outspikes:", outspikes

	    for i,neuron in enumerate(neurons):
		inspikes[i] = neurons[i].get_spike_counts().values()[0]
		#print inspikes[i]

	    def check():
		global direction
		global inspikes
		global outspikes
		global outspikes2
		global outvolts
		print "Learning..."
		#-----------------------------------------------------
		def printWeights():
		    global direction
		    global inspikes
		    global outspikes
		    global outspikes2
		    global outvolts
		    global prj
		    print "outspikes:", outspikes
		    adjust=0.02
		    negadjust=0.02
		    nmax=inspikes.index(max(inspikes))
		    if (outspikes[0]<outspikes[1]) and (direction==dirs[1]):
			print 'correct 0'
		    elif (outspikes[0]>outspikes[1]) and (direction==dirs[0]): 
			print 'correct 3'
		    elif (outspikes[0]>=outspikes[1]) and (direction==dirs[1]):
			print 'wrong 0'
		    elif (outspikes[0]<=outspikes[1]) and (direction==dirs[0]):
			print 'wrong 3' 
		    else:
			print 'no 5'
		    print
		printWeights()
		#-----------------------------------------------------
		for p in prj:
		    currentWeight = p.getWeights()[0]
		    print direction, ntrial, p, currentWeight

	    check()
def LatInhibCircuit(weights = 0.5):
    inp1Num = 10
    inp2Num = 10
    inh1Num = 10
    inh2Num = 10

    inh1 = p.Population(inh1Num, cellclass=p.IF_cond_exp)
    inh2 = p.Population(inh2Num, cellclass=p.IF_cond_exp)
    inp1 = p.Population(inp1Num, cellclass=p.IF_cond_exp)
    inp2 = p.Population(inp2Num, cellclass=p.IF_cond_exp)
    p1 = p.Population(inp1Num, cellclass=p.SpikeSourcePoisson)
    p2 = p.Population(inp2Num, cellclass=p.SpikeSourcePoisson)
    rate1 = 300./inp1Num
    rate2 = 600./inp2Num
    p1.set('rate', rate1)
    p2.set('rate', rate2)

    p1ToInp1 = p.Projection(p1, inp1, target='excitatory', method=p.OneToOneConnector())
    p2ToInp2 = p.Projection(p2, inp2, target='excitatory', method=p.OneToOneConnector())
    inp1toInh1 = p.Projection(inp1, inh1, target='excitatory', method=p.OneToOneConnector())
    inp2toInh2 = p.Projection(inp2, inh2, target='excitatory', method=p.OneToOneConnector())
    inh1ToInp2 = p.Projection(inh1, inp2, target='inhibitory', method=p.OneToOneConnector())
    inh2ToInp1 = p.Projection(inh2, inp1, target='inhibitory', method=p.OneToOneConnector())

    p1ToInp1.setWeights(0.05)
    p2ToInp2.setWeights(0.05)
    inp1toInh1.setWeights(weights)
    inp2toInh2.setWeights(weights)
    inh1ToInp2.setWeights(0.5)
    inh2ToInp1.setWeights(0.5)

    p1.record()
    p2.record()
    inp1.record()
    inp2.record()
    inh1.record()
    inh2.record()
    inh1.record_v()
    inh2.record_v()
    inp1.record_v()
    inp2.record_v()

    p.run(duration)

    inp1V = inp1.get_v()
    inp1Vtmp = [np.array(inp1V[inp1V[:,0] == 0][:,2])]
    for index in range(1,inp1Num):
        inp1Vtmp = np.append(inp1Vtmp, [inp1V[inp1V[:,0] == index][:,2]], axis=0)
    inp1Av = np.mean(inp1Vtmp, 0)

    inp2V = inp2.get_v()
    inp2Vtmp = [np.array(inp2V[inp2V[:,0] == 0][:,2])]
    for index in range(1,inp2Num):
        inp2Vtmp = np.append(inp2Vtmp, [inp2V[inp2V[:,0] == index][:,2]], axis=0)
    inp2Av = np.mean(inp2Vtmp, 0)

    inh1V = inh1.get_v()
    inh1Vtmp = [np.array(inh1V[inh1V[:,0] == 0][:,2])]
    for index in range(1,inh1Num):
        inh1Vtmp = np.append(inh1Vtmp, [inh1V[inh1V[:,0] == index][:,2]], axis=0)
    inh1Av = np.mean(inh1Vtmp, 0)

    inh2V = inh2.get_v()
    inh2Vtmp = [np.array(inh2V[inh2V[:,0] == 0][:,2])]
    for index in range(1,inh2Num):
        inh2Vtmp = np.append(inh2Vtmp, [inh2V[inh2V[:,0] == index][:,2]], axis=0)
    inh2Av = np.mean(inh2Vtmp, 0)

    figure()
    subplot(2,2,1)
    plot(inp1Av)
    plot(p1.getSpikes()[:,1] / timestep, [max(inp1Av)]*len(p1.getSpikes()), '|', markersize=20.0)

    subplot(2,2,2)
    plot(inp2Av)
    plot(p2.getSpikes()[:,1] / timestep, [max(inp2Av)]*len(p2.getSpikes()), '|', markersize=20.0)

    subplot(2,2,3)
    plot(inh1Av)

    subplot(2,2,4)
    plot(inh2Av)
    

    draw()
    show()

    numSpikes1 = len(inp1.getSpikes())
    numSpikes2 = len(inp2.getSpikes())
    rateOut1 = numSpikes1/duration
    rateOut2 = numSpikes2/duration

    kappaIn = (rate1-rate2)/(rate1+rate2)
    kappaOut = (rateOut1-rateOut2)/(rateOut1+rateOut2)

    p.reset()

    return abs(kappaIn), abs(kappaOut)