Purkinje neuron network (Zang et al. 2020)

 Download zip file 
Help downloading and running models
Accession:266799
Both spike rate and timing can transmit information in the brain. Phase response curves (PRCs) quantify how a neuron transforms input to output by spike timing. PRCs exhibit strong firing-rate adaptation, but its mechanism and relevance for network output are poorly understood. Using our Purkinje cell (PC) model we demonstrate that the rate adaptation is caused by rate-dependent subthreshold membrane potentials efficiently regulating the activation of Na+ channels. Then we use a realistic PC network model to examine how rate-dependent responses synchronize spikes in the scenario of reciprocal inhibition-caused high-frequency oscillations. The changes in PRC cause oscillations and spike correlations only at high firing rates. The causal role of the PRC is confirmed using a simpler coupled oscillator network model. This mechanism enables transient oscillations between fast-spiking neurons that thereby form PC assemblies. Our work demonstrates that rate adaptation of PRCs can spatio-temporally organize the PC input to cerebellar nuclei.
Reference:
1 . Zang Y, Hong S, De Schutter E (2020) Firing rate-dependent phase responses of Purkinje cells support transient oscillations. Elife [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Realistic Network;
Brain Region(s)/Organism: Cerebellum;
Cell Type(s): Cerebellum Purkinje GABA cell;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; MATLAB;
Model Concept(s): Phase Response Curves; Action Potentials; Spatio-temporal Activity Patterns; Synchronization; Action Potential Initiation; Oscillations;
Implementer(s): Zang, Yunliang ; Hong, Sungho [shhong at oist.jp];
Search NeuronDB for information about:  Cerebellum Purkinje GABA cell;
/
PRC_network_code
figure2
figure2B
mod
abBK.mod *
apthreshold.mod *
CaP_Raman.mod *
cdp_spiny.mod *
cdp10AIS.mod *
cdp20N_FD2.mod *
cdp4N.mod *
distr.mod *
ihnew.mod *
kv11.mod *
Kv1A.mod *
kv3.mod *
Kv34.mod *
kv4hybrid2.mod *
kv4s.mod *
mslo.mod *
nap.mod *
peak.mod *
pkjlk.mod *
rsgold.mod *
SK2.mod *
syn2.mod *
TCa.mod *
                            
NEURON {
	POINT_PROCESS APThreshold
	RANGE n, slopeth, ampth, time, vth, firing1, firing2
}

UNITS {
	(mV) = (millivolt)
}

PARAMETER {
	n
	slopeth = 10 (mV/ms)
	ampth = -20  (mV)
	time (ms)
	vth (mV)
	v (mV)
	dt (ms)
}

ASSIGNED {
	firing1
	firing2
	spacet
	spaceth
	v1 (mV)
}

VERBATIM
extern void vector_resize();
extern double* vector_vec();
extern void* vector_arg();
ENDVERBATIM

INITIAL {
	n = 0
	firing1 = 0
	firing2 = 0
	v1 = 0 (mV)
VERBATIM
	{ void* vvt; void* vvth;
		vvt = *((void**)(&spacet));
		vvth = *((void**)(&spaceth));
		if (vvt) {
			vector_resize(vvt, 0);
		}
		if (vvth) {
			vector_resize(vvth, 0);
		}
	}
ENDVERBATIM
	check()
}

BREAKPOINT {
	SOLVE check METHOD after_cvode
}

PROCEDURE check() {
VERBATIM
	if ((v - v1)/dt >= slopeth && !firing1) {
		firing1 = 1;
		time = t;
		vth = v;
	}
	if (v >= ampth && firing1 && !firing2) {
		int size; double* px; void* vvt; void* vvth;
		firing2 = 1;
		n += 1.;
		vvt = *((void**)(&spacet));
		vvth = *((void**)(&spaceth));
		if (vvt) {
			size = (int)n;
			vector_resize(vvt, size);
			px = vector_vec(vvt);
			px[size-1] = time;
		}
		if (vvth) {
			size = (int)n;
			vector_resize(vvth, size);
			px = vector_vec(vvth);
			px[size-1] = vth;
		}
	}
	if (firing1 && (v - v1)/dt < slopeth && t > time) {
		firing1 = 0;
	}
	if (firing2 && v < ampth && t > time) {
		firing2 = 0;
		firing1 = 0;
	}
	v1 = v;
ENDVERBATIM
}

PROCEDURE spiketimes() {
VERBATIM
	extern void* vector_arg();
	void** vvt;
	vvt = (void**)(&spacet);
	*vvt = (void*)0;
	if (ifarg(1)) {
		*vvt = vector_arg(1);
	}
ENDVERBATIM
}

PROCEDURE thresholds() {
VERBATIM
	extern void* vector_arg();
	void** vvth;
	vvth = (void**)(&spaceth);
	*vvth = (void*)0;
	if (ifarg(1)) {
		*vvth = vector_arg(1);
	}
ENDVERBATIM
}

Loading data, please wait...