finished response figure ...
move data and figs to folders, ignore them in git
This commit is contained in:
		
							parent
							
								
									dde8bd842d
								
							
						
					
					
						commit
						7e673267e5
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,2 +1,4 @@ | |||||||
| .vscode/.ropeproject/config.py | .vscode/.ropeproject/config.py | ||||||
| .vscode/.ropeproject/objectdb | .vscode/.ropeproject/objectdb | ||||||
|  | figures | ||||||
|  | data | ||||||
|  | |||||||
| @ -1,3 +1,4 @@ | |||||||
|  | import os | ||||||
| import numpy as np  | import numpy as np  | ||||||
| import scipy.signal as sig  | import scipy.signal as sig  | ||||||
| import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||||||
| @ -5,6 +6,8 @@ import matplotlib.pyplot as plt | |||||||
| from chirp_stimulation import create_chirp | from chirp_stimulation import create_chirp | ||||||
| from util import despine | from util import despine | ||||||
| 
 | 
 | ||||||
|  | figure_folder = "figures" | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| def get_signals(eodfs, condition, contrast, chirp_size, chirp_duration, chirp_amplitude_dip, | def get_signals(eodfs, condition, contrast, chirp_size, chirp_duration, chirp_amplitude_dip, | ||||||
|                 chirp_times, duration, dt): |                 chirp_times, duration, dt): | ||||||
| @ -107,5 +110,5 @@ if __name__ == "__main__": | |||||||
| 
 | 
 | ||||||
|          |          | ||||||
|     fig.subplots_adjust(left=0.1, bottom=0.1, top=0.99, right=0.99) |     fig.subplots_adjust(left=0.1, bottom=0.1, top=0.99, right=0.99) | ||||||
|     plt.savefig("Chirp_induced_ams.pdf") |     plt.savefig(os.path.join(figure_folder, "Chirp_induced_AMs.pdf")) | ||||||
|     plt.close() |     plt.close() | ||||||
| @ -2,11 +2,14 @@ import os | |||||||
| import glob | import glob | ||||||
| import nixio as nix | import nixio as nix | ||||||
| import numpy as np | import numpy as np | ||||||
|  | import scipy.signal as sig  | ||||||
| import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||||||
|  | from IPython import embed | ||||||
| 
 | 
 | ||||||
| from util import firing_rate, despine | from util import firing_rate, despine | ||||||
|  | figure_folder = "figures" | ||||||
|  | data_folder = "data" | ||||||
| 
 | 
 | ||||||
| from IPython import embed |  | ||||||
| 
 | 
 | ||||||
| def read_baseline(block): | def read_baseline(block): | ||||||
|     spikes = [] |     spikes = [] | ||||||
| @ -42,7 +45,6 @@ def sort_blocks(nix_file): | |||||||
| 
 | 
 | ||||||
| def get_firing_rate(block_map, df, contrast, condition, kernel_width=0.0005): | def get_firing_rate(block_map, df, contrast, condition, kernel_width=0.0005): | ||||||
|     block = block_map[(contrast, df, condition)] |     block = block_map[(contrast, df, condition)] | ||||||
|     print(block.name) |  | ||||||
|     response_map = {} |     response_map = {} | ||||||
|     spikes = [] |     spikes = [] | ||||||
|     for da in block.data_arrays: |     for da in block.data_arrays: | ||||||
| @ -60,7 +62,6 @@ def get_firing_rate(block_map, df, contrast, condition, kernel_width=0.0005): | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def get_signals(block): | def get_signals(block): | ||||||
|     print(block.name) |  | ||||||
|     self_freq = None |     self_freq = None | ||||||
|     other_freq = None |     other_freq = None | ||||||
|     signal = None |     signal = None | ||||||
| @ -78,39 +79,79 @@ def get_signals(block): | |||||||
|     return signal, self_freq, other_freq, time |     return signal, self_freq, other_freq, time | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def create_response_plot(block_map, all_dfs, all_contrasts, all_conditions, current_df): | def extract_am(signal): | ||||||
|  |     # first add some padding | ||||||
|  |     front_pad = np.flip(signal[:int(len(signal)/100)]) | ||||||
|  |     back_pad = np.flip(signal[-int(len(signal)/100):]) | ||||||
|  |     padded = np.hstack((front_pad, signal, back_pad)) | ||||||
|  |     # do the hilbert and take abs | ||||||
|  |     am = np.abs(sig.hilbert(padded)) | ||||||
|  |     am = am[len(front_pad):-len(back_pad)] | ||||||
|  |     return am  | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def create_response_plot(block_map, all_dfs, all_contrasts, all_conditions, current_df, figure_name=None): | ||||||
|     conditions = ["no-other", "self", "other"] |     conditions = ["no-other", "self", "other"] | ||||||
|     condition_labels = ["alone", "self", "other"] |     condition_labels = ["soliloquy", "self chirping", "other chirping"] | ||||||
|     max_time = 0.5 |     min_time = 0.5 | ||||||
|  |     max_time = min_time + 0.5 | ||||||
| 
 | 
 | ||||||
|     fig = plt.figure(figsize=(6.5, 5.5)) |     fig = plt.figure(figsize=(6.5, 5.5)) | ||||||
|     fig_grid = (len(all_contrasts) + 1, len(all_conditions)*3+2) |     fig_grid = (len(all_contrasts)*2 + 6, len(all_conditions)*3+2) | ||||||
|     all_contrasts = sorted(all_contrasts, reverse=True) |     all_contrasts = sorted(all_contrasts, reverse=True) | ||||||
| 
 | 
 | ||||||
|     for i, condition in enumerate(conditions): |     for i, condition in enumerate(conditions): | ||||||
|         # plot the signals |         # plot the signals | ||||||
|         block = block_map[(all_contrasts[0], current_df, condition)] |         block = block_map[(all_contrasts[0], current_df, condition)] | ||||||
|         _, self_freq, other_freq, time = get_signals(block) |         signal, self_freq, other_freq, time = get_signals(block) | ||||||
|  |         am = extract_am(signal) | ||||||
|  |          | ||||||
|         self_eodf = block.metadata["stimulus parameter"]["eodfs"]["self"] |         self_eodf = block.metadata["stimulus parameter"]["eodfs"]["self"] | ||||||
|         other_eodf = block.metadata["stimulus parameter"]["eodfs"]["other"] |         other_eodf = block.metadata["stimulus parameter"]["eodfs"]["other"] | ||||||
|          |          | ||||||
|         ax = plt.subplot2grid(fig_grid, (0, i * 3 + i), rowspan=1, colspan=3, fig=fig) |         # plot frequency traces | ||||||
|         ax.plot(time[time < max_time], self_freq[time < max_time], color="#ff7f0e", label="%iHz" % self_eodf) |         ax = plt.subplot2grid(fig_grid, (0, i * 3 + i), rowspan=2, colspan=3, fig=fig) | ||||||
|         ax.text(-0.05, self_eodf, "%iHz" % self_eodf, color="#ff7f0e", va="center", ha="right", fontsize=9) |         ax.plot(time[(time > min_time) & (time < max_time)], self_freq[(time > min_time) & (time < max_time)], | ||||||
|  |                 color="#ff7f0e", label="%iHz" % self_eodf) | ||||||
|  |         ax.text(min_time-0.05, self_eodf, "%iHz" % self_eodf, color="#ff7f0e", va="center", ha="right", fontsize=9) | ||||||
|         if other_freq is not None: |         if other_freq is not None: | ||||||
|             ax.plot(time[time < max_time], other_freq[time < max_time], color="#1f77b4", label="%iHz" % other_eodf) |             ax.plot(time[(time > min_time) & (time < max_time)], other_freq[(time > min_time) & (time < max_time)], | ||||||
|             ax.text(-0.05, other_eodf, "%iHz" % other_eodf, color="#1f77b4", va="center", ha="right", fontsize=9)        |                     color="#1f77b4", label="%iHz" % other_eodf) | ||||||
|  |             ax.text(min_time-0.05, other_eodf, "%iHz" % other_eodf, color="#1f77b4", va="center", ha="right", fontsize=9)        | ||||||
|         ax.set_title(condition_labels[i]) |         ax.set_title(condition_labels[i]) | ||||||
|         despine(ax, ["top", "bottom", "left", "right"], True) |         despine(ax, ["top", "bottom", "left", "right"], True) | ||||||
|          |          | ||||||
|  |         # plot the am | ||||||
|  |         ax = plt.subplot2grid(fig_grid, (3, i * 3 + i), rowspan=2, colspan=3, fig=fig) | ||||||
|  |         ax.plot(time[(time > min_time) & (time < max_time)], signal[(time > min_time) & (time < max_time)], | ||||||
|  |                 color="#2ca02c", label="signal") | ||||||
|  |         ax.plot(time[(time > min_time) & (time < max_time)], am[(time > min_time) & (time < max_time)], | ||||||
|  |                 color="#d62728", label="am") | ||||||
|  |         despine(ax, ["top", "bottom", "left", "right"], True) | ||||||
|  |         ax.set_ylim([-1.25, 1.25]) | ||||||
|  |         ax.legend(ncol=2, loc=(0.01, -0.5), fontsize=7, markerscale=0.5, frameon=False) | ||||||
|  |          | ||||||
|         # for the largest contrast plot the raster with psth, only a section of the data (e.g. 1s) |         # for the largest contrast plot the raster with psth, only a section of the data (e.g. 1s) | ||||||
|         t, rates, spikes = get_firing_rate(block_map, current_df, all_contrasts[0], condition, kernel_width=0.001) |         t, rates, spikes = get_firing_rate(block_map, current_df, all_contrasts[0], condition, kernel_width=0.001) | ||||||
|         avg_resp = np.mean(rates, axis=0) |         avg_resp = np.mean(rates, axis=0) | ||||||
|         error = np.std(rates, axis=0) |         error = np.std(rates, axis=0) | ||||||
| 
 | 
 | ||||||
|         ax = plt.subplot2grid(fig_grid, (1, i * 3 + i), rowspan=1, colspan=3) |         ax = plt.subplot2grid(fig_grid, (6, i * 3 + i), rowspan=2, colspan=3) | ||||||
|         ax.plot(t[t < max_time], avg_resp[t < max_time], color="k", lw=0.5) |         ax.plot(t[(t > min_time) & (t < max_time)], avg_resp[(t > min_time) & (t < max_time)], | ||||||
|         ax.fill_between(t[t < max_time], (avg_resp - error)[t < max_time], (avg_resp + error)[t < max_time], color="k", lw=None, alpha=0.25) |                 color="k", lw=0.5) | ||||||
|  |         ax.fill_between(t[(t > min_time) & (t < max_time)], (avg_resp - error)[(t > min_time) & (t < max_time)], | ||||||
|  |                         (avg_resp + error)[(t > min_time) & (t < max_time)], color="k", lw=0.0, alpha=0.25) | ||||||
|  |         ax.set_ylim([0, 750]) | ||||||
|  |         ax.set_xlabel("") | ||||||
|  |         ax.set_ylabel("") | ||||||
|  |         ax.set_xticks(np.arange(min_time, max_time+.01, 0.250)) | ||||||
|  |         ax.set_xticklabels(map(int, (np.arange(min_time, max_time + .01, 0.250) - min_time) * 1000)) | ||||||
|  |         ax.set_xticks(np.arange(min_time, max_time+.01, 0.0625), minor=True) | ||||||
|  |         ax.set_xticklabels([]) | ||||||
|  |         ax.set_yticks(np.arange(0.0, 751., 500))  | ||||||
|  |         ax.set_yticks(np.arange(0.0, 751., 125), minor=True)  | ||||||
|  |         if i > 0: | ||||||
|  |             ax.set_yticklabels([]) | ||||||
|         despine(ax, ["top", "right"], False) |         despine(ax, ["top", "right"], False) | ||||||
|          |          | ||||||
|         # for all other contrast plot the firing rate alone |         # for all other contrast plot the firing rate alone | ||||||
| @ -119,46 +160,54 @@ def create_response_plot(block_map, all_dfs, all_contrasts, all_conditions, curr | |||||||
|             t, rates, _ = get_firing_rate(block_map, current_df, contrast, condition) |             t, rates, _ = get_firing_rate(block_map, current_df, contrast, condition) | ||||||
|             avg_resp = np.mean(rates, axis=0) |             avg_resp = np.mean(rates, axis=0) | ||||||
|             error = np.std(rates, axis=0) |             error = np.std(rates, axis=0) | ||||||
|             ax = plt.subplot2grid(fig_grid, (j+1, i * 3 + i), rowspan=1, colspan=3) |             ax = plt.subplot2grid(fig_grid, (j*2 + 6, i * 3 + i), rowspan=2, colspan=3) | ||||||
|             ax.plot(t[t < max_time], avg_resp[t < max_time], color="k", lw=0.5) |             ax.plot(t[(t > min_time) & (t < max_time)], avg_resp[(t > min_time) & (t < max_time)], color="k", lw=0.5) | ||||||
|             #ax.fill_between(t[t < max_time], (avg_resp - error)[t < max_time], (avg_resp + error)[t < max_time], color="k", lw=None, alpha=0.25) |             ax.fill_between(t[(t > min_time) & (t < max_time)], (avg_resp - error)[(t > min_time) & (t < max_time)], | ||||||
|  |                             (avg_resp + error)[(t > min_time) & (t < max_time)], color="k", lw=0.0, alpha=0.25) | ||||||
|  |             ax.set_ylim([0, 750]) | ||||||
|  |             ax.set_xlabel("") | ||||||
|  |             ax.set_ylabel("") | ||||||
|  |             ax.set_xticks(np.arange(min_time, max_time+.01, 0.250)) | ||||||
|  |             ax.set_xticklabels(map(int, (np.arange(min_time, max_time + .01, 0.250) - min_time) * 1000)) | ||||||
|  |             ax.set_xticks(np.arange(min_time, max_time+.01, 0.125), minor=True) | ||||||
|  |             if j < len(all_contrasts) -1: | ||||||
|  |                 ax.set_xticklabels([]) | ||||||
|  |             ax.set_yticks(np.arange(0.0, 751., 500))  | ||||||
|  |             ax.set_yticks(np.arange(0.0, 751., 125), minor=True)    | ||||||
|  |             if i > 0: | ||||||
|  |                 ax.set_yticklabels([]) | ||||||
|             despine(ax, ["top", "right"], False) |             despine(ax, ["top", "right"], False) | ||||||
|  |         if i == 1: | ||||||
|  |             ax.set_xlabel("time [ms]") | ||||||
|  |         if i == 0: | ||||||
|  |             ax.set_ylabel("frequency [Hz]", va="center") | ||||||
|  |             ax.yaxis.set_label_coords(-0.45, 3.5) | ||||||
| 
 | 
 | ||||||
|     plt.savefig("chirp_responses.pdf") |     name = figure_name if figure_name is not None else "chirp_responses.pdf" | ||||||
|  |     name = (name + ".pdf") if ".pdf" not in name else name | ||||||
|  |     plt.savefig(os.path.join(figure_folder, name)) | ||||||
|     plt.close() |     plt.close() | ||||||
|     return |  | ||||||
|          |  | ||||||
|      |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def process_cell(filename, dfs=[], contrasts=[], conditions=[]): | def process_cell(filename, dfs=[], contrasts=[], conditions=[]): | ||||||
|     nf = nix.File.open(filename, nix.FileMode.ReadOnly) |     nf = nix.File.open(filename, nix.FileMode.ReadOnly) | ||||||
|     block_map, all_dfs, all_contrasts, all_conditions  = sort_blocks(nf) |     block_map, all_contrasts, all_dfs, all_conditions  = sort_blocks(nf) | ||||||
|     if "baseline" in block_map.keys(): |     if "baseline" in block_map.keys(): | ||||||
|         baseline_spikes = read_baseline(block_map["baseline"]) |         baseline_spikes = read_baseline(block_map["baseline"]) | ||||||
|     else: |     else: | ||||||
|         print("ERROR: no baseline data for file %s!" % filename) |         print("ERROR: no baseline data for file %s!" % filename) | ||||||
|  |     fig_name = filename.split(".nix")[0] + "_df_20Hz.pdf" | ||||||
|  |     create_response_plot(block_map, all_dfs, all_contrasts, all_conditions, 20, figure_name=fig_name) | ||||||
|  |     fig_name = filename.split(".nix")[0] + "_df_-100Hz.pdf" | ||||||
|  |     create_response_plot(block_map, all_dfs, all_contrasts, all_conditions, -100, figure_name=fig_name) | ||||||
|      |      | ||||||
|     create_response_plot(block_map, all_contrasts, all_dfs, all_conditions, 20) |  | ||||||
|     """ |  | ||||||
|     if len(dfs) == 0: |  | ||||||
|         dfs = all_dfs |  | ||||||
|     if len(contrasts) == 0: |  | ||||||
|         contrasts = all_contrasts |  | ||||||
|     if len(conditions) == 0: |  | ||||||
|         conditions = all_conditions |  | ||||||
|      |      | ||||||
|     for df in dfs: |  | ||||||
|         for condition in conditions: |  | ||||||
|             for contrast in contrasts: |  | ||||||
|                 time, rates = get_firing_rate(block_map, df, contrast, condition, kernel_width=0.0025) |  | ||||||
|     """          |  | ||||||
|      |      | ||||||
|     nf.close() |     nf.close() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def main(): | def main(): | ||||||
|     nix_files = sorted(glob.glob("cell*.nix")) |     nix_files = sorted(glob.glob(os.path.join(data_folder, "cell*.nix"))) | ||||||
|     for nix_file in nix_files: |     for nix_file in nix_files: | ||||||
|         process_cell(nix_file, dfs=[20], contrasts=[20], conditions=["self"]) |         process_cell(nix_file, dfs=[20], contrasts=[20], conditions=["self"]) | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user