Multiscale simulation of the striatal medium spiny neuron (Mattioni & Le Novere 2013)

 Download zip file 
Help downloading and running models
"… We present a new event-driven algorithm to synchronize different neuronal models, which decreases computational time and avoids superfluous synchronizations. The algorithm is implemented in the TimeScales framework. We demonstrate its use by simulating a new multiscale model of the Medium Spiny Neuron of the Neostriatum. The model comprises over a thousand dendritic spines, where the electrical model interacts with the respective instances of a biochemical model. Our results show that a multiscale model is able to exhibit changes of synaptic plasticity as a result of the interaction between electrical and biochemical signaling. …"
1 . Mattioni M, Le Novère N (2013) Integration of biochemical and electrical signaling-multiscale model of the medium spiny neuron of the striatum. PLoS One 8:e66811 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Synapse;
Brain Region(s)/Organism: Striatum;
Cell Type(s): Neostriatum medium spiny direct pathway GABA cell;
Channel(s): I Na,p; I Na,t; I T low threshold; I A; I K,Ca; I CAN; I Calcium; I A, slow; I Krp; I R; I Q;
Gap Junctions:
Gene(s): Kv4.2 KCND2; Kv1.2 KCNA2; Cav1.3 CACNA1D; Cav1.2 CACNA1C; Kv2.1 KCNB1;
Simulation Environment: NEURON; Python;
Model Concept(s): Synaptic Plasticity; Signaling pathways; Calcium dynamics; Multiscale;
Implementer(s): Mattioni, Michele [mattioni at];
Search NeuronDB for information about:  Neostriatum medium spiny direct pathway GABA cell; I Na,p; I Na,t; I T low threshold; I A; I K,Ca; I CAN; I Calcium; I A, slow; I Krp; I R; I Q;
# Author Michele Mattioni
# Fri Mar  6 11:38:37 GMT 2009

import os
import cPickle
import datetime
import numpy

class Loader(object):
    def __init__(self):
        self.dirRoot = None 
    def create_new_dir(self, prefix="./", root="Data"):
            Create the directory where to put the simulation
        self.dirRoot = os.path.join(prefix, root)
        today =
        free = False
        index = 0
        dirDate = today.strftime("%d-%m-%Y")
        dirComp = os.path.join(self.dirRoot, dirDate)
        dir = os.path.join(dirComp, "Sim_" + str(index))
        while not free :
            if os.path.exists(dir):
                index = index + 1
                simNum = "Sim_" + str(index)
                dir = os.path.join(dirComp, simNum )
                free = True
        return dir
    def save(self, obj, dir, name):
        """ Save The object in binary form with the given name
        obj - The python object
        name - the name to give to the saved object"""
        filepath = os.path.join (dir, name)
        FILE = open(filepath, 'w')
        cPickle.dump(obj, FILE, 1)
        print "Python object saved in %s" %os.path.abspath(filepath)
    def load(self, filename):
        """Load the python object into memory from the filename
        filename - path to the binary python object"""
            FILE = open(filename, 'r')
            obj = cPickle.load(FILE)
            print "loaded file %s" %os.path.abspath(filename)
            return obj
        except IOError:
            print "impossible to load the file: %s" %filename
    def convert_to_numpy(self, vecDict):
        """Convert a dictionary of Hoc Vectors into one of Numpy Vecs"""
        vecsNu = {}
        for k,v in vecDict.iteritems():
            vecsNu[k] = numpy.array(v)
        return vecsNu
class Storage(object):
    """Class to store in one place: the vecRef for the electrical,
    the timecourses for the spines, the weight of the synapses"""
    def __init__(self, calciumSampling, dtNeuron, tEquilibrium):
        """Set the calcium update, the neuron dt, the neuron 
        equilibrium and the ecell equilibrium"""
        self.calciumSampling = calciumSampling
        self.dtNeuron = dtNeuron
        self.tEquilibrium = tEquilibrium
    def set_vecRefs(self, vecRefs):
        """Set the vecRef in the class"""
        self.vecRefs = vecRefs
    def set_timecourses(self, time_courses):
        """Save the timecourses"""
        self.time_courses = time_courses
    def set_synVecRefs(self, synVecRefs):
        """Set the synapses weight"""
        self.synVecRefs = synVecRefs
    def set_spines(self, spines_id, spines_pos, spines_parent):
        """Stores the spines id, position and parent segment. 
        All This info are required to rebuild the model."""
        self.spines_id = spines_id
        self.spines_pos = spines_pos
        self.spines_parent = spines_parent

Loading data, please wait...