Coincident signals in Olfactory Bulb Granule Cell spines (Aghvami et al 2019)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:244687
"In the mammalian olfactory bulb, the inhibitory axonless granule cells (GCs) feature reciprocal synapses that interconnect them with the principal neurons of the bulb, mitral, and tufted cells. These synapses are located within large excitable spines that can generate local action potentials (APs) upon synaptic input (“spine spike”). Moreover, GCs can fire global APs that propagate throughout the dendrite. Strikingly, local postsynaptic Ca2+ entry summates mostly linearly with Ca2+ entry due to coincident global APs generated by glomerular stimulation, although some underlying conductances should be inactivated. We investigated this phenomenon by constructing a compartmental GC model to simulate the pairing of local and global signals as a function of their temporal separation ?t. These simulations yield strongly sublinear summation of spine Ca2+ entry for the case of perfect coincidence ?t = 0 ms. ..."
Reference:
1 . Aghvami SS, Müller M, Araabi BN, Egger V (2019) Coincidence Detection within the Excitable Rat Olfactory Bulb Granule Cell Spines. J Neurosci 39:584-595 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Dendrite; Channel/Receptor; Synapse;
Brain Region(s)/Organism: Olfactory bulb;
Cell Type(s): Olfactory bulb main interneuron granule MC GABA cell; Olfactory bulb main interneuron granule TC GABA cell;
Channel(s): Ca pump; I Calcium; I K; I Sodium;
Gap Junctions:
Receptor(s): NMDA; AMPA;
Gene(s):
Transmitter(s): Glutamate;
Simulation Environment: NEURON; Python;
Model Concept(s): Active Dendrites; Calcium dynamics; Coincidence Detection;
Implementer(s): Aghvami, S. Sara [ssa.aghvami at gmail.com];
Search NeuronDB for information about:  Olfactory bulb main interneuron granule MC GABA cell; Olfactory bulb main interneuron granule TC GABA cell; AMPA; NMDA; I K; I Sodium; I Calcium; Ca pump; Glutamate;
{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import pickle\n",
      "import numpy as np\n",
      "import matplotlib.pyplot as plt\n",
      "from neuron import h,gui\n",
      "\n",
      "####Sections and Connections####\n",
      "nofsections = 27 # 1soma + 25dendritic sections + 1terminating section \n",
      "nofspines =1     # number of spines is 1 throughout this simulation\n",
      "\n",
      "gc=[h.Section() for i in range(nofsections)]\n",
      "spineh=[h.Section() for i in range(nofspines)]\n",
      "spinen=[h.Section() for i in range(nofspines)]\n",
      "\n",
      "for i in range(nofsections-1):\n",
      "    gc[i+1].connect(gc[i],1,0)\n",
      "for i in range(nofspines):\n",
      "    spineh[i].connect(spinen[i],0,1)\n",
      "        \n",
      "j=0\n",
      "for i in range(nofspines): #spines start at 100um from soma, on 11th dendritic section\n",
      "    spinen[i].connect(gc[11+j],0.5,1)\n",
      "    j=j+1\n",
      "    \n",
      "####Morphology and other Parameters#### \n",
      "h.celsius=22 #temperature\n",
      "h.dt=0.025 #temporal resolution,ms\n",
      "\n",
      "for i in range(nofsections): \n",
      "    gc[i].L=10 #dendrite total length is 260 um\n",
      "    gc[i].nseg=3\n",
      "    gc[i].Ra=200\n",
      "    \n",
      "gc[0].diam=10 #soma size is 10umx10um, and there are two tapering regimes:\n",
      "for i in range(1,11):#1.tapering starts at 2.35um, ends at 1.7um , first 10 sections as in Ona-Jodar et al. Front Cell Neurosci 2017  \n",
      "    gc[i].diam=2.35-(i-1)*((2.35-1.7)/9)\n",
      "for i in range(11,27):#2.tapering starts at 1.7um ends at 1.2um, next 15 sections  \n",
      "    gc[i].diam=1.7-(i-10)*((1.7-1.2)/16)\n",
      "   \n",
      "for i in range(nofspines): \n",
      "    spineh[i].diam=1\n",
      "    spinen[i].diam=0.3 \n",
      "    spineh[i].L=1\n",
      "    spinen[i].L=2.5\n",
      "    spineh[i].nseg=3\n",
      "    spinen[i].nseg=3\n",
      "    spinen[i].Ra=4.9e3 #Ra is normalized as ohmcm.\n",
      "   \n",
      "presyn=h.Section() #with all other default specifications\n",
      "presyn.L=10\n",
      "presyn.diam=10\n",
      "\n",
      "####Settings for Ion channels and Synaptic Receptors and their Parameters#### \n",
      "for i in range(nofsections):\n",
      "    gc[i].insert('constant')#dummy current source\n",
      "    gc[i].insert('cadifusnpumpOGBenddif')#ca and buffers diffusion,ca pumps \n",
      "    gc[i].insert('nax')\n",
      "    gc[i].insert('kamt')\n",
      "    gc[i].insert('pas')\n",
      "    gc[i].g_pas=6e-4 \n",
      "    gc[i].e_pas=-85\n",
      "    gc[i].gbar_nax=0.5\n",
      "    gc[i].gbar_kamt=0.01\n",
      "    gc[i].cm=1\n",
      "    \n",
      "    gc[i].insert('canhem')#HVA Ca2+ channel \n",
      "    gc[i].insert('cathem')#T-type Ca2+ channel\n",
      "    gc[i].q10_cathem=3\n",
      "    gc[i].q10_canhem=3 \n",
      "    gc[i].a0m_cathem=0.055633 #to adjust the opening rate\n",
      "    gc[i].a0m_canhem=0.331432 #to adjust the opening rate   \n",
      "    gc[i].gcanbar_canhem=0.0005\n",
      "    gc[i].gcatbar_cathem=0.0003\n",
      "    \n",
      "    gc[i].TotalPump_cadifusnpumpOGBenddif=2e-11 \n",
      "    \n",
      "for i in range(nofspines):    \n",
      "    spineh[i].insert('constant')#dummy current source\n",
      "    spineh[i].insert('cadifusnpumpOGBenddif')#ca and buffers diffusion,ca pumps \n",
      "    spineh[i].insert('nax')\n",
      "    spineh[i].insert('kamt')\n",
      "    spineh[i].insert('pas')\n",
      "    spineh[i].gbar_nax=0.5\n",
      "    spineh[i].gbar_kamt=0.01\n",
      "    spineh[i].g_pas=2e-4\n",
      "    spineh[i].e_pas=-85\n",
      "    spineh[i].cm=1\n",
      "\n",
      "    spineh[i].insert('canhem')\n",
      "    spineh[i].insert('cathem')\n",
      "    spineh[i].q10_canhem=3\n",
      "    spineh[i].q10_cathem=3\n",
      "    spineh[i].a0m_cathem=0.055633 #to adjust the opening rate\n",
      "    spineh[i].a0m_canhem=0.331432 #to adjust the opening rate\n",
      "    spineh[i].gcatbar_cathem=0.00015 \n",
      "    spineh[i].gcanbar_canhem=0.0004 \n",
      "\n",
      "    spineh[i].TotalPump_cadifusnpumpOGBenddif=2.2e-11 \n",
      "    \n",
      "AMPARsyn=[h.AMPA5() for i in range(nofspines)]\n",
      "NMDARsyn=[h.NMDA5() for i in range(nofspines)]\n",
      "\n",
      "for i in range(nofspines): \n",
      "    AMPARsyn[i].loc(spineh[i](0.3))\n",
      "    AMPARsyn[i].gmax=2000\n",
      "    NMDARsyn[i].loc(spineh[i](0.7))\n",
      "    NMDARsyn[i].gmax=383 \n",
      "    NMDARsyn[i].gmax_ca=17 \n",
      "    ##NMDAR Setting##\n",
      "    NMDARsyn[i].Rb= 5e-3\n",
      "    NMDARsyn[i].Ru=12.9e-3\n",
      "    NMDARsyn[i].Rd=8.4e-3\n",
      "    NMDARsyn[i].Rr=6.8e-3\n",
      "    NMDARsyn[i].Ro=46.5e-3\n",
      "    NMDARsyn[i].Rc=73.8e-3 \n",
      "    ####\n",
      "    spinen[i].insert('cadifusnpumpOGBenddif')\n",
      "    spinen[i].TotalPump_cadifusnpumpOGBenddif=0 #there is no active mechanism on the neck\n",
      "\n",
      "####Setting Ca Dynamic Global Parameters####\n",
      "h.DCa_cadifusnpumpOGBenddif=0.6\n",
      "h.mg_NMDA5=1\n",
      "##endogenous buffer\n",
      "for i in range(nofsections):\n",
      "    gc[i].k1buf1_cadifusnpumpOGBenddif=1000\n",
      "    gc[i].k2buf1_cadifusnpumpOGBenddif=1\n",
      "    gc[i].TotalBuffer1_cadifusnpumpOGBenddif=0.12\n",
      "for i in range(nofspines):\n",
      "    spineh[i].k1buf1_cadifusnpumpOGBenddif=1000\n",
      "    spineh[i].k2buf1_cadifusnpumpOGBenddif=1\n",
      "    spineh[i].TotalBuffer1_cadifusnpumpOGBenddif=0.12\n",
      "##exogenous buffer    \n",
      "for i in range(nofsections):\n",
      "    gc[i].k1buf2_cadifusnpumpOGBenddif=1000\n",
      "    gc[i].k2buf2_cadifusnpumpOGBenddif=0.2\n",
      "    gc[i].TotalBuffer2_cadifusnpumpOGBenddif=0.1 #for \"no OGB case\", set this to 0\n",
      "for i in range(nofspines):\n",
      "    spineh[i].k1buf2_cadifusnpumpOGBenddif=1000\n",
      "    spineh[i].k2buf2_cadifusnpumpOGBenddif=0.2\n",
      "    spineh[i].TotalBuffer2_cadifusnpumpOGBenddif=0.1 #for \"no OGB case\", set this to 0\n",
      "\n",
      "####Mapping of Ca Concentration to fluorescence signal df/f \u2013 based on experimental data and simulations, see Figure 3C; not valid for \"no OGB case\"####\n",
      "def spine_fit(x):\n",
      "     y = 14390070 + (-49.1502 - 14390070)/(1 + (x/6632796000)**0.6715641)\n",
      "     return y\n",
      "    \n",
      "def dend_fit(x):  #not calculated and used based on experiment\n",
      "    y = 14390070 + (-49.1502 - 14390070)/(1 + (x/6632796000)**0.6715641)\n",
      "    return y\n",
      "\n",
      "####Setting Stimulation####\n",
      "#Global action potential:\n",
      "APstim1=h.IClamp(0.5,sec=gc[0])\n",
      "APstim1.delay=30 \n",
      "APstim1.dur=3 \n",
      "APstim1.amp=0 #to produce AP stimulation set this to 1, otherwise to 0 \n",
      "#Glutamate\n",
      "Rel=h.STEP_REL(0.75,presyn)\n",
      "Rel.amplitude=1 #to produce Glu stimulation set this to 1, otherwise to 0\n",
      "Rel.duration=3\n",
      "Rel.release_time=30\n",
      "\n",
      "for i in range(nofspines):\n",
      "    h.setpointer(Rel._ref_GLU,'C',AMPARsyn[i])\n",
      "    h.setpointer(Rel._ref_GLU,'C',NMDARsyn[i])\n",
      "    \n",
      "####Simulation Readout####\n",
      "time_h = h.Vector()\n",
      "time_h.record(h._ref_t)\n",
      "vrec_gc=[h.Vector() for i in range(nofsections)] #gc[0] is the soma, gc[10] is the 1th parent dendrite\n",
      "vrec_spineh=[h.Vector() for i in range(nofspines)] \n",
      "icaspineh=[h.Vector() for i in range(nofspines)] #overall influx\n",
      "ccaspineh=[h.Vector() for i in range(nofspines)] #overall concentration\n",
      "icagc=[h.Vector() for i in range(nofsections)] #overall influx\n",
      "ccagc=[h.Vector() for i in range(nofsections)] #overall concentration\n",
      "\n",
      "icanmdr=[h.Vector() for i in range(nofspines)]\n",
      "icahvacc=[h.Vector() for i in range(nofspines)]\n",
      "icattype=[h.Vector() for i in range(nofspines)]\n",
      "\n",
      "clampcurrent=h.Vector()\n",
      "\n",
      "for i in range(nofsections): \n",
      "    vrec_gc[i].record(gc[i](0.5)._ref_v)\n",
      "for i in range(nofspines): \n",
      "    vrec_spineh[i].record(spineh[i](0.5)._ref_v)    \n",
      "\n",
      "clampcurrent.record(APstim1._ref_i)\n",
      "\n",
      "for i in range(nofspines): \n",
      "    icahvacc[i].record(spineh[i](0.5)._ref_ica_canhem)\n",
      "    icanmdr[i].record(NMDARsyn[i]._ref_ica)\n",
      "    icattype[i].record(spineh[i](0.5)._ref_ica_cathem)\n",
      "\n",
      "for i in range(nofspines):    \n",
      "    icaspineh[i].record(spineh[i](0.5)._ref_ica)\n",
      "    ccaspineh[i].record(spineh[i](0.5)._ref_caiav_cadifusnpumpOGBenddif)\n",
      "    \n",
      "for i in range(nofsections):\n",
      "    icagc[i].record(gc[i](0.5)._ref_ica)\n",
      "    ccagc[i].record(gc[i](0.5)._ref_caiav_cadifusnpumpOGBenddif)     \n",
      "\n",
      "####Running the Simulation####\n",
      "h.v_init=-85 #forced resting Vm for granule cells\n",
      "h.init()\n",
      "\n",
      "for l in range(nofsections):# dummy current source to compensate current caused by the forced Vm. \n",
      "    gc[l].ic_constant=-(gc[l].ina+gc[l].ik+gc[l].ica)\n",
      "for l in range(nofspines):    \n",
      "    spineh[l].ic_constant=-(spineh[l].ina+spineh[l].ik+spineh[l].ica)\n",
      "\n",
      "if h.cvode.active():\n",
      "    h.cvode.re_init()\n",
      "else:\n",
      "    h.fcurrent()\n",
      "\n",
      "h.tstop =350\n",
      "h.run()\n",
      "\n",
      "#### Vectors and conversion of units (um to nm)####\n",
      "time_ar=np.asarray(time_h)\n",
      "clamp=np.asarray(clampcurrent)\n",
      "v_spineh=np.asarray(vrec_spineh[0])\n",
      "v_soma=np.asarray(vrec_gc[0])\n",
      "\n",
      "icanmdr_show=[np.array for i in range(nofspines)]\n",
      "icattype_show=[np.array for i in range(nofspines)]\n",
      "icahvacc_show=[np.array for i in range(nofspines)]\n",
      "ccaspineh_show=[np.array for i in range(nofspines)]\n",
      "icaspineh_show=[np.array for i in range(nofspines)]\n",
      "ccagc_show=[np.array for i in range(nofsections)]\n",
      "icagc_show=[np.array for i in range(nofsections)]\n",
      "\n",
      "for i in range(nofspines):\n",
      "    ccaspineh_show[i]=1e6*np.asarray(ccaspineh[i])#converting to nM\n",
      "    icanmdr_show[i]=(1e2*np.asarray(icanmdr[i]))/3.14 #converting nA to mA/cm2, spine area is (piXe-8)cm2 \n",
      "    icahvacc_show[i]=np.asarray(icahvacc[i]) #mA/cm2\n",
      "    icattype_show[i]=np.asarray(icattype[i]) #mA/cm2\n",
      "        \n",
      "for i in range(nofsections):\n",
      "    ccagc_show[i]=1e6*np.asarray(ccagc[i])#converting to nM\n",
      "\n",
      "####Mapping of Ca Concentration to df/f####\n",
      "y_dff_spineh=[np.array for i in range(nofspines)]\n",
      "y_dff_gc=[np.array for i in range(nofsections)]\n",
      "\n",
      "for i in range(nofspines): \n",
      "    y_dff_spineh[i]=spine_fit(ccaspineh_show[i])\n",
      "    \n",
      "for i in range(nofsections):    \n",
      "    y_dff_gc[i]=spine_fit(ccagc_show[i])    \n",
      "    \n",
      "#####Sample Plotting####\n",
      "plt.subplot(3,2,1).set_title('Soma Vm')\n",
      "plt.plot(time_h,vrec_gc[0])\n",
      "plt.ylabel('mV')\n",
      "\n",
      "plt.subplot(3,2,2).set_title('Spinehead Vm')\n",
      "plt.plot(time_h,vrec_spineh[0])\n",
      "plt.ylabel('mV')\n",
      "\n",
      "plt.subplot(3,2,3).set_title('Spinehead icahvacc')\n",
      "plt.plot(time_h,icahvacc_show[0])\n",
      "\n",
      "plt.ylabel('mA/cm2')\n",
      "\n",
      "plt.subplot(3,2,4).set_title('Spinehead icanmdr')\n",
      "plt.plot(time_h,icanmdr_show[0])\n",
      "plt.ylabel('mA/cm2') \n",
      "\n",
      "plt.subplot(3,2,5).set_title('Spinehead icattype')\n",
      "plt.plot(time_h,icattype_show[0])\n",
      "plt.ylabel('mA/cm2') \n",
      "\n",
      "plt.subplot(3,2,6).set_title('Spinehead df/f')\n",
      "plt.plot(time_h,y_dff_spineh[0],'g') #for \"no OGB case\" use ccaspineh_show[0] with nM ylabel instead\n",
      "#plt.plot(time_h,ccaspineh_show[0])\n",
      "plt.ylabel('%')\n",
      "plt.show()\n",
      "\n",
      "####For saving data vectors use: np.savetxt('file name',vector name, fmt=\"%1.8f\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}

Loading data, please wait...