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;
proc spikeout() {local i, rank  localobj f				// Write out a spike raster (cell, spike time)
	pc.barrier()									// Wait for all ranks to get to this point
	sprint(cmd,"./results/%s/spikeraster.dat", RunName)
	f = new File(cmd)
	if (pc.id == 0) { 								// Write header to file 1 time only
		f.wopen()
		f.close()
	}
	
	for rank = 0, pc.nhost-1 {				// For each processor, allow processor to append to file the spike times of its cells
		if (rank == pc.id) {				// Ensure that each processor runs once
			f.aopen() 						// Open for appending to file
			for i=0, pnm.idvec.size-1 {
				f.printf("%.3f %d\n", pnm.spikevec.x[i], pnm.idvec.x[i])	// Print the spike time and spiking cell gid
			}
			f.close()
		}
		pc.barrier()
	}
}

proc spikeoutfast() {local i  localobj f				// Write out a spike raster quickly in parallel (cell, spike time)
	sprint(cmd,"./results/%s/spikeraster_%g.dat", RunName, pc.id)
	f = new File(cmd)
	f.wopen()
	for i=0, pnm.idvec.size-1 {
		f.printf("%.3f %d\n", pnm.spikevec.x[i], pnm.idvec.x[i])	// Print the spike time and spiking cell gid
	}
	f.close()

	
	g=1
	if (CatFlag==1) {
		pc.barrier()
		while (pc.nhost>g) {
			g=g*2
			if ((pc.id/g - int(pc.id/g))==0.5) {
				sprint(dircmd,"cat ./results/%s/spikeraster_%g.dat >> ./results/%s/spikeraster_%g.dat", RunName, pc.id, RunName, int(pc.id-g/2))
				{system(dircmd, direx)}			
				sprint(dircmd,"rm ./results/%s/spikeraster_%g.dat", RunName, pc.id)
				{system(dircmd, direx)}			
			}
			pc.barrier()
		}
	}
	pc.barrier()
	if (pc.id==0) {
		if (CatFlag==1) {		
			sprint(dircmd,"cat ./results/%s/spikeraster_0.dat >> ./results/%s/spikeraster.dat", RunName, RunName)
			{system(dircmd, direx)}		
			sprint(dircmd,"rm ./results/%s/spikeraster_%g.dat", RunName, pc.id)
			{system(dircmd, direx)}	
		}	
	}
}

proc sumnumout() {local alltime, allct, allspk localobj f
	allct = pc.allreduce(nclist.count,1)
	allspk = pc.allreduce(pnm.idvec.size,1)
	comptime = pc.step_time
	avgcomp = pc.allreduce(comptime, 1)/pc.nhost
	maxcomp = pc.allreduce(comptime, 2)
	loadbal=1
	exchtime=0
	if (maxcomp>0) {
		loadbal=avgcomp/maxcomp
		exchtime= $1 - maxcomp
	}

	if (pc.id == 0) { 								// Write header to file 1 time only
		alltime = startsw() - loadstart
		sprint(cmd,"./results/%s/sumnumout.txt", RunName)
		f = new File(cmd)
		f.wopen()
		f.printf("NumCells = %g;\nNumSpikes = %g;\nNumConnections = %g;\nRunTime = %g;\nNumCellTypes = %g;\nLoadBalResult = %g;\nExchangeResult = %g;\n", ncell, allspk, allct, alltime, numCellTypes, loadbal, exchtime)	// Print the spike time and spiking cell gid
		f.close()
	}
}

proc timeout() {local i, rank, gid, srcid localobj tgt, f, cell// Write out runtimes for each processor
	pc.barrier()					// Wait for all ranks to get to this point
	sprint(cmd,"./results/%s/runtimes.dat", RunName)
	f = new File(cmd)
	if (pc.id == 0) { 				// Write header to file 1 time only
		f.wopen()
		f.printf("host\tset up\tcreated cells\tconnected cells\tran simulation\t\n")
		f.close()
	}
	
	for rank = 0, pc.nhost-1 {				// For each processor, allow processor to append its runtimes to file
		if (rank == pc.id) {				// Ensure that each processor runs once
			f.aopen() 						// Open for appending to file
			f.printf("%g\t%g\t%g\t%g\t%g\n", pc.id, loadtime, createtime, connecttime, runtime)
			f.close()
		}
		pc.barrier()
	}
}

proc highIndexout() {local i, ij, gid localobj cell
	pc.barrier()					// Wait for all ranks to get to this point
	sprint(cmd,"./results/%s/MaxHighIndex.txt", RunName)
	f = new File(cmd)
	
	perRankmax=0
	for j = 0, numCellTypes-1 {
		if (cellType[j].LastHighIndex>perRankmax) {
			perRankmax=cellType[j].LastHighIndex
		}
	}
	maxconn = pc.allreduce(perRankmax, 2)
	
	perRankmax=0
	for pcitr(&i, &ij, &gid, 0, ncell) {	
		if (pc.gid_exists(gid)) {
			cell = pc.gid2cell(gid)
			if (ransynlist.object(cell.randi).seq()>perRankmax) {
				perRankmax=ransynlist.object(cell.randi).seq()
			}	
		}
	}
	maxsyn = pc.allreduce(perRankmax, 2)
	
	perRankmax=0
	for pcitr(&i, &ij, &gid, 0, ncell) {	
		if (pc.gid_exists(gid)) {
			cell = pc.gid2cell(gid)
			if (ransynlist.object(cell.randi).seq()>perRankmax) {
				perRankmax=ranstimlist.object(cell.randi).seq()
			}	
		}
	}
	maxstim = pc.allreduce(perRankmax, 2)
	
	if (pc.id == 0) { 				// Write header to file 1 time only
		f.wopen()
		f.printf("connection_highIndex=%f;\nsynapse_highIndex=%f;\nstimulation_highIndex=%f;\n",maxconn,maxsyn,maxstim)
		f.close()
	}
}



objref spkhist, f4
strdef cmd
proc setupSpikeHistogram() {
	spkhist = new Vector(pc.nhost)
	if (pc.id==0) {
		pc.max_histogram(spkhist)
	}
}

proc printSpikeHistogram() {
	sprint(cmd,"./results/%s/spkhist.dat", RunName)
	f4 = new File(cmd)
	f4.wopen()

			// Open for appending to file
	for i=0, pc.nhost-1 {
		f4.printf("%d\t%d\n", i, spkhist.x[i])	// Print the spike time and spiking cell gid
	}
	f4.close()
}