Effects of KIR current inactivation in NAc Medium Spiny Neurons (Steephen and Manchanda 2009)

 Download zip file 
Help downloading and running models
Accession:121060
"Inward rectifying potassium (KIR) currents in medium spiny (MS) neurons of nucleus accumbens inactivate significantly in ~40% of the neurons but not in the rest, which may lead to differences in input processing by these two groups. Using a 189-compartment computational model of the MS neuron, we investigate the influence of this property using injected current as well as spatiotemporally distributed synaptic inputs. Our study demonstrates that KIR current inactivation facilitates depolarization, firing frequency and firing onset in these neurons. ..."
Reference:
1 . Steephen JE, Manchanda R (2009) Differences in biophysical properties of nucleus accumbens medium spiny neurons emerging from inactivation of inward rectifying potassium currents. J Comput Neurosci 27:453-70 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Basal ganglia;
Cell Type(s): Nucleus accumbens spiny projection neuron;
Channel(s): I Na,p; I L high threshold; I T low threshold; I p,q; I A; I h; I K,Ca; I CAN; I A, slow; I Krp; I R;
Gap Junctions:
Receptor(s): AMPA; NMDA; Gaba;
Gene(s): Cav1.3 CACNA1D; Cav1.2 CACNA1C; IRK;
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Action Potential Initiation; Ion Channel Kinetics; Action Potentials; Synaptic Integration; Delay;
Implementer(s): Steephen, John Eric [johneric at duk.ac.in];
Search NeuronDB for information about:  AMPA; NMDA; Gaba; I Na,p; I L high threshold; I T low threshold; I p,q; I A; I h; I K,Ca; I CAN; I A, slow; I Krp; I R;
/* Execute main.hoc to run the program. The program implements the model described in Steephen & Manchanda, 2009.
 * 
 * Steephen, J. E., & Manchanda, R. (2009). Differences in biophysical properties of nucleus accumbens medium spiny neurons emerging from inactivation of inward rectifying potassium currents. J Comput Neurosci, 
 * doi:10.1007/s10827-009-0161-7
 */
 
proc loadqueue(){
	if(!bSynput) return
	UniformRand = new Random(seed)
	NormRand = new Random(seed)
	if (eAct==6) { loadQ()
	} else {
		for i = 0, 250{
			Events(Dnf)
			Events(Upf)
			if(i>83) i+=1	
		}
	}
}

proc Events() {local start, Event
	start = UniformRand.uniform(0, 1000/$1)
	Event = start + NormRand.normal(0, 1e6/(16*$1*$1))
	for j=1, 3+int(StateNo*SI*$1/1000) { //3 is for generating some extra spikes as a safety margin 
		if(Event>=0) {
			if((abs((int(int(Event/SI)/2)==(int(Event/SI)/2))-($1==Upf))&&!eAct)||(abs((Event<300)-($1==Upf))&&eAct)){
				ns.o[i].event(Event)
				if(i>83){ns.o[i+1].event(Event)}
			}
		}
		Event = start + 1000 * j/$1 + NormRand.repick()
	}
}
objref mStmType
mStmType = new Matrix(4,3)
proc loadQ(){local p localobj /*mStmType,*/ mStmPat, vEvents
	
	mStmType.x[0][0] = 300
	mStmType.x[0][1] = Dnf
				
	mStmType.x[1][0] = stim.dur
	mStmType.x[1][1] = Upf
			
	mStmType.x[2][0] = 300
	mStmType.x[2][1] = Dnf
						
	mStmType.x[3][0] = stim.dur
	mStmType.x[3][1] = Upf
		
	mStmPat = GenerateStimPattern()
				
	for p=0, 250 {
		for q=1, mStmPat.nrow()-1 {
			vEvents = events(mStmPat.x[q][1])
			FilterAdd(mStmPat, q, vEvents, ns.o[p])
			if(p>83)FilterAdd(mStmPat, q, vEvents, ns.o[p+1])				
		}
		if(p>83) p+=1		
	}	
}

proc FilterAdd() {local i,begin,end,q,dutycycle localobj mStmPat, vEvents, netcon
	mStmPat = $o1
	q =$2
	vEvents = $o3
	netcon = $o4
		
	begin = mStmPat.x[q-1][0]
	end = mStmPat.x[q][0]
	dutycycle=mStmPat.x[mStmPat.nrow()-1][0]
	if (vEvents.x[0]<0) vEvents.remove(0)
	
	while (begin<=tstop) {
		for i=0, vEvents.size()-1 {
			if((vEvents.x[i]>=begin)&&(vEvents.x[i]<end)) {
				netcon.event(vEvents.x[i])
			}
		}
		begin += dutycycle 
		end += dutycycle
	}	
}

obfunc GenerateStimPattern() {local p, q, steps, dF, nrowid localobj mStmPat
	mStmPat = new Matrix(1,2)
	nrowid=0
	for p=0, mStmType.nrow()-1 {
		steps = abs(mStmType.x[p][2]-1) // No. of actual steps is one less than that specified except for 0 for which steps is 1.
		dF = (mStmType.x[p][1]-mStmPat.x[nrowid][1])/mStmType.x[p][2]^!!mStmType.x[p][2] //avoid divide by 0
		dT =mStmType.x[p][0]/steps
		
		for q=1, steps {
			nrowid += 1
			mStmPat.resize(nrowid+1, 2)
			mStmPat.x[nrowid][0] = mStmPat.x[nrowid-1][0] + dT
			mStmPat.x[nrowid][1] = mStmPat.x[nrowid-1][1] + dF
		}
	}
	
	return mStmPat
}

obfunc events() {local start, ISI localobj vEvents
	vEvents = new Vector()
	ISI = 1000/$1
	start = UniformRand.uniform(0, ISI)
	vEvents.append(start + NormRand.normal(0, (ISI/4)^2))
	while(vEvents.max()<tstop) {vEvents.append(start + ISI * vEvents.size() + NormRand.repick())}
	return vEvents
}

Loading data, please wait...