from plot_results import *
from matplotlib import cm
output_file_paths = dict()
if len(sys.argv) > 1:
output_file_paths['soma'] = str(sys.argv[1])
if not os.path.isfile(output_file_paths['soma']):
raise IOError('file containing data for nap_EPSP_amplification_DC_soma_stim_trunk not found at provided path: '
'%s' % output_file_paths['soma'])
else:
output_file_paths['soma'] = 'data/07162017_nap_amplification_DC_soma_stim_trunk.hdf5'
if not os.path.isfile(output_file_paths['soma']):
raise IOError('default file containing data for nap_EPSP_amplification_DC_soma_stim_trunk not found: %s' %
output_file_paths['soma'])
if len(sys.argv) > 2:
output_file_paths['dend'] = str(sys.argv[2])
if not os.path.isfile(output_file_paths['dend']):
raise IOError('file containing data for nap_EPSP_amplification_DC_dend_stim_trunk not found at provided path: '
'%s' % output_file_paths['dend'])
else:
output_file_paths['dend'] = 'data/07162017_nap_amplification_DC_dend_stim_trunk.hdf5'
if not os.path.isfile(output_file_paths['dend']):
raise IOError('default file containing data for nap_EPSP_amplification_DC_dend_stim_trunk not found: %s' %
output_file_paths['soma'])
mpl.rcParams['font.size'] = 14.
rec_dict = {}
syn_counter = {}
raw_amplitude = {}
amplification_ratio = {}
drug_control_ratio = {}
baseline = 10. # ms
for section, file_path in output_file_paths.iteritems():
rec_dict[section] = {}
syn_counter[section] = {}
with h5py.File(file_path, 'r') as f:
trial = f.itervalues().next()
if 'dt' in trial.attrs:
dt = trial.attrs['dt']
else:
dt = 0.02
if 'duration' in trial.attrs:
duration = trial.attrs['duration']
else:
duration = 450.
if 'equilibrate' in trial.attrs:
equilibrate = trial.attrs['equilibrate']
else:
equilibrate = 250.
t = np.arange(0., duration, dt)
start = int((equilibrate - baseline) / dt)
end = int((duration - 100.)/ dt)
offset_t = t[start:end] - equilibrate
for trial in f.itervalues():
this_vrest = trial.attrs['vrest']
this_ap5 = trial.attrs['ap5']
this_ttx = trial.attrs['ttx']
if this_ap5:
if this_ttx:
group = 'AP5 + TTX'
else:
group = 'AP5'
else:
if this_ttx:
group = 'TTX'
else:
group = 'Control'
if group not in rec_dict[section]:
rec_dict[section][group] = {}
rec_dict[section][group]['vrest'] = []
rec_dict[section][group]['recs'] = {}
syn_counter[section][group] = []
rec_dict[section][group]['vrest'].append(this_vrest)
syn_counter[section][group].append(0)
for rec in trial['rec'].itervalues():
description = rec.attrs['description']
if 'spine' in description:
description = 'spine'
syn_counter[section][group][-1] += 1
elif 'i_NMDA' in description:
description = 'i_NMDA'
if description not in rec_dict[section][group]['recs']:
rec_dict[section][group]['recs'][description] = []
if description in ['spine', 'i_NMDA'] and len(rec_dict[section][group]['recs'][description]) < \
len(rec_dict[section][group]['vrest']):
rec_dict[section][group]['recs'][description].append(None)
this_rec = np.interp(t, trial['time'], rec)[start:end]
if description in ['soma', 'dend', 'spine']:
offset = np.mean(this_rec[int((baseline - 3.) / dt):int((baseline - 1.) / dt)])
this_rec -= offset
if description in ['spine', 'i_NMDA']:
if rec_dict[section][group]['recs'][description][-1] is None:
rec_dict[section][group]['recs'][description][-1] = this_rec
else:
rec_dict[section][group]['recs'][description][-1] = \
np.add(rec_dict[section][group]['recs'][description][-1], this_rec)
else:
rec_dict[section][group]['recs'][description].append(this_rec)
for group in rec_dict[section]:
for description in [description for description in ['spine', 'i_NMDA'] if
description in rec_dict[section][group]['recs']]:
for i in xrange(len(rec_dict[section][group]['recs'][description])):
rec_dict[section][group]['recs'][description][i] /= syn_counter[section][group][i]
for section in rec_dict:
raw_amplitude[section] = {}
for group in ['Control', 'TTX', 'AP5']:
raw_amplitude[section][group] = {}
for description in rec_dict[section][group]['recs']:
raw_amplitude[section][group][description] = []
for trace in rec_dict[section][group]['recs'][description]:
raw_amplitude[section][group][description].append(np.max(np.abs(trace)))
hyper_vm = -62.
depol_vm = -56.
for section in raw_amplitude:
amplification_ratio[section] = {}
for group in raw_amplitude[section]:
amplification_ratio[section][group] = {}
values = rec_dict[section][group]['vrest']
hyper = min(range(len(values)), key=lambda i: abs(values[i]-hyper_vm))
depol = min(range(len(values)), key=lambda i: abs(values[i] - depol_vm))
for description in raw_amplitude[section][group]:
amplification_ratio[section][group][description] = raw_amplitude[section][group][description][depol] / \
raw_amplitude[section][group][description][hyper]
for section in amplification_ratio:
drug_control_ratio[section] = {}
for group in ['TTX', 'AP5']:
drug_control_ratio[section][group] = {}
for description in amplification_ratio[section][group]:
drug_control_ratio[section][group][description] = amplification_ratio[section][group][description] / \
amplification_ratio[section]['Control'][description]
bar_width = 0.8
ordered_descriptions = ['soma', 'dend', 'spine', 'ais_ina', 'dend_ina', 'i_NMDA']
ordered_xlabels = ['Soma EPSP', 'Dend EPSP', 'Spine EPSP', 'AIS INa', 'Dend INa', 'INMDA']
bar_indexes = np.arange(len(ordered_descriptions))
fig, axes = plt.subplots(2, 2, figsize=(8, 7))
section = 'soma'
group = 'Control'
vals1 = [amplification_ratio[section][group][description] for description in ordered_descriptions]
rects1 = axes[0][0].bar(bar_indexes, vals1, bar_width, color='k') # , bottom=0.1)
axes[0][0].set_xticks(bar_indexes+0.4)
axes[0][0].set_xticklabels(ordered_xlabels, rotation=45, ha='right', fontsize=12)
axes[0][0].tick_params(axis='x', width=0)
axes[0][0].set_yscale('log')
#axes[0][0].set_ylim(0.5, 100.)
axes[0][0].set_ylim(0.1, 10.)
axes[0][0].set_ylabel('Amplification ratio\n(%i mV/%i mV)' % (depol_vm, hyper_vm))
# axes[0][0].set_yticks([1, 10, 100])
axes[0][0].set_yticks([1, 10])
#axes[0][0].set_yticklabels([1, 10, 100])
axes[0][0].set_yticklabels([1, 10])
axes[0][0].set_title('Adjusted Vm: Soma', fontsize=mpl.rcParams['font.size'])
axes[0][0].axhline(y=1., color='grey', linestyle='--', linewidth=1)
axes[0][0].set_aspect('auto')
section = 'dend'
vals2 = [amplification_ratio[section][group][description] for description in ordered_descriptions]
rects2 = axes[0][1].bar(bar_indexes, vals2, bar_width, color='k') # , bottom=0.1)
axes[0][1].set_xticks(bar_indexes+0.4)
axes[0][1].set_xticklabels(ordered_xlabels, rotation=45, ha='right', fontsize=12)
axes[0][1].tick_params(axis='x', width=0)
axes[0][1].set_ylabel('Amplification ratio\n(%i mV/%i mV)' % (depol_vm, hyper_vm))
axes[0][1].set_yscale('log')
axes[0][1].set_ylim(0.1, 10.)
axes[0][1].set_yticks([1, 10])
axes[0][1].set_yticklabels([1, 10])
axes[0][1].set_title('Adjusted Vm: Dend', fontsize=mpl.rcParams['font.size'])
axes[0][1].axhline(y=1., color='grey', linestyle='--', linewidth=1)
axes[0][1].set_aspect('auto')
ordered_descriptions = ['soma', 'dend', 'spine', 'soma', 'dend', 'spine', 'i_NMDA']
ordered_groups = ['AP5'] * 3 + ['TTX'] * 4
ordered_xlabels = ['Soma EPSP', 'Dend EPSP', 'Spine EPSP', 'Soma EPSP', 'Dend EPSP', 'Spine EPSP', 'INMDA']
bar_indexes2 = np.arange(len(ordered_descriptions))
section = 'soma'
vals3 = [drug_control_ratio[section][group][description] for group, description in
zip(ordered_groups, ordered_descriptions)]
rects3 = axes[1][0].bar(bar_indexes2, vals3, bar_width, color='g', edgecolor='k')
for i in xrange(3):
rects3[i].set_color('r')
rects3[i].set_edgecolor('k')
axes[1][0].set_xticks(bar_indexes2+0.4)
axes[1][0].set_xticklabels(ordered_xlabels, rotation=45, ha='right', fontsize=12)
axes[1][0].tick_params(axis='x', width=0)
axes[1][0].set_ylim(0., 1.5)
axes[1][0].set_ylabel('Normalized\namplification ratio\n(Drug/Control)')
axes[1][0].set_title('Adjusted Vm: Soma', fontsize=mpl.rcParams['font.size'])
axes[1][0].axhline(y=1., color='grey', linestyle='--', linewidth=1)
axes[1][0].set_aspect('auto')
section = 'dend'
vals4 = [drug_control_ratio[section][group][description] for group, description in
zip(ordered_groups, ordered_descriptions)]
rects4 = axes[1][1].bar(bar_indexes2, vals4, bar_width, color='g', edgecolor='k')
for i in xrange(3):
rects4[i].set_color('r')
rects4[i].set_edgecolor('k')
axes[1][1].set_xticks(bar_indexes2+0.4)
axes[1][1].set_xticklabels(ordered_xlabels, rotation=45, ha='right', fontsize=12)
axes[1][1].tick_params(axis='x', width=0)
axes[1][1].set_ylabel('Normalized\namplification ratio\n(Drug/Control)')
axes[1][1].set_ylim(0., 1.5)
axes[1][1].set_title('Adjusted Vm: Dend', fontsize=mpl.rcParams['font.size'])
axes[1][1].axhline(y=1., color='grey', linestyle='--', linewidth=1)
axes[1][1].set_aspect('auto')
clean_axes(axes)
fig.tight_layout()
fig.show()
bar_width = 0.8
ordered_descriptions = ['soma', 'dend', 'spine', 'soma', 'dend', 'spine']
ordered_sections = ['soma', 'soma', 'soma', 'dend', 'dend', 'dend']
ordered_xlabels = ['Soma', 'Apical dendrite', 'Dendritic spine', 'Soma', 'Apical dendrite', 'Dendritic spine']
bar_indexes = np.array([0., 1., 2., 3.15, 4.15, 5.15])
fig, axes = plt.subplots(2, 2, figsize=(8, 7))
group = 'Control'
vals1 = [amplification_ratio[section][group][description] for description, section in zip(ordered_descriptions,
ordered_sections)]
rects1 = axes[0][0].bar(bar_indexes, vals1, bar_width, color='k')
axes[0][0].set_xticks(bar_indexes+0.2)
axes[0][0].set_xticklabels(ordered_xlabels, rotation=45, ha='right', fontsize=12)
axes[0][0].tick_params(axis='x', width=0)
axes[0][0].set_ylim(0., 3.)
axes[0][0].set_ylabel('Amplification ratio\n(%i mV/%i mV)' % (depol_vm, hyper_vm))
axes[0][0].set_title('Full model', fontsize=mpl.rcParams['font.size'])
axes[0][0].axhline(y=1., color='r', linestyle='--', linewidth=1)
axes[0][0].set_aspect('auto')
ordered_descriptions = ['soma', 'dend', 'spine', 'soma', 'dend', 'spine']
ordered_groups = ['AP5'] * 3 + ['TTX'] * 3
section = 'soma'
vals3 = [drug_control_ratio[section][group][description] for group, description in
zip(ordered_groups, ordered_descriptions)]
rects3 = axes[1][0].bar(bar_indexes, vals3, bar_width, color='g', edgecolor='k')
for i in xrange(3):
rects3[i].set_color('r')
rects3[i].set_edgecolor('k')
axes[1][0].set_xticks(bar_indexes+0.2)
axes[1][0].set_xticklabels(ordered_xlabels, rotation=45, ha='right', fontsize=12)
axes[1][0].tick_params(axis='x', width=0)
axes[1][0].set_ylim(0., 1.5)
axes[1][0].set_ylabel('Normalized amplification ratio\n(Drug/Control)')
axes[1][0].set_title('Full model', fontsize=mpl.rcParams['font.size'])
axes[1][0].axhline(y=1., color='grey', linestyle='--', linewidth=1)
axes[1][0].set_aspect('auto')
clean_axes(axes)
fig.tight_layout()
fig.show()
this_cm = cm.get_cmap()
num_items = len(rec_dict.itervalues().next().itervalues().next()['vrest'])
colors = [this_cm(1.*i/float(num_items-1)) for i in range(num_items)]
ordered_descriptions = ['soma', 'dend', 'spine', 'soma_ina', 'ais_ina', 'dend_ina', 'i_NMDA']
ordered_subtitles = ['Soma EPSP', 'Dend EPSP', 'Spine EPSP', 'Soma INa', 'AIS INa', 'Dend INa', 'INMDA']
for section, legend_title in zip(['soma', 'dend'], ['Soma Vm (mV)', 'Dend Vm (mV)']):
sort_indexes = dict()
for rec_type, subtitle in zip(ordered_descriptions, ordered_subtitles):
fig, axes = plt.subplots(2, 2, sharey=True, sharex=True)
for i, group in enumerate([group for group in ['Control', 'TTX', 'AP5', 'AP5 + TTX']
if group in rec_dict[section]]):
if group not in sort_indexes:
sort_indexes[group] = range(len(rec_dict[section][group]['vrest']))
sort_indexes[group].sort(key=rec_dict[section][group]['vrest'].__getitem__)
sort_indexes[group].reverse()
rec_dict[section][group]['vrest'] = map(rec_dict[section][group]['vrest'].__getitem__,
sort_indexes[group])
if rec_type in rec_dict[section][group]['recs']:
row = i / 2
col = i % 2
axes[row][col].set_title(group)
rec_dict[section][group]['recs'][rec_type] = map(rec_dict[section][group]['recs'][rec_type].__getitem__,
sort_indexes[group])
for j, vrest in enumerate(rec_dict[section][group]['vrest']):
if group == 'Control':
axes[row][col].plot(offset_t, rec_dict[section][group]['recs'][rec_type][j], color=colors[j],
label='%.1f mV' % vrest)
else:
axes[row][col].plot(offset_t, rec_dict[section][group]['recs'][rec_type][j], color=colors[j])
if rec_type in ['soma', 'dend', 'spine']:
axes[0][0].set_ylabel('EPSP amp (mV)')
fig.suptitle(subtitle)
elif rec_type in ['soma_ina', 'dend_ina', 'ais_ina']:
axes[0][0].set_ylabel('Current (mA/cm2)')
fig.suptitle(subtitle)
else:
axes[0][0].set_ylabel('Current (nA)')
fig.suptitle(subtitle)
handles, labels = axes[0][0].get_legend_handles_labels()
axes[1][0].set_xlabel('Time (ms)')
clean_axes(axes)
fig.tight_layout()
fig.subplots_adjust(top=0.85, hspace=0.5, wspace=0.2, right=0.7)
fig.legend(handles, labels, title=legend_title, loc=(0.75, 0.4), frameon=False, framealpha=0.5)
fig.show()
plt.show()
plt.close()