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
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()
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)
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()
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)