{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "07:55:15 [I] klustakwik KlustaKwik2 version 0.2.6\n", "/home/mikkel/.virtualenvs/expipe/lib/python3.6/site-packages/ipykernel_launcher.py:20: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0\n", "Please use `tqdm.notebook.*` instead of `tqdm._tqdm_notebook.*`\n" ] } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "import spatial_maps as sp\n", "import septum_mec.analysis.data_processing as dp\n", "import septum_mec.analysis.registration\n", "import expipe\n", "import os\n", "import pathlib\n", "import numpy as np\n", "import exdir\n", "import pandas as pd\n", "import optogenetics as og\n", "import quantities as pq\n", "import shutil\n", "from distutils.dir_util import copy_tree\n", "\n", "from septum_mec.analysis.stimulus_response import stimulus_response_latency, compute_response\n", "\n", "from tqdm import tqdm_notebook as tqdm\n", "from tqdm._tqdm_notebook import tqdm_notebook\n", "tqdm_notebook.pandas()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "std_gaussian_kde = 0.04\n", "window_size = 0.03" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "data_loader = dp.Data()\n", "actions = data_loader.actions\n", "project = data_loader.project" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "output = pathlib.Path('output/stimulus-response')\n", "(output / 'data').mkdir(parents=True, exist_ok=True)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "identify_neurons = actions['identify-neurons']\n", "units = pd.read_csv(identify_neurons.data_path('units'))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [], "source": [ "def process(row):\n", " \n", " action_id = row['action']\n", " channel_id = int(row['channel_group'])\n", " unit_id = int(row['unit_name']) \n", " \n", " spike_times = data_loader.spike_train(action_id, channel_id, unit_id)\n", " \n", " spike_times = np.array(spike_times)\n", " \n", " stim_times = data_loader.stim_times(action_id)\n", " \n", " nan_series = pd.Series({\n", " 't_e_peak': np.nan,\n", " 'p_e_peak': np.nan,\n", " 't_i_peak': np.nan,\n", " 'p_i_peak': np.nan\n", " })\n", " \n", " if stim_times is None:\n", " return nan_series\n", " \n", " stim_times = np.array(stim_times)\n", " \n", " times, spikes, kernel, p_e, p_i = stimulus_response_latency(\n", " spike_times, stim_times, window_size, std_gaussian_kde)\n", " \n", " # if no spikes detected after stimulus nan is returned\n", " if all(np.isnan([p_e, p_i])):\n", " return nan_series\n", " \n", " t_e_peak, p_e_peak, t_i_peak, p_i_peak = compute_response(\n", " spike_times, stim_times, times, kernel, p_e, p_i)\n", "\n", " return pd.Series({\n", " 't_e_peak': t_e_peak,\n", " 'p_e_peak': p_e_peak,\n", " 't_i_peak': t_i_peak,\n", " 'p_i_peak': p_i_peak\n", " })\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "476c31da67274b2396ed3f2ec54a8344", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=1298), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "/home/mikkel/apps/expipe-project/septum-mec/septum_mec/analysis/stimulus_response.py:33: RuntimeWarning: invalid value encountered in less\n", " if any(times[idxs_i] < te_peak):\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "results = units.merge(\n", " units.progress_apply(process, axis=1), \n", " left_index=True, right_index=True)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "results.loc[:, ['t_e_peak', 't_i_peak', 'p_e_peak', 'p_i_peak']].hist()\n", "plt.gcf().savefig(output / 'figures' / 'summary_histogram.png')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/mikkel/.virtualenvs/expipe/lib/python3.6/site-packages/ipykernel_launcher.py:2: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0\n", "Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`\n", " \n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2828a0134cc2449ba15a30119991324d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=1284), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "psth, time = {}, {}\n", "for i, row in tqdm(units.iterrows(), total=len(units)):\n", " action_id = row['action']\n", " channel_group = row['channel_group']\n", " unit_name = row['unit_name']\n", " name = f'{action_id}_{channel_group}_{unit_name}'\n", " spike_times = data_loader.spike_train(action_id, channel_group, unit_name)\n", " \n", " spike_times = np.array(spike_times)\n", " \n", " stim_times = data_loader.stim_times(action_id)\n", " \n", " if stim_times is None:\n", " continue\n", " \n", " stim_times = np.array(stim_times)\n", " \n", " _, spikes, kernel, p_e, p_i = stimulus_response_latency(\n", " spike_times, stim_times, window_size, std_gaussian_kde)\n", " \n", " if all(np.isnan([p_e, p_i])):\n", " continue\n", " times = np.arange(-0.005, window_size, 1e-4)\n", " psth.update({name: kernel(times)})\n", " time.update({name: times})" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "pd.DataFrame(psth).to_feather(output / 'data' / 'psth.feather')\n", "pd.DataFrame(time).to_feather(output / 'data' / 'times.feather')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Save to expipe" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "action = project.require_action(\"stimulus-response\")" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "action.modules['parameters'] = {\n", " 'window_size': window_size,\n", " 'std_gaussian_kde': std_gaussian_kde\n", "}" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "action.data['results'] = 'results.csv'\n", "results.to_csv(action.data_path('results'), index=False)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['/media/storage/expipe/septum-mec/actions/stimulus-response/data/data/times.feather',\n", " '/media/storage/expipe/septum-mec/actions/stimulus-response/data/data/psth.feather',\n", " '/media/storage/expipe/septum-mec/actions/stimulus-response/data/figures/summary_histogram.png']" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "copy_tree(output, str(action.data_path()))" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "septum_mec.analysis.registration.store_notebook(action, \"10-calculate-stimulus-response.ipynb\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }