ModelDB is moving. Check out our new site at The corresponding page is

Hippocampal CA1 pyramidal cell demonstrating dynamic mode switching (Berteau & Bullock 2020)

 Download zip file 
Help downloading and running models
A simulated proposed single-cell mechanism for CA1’s behavior as an associative mismatch detector. Shifts in spiking mode (accomplished via KCNQ interaction with chloride leak currents) signal matches vs. mismatches.
1 . Berteau S, Bullock D (2020) Simulations reveal how M-currents and memory-based inputs from CA3 enable single neuron mismatch detection for EC3 inputs to the CA1 subfield of hippocampus Journal of Neurophysiology, accepted
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Predictive Coding Network;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s):
Channel(s): I M; I Cl, leak; I Na, slow inactivation;
Gap Junctions:
Receptor(s): Gaba; Glutamate; Cholinergic Receptors;
Transmitter(s): Glutamate; Gaba; Acetylcholine;
Simulation Environment: Python;
Model Concept(s): Activity Patterns; Coincidence Detection; Rate-coding model neurons; Bursting;
Implementer(s): Berteau, Stefan [berteau at];
Search NeuronDB for information about:  Glutamate; Gaba; Cholinergic Receptors; I M; I Cl, leak; I Na, slow inactivation; Acetylcholine; Gaba; Glutamate;
from __future__ import division
from numpy import *
from scipy.stats import poisson

Created on Jan 8, 2011

An axon class that provides external input in the form of a poisson distribution of spikes.  It still maxes out at one spike per time point, however, so we need a number of them to get a serious distribution.

@author: stefan

class PoissonAxon:
    def __init__(self, timeStep, lambdaConst = 0.5, onsetTime = 0, offsetTime = 10000000, offLambda = 0.001):
        self.lambdaConst = lambdaConst
        self.timeStep = timeStep
        self.time = 0
        self.onsetTime = onsetTime
        self.offsetTime = offsetTime
        self.distributionOn = poisson(self.lambdaConst)
        self.distributionOff = poisson(offLambda)
        self.output = 0
        self.vv = []
        self.rampEnd = self.onsetTime + 1 / self.timeStep

    def getInput(self, target):
        return self.output

    def addTarget(self, target):
        return True

    def step(self): 
        self.time += self.timeStep
        if self.time < self.onsetTime or self.time > self.offsetTime:
            self.output = self.distributionOff.rvs((1,))[0]
            # if self.time <= self.rampEnd:
            #     rampSteps = self.rampEnd - self.onsetTime
            #     rampStepped = self.time - self.onsetTime
            #     tempLambda = self.lambdaConst * rampStepped / rampSteps
            #     # print("TempLambda: ", tempLambda)
            #     self.distributionOn = poisson(tempLambda)
            self.output = self.distributionOn.rvs((1,))[0]

Loading data, please wait...