Parvalbumin-positive basket cells differentiate among hippocampal pyramidal cells (Lee et al. 2014)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:153280
This detailed microcircuit model explores the network level effects of sublayer specific connectivity in the mouse CA1. The differences in strengths and numbers of synapses between PV+ basket cells and either superficial sublayer or deep sublayer pyramidal cells enables a routing of inhibition from superficial to deep pyramidal cells. At the network level of this model, the effects become quite prominent when one compares the effect on firing rates when either the deep or superficial pyramidal cells receive a selective increase in excitation.
Reference:
1 . Lee SH, Marchionni I, Bezaire M, Varga C, Danielson N, Lovett-Barron M, Losonczy A, Soltesz I (2014) Parvalbumin-positive basket cells differentiate among hippocampal pyramidal cells. Neuron 82:1129-44 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Hippocampus CA1 pyramidal GLU cell; Hippocampus CA1 basket cell;
Channel(s): I Sodium; I Calcium; I Potassium;
Gap Junctions:
Receptor(s): GabaA; Glutamate;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Detailed Neuronal Models; Connectivity matrix; Laminar Connectivity;
Implementer(s): Bezaire, Marianne [mariannejcase at gmail.com];
Search NeuronDB for information about:  Hippocampus CA1 pyramidal GLU cell; GabaA; Glutamate; I Sodium; I Calcium; I Potassium;
begintemplate pvbasketcell
 public variables

public  pre_list, connect_pre, append_sections, is_art, is_connected, gid, randi
public soma, bcdendAP1, bcdendAP2, bcdendBAS1, bcdendBAS2
public all, adend, bdend, cdend, ddend, basal_list, apical_list, soma_list, axon_list
public x, y, z, position, myroot

public pyramidalcell_list, axoaxoniccell_list, bistratifiedcell_list, cckcell_list, deepcell_list, supercell_list
public ivycell_list, ngfcell_list, olmcell_list, pvbasketcell_list, scacell_list
public eccell_list, ca3cell_list, mscell_list, stimcell_list

// strings
strdef myroot

// objects
objref syn, pre_list, templist, rootlist

// external variables
external numCellTypes, cellType

// create the sections[nsegments]
// if nsegments (the number of segments in each section) is updated,
// you'll have to manually change the bounds on the for loops as well
create soma, bcdendAP1[4], bcdendAP2[4], bcdendBAS1[4], bcdendBAS2[4]

// set the initialization code, which is run whenever a new object
// of this class is instantiated
proc init() {
	gid = $1
	randi = $2
	// cell sections: soma, dendrites, axon
	append_sections() // append all sections to the section list
	connect_sections()// connect soma, dendrites, axon
	size_sections()	// set the size dimensions of each section
	set_nseg()		// set the number of segments in each section
	
	// subcellular mechanisms: channels, pumps, transporters
	mechinit()
	insert_mechs()

	define_shape()
	get_root()

	pre_list = new List() // define a list for the presynaptic connections
	define_synapses()
}

objref all, adend, bdend, cdend, ddend // this is also defined later, in a fcn. which place should it be defined?
proc connect_sections() { local i
	connect bcdendAP1[0](0), soma(1)
	connect bcdendAP2[0](0), soma(1)
	connect bcdendBAS1[0](0), soma(0)
	connect bcdendBAS2[0](0), soma(0)
	for i=1, 3 { // upper bound is # of segments - 1
	connect bcdendAP1[i](0), bcdendAP1[i-1](1)
	}
	for i=1, 3 { // upper bound is # of segments - 1
	connect bcdendAP2[i](0), bcdendAP2[i-1](1)
	}
	for i=1, 3 { // upper bound is # of segments - 1
	connect bcdendBAS1[i](0), bcdendBAS1[i-1](1)
	}
	for i=1, 3 { // upper bound is # of segments - 1
	connect bcdendBAS2[i](0), bcdendBAS2[i-1](1)
	}
}

objref basal_list, apical_list, soma_list, axon_list
objref pyramidalcell_list, axoaxoniccell_list, bistratifiedcell_list, cckcell_list, deepcell_list, supercell_list
objref ivycell_list, ngfcell_list, olmcell_list, pvbasketcell_list, scacell_list
objref eccell_list, ca3cell_list, mscell_list, stimcell_list
proc append_sections() { local i
	objref all, basal_list, apical_list, soma_list, axon_list
	objref pyramidalcell_list, axoaxoniccell_list, bistratifiedcell_list, cckcell_list, deepcell_list, supercell_list
	objref ivycell_list, ngfcell_list, olmcell_list, pvbasketcell_list, scacell_list
	objref eccell_list, ca3cell_list, mscell_list, stimcell_list

	pyramidalcell_list = new SectionList()
	deepcell_list = new SectionList()
	supercell_list = new SectionList()
	axoaxoniccell_list = new SectionList()
	bistratifiedcell_list = new SectionList()
	cckcell_list = new SectionList()
	ivycell_list = new SectionList()
	ngfcell_list = new SectionList()
	olmcell_list = new SectionList()
	pvbasketcell_list = new SectionList()
	scacell_list = new SectionList()
	eccell_list = new SectionList()
	ca3cell_list = new SectionList()
	stimcell_list = new SectionList()
	mscell_list = new SectionList()
	// Make a list for every section in the cell
	all = new SectionList()	
  basal_list = new SectionList()
  apical_list = new SectionList()
  soma_list = new SectionList()
  axon_list = new SectionList()
  
		soma all.append()
		soma soma_list.append()
		for i=0, 3 {bcdendAP1 [i] all.append()
					bcdendAP1 [i] apical_list.append()}
		for i=0, 3 {bcdendAP2 [i] all.append()
					bcdendAP2 [i] apical_list.append()}
		for i=0, 3 {bcdendBAS1 [i] all.append()
					bcdendBAS1 [i] basal_list.append()}
		for i=0, 3 {bcdendBAS2 [i] all.append()
					bcdendBAS2 [i] basal_list.append()}

	// Make lists of dendrite sections that
	//  are all the same relative distance
	//  from the soma (useful when adding ion channels)
	// The code in this section will have to be customized
	//  depending on how detailed (and different) the sections
	//  are for each main dendrite
	adend  = new SectionList()	
		bcdendAP1 [0] adend.append()
		bcdendAP2 [0] adend.append()
		bcdendBAS1 [0] adend.append()
		bcdendBAS2 [0] adend.append()

	bdend  = new SectionList()
		bcdendAP1 [1] bdend.append()
		bcdendAP2 [1] bdend.append()
		bcdendBAS1 [1] bdend.append()
		bcdendBAS2 [1] bdend.append()

	cdend  = new SectionList()
		bcdendAP1 [2] cdend.append()
		bcdendAP2 [2] cdend.append()
		bcdendBAS1 [2] cdend.append()
		bcdendBAS2 [2] cdend.append()

	ddend  = new SectionList()
		bcdendAP1 [3] ddend.append()
		bcdendAP2 [3] ddend.append()
		bcdendBAS1 [3] ddend.append()
		bcdendBAS2 [3] ddend.append()

// cell lists
		for i=0, 1 {
			bcdendAP1 [i] scacell_list.append()
			bcdendAP2 [i] scacell_list.append()
		}
		for i=0, 3 {
			bcdendBAS1 [i] scacell_list.append()
			bcdendBAS2 [i] scacell_list.append()
		}

		for i=0, 3 {
			bcdendBAS1 [i] pyramidalcell_list.append()
			bcdendBAS2 [i] pyramidalcell_list.append()
		}

		for i=0, 3 {
			bcdendBAS1 [i] deepcell_list.append()
			bcdendBAS2 [i] deepcell_list.append()
		}

		for i=0, 3 {
			bcdendBAS1 [i] supercell_list.append()
			bcdendBAS2 [i] supercell_list.append()
		}

		for i=2, 3 {
			bcdendAP1 [i] eccell_list.append()
			bcdendAP2 [i] eccell_list.append()
		}

		for i=0, 1 {
			bcdendAP1 [i] ca3cell_list.append()
			bcdendAP2 [i] ca3cell_list.append()
		}
		
		forsec soma_list {pvbasketcell_list.append()}
		
		forsec soma_list {stimcell_list.append()}
		
		forsec soma_list {cckcell_list.append()}

		for i=2, 3 {
			bcdendAP1 [i] ngfcell_list.append()
			bcdendAP2 [i] ngfcell_list.append()
		}

		for i=0, 3 {
			bcdendBAS1 [i] olmcell_list.append()
			bcdendBAS2 [i] olmcell_list.append()
		}

		for i=0, 1 {
			bcdendAP1 [i] ivycell_list.append()
			bcdendAP2 [i] ivycell_list.append()
		}
		for i=0, 3 {
			bcdendBAS1 [i] ivycell_list.append()
			bcdendBAS2 [i] ivycell_list.append()
		}

		for i=0, 1 {
			bcdendAP1 [i] bistratifiedcell_list.append()
			bcdendAP2 [i] bistratifiedcell_list.append()
		}
		for i=0, 3 {
			bcdendBAS1 [i] bistratifiedcell_list.append()
			bcdendBAS2 [i] bistratifiedcell_list.append()
		}
}

proc size_sections() { local i
	soma {L=20 diam=15}
	for i=0, 3 { // upper bound is # of segments - 1
		bcdendAP1 [i] {L=75 diam=4-i}
	}	
	for i=0, 3 { // upper bound is # of segments - 1
		bcdendAP2 [i] {L=75 diam=4-i}
	}	
	for i=0, 3 { // upper bound is # of segments - 1
		bcdendBAS1 [i] {L=50 diam=4-i}
	}	
	for i=0, 3 { // upper bound is # of segments - 1
		bcdendBAS2 [i] {L=50 diam=4-i}
	}
}

external lambda_f
proc set_nseg() {
  	forsec all { nseg = int((L/(0.1*lambda_f(100))+.9)/2)*2 + 1  }
}
proc mechinit() {
	// Temperature of simulation
	celsius = 34.0  
	
	// Membrane capacitance in uF/cm2
	CmAll = 1.4

	// Axial resistance in ohm*cm
	RaAll = 100	

	// reversal potentials in mV
	ekval = -90
	ecaval = 130
	enaval = 55
	eleakval = -60.06

	// Sodium channel voltage shift in mV
	vshift = -8
	
	// Calcium concentrations in mM
	ca_outside = 2
	ca_inside = 5.e-6
	
	// max ion channel conductances in mho/cm2
	gleak = 0.00030 // leak channel conductance
	gNav = 0.12 // Voltage gated sodium
	gKvA=0.00015 // A-type potassium
	gKdrfast=0.013 // Fast delayed rectifier potassium
	gKvCaB=0.0002 // Big potassium channel: voltage and calcium gated
	gKCaS=0.000002 // Small potassium channel: calcium gated
	gCavL=0.005 // L-type calcium
	gCavN=0.0008 // N-type calcium
}
proc insert_mechs() {
	forsec all {
		Ra=RaAll		// Ra = Axial resistivity in ohm-cm. Ra is a
					//  section variable that must be set for each
					//  section. Default is 35.4.
	
		cm=CmAll		// capacitance in uF/cm^2. default = 1.0
		
		insert iconc_Ca
			catau_iconc_Ca = 10
			caiinf_iconc_Ca = ca_inside
			cao_iconc_Ca=ca_outside
		insert ch_KvA
			gmax_ch_KvA=gKvA
		insert ch_CavN
			gmax_ch_CavN=gCavN  
		insert ch_CavL 
			gmax_ch_CavL=gCavL
		insert ch_KCaS
			gmax_ch_KCaS= gKCaS
		insert ch_KvCaB
			gmax_ch_KvCaB= gKvCaB
		insert ch_leak
			gmax_ch_leak = gleak
	
		ek=ekval  
		elca=ecaval	
		e_ch_leak =eleakval
	}

	soma {		
		insert ch_NavPVBC
			gmax_ch_NavPVBC= gNav 
			ena = enaval 
			vshift_ch_NavPVBC = vshift
		insert ch_Kdrfast
			gmax_ch_Kdrfast=gKdrfast  
	} 

	forsec adend {
		insert ch_NavPVBC
			gmax_ch_NavPVBC= gNav
			ena = enaval 
			vshift_ch_NavPVBC = vshift
		insert ch_Kdrfast
			gmax_ch_Kdrfast=gKdrfast
	}		
}



proc connect_pre() {  // $o1 target point process, $o2 returned NetCon
	soma $o2 = new NetCon (&v(1), $o1)
		 $o2.threshold = -10 //except for bcell to bcell, which is -10???
}

func is_art()  { return 0 }

proc position(){ local i
		forall {
		for i = 0, n3d()-1 {
			pt3dchange(i, $1-x+x3d(i), $2-y+y3d(i), $3-z+z3d(i), diam3d(i))
		}
}
	x = $1  y = $2  z = $3	
}	

proc get_root() {local i localobj sref
	rootlist = new SectionList()
	rootlist.allroots()
	i=0
	forsec all {
		sref = new SectionRef()
		if (sref.has_parent==0) {
			myroot = secname()
			i=i+1
		}
	}
	if (i>1) {
		print "WARNING: cell ", gid, " has ", i, " root sections!"
	}
}

objref syn  
proc define_synapses() {local i localobj f2, f3

}
endtemplate pvbasketcell