#!/usr/bin/python import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt import numpy as np import sys import pickle import time timeVectorNumpy = np.arange(0,250.025, 0.025) font = {'weight':'regular', 'size':8, 'family':'sans-serif', 'sans-serif':'Arial'} matplotlib.rc('font', **font) 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_01_b(): res = pickle.load(open('figure_1_data.pickle','rb'))[0.001] 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'} for d in [-10, 0, 10, 20]: fig = plt.figure(figsize=(8, 8)) ax = fig.add_subplot(111) ax.plot(np.array([100 + d, 100 + d]), np.array([res[-100000][(100 + d) / 0.025], -4]),linewidth=0.75,color='black',linestyle=':') ax.plot(np.arange(0, len(res[0]) * 0.025, 0.025), res[-100000], linewidth = 0.75, color="black", linestyle='--', dashes=(3, 3)); ax.plot(np.arange(0, len(res[0]) * 0.025, 0.025), res[d], linewidth = 0.75,label=r'$\mathregular{\Delta t\/ =\/ %d\/ (msec)}$' % d, 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('none') ax.xaxis.set_ticks_position('none') ax.axis([80, 200, -80, 10], width=1) ax.set_xticks([]) ax.set_yticks([]) if (d == 20): ax.plot([150, 160],[-5, -5],linewidth=0.75,color='black') ax.plot([160, 160],[-5, 5],linewidth=0.75,color='black') ax.text(148, -15, "10 msec", fontsize = 10) ax.text(163, -1, "10 mV", fontsize = 10) # plots[d][0].set_color(colors[d]) plt.text(100 + d - 10, 10, '%d msec' % d, color = colors[d], fontsize=10) ax.arrow(100 + d, 5, 0, -7.5, head_width=2, width=0.75, head_length=1, fc=colors[d], ec=colors[d]) ax.fill_between(np.arange(0, len(res[0]) * 0.025, 0.025), res[d], -70, where = res[d] > -70, color=colors[d], alpha=0.3) fig.set_size_inches(1.7, 1.7) fig.savefig('figure_01_b_%d.pdf' % d, transparent=True, bbox_inches='tight', format='pdf', dpi=300) plt.show(block = 0) def plot_figure_01_c(): res = calcIntegral(pickle.load(open('figure_1_data.pickle','rb'))[0.001]) 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, res, linewidth = 1, color="black"); ax.plot([-10],[res[list(delays).index(i)] for i in [-10]], "o", markersize = 7, color="brown"); ax.plot([0],[res[list(delays).index(i)] for i in [0]], "o", markersize = 7, color="green"); ax.plot([10],[res[list(delays).index(i)] for i in [10]], "o", markersize = 7, color="blue"); ax.plot([20],[res[list(delays).index(i)] for i in [20]],"o", markersize = 7, color="red"); 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=10) ax1.fill_between(delays[:(res.index(min(res)))] , 0 , res[:(res.index(min(res)))], color="lightblue") ax1.fill_between(delays[(res.index(min(res)) - 1):] , 0 , res[(res.index(min(res)) - 1):], color="lightpink") ax1.text(delays[0] + 3, 0.415, 'Regeneration', fontsize=9, fontweight='regular') ax1.text(30, 0.415, 'Termination', fontsize=9, fontweight='regular') ax2.set_xlabel(r'$\mathregular{\Delta t}$ Inhibition vs excitation (msec)', fontsize = 10, fontweight = 'regular') ax1.set_ylabel('Time Integral of \nNMDA Spike (Norm.)', fontsize = 10, 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=10) ax2.yaxis.set_ticks([round(0.0,2)]) ax2.yaxis.set_ticklabels([round(0.0,2)], fontsize=10) ax1.yaxis.set_label_coords(- 0.205, 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(3, 3) fig.savefig('figure_01_c.pdf', transparent=True, bbox_inches='tight', format='pdf', dpi=300) plt.close('all') def plot_figure_01_d(): res = (pickle.load(open('figure_1_data.pickle','rb'))) resWeak = calcIntegral(res[0.0005]) resNormal = calcIntegral(res[0.001]) resStrong = calcIntegral(res[0.0015]) 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, resWeak[:len(delays)], linewidth = 1, color='red') ax.plot(delays, resNormal[:len(delays)], linewidth = 1, color='black') ax.plot(delays, resStrong[: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 = 10) ax1.text(delays[np.where(resWeak == np.min(resWeak))[0]] - 8, np.min(resWeak) + 0.2, r'$\mathregular{g_{GABA_{A}}}$ = 0.5 (nS)', fontsize=9, color="red") ax1.text(delays[np.where(resNormal == np.min(resNormal))[0]] - 2, np.min(resNormal) + 0.15, '1.0 (nS)', fontsize=9, color="black") ax1.text(delays[np.where(resStrong == np.min(resStrong))[0]] + 10, np.min(resStrong) + 0.025, '1.5 (nS)', fontsize=9, color="blue") ax2.set_xlabel(r'$\mathregular{\Delta t}$ Inhibition vs excitation (msec)', fontsize = 10, fontweight = 'regular') ax1.set_ylabel('Time Integral of \nNMDA Spike (Norm.)', fontsize = 10, 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=10) ax2.yaxis.set_ticks([round(0.0,2)]) ax2.yaxis.set_ticklabels([round(0.0,2)], fontsize=10) ax1.yaxis.set_label_coords(- 0.205, 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(3, 3) fig.savefig('figure_01_d.pdf', transparent=True, bbox_inches='tight', format='pdf', dpi=300) plt.close() plot_figure_01_b() plot_figure_01_c() plot_figure_01_d()