def __init__(self, filterbank, targetvar, *args, **kwds): self.targetvar = targetvar self.filterbank = filterbank filterbank.buffer_init() # update level keyword kwds['level'] = kwds.get('level', 0)+1 # Sanitize the clock - does it have the right dt value? if 'clock' in kwds: if int(1/kwds['clock'].dt)!=int(filterbank.samplerate): raise ValueError('Clock should have 1/dt=samplerate') else: kwds['clock'] = Clock(dt=1/filterbank.samplerate) buffersize = kwds.pop('buffersize', 32) if not isinstance(buffersize, int): buffersize = int(buffersize*self.samplerate) self.buffersize = buffersize self.buffer_pointer = buffersize self.buffer_start = -buffersize NeuronGroup.__init__(self, filterbank.nchannels, *args, **kwds) @network_operation(when='start', clock=self.clock) def apply_filterbank_output(): if self.buffer_pointer>=self.buffersize: self.buffer_pointer = 0 self.buffer_start += self.buffersize self.buffer = self.filterbank.buffer_fetch(self.buffer_start, self.buffer_start+self.buffersize) setattr(self, targetvar, self.buffer[self.buffer_pointer, :]) self.buffer_pointer += 1 self.contained_objects.append(apply_filterbank_output)
def __init__(self, params=zheng_params, network=None): eqs=Equations(''' G_total : siemens G_total_exc : siemens cmr_o : 1 cb : 1 g : 1 c_ab : 1 cb_0 : 1 g_0 : 1 ''') NeuronGroup.__init__(self, 1, model=eqs, compile=True, freeze=True) self.params=params self.c_ab=self.params.c_ab self.cb_0=self.params.cb_0 self.g_0=self.params.g_0 self.cb=self.cb_0 self.g=self.g_0 if network is not None: self.G_total = linked_var(network, 'g_syn', func=sum) self.G_total_exc = linked_var(network, 'g_syn_exc', func=sum)
def __init__(self, filterbank, targetvar, *args, **kwds): self.targetvar = targetvar self.filterbank = filterbank filterbank.buffer_init() # update level keyword kwds['level'] = kwds.get('level', 0) + 1 # Sanitize the clock - does it have the right dt value? if 'clock' in kwds: if int(1 / kwds['clock'].dt) != int(filterbank.samplerate): raise ValueError('Clock should have 1/dt=samplerate') else: kwds['clock'] = Clock(dt=1 / filterbank.samplerate) buffersize = kwds.pop('buffersize', 32) if not isinstance(buffersize, int): buffersize = int(buffersize * self.samplerate) self.buffersize = buffersize self.buffer_pointer = buffersize self.buffer_start = -buffersize NeuronGroup.__init__(self, filterbank.nchannels, *args, **kwds) @network_operation(when='start', clock=self.clock) def apply_filterbank_output(): if self.buffer_pointer >= self.buffersize: self.buffer_pointer = 0 self.buffer_start += self.buffersize self.buffer = self.filterbank.buffer_fetch( self.buffer_start, self.buffer_start + self.buffersize) setattr(self, targetvar, self.buffer[self.buffer_pointer, :]) self.buffer_pointer += 1 self.contained_objects.append(apply_filterbank_output)
def __init__(self, params=zheng_params, network=None): eqs = Equations(''' G_total : siemens G_total_exc : siemens cmr_o : 1 cb : 1 g : 1 c_ab : 1 cb_0 : 1 g_0 : 1 ''') NeuronGroup.__init__(self, 1, model=eqs, compile=True, freeze=True) self.params = params self.c_ab = self.params.c_ab self.cb_0 = self.params.cb_0 self.g_0 = self.params.g_0 self.cb = self.cb_0 self.g = self.g_0 if network is not None: self.G_total = linked_var(network, 'g_syn', func=sum) self.G_total_exc = linked_var(network, 'g_syn_exc', func=sum)
def __init__(self, pyramidal_group, clock=defaultclock): eqs = Equations(''' LFP : amp ''') NeuronGroup.__init__(self, 1, model=eqs, compile=True, freeze=True, clock=clock) self.LFP = linked_var(pyramidal_group, 'I_abs', func=sum)
def __init__(self, clock, params=default_params, network=None): eqs = Equations(''' G_total : siemens G_total_exc : siemens ds/dt=eta*(G_total-G_base)/G_base-s/tau_s-(f_in-1.0)/tau_f : 1 df_in/dt=s/second : 1 dv/dt=1/tau_o*(f_in-f_out) : 1 f_out=v**(1.0/alpha) : 1 o_e=1-(1-e_base)**(1/f_in) : 1 dq/dt=1/tau_o*((f_in*o_e/e_base)-f_out*q/v) : 1 y=v_base*((k1+k2)*(1-q)-(k2+k3)*(1-v)) : 1 G_base : siemens eta : 1/second tau_s : second tau_f : second alpha : 1 tau_o : second e_base : 1 v_base : 1 k1 : 1 k2 : 1 k3 : 1 ''') NeuronGroup.__init__(self, 1, model=eqs, clock=clock, compile=True, freeze=True) self.params = params self.G_base = params.G_base self.eta = params.eta self.tau_s = params.tau_s self.tau_f = params.tau_f self.alpha = params.alpha self.tau_o = params.tau_o self.e_base = params.e_base self.v_base = params.v_base self.k1 = params.k1 self.params.s_e = params.s_e_0 * exp(-params.TE / params.T_2E) self.params.s_i = params.s_i_0 * exp(-params.TE / params.T_2I) self.params.beta = self.params.s_e / self.params.s_i self.k2 = self.params.beta * params.r_0 * self.e_base * params.TE self.k3 = self.params.beta - 1 self.f_in = 1 self.s = 0 self.v = 1 self.q = 1 if network is not None: self.G_total = linked_var(network, 'g_syn', func=sum) self.G_total_exc = linked_var(network, 'g_syn_exc', func=sum)
def __init__(self, clock, params=default_params, network=None): eqs=Equations(''' G_total : siemens G_total_exc : siemens ds/dt=eta*(G_total-G_base)/G_base-s/tau_s-(f_in-1.0)/tau_f : 1 df_in/dt=s/second : 1 dv/dt=1/tau_o*(f_in-f_out) : 1 f_out=v**(1.0/alpha) : 1 o_e=1-(1-e_base)**(1/f_in) : 1 dq/dt=1/tau_o*((f_in*o_e/e_base)-f_out*q/v) : 1 y=v_base*((k1+k2)*(1-q)-(k2+k3)*(1-v)) : 1 G_base : siemens eta : 1/second tau_s : second tau_f : second alpha : 1 tau_o : second e_base : 1 v_base : 1 k1 : 1 k2 : 1 k3 : 1 ''') NeuronGroup.__init__(self, 1, model=eqs, clock=clock, compile=True, freeze=True) self.params=params self.G_base=params.G_base self.eta=params.eta self.tau_s=params.tau_s self.tau_f=params.tau_f self.alpha=params.alpha self.tau_o=params.tau_o self.e_base=params.e_base self.v_base=params.v_base self.k1=params.k1 self.params.s_e=params.s_e_0*exp(-params.TE/params.T_2E) self.params.s_i=params.s_i_0*exp(-params.TE/params.T_2I) self.params.beta=self.params.s_e/self.params.s_i self.k2=self.params.beta*params.r_0*self.e_base*params.TE self.k3=self.params.beta-1 self.f_in=1 self.s=0 self.v=1 self.q=1 if network is not None: self.G_total = linked_var(network, 'g_syn', func=sum) self.G_total_exc = linked_var(network, 'g_syn_exc', func=sum)
def __init__(self, pyramidal_group, clock=defaultclock): eqs=Equations(''' LFP : amp ''') NeuronGroup.__init__(self, 1, model=eqs, compile=True, freeze=True, clock=clock) self.LFP=linked_var(pyramidal_group, 'I_abs', func=sum)
def __init__(self, clock, params=zheng_params, network=None): eqs=Equations(''' G_total : siemens G_total_exc : siemens ds/dt=eta*(G_total-G_base)/G_base-s/tau_s-(f_in-1.0)/tau_f : 1 df_in/dt=s/second : 1.0 dv/dt=1/tau_o*(f_in-f_out) : 1 f_out=v**(1.0/alpha) : 1 do_e/dt=1.0/(phi/f_in)*(-o_e+(1.0-g)*(1.0-(1.0-e_base/(1.0-g_0))**(1.0/f_in))) : %.4f dcb/dt=1.0/(phi/f_in)*(-cb-(c_ab*o_e)/oe_log+c_ab*g) : 1 oe_log : 1 cmr_o=(cb-g*c_ab)/(cb_0-g_0*c_ab) : 1 dg/dt=1.0/(j*v_ratio*((r*transitTime)/e_base))*((cmr_o-1.0)-k*s) : %.4f dq/dt=1/tau_o*((f_in*o_e/e_base)-f_out*q/v) : 1 y=v_0*((k1+k2)*(1-q)-(k2+k3)*(1-v)) : 1 G_base : siemens eta : 1/second tau_s : second tau_f : second alpha : 1 tau_o : second v_0 : 1 k1 : 1 k2 : 1 k3 : 1 phi : %.4f*second e_base : %.4f g_0 : %.4f c_ab : 1 cb_0 : 1 v_ratio : 1 j : 1 transitTime : second k : 1 r : 1 ''' % (params.e_base, params.g_0, params.phi, params.e_base, params.g_0)) NeuronGroup.__init__(self, 1, model=eqs, clock=clock, compile=True, freeze=True) self.params=params self.G_base=params.G_base self.eta=params.eta self.tau_s=params.tau_s self.tau_f=params.tau_f self.alpha=params.alpha self.tau_o=params.tau_o self.e_base=params.e_base self.v_0=params.v_0 self.k1=params.k1 self.params.s_e=params.s_e_0*exp(-params.TE/params.T_2E) self.params.s_i=params.s_i_0*exp(-params.TE/params.T_2I) self.params.beta=self.params.s_e/self.params.s_i self.k2=self.params.beta*params.r_0*self.e_base*params.TE self.k3=self.params.beta-1.0 self.c_ab=self.params.c_ab self.cb_0=self.params.cb_0 self.g_0=self.params.g_0 self.phi=self.params.phi self.v_ratio=self.params.v_ratio self.j=self.params.j self.transitTime=self.params.transitTime self.k=self.params.k self.r=self.params.r self.f_in=1.0 self.s=0.0 self.v=1.0 self.o_e=self.e_base self.cb=self.cb_0 self.g=self.g_0 self.oe_log=np.log(1.0-self.o_e/(1.0-self.g)) self.q=1.0 if network is not None: self.G_total = linked_var(network, 'g_syn', func=sum) self.G_total_exc = linked_var(network, 'g_syn_exc', func=sum)
def __init__(self, lip_size, params, background_inputs=None, visual_cortex_input=None, go_input=None): self.lip_size = lip_size self.N = 2 * self.lip_size self.params = params self.background_inputs = background_inputs self.visual_cortex_input = visual_cortex_input self.go_input = go_input ## Set up equations # Exponential integrate-and-fire neuron eqs = exp_IF(params.C, params.gL, params.EL, params.VT, params.DeltaT) # AMPA conductance - recurrent input current eqs += exp_synapse('g_ampa_r', params.tau_ampa, siemens) eqs += Current('I_ampa_r=g_ampa_r*(E-vm): amp', E=params.E_ampa) # AMPA conductance - background input current eqs += exp_synapse('g_ampa_b', params.tau_ampa, siemens) eqs += Current('I_ampa_b=g_ampa_b*(E-vm): amp', E=params.E_ampa) # AMPA conductance - task input current eqs += exp_synapse('g_ampa_x', params.tau_ampa, siemens) eqs += Current('I_ampa_x=g_ampa_x*(E-vm): amp', E=params.E_ampa) # AMPA conductance - go input current eqs += exp_synapse('g_ampa_g', params.tau_ampa, siemens) eqs += Current('I_ampa_g=g_ampa_g*(E-vm): amp', E=params.E_ampa) # Voltage-dependent NMDA conductance eqs += biexp_synapse('g_nmda', params.tau1_nmda, params.tau2_nmda, siemens) eqs += Equations('g_V = 1/(1+(Mg/3.57)*exp(-0.062 *vm/mV)) : 1 ', Mg=params.Mg) eqs += Current('I_nmda=g_V*g_nmda*(E-vm): amp', E=params.E_nmda) # GABA-A conductance eqs += exp_synapse('g_gaba_a', params.tau_gaba_a, siemens) eqs += Current('I_gaba_a=g_gaba_a*(E-vm): amp', E=params.E_gaba_a) # GABA-B conductance eqs += biexp_synapse('g_gaba_b', params.tau1_gaba_b, params.tau2_gaba_b, siemens) eqs += Current('I_gaba_b=g_gaba_b*(E-vm): amp', E=params.E_gaba_b) # Total synaptic conductance eqs += Equations( 'g_syn=g_ampa_r+g_ampa_x+g_ampa_g+g_ampa_b+g_V*g_nmda+g_gaba_a+g_gaba_b : siemens' ) eqs += Equations( 'g_syn_exc=g_ampa_r+g_ampa_x+g_ampa_g+g_ampa_b+g_V*g_nmda : siemens' ) # Total synaptic current eqs += Equations( 'I_abs=abs(I_ampa_r)+abs(I_ampa_b)+abs(I_ampa_x)+abs(I_ampa_g)+abs(I_nmda)+abs(I_gaba_a) : amp' ) NeuronGroup.__init__(self, self.N, model=eqs, threshold=-20 * mV, reset=params.EL, compile=True) self.init_subpopulations() self.connections = [] self.init_connectivity() if self.background_inputs is not None: # Background -> E+I population connections background_left_ampa = init_connection(self.background_inputs[0], self.left_lip.neuron_group, 'g_ampa_b', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_b_e, delay=5 * ms) background_right_ampa = init_connection( self.background_inputs[1], self.right_lip.neuron_group, 'g_ampa_b', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_b_e, delay=5 * ms) self.connections.append(background_left_ampa) self.connections.append(background_right_ampa) if self.visual_cortex_input is not None: # Task input -> E population connections vc_left_lip_ampa = init_connection(self.visual_cortex_input[0], self.left_lip.e_contra_vis, 'g_ampa_x', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_v_ec_vis, delay=270 * ms) vc_right_lip_ampa = init_connection(self.visual_cortex_input[1], self.right_lip.e_contra_vis, 'g_ampa_x', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_v_ec_vis, delay=270 * ms) self.connections.append(vc_left_lip_ampa) self.connections.append(vc_right_lip_ampa) if self.go_input is not None: go_left_lip_i_ampa = init_connection(self.go_input, self.left_lip.i_group, 'g_ampa_g', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_g_i, delay=5 * ms) go_right_lip_i_ampa = init_connection(self.go_input, self.right_lip.i_group, 'g_ampa_g', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_g_i, delay=5 * ms) go_left_lip_e_ampa = init_connection(self.go_input, self.left_lip.e_group, 'g_ampa_g', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_g_e, delay=5 * ms) go_right_lip_e_ampa = init_connection(self.go_input, self.right_lip.e_group, 'g_ampa_g', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_g_e, delay=5 * ms) self.connections.append(go_left_lip_i_ampa) self.connections.append(go_right_lip_i_ampa) self.connections.append(go_left_lip_e_ampa) self.connections.append(go_right_lip_e_ampa)
def __init__(self, lip_size, params, background_inputs=None, visual_cortex_input=None, go_input=None): self.lip_size=lip_size self.N=2*self.lip_size self.params=params self.background_inputs=background_inputs self.visual_cortex_input=visual_cortex_input self.go_input=go_input ## Set up equations # Exponential integrate-and-fire neuron eqs = exp_IF(params.C, params.gL, params.EL, params.VT, params.DeltaT) # AMPA conductance - recurrent input current eqs += exp_synapse('g_ampa_r', params.tau_ampa, siemens) eqs += Current('I_ampa_r=g_ampa_r*(E-vm): amp', E=params.E_ampa) # AMPA conductance - background input current eqs += exp_synapse('g_ampa_b', params.tau_ampa, siemens) eqs += Current('I_ampa_b=g_ampa_b*(E-vm): amp', E=params.E_ampa) # AMPA conductance - task input current eqs += exp_synapse('g_ampa_x', params.tau_ampa, siemens) eqs += Current('I_ampa_x=g_ampa_x*(E-vm): amp', E=params.E_ampa) # AMPA conductance - go input current eqs += exp_synapse('g_ampa_g', params.tau_ampa, siemens) eqs += Current('I_ampa_g=g_ampa_g*(E-vm): amp', E=params.E_ampa) # Voltage-dependent NMDA conductance eqs += biexp_synapse('g_nmda', params.tau1_nmda, params.tau2_nmda, siemens) eqs += Equations('g_V = 1/(1+(Mg/3.57)*exp(-0.062 *vm/mV)) : 1 ', Mg=params.Mg) eqs += Current('I_nmda=g_V*g_nmda*(E-vm): amp', E=params.E_nmda) # GABA-A conductance eqs += exp_synapse('g_gaba_a', params.tau_gaba_a, siemens) eqs += Current('I_gaba_a=g_gaba_a*(E-vm): amp', E=params.E_gaba_a) # GABA-B conductance eqs += biexp_synapse('g_gaba_b', params.tau1_gaba_b, params.tau2_gaba_b, siemens) eqs += Current('I_gaba_b=g_gaba_b*(E-vm): amp', E=params.E_gaba_b) # Total synaptic conductance eqs += Equations('g_syn=g_ampa_r+g_ampa_x+g_ampa_g+g_ampa_b+g_V*g_nmda+g_gaba_a+g_gaba_b : siemens') eqs += Equations('g_syn_exc=g_ampa_r+g_ampa_x+g_ampa_g+g_ampa_b+g_V*g_nmda : siemens') # Total synaptic current eqs += Equations('I_abs=abs(I_ampa_r)+abs(I_ampa_b)+abs(I_ampa_x)+abs(I_ampa_g)+abs(I_nmda)+abs(I_gaba_a) : amp') NeuronGroup.__init__(self, self.N, model=eqs, threshold=-20*mV, reset=params.EL, compile=True) self.init_subpopulations() self.connections=[] self.init_connectivity() if self.background_inputs is not None: # Background -> E+I population connections background_left_ampa=init_connection(self.background_inputs[0], self.left_lip.neuron_group, 'g_ampa_b', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_b_e, delay=5*ms) background_right_ampa=init_connection(self.background_inputs[1], self.right_lip.neuron_group, 'g_ampa_b', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_b_e, delay=5*ms) self.connections.append(background_left_ampa) self.connections.append(background_right_ampa) if self.visual_cortex_input is not None: # Task input -> E population connections vc_left_lip_ampa=init_connection(self.visual_cortex_input[0], self.left_lip.e_contra_vis, 'g_ampa_x', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_v_ec_vis, delay=270*ms) vc_right_lip_ampa=init_connection(self.visual_cortex_input[1], self.right_lip.e_contra_vis, 'g_ampa_x', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_v_ec_vis, delay=270*ms) self.connections.append(vc_left_lip_ampa) self.connections.append(vc_right_lip_ampa) if self.go_input is not None: go_left_lip_i_ampa=init_connection(self.go_input, self.left_lip.i_group, 'g_ampa_g', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_g_i, delay=5*ms) go_right_lip_i_ampa=init_connection(self.go_input, self.right_lip.i_group, 'g_ampa_g', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_g_i, delay=5*ms) go_left_lip_e_ampa=init_connection(self.go_input, self.left_lip.e_group, 'g_ampa_g', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_g_e, delay=5*ms) go_right_lip_e_ampa=init_connection(self.go_input, self.right_lip.e_group, 'g_ampa_g', self.params.w_ampa_min, self.params.w_ampa_max, self.params.p_g_e, delay=5*ms) self.connections.append(go_left_lip_i_ampa) self.connections.append(go_right_lip_i_ampa) self.connections.append(go_left_lip_e_ampa) self.connections.append(go_right_lip_e_ampa)
def __init__(self, clock, params=zheng_params, network=None): eqs = Equations( ''' G_total : siemens G_total_exc : siemens ds/dt=eta*(G_total-G_base)/G_base-s/tau_s-(f_in-1.0)/tau_f : 1 df_in/dt=s/second : 1.0 dv/dt=1/tau_o*(f_in-f_out) : 1 f_out=v**(1.0/alpha) : 1 do_e/dt=1.0/(phi/f_in)*(-o_e+(1.0-g)*(1.0-(1.0-e_base/(1.0-g_0))**(1.0/f_in))) : %.4f dcb/dt=1.0/(phi/f_in)*(-cb-(c_ab*o_e)/oe_log+c_ab*g) : 1 oe_log : 1 cmr_o=(cb-g*c_ab)/(cb_0-g_0*c_ab) : 1 dg/dt=1.0/(j*v_ratio*((r*transitTime)/e_base))*((cmr_o-1.0)-k*s) : %.4f dq/dt=1/tau_o*((f_in*o_e/e_base)-f_out*q/v) : 1 y=v_0*((k1+k2)*(1-q)-(k2+k3)*(1-v)) : 1 G_base : siemens eta : 1/second tau_s : second tau_f : second alpha : 1 tau_o : second v_0 : 1 k1 : 1 k2 : 1 k3 : 1 phi : %.4f*second e_base : %.4f g_0 : %.4f c_ab : 1 cb_0 : 1 v_ratio : 1 j : 1 transitTime : second k : 1 r : 1 ''' % (params.e_base, params.g_0, params.phi, params.e_base, params.g_0)) NeuronGroup.__init__(self, 1, model=eqs, clock=clock, compile=True, freeze=True) self.params = params self.G_base = params.G_base self.eta = params.eta self.tau_s = params.tau_s self.tau_f = params.tau_f self.alpha = params.alpha self.tau_o = params.tau_o self.e_base = params.e_base self.v_0 = params.v_0 self.k1 = params.k1 self.params.s_e = params.s_e_0 * exp(-params.TE / params.T_2E) self.params.s_i = params.s_i_0 * exp(-params.TE / params.T_2I) self.params.beta = self.params.s_e / self.params.s_i self.k2 = self.params.beta * params.r_0 * self.e_base * params.TE self.k3 = self.params.beta - 1.0 self.c_ab = self.params.c_ab self.cb_0 = self.params.cb_0 self.g_0 = self.params.g_0 self.phi = self.params.phi self.v_ratio = self.params.v_ratio self.j = self.params.j self.transitTime = self.params.transitTime self.k = self.params.k self.r = self.params.r self.f_in = 1.0 self.s = 0.0 self.v = 1.0 self.o_e = self.e_base self.cb = self.cb_0 self.g = self.g_0 self.oe_log = np.log(1.0 - self.o_e / (1.0 - self.g)) self.q = 1.0 if network is not None: self.G_total = linked_var(network, 'g_syn', func=sum) self.G_total_exc = linked_var(network, 'g_syn_exc', func=sum)