Hippocampus CA1 Interneuron Specific 3 (IS3) in vivo-like virtual NN simulations (Luo et al 2020)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:265523
"Disinhibition is a widespread circuit mechanism for information selection and transfer. In the hippocampus, disinhibition of principal cells is provided by the interneuron-specific interneurons that express the vasoactive intestinal polypeptide (VIP-IS) and innervate selectively inhibitory interneurons. By combining optophysiological experiments with computational models, we determined the impact of synaptic inputs onto the network state-dependent recruitment of VIP-IS cells. We found that VIP-IS cells fire spikes in response to both the Schaffer collateral and the temporoammonic pathway activation. Moreover, by integrating their intrinsic and synaptic properties into computational models, we predicted recruitment of these cells between the rising phase and peak of theta oscillation and during ripples. Two-photon Ca2+-imaging in awake mice supported in part the theoretical predictions, revealing a significant speed modulation of VIP-IS cells and their preferential albeit delayed recruitment during theta-run epochs, with estimated firing at the rising phase and peak of the theta cycle. However, it also uncovered that VIP-IS cells are not activated during ripples. Thus, given the preferential theta-modulated firing of VIP-IS cells in awake hippocampus, we postulate that these cells may be important for information gating during spatial navigation and memory encoding."
Reference:
1 . Luo X, Guet-McCreight A, Villette V, Francavilla R, Marino B, Chamberland S, Skinner FK, Topolnik L (2020) Synaptic Mechanisms Underlying the Network State-Dependent Recruitment of VIP-Expressing Interneurons in the CA1 Hippocampus. Cereb Cortex [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Synapse; Dendrite; Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Hippocampal CA1 CR/VIP cell;
Channel(s): I Na,t; I Na,p; I A;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s): Glutamate; Gaba;
Simulation Environment: NEURON;
Model Concept(s): Spatial Navigation; Oscillations; Activity Patterns;
Implementer(s): Guet-McCreight, Alexandre [alexandre.guet.mccreight at mail.utoronto.ca];
Search NeuronDB for information about:  I Na,p; I Na,t; I A; Gaba; Glutamate;
/
LuoEtAl2020Code
Theta_RemovedInputs
SDprox2
NPYfiles
PLOTfiles
IKa.mod *
ingauss.mod *
Ksoma.mod *
Nap.mod *
Nasoma.mod *
vecevent.mod *
init.py *
IS3_M2_Case9StarRevised.hoc *
model_decaytimeinhvec.dat *
model_decaytimevec.dat *
model_dendsectionvec.dat *
model_distvec.dat *
model_minweightinhvec.dat *
model_minweightvec.dat *
model_risetimeinhvec.dat *
model_risetimevec.dat *
PlotResults.py
ranstream.hoc *
SynParamSearch.hoc
vecevent.hoc *
vecevent.ses *
                            
COMMENT
Noise current characterized by gaussian distribution 
with mean mean and standerd deviation stdev.

Borrows from NetStim's code so it can be linked with an external instance 
of the Random class in order to generate output that is independent of 
other instances of InGau.

User specifies the time at which the noise starts, 
and the duration of the noise.
Since a new value is drawn at each time step, 
should be used only with fixed time step integration.
ENDCOMMENT

NEURON {
    POINT_PROCESS InGauss
    NONSPECIFIC_CURRENT i
    RANGE mean, stdev
    RANGE del, dur
    THREADSAFE : true only if every instance has its own distinct Random
    POINTER donotuse
}

UNITS {
    (nA) = (nanoamp)
}

PARAMETER {
    del (ms) : delay until noise starts
    dur (ms) <0, 1e9> : duration of noise
    mean = 0 (nA)
    stdev = 1 (nA)
}

ASSIGNED {
    dt (ms)
    on
    per (ms)
    ival (nA)
    i (nA)
    donotuse
}

INITIAL {
    per = dt
    on = 0
    ival = 0
    i = 0
    net_send(del, 1)
}

PROCEDURE seed(x) {
    set_seed(x)
}

BEFORE BREAKPOINT {
    i = ival
: printf("time %f \ti %f\n", t, ival)
}

BREAKPOINT { : this block must exist so that a current is actually generated
}

NET_RECEIVE (w) {
    if (dur>0) {
        if (flag==1) {
            if (on==0) { : turn on
                on=1
                net_send(dur,1) : to turn it off
:                ival = (hi-lo)*urand() + lo : first sample
                ival = stdev*grand() + mean : first sample
                net_send(per, 2) : prepare for next sample
            } else {
                if (on==1) { : turn off
                    on=0
                    ival = 0
                }
            }
        }
        if (flag==2) {
            if (on==1) {
                ival = stdev*grand() + mean
: printf("time %f \ti %f\n", t, ival)
                net_send(per, 2) : prepare for next sample
            }
        }
    }
}

VERBATIM
double nrn_random_pick(void* r);
void* nrn_random_arg(int argpos);
ENDVERBATIM

: FUNCTION erand() {
: FUNCTION urand() {
FUNCTION grand() {
VERBATIM
    if (_p_donotuse) {
        /*
         : Supports separate independent but reproducible streams for
         : each instance. However, the corresponding hoc Random
         : distribution MUST be set to Random.uniform(0,1)
         */
//            _lerand = nrn_random_pick(_p_donotuse);
//            _lurand = nrn_random_pick(_p_donotuse);
            _lgrand = nrn_random_pick(_p_donotuse);
    }else{
        /* only can be used in main thread */
        if (_nt != nrn_threads) {
hoc_execerror("multithread random in InUnif"," only via hoc Random");
        }
ENDVERBATIM
        : the old standby. Cannot use if reproducible parallel sim
        : independent of nhost or which host this instance is on
        : is desired, since each instance on this cpu draws from
        : the same stream
:        erand = exprand(1)
:        urand = scop_random()
        grand = normrand(0,1)
: printf("%f\n", grand)
VERBATIM
    }
ENDVERBATIM
}

PROCEDURE noiseFromRandom() {
VERBATIM
 {
    void** pv = (void**)(&_p_donotuse);
    if (ifarg(1)) {
        *pv = nrn_random_arg(1);
    }else{
        *pv = (void*)0;
    }
 }
ENDVERBATIM
}