Inhibition of bAPs and Ca2+ spikes in a multi-compartment pyramidal neuron model (Wilmes et al 2016)

 Download zip file 
Help downloading and running models
Accession:187603
"Synaptic plasticity is thought to induce memory traces in the brain that are the foundation of learning. To ensure the stability of these traces in the presence of further learning, however, a regulation of plasticity appears beneficial. Here, we take up the recent suggestion that dendritic inhibition can switch plasticity of excitatory synapses on and off by gating backpropagating action potentials (bAPs) and calcium spikes, i.e., by gating the coincidence signals required for Hebbian forms of plasticity. We analyze temporal and spatial constraints of such a gating and investigate whether it is possible to suppress bAPs without a simultaneous annihilation of the forward-directed information flow via excitatory postsynaptic potentials (EPSPs). In a computational analysis of conductance-based multi-compartmental models, we demonstrate that a robust control of bAPs and calcium spikes is possible in an all-or-none manner, enabling a binary switch of coincidence signals and plasticity. ..."
Reference:
1 . Wilmes KA, Sprekeler H, Schreiber S (2016) Inhibition as a Binary Switch for Excitatory Plasticity in Pyramidal Neurons. PLoS Comput Biol 12:e1004768 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Neocortex; Hippocampus;
Cell Type(s): Hippocampus CA1 pyramidal cell; Neocortex V1 L6 pyramidal corticothalamic cell;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; Python;
Model Concept(s): Dendritic Action Potentials; Synaptic Plasticity; Synaptic Integration;
Implementer(s): Wilmes, Katharina A. [katharina.wilmes at googlemail.com];
Search NeuronDB for information about:  Hippocampus CA1 pyramidal cell; Neocortex V1 L6 pyramidal corticothalamic cell;
#!/usr/bin/env python

"""script for feedforward circuit from Figure 7"""

# _title_ 	: FF_circuit.py
# _author_ 	: Katharina Anna Wilmes
# _mail_ 	: katharina.anna.wilmes __at__ cms.hu-berlin.de

# --Imports--
import sys
import os

import math
from time import time
import matplotlib.pyplot as plt
import numpy as np
import neuron
from neuron import h

from neuronmodel import *
from config_circuit import *
from sim import *

#set path for saving data
path = './'

NO_EPSPs = 8
NO_REPS = 1
DT=0.1 # ms, set the integration step
POST_AMP = 0.3 # nA, amplitude of current injection to trigger the AP/bAP
WARM_UP=1000 # ms, until steady state
identifier = '2015-01-13-00h00m00s'
savepath = '%s%s'%(path,identifier)
if not os.path.exists(savepath):
	os.mkdir(savepath)

def get_interneuron(inh_type=0):
    interneuron = neuron.h.Section()
    interneuron.L = 67
    interneuron.diam = 67
    interneuron.nseg = 1
    interneuron.Ra = 100
    interneuron.cm = 1

    interneuron.insert('pas')
    for seg in interneuron:
        seg.pas.g = 0.00015
        seg.pas.e = -70
    # fast interneuron
    if inh_type == 0:
        interneuron.insert('hh2')
        interneuron.vtraub_hh2 = -55 #resting Vm, BJ was -55
        interneuron.gnabar_hh2 = 0.05 #McCormick=15 muS, thal was 0.09
        interneuron.gkbar_hh2 = 0.01 #spike duration of interneurons
        interneuron.ena = 50
        interneuron.ek = -100
    # slower interneuron
    elif inh_type == 1:
        interneuron.insert('hh3')
        interneuron.vtraub_hh3 = -55 #resting Vm, BJ was -55
        interneuron.gnabar_hh3 = 0.05 #McCormick=15 muS, thal was 0.09
        interneuron.gkbar_hh3 = 0.01 #spike duration of interneurons
        interneuron.ena = 50
        interneuron.ek = -100
    else:
        raise ValueError

    return interneuron


def main():
    
    my_rawdata = {}

    #inputs
    freq = params['Input']['freq'].value

    # Synapses
    pos = params['Synapse']['pos'].value

    w_ei = params['Input']['w_ei'].value
    w_ii = params['Input']['w_ii'].value
    w_ee = params['Input']['w_ee'].value

    EPSP_pos = params['Synapse']['EPSP_pos'].value

    inh_delay = params['shunt']['shunt_delay'].value
    inh_pos = params['shunt']['inh_pos'].value
    inh_type = params['shunt']['inh_type'].value
    interneuron_target = params['shunt']['interneuron_target'].value

    sim_params = params['sim']

    for w_ie in [0.0,0.05]:
    
        cell = Neuron()
        sim = Simulation(cell,sim_params)
        sim.dt = DT
        sim.v_init = -70
    
    
        interneuron = get_interneuron(inh_type)
    
    
        # excitatory input neuron
        ns = h.NetStim()
        ns.number = NO_REPS # (average) number of spikes
        ns.interval = 1000.0/freq
        ns.start = WARM_UP # ms (most likely) start time of first spike
    
        # excitatory to inhibitory synapse
        ex_inh = neuron.h.Exp2Syn(interneuron(0.5))
        ex_inh.tau1 = 0.5 # ms rise time
        ex_inh.tau2 = 2 # ms decay time
        ex_inh.e = 0 # mV reversal p
    
        # excite interneuron
        nc_ex_inh = h.NetCon(ns,ex_inh,1,0,w_ei)
    
        # VIP interneuron
        ns_VIP = h.NetStim()
        ns_VIP.number = NO_REPS # (average) number of spikes
        ns_VIP.interval = 1000.0/freq
        ns_VIP.start = WARM_UP # ms (most likely) start time of first spike
    
        #inhibitory to inhibitory synapse
        inh_inh = neuron.h.Exp2Syn(interneuron(0.5))
        inh_inh.tau1 = 0.5 # ms rise time
        inh_inh.tau2 = 5 # ms decay time
        inh_inh.e = -73 # mV reversal p
        w_ii = float(params['Input']['w_ii'].value)
    
        nc_inh_inh = h.NetCon(ns_VIP,inh_inh,1,0,w_ii)
    
    
        # excitatory to excitatory synapse
        ex_ex = h.List()
        nc_ex = h.List()
        branch = 0
        for i in range(1,NO_EPSPs+1):
            pos = (i) * 0.1
            ex = neuron.h.Exp2Syn(cell.apical(pos))
            w = w_ee/NO_EPSPs #0.016
            ex.tau1 = 0.5 # ms rise time
            ex.tau2 = 2 # ms decay time
            ex.e = 0 # mV reversal potential
            # excite postsynaptic cell
            nc = h.NetCon(ns,ex,1,0,w)
            ex_ex.append(ex)
            nc_ex.append(nc)
    
        #inhibitory to excitatory synapse
        if interneuron_target == 0:
            inh_ex = neuron.h.Exp2Syn(cell.apical_prox(inh_pos))
        elif interneuron_target == 1:
            inh_ex = neuron.h.Exp2Syn(cell.apical(inh_pos))
    
        inh_ex.tau1 = 0.5 # ms rise time
        inh_ex.tau2 = 5 # ms decay time
        inh_ex.e = -73 # mV reversal p
    
        # connect interneuron to postsynaptic cell
        nc_inh_ex = h.NetCon(interneuron(0.5)._ref_v, inh_ex,1,inh_delay,w_ie, sec = interneuron)
    
        nc_vec = h.Vector()
        nc_inh_ex.record(nc_vec)
    
        total_time = WARM_UP+NO_REPS*(1000.0/freq)+100
        sim.sim_time = total_time
    
        sim.interneuron = interneuron
    
        # recording
        trec = h.Vector()
        trec.record(h._ref_t)
        vrec = h.Vector()
        vrec.record(cell.soma(0.5)._ref_v)
        vdrec = h.Vector()
        vdrec.record(cell.branches[0](0.5)._ref_v)
        vorec = h.Vector()
        vorec.record(cell.oblique_branch(0.9)._ref_v)
        vbrec = h.Vector()
        vbrec.record(cell.basal_main(0.9)._ref_v)
        vprox = h.Vector()
        vprox.record(cell.apical_prox(0.9)._ref_v)
        vinhrec = h.Vector()
        vinhrec.record(interneuron(0.5)._ref_v)
    
        cadrec = h.Vector()
        cadrec.record(cell.branches[0](0.5)._ref_ica)
    
        # run simulation
        sim.go()
    
        t = np.array(trec)
        v = np.array(vrec)
        vd = np.array(vdrec)
        vo = np.array(vorec)
        vb = np.array(vbrec)
        vinh = np.array(vinhrec)
        vprox = np.array(vprox)
        nc_v = np.array(nc_vec)
        cad = np.array(cadrec)
    
        plt.figure()
        plt.plot(t,v,'r',label='v')
        plt.hold(True)
        plt.plot(t,vo,'g',label='vo')
        if w_ie == 0.05:
            plt.plot(nc_v[0]+inh_delay, -75, '|',color = '#FF8300')
        plt.xlabel("Time [ms]", fontsize = 'large')
        plt.ylabel("Voltage [mV]", fontsize = 'large')
        plt.xlim(1000,1010)
        plt.legend(('soma','dendrite'))
        plt.savefig('%s/vrec_wee%d_type%s_target%s.eps'%(savepath, w_ie*1000,inh_type,interneuron_target))



    my_rawdata['t'] = t
    my_rawdata['v'] = v
    my_rawdata['vd'] = vd
    my_rawdata['vo'] = vo
    my_rawdata['vb'] = vb
    my_rawdata['vinh'] = vinh

    my_rawdata['cad'] = cad

    rawdata = {'raw_data': my_rawdata}


    return rawdata


if __name__ == '__main__':

    rawdata = main()

Loading data, please wait...