from pylab import * from numpy import * from copy import copy dt = 0.5e-5 # simulation time step du = 0.07 # bin size for u-histograms urange = arange(-0.5,1.0+du,du) # range of possible u values nbins = len(urange) def index_of(u): return [ i for i in range(0,nbins) if (urange[i]<=u and urange[i+1]>u) ][0] # LIF tau = 10e-3 # membrane time constant theta = urange[nbins-1] # firing threshold itheta = nbins-1 reset = 0.0 # reset potential ireset = index_of(reset) i0 = 0.8 # constant applied current nu = 0.8e3 # shot noise frequency w = 0.07 # absolute jump size epsilon = 1 # w/du ratio # simulation of a pool of LIF neurons def lif_simulate(u,new_u): for i in range(0,len(u)): current_u = u[i] if (rand() < (nu*dt)): current_u = current_u + w # shot noise (excitatory) if (rand() < (nu*dt)): current_u = current_u - w # shot noise (excitatory) if current_u > theta: # test threshold current_u = reset new_u[i] = current_u + (dt/tau)*(i0-current_u) # LIF dynamics # numerical integration def normalize(v,dv): return v / (dv*sum(v)) diff = zeros((nbins,nbins),float) for i in range(0,nbins-1): diff[i+1,i] = -1.0/2.0/du ; diff[i,i+1] = 1.0/2.0/du def integrate(pu): dpu = dot(diff,pu) activity = (1/tau)*(-theta+i0)*pu[itheta] + nu*du*sum(pu[(itheta-epsilon+1):nbins]) puminusw = zeros(nbins) puplusw = zeros(nbins) for i in range(0,nbins): j = i-epsilon k = i+epsilon if ((j>=0) and (j=0) and (k