Model of arrhythmias in a cardiac cells network (Casaleggio et al. 2014)

 Download zip file   Auto-launch 
Help downloading and running models
" ... Here we explore the possible processes leading to the occasional onset and termination of the (usually) non-fatal arrhythmias widely observed in the heart. Using a computational model of a two-dimensional network of cardiac cells, we tested the hypothesis that an ischemia alters the properties of the gap junctions inside the ischemic area. ... In conclusion, our model strongly supports the hypothesis that non-fatal arrhythmias can develop from post-ischemic alteration of the electrical connectivity in a relatively small area of the cardiac cell network, and suggests experimentally testable predictions on their possible treatments."
1 . Casaleggio A, Hines ML, Migliore M (2014) Computational model of erratic arrhythmias in a cardiac cell network: the role of gap junctions. PLoS One 9:e100288 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Cardiac ventricular cell;
Channel(s): I K; I Sodium; I Calcium; I Potassium;
Gap Junctions: Gap junctions;
Simulation Environment: NEURON;
Model Concept(s): Spatio-temporal Activity Patterns; Detailed Neuronal Models; Action Potentials; Heart disease; Conductance distributions;
Implementer(s): Hines, Michael [Michael.Hines at]; Migliore, Michele [Michele.Migliore at];
Search NeuronDB for information about:  I K; I Sodium; I Calcium; I Potassium;
// since each cell is connected via gap junctions to its four neighbors
// it makes sense to divide the network into blocks with each host
// handling a separate block with as equal as possible the same number
// of blocks in a row as in a column.
// ie. balance would be perfect if nh2=sqrt(pc.nhost) is an integer (the
// usual case) and also if Nx/nh2 and Ny/nh2 are both integers

// But to get things working, for now try round-robin.
// ie easy balance at the expense of excessive communication

ncell = Nx*Ny
iterator pcitr() {local i, gid
	i = 0
	for (gid =; gid < ncell; gid += pc.nhost) {
		$&1 = gid
		$&2 = i
		i += 1

// Here is the block implementation, keep the blocks roughly square
// If we eventully use section connect in place of HalfGap as much
// as possible then we would want the block to be as long as possible.
// There are pc.nhost blocks. Assume Nx, Ny, and nblock are powers of 2.
// No attempt at optimality.
// args: Nx, Ny, nblocks
// output fills the global variables: Nx, Ny, nblock, ncell, ncellperlock,
// blockNx, blockNy, xblock, yblock

func is_power2() { local x
	x = log($1)/log(2)
	return x == int(x)

func blocksizes() {
	Nx = $1
	if (!is_power2(Nx)) return 0
	Ny = $2
	if (!is_power2(Ny)) return 0
	nblock = $3
	if (!is_power2(nblock)) return 0
	ncell = Nx*Ny
	ncellperblock = ncell/nblock
	// Assume ncellperblock is a non-negative power of 2
	// need blockNx * blockNy = ncellperblock
	// with contraint that Nx/blockNx and Ny/blockNy are integers.
	blockNy = 1
	blockNx = ncellperblock/blockNy
	for (blockNy = 1; Ny%blockNy == 0 ; blockNy *= 2) {
		blockNx = ncellperblock/blockNy
		if (Nx%blockNx != 0) { continue }
		if (blockNy >= blockNx) { break }
	return 1

if (block_distrib != 0) {
	block_distrib = blocksizes(Nx, Ny, pc.nhost)
	if (block_distrib) {
		load_file("block_distrib.hoc") // replace iterator pcitr
		if ( == 0) {
printf("Block gid distribution blockNx = %d  blockNy = %d\n", blockNx, blockNy)
		if ( == 0) {
printf("One or more of Nx, Ny, rank is not a power of 2. Use round robin gid distribution\n")