# @title Install dependencies !pip install pandas --quiet !pip install seaborn --quiet # Imports import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set_context('notebook', font_scale=1.5, rc={'lines.markeredgewidth': 2}) # @title Data retrieval import os, requests fname = "allen_visual_behavior_2p_change_detection_familiar_novel_image_sets.parquet" url = "https://ndownloader.figshare.com/files/28470255" if not os.path.isfile(fname): try: r = requests.get(url) except requests.ConnectionError: print("!!! Failed to download data !!!") else: if r.status_code != requests.codes.ok: print("!!! Failed to download data !!!") else: with open(fname, "wb") as fid: fid.write(r.content) filename = "allen_visual_behavior_2p_change_detection_familiar_novel_image_sets.parquet" data = pd.read_parquet(filename) data.sample(5) print('exposure_levels:', data.exposure_level.unique()) print('stimulus presentations can be changes:', data.is_change.unique()) print('stimulus presentations can be omitted:', data.omitted.unique()) print('cre lines (cell types) included in this dataset are:', data.cre_line.unique()) print('there are', len(data.mouse_id.unique()), 'mice in this dataset') print('there are', len(data.ophys_session_id.unique()), 'sessions in this dataset') sst_data = data[(data.cre_line == 'Sst-IRES-Cre')&(data.is_change == True)] vip_data = data[(data.cre_line == 'Vip-IRES-Cre')&(data.is_change == True)] timestamps = sst_data.trace_timestamps.values[0] for exposure_level in sst_data.exposure_level.unique(): traces = sst_data[sst_data.exposure_level==exposure_level].trace.values plt.plot(timestamps, np.mean(traces), label=exposure_level) plt.title('SST population average') plt.xlabel('time after change (sec)') plt.ylabel('dF/F') plt.legend() plt.show() timestamps = vip_data.trace_timestamps.values[0] for exposure_level in vip_data.exposure_level.unique(): traces = vip_data[vip_data.exposure_level==exposure_level].trace.values plt.plot(timestamps, np.mean(traces), label=exposure_level) plt.title('VIP population average') plt.xlabel('time after change (sec)') plt.ylabel('dF/F') plt.legend() plt.show() # which cells are in more than one session? make a list cells_in_multiple_sessions = [] for cell_specimen_id in vip_data.cell_specimen_id.unique(): if len(vip_data[vip_data.cell_specimen_id == cell_specimen_id].ophys_session_id.unique()) > 1: cells_in_multiple_sessions.append(cell_specimen_id) print(cells_in_multiple_sessions) # this one looks like the population average example_cell_specimen_id = cells_in_multiple_sessions[6] cell_data = vip_data[vip_data.cell_specimen_id == example_cell_specimen_id] timestamps = cell_data.trace_timestamps.values[0] for exposure_level in cell_data.exposure_level.unique(): mean_trace = cell_data[cell_data.exposure_level == exposure_level].trace.mean() plt.plot(timestamps, mean_trace, label=exposure_level) plt.title(f'cell_specimen_id:{example_cell_specimen_id}') plt.xlabel('time after change (sec)') plt.ylabel('dF/F') plt.legend() plt.show() # this one does not look like the population average example_cell_specimen_id = cells_in_multiple_sessions[0] cell_data = vip_data[vip_data.cell_specimen_id==example_cell_specimen_id] timestamps = cell_data.trace_timestamps.values[0] for exposure_level in cell_data.exposure_level.unique(): mean_trace = cell_data[cell_data.exposure_level == exposure_level].trace.mean() plt.plot(timestamps, mean_trace, label=exposure_level) plt.title(f'cell_specimen_id:{example_cell_specimen_id}') plt.xlabel('time after change (sec)') plt.ylabel('dF/F') plt.legend() plt.show() # let's pick a cell from a novel image session example_cell_specimen_id = vip_data[vip_data.exposure_level=='novel'].cell_specimen_id.unique()[7] cell_data = vip_data[vip_data.cell_specimen_id == example_cell_specimen_id] cell_data = cell_data[(cell_data.image_name == cell_data.image_name.unique()[2])] offset = 1 / len(cell_data.stimulus_presentations_id.unique()) color = [0, 0, 0] for i, stimulus_presentations_id in enumerate(cell_data.stimulus_presentations_id.unique()): trial_data = cell_data[cell_data.stimulus_presentations_id == stimulus_presentations_id] timestamps = trial_data.trace_timestamps.values[0] trace = trial_data.trace.values[0] plt.plot(timestamps, trace, color = color) color = [color[0] + offset, color[1] + offset, color[2] + offset] plt.title(f'cell_specimen_id:{example_cell_specimen_id}') plt.xlabel('time after change (sec)') plt.ylabel('dF/F') plt.show() sst_data = data[(data.cre_line == 'Sst-IRES-Cre')&(data.omitted == True)] vip_data = data[(data.cre_line == 'Vip-IRES-Cre')&(data.omitted == True)] timestamps = sst_data.trace_timestamps.values[0] for exposure_level in sst_data.exposure_level.unique(): traces = sst_data[sst_data.exposure_level == exposure_level].trace.values plt.plot(timestamps, np.mean(traces), label=exposure_level) plt.title('SST population average') plt.xlabel('time after omission (sec)') plt.ylabel('dF/F') plt.legend() plt.show() timestamps = vip_data.trace_timestamps.values[0] # trace timestamps are relative to stimulus onset for exposure_level in vip_data.exposure_level.unique(): traces = vip_data[vip_data.exposure_level == exposure_level].trace.values plt.plot(timestamps, np.mean(traces), label=exposure_level) plt.title('VIP population average') plt.xlabel('time after omission (sec)') plt.ylabel('dF/F') plt.legend() plt.show()