Shaping NMDA spikes by timed synaptic inhibition on L5PC (Doron et al. 2017)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:231427
This work (published in "Timed synaptic inhibition shapes NMDA spikes, influencing local dendritic processing and global I/O properties of cortical neurons", Doron et al, Cell Reports, 2017), examines the effect of timed inhibition over dendritic NMDA spikes on L5PC (Based on Hay et al., 2011) and CA1 cell (Based on Grunditz et al. 2008 and Golding et al. 2001).
Reference:
1 . Doron M, Chindemi G, Muller E, Markram H, Segev I (2017) Timed Synaptic Inhibition Shapes NMDA Spikes, Influencing Local Dendritic Processing and Global I/O Properties of Cortical Neurons. Cell Rep 21:1550-1561 [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;
Cell Type(s): Neocortex V1 L6 pyramidal corticothalamic GLU cell;
Channel(s): I Na,p; I Na,t; I L high threshold; I T low threshold; I A; I M; I h; I K,Ca; I Calcium; I A, slow;
Gap Junctions:
Receptor(s): NMDA; GabaA; AMPA;
Gene(s):
Transmitter(s): Glutamate; Gaba;
Simulation Environment: NEURON;
Model Concept(s): Active Dendrites; Detailed Neuronal Models;
Implementer(s): Doron, Michael [michael.doron at mail.huji.ac.il];
Search NeuronDB for information about:  Neocortex V1 L6 pyramidal corticothalamic GLU cell; GabaA; AMPA; NMDA; I Na,p; I Na,t; I L high threshold; I T low threshold; I A; I M; I h; I K,Ca; I Calcium; I A, slow; Gaba; Glutamate;
/
reproduction
readme.txt
ampa.mod
Ca_HVA.mod
Ca_LVAst.mod *
cad.mod *
cadiffus.mod
CaDynamics_E2.mod *
canmda.mod *
car.mod *
gabaa.mod *
gabab.mod *
Ih.mod *
Im.mod *
K_Pst.mod *
K_Tst.mod *
Nap_Et2.mod *
NaTa_t.mod *
NaTs2_t.mod *
nmda.mod *
ProbAMPA.mod
ProbAMPANMDA2_ratio.mod
ProbUDFsyn2_lark.mod
SK_E2.mod *
SKv3_1.mod *
SynExp5NMDA.mod *
cell1.asc *
cellmorphology.hoc *
create_data_for_figure_01.py
create_data_for_figure_02.py
create_data_for_figure_03.py *
create_data_for_figure_03_control.py
create_data_for_figure_03_Dt_10.py *
create_data_for_figure_03_Dt_40.py *
data_same_excitation.pickle
iniparameter.hoc
L5PCbiophys3.hoc
L5PCbiophys3_noActive.hoc
mosinit.hoc
plot_figure_01.py
plot_figure_02.py
plot_figure_03.py
plot_figure_04.py
plot_figure_05.py
plot_figure_06.py
spikes_num.pickle
spine.hoc
TTC.hoc
                            
#!/usr/bin/python


import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt

import numpy as np
import sys
import pickle
import time


def calcIntegral(delaysVoltageNumpy):
  start = 100 / 0.025
  end = 300 / 0.025
  res = []
  minVolt = -64
  delays = sorted(delaysVoltageNumpy.keys())[1:]
  controlDelay = sorted(delaysVoltageNumpy.keys())[0]
  minVolt = np.min(delaysVoltageNumpy[controlDelay][start:end])
  maxRes = -np.inf
  minRes = np.inf
  controlRes = sum(delaysVoltageNumpy[controlDelay][start:end] + abs(minVolt)) * 0.025
  for delay in delays:
    delayTime = start + (delay / 0.025)
    res.append(sum(delaysVoltageNumpy[delay][start:end] + abs(minVolt)) * 0.025)
    if (res[-1] > maxRes): maxRes = res[-1]
    if (res[-1] < minRes): minRes = res[-1]
  for ind in range(len(res)):
    res[ind] = res[ind] / (controlRes)
  return res

def plot_figure_02_c():
  delayDiff = 1
  delays = np.arange(-20, 60, delayDiff)
  
  res = (pickle.load(open('figure_02_data.pickle','rb')))
  resClose = calcIntegral(res['close'])
  resMiddle = calcIntegral(res['middle'])
  resFar = calcIntegral(res['far'])
  
  delayDiff = 1
  delays = np.arange(-20, 60, delayDiff)
  font = {'weight':'regular', 'size':8, 'family':'sans-serif', 'sans-serif':'Arial'}
  matplotlib.rc('font', **font)
  fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8,8), gridspec_kw={'height_ratios':[20,1]}, sharex=True)
  for ax in [ax1, ax2]:
    ax.plot(delays, resFar[:len(delays)], linewidth = 1, color='red')
    ax.plot(delays, resMiddle[:len(delays)], linewidth = 1, color='black')
    ax.plot(delays, resClose[:len(delays)], linewidth = 1, color='blue')
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.spines['left'].set_linewidth(1)
    ax.spines['bottom'].set_linewidth(1)
    ax.tick_params(direction='out', width=1, size=5)
    ax.yaxis.set_ticks_position('left')
    ax.xaxis.set_ticks_position('bottom')   
    ax.xaxis.set_ticks([-15,0, 15, 30, 45, 60])
    ax.xaxis.set_ticklabels([-15,0, 15, 30, 45, 60], fontsize = 7)
  ax1.text(delays[np.where(resFar == np.min(resFar))[0]] - 2, np.min(resFar) + 0.2, r'$\mathregular{x\/ =\/ 35\mu m}$', fontsize=6, color="red")
  ax1.text(delays[np.where(resMiddle == np.min(resMiddle))[0]], np.min(resMiddle) - 0.07, r'$\mathregular{x\/ =\/ 0\mu m}$', fontsize=6, color="black")
  ax1.text(delays[np.where(resClose == np.min(resClose))[0]] - 5, np.min(resClose) + 0.12, r'$\mathregular{x\/ =\/ -35\mu m}$', fontsize=6, color="blue")
  ax2.set_xlabel(r'$\mathregular{\Delta t}$ Inhibition vs. excitation (msec)', fontsize = 8, fontweight = 'regular')
  ax1.set_ylabel('Time Integral of \nNMDA Spike (Norm.)', fontsize = 8, fontweight = 'regular')
  ax1.axis([delays[0], 60, 0.3625, 1.01])
  ax2.axis([delays[0], 60, 0, 0.1])
  kwargs = dict(linewidth = 1, transform=ax1.transAxes, color='k', clip_on=False)
  ax1.plot((-0.015, 0.015), (0 + 0.005, 0 - 0.005), **kwargs)  
  kwargs = dict(linewidth = 1, transform=ax2.transAxes, color='k', clip_on=False)
  ax2.plot((-0.015, 0.015), (1 + 0.1, 1 - 0.1), **kwargs)  
  ax1.spines['top'].set_visible(False)
  ax2.spines['top'].set_visible(False)
  ax1.spines['bottom'].set_visible(False)
  ax1.xaxis.set_ticks_position('none')
  plt.subplots_adjust(hspace = 0.1) 
  ax1.yaxis.set_ticks([round(0.4,2), round(0.55,3), round(0.7,2), round(0.85,3), round(1.0,2)])
  ax1.yaxis.set_ticklabels([round(0.4,2), round(0.55,3), round(0.7,2), round(0.85,3), round(1.0,2)], fontsize=7)
  ax2.yaxis.set_ticks([round(0.0,2)])
  ax2.yaxis.set_ticklabels([round(0.0,2)], fontsize=7)
  ax1.yaxis.set_label_coords(- 0.255, 0.4)
  ax.tick_params(direction='out', width=1, size=5)
  ax.spines['top'].set_visible(False)
  ax.spines['right'].set_visible(False)
  ax.spines['bottom'].set_linewidth(1)
  ax.spines['left'].set_linewidth(1)
  ax.yaxis.set_ticks_position('left')
  ax.xaxis.set_ticks_position('bottom')   
  fig.set_size_inches(1.7, 1.7)
  fig.savefig('figure_02_c.pdf', transparent=True, bbox_inches='tight', format='pdf', dpi=300)
  plt.close()


def plot_figure_02_b():
  delayDiff = 5
  delays = [-100000, 20] 
  gabaAmps = [0.001]
  nmdaAmps = [0.0004]
  
  font = {'weight':'regular', 'size':8, 'family':'sans-serif', 'sans-serif':'Arial'}
  matplotlib.rc('font', **font)
  colors = {-100000: 'black', -10: 'brown', 0 : 'green', 10 : 'blue', 20 : 'red'}
  plots = {}
  res = (pickle.load(open('figure_02_data.pickle','rb')))
  resClose = res['close']
  resMiddle = res['middle']
  resFar = res['far']
  
  timeVectorNumpy = np.arange(0, 250.025, 0.025)
  for d in delays[1:]:
    location_texts = [r'$\mathregular{x\/ =\/ 35\mu m}$' + '\n   %d msec' % d,
    r'$\mathregular{x\/ =\/ 0\mu m}$' + '\n   %d msec' % d,
    r'$\mathregular{x\/ =\/ -35\mu m}$' + '\n   %d msec' % d]
    location_colors = ['red','black','blue']
    location_files = ['figure_02_b_top_far_%d.pdf' % d,
    'figure_02_b_top_middle_%d.pdf' % d,
    'figure_02_b_top_close_%d.pdf' % d]
    location_res = [resFar,resMiddle,resClose]
    for location in range(3):
      fig = plt.figure(figsize=(8, 8))
      ax = fig.add_subplot(111)
      ax.plot([100 + d, 100 + d],[location_res[location][-100000][(100 + d) / 0.025], -4],linewidth=0.75,color='black',linestyle=':')
      ax.plot(timeVectorNumpy, location_res[location][-100000], linewidth = 0.75, color="black", linestyle='--', dashes=(2,2));
      ax.plot(timeVectorNumpy, location_res[location][d], linewidth = 0.75, color='black');
      ax.spines['top'].set_visible(False)
      ax.spines['right'].set_visible(False)
      ax.spines['left'].set_visible(False)
      ax.spines['bottom'].set_visible(False)  
      ax.yaxis.set_ticks_position('left')
      ax.xaxis.set_ticks_position('bottom')       
      ax.axis([80, 200, -80, 10], width=4)
      ax.set_xticks([])
      ax.set_yticks([])
      plt.text(100 + d - 22, 10, location_texts[location], color = location_colors[location], fontsize=6)
      ax.arrow(100 + d, 5, 0, -7.5, head_width=2, width=0.5, head_length=1, fc=location_colors[location], ec=location_colors[location])
      ax.fill_between(timeVectorNumpy, location_res[location][d], -70,color=location_colors[location], alpha=0.3)
      fig.set_size_inches(1, 1)
      fig.savefig(location_files[location], transparent=True, bbox_inches='tight', format='pdf', dpi=300, pad_inches=0)
      plt.close()
  
  location_delays = [20, 16, 40]
  location_texts = [r'$\mathregular{x\/ =\/ 35\mu m}$' + '\n   20 msec',
  r'$\mathregular{x\/ =\/ 0\mu m}$' + '\n   16 msec',
  r'$\mathregular{x\/ =\/ -35\mu m}$' + '\n   40 msec']
  location_colors = ['red','black','blue']
  location_files = ['figure_02_b_bottom_far_20.pdf',
  'figure_02_b_bottom_middle_16.pdf',
  'figure_02_b_bottom_close_40.pdf']
  location_res = [resFar,resMiddle,resClose]
  for location in range(3):
    fig = plt.figure(figsize=(8, 8))
    ax = fig.add_subplot(111)
    ax.plot([100 + location_delays[location], 100 + location_delays[location]],[location_res[location][-100000][(100 + location_delays[location]) / 0.025], -4],linewidth=0.75,color='black',linestyle=':')
    ax.plot(timeVectorNumpy, location_res[location][-100000], linewidth = 0.75, color="black", linestyle='--', dashes=(2,2));
    ax.plot(timeVectorNumpy, location_res[location][location_delays[location]], linewidth = 0.75, color='black');
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.spines['left'].set_visible(False)
    ax.spines['bottom'].set_visible(False)  
    ax.yaxis.set_ticks_position('left')
    ax.xaxis.set_ticks_position('bottom')       
    ax.axis([80, 200, -80, 10], width=4)
    ax.set_xticks([])
    ax.set_yticks([])
    plt.text(100 + location_delays[location] - 22, 10, location_texts[location], color = location_colors[location], fontsize=6)
    ax.arrow(100 + location_delays[location], 5, 0, -7.5, head_width=2, width=0.5, head_length=1, fc=location_colors[location], ec=location_colors[location])
    ax.fill_between(timeVectorNumpy, location_res[location][location_delays[location]], -70,color=location_colors[location], alpha=0.3)
    fig.set_size_inches(1, 1)
    fig.savefig(location_files[location], transparent=True, bbox_inches='tight', format='pdf', dpi=300, pad_inches=0)
    plt.close()      

plot_figure_02_b()
plot_figure_02_c()

Loading data, please wait...