Disentangling astroglial physiology with a realistic cell model in silico (Savtchenko et al 2018)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:243508
"Electrically non-excitable astroglia take up neurotransmitters, buffer extracellular K+ and generate Ca2+ signals that release molecular regulators of neural circuitry. The underlying machinery remains enigmatic, mainly because the sponge-like astrocyte morphology has been difficult to access experimentally or explore theoretically. Here, we systematically incorporate multi-scale, tri-dimensional astroglial architecture into a realistic multi-compartmental cell model, which we constrain by empirical tests and integrate into the NEURON computational biophysical environment. This approach is implemented as a flexible astrocyte-model builder ASTRO. As a proof-of-concept, we explore an in silico astrocyte to evaluate basic cell physiology features inaccessible experimentally. ..."
Reference:
1 . Savtchenko LP, Bard L, Jensen TP, Reynolds JP, Kraev I, Medvedev N, Stewart MG, Henneberger C, Rusakov DA (2018) Disentangling astroglial physiology with a realistic cell model in silico. Nat Commun 9:3554 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Glia;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Astrocyte;
Channel(s): I Calcium; I Potassium; Kir;
Gap Junctions: Gap junctions;
Receptor(s):
Gene(s):
Transmitter(s): Glutamate;
Simulation Environment: NEURON; MATLAB; C or C++ program;
Model Concept(s): Calcium waves; Calcium dynamics; Potassium buffering; Volume transmission; Membrane Properties;
Implementer(s): Savtchenko, Leonid P [leonid.savtchenko at ucl.ac.uk];
Search NeuronDB for information about:  I Calcium; I Potassium; Kir; Glutamate;
// Diameter distribution
objref diamDistrLeaves, diamDistrStalks
diamStep = 0
nanoDistrLoaded = 0 // Boolean
// Random
objref randomDiameters
randomDiameters = new Random()

// Shows window to select a .TXT file with diameter distribution.
proc loadDiamDistrFile() { local divisions localobj radiiFile, line, neuronLine, radiiDistrPointer
    line = new String()
    neuronLine = new String()

    radiiFile = new File()
    radiiFile.chooser("r", "Load", "*.txt", "Load", "Cancel", getcwd())

    // File selected
    if (radiiFile.chooser()) {
        // This procedure is
		// looking for "NEURON" word inside the data file that's located before distribution
        // TO DO Add some action in case if file doesn't contain NEURON word 
        // or has wrong distribution structure
        while (!radiiFile.eof() && strcmp(neuronLine.s, "NEURON") != 0) {
            radiiFile.gets(line.s)
            sscanf(line.s, "%[^\n]", neuronLine.s)
        }
        
        diamStep = radiiFile.scanvar()

        for group = 1, 2 {
            // Amount of non-non-zero-probability groups
            divisions = radiiFile.scanvar()
			print divisions

            if (group == 1) {
                diamDistrStalks = new Matrix(divisions, 2)
                radiiDistrPointer = diamDistrStalks
            } else {
                diamDistrLeaves = new Matrix(divisions, 2)
                radiiDistrPointer = diamDistrLeaves
            }
            
            // Leaves and stalks distribution
            for row = 0, divisions-1 {
                radiiDistrPointer.setval(row, 0, radiiFile.scanvar())
                radiiDistrPointer.setval(row, 1, radiiFile.scanvar())
            }
        }

        nanoDistrLoaded = 1

    } else {
        print "File selection canceled"
    }
}

// Returns random diameter from the distribution matrix.
// $o1 - Diameter distribution matrix
// $2 - Diameter step
func getDiameterFromDistr() { local diameter, bottomProbability
    diameter = $o1.getval(0, 0)
    randomValue = randomDiameters.uniform(0, 1)

    if (randomValue > 0) {
        for row = 0, $o1.nrow-1 {
            if (randomValue <= $o1.getval(row, 1)) {
                if (row > 0) {
                    bottomProbability = $o1.getval(row-1, 1)
                } else {
                    bottomProbability = 0
                }

                diameter = $o1.getval(row, 0)+$2*(randomValue-bottomProbability)/($o1.getval(row, 1)-bottomProbability)
                break
            }
        }
    }

    return diameter
}

Loading data, please wait...