diff --git a/.gitignore b/.gitignore index 2cd9ef5..4040aa5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ *.pyc __pycache__ *.egg-info +.ipynb_checkpoints plots/ +_build/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..dcc9dea --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +.PHONY : doc +doc : + mkdir -p _build/docsource + cp index.rst _build/docsource/ + sphinx-apidoc -f -o _build/docsource oscopetools **/test_*.py + sphinx-build _build/docsource _build/html -c . + open _build/html/index.html + +.PHONY : clean +clean : + rm -rf _build/* diff --git a/analysis/.ipynb_checkpoints/center surround plotting-checkpoint.ipynb b/analysis/.ipynb_checkpoints/center surround plotting-checkpoint.ipynb deleted file mode 100644 index 8e02785..0000000 --- a/analysis/.ipynb_checkpoints/center surround plotting-checkpoint.ipynb +++ /dev/null @@ -1,1109 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "metrics = pd.read_csv(r'/Users/saskiad/Documents/Data/Openscope_Multiplex/analysis/metrics_all.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(4023, 24)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "metrics.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['Unnamed: 0', 'center_dir', 'center_osi', 'center_dsi', 'iso', 'ortho',\n", - " 'suppression_strength', 'suppression_tuning', 'cmi', 'center_mean',\n", - " 'center_std', 'center_percent_trials', 'blank_mean', 'blank_std',\n", - " 'iso_mean', 'iso_std', 'ortho_mean', 'ortho_std', 'cell_id',\n", - " 'session_id', 'valid', 'cre', 'area', 'depth'],\n", - " dtype='object')" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "metrics.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/saskiad/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:2: FutureWarning: \n", - ".ix is deprecated. Please use\n", - ".loc for label based indexing or\n", - ".iloc for positional indexing\n", - "\n", - "See the documentation here:\n", - "http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#ix-indexer-is-deprecated\n", - " \n" - ] - } - ], - "source": [ - "#adding a responsive boolean based on percent trials for center condition\n", - "metrics['responsive'] = False\n", - "metrics.ix[metrics.center_percent_trials>0.25, 'responsive'] = True" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.16266343615696666" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "metrics[(metrics.area=='VISp')&(metrics.cre=='Cux2:Ai93')&(metrics.valid)&(metrics.responsive)].cmi.median()" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "responsive = metrics[(metrics.valid)&(metrics.responsive)]" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0center_dircenter_osicenter_dsiisoorthosuppression_strengthsuppression_tuningcmicenter_mean...iso_stdortho_meanortho_stdcell_idsession_idvalidcreareadepthresponsive
5052420.3223710.3331680.7921670.4837720.7619370.3095670.5244570.073867...0.0235400.0356200.02637410123228141011892173TrueSst:Ai148VISp250True
5102920.605475-0.0880100.670755-0.1133050.214989-7.3603720.7358520.240265...0.0738850.2212140.19003310123228221011892173TrueSst:Ai148VISp250True
5454030.419653-0.1028140.731528-0.0669630.2825945.3868810.7650180.030349...0.0069800.0196210.02007810130033181012864690TrueSst:Ai148VISp300True
597320.546138-0.0353610.706295-0.0157140.3271172.4276890.6896580.076672...0.0170570.0706270.10757910053447751005201417TrueSst:Ai148VISp330True
6081420.4767210.6956140.691701-0.066996-0.2481392.1020610.6375770.048733...0.0122300.0974730.22296310053447881005201417TrueSst:Ai148VISp330True
..................................................................
400418160.649730-0.1928140.672246-0.135953-0.6996760.1575310.6842210.052858...0.0101720.1030630.331968989651515989418742TrueCux2:Ai93VISp175True
400718460.508828-0.0457400.772790-0.560674-1.218666-2.8909030.9184270.035130...0.0064160.0773400.163312989651518989418742TrueCux2:Ai93VISp175True
400818560.6190120.8044560.9642830.135832-0.1253550.3575591.0799910.119870...0.0106730.0670540.167311989651519989418742TrueCux2:Ai93VISp175True
401719920.7656640.9716160.7127920.1130170.469048-1.9814290.6534870.540616...0.1459590.4375720.423561989651536989418742TrueCux2:Ai93VISp175True
402020260.267467-0.0983060.660191-0.0742320.1504940.7048550.6312410.016297...0.0202700.0094580.009718989651539989418742TrueCux2:Ai93VISp175True
\n", - "

155 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 center_dir center_osi center_dsi iso ortho \\\n", - "505 24 2 0.322371 0.333168 0.792167 0.483772 \n", - "510 29 2 0.605475 -0.088010 0.670755 -0.113305 \n", - "545 40 3 0.419653 -0.102814 0.731528 -0.066963 \n", - "597 3 2 0.546138 -0.035361 0.706295 -0.015714 \n", - "608 14 2 0.476721 0.695614 0.691701 -0.066996 \n", - "... ... ... ... ... ... ... \n", - "4004 181 6 0.649730 -0.192814 0.672246 -0.135953 \n", - "4007 184 6 0.508828 -0.045740 0.772790 -0.560674 \n", - "4008 185 6 0.619012 0.804456 0.964283 0.135832 \n", - "4017 199 2 0.765664 0.971616 0.712792 0.113017 \n", - "4020 202 6 0.267467 -0.098306 0.660191 -0.074232 \n", - "\n", - " suppression_strength suppression_tuning cmi center_mean ... \\\n", - "505 0.761937 0.309567 0.524457 0.073867 ... \n", - "510 0.214989 -7.360372 0.735852 0.240265 ... \n", - "545 0.282594 5.386881 0.765018 0.030349 ... \n", - "597 0.327117 2.427689 0.689658 0.076672 ... \n", - "608 -0.248139 2.102061 0.637577 0.048733 ... \n", - "... ... ... ... ... ... \n", - "4004 -0.699676 0.157531 0.684221 0.052858 ... \n", - "4007 -1.218666 -2.890903 0.918427 0.035130 ... \n", - "4008 -0.125355 0.357559 1.079991 0.119870 ... \n", - "4017 0.469048 -1.981429 0.653487 0.540616 ... \n", - "4020 0.150494 0.704855 0.631241 0.016297 ... \n", - "\n", - " iso_std ortho_mean ortho_std cell_id session_id valid \\\n", - "505 0.023540 0.035620 0.026374 1012322814 1011892173 True \n", - "510 0.073885 0.221214 0.190033 1012322822 1011892173 True \n", - "545 0.006980 0.019621 0.020078 1013003318 1012864690 True \n", - "597 0.017057 0.070627 0.107579 1005344775 1005201417 True \n", - "608 0.012230 0.097473 0.222963 1005344788 1005201417 True \n", - "... ... ... ... ... ... ... \n", - "4004 0.010172 0.103063 0.331968 989651515 989418742 True \n", - "4007 0.006416 0.077340 0.163312 989651518 989418742 True \n", - "4008 0.010673 0.067054 0.167311 989651519 989418742 True \n", - "4017 0.145959 0.437572 0.423561 989651536 989418742 True \n", - "4020 0.020270 0.009458 0.009718 989651539 989418742 True \n", - "\n", - " cre area depth responsive \n", - "505 Sst:Ai148 VISp 250 True \n", - "510 Sst:Ai148 VISp 250 True \n", - "545 Sst:Ai148 VISp 300 True \n", - "597 Sst:Ai148 VISp 330 True \n", - "608 Sst:Ai148 VISp 330 True \n", - "... ... ... ... ... \n", - "4004 Cux2:Ai93 VISp 175 True \n", - "4007 Cux2:Ai93 VISp 175 True \n", - "4008 Cux2:Ai93 VISp 175 True \n", - "4017 Cux2:Ai93 VISp 175 True \n", - "4020 Cux2:Ai93 VISp 175 True \n", - "\n", - "[155 rows x 25 columns]" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "responsive[(responsive.iso>0.5)&(responsive.cmi>0.5)]" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "4017 0.443688\n", - "Name: center_std, dtype: float64" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "responsive[responsive.cell_id==989651536].center_std" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "analysis_file_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex/analysis_py3/989418742_cs_analysis.h5'" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "import h5py" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "f = h5py.File(analysis_file_path, 'r')" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [], - "source": [ - "response = f['response'][()]" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], - "source": [ - "f.close()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(8, 4, 206, 4)" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "response.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [], - "source": [ - "import seaborn as sns" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.figure(figsize=(6,5))\n", - "plt.errorbar(range(0,360,45),response[:,0,199,0], yerr=response[:,0,199,1]/np.sqrt(response[:,0,199,2]), fmt='o-', color='k')\n", - "plt.errorbar(range(0,360,45),response[:,1,199,0], yerr=response[:,1,199,1]/np.sqrt(response[:,1,199,2]), fmt='o-', color='r')\n", - "plt.errorbar(range(0,360,45),response[:,2,199,0], yerr=response[:,2,199,1]/np.sqrt(response[:,2,199,2]), fmt='o-', color='b')\n", - "plt.xticks(range(0,360,45));\n", - "plt.xlabel(\"Direction (deg)\", fontsize=18)\n", - "plt.ylabel(\"Mean DF/F\", fontsize=18)\n", - "plt.tick_params(labelsize=16)\n", - "plt.text(270,0.6, \"center\", color='k', fontsize=14)\n", - "plt.text(270,0.56, \"iso\", color='r', fontsize=14)\n", - "plt.text(270,0.52, \"ortho\", color='b', fontsize=14)\n", - "plt.axhline(y=response[0,3,199,0], ls='--', color='gray')\n", - "sns.despine()" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [], - "source": [ - "sweep_response = pd.read_hdf(analysis_file_path, 'sweep_response')" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [], - "source": [ - "expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex/Center Surround/Center_Surround_'+str(989418742)+'_data.h5'\n", - "stim_table = pd.read_hdf(expt_path, 'center_surround')" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [], - "source": [ - "stim_table['condition'] = 'ortho'\n", - "stim_table.loc[stim_table.Center_Ori==stim_table.Surround_Ori, 'condition'] = 'iso'\n", - "stim_table.loc[np.isfinite(stim_table.Center_Ori)&np.isnan(stim_table.Surround_Ori), 'condition'] = 'center'\n", - "stim_table.loc[np.isnan(stim_table.Center_Ori)&np.isnan(stim_table.Surround_Ori), 'condition'] = 'blank'\n", - "stim_table.loc[np.isnan(stim_table.Center_Ori)&np.isfinite(stim_table.Surround_Ori), 'condition'] = 'surround'" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.figure(figsize=(6,5))\n", - "plt.plot(sweep_response[(stim_table.condition=='center')&(stim_table.Center_Ori==90)]['199'].mean(), color='k')\n", - "plt.plot(sweep_response[(stim_table.condition=='ortho')&(stim_table.Center_Ori==90)]['199'].mean(), color='b')\n", - "plt.plot(sweep_response[(stim_table.condition=='iso')&(stim_table.Center_Ori==90)]['199'].mean(), color='r')\n", - "# plt.plot(sweep_response[(stim_table.condition=='surround')&(stim_table.Surround_Ori==90)]['199'].mean(), color='purple')\n", - "plt.axvspan(30,90, color='gray', alpha=0.1)\n", - "plt.tick_params(labelsize=16)\n", - "plt.xticks([30,60,90,120],[0,1,2,3])\n", - "plt.xlabel(\"Time (s)\", fontsize=18)\n", - "plt.ylabel(\"DFF\", fontsize=18)\n", - "plt.text(110,1.15, \"center\", color='k', fontsize=14)\n", - "plt.text(110,1.08, \"iso\", color='r', fontsize=14)\n", - "plt.text(110,1.01, \"ortho\", color='b', fontsize=14)\n", - "sns.despine()" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO29eXhkZZn3/3mqklQlqaSyr73TewNNN00LCsgiAooCioii4rjP64wzr/Pq6PibTWd9Z8YZnXHGUVHRnwICIjgjAwiiyNJ0Aw29pJve6OydPalUUvvz/nHqnNSarSqpqq77c125kjp1zqmncqrO97mX576V1hpBEASheLHlegCCIAhCbhEhEARBKHJECARBEIocEQJBEIQiR4RAEAShyCnJ9QAWQ0NDg16zZk2uhyEIglBQvPjii0Na68bE7QUpBGvWrGHfvn25HoYgCEJBoZQ6nWq7uIYEQRCKHBECQRCEIkeEQBAEocgRIRAEQShyRAgEQRCKHBECQRCEIkeEQBAEocgpyHUEgnC28soPX2Gyf5LyunIatzay8pKVuR6SUASIEAhCnhCcDvKzD/3Meqzsis8Nfo7y2vIcjkooBsQ1JAh5QsATAOAt//ct3HLvLeiwpu+lvhyPSigGRAgEIU8IeA0hqGysZO3VawHoe1GEQFh6RAgEIU8ITBpCUOYqo6K+Avdqt1gEwrIgQiAIeULQGwSgtLIUgLYL28QiEJYFEQJByBNiLQKA1gtbGTk+gm/cB0DIH+K1/34tZ+MTzl5ECAQhTzBjBGWVM0IA0P9yPwB7vraHu2+4m4GDA7kZoHDWIkIgCHlCkkWw0xCC3hd70Vrzyl2vAIgQCFknK0KglLpOKXVUKXVcKfWFFM9frpR6SSkVUkrdkvBcWCm1P/rzcDbGIwiFSKIQVDZWUr2ymr4X++h/uZ/Bw4MADB0ZytkYhbOTjBeUKaXswDeAa4BuYK9S6mGt9eGY3TqBDwP/J8UpprXWF2Q6DkEodBKDxRANGL/Uxys/eAV7mZ3yunKGOkQIhOySjZXFu4HjWuuTAEqpe4AbAUsItNavR5+LZOH1BOGsxLIIojECgJadLRx56AhTQ1NsfMdGQr6QWARC1smGa6gd6Ip53B3dNl+cSql9SqnnlVI3pdtJKfWJ6H77BgcHFztWQchbAt4AdocdW8nM17LtwjbQMD08zfYPbadhcwNDR4eIhGVOJWSPbAiBSrFNL+D4VVrrXcD7gX9RSp2Taiet9be01ru01rsaGxsXM05ByGsCkwErPmBiZg5VNFSw/rr1NGxpIOwPM356PBdDFM5SsiEE3UBsicQVQO98D9Za90Z/nwSeAnZkYUyCUHAEvcE4txCAq9lF8/nN7PzETuxldhq3GJOgwQ6xioXskQ0h2AtsUEqtVUqVAbcB88r+UUrVKqUc0b8bgDcRE1sQhGIilUUA8Mn9n+Sqv7oKgIbNDQASMBaySsZCoLUOAb8HPAp0AD/RWh9SSn1ZKfVOAKXURUqpbuA9wH8qpQ5FD98C7FNKvQL8Cvi7hGwjQSga0gmBUgqlDA9seV05lU2VcQHj8U5xEwmZkZV+BFrrXwC/SNj2ZzF/78VwGSUe9yxwXjbGIAiFTtAbjEsdTUfD5gbLIjj+P8f50fU/4mMvfIz2ixaSoyEIM8jKYkHIE9JZBIk0bGlgsGMQrTXPffU5QKwCITNECAQhTwh4A0nB4lQ0bGnAN+rj9K9Pc/LxkwD4xnxLPTzhLEaEQBDyhMBkgFLX/FxDAI985hFrzYEIgZAJIgSCkCekSh9NhZlCOnBggPM/cD7KpkQIhIwQIRCEPEBrPe8YQfWKaiuo/IY/eAMOtwPfqAiBsHiykjUkCEJmhP1hdETPSwiUTdF2YRu2UhstF7RQXlsuFoGQESIEgpAHmAXn5pM+CnDbw7dhsxsGvbPGKUIgZIQIgSDkAYm9CObC6XbO/C1CIGSIxAgEIQ9IbFO5EEQIhEwRIRCEPGChFkEsjhqHCIGQESIEgpAHpOpONl/EIhAyRYRAEPKATCwCZ42ToDdIOBjO9rCEIkGEQBDyACtGsAghKK8tB8A/7s/qmITiQYRAEPKAVP2K54uzxsggmh6dzuqYhOJBhEAQ8oBMXUMg9YaExSNCIAh5QKbBYhAhEBaPCIEg5AGByQD2Mjv2UvuCjxUhEDJFhEAQ8oCAN7AoawBECITMESEQhDwgOBlcVHwARAiEzBEhEIQ8YL7dyVJRWlmKsktPAmHxiBAIQh4w314EqVBKSSlqISNECAQhDwh6F+8aAsM95B+TBWXC4hAhEIQ8IDC5+GAxGEIgC8qExSJCIAh5QCauIZDCc0JmiBAIQh6QSfooiBAImSFCIAh5QKYWgfQkEDJBhEAQcozW2ggWLzJ9FMQiEDJDhEAQckw4ECYSimQcIwhNhwj5Q1kcmVAsiBAIQo4xC85lIgTSk0DIBBECQcgxZgnqTIPFIGUmhMUhQiAIOSaTXgQm0pxGyAQRAkHIMVabygyDxSAWgbA4RAgEIcdk0yIQIRAWgwiBIOSYTLqTmYgQCJkgQiAIOUYsAiHXZEUIlFLXKaWOKqWOK6W+kOL5y5VSLymlQkqpWxKeu0MpdSz6c0c2xiMIhYQVI8hACErKS7CV2kQIhEWRsRAopezAN4Drga3A+5RSWxN26wQ+DPw44dg64M+BNwC7gT9XStVmOiZBKCQsiyCDYLH0JBAyIRsWwW7guNb6pNY6ANwD3Bi7g9b6da31q0Ak4dhrgce11iNa61HgceC6LIxJEAqGbLiGQHoSCIsnG0LQDnTFPO6ObsvqsUqpTyil9iml9g0ODi5qoIKQjwS9QWwlNuxl9ozOI/WGhMWSDSFQKbbpbB+rtf6W1nqX1npXY2PjvAcnCPlOpk1pTKQ5jbBYsiEE3cDKmMcrgN5lOFYQzgq8A14qGyszPk/jtkZ69/UycHAgC6MSiolsCMFeYINSaq1Sqgy4DXh4nsc+CrxVKVUbDRK/NbpNEIoGT4+HqvaqjM9z2Z9chtPt5Bef/gVaz9coF4QsCIHWOgT8HsYNvAP4idb6kFLqy0qpdwIopS5SSnUD7wH+Uyl1KHrsCPAVDDHZC3w5uk0QioaJ7gmqV1RnfJ6Khgqu/rurOf2b0xz40YEsjEwoFkqycRKt9S+AXyRs+7OYv/diuH1SHftd4LvZGIcgFBpaazy92bEIAHZ+dCcv3/kyj/2fx9h4w0ZroZkgzIasLBaEHDI1NEU4EM6KRQCgbIrrvnYd3jNeDj9wOCvnFM5+RAgEIYdMdE8AUN2eHSEAaN3ZirIpxjvHs3ZO4exGhEAQcoinxwOQNYsAwF5qx9XiYqJrImvnFM5uRAgEIYeYFkG2YgQm1SuqrXMDRMIRvn7O13nlB69k9XWEswMRAkHIIRM9Eyi7wtXiyup5q1fGC8FE9wSjJ0c5c+BMVl9HODsQIRCEHOLp9uBqcWGzZ/ermGgRjJ0aA6RMtZAaEQJByCETPdlZQ5BI9YpqAp4A/gmjCN3oqVEA/ONSlE5IRoRAEHLIRPdEVjOGTExxGe8yMofSWQQPffQhXv7uy1l/faGwECEQhBzi6fFQtSK7gWIwYgQwE4w2hSDRIui4v4NTT5zK+usLhYUIgSDkCL/Hj3/Cv6QWgSkEpmso1iKIhCL4J/yW+0goXkQIBCFHmGsIsp06ClDVWgUq2SLwjc8IgSkKfo8IQbEjQiAIOcJaVbwEwWJ7mR1Xs7GoLOQL4en1oGwqziIwexeIRSCIEAhCjpjoyX55iVjMtQRjpw1roH5jPWF/mJAvBIBv1BCFgCewJK8vFA4iBIKQI5ZqVbGJuZbAdAu17GgBZtxDYhEIJiIEgpAjPD0eyuvKKS3PvE1lKkwhMAPFLRdEhSDqHpoeiQqBxAiKHhECQcgRnh7PksQHTKpXVuMf93Pm1TPYy+w0bGkAZlJITddQaDpEOBhesnEI+Y8IgSDkiInuiSVzC8FMELrz6U7cq92U15UDMRZBTKN7iRMUNyIEgpAjlqq8hIl57sFDg9SurcXpNrqVmTEC0yIAcQ8VOyIEgpADwoEw3jPeZbEIAGrW1lhtKxNjBCAB42JHhEAQcsBk/ySwdKmjieeOFYLEGAGIa6jYESEQhBxgzsqdtUvXXN5eZqeyuRKA2rW1lFaWouwqLkZgL7MDYhEUOyIEgpADApPGDLzMVbakr2O6h2rW1qCUwul2xsUIzOJ0EiMobkQIBCEHLLcQ1K6tBcDhduAfM27606PT1KyuAcQiKHZECAQhByyXENRvqqeisYLyeiN11FkzYxFMj0zjXu02xiMxgqKmJNcDEIRiZLmE4PL/73J2fWoXSikAwzU05iMcDBP0BmdcQ2IRFDUiBIKQA5ZLCBxVDhxVDuuxs8bJyIkRK2OosrGSkvISiREUOeIaEoQcsFxCkIjD7cA/7rdWFTtrnTiqHWIRFDkiBIKQAwKTAVAsWcG5dDhrDNeQuZisvK4cR5WDwITECIoZEQJByAGByQBllWUom1rW13W4Hfg9fqaHo0JQW25YBDGuoY4HOzj2yLFlHZeQWyRGIAg5IDAZWHa3EBgWARrGO8eNx7VOyqrK4lxDT/35U1TUV7Dh+g3LPj4hN4hFIAg5IKdCwEwze9MiiE0fneyfjOttLJz9iBAIQg4ITAYoq8qBEEQrkJpdyxKDxeFgmKmhKQkeFxkiBIKQA3JtEYydGqPMVYa91G64hqIxgqnBKdAzhemE4kCEQBByQK6EwOE21hSMvT5mFbyLtQg8fR5AFpgVGyIEgpADcm0RTI9MU15rlJ1wVDkI+8OEA2GrPHY4ECbkCy37+ITckBUhUEpdp5Q6qpQ6rpT6QornHUqpe6PP71FKrYluX6OUmlZK7Y/+fDMb4xGEfCdnQuCeKXtttq50VBtWgt/jt4QAkIBxEZGxECil7MA3gOuBrcD7lFJbE3b7KDCqtV4P/DPw9zHPndBaXxD9+VSm4xGEQiDXriGY6YVgBq39E/FCkMo9pLXmuX9+Du+Ad4lHKiwn2bAIdgPHtdYntdYB4B7gxoR9bgTuiv59P3C1MqtgCUIRkishsJfaKa0wVjPHxgjAqEAaJwQpAsbjneM89tnHOHjvwWUYrbBcZEMI2oGumMfd0W0p99Fah4BxoD763Fql1MtKqV8rpS7LwngEIa8JB8JEgpGcCAHMxAliYwRgWADe/pmZfiqLwOxuNjU0tdTDFJaRbAhBqpm9nuc+fcAqrfUO4LPAj5VSKZu4KqU+oZTap5TaNzg4mNGABSGX5KrgnIklBGliBFaT+xQxAlMcpgYXJwS/+rNf8dRfPrWoY4WlIxtC0A2sjHm8AuhNt49SqgRwAyNaa7/WehhAa/0icALYmOpFtNbf0lrv0lrvamxszMKwBSE35FoIzDhBqhiBp89D/aZ663EiprtosRZBx087eO3h1xZ1rLB0ZEMI9gIblFJrlVJlwG3Awwn7PAzcEf37FuBJrbVWSjVGg80opdYBG4CTWRiTIOQtuRaCJNdQQoygYVMDkDpGkKlF4On14B2UQHO+kXHROa11SCn1e8CjgB34rtb6kFLqy8A+rfXDwJ3AD5VSx4ERDLEAuBz4slIqBISBT2mtRzIdkyDkMzkXgmgKaWKw2NPrIegNUrexDkjtGjK3LcYiCPlC+EZ9hKZDaK2RfJH8ISvVR7XWvwB+kbDtz2L+9gHvSXHcA8AD2RiDIBQKuRYCR41x4zdjBOY4Ro4ZczD3SrfRtSyVa2hi8a4hMyMp5AsR9AZz9v6FZGRlsSAsM7kWAtMiMF1DNruN0spShl8bBsDV4sLpds7uGhqaQuvEnJDZ8fR6rL/FPZRfiBAIwjKTcyGojc8aAiOF1BKCVlfa9pWmOERCkQUXpjPrGMHiYwzC0iCNaQRhmcm1EGz/0HZcLa54Iah2WK4bV4vL6m2cSKw4TA1NWYHn+SAWQf4iFoFQ1Oz51z10PNixrK+ZayGoaq3igjsuiNtmppAqu6KivmJOiwAWfjOf7JtZtSwL0vILEQKhqHn+q8+z/3v7l/U1TSEorVzexvWzYWYOuZpdKJvC6XamXVBmlqhY6M18sm/SWsMgrqH8QoRAWDKO/89xXn/q9VwPY1amR6etG/NyEZgMUFJegs2eP18/s8yEq8VlPE5jEfjGfdSuqwUWfjP39Hqo31iPvcwurqE8I38+icJZRdezXdz9zrt54otP5Ob1n+si4J39Bq8jGv+EP65f73KQq4Jzs2FZBK1RIZglRmAJwQItAk+fh6rWKioaK8QiyDNECISs4+nz8JN3/4RIMBIXIFwuvINevnfp93jlrldm3c837gNNTiyCfBOCsmpjPJZF4Hbg9/jRkfgUUf+4H1ebC7vDvijXkKvNRWVjpQhBnlFUQhCYDEizjSUmHAhz33vuwz/hZ+MNG/H0eZJuJkvNyPERdETPWTPfN2p8Fsx+vctFwJN/QpDKNZRKJP0Tfpxu54Jv5uFAmKmhKcsiENdQflE0QhAOhrnzkjt5+CMPL3ghjDB/Xvvv1+h6pou3f/PtrLtmHZFghKnh5Z39jZ0aA+buuzs9Og0griFiXENRITAXncVOnEK+EOFAGIfbQUVDxYIsAis1tVUsgnykaITAXmpn+x3b6fhpB/u+uS/XwyloQv5Q2ln+0JEhALbcvIWqtiogPm0wFd5BL52/7cza+EZPjgJzC4FZWz8wGVjWyUE+CoGZPhpnERD/PzT/dlQ7DD//AoTAXExW1SYWQT5SNEIAcMlnL2H99et59H8/Sv8r/bkeTkESCUf4+rqv88I3Xkj5/MjxEVwtLspcZZYQzBUnePpvnuZ7l38vaxlGo6eiQjDHylfTNaQjmtD08jVqz0chSBUshvj/oSkETreTioaF3czNz0BVaxUVDRUEPAFC/uX7nwuzU1RCoGyKm75/E+V15dz/3vsJTgdzPaSCY+zUGJ5eD/0vpxbS0eOj1K03qleaN5VYIXj+a8/zsw//LO6Yvn19oOHBDz5ouWsyGuPJhbmGYHnjBPkoBO2722m7qI2mbU1AaovAdBM5qhfhGuqbcQ1VNFYAspYgnygqIQCobKrk2n++luGjw/TuTeyfI8zFYIfRHW6iayLl8yPHRywhqGpNtgiOPnSUV///VwlOGSKsI5r+/f2sumwVk/2T/OJ//SJjN41pEcyVGGC6hmB5M4fyUQgatzTy8Rc+bpWMSBUjSHQN+cf9hAPheZ3f0+dB2RSVTZVUNlYCUmYinyg6IQCsPGjJIFo4Qx1GDGC8azzpueBUEE+vh9r1xv+3xFlCeV15XLGx0ROj6LCm90VDhEdOjBCYDLD9ju28+S/ezMF7DnL4/sNx542EI/MWh3AwbInUnDGC0RghWMaAcT4KQSIpYwRRN5EZLAasRID939/P8LHhtOfz9HqobK7EZrfNWAQZlJn42R0/47mvPrfo44V4ilIIUn3IhfkxeHjGIki8OZtBWtMiACM4ONkbrUPvD1kC0v18NwB9L/UB0LqzlUu/cCn1G+vZ9+8zwXytNXdefCf/tunf6Phpx5yCMN45jo5o7GX2OWMEuXANRUIRQr5Q/gvBLDEC0zUExs18sn+Sh37nIZ780pNpzzfZN2nFjEyLIBPX0NGfH+X0b04v+nghnqIUAtPsXWgZXWHGIghOBeNm1GC4hSBeCFytLss1NPb6GETv4z17egDof7kfW6mNpm1N2Ow2tt22jdd//bqVbti7t5fefb1MD0/zk3f/hO+/+fuzxnbM1NGmc5sWZhEsk2vIXO2c70JQ5ioDFW81m3+b6wjAuJmbQf7Xfv5a2v/5ZN+k5So0LYLFuoaC08ZnL9a1J2RGUQqBWASLQ2vNYMeglWKY6B6yhOCceIvAFILRE4bF4F7tjhOCpm1N2MvsAGy7dRtoOPyA4R7af9d+Spwl/P7x3+fKr1xJ59Od9LzQk3aMplXSvL2ZwGSASDiSdl/fmM8q/LZcrqFcVx6dL0qppHpD6SyCU786hbIpQr4QRx46kvJ8nl6PlTxQXluOsquM+h4DIgRZpCiFoKS8BFuJTYRggXh6PQQ8AdZdsw5IDhiPHB+hoqEirkZ9VVsVk/2T6Ihm5IQhFOe9/zwmuieY6Jmg7+U+Wna2WPs3bWuicVsjh39ymJA/xKF7DrH55s2U15az6Z2bgNl9y6OnRrGV2Gjc2gjMfoP3jfpwr3QDy+caKhQhAJK6lPnH/ZQ4S7CX2S0h8A56ef1Xr7P++vW4V7s5ePfBpPOEg2G8g17LNaRsRqnrxVoEnh6PNR4hOxSlEJiznXTB4kgoYmW1CDOYbqFzrj0HSG0RxLqFwBCCSCjC1NAUoydHKa0sZeM7NgLQ8dMOpganaN3RGnfMtlu3cfrp07z07ZeYHplm+x3bAWZmobPMJMdOjuFe7baarswm9tOj01SvrAaW0TVkCkFV/gtBKovAtKbL643/75lXzjBybIQ1V67h3NvO5eTjJ5OE2nvGC3omnRjIqPCcWATZpyiFAIwPeWAi9Zf/qb94ijsvuXOZR5T/mIHitVeuxVZiS2kRpBICML68oydGqV1XS+uOVmylNl785osAtOxoiTtm63u2gobHP/84rlYX695iWCCxs9B0jJ4yXsO8Yc2WGeYb880IgbiGkkisQOof91tBZHupHWeNkyMPGq6gtVeu5dz3nUskFEnK+rJWFUdjBEBGZSYmemaywpa7jtXZSvEKgTt1vXWA4aPDDBwamNW/XIwMdgzirHHianVR1VYVJwQhf4jxznFqz6mNOyZ2UdnoiVHqzqmjxFlC645WQ1gUtGyPF4LGLY00nddEaDrE+R8436rbby+z43A7Zr2BjJ4cpWZtzUzWS5prrLXGN+rD1ewyMozENZTEbBYBYJWZcNY4ad7eTPP5zTRubeTAjw/Encf8nJiTAvPYRbuGohaBjuhlrxx7tlK8QjCLa2h6dBod1rLyMYGhjiEatjSglKJ6ZXWca2jslJERlM4imOiZYPTkqCUU7W9oB6B+Y33Km+K5t50LGP11Y5ltJumf8DM9PB1nEaTzIwe9QSKhCM4aJ2VVZRnfUPb86x4rJXY2CkkIEruUJQlB1EJb/ebV2Ow2lFJsu20bnU93Mnlmpr5Uzws92EptNG5rnDl2FtfQmVfP8PjnH+exzz2W8nkzHRnEPZQtiloI0s0Wp0eM/PLYhVDCjBAAuFe64yyCVKmjMFPErO/FPkK+kLWYzxSCxPiAySV/dAkfff6jNJ3bFLd9tpmkuaK4dm3tTIpwumscXUPgrHVS5irLyDWkI5rH/ugx9n5j75z7FpIQlFWXxQmpb9xn/V9hRgjWXLHG2rb+2vUAcTn+Xc900bqzldLymdaclY2VTI9MEwnNWN3TI9PcecmdfHP7N3n2H57luX98LuXKZdM1ZI5JyJyiFQKn2zm3EOSgqUq+MjU8hXfAS+MWY1ZXvbKaie4Jy0ebTghKHCVUNFTQ+bRRXdS0CFZeshKA1l2phaDEUcKKN6xI2j6bRWCuIZhPjMCcSZbXluOocmRkEUwNTxEJRmZdWWtSSEKQ+B1J5RoCWHPlGmtb685Wylxl1tqCcCBMz94eVr5pZdy5E1cma635+cd/Tu+LvVz7L9dy5VeuBFLHgzy9Huu1Yy0CHdFxwiLMn6IVgsTZTizmQiMRghnMjCHTIqheWU04ELa+qCPHR3C4HVY2SSyuVpcVaDbXGNSuq+UDj32AXZ/ataBxzMciqFlbM+daEfMaO2ujrqEYi+DYI8fo+GnHvMdkfk5Gjo3Mua8lBJX5LwQOt8PqQQDxwWIwbvoNWxpoPq/Z2mYrsbHq0lWcfsqwCPpe6iPsD7PyjQlCkFB47qXvvETHTzu46q+v4uI/uNhK/00Ufa01nh6P9Xzsd/jBDz3Ife+5LyvvvdgoyfUAckU6iyAcDFvb56qjX0yYxebML6CZfz/RNYGr2WVlDCmlko6taqti4MAAyq5wr3Zb28+55pwFj8MMUGqtUUoRCUX49Zd/zcixEbqf78ZR7bBSR5VNze0aqjFcQ7H7/fZvf8v08DRb3rVlXmMy89qnR6aZHpm2Xj8VgckA9jK7tYAun4kV0/L68iSLYPend7P707uTjlt9xWqe+MITeAe8dD5jWIKr3rQqbh9zZfKef91D645WHv3so6y9ei1v/KM3Gs83RQvTJXSZ8435CPlCNG5t5PSvT8dZBAMHBxg+OkzIH6LEUbS3tkVRtBaBo9pBOBAm5IuviR77wRKLYIbho8PYHXZqVtcAWGmX411GbZ+BgwNJbiETM2DsXuXGXprZDbCysZJIMGLNBHv39fKbr/yGzmc6qV5RzaVfvBSl1MzK2DmsvlSuIe+AN2VRvXTEfk7mcg8VQsE5k9gKpEFvEB3RcRZBOta8eQ1gxAm6n+2mdl2tFSsyaTq3ibr1dbz0rZf479/9b8pcZdz8g5tRNmMiYZWhSBAC839tTkhiv69Tg1OEfCH6XuxbxLstbopWNmNnOyXOmX9DbP0ZEYIZxjvHca9yW1/UWIvg9adex9PjsRaKJWIKQWzpicUSW6fGWeM06hcBtz9yu1VL32S2FGHzBpIqWOwd8BLwBOKCo2Onx/D0eJJcHBAfvBw5NpIytmESnAwWjBDEfkfMQG+sRZCO1gtbKa0s5fWnXqfzmc6Ull9lUyW/f+z3CflCjL0+hqvFFbci3bIIEtyApvVluijNGJDW2tr39NOnU14nIT3FaxGkyTM3A8W2EpsIQQwT3RPWzR+MG7LdYWe8a5yX73wZZ40zrSvFFILENQaLwSp2Fl29OnbaEALTUollNovAdA05qh2UVZVZ6wjCgbA1GYjNivr1X/yau995d8rqp55eD84aJ8qmziqLILYCaWzBubmwl9pZdekqDt17CO8Zb1KgOJYSZwkNmxviRAAMl52txJbWIqhdW0tJeYkl6P4JP5GgESg2ExOE+VO8QpAmq8QUgvpN9RIjiGGia8JyB4FRpqN6RTUDrw5w+IHDnHf7eXHpgbGYi8rM1NFMSCwzMX56nPK68pQ319lShH2jPhxuBza7LW4dQWx5hFj30PCxYaaHp5keTu6gNtk7Sc2aGtyr3HMGjL2DXpy1c99M84HatbweyHYAACAASURBVMb16t/fH1dwbj6sfvNq6385mxCkQymVcq2BaX1VtVXF1UIy9yurKqPrmS5ZcbxAilYI0uWZmzPFpm1NTPZPyupijNpLnl4P1Suq47a7V7o58dgJwv4wOz+2M+3xpgCYft1MSCxhPH56PC4AHUvigqhYfGM+ymuNoG6Zq4xIMELIH4qbgcZaBGZVUzNNNpaJngmq2qqo21CX8vlYzNXVhUDNmhoatzVy9KGjCxYCc22Bo9qx6Ote2VSZ0iIoryunxFmCs8ZpWQTm52HjDRvxjfkYODiwqNcsVopWCNKlF5oWQeO5jeiITvogFgI6ovnWhd/i4L3JlSAXg1k9NNYigJmAcevOVlouaEl1KGCUkPjIsx9hw9s2ZDyWxKYmY6fHUrqFYG6LwJyZO6qMz0LAE4i73qZFEJwKWtZhKtePp9eDq81lCMGxkbTNc4LTQSa6J7LiIlsuNt24idNPn7ZiMfMJFgO07WqjtKKUFRevsEqELJRUQjDZO9PgxuF2WEJgfh5M9+Tpp6VpzUIQIRhPIwTRWUwhuoemhqfoe6kvax2czBtibIwAZoRgx8d2zHmOlZestALNmVBaUUppRSneQS9a61ktgtmCxdOj05Zf2qwEGpicEQJlU5ZFYN4EIXmtQDgYxjvgpbq9mrr1dfjGfCndRxCz4K2QhOCdm9BhbZWXnq9FYC+1c/MPb+aqv7lq0a+davHgRM8EVe2GEDhrZlxDpkXQdlEbVe1VEidYIMWbNZQmWGz6jk03iKfXQ+vO1Ktf8xWzu1e6BvMm4UCYX37xl5x87CTeAS+RUISb7rqJjTfEZ/+Y50l0Da26dBUNmxs4733nZXH0c2P6jn2jPgKTgfRCMEf6aMNmI/PEjC/4PX5LCBo2NzDeaQig6RaCZNfQZP8kaMNnbc5Uh48NW7GMWMx+DIXiGgJov6gdV6vLWik8n2CxyXzXYaSjoqkipWvILDvirHFa4moKRmVjJasvW83p35y21poIcyMWQQrXUHlteVz55EJjPkIwNTTFD6/5Ic9/9XmqV1Sz6aZNVLVX8cD7H7AWj5lMdEeFIME1tOH6DXy649NJGR9LjTlTnC1jCIxrHLsyNhbfWHrXkK3URtO5Tdb/zxSClgtakiwC8/NR1W7ECCD9CmOzQ1shWQTKpoy04Ki3azn7KFQ2VRKYDFitSSPhCJP9k5ZF4HDPFI70Dnota3HV5avw9HoskRDmJitCoJS6Til1VCl1XCn1hRTPO5RS90af36OUWhPz3Bej248qpa7NxnjmQ4nD6LSUKmuovK7cWgBTiIXnvGeigdQ0i6I8fR6+vfvbdO/p5l0/ehe3P3I77/jPd/D+/34/peWl3HPjPXELdca7ximtLF32G346zDIT46ejLqtZXEMwI/a+cZ9Vi2Y211BlUyXVq6K1lLS2GuqseOMKho8Nx8UAzLz2qrYqatfWzppCOnJihLKqspTWQj5jdoYrc5Ut2t+/GMy1BOZs3zvgRYe1NUmLDRZPDU5ZiQTmKuau57qWbayFTsZXVSllB74BXA9sBd6nlNqasNtHgVGt9Xrgn4G/jx67FbgN2AZcB/x79HzLQiofsm/UR3ldOfZSOxWNFQVtEUwPT6fstHb4/sOMnRrjg499kPPeP+PWca90c+sDtzL2+hg//8TPre0TXRNUr6jOGzM70SJwr0rvGoJoAxOt+fdt/86jf/QoIX+I0HTIsggSXUOVTZW4V7oJ+UJMDU0xdmqM2nW11G+oxz/uj4sBmJ+P6vZq7GV2atbUzGoR1J2TugxHPrPu6nWUVpTOOz6QLczEANM9FCu6YLipwn6jOsDU4JS1f8OWBuxlds68emZZx1vIZEPedwPHtdYntdYB4B7gxoR9bgTuiv59P3C1Mr4NNwL3aK39WutTwPHo+ZaFVD7k6ZFp6wZR1VYVV/t8oRx+4DAvfeelpG2xN9nF4hvzpa2YaQoBzLh1Yunf309FQwWrLluV9NyqS1dx4Scv5LX/es2aPU90TSQFinNJrEVQUl6SdoYdWyJhomsCT4+HF//zRYZfM2bsZvpoomvI1eyy3GATXdE+CutqLddP7Ix/omcCW4nNGoOZOZSK0ROjBeUWMilxlrD55s3UrEntglsqEusNxYouYFl0vnEf3kGvZRHYS+00bm1k4FVJIZ0v2RCCdiDWBuuObku5j9Y6BIwD9fM8FgCl1CeUUvuUUvsGBwdT7bJgUhWeiy0aVtVWZX34jj96nPvec1/a1MBUvPD1F3j2H56N23bkwSO89O2X6H+lf8Hj9Y35uP+99/O1tV/j72v/nu9c/J2U6xxM1xCkdg+d2X+Glh0taWemKy9ZSWg6xMAh44s00T2RFB/IJRWNFYSmQwx1DFGzuibt+4i1CMz3EvaH+c1XfgMwYxGkcA2ZwjfeOW4JQf2GeiA+BjDZO4mr1WVlRNVtqEtyH4Hh3x49NZq2HlO+845vv4PbH7l9WV8zscyE+VmOjRGA8b2ItQgAms9vFotgAWRDCFJ9CxPvlun2mc+xxkatv6W13qW13tXYmPnCJEjOM9daMz2aIATRGMGTX3qSw/cfTmrMPRsTPRNxs3OYma2/ctcrCx5v955uDv3kEA1bGtj58Z0MHhrk8H2Hk/ab7J+0ZkeJAeNwMMzAwYFZ8/7bLmoDjIJu4WAYT58nr4TA/ML37utNGx+A+BjB4CFj8rD6zaut/5kVI0hwDVU0VVjvt/fFXoJTQWrX1VKzpgZlj48BeHo91gwVjH4MAU8gTozBENNIMFKQFgFAafnyu4YSC8+defUMzlqnFb8zr59/3B9nEQA0nd+Ep9ezoO9rMZMNIegGYteQrwB60+2jlCoB3MDIPI9dMhJdQ0FvkEgwYs0UXa0uvGe8dD3XZVU0TOVqSYVZN90/4Y/z05tCcOBHBwgHk7NZZsP8UF/3L9dxwzdvoHFrI7/5q98kLaef7J+k7ULjZp5oEQx1DBEOhJMaxsdSt74Oh9tB795ewyLSyamjucQqMzE0NbsQxKwVGTw0iKvFxdV/e7X1vOkaKnGWoOyKyb5JQtMhKpsqqWysxF5m5/SvjbUYtetqjRjA6hpGj8+kk5qrik3adhn/965n4wOVZsZQIaWO5poyVxklzpIZIdh/hpYLZixZUwg8vR5C06E4IWg+3+iRkC2rIOQLpYy3nS1kQwj2AhuUUmuVUmUYwd+HE/Z5GLgj+vctwJPasJ0fBm6LZhWtBTYAL2RhTPMiMVhsLiaLtQh0RPPrv/i1tc98hcA36rNKXMf2b53sn8S92o13wMuJR08saLxm9kRFQwXKprjsS5cxeGiQjgfjm6hM9k/iXuOmorEiabx9LxuCNptFoJSibVcbvXt7rePzLUZgki51FJJdQ43bGll5yUpWXWrERkzBV0rhqHJYaaKVTZUom1FLqWdPDzBTJsN0/Zh4ej2WqwKMvPvSilJO/epU3FjMNQSFahHkAqUUlU1GYkAkFOHMq2fiPrdmDMi8HrGuoZbtxn7ZEoKHPvLQWd30JmMhiPr8fw94FOgAfqK1PqSU+rJS6p3R3e4E6pVSx4HPAl+IHnsI+AlwGPgf4NNa64VNkzMg0TVk1hmKFQKAE4+dsFLozMyFuYgtTWxaAeFgmOnhac7/4PlUNFYs2D3kHfSi7MqaCW177zbqNtTx9F89bfmkw8EwU8NTuJpdSX2FwQgUl5SXUL+xftbXaruojTOvnrEWUOWjawjSp45CTLB4zMfg4UGrefrVf3s1q9+8Oi7bqMxVZs3aTd+02YUNsAKlsWUkAt4A/nF/nEVgLzMqb77+q9fjxjJyfARbqS2vLKtCoKLRWFQ2fGyYkC8ULwTR74EZs4mdIFQ2VVLZXJk1Iejf32912VtuTj5x0pqkLhVZSQrWWv9Ca71Ra32O1vqvo9v+TGv9cPRvn9b6PVrr9Vrr3VrrkzHH/nX0uE1a60eyMZ754qg2FqSYN1HLIoi6DKpaZ77gV/zlFSi7mrdFECsYphCYJq57pZvz3n8eRx8+uqALPDU0ZVkDADa7jcv+5DL69/dz4jHDupganAJtNI2vXlmdLAQv99N8fvOc+eDtF7UTCUU49l/HgDxzDc3TIrA77NhKbQwcGCDoDVr9ClZduooPP/XhuGqpZVVlVqtLUwhMK6iqvcrqWVG3vg7/hJ+poam4xWSxrLlqDYOHBuMswdETo9SurV3WPPyzAdMi6N9vJFfECoEZAzInK7ETBMhewNgsZeLp8ywoWSQbTJ6Z5IfX/JBn/uGZJX2dov5UOtwOdFgTmjZcOKlcQ2DcOFouaKGqtWreQpDKIjB/u1pcbL9jO+FAmMP3Jwd70zE1OJWUKrntvdtAQfdz3UmvUb2yOi5GoLWmf3//rG4hEzNgfOyRY5RVlS2otMBS46h2YCs1PrqzWQRKKZxup7WwyLQIUp6zykHYb8z+Yy0CiC+fHZs5ZAlBW7wQrL1yLYBVlgEKN3U015iF5/r392Mvs1tlQcCw4pRNpbQIwBCCgYMDGTe0nx4x1uOE/eG0JUuWis7fdoJe+h4LxS0ECWUmrPaFUSFwtbrYfPNmrvjyFYAxK16wRaCShaCyuZKWC1pwtbroemb+qx8TU+TAyOaoXVdrma2xQuBe6cY/7rearoyfHsc/7p81UGxSvaKayqZKgt5gXsUHIOo7bqzEVmJLugkn4qh2WCuQEzuYxRLbz8D8H6cSAnMtwYEfH6B3r5HXkDiG1p2tlFWVWe4hrTUjJ0ZECBaB6Rrqf7mfxm2Ncb2elTLcpOZ3Mski2N5M2B+es1lQIsOvDcctJDU/P5C+0kAkFFkSa8EUgN69vUltdbNJUQtB7IIjmLEIzCCizW7jvT99rzXDq15RPf8YQfeElX2SyiJQStF2YRu9++afJGW6hhJp3No4IwRnZsQmdlEUzC9QbKKUsqyCfIoPmFQ0VlC9onpOV4sp9lVtVbOWyDDXEjiqHZYbyBTAmrUz7qfatbW07Ghh7zf28vjnHrfOHYutxMaaN6+xhGBqaIqAJyAZQ4ugsqmSkC9Ez56elJ9b0z1kL7Mn1UFKlzk00TPBkYeOpH3Ne2++l0c+M+OlNlewQ+pqxCFfiH9q/SerQms26fxtJyXOEsKBML0vLl1CZVELQaJFMD0yjb3MTmlF6k5bVSuqjGbt81B+T4+RTeJqceHtN2IDlhA0G3nQrbtaGewYTLtCOJHEXGmTxq2NDL82TDgYjnsNa1FU1D3Uv78fZVM0n9c8r9ezhCCP4gMmzec3W+ObDfNGMZtbCGZWF5tuIZixBGID67YSG5948RN8uuPTXPOP13D1316d0m225so1DL82bNx0fmbcdMQiWDjm9fBP+FMKgSnuFY0VSQsLGzY3YCuxJQnBs//4LPfefG/KpkU6YlhvsY1tzCq0QNK6IDCEZWpoJo6RLfweP/0v93PB71wARN1ES0TRlqGG5J4E5mKydCtVq9urCXqD+Cf8c/rMJ3qMsgzhwMzN2XvGaLhuzjjbdrWBNmbqqy9bPev5IuEI0yPTqYVgWyORYITRE6NM9k/iqHZQWlGaZBH0v9xP/ab6tEKXiJkTn48WwU3fv2le+5nXeC4hKHUZ/5NYIWjc2sgHf/lBVl8ef22UUjRsbojzVyey5so1ADxw2wN0/raTFZesYN3V6+Y1ZmGGuJTQVEIQ/R4muoXAKCzZsLkhqdTEwIEB0MbEaM2b18Q95x30EvaHGT0xSjgYxl5qZ/z0OLYSm9GpL4VryHQjLaR3ScgX4shDR9j67q3YSlLPx7uf60ZHNJtv3sypJ0/R9dsu+ON5v8SCKG6LILE65Yhv1n6yVo+CebiHYi2CWNeQuSoSsBZ9zcc9ND0yDZq0riGAwcODePu9VDYbX4qqtipQhkUQnArS/Vw3rTvm31thxcUrcNY4LUHIJ5RNzavRjXmjmC0+ADEWQXP8DWXd1euwly68DmLL9hactU46f9vJhZ+60MhSmqcACzPECnPz9mRLNtYiSEXz9uakmbo52+97qS9pf3P2HwlFrHTi8dPj1K2vo8RZktIiMAUg1XOpiIQi3HfrfTxw2wNJCw9j6fxtJ8qmWHHxClZduoquZ5euF3NxC0EK15AZKE6FKQRzBYxDfqNqZVV7FZUtlUyemURrnSQErhYX1Suq6duX/IFMJLbxRiLmzHTg0ACTZ2Zew15qNzKduibY8697mBqa4sJPXjjna5lU1Ffw+ZHPs/HtG+feOU8pqzb8xnNZBKZ/OfbGkwnKpnjHt97BLffewg3/cUNckFOYP+b1qFlbk9IKN4Ug1fcCoPXCVia6J6zYmXfQa5X/6H852ZUT6wYaOjpkbXOvduNqdaWc9ZtWwnxK1uuI5uGPPsxrP38NMLoJpqPz6U5adrTgqHKw8k0rmR6ZZujI0JyvsRhECIgPFptrCFIxXyGIrZLoanFZaWeJQgCG+2U+FoFZXiLVzKessoyaNTUMHR5Keo3qldUMHBjgmb97hg1v25Dk5piLQiuZnIh5o5irgbqZNZQtIQDYestWtt26LWvnK0bMz3u6BAfTqk9nEZjWrPkdM60BR7VjVosAsG66Y6fHDCFoSSMEpmtoHhbBk3/6JK/84BV2fNRo75ouHTUcCNO9p9taBW/+Xqo4gQgBMRbB6OwWgZkdMqcQ9MwsNDJvypP9k0z2Tya5Hlp3tTL82nDKwFUsZgXGdCWXzcyhJCFYUU3vvl584764OjvFwoWfuJB33/3uOWM6qYLFQu4pLS9lzZVr2HzT5pTPz+Uaat3RCipZCLbeupWhI0NW9zOT8U6jCZOrxcXw0WGCU0GmBqeoWV1DVWvVrK6h6eHplN3wTHREs+8/9rHl3Vu45v9eAxDXAEpHNE/95VMcfuAw3Xu6CU2HrFLxdevrqGyqXDIhKOpgsb3UTkl5SZxryFmX/oZhL7NT2VQZt1gsFebz1e3Vln959OQoAU8g2SKIxgn6X+5nzRVr0p5zNtcQGK6PE4+fIBKMxImNGeg9//bzrXS6YqJmdc2sq49Nsu0aErLHHU/ekfY50yJI970oc5XRuKXRWvMxcHCA8rpyNrxtAy9/52UGDgzQvnum8v1E5wTuVW5czS6GjgxZFoJ7lZuJnomkGlIQHySePDOZdt3N0NEhfKM+Nrx9w0wJ7ZgJ4GDHoFXXzAwgm5aAUoqVb1q5oHVHC6GoLQKI9iQY9xMOhgl4ArO6hiC6lqB7dl9gKovA7D+QKAStFxrB27ncQ5ZraBaLIBKMJL1G8/nNlFaWWovihNRY2SfNIgSFxFwWARhp0L37etFaM3BggKbzmqykiUT30HjnOO5Vbuo31zN0ZGimC95qN1WtVUYxSX/8wi5Pr8fKBJzNPWQGhle9aRU2u40yV1mca8hcx3TZly5jw9s3cO5t51qp5mCIwtjpsSUprV3UFgHMFJ4zTbTZXENgCMHY67M3xZ7omaCkvMT4kEaD/Gf2G7nMiUJQ2ViJe7V7TiHwDnpxVDvSBh1jfeCxr3HBhy9g67u3Lnst+UJj7VVrefs3327NwITCwJy4zWbJte1q45W7XmGia4KBgwNs/9B23KvdOGud1iJLk/HOcVp2tNCwuQHfqM8SiprVNQy3GiuUJ/sn46xMT5+H5vOb6XmhZ9YU0q5nuiivL7dWp8f2XIaZygabb9rMVX91VdLxOz+2kws/eSFllWVJz2VK0VsEjmoHg4cGeeh3HgLSz7hNqtqr5nQNeXqMZiVKKZy1TmylNiuFLVEIYH4B4+mh1GsITBq2zOS0x84ilFIiAvPAXmZn1yd3SVG4AuOca8/hrf/0VlZcvCLtPmbAuOPBDgKeAE3nNqGUonVHK/0vzWQOBaeDeAe8uFe5adhkfJ9OPHoCZVdUtcXE+2Ju9iFfCN+oj5adRjB7Lotg5RtXWgkYDnd8PxSz+nG6FHZHtWNJRABECHDWOhk4OEDPnh4u/9PL2XTjpln3r15RbTSFn07fpGKie8KqSKmUMgJP0XonqYSgfXc7oydGU7aVNPEOetP6QcEIdppllVO9hiCcjZSWl3LJZy+ZVcCbtzdjK7HxyveNsu9N5xprSlp2tnDmwBmrQZTVe2OV20rJ7nq2i+r2aqOuVbQacezN3kwZNbOa0qWQTg1NMXx0mJVvnOnD5XQ742IElldiDvf0UlD0QnDVX1/FTT+4iT/s/EOu/PKVcaWJU5FuUdnQ0ZnAkmkRmLhaXFZjzlQWx5Z3bQHg4D3pa5WkqjyaiOkekoCnIMxQWl5K07lNllVuCkHrjlbC/rCVJhobGHavclPiLCESjCRNsGJv9qZ14F7lpqKhIq1F0P28UR145ZtihCCNa8gMJC8nRS8E7Re1s/2D2+cUAJN0awnuu+U+vr3724wcN8oTV62YKURmfoDMipmJ1K2vo/0N7Rz88SxCMDQ1q2sIYPUVq5MqNAqCYKRpg/H9NQPMrTvjA8axQqBsyqoxZZY6r2yqjKsmDDOiYLqOzLpiiXQ924WtxBa3Sj+Va8hR7ciJe7LohWChmC6f2DhByB9isGMQ7xkv37/i+4QD4WSLgNldNue9/7y4Lkj9+/u579b7CHgDaK3TFpyL5U2ffxO/e+B3F/3eBOFsxbwBm9YAGCXFy1xlVjbPeOc4qJnveP2meCGwldiobKqMixFYPSlaq3C1utK6hrqe6aJ1Z2vchNPhdsS7hkZnL3GzlIgQLBDzBh9rEQy/NowOa97wh2+wzLvYrlXzEYJtt25D2RQHfnyA4FSQ+2+7n8P3HebkL08SmAwQ9ofndA0ppQp+JbAgLAXtFxlrBRrPncmus9ltbHjbBo48eIRIKMJ45ziuFhclDiOZ0owTxLY0TVxdPNk3ia3ERkVDRVxdsVjCwTA9L/Sw4o3xAW3TNWRWM/aN+nISHwARggVT5iqjvK6csVMzKaSDh4xZ/I7f2cGtP72V2nNqLbMT5icErhYXa69ey4EfH+DxP36c4aPD2EptnHrilJU3PFuwWBCE9DSd18R57z+Pc997btz2rbduZWpwitO/OW0tJjMxLYLYVNHE1cWTfcZKfmVTVi2ixDL1/fv7CflCcYFiMILFkWDEajgzPTotFkEh0XJBC30vzuQfDxwaQNkV9ZvqWX/tej5z/DPUrp2pPW/FCFpmv5Gfd/t5jJ0aY++/7WX3Z3az9sq1hhAMpq8zJAjC3NhL7bzrR+9KqqS74foNlFaUcui+Q9ZiMuu5t23got+7yCrzAMZ3Odb94+n14GqdmeiFA+G4ADDAyV8aLdoT16hYq4uj+4tFUGC07W6j/5V+S8kHDw0aZWodqdfnmatV50rr3HLzFkqcRg31t/zdW1h79VoGDw9y5oCxGG0u15AgCAujtKKUjTdspOOBjiQhKK8t523/+ra43H1XqwvvGa9VDtrT57FqkMXWFYul4/4OVly8wko/NTGD1rH9UMQiKCDad7cTCUasshGDhwZnrXdv1jKPDVSlwlHt4AOPfYDbH7md0vJS1l5ttMg8dO8hQFxDgrAUmO6hkC8UJwSpcLW6iIQiVvnoyb5JyyKw1hnExBBGT43S91IfW969Jelcia1yJVhcYJhFqnpe6CHkCzFyfGTWeveuZhefG/oc51xzzpznXn3ZamrWGD7JlguM5iannjQKXYlrSBCyj+kegpkMoXTEzvrDgbDRd6Q1vUXQ8UAHQEohiHUNhXwhQr7QrH21lxIRgkVQ3V5NVVsVvS/0MnR0CB3Rczc+WcTScJvdxpor1qDD2mjO7Vqa5eWCUMyY7iFgTosgdtZv3vAt11Br8oKzjgc6aN3ZGhczNIl1DeVyVTGIECya9t3t9LzQY2UMzdUKcbGY7qFUzbkFQcgOF336Itp2tVmLyNJRv7Eee5mdV3/4qnXDNwXAUe2Ia2c53jVO9/PdbLkl2RqAeNfQXHWGlpqirz66WNp2t3HkZ0fofKYTW4ltzg/QYjEbnkt8QBCWjtWXr+bjez8+536VTZW88XNv5Om/fpryBmP2bloJSqm4dpYdPzXcQlvfvTXluWJdQ+b6I7EICgwzTnDw7oPUbahbsrIO9ZvqqWqrkviAIOQJl/3JZbhXu9nzL3uAGdcQYC0qi4QjHLz7IE3nNaWdJJa5ylA2hX/cn3OLQIRgkZidxXyjviVzC4Exy3jXj9/F1X9TfG0mBSEfKa0o5bqvXQeAsqm4SZqrxcX46XHuv/V+evb0sOtTu9KeRylllZnItUUgrqFF4qxxUr+pnuGjwzRsbZj7gAxY8+Y1S3p+QRAWxqZ3bmLTOzcxdHQorkicq9XFkQePMHJ8hLd+9a1c9L8umvU8TrcT/1juLQIRggxo393O8NHhJbUIBEHIP5RS3PKTWwhMBuK2128wgsk3/eCmpHIWqXDWOOMsglylj4oQZMCKS1bw6g9fLcqm8IJQ7JQ4SpKqCez+/d2c/4Hz510FwOF2GMHiMR+llaXYS3NTQl6EIAN2fGQHdevrrCqFgiAUNza7bUGlYJw1TsZOjeW0zhBIsDgjShwl81otLAiCkAqzXWUu6wyBCIEgCELOsFxDYhEIgiAUJ84aJ/4JP9MjBWwRKKXqlFKPK6WORX8nF9Qw9rsjus8xpdQdMdufUkodVUrtj/5I+o0gCEWDw+0AbbTJLGSL4AvAE1rrDcAT0cdxKKXqgD8H3gDsBv48QTBu11pfEP0ZyHA8giAIBYNZb8g/4S9ciwC4Ebgr+vddwE0p9rkWeFxrPaK1HgUeB67L8HUFQRAKnth1A4UsBM1a6z6A6O9Urp12oCvmcXd0m8n3om6hP1WzlNdUSn1CKbVPKbVvcHAww2ELgiDkHrPwHORuMRnMYx2BUuqXQEuKp740z9dIdXM3uzvfrrXuUUpVAQ8AHwR+kOokWutvAd8C2LVrl061jyAIQiFhuoYgd3WGYB5CoLV+S7rnlFJnlFKtWus+pVQrkMrH3w1cEfN4BfBU9Nw90d8epdSPirqPcAAABglJREFUMWIIKYVAEAThbONscQ09DJhZQHcAD6XY51HgrUqp2miQ+K3Ao0qpEqVUA4BSqhS4ATiY4XgEQRAKhljXUCFnDf0dcI1S6hhwTfQxSqldSqnvAGitR4CvAHujP1+ObnNgCMKrwH6gB/h2huMRBEEoGGJdQ7m0CDKqNaS1HgaSCuVrrfcBH4t5/F3guwn7eIELM3l9QRCEQqbEWYLdYSfsDxe0RSAIgiBkgGkV5DJrSIRAEAQhhzjcRtP7EmfuikFLGWpBEIQc4qxxJjW4WW5ECARBEHKI0+0k6A3mdAwiBIIgCDnk4s9ejH/cn9MxiBAIgiDkkA3Xb8j1ECRYLAiCUOyIEAiCIBQ5IgSCIAhFjgiBIAhCkSNCIAiCUOSIEAiCIBQ5IgSCIAhFjgiBIAhCkaO0Lryuj0qpQeD0Ig9vAIayOJxcIu8lPzmb3gucXe+n2N/Laq11Y+LGghSCTFBK7dNa78r1OLKBvJf85Gx6L3B2vR95L6kR15AgCEKRI0IgCIJQ5BSjEHwr1wPIIvJe8pOz6b3A2fV+5L2koOhiBIIgCEI8xWgRCIIgCDGIEAiCIBQ5RSMESqnrlFJHlVLHlVJfyPV4FopSaqVS6ldKqQ6l1CGl1B9Et9cppR5XSh2L/q7N9Vjng1LKrpR6WSn1X9HHa5VSe6Lv416lVFmuxzhflFI1Sqn7lVJHotfnkgK+Lv87+vk6qJS6WynlLJRro5T6rlJqQCl1MGZbyuugDL4evR+8qpTambuRJ5PmvfxD9DP2qlLqQaVUTcxzX4y+l6NKqWsX+npFIQRKKTvwDeB6YCvwPqXU1tyOasGEgD/SWm8BLgY+HX0PXwCe0FpvAJ6IPi4E/gDoiHn898A/R9/HKPDRnIxqcXwN+B+t9WZgO8b7KrjropRqBz4D7NJanwvYgdsonGvzfeC6hG3prsP1wIbozyeA/1imMc6X75P8Xh4HztVanw+8BnwRIHofuA3YFj3m36P3vHlTFEIA7AaOa61Paq0DwD3AjTke04LQWvdprV+K/u3BuNm0Y7yPu6K73QXclJsRzh+l1Arg7cB3oo8VcBVwf3SXgngfAEqpauBy4E4ArXVAaz1GAV6XKCVAuVKqBKgA+iiQa6O1/g0wkrA53XW4EfiBNngeqFFKtS7PSOcm1XvRWj+mtQ5FHz4PrIj+fSNwj9bar7U+BRzHuOfNm2IRgnagK+Zxd3RbQaKUWgPsAPYAzVrrPjDEAmjK3cjmzb8Anwci0cf1wFjMh7yQrs86YBD4XtTV9R2lVCUFeF201j3APwKdGAIwDrxI4V4bSH8dCv2e8BHgkejfGb+XYhEClWJbQebNKqVcwAPAH2qtJ3I9noWilLoBGNBavxi7OcWuhXJ9SoCdwH9orXcAXgrADZSKqP/8RmAt0AZUYrhQEimUazMbBfuZU0p9CcNV/CNzU4rdFvReikUIuoGVMY9XAL05GsuiUUqVYojAj7TWP41uPmOatNHfA7ka3zx5E/BOpdTrGC66qzAshJqoOwIK6/p0A91a6z3Rx/djCEOhXReAtwCntNaDWusg8FPgjRTutYH016Eg7wlKqTuAG4Db9cwisIzfS7EIwV5gQzT7oQwjsPJwjse0IKJ+9DuBDq31V2Oeehi4I/r3HcBDyz22haC1/qLWeoXWeg3GdXhSa3078Cvgluhuef8+TLTW/UCXUmpTdNPVwGEK7LpE6QQuVkpVRD9v5nspyGsTJd11eBj4UDR76GJg3HQh5StKqeuAPwbeqbWeinnqYeA2pZRDKbUWIwD+woJOrrUuih/gbRiR9hPAl3I9nkWM/1IMc+9VYH/0520Y/vUngGPR33W5HusC3tMVwH9F/14X/fAeB+4DHLke3wLexwXAvui1+RlQW6jXBfhL4AhwEPgh4CiUawPcjRHbCGLMkj+a7jpguFO+Eb0fHMDIlMr5e5jjvRzHiAWY3/9vxuz/peh7OQpcv9DXkxITgiAIRU6xuIYEQRCENIgQCIIgFDkiBIIgCEWOCIEgCEKRI0IgCIJQ5IgQCIIgFDkiBIIgCEXO/wPIbYkL+wR+sAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(sweep_response[(stim_table.condition=='surround')&(stim_table.Surround_Ori==90)]['199'].mean(), color='purple')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## new example" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0center_dircenter_osicenter_dsiisoorthosuppression_strengthsuppression_tuningcmicenter_mean...iso_stdortho_meanortho_stdcell_idsession_idvalidcreareadepthresponsive
5102920.605475-0.088010.670755-0.1133050.214989-7.3603720.7358520.240265...0.0738850.2212140.19003310123228221011892173TrueSst:Ai148VISp250True
\n", - "

1 rows × 25 columns

\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 center_dir center_osi center_dsi iso ortho \\\n", - "510 29 2 0.605475 -0.08801 0.670755 -0.113305 \n", - "\n", - " suppression_strength suppression_tuning cmi center_mean ... \\\n", - "510 0.214989 -7.360372 0.735852 0.240265 ... \n", - "\n", - " iso_std ortho_mean ortho_std cell_id session_id valid \\\n", - "510 0.073885 0.221214 0.190033 1012322822 1011892173 True \n", - "\n", - " cre area depth responsive \n", - "510 Sst:Ai148 VISp 250 True \n", - "\n", - "[1 rows x 25 columns]" - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "responsive[responsive.cell_id==1012322822]" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "metadata": {}, - "outputs": [], - "source": [ - "cell_id = 1012322822\n", - "expt_id = 1011892173\n", - "cell_index = responsive[responsive.cell_id==cell_id]['Unnamed: 0'].values[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "metadata": {}, - "outputs": [], - "source": [ - "analysis_file_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex/analysis_py3/'+str(expt_id)+'_cs_analysis.h5'\n", - "expt_path = expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex/Center Surround/Center_Surround_'+str(expt_id)+'_data.h5'" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "metadata": {}, - "outputs": [], - "source": [ - "f = h5py.File(analysis_file_path, 'r')\n", - "response = f['response'][()]\n", - "f.close()" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "29" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cell_index" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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o2x/+QV2764JLCQuziYdt+RkyMmpw88/N+Xnn392OhzLB6mp0LQp9PFijrOqcu+991KrVi1eeinws0NefPFFGjZsyD333EOeD7ct111nRtCGYhebTToOqFbNzBpu0cKs+rd7t9MRec9dYiM6ejuNGjVyNpgQYqoTKGCHTlck2dnmTic52Qz0Kc20adNIT0/n+eefp2nTpgGPr2HDhrzyyiusXLmSt99+2+vj6tQxz3Y++QTyQ6xmjE06DmnUyPyFdeKESTxlrPMXdAsXKiIHiY+3CaewunXN3WtExA22JE4FsmSJWRLAm661w4cP88gjjxAXF8fdd98d+OAK3HbbbSQkJPD444+zZ88er49LSTF/0K5YEcDgysAmHQd162ae66xeDXffDaFeHV8V5s3LQ3UhAwbYrrWikpKE3Nz2zJ+/k9zcXKfDsbyQmmpGeg0dWvq+jz32GIcPH2bKlCllKlFTViLCP//5T3JycnjwwQe9Pi4pCapXD70uNpt0HDZiBDz3nKlY8OKLTkdTsm3b4LffIoA0BgwY4HQ4Icc9x+PEiSvxpV6f5QxVk3QSEjyXrips+fLlvPPOOzz88MOOzE1r164dEyZM4JNPPmG2e1JRKerVM92+H38cWn/Q2qQTAp54Am65BR5/HL74wuloirdwoflaq9YqunTp4lwg8fFmCzFt2kCnTrkUfq4THx9/ttCjFVo2bjRFeEvrWsvJyWHs2LG0atWKp556KjjBefDII4/QtWtX7rvvPjIzM706JiUFdu0yvSmhwiadECAC774LPXuaiaPff+90RJ6lpUG1anuJi2tEeHi40+GEpOuvj0DkSr780gXAt9++yrffvupwVJYnqanm315SUsn7vfrqq2zcuJE33niD2rVrByc4D6pXr87UqVPZtWsXEyZM8OqY4cPNwKVQ6mKzSSdEREWZVf+ioswvyuHDTkd0vvx8SEvLJydnHpdfbrvWipOcDKoRrFzZgBMnTjgdjlWC1FQzsbekQWgZGRlMnDiRESNGMGLEiOAFV4wBAwZwzz338Nprr7FuXekrzTRoAMOGhVYXm006IaRVK/jsM3M7fPPNkJPjdETnfPcdHD4cBiykf//+TocTsvr1g3r1ssnPv9arOluWM/bsMV1OJXWtqerZZadff/31IEVWuueff54mTZowZswYrwaspKTAjh3gRY4KCpt0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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.figure(figsize=(6,5))\n", - "plt.errorbar(range(0,360,45),response[:,0,cell_index,0], yerr=response[:,0,cell_index,1]/np.sqrt(response[:,0,cell_index,2]), fmt='o-', color='k')\n", - "plt.errorbar(range(0,360,45),response[:,1,cell_index,0], yerr=response[:,1,cell_index,1]/np.sqrt(response[:,1,cell_index,2]), fmt='o-', color='r')\n", - "plt.errorbar(range(0,360,45),response[:,2,cell_index,0], yerr=response[:,2,cell_index,1]/np.sqrt(response[:,2,cell_index,2]), fmt='o-', color='b')\n", - "plt.xticks(range(0,360,45));\n", - "plt.xlabel(\"Direction (deg)\", fontsize=18)\n", - "plt.ylabel(\"Mean DF/F\", fontsize=18)\n", - "plt.tick_params(labelsize=16)\n", - "plt.text(270,0.27, \"center\", color='k', fontsize=14)\n", - "plt.text(270,0.25, \"iso\", color='r', fontsize=14)\n", - "plt.text(270,0.23, \"ortho\", color='b', fontsize=14)\n", - "plt.axhline(y=response[0,3,cell_index,0], ls='--', color='gray')\n", - "sns.despine()" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "metadata": {}, - "outputs": [], - "source": [ - "sweep_response = pd.read_hdf(analysis_file_path, 'sweep_response')\n", - "stim_table = pd.read_hdf(expt_path, 'center_surround')" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "metadata": {}, - "outputs": [], - "source": [ - "stim_table['condition'] = 'ortho'\n", - "stim_table.loc[stim_table.Center_Ori==stim_table.Surround_Ori, 'condition'] = 'iso'\n", - "stim_table.loc[np.isfinite(stim_table.Center_Ori)&np.isnan(stim_table.Surround_Ori), 'condition'] = 'center'\n", - "stim_table.loc[np.isnan(stim_table.Center_Ori)&np.isnan(stim_table.Surround_Ori), 'condition'] = 'blank'\n", - "stim_table.loc[np.isnan(stim_table.Center_Ori)&np.isfinite(stim_table.Surround_Ori), 'condition'] = 'surround'" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.figure(figsize=(6,5))\n", - "plt.plot(sweep_response[(stim_table.condition=='center')&(stim_table.Center_Ori==90)][str(cell_index)].mean(), color='k')\n", - "plt.plot(sweep_response[(stim_table.condition=='ortho')&(stim_table.Center_Ori==90)][str(cell_index)].mean(), color='b')\n", - "plt.plot(sweep_response[(stim_table.condition=='iso')&(stim_table.Center_Ori==90)][str(cell_index)].mean(), color='r')\n", - "# plt.plot(sweep_response[(stim_table.condition=='surround')&(stim_table.Surround_Ori==90)][str(cell_index)].mean(), color='purple')\n", - "plt.axvspan(30,90, color='gray', alpha=0.1)\n", - "plt.tick_params(labelsize=16)\n", - "plt.xticks([30,60,90,120],[0,1,2,3])\n", - "plt.xlabel(\"Time (s)\", fontsize=18)\n", - "plt.ylabel(\"DFF\", fontsize=18)\n", - "# plt.text(110,1.15, \"center\", color='k', fontsize=14)\n", - "# plt.text(110,1.08, \"iso\", color='r', fontsize=14)\n", - "# plt.text(110,1.01, \"ortho\", color='b', fontsize=14)\n", - "sns.despine()" - ] - }, - { - "cell_type": "code", - "execution_count": 176, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/saskiad/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py:4238: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " return super().rename(**kwargs)\n" - ] - } - ], - "source": [ - "responsive.rename(columns={'Unnamed: 0':'cell_index'}, inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "metadata": {}, - "outputs": [], - "source": [ - "table_data = []\n", - "for key in responsive.keys():\n", - " table_data.append([key, responsive[responsive.cell_id==cell_id][key].values[0]])" - ] - }, - { - "cell_type": "code", - "execution_count": 179, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.0, 1.0, 0.0, 1.0)" - ] - }, - "execution_count": 179, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig = plt.figure()\n", - "ax = fig.add_subplot(1,1,1)\n", - "table = ax.table(cellText=table_data, loc='center')\n", - "table.set_fontsize(14)\n", - "table.scale(1,2)\n", - "ax.axis('off')" - ] - }, - { - "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.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/analysis/DGgrid_analysis_5x5_nikon_SdV.py b/analysis/DGgrid_analysis_5x5_nikon_SdV.py new file mode 100644 index 0000000..e80723d --- /dev/null +++ b/analysis/DGgrid_analysis_5x5_nikon_SdV.py @@ -0,0 +1,584 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jul 28 14:06:37 2016 + +@author: danielm +""" +import os, sys + +import numpy as np +import pandas as pd +import h5py + +import pickle as pickle +from oscopetools.sync import Dataset +import tifffile as tiff +import matplotlib.pyplot as plt + +import nd2reader + + +def run_analysis(): + + exp_date = '20190605' + mouse_ID = '462046' + im_filetype = 'nd2' #'h5' + + # DON'T MODIFY CODE BELOW THIS POINT!!!!!!!! + + exp_superpath = r'C:\\CAM\\data\\' + im_superpath = r'E:\\' + exptpath = find_exptpath(exp_superpath, exp_date, mouse_ID) + im_directory = find_impath(im_superpath, exp_date, mouse_ID) + savepath = r'\\allen\\programs\\braintv\\workgroups\\ophysdev\\OPhysCore\\OpenScope\\Multiplex\\coordinates\\' + + stim_table = create_stim_table(exptpath) + + fluorescence = get_wholefield_fluorescence( + stim_table, im_filetype, im_directory, exp_date, mouse_ID, savepath + ) + + mean_sweep_response, sweep_response = get_mean_sweep_response( + fluorescence, stim_table + ) + + best_location = plot_sweep_response( + sweep_response, stim_table, exp_date, mouse_ID, savepath + ) + + write_text_file(best_location, exp_date + '_' + mouse_ID, savepath) + + +def find_exptpath(exp_superpath, exp_date, mouse_ID): + + exptpath = None + for f in os.listdir(exp_superpath): + if f.lower().find(mouse_ID + '_' + exp_date) != -1: + exptpath = exp_superpath + f + '\\' + return exptpath + + +def find_impath(im_superpath, exp_date, mouse_ID): + + im_path = None + for f in os.listdir(im_superpath): + if f.lower().find(exp_date + '_' + mouse_ID) != -1: + im_path = im_superpath + f + '\\' + return im_path + + +def write_text_file(best_location, save_name, savepath): + + f = open(savepath + save_name + '_coordinates.txt', 'w') + f.write(str(best_location[0])) + f.write(',') + f.write(str(best_location[1])) + f.close() + + +def plot_sweep_response( + sweep_response, stim_table, exp_date, mouse_ID, exptpath +): + + x_pos = np.unique(stim_table['PosX'].values) + x_pos = x_pos[np.argwhere(np.isfinite(x_pos))] + y_pos = np.unique(stim_table['PosY'].values) + y_pos = y_pos[np.argwhere(np.isfinite(y_pos))] + ori = np.unique(stim_table['Ori'].values) + ori = ori[np.argwhere(np.isfinite(ori))] + + num_x = len(x_pos) + num_y = len(y_pos) + num_sweeps = len(sweep_response) + + plt.figure(figsize=(20, 20)) + ax = [] + for x in range(num_x): + for y in range(num_y): + ax.append(plt.subplot2grid((num_x, num_y), (x, y), colspan=1)) + + ori_colors = ['k', 'b', 'm', 'r', 'y', 'g'] + + # convert fluorescence to dff + baseline_frames = 28 + weighted_average = np.zeros((2,)) + summed_response = 0 + for i in range(num_sweeps): + baseline = np.mean(sweep_response[i, :baseline_frames]) + sweep_response[i, :] = sweep_response[i, :] - baseline + + y_max = np.max(sweep_response.flatten()) + y_min = np.min(sweep_response.flatten()) + + for x in range(len(x_pos)): + is_x = stim_table['PosX'] == x_pos[x][0] + for y in range(len(y_pos)): + is_y = stim_table['PosY'] == y_pos[y][0] + this_ax = ax[num_x * (num_y - 1 - y) + x] + position_average = np.zeros((np.shape(sweep_response)[1],)) + num_at_position = 0 + for o in range(len(ori)): + is_ori = stim_table['Ori'] == ori[o][0] + is_repeat = (is_x & is_y & is_ori).values + repetition_idx = np.argwhere(is_repeat) + if any(repetition_idx == 0): + repetition_idx = repetition_idx[1:] + for rep in range(len(repetition_idx)): + this_response = sweep_response[repetition_idx[rep]] + this_response = this_response[0, :] + this_ax.plot(this_response, ori_colors[o]) + this_ax.set_ylim([y_min, y_max]) + num_at_position += 1 + position_average = np.add(position_average, this_response) + position_average = np.divide(position_average, num_at_position) + position_response = np.mean( + position_average[(baseline_frames + 5) : (baseline_frames + 27)] + ) + summed_response += np.max([0.0, position_response]) + weighted_average[0] += x_pos[x][0] * np.max( + [0.0, position_response] + ) + weighted_average[1] += y_pos[y][0] * np.max( + [0.0, position_response] + ) + this_ax.plot(position_average, linewidth=3.0, color='k') + this_ax.plot( + [baseline_frames, baseline_frames], [y_min, y_max], 'k--' + ) + this_ax.set_title( + 'X: ' + str(x_pos[x][0]) + ', Y: ' + str(y_pos[y][0]) + ) + plt.savefig( + exptpath + exp_date + '_' + mouse_ID + '_DGgrid_traces.png', dpi=300 + ) + plt.close() + + weighted_average = weighted_average / summed_response + + best_location = ( + round(weighted_average[0], 1), + round(weighted_average[1], 1), + ) + + return best_location + + +def plot_grid_response(mean_sweep_response, stim_table, exptpath): + + x_pos = np.unique(stim_table['PosX'].values) + x_pos = x_pos[np.argwhere(np.isfinite(x_pos))] + y_pos = np.unique(stim_table['PosY'].values) + y_pos = y_pos[np.argwhere(np.isfinite(y_pos))] + ori = np.unique(stim_table['Ori'].values) + ori = ori[np.argwhere(np.isfinite(ori))] + + response_grid = np.zeros((len(y_pos), len(x_pos))) + for o in range(len(ori)): + is_ori = stim_table['Ori'] == ori[o][0] + ori_responses = np.zeros((len(y_pos), len(x_pos))) + for x in range(len(x_pos)): + is_x = stim_table['PosX'] == x_pos[x][0] + for y in range(len(y_pos)): + is_y = stim_table['PosY'] == y_pos[y][0] + is_repeat = (is_x & is_y & is_ori).values + repetition_idx = np.argwhere(is_repeat) + if any(repetition_idx == 0): + repetition_idx = repetition_idx[1:] + repetition_responses = np.zeros((len(repetition_idx),)) + for rep in range(len(repetition_idx)): + repetition_responses[rep] = mean_sweep_response[ + repetition_idx[rep] + ] + ori_responses[y, x] = np.mean(repetition_responses) + ori_responses = np.subtract( + ori_responses, np.mean(ori_responses.flatten()) + ) + response_grid = np.add(response_grid, ori_responses) + + plt.figure() + plt.imshow( + response_grid, + vmax=np.max(response_grid), + vmin=-np.max(response_grid), + cmap='bwr', + interpolation='none', + origin='lower', + ) + plt.colorbar() + plt.xlabel('X Pos') + plt.ylabel('Y Pos') + + x_tick_labels = list(range(len(x_pos))) + for i in range(len(x_pos)): + x_tick_labels[i] = str(x_pos[i][0]) + y_tick_labels = list(range(len(y_pos))) + for i in range(len(y_pos)): + y_tick_labels[i] = str(y_pos[i][0]) + plt.xticks(np.arange(len(x_pos)), x_tick_labels) + plt.yticks(np.arange(len(y_pos)), y_tick_labels) + + plt.savefig(exptpath + '/DGgrid_response') + + +def get_mean_sweep_response(fluorescence, stim_table): + + sweeplength = int(stim_table.End[1] - stim_table.Start[1]) + interlength = 28 + extralength = 7 + + num_stim_presentations = len(stim_table['Start']) + mean_sweep_response = np.zeros((num_stim_presentations,)) + sweep_response = np.zeros( + (num_stim_presentations, sweeplength + interlength) + ) + for i in range(num_stim_presentations): + start = stim_table['Start'][i] - interlength + end = stim_table['Start'][i] + sweeplength + sweep_f = fluorescence[int(start) : int(end)] + sweep_dff = 100 * ((sweep_f / np.mean(sweep_f[:interlength])) - 1) + sweep_response[i, :] = sweep_f + mean_sweep_response[i] = np.mean( + sweep_dff[interlength : (interlength + sweeplength)] + ) + + return mean_sweep_response, sweep_response + + +def load_single_tif(file_path): + return tiff.imread(file_path) + + +def get_wholefield_fluorescence( + stim_table, im_filetype, im_directory, exp_date, mouse_ID, savepath +): + + if os.path.isfile(savepath + exp_date + '_' + mouse_ID + '_wholefield.npy'): + avg_fluorescence = np.load( + savepath + exp_date + '_' + mouse_ID + '_wholefield.npy' + ) + else: + + im_path = None + if im_filetype == 'nd2': + for f in os.listdir(im_directory): + if f.endswith(im_filetype) and f.lower().find('local') == -1: + im_path = im_directory + f + print(im_path) + elif im_filetype == 'h5': + # find experiment directory: + for f in os.listdir(im_directory): + if f.lower().find('ophys_experiment_') != -1: + exp_path = im_directory + f + '\\' + session_ID = f[17:] + print(session_ID) + else: + print('im_filetype not recognized!') + sys.exit(1) + + if im_filetype == 'nd2': + print('Reading nd2...') + read_obj = nd2reader.Nd2(im_path) + num_frames = len(read_obj.frames) + avg_fluorescence = np.zeros((num_frames,)) + + sweep_starts = stim_table['Start'].values + block_bounds = [] + block_bounds.append( + ( + np.min(sweep_starts) - 30, + np.max(sweep_starts[sweep_starts < 50000]) + 100, + ) + ) + block_bounds.append( + ( + np.min(sweep_starts[sweep_starts > 50000]) - 30, + np.max(sweep_starts) + 100, + ) + ) + + for block in block_bounds: + frame_start = int(block[0]) + frame_end = int(block[1]) + for f in np.arange(frame_start, frame_end): + this_frame = read_obj.get_image( + f, 0, read_obj.channels[0], 0 + ) + print('Loaded frame ' + str(f) + ' of ' + str(num_frames)) + avg_fluorescence[f] = np.mean(this_frame) + elif im_filetype == 'h5': + f = h5py.File(exp_path + session_ID + '.h5') + data = np.array(f['data']) + avg_fluorescence = np.mean(data, axis=(1, 2)) + f.close() + np.save( + savepath + exp_date + '_' + mouse_ID + '_wholefield.npy', + avg_fluorescence, + ) + + return avg_fluorescence + + +def create_stim_table(exptpath): + + # load stimulus and sync data + data = load_pkl(exptpath) + twop_frames, twop_vsync_fall, stim_vsync_fall, photodiode_rise = load_sync( + exptpath + ) + + display_sequence = data['stimuli'][0]['display_sequence'] + display_sequence += data['pre_blank_sec'] + display_sequence *= int(data['fps']) # in stimulus frames + + sweep_frames = data['stimuli'][0]['sweep_frames'] + stimulus_table = pd.DataFrame(sweep_frames, columns=('start', 'end')) + stimulus_table['dif'] = stimulus_table['end'] - stimulus_table['start'] + stimulus_table.start += display_sequence[0, 0] + for seg in range(len(display_sequence) - 1): + for index, row in stimulus_table.iterrows(): + if row.start >= display_sequence[seg, 1]: + stimulus_table.start[index] = ( + stimulus_table.start[index] + - display_sequence[seg, 1] + + display_sequence[seg + 1, 0] + ) + stimulus_table.end = stimulus_table.start + stimulus_table.dif + print(len(stimulus_table)) + stimulus_table = stimulus_table[ + stimulus_table.end <= display_sequence[-1, 1] + ] + stimulus_table = stimulus_table[ + stimulus_table.start <= display_sequence[-1, 1] + ] + print(len(stimulus_table)) + sync_table = pd.DataFrame( + np.column_stack( + ( + twop_frames[stimulus_table['start']], + twop_frames[stimulus_table['end']], + ) + ), + columns=('Start', 'End'), + ) + + # populate stimulus parameters + print(data['stimuli'][0]['stim_path']) + + # get center parameters + sweep_order = data['stimuli'][0]['sweep_order'] + sweep_order = sweep_order[: len(stimulus_table)] + sweep_table = data['stimuli'][0]['sweep_table'] + dimnames = data['stimuli'][0]['dimnames'] + sweep_table = pd.DataFrame(sweep_table, columns=dimnames) + + # populate sync_table + sync_table['SF'] = np.NaN + sync_table['TF'] = np.NaN + sync_table['Contrast'] = np.NaN + sync_table['Ori'] = np.NaN + sync_table['PosX'] = np.NaN + sync_table['PosY'] = np.NaN + for index in np.arange(len(stimulus_table)): + if (not np.isnan(stimulus_table['end'][index])) & ( + sweep_order[index] >= 0 + ): + sync_table['SF'][index] = sweep_table['SF'][int(sweep_order[index])] + sync_table['TF'][index] = sweep_table['TF'][int(sweep_order[index])] + sync_table['Contrast'][index] = sweep_table['Contrast'][ + int(sweep_order[index]) + ] + sync_table['Ori'][index] = sweep_table['Ori'][ + int(sweep_order[index]) + ] + sync_table['PosX'][index] = sweep_table['PosX'][ + int(sweep_order[index]) + ] + sync_table['PosY'][index] = sweep_table['PosY'][ + int(sweep_order[index]) + ] + + return sync_table + + +def load_sync(exptpath): + + # verify that sync file exists in exptpath + syncMissing = True + for f in os.listdir(exptpath): + if f.endswith('_sync.h5'): + syncpath = os.path.join(exptpath, f) + syncMissing = False + print("Sync file:", f) + if syncMissing: + print("No sync file") + sys.exit() + + # load the sync data from .h5 and .pkl files + d = Dataset(syncpath) + print(d.line_labels) + # set the appropriate sample frequency + sample_freq = d.meta_data['ni_daq']['counter_output_freq'] + + # get sync timing for each channel + twop_vsync_fall = d.get_falling_edges('2p_vsync') / sample_freq + # stim_vsync_fall = d.get_falling_edges('vsync_stim')[1:]/sample_freq #eliminating the DAQ pulse + stim_vsync_fall = ( + d.get_falling_edges('stim_vsync')[1:] / sample_freq + ) # eliminating the DAQ pulse + photodiode_rise = d.get_rising_edges('stim_photodiode') / sample_freq + + print('num stim vsyncs: ' + str(len(stim_vsync_fall))) + print('num 2p frames: ' + str(len(twop_vsync_fall))) + print('num photodiode flashes: ' + str(len(photodiode_rise))) + + # make sure all of the sync data are available + channels = { + 'twop_vsync_fall': twop_vsync_fall, + 'stim_vsync_fall': stim_vsync_fall, + 'photodiode_rise': photodiode_rise, + } + channel_test = [] + for i in channels: + channel_test.append(any(channels[i])) + if all(channel_test): + print("All channels present.") + else: + print("Not all channels present. Sync test failed.") + sys.exit() + + # test and correct for photodiode transition errors + ptd_rise_diff = np.ediff1d(photodiode_rise) + short = np.where(np.logical_and(ptd_rise_diff > 0.1, ptd_rise_diff < 0.3))[ + 0 + ] + medium = np.where(np.logical_and(ptd_rise_diff > 0.5, ptd_rise_diff < 1.5))[ + 0 + ] + + # find three consecutive pulses at the start of session: + two_back_lag = photodiode_rise[2:20] - photodiode_rise[:18] + ptd_start = np.argmin(two_back_lag) + 3 + print('ptd_start: ' + str(ptd_start)) + + # ptd_start = 3 + # for i in medium: + # if set(range(i-2,i)) <= set(short): + # ptd_start = i+1 + ptd_end = np.where(photodiode_rise > stim_vsync_fall.max())[0][0] - 1 + + # plt.figure() + # plt.hist(ptd_rise_diff) + # plt.show() + + # plt.figure() + # plt.plot(stim_vsync_fall[:300]) + # plt.title('stim vsync start') + # plt.show() + + # plt.figure() + # plt.plot(photodiode_rise[:10]) + # plt.title('photodiode start') + # plt.show() + + # plt.figure() + # plt.plot(stim_vsync_fall[-300:]) + # plt.title('stim vsync end') + # plt.show() + + # plt.figure() + # plt.plot(photodiode_rise[-10:]) + # plt.title('photodiode end') + # plt.show() + + print('ptd_start: ' + str(ptd_start)) + if ptd_start > 3: + print("Photodiode events before stimulus start. Deleted.") + + # ptd_errors = [] + # while any(ptd_rise_diff[ptd_start:ptd_end] < 1.8): + # error_frames = np.where(ptd_rise_diff[ptd_start:ptd_end]<1.8)[0] + ptd_start + # #print "Photodiode error detected. Number of frames:", len(error_frames) + # photodiode_rise = np.delete(photodiode_rise, error_frames[-1]) + # ptd_errors.append(photodiode_rise[error_frames[-1]]) + # ptd_end-=1 + # ptd_rise_diff = np.ediff1d(photodiode_rise) + + first_pulse = ptd_start + stim_on_photodiode_idx = 60 + 120 * np.arange( + 0, ptd_end + 1 - ptd_start - 1, 1 + ) + + # stim_vsync_fall = stim_vsync_fall[0] + np.arange(stim_on_photodiode_idx.max()+481) * 0.0166666 + + # stim_on_photodiode = stim_vsync_fall[stim_on_photodiode_idx] + # photodiode_on = photodiode_rise[first_pulse + np.arange(0,ptd_end+1-ptd_start-1,1)] + # + # plt.figure() + # plt.plot(stim_on_photodiode[:4]) + # plt.title('stim start') + # plt.show() + # + # plt.figure() + # plt.plot(photodiode_on[:4]) + # plt.title('photodiode start') + # plt.show() + # + # delay_rise = photodiode_on - stim_on_photodiode + # init_delay_period = delay_rise < 0.025 + # init_delay = np.mean(delay_rise[init_delay_period]) + # + # plt.figure() + # plt.plot(delay_rise[:10]) + # plt.title('delay rise') + # plt.show() + + delay = 0.0 # init_delay + print("monitor delay: ", delay) + + # adjust stimulus time with monitor delay + stim_time = stim_vsync_fall + delay + + # convert stimulus frames into twop frames + twop_frames = np.empty((len(stim_time), 1)) + acquisition_ends_early = 0 + for i in range(len(stim_time)): + # crossings = np.nonzero(np.ediff1d(np.sign(twop_vsync_fall - stim_time[i]))>0) + crossings = ( + np.searchsorted(twop_vsync_fall, stim_time[i], side='left') - 1 + ) + if crossings < (len(twop_vsync_fall) - 1): + twop_frames[i] = crossings + else: + twop_frames[i : len(stim_time)] = np.NaN + acquisition_ends_early = 1 + break + + if acquisition_ends_early > 0: + print("Acquisition ends before stimulus") + + return twop_frames, twop_vsync_fall, stim_vsync_fall, photodiode_rise + + +def load_pkl(exptpath): + + # verify that pkl file exists in exptpath + logMissing = True + for f in os.listdir(exptpath): + if f.endswith('.pkl'): + logpath = os.path.join(exptpath, f) + logMissing = False + print("Stimulus log:", f) + if logMissing: + print("No pkl file") + sys.exit() + + # load data from pkl file + f = open(logpath, 'rb') + data = pickle.load(f) + f.close() + + return data + + +if __name__ == '__main__': + run_analysis() diff --git a/analysis/RunningData.py b/analysis/RunningData.py deleted file mode 100644 index 70e8040..0000000 --- a/analysis/RunningData.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Sat Jun 6 20:29:20 2020 - -@author: saskiad -""" - -from stim_table import load_stim, load_alignment -import numpy as np - - -def get_running_data(expt_path): - '''gets running data from stimulus log and downsamples to match imaging''' - print("Getting running speed") - data = load_stim(expt_path) - dx = data['items']['foraging']['encoders'][0]['dx'] - vsync_intervals = data['intervalsms'] - while len(vsync_intervals) < len(dx): - vsync_intervals = np.insert(vsync_intervals, 0, vsync_intervals[0]) - vsync_intervals /= 1000 - if len(dx) == 0: - print("No running data") - dxcm = ( - (dx / 360) * 5.5036 * np.pi * 2 - ) / vsync_intervals # 6.5" wheel which mouse at 2/3 r - twop_frames = load_alignment(expt_path) - start = np.nanmin(twop_frames) - endframe = int(np.nanmax(twop_frames) + 1) - dxds = np.empty((endframe, 1)) - for i in range(endframe): - try: - temp = np.where(twop_frames == i)[0] - dxds[i] = np.mean(dxcm[temp[0] : temp[-1] + 1]) - if np.isinf(dxds[i]): - dxds[i] = 0 - except: - if i < start: - dxds[i] = np.NaN - else: - dxds[i] = dxds[i - 1] # corrects for dropped frames - - startdatetime = data['startdatetime'] - return dxds, startdatetime - - -if __name__ == '__main__': - exptpath = r'/Volumes/New Volume/988763069' - dxds, startdate = get_running_data(exptpath) diff --git a/analysis/.ipynb_checkpoints/CS_RF_centershifted-checkpoint.ipynb b/analysis/Untitled.ipynb similarity index 100% rename from analysis/.ipynb_checkpoints/CS_RF_centershifted-checkpoint.ipynb rename to analysis/Untitled.ipynb diff --git a/analysis/behavioral_plots.py b/analysis/behavioral_plots.py new file mode 100644 index 0000000..0c16bcb --- /dev/null +++ b/analysis/behavioral_plots.py @@ -0,0 +1,68 @@ +import os +import argparse + +from tqdm import tqdm +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.gridspec as gs + +from oscopetools import read_data as rd + +parser = argparse.ArgumentParser() +parser.add_argument('DATA_PATH', help='Path to folder with data files.') +parser.add_argument( + '-o', '--output', help='Path to folder in which to place diagnostic plots.' +) + +args = parser.parse_args() + +spec = gs.GridSpec(2, 3, width_ratios=[1, 1, 0.5]) + +# ITERATE OVER FILES +for dfile in tqdm(os.listdir(args.DATA_PATH)): + if not dfile.endswith('.h5'): + continue + + eyetracking = rd.get_eye_tracking(os.path.join(args.DATA_PATH, dfile)) + runningspeed = rd.get_running_speed(os.path.join(args.DATA_PATH, dfile)) + + plt.figure(figsize=(8, 4)) + + plt.subplot(spec[0, 0]) + plt.title('Running speed') + runningspeed.plot() + plt.xlabel('') + plt.xticks([]) + + plt.subplot(spec[1, 0]) + runningspeed.plot(robust_range_=True, lw=0.7) + + plt.subplot(spec[0, 1]) + plt.title('Pupil area') + eyetracking.plot('pupil_area') + plt.xlabel('') + plt.xticks([]) + + plt.subplot(spec[1, 1]) + eyetracking.plot('pupil_area', robust_range_=True, lw=0.7) + + plt.subplot(spec[0, 2]) + plt.title('Position') + eyetracking.plot( + 'position', + marker='o', + ls='none', + markeredgecolor='gray', + markeredgewidth=0.5, + alpha=0.7, + ) + + plt.subplot(spec[1, 2]) + eyetracking.plot('position', style='density', robust_range_=True) + + plt.tight_layout() + plt.savefig( + os.path.join(args.output, dfile.strip('.h5') + '.png'), dpi=600 + ) + + plt.close() diff --git a/analysis/center_surround.py b/analysis/center_surround.py new file mode 100644 index 0000000..8fc4981 --- /dev/null +++ b/analysis/center_surround.py @@ -0,0 +1,496 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Wed Aug 22 10:59:54 2018 + +@author: saskiad +""" + +import numpy as np +import pandas as pd +import os, h5py +import matplotlib.pyplot as plt + + +def do_sweep_mean(x): + return x[30:90].mean() + + +def do_sweep_mean_shifted(x): + return x[30:40].mean() + + +def do_eye(x): + return x[30:35].mean() + + +class CenterSurround: + def __init__(self, expt_path, eye_thresh, cre, area, depth): + + self.expt_path = expt_path + self.session_id = self.expt_path.split('/')[-1].split('_')[-2] + + self.eye_thresh = eye_thresh + self.cre = cre + self.area = area + self.depth = depth + + self.orivals = range(0, 360, 45) + self.tfvals = [1, 2] + self.conditions = ['center', 'iso', 'ortho', 'blank'] + + # load dff traces + f = h5py.File(self.expt_path, 'r') + self.dff = f['dff_traces'][()] + f.close() + + # load raw traces + f = h5py.File(self.expt_path, 'r') + self.traces = f['raw_traces'][()] + f.close() + + self.numbercells = self.dff.shape[0] + + # load roi_table + self.roi = pd.read_hdf(self.expt_path, 'roi_table') + + # get stimulus table for center surround + self.stim_table = pd.read_hdf(self.expt_path, 'center_surround') + # add condition column + self.stim_table['condition'] = 'ortho' + self.stim_table.loc[ + self.stim_table.Center_Ori == self.stim_table.Surround_Ori, + 'condition', + ] = 'iso' + self.stim_table.loc[ + np.isfinite(self.stim_table.Center_Ori) + & np.isnan(self.stim_table.Surround_Ori), + 'condition', + ] = 'center' + self.stim_table.loc[ + np.isnan(self.stim_table.Center_Ori) + & np.isnan(self.stim_table.Surround_Ori), + 'condition', + ] = 'blank' + self.stim_table.loc[ + np.isnan(self.stim_table.Center_Ori) + & np.isfinite(self.stim_table.Surround_Ori), + 'condition', + ] = 'surround' + # get spontaneous window + self.stim_table_spont = self.get_spont_table() + + # load eyetracking + self.pupil_pos = pd.read_hdf(self.expt_path, 'eye_tracking') + + # run analysis + ( + self.sweep_response, + self.mean_sweep_response, + self.sweep_eye, + self.mean_sweep_eye, + self.sweep_p_values, + self.response, + ) = self.get_stimulus_response() + + # self.first, self.second = self.cross_validate_response() + ( + self.metrics, + self.OSI, + self.DSI, + self.ISO, + self.ORTHO, + self.STRENGTH, + self.TUNING, + self.CONTEXT, + ) = self.get_metrics() + + # save outputs + + # self.save_data() + + # plot traces + + def get_spont_table(self): + '''finds the window of spotaneous activity during the session''' + stim_table_lsn = pd.read_hdf(self.expt_path, 'locally_sparse_noise') + stim_all = self.stim_table[['Start', 'End']] + stim_all = stim_all.append(stim_table_lsn[['Start', 'End']]) + stim_all.sort_values(by='Start', inplace=True) + stim_all.reset_index(inplace=True) + spont_start = np.where(np.ediff1d(stim_all.Start) > 8000)[0][0] + stim_table_spont = pd.DataFrame(columns=('Start', 'End'), index=[0]) + stim_table_spont.Start = stim_all.End[spont_start] + 1 + stim_table_spont.End = stim_all.Start[spont_start + 1] - 1 + return stim_table_spont + + def get_stimulus_response(self): + '''calculates the response to each stimulus trial. Calculates the mean response to each stimulus condition. + Only uses trials when the eye position is within eye_thresh degrees of the mean eye position. Default eye_thresh is 10. + +Returns +------- +sweep response: full trial for each trial +mean sweep response: mean response for each trial +sweep_eye: eye position across the full trial +mean_sweep_eye: mean of first three time points of eye position for each trial +response_mean: mean response for each stimulus condition +response_std: std of response to each stimulus condition + + + ''' + sweep_response = pd.DataFrame( + index=self.stim_table.index.values, + columns=np.array(range(self.numbercells)).astype(str), + ) + + sweep_eye = pd.DataFrame( + index=self.stim_table.index.values, + columns=('x_pos_deg', 'y_pos_deg'), + ) + + for index, row in self.stim_table.iterrows(): + for nc in range(self.numbercells): + # uses the global dff trace + sweep_response[str(nc)][index] = self.dff[ + nc, int(row.Start) - 30 : int(row.Start) + 90 + ] + + # computes DF/F using the mean of the inter-sweep gray for the Fo + # temp = self.traces[nc, int(row.Start)-30:int(row.Start)+90] + # sweep_response[str(nc)][index] = ((temp/np.mean(temp[:30]))-1) + sweep_eye.x_pos_deg[index] = self.pupil_pos.x_pos_deg[ + int(row.Start) - 30 : int(row.Start + 90) + ].values + sweep_eye.y_pos_deg[index] = self.pupil_pos.y_pos_deg[ + int(row.Start) - 30 : int(row.Start + 90) + ].values + + mean_sweep_response = sweep_response.applymap(do_sweep_mean) + mean_sweep_eye = sweep_eye.applymap(do_eye) + mean_sweep_eye['total'] = np.sqrt( + ((mean_sweep_eye.x_pos_deg - mean_sweep_eye.x_pos_deg.mean()) ** 2) + + ( + (mean_sweep_eye.y_pos_deg - mean_sweep_eye.y_pos_deg.mean()) + ** 2 + ) + ) + + # make spontaneous p_values + shuffled_responses = np.empty((self.numbercells, 10000, 60)) + # idx = np.random.choice(range(self.stim_table_spont.Start, self.stim_table_spont.End), 10000) + idx = np.random.choice( + range( + int(self.stim_table_spont.Start), int(self.stim_table_spont.End) + ), + 10000, + ) + for i in range(60): + shuffled_responses[:, :, i] = self.dff[:, idx + i] + shuffled_mean = shuffled_responses.mean(axis=2) + sweep_p_values = pd.DataFrame( + index=self.stim_table.index.values, + columns=np.array(range(self.numbercells)).astype(str), + ) + for nc in range(self.numbercells): + subset = mean_sweep_response[str(nc)].values + null_dist_mat = np.tile(shuffled_mean[nc, :], reps=(len(subset), 1)) + actual_is_less = subset.reshape(len(subset), 1) <= null_dist_mat + p_values = np.mean(actual_is_less, axis=1) + sweep_p_values[str(nc)] = p_values + + # compute mean response across trials, only use trials within eye_thresh of mean eye position + response = np.empty( + (8, 4, self.numbercells, 4) + ) # center_ori X center/iso/ortho/blank X cells X mean, std, #trials, % significant trials + + for oi, cori in enumerate(self.orivals): + for ci, cond in enumerate(self.conditions): + if cond == 'blank': + subset = mean_sweep_response[ + (self.stim_table.condition == cond) + & (mean_sweep_eye.total < self.eye_thresh) + ] + subset_p = sweep_p_values[ + (self.stim_table.condition == cond) + & (mean_sweep_eye.total < self.eye_thresh) + ] + else: + subset = mean_sweep_response[ + (self.stim_table.Center_Ori == cori) + & (self.stim_table.condition == cond) + & (mean_sweep_eye.total < self.eye_thresh) + ] + subset_p = sweep_p_values[ + (self.stim_table.Center_Ori == cori) + & (self.stim_table.condition == cond) + & (mean_sweep_eye.total < self.eye_thresh) + ] + + response[oi, ci, :, 0] = subset.mean(axis=0) + response[oi, ci, :, 1] = subset.std(axis=0) + response[oi, ci, :, 2] = len(subset) + response[oi, ci, :, 3] = subset_p[ + subset_p < 0.05 + ].count().values / float(len(subset)) + + return ( + sweep_response, + mean_sweep_response, + sweep_eye, + mean_sweep_eye, + sweep_p_values, + response, + ) + + def cross_validate_response(self, n_iter=50, n_trials=12): + '''Splits the responses into two arrays to enable cross-validation of metrics across multiple iterations + + Parameters + ---------- + n_iter: number of iterations. Default is 50 + n_trials: total number of trials being used + + Returns + ------ + response_first: one half of the response array. Shape is 8 X 4 X number cells X number iterations + response_second: second half of the response array - same shape. + ''' + cell_trials = np.empty((8, 4, n_trials, self.numbercells)) + cell_trials[:] = np.NaN + + response_first = np.empty((8, 4, self.numbercells, n_iter)) + response_second = np.empty((8, 4, self.numbercells, n_iter)) + response_first[:] = np.nan + response_second[:] = np.NaN + + for ci, cond in enumerate(self.conditions): + if cond == 'blank': + cell_trials[:, ci, :] = self.mean_sweep_response[ + (self.stim_table.condition == cond) + & (self.mean_sweep_eye.total < self.eye_thresh) + ].values[:n_trials] + else: + for oi, cori in enumerate(self.orivals): + cell_trials[oi, ci, :] = self.mean_sweep_response[ + (self.stim_table.Center_Ori == cori) + & (self.stim_table.condition == cond) + & (self.mean_sweep_eye.total < self.eye_thresh) + ].values[:n_trials] + + for i in range(n_iter): + for oi in range(len(self.orivals)): + for si in range(len(self.conditions)): + idx_1 = np.random.choice( + n_trials, int(n_trials / 2), replace=False + ) + idx_2 = np.random.choice( + np.setdiff1d(range(n_trials), idx_1), + int(n_trials / 2), + replace=False, + ) + response_first[oi, si, :, i] = np.mean( + cell_trials[oi, si, idx_1, :], axis=0 + ) + response_second[oi, si, :, i] = np.mean( + cell_trials[oi, si, idx_2, :], axis=0 + ) + return response_first, response_second + + def get_osi(self, tuning): + orivals_rad = np.deg2rad(self.orivals) + tuning = np.where(tuning > 0, tuning, 0) + CV_top_os = np.empty((8, tuning.shape[1]), dtype=np.complex128) + for i in range(8): + CV_top_os[i] = tuning[i] * np.exp(1j * 2 * orivals_rad[i]) + return np.abs(CV_top_os.sum(axis=0)) / tuning.sum(axis=0) + + def get_metrics(self): + '''creates a table of metrics for each cell. We can make this more useful in the future + +Returns +------- +metrics dataframe + ''' + + n_iter = 50 + n_trials = int(self.response[:, :, :, 2].min()) + print("Number of trials for cross-validation: " + str(n_trials)) + # cell_index = np.where(np.isfinite(self.dff[:,0]))[0] + cell_index = np.array(range(self.numbercells)) + response_first, response_second = self.cross_validate_response( + n_iter, n_trials + ) + + metrics = pd.DataFrame( + columns=( + 'center_dir', + 'center_osi', + 'center_dsi', + 'iso', + 'ortho', + 'suppression_strength', + 'suppression_tuning', + 'cmi', + ), + index=cell_index, + ) + + # cross-validated metrics + DSI = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) + OSI = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) + ISO = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) + ORTHO = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) + STRENGTH = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) + TUNING = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) + CONTEXT = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) + + for ni in range(n_iter): + # find pref direction for each cell for center only condition + response_first = response_first[:, :, cell_index, :] + response_second = response_second[:, :, cell_index, :] + sort = np.where( + response_first[:, 0, :, ni] + == np.nanmax(response_first[:, 0, :, ni], axis=(0)) + ) + sortind = np.argsort(sort[1]) + pref_ori = sort[0][sortind] + cell_index = sort[1][sortind] + inds = np.vstack((pref_ori, cell_index)) + + # osi + OSI.loc[ni] = self.get_osi(response_second[:, 0, inds[1], ni]) + + # dsi + null_ori = np.mod(pref_ori + 4, 8) + pref = response_second[inds[0], 0, inds[1], ni] + null = response_second[null_ori, 0, inds[1], ni] + null = np.where(null > 0, null, 0) + DSI.loc[ni] = (pref - null) / (pref + null) + + center = response_second[inds[0], 0, inds[1], ni] + iso = response_second[inds[0], 1, inds[1], ni] + ortho = response_second[inds[0], 2, inds[1], ni] + # suppression strength + STRENGTH.loc[ni] = (center - ((iso + ortho) / 2)) / center + + # suppression tuning + TUNING.loc[ni] = (ortho - iso) / (center - ((iso + ortho) / 2)) + + # iso + ISO.loc[ni] = (center - iso) / (center + iso) + + # ortho + ORTHO.loc[ni] = (center - ortho) / (center + ortho) + + # context modulation index (Keller et al) + # TODO: right now we're using the center to identify the preferred direction. Might not be ideal + CONTEXT.loc[ni] = (ortho - iso) / (ortho + iso) + + metrics['center_osi'] = OSI.mean().values + metrics['center_dsi'] = DSI.mean().values + metrics['iso'] = ISO.mean().values + metrics['ortho'] = ORTHO.mean().values + metrics['suppression_strength'] = STRENGTH.mean().values + metrics['suppression_tuning'] = TUNING.mean().values + metrics['cmi'] = CONTEXT.mean().values + + # non cross-validated metrics + # cell_index = np.where(np.isfinite(self.dff[:,0]))[0] + cell_index = np.array(range(self.numbercells)) + sort = np.where( + self.response[:, 0, cell_index, 0] + == np.nanmax(self.response[:, 0, cell_index, 0], axis=0) + ) + sortind = np.argsort(sort[1]) + metrics['center_dir'] = sort[0][sortind] + metrics['center_mean'] = self.response[ + sort[0][sortind], 0, cell_index, 0 + ] + metrics['center_std'] = self.response[ + sort[0][sortind], 0, cell_index, 1 + ] + metrics['center_percent_trials'] = self.response[ + sort[0][sortind], 0, cell_index, 3 + ] + metrics['blank_mean'] = self.response[0, 3, cell_index, 0] + metrics['blank_std'] = self.response[0, 3, cell_index, 1] + metrics['iso_mean'] = self.response[sort[0][sortind], 1, cell_index, 0] + metrics['iso_std'] = self.response[sort[0][sortind], 1, cell_index, 1] + metrics['ortho_mean'] = self.response[ + sort[0][sortind], 2, cell_index, 0 + ] + metrics['ortho_std'] = self.response[sort[0][sortind], 2, cell_index, 1] + + metrics = metrics.join(self.roi[['cell_id', 'session_id', 'valid']]) + metrics['cre'] = self.cre + metrics['area'] = self.area + metrics['depth'] = self.depth + + return metrics, OSI, DSI, ISO, ORTHO, STRENGTH, TUNING, CONTEXT + + def save_data(self): + '''saves intermediate analysis files in an h5 file''' + save_file = os.path.join( + r'/Users/saskiad/Documents/Data/Openscope_Multiplex/analysis_py3', + str(self.session_id) + "_cs_analysis.h5", + ) + print("Saving data to: ", save_file) + store = pd.HDFStore(save_file) + store['sweep_response'] = self.sweep_response + store['mean_sweep_response'] = self.mean_sweep_response + store['sweep_p_values'] = self.sweep_p_values + store['sweep_eye'] = self.sweep_eye + store['mean_sweep_eye'] = self.mean_sweep_eye + store['metrics'] = self.metrics + store.close() + f = h5py.File(save_file, 'r+') + dset = f.create_dataset('response', data=self.response) + f.close() + + +if __name__ == '__main__': + expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex/Center Surround/Center_Surround_989418742_data.h5' + eye_thresh = 10 + cre = 'test' + area = 'area test' + depth = '33' + cs = CenterSurround( + expt_path=expt_path, + eye_thresh=eye_thresh, + cre=cre, + area=area, + depth=depth, + ) + +# manifest = pd.read_csv(r'/Users/saskiad/Dropbox/Openscope Multiplex/data manifest.csv') +# subset = manifest[manifest.Target=='soma'] +# print(len(subset)) +# count = 0 +# failed = [] +# for index, row in subset.iterrows(): +# if np.isfinite(row.Center_Surround_Expt_ID): +# count+=1 +# cre = row.Cre +# area = row.Area +# depth = row.Depth +# expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex/Center Surround/Center_Surround_'+str(int(row.Center_Surround_Expt_ID))+'_data.h5' +# eye_thresh = 10 +# try: +# cs = CenterSurround(expt_path=expt_path, eye_thresh=eye_thresh, cre=cre, area=area, depth=depth) +# if count==1: +# metrics_all = cs.metrics.copy() +# print("reached here") +# else: +# metrics_all = metrics_all.append(cs.metrics) +# except: +# print(expt_path + " FAILED") +# failed.append(int(row.Center_Surround_Expt_ID)) diff --git a/analysis/center_surround_previous.py b/analysis/center_surround_previous.py index 3d3c4d3..9974b71 100644 --- a/analysis/center_surround_previous.py +++ b/analysis/center_surround_previous.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed Aug 22 10:59:54 2018 @@ -11,82 +11,117 @@ import os, h5py import matplotlib.pyplot as plt + def do_sweep_mean(x): return x[30:90].mean() + def do_sweep_mean_shifted(x): return x[30:40].mean() + def do_eye(x): return x[30:35].mean() + class CenterSurround: def __init__(self, expt_path, eye_thresh, cre, area, depth): self.expt_path = expt_path self.session_id = self.expt_path.split('/')[-1].split('_')[-2] - + self.eye_thresh = eye_thresh self.cre = cre self.area = area self.depth = depth - - self.orivals = range(0,360,45) - self.tfvals = [1,2] - self.conditions = ['center','iso','ortho','blank'] - - #load dff traces + + self.orivals = range(0, 360, 45) + self.tfvals = [1, 2] + self.conditions = ['center', 'iso', 'ortho', 'blank'] + + # load dff traces f = h5py.File(self.expt_path, 'r') self.dff = f['dff_traces'][()] f.close() - - #load raw traces + + # load raw traces f = h5py.File(self.expt_path, 'r') self.traces = f['raw_traces'][()] f.close() self.numbercells = self.dff.shape[0] - - #load roi_table + + # load roi_table self.roi = pd.read_hdf(self.expt_path, 'roi_table') - - - #get stimulus table for center surround + + # get stimulus table for center surround self.stim_table = pd.read_hdf(self.expt_path, 'center_surround') - #add condition column + # add condition column self.stim_table['condition'] = 'ortho' - self.stim_table.loc[self.stim_table.Center_Ori==self.stim_table.Surround_Ori, 'condition'] = 'iso' - self.stim_table.loc[np.isfinite(self.stim_table.Center_Ori)&np.isnan(self.stim_table.Surround_Ori), 'condition'] = 'center' - self.stim_table.loc[np.isnan(self.stim_table.Center_Ori)&np.isnan(self.stim_table.Surround_Ori), 'condition'] = 'blank' - self.stim_table.loc[np.isnan(self.stim_table.Center_Ori)&np.isfinite(self.stim_table.Surround_Ori), 'condition'] = 'surround' - #get spontaneous window + self.stim_table.loc[ + self.stim_table.Center_Ori == self.stim_table.Surround_Ori, + 'condition', + ] = 'iso' + self.stim_table.loc[ + np.isfinite(self.stim_table.Center_Ori) + & np.isnan(self.stim_table.Surround_Ori), + 'condition', + ] = 'center' + self.stim_table.loc[ + np.isnan(self.stim_table.Center_Ori) + & np.isnan(self.stim_table.Surround_Ori), + 'condition', + ] = 'blank' + self.stim_table.loc[ + np.isnan(self.stim_table.Center_Ori) + & np.isfinite(self.stim_table.Surround_Ori), + 'condition', + ] = 'surround' + # get spontaneous window self.stim_table_spont = self.get_spont_table() - - #load eyetracking + + # load eyetracking self.pupil_pos = pd.read_hdf(self.expt_path, 'eye_tracking') - - #run analysis - self.sweep_response, self.mean_sweep_response, self.sweep_eye, self.mean_sweep_eye, self.sweep_p_values, self.response = self.get_stimulus_response() - -# self.first, self.second = self.cross_validate_response() - self.metrics, self.OSI, self.DSI, self.ISO, self.ORTHO, self.STRENGTH, self.TUNING, self.CONTEXT, self.DIR = self.get_metrics() - - #save outputs + + # run analysis + ( + self.sweep_response, + self.mean_sweep_response, + self.sweep_eye, + self.mean_sweep_eye, + self.sweep_p_values, + self.response, + ) = self.get_stimulus_response() + + # self.first, self.second = self.cross_validate_response() + ( + self.metrics, + self.OSI, + self.DSI, + self.ISO, + self.ORTHO, + self.STRENGTH, + self.TUNING, + self.CONTEXT, + self.DIR, + ) = self.get_metrics() + + # save outputs self.save_data() - - #plot traces + + # plot traces def get_spont_table(self): '''finds the window of spotaneous activity during the session''' stim_table_lsn = pd.read_hdf(self.expt_path, 'locally_sparse_noise') - stim_all = self.stim_table[['Start','End']] - stim_all = stim_all.append(stim_table_lsn[['Start','End']]) + stim_all = self.stim_table[['Start', 'End']] + stim_all = stim_all.append(stim_table_lsn[['Start', 'End']]) stim_all.sort_values(by='Start', inplace=True) stim_all.reset_index(inplace=True) - spont_start = np.where(np.ediff1d(stim_all.Start)>8000)[0][0] - stim_table_spont = pd.DataFrame(columns=('Start','End'), index=[0]) - stim_table_spont.Start = stim_all.End[spont_start]+1 - stim_table_spont.End = stim_all.Start[spont_start+1]-1 + spont_start = np.where(np.ediff1d(stim_all.Start) > 8000)[0][0] + stim_table_spont = pd.DataFrame(columns=('Start', 'End'), index=[0]) + stim_table_spont.Start = stim_all.End[spont_start] + 1 + stim_table_spont.End = stim_all.Start[spont_start + 1] - 1 return stim_table_spont def get_stimulus_response(self): @@ -97,77 +132,125 @@ def get_stimulus_response(self): ------- sweep response: full trial for each trial mean sweep response: mean response for each trial -sweep_eye: eye position across the full trial +sweep_eye: eye position across the full trial mean_sweep_eye: mean of first three time points of eye position for each trial response_mean: mean response for each stimulus condition response_std: std of response to each stimulus condition ''' - sweep_response = pd.DataFrame(index=self.stim_table.index.values, columns=np.array(range(self.numbercells)).astype(str)) - - sweep_eye = pd.DataFrame(index=self.stim_table.index.values, columns=('x_pos_deg','y_pos_deg')) - - for index,row in self.stim_table.iterrows(): + sweep_response = pd.DataFrame( + index=self.stim_table.index.values, + columns=np.array(range(self.numbercells)).astype(str), + ) + + sweep_eye = pd.DataFrame( + index=self.stim_table.index.values, + columns=('x_pos_deg', 'y_pos_deg'), + ) + + for index, row in self.stim_table.iterrows(): for nc in range(self.numbercells): - #uses the global dff trace - sweep_response[str(nc)][index] = self.dff[nc, int(row.Start)-30:int(row.Start)+90] - - #computes DF/F using the mean of the inter-sweep gray for the Fo -# temp = self.traces[nc, int(row.Start)-30:int(row.Start)+90] -# sweep_response[str(nc)][index] = ((temp/np.mean(temp[:30]))-1) - sweep_eye.x_pos_deg[index] = self.pupil_pos.x_pos_deg[int(row.Start)-30:int(row.Start+90)].values - sweep_eye.y_pos_deg[index] = self.pupil_pos.y_pos_deg[int(row.Start)-30:int(row.Start+90)].values + # uses the global dff trace + sweep_response[str(nc)][index] = self.dff[ + nc, int(row.Start) - 30 : int(row.Start) + 90 + ] + + # computes DF/F using the mean of the inter-sweep gray for the Fo + # temp = self.traces[nc, int(row.Start)-30:int(row.Start)+90] + # sweep_response[str(nc)][index] = ((temp/np.mean(temp[:30]))-1) + sweep_eye.x_pos_deg[index] = self.pupil_pos.x_pos_deg[ + int(row.Start) - 30 : int(row.Start + 90) + ].values + sweep_eye.y_pos_deg[index] = self.pupil_pos.y_pos_deg[ + int(row.Start) - 30 : int(row.Start + 90) + ].values mean_sweep_response = sweep_response.applymap(do_sweep_mean) mean_sweep_eye = sweep_eye.applymap(do_eye) - mean_sweep_eye['total'] = np.sqrt(((mean_sweep_eye.x_pos_deg-mean_sweep_eye.x_pos_deg.mean())**2) + ((mean_sweep_eye.y_pos_deg-mean_sweep_eye.y_pos_deg.mean())**2)) - - #make spontaneous p_values + mean_sweep_eye['total'] = np.sqrt( + ((mean_sweep_eye.x_pos_deg - mean_sweep_eye.x_pos_deg.mean()) ** 2) + + ( + (mean_sweep_eye.y_pos_deg - mean_sweep_eye.y_pos_deg.mean()) + ** 2 + ) + ) + + # make spontaneous p_values shuffled_responses = np.empty((self.numbercells, 10000, 60)) -# idx = np.random.choice(range(self.stim_table_spont.Start, self.stim_table_spont.End), 10000) - idx = np.random.choice(range(int(self.stim_table_spont.Start), int(self.stim_table_spont.End)), 10000) + # idx = np.random.choice(range(self.stim_table_spont.Start, self.stim_table_spont.End), 10000) + idx = np.random.choice( + range( + int(self.stim_table_spont.Start), int(self.stim_table_spont.End) + ), + 10000, + ) for i in range(60): - shuffled_responses[:,:,i] = self.dff[:,idx+i] + shuffled_responses[:, :, i] = self.dff[:, idx + i] shuffled_mean = shuffled_responses.mean(axis=2) - sweep_p_values = pd.DataFrame(index = self.stim_table.index.values, columns=np.array(range(self.numbercells)).astype(str)) + sweep_p_values = pd.DataFrame( + index=self.stim_table.index.values, + columns=np.array(range(self.numbercells)).astype(str), + ) for nc in range(self.numbercells): subset = mean_sweep_response[str(nc)].values - null_dist_mat = np.tile(shuffled_mean[nc,:], reps=(len(subset),1)) - actual_is_less = subset.reshape(len(subset),1) <= null_dist_mat + null_dist_mat = np.tile(shuffled_mean[nc, :], reps=(len(subset), 1)) + actual_is_less = subset.reshape(len(subset), 1) <= null_dist_mat p_values = np.mean(actual_is_less, axis=1) sweep_p_values[str(nc)] = p_values - #compute mean response across trials, only use trials within eye_thresh of mean eye position - response = np.empty((8,4,self.numbercells, 4)) #center_ori X center/iso/ortho/blank X cells X mean, std, #trials, % significant trials - - + # compute mean response across trials, only use trials within eye_thresh of mean eye position + response = np.empty( + (8, 4, self.numbercells, 4) + ) # center_ori X center/iso/ortho/blank X cells X mean, std, #trials, % significant trials + for oi, cori in enumerate(self.orivals): for ci, cond in enumerate(self.conditions): - if cond=='blank': - subset = mean_sweep_response[(self.stim_table.condition==cond)&(mean_sweep_eye.total0, tuning, 0) + tuning = np.where(tuning > 0, tuning, 0) CV_top_os = np.empty((8, tuning.shape[1]), dtype=np.complex128) for i in range(8): - CV_top_os[i] = (tuning[i]*np.exp(1j*2*orivals_rad[i])) - return np.abs(CV_top_os.sum(axis=0))/tuning.sum(axis=0) - - + CV_top_os[i] = tuning[i] * np.exp(1j * 2 * orivals_rad[i]) + return np.abs(CV_top_os.sum(axis=0)) / tuning.sum(axis=0) def get_metrics(self): '''creates a table of metrics for each cell. We can make this more useful in the future @@ -217,71 +312,97 @@ def get_metrics(self): ------- metrics dataframe ''' - + n_iter = 50 - n_trials = int(self.response[:,:,:,2].min()) + n_trials = int(self.response[:, :, :, 2].min()) print("Number of trials for cross-validation: " + str(n_trials)) -# cell_index = np.where(np.isfinite(self.dff[:,0]))[0] + # cell_index = np.where(np.isfinite(self.dff[:,0]))[0] cell_index = np.array(range(self.numbercells)) - response_first, response_second = self.cross_validate_response(n_iter, n_trials) - - metrics = pd.DataFrame(columns=('cell_index','center_dir','center_osi','center_dsi','iso','ortho', - 'suppression_strength','suppression_tuning','cmi','dir_percent'), index=cell_index) + response_first, response_second = self.cross_validate_response( + n_iter, n_trials + ) + + metrics = pd.DataFrame( + columns=( + 'cell_index', + 'center_dir', + 'center_osi', + 'center_dsi', + 'iso', + 'ortho', + 'suppression_strength', + 'suppression_tuning', + 'cmi', + 'dir_percent', + ), + index=cell_index, + ) metrics.cell_index = cell_index - - #cross-validated metrics + + # cross-validated metrics DSI = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) OSI = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) ISO = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - ORTHO = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - STRENGTH = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - TUNING = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - CONTEXT = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) + ORTHO = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) + STRENGTH = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) + TUNING = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) + CONTEXT = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) DIR = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - + for ni in range(n_iter): - #find pref direction for each cell for center only condition -# response_first = response_first[:,:,cell_index,:] -# response_second = response_second[:,:,cell_index,:] - sort = np.where(response_first[:,0,:,ni]==np.nanmax(response_first[:,0,:,ni], axis=(0))) + # find pref direction for each cell for center only condition + # response_first = response_first[:,:,cell_index,:] + # response_second = response_second[:,:,cell_index,:] + sort = np.where( + response_first[:, 0, :, ni] + == np.nanmax(response_first[:, 0, :, ni], axis=(0)) + ) sortind = np.argsort(sort[1]) pref_ori = sort[0][sortind] cell_index = sort[1][sortind] inds = np.vstack((pref_ori, cell_index)) - + DIR.loc[ni] = pref_ori - - #osi + + # osi OSI.loc[ni] = self.get_osi(response_second[:, 0, inds[1], ni]) - #dsi - null_ori= np.mod(pref_ori+4, 8) + # dsi + null_ori = np.mod(pref_ori + 4, 8) pref = response_second[inds[0], 0, inds[1], ni] - null = response_second[null_ori, 0, inds[1], ni] - null = np.where(null>0, null, 0) - DSI.loc[ni] = (pref-null)/(pref+null) - + null = response_second[null_ori, 0, inds[1], ni] + null = np.where(null > 0, null, 0) + DSI.loc[ni] = (pref - null) / (pref + null) + center = response_second[inds[0], 0, inds[1], ni] iso = response_second[inds[0], 1, inds[1], ni] - ortho = response_second[inds[0], 2, inds[1], ni] - center = np.where(center>0, center, 0) - iso = np.where(iso>0, iso, 0) - ortho = np.where(ortho>0, ortho, 0) - - #suppression strength - STRENGTH.loc[ni] = (center - ((iso+ortho)/2)) / center - - #suppression tuning - TUNING.loc[ni] = (ortho - iso) / (center - ((iso+ortho)/2)) - - #iso + ortho = response_second[inds[0], 2, inds[1], ni] + center = np.where(center > 0, center, 0) + iso = np.where(iso > 0, iso, 0) + ortho = np.where(ortho > 0, ortho, 0) + + # suppression strength + STRENGTH.loc[ni] = (center - ((iso + ortho) / 2)) / center + + # suppression tuning + TUNING.loc[ni] = (ortho - iso) / (center - ((iso + ortho) / 2)) + + # iso ISO.loc[ni] = (center - iso) / (center + iso) - - #ortho + + # ortho ORTHO.loc[ni] = (center - ortho) / (center + ortho) - - #context modulation index (Keller et al) - #TODO: right now we're using the center to identify the preferred direction. Might not be ideal + + # context modulation index (Keller et al) + # TODO: right now we're using the center to identify the preferred direction. Might not be ideal CONTEXT.loc[ni] = (ortho - iso) / (ortho + iso) metrics['center_osi'] = OSI.mean().values @@ -291,40 +412,51 @@ def get_metrics(self): metrics['suppression_strength'] = STRENGTH.mean().values metrics['suppression_tuning'] = TUNING.mean().values metrics['cmi'] = CONTEXT.mean().values - - #how consistent is the selected preferred direction? + + # how consistent is the selected preferred direction? for nc in range(self.numbercells): metrics['dir_percent'].loc[nc] = DIR[str(nc)].value_counts().max() - #non cross-validated metrics -# cell_index = np.where(np.isfinite(self.dff[:,0]))[0] -# cell_index = np.array(range(self.numbercells)) - sort = np.where(self.response[:,0,:,0] == np.nanmax(self.response[:,0,:,0], axis=0)) -# sort = np.where(self.response[:,0,:,0] == np.nanmax(self.response[:,0,:,0], axis=0)) + # non cross-validated metrics + # cell_index = np.where(np.isfinite(self.dff[:,0]))[0] + # cell_index = np.array(range(self.numbercells)) + sort = np.where( + self.response[:, 0, :, 0] + == np.nanmax(self.response[:, 0, :, 0], axis=0) + ) + # sort = np.where(self.response[:,0,:,0] == np.nanmax(self.response[:,0,:,0], axis=0)) sortind = np.argsort(sort[1]) cell_index = sort[1][sortind] metrics['center_dir'] = sort[0][sortind] - metrics['center_mean'] = self.response[sort[0][sortind],0,cell_index,0] - metrics['center_std'] = self.response[sort[0][sortind],0,cell_index,1] - metrics['center_percent_trials'] = self.response[sort[0][sortind],0,cell_index,3] - metrics['blank_mean'] = self.response[0,3,cell_index,0] - metrics['blank_std'] = self.response[0,3,cell_index,1] - metrics['iso_mean'] = self.response[sort[0][sortind],1,cell_index,0] - metrics['iso_std'] = self.response[sort[0][sortind],1,cell_index,1] - metrics['ortho_mean'] = self.response[sort[0][sortind],2,cell_index,0] - metrics['ortho_std'] = self.response[sort[0][sortind],2,cell_index,1] - + metrics['center_mean'] = self.response[ + sort[0][sortind], 0, cell_index, 0 + ] + metrics['center_std'] = self.response[ + sort[0][sortind], 0, cell_index, 1 + ] + metrics['center_percent_trials'] = self.response[ + sort[0][sortind], 0, cell_index, 3 + ] + metrics['blank_mean'] = self.response[0, 3, cell_index, 0] + metrics['blank_std'] = self.response[0, 3, cell_index, 1] + metrics['iso_mean'] = self.response[sort[0][sortind], 1, cell_index, 0] + metrics['iso_std'] = self.response[sort[0][sortind], 1, cell_index, 1] + metrics['ortho_mean'] = self.response[ + sort[0][sortind], 2, cell_index, 0 + ] + metrics['ortho_std'] = self.response[sort[0][sortind], 2, cell_index, 1] + b = set(metrics.index) a = set(range(self.numbercells)) toadd = a.difference(b) - if len(toadd)>0: + if len(toadd) > 0: newdf = pd.DataFrame(columns=metrics.columns, index=toadd) newdf.cell_index = toadd newdf.valid = False metrics = metrics.append(newdf) metrics.sort_index(inplace=True) - - metrics = metrics.join(self.roi[['cell_id','session_id','valid']]) + + metrics = metrics.join(self.roi[['cell_id', 'session_id', 'valid']]) metrics['cre'] = self.cre metrics['area'] = self.area metrics['depth'] = self.depth @@ -333,7 +465,10 @@ def get_metrics(self): def save_data(self): '''saves intermediate analysis files in an h5 file''' - save_file = os.path.join(r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/analysis', str(self.session_id)+"_cs_analysis.h5") + save_file = os.path.join( + r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/analysis', + str(self.session_id) + "_cs_analysis.h5", + ) print("Saving data to: ", save_file) store = pd.HDFStore(save_file) store['sweep_response'] = self.sweep_response @@ -347,33 +482,45 @@ def save_data(self): dset = f.create_dataset('response', data=self.response) f.close() - -if __name__=='__main__': -# expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Center_Surround_993269234_data.h5' -## expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex New/Center Surround/Center_Surround_993269234_data.h5' -# eye_thresh = 10 -# cre = 'test' -# area = 'area test' -# depth = '33' -# cs = CenterSurround(expt_path=expt_path, eye_thresh=eye_thresh, cre=cre, area=area, depth=depth) - - manifest = pd.read_csv(r'/Users/saskiad/Dropbox/Openscope Multiplex/data manifest.csv') - subset = manifest[manifest.Target=='soma'] + +if __name__ == '__main__': + # expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Center_Surround_993269234_data.h5' + ## expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex New/Center Surround/Center_Surround_993269234_data.h5' + # eye_thresh = 10 + # cre = 'test' + # area = 'area test' + # depth = '33' + # cs = CenterSurround(expt_path=expt_path, eye_thresh=eye_thresh, cre=cre, area=area, depth=depth) + + manifest = pd.read_csv( + r'/Users/saskiad/Dropbox/Openscope Multiplex/data manifest.csv' + ) + subset = manifest[manifest.Target == 'soma'] print(len(subset)) count = 0 failed = [] for index, row in subset.iterrows(): if np.isfinite(row.Center_Surround_Expt_ID): - count+=1 + count += 1 cre = row.Cre area = row.Area depth = row.Depth -# expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex/Center Surround/Center_Surround_'+str(int(row.Center_Surround_Expt_ID))+'_data.h5' - expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Center_Surround_'+str(int(row.Center_Surround_Expt_ID))+'_data.h5' + # expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex/Center Surround/Center_Surround_'+str(int(row.Center_Surround_Expt_ID))+'_data.h5' + expt_path = ( + r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Center_Surround_' + + str(int(row.Center_Surround_Expt_ID)) + + '_data.h5' + ) eye_thresh = 10 try: - cs = CenterSurround(expt_path=expt_path, eye_thresh=eye_thresh, cre=cre, area=area, depth=depth) - if count==1: + cs = CenterSurround( + expt_path=expt_path, + eye_thresh=eye_thresh, + cre=cre, + area=area, + depth=depth, + ) + if count == 1: metrics_all = cs.metrics.copy() print("reached here") else: @@ -381,6 +528,3 @@ def save_data(self): except: print(expt_path + " FAILED") failed.append(int(row.Center_Surround_Expt_ID)) - - - \ No newline at end of file diff --git a/analysis/center_surround_tf.py b/analysis/center_surround_tf.py index 3489918..a257e92 100644 --- a/analysis/center_surround_tf.py +++ b/analysis/center_surround_tf.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed Aug 22 10:59:54 2018 @@ -11,82 +11,116 @@ import os, h5py import matplotlib.pyplot as plt + def do_sweep_mean(x): return x[30:90].mean() + def do_sweep_mean_shifted(x): return x[30:40].mean() + def do_eye(x): return x[30:35].mean() + class CenterSurround: def __init__(self, expt_path, eye_thresh, cre, area, depth): self.expt_path = expt_path self.session_id = self.expt_path.split('/')[-1].split('_')[-2] - + self.eye_thresh = eye_thresh self.cre = cre self.area = area self.depth = depth - - self.orivals = range(0,360,45) - self.tfvals = [1.,2.] - self.conditions = ['center','iso','ortho','blank'] - - #load dff traces + + self.orivals = range(0, 360, 45) + self.tfvals = [1.0, 2.0] + self.conditions = ['center', 'iso', 'ortho', 'blank'] + + # load dff traces f = h5py.File(self.expt_path, 'r') self.dff = f['dff_traces'][()] f.close() - - #load raw traces + + # load raw traces f = h5py.File(self.expt_path, 'r') self.traces = f['raw_traces'][()] f.close() self.numbercells = self.dff.shape[0] - - #load roi_table + + # load roi_table self.roi = pd.read_hdf(self.expt_path, 'roi_table') - - - #get stimulus table for center surround + + # get stimulus table for center surround self.stim_table = pd.read_hdf(self.expt_path, 'center_surround') - #add condition column + # add condition column self.stim_table['condition'] = 'ortho' - self.stim_table.loc[self.stim_table.Center_Ori==self.stim_table.Surround_Ori, 'condition'] = 'iso' - self.stim_table.loc[np.isfinite(self.stim_table.Center_Ori)&np.isnan(self.stim_table.Surround_Ori), 'condition'] = 'center' - self.stim_table.loc[np.isnan(self.stim_table.Center_Ori)&np.isnan(self.stim_table.Surround_Ori), 'condition'] = 'blank' - self.stim_table.loc[np.isnan(self.stim_table.Center_Ori)&np.isfinite(self.stim_table.Surround_Ori), 'condition'] = 'surround' - #get spontaneous window + self.stim_table.loc[ + self.stim_table.Center_Ori == self.stim_table.Surround_Ori, + 'condition', + ] = 'iso' + self.stim_table.loc[ + np.isfinite(self.stim_table.Center_Ori) + & np.isnan(self.stim_table.Surround_Ori), + 'condition', + ] = 'center' + self.stim_table.loc[ + np.isnan(self.stim_table.Center_Ori) + & np.isnan(self.stim_table.Surround_Ori), + 'condition', + ] = 'blank' + self.stim_table.loc[ + np.isnan(self.stim_table.Center_Ori) + & np.isfinite(self.stim_table.Surround_Ori), + 'condition', + ] = 'surround' + # get spontaneous window self.stim_table_spont = self.get_spont_table() - - #load eyetracking + + # load eyetracking self.pupil_pos = pd.read_hdf(self.expt_path, 'eye_tracking') - - #run analysis - self.sweep_response, self.mean_sweep_response, self.sweep_eye, self.mean_sweep_eye, self.sweep_p_values, self.response = self.get_stimulus_response() - -# self.first, self.second = self.cross_validate_response(n_trials=int(self.response[:,:,:,:,2].min())) - self.metrics, self.OSI, self.DSI, self.ISO, self.ORTHO, self.STRENGTH, self.TUNING, self.CONTEXT = self.get_metrics() - - #save outputs + + # run analysis + ( + self.sweep_response, + self.mean_sweep_response, + self.sweep_eye, + self.mean_sweep_eye, + self.sweep_p_values, + self.response, + ) = self.get_stimulus_response() + + # self.first, self.second = self.cross_validate_response(n_trials=int(self.response[:,:,:,:,2].min())) + ( + self.metrics, + self.OSI, + self.DSI, + self.ISO, + self.ORTHO, + self.STRENGTH, + self.TUNING, + self.CONTEXT, + ) = self.get_metrics() + + # save outputs self.save_data() - - #plot traces + + # plot traces def get_spont_table(self): '''finds the window of spotaneous activity during the session''' stim_table_lsn = pd.read_hdf(self.expt_path, 'locally_sparse_noise') - stim_all = self.stim_table[['Start','End']] - stim_all = stim_all.append(stim_table_lsn[['Start','End']]) + stim_all = self.stim_table[['Start', 'End']] + stim_all = stim_all.append(stim_table_lsn[['Start', 'End']]) stim_all.sort_values(by='Start', inplace=True) stim_all.reset_index(inplace=True) - spont_start = np.where(np.ediff1d(stim_all.Start)>8000)[0][0] - stim_table_spont = pd.DataFrame(columns=('Start','End'), index=[0]) - stim_table_spont.Start = stim_all.End[spont_start]+1 - stim_table_spont.End = stim_all.Start[spont_start+1]-1 + spont_start = np.where(np.ediff1d(stim_all.Start) > 8000)[0][0] + stim_table_spont = pd.DataFrame(columns=('Start', 'End'), index=[0]) + stim_table_spont.Start = stim_all.End[spont_start] + 1 + stim_table_spont.End = stim_all.Start[spont_start + 1] - 1 return stim_table_spont def get_stimulus_response(self): @@ -97,77 +131,128 @@ def get_stimulus_response(self): ------- sweep response: full trial for each trial mean sweep response: mean response for each trial -sweep_eye: eye position across the full trial +sweep_eye: eye position across the full trial mean_sweep_eye: mean of first three time points of eye position for each trial response_mean: mean response for each stimulus condition response_std: std of response to each stimulus condition ''' - sweep_response = pd.DataFrame(index=self.stim_table.index.values, columns=np.array(range(self.numbercells)).astype(str)) - - sweep_eye = pd.DataFrame(index=self.stim_table.index.values, columns=('x_pos_deg','y_pos_deg')) - - for index,row in self.stim_table.iterrows(): + sweep_response = pd.DataFrame( + index=self.stim_table.index.values, + columns=np.array(range(self.numbercells)).astype(str), + ) + + sweep_eye = pd.DataFrame( + index=self.stim_table.index.values, + columns=('x_pos_deg', 'y_pos_deg'), + ) + + for index, row in self.stim_table.iterrows(): for nc in range(self.numbercells): - #uses the global dff trace - sweep_response[str(nc)][index] = self.dff[nc, int(row.Start)-30:int(row.Start)+90] - - #computes DF/F using the mean of the inter-sweep gray for the Fo -# temp = self.traces[nc, int(row.Start)-30:int(row.Start)+90] -# sweep_response[str(nc)][index] = ((temp/np.mean(temp[:30]))-1) - sweep_eye.x_pos_deg[index] = self.pupil_pos.x_pos_deg[int(row.Start)-30:int(row.Start+90)].values - sweep_eye.y_pos_deg[index] = self.pupil_pos.y_pos_deg[int(row.Start)-30:int(row.Start+90)].values + # uses the global dff trace + sweep_response[str(nc)][index] = self.dff[ + nc, int(row.Start) - 30 : int(row.Start) + 90 + ] + + # computes DF/F using the mean of the inter-sweep gray for the Fo + # temp = self.traces[nc, int(row.Start)-30:int(row.Start)+90] + # sweep_response[str(nc)][index] = ((temp/np.mean(temp[:30]))-1) + sweep_eye.x_pos_deg[index] = self.pupil_pos.x_pos_deg[ + int(row.Start) - 30 : int(row.Start + 90) + ].values + sweep_eye.y_pos_deg[index] = self.pupil_pos.y_pos_deg[ + int(row.Start) - 30 : int(row.Start + 90) + ].values mean_sweep_response = sweep_response.applymap(do_sweep_mean) mean_sweep_eye = sweep_eye.applymap(do_eye) - mean_sweep_eye['total'] = np.sqrt(((mean_sweep_eye.x_pos_deg-mean_sweep_eye.x_pos_deg.mean())**2) + ((mean_sweep_eye.y_pos_deg-mean_sweep_eye.y_pos_deg.mean())**2)) - - #make spontaneous p_values + mean_sweep_eye['total'] = np.sqrt( + ((mean_sweep_eye.x_pos_deg - mean_sweep_eye.x_pos_deg.mean()) ** 2) + + ( + (mean_sweep_eye.y_pos_deg - mean_sweep_eye.y_pos_deg.mean()) + ** 2 + ) + ) + + # make spontaneous p_values shuffled_responses = np.empty((self.numbercells, 10000, 60)) -# idx = np.random.choice(range(self.stim_table_spont.Start, self.stim_table_spont.End), 10000) - idx = np.random.choice(range(int(self.stim_table_spont.Start), int(self.stim_table_spont.End)), 10000) + # idx = np.random.choice(range(self.stim_table_spont.Start, self.stim_table_spont.End), 10000) + idx = np.random.choice( + range( + int(self.stim_table_spont.Start), int(self.stim_table_spont.End) + ), + 10000, + ) for i in range(60): - shuffled_responses[:,:,i] = self.dff[:,idx+i] + shuffled_responses[:, :, i] = self.dff[:, idx + i] shuffled_mean = shuffled_responses.mean(axis=2) - sweep_p_values = pd.DataFrame(index = self.stim_table.index.values, columns=np.array(range(self.numbercells)).astype(str)) + sweep_p_values = pd.DataFrame( + index=self.stim_table.index.values, + columns=np.array(range(self.numbercells)).astype(str), + ) for nc in range(self.numbercells): subset = mean_sweep_response[str(nc)].values - null_dist_mat = np.tile(shuffled_mean[nc,:], reps=(len(subset),1)) - actual_is_less = subset.reshape(len(subset),1) <= null_dist_mat + null_dist_mat = np.tile(shuffled_mean[nc, :], reps=(len(subset), 1)) + actual_is_less = subset.reshape(len(subset), 1) <= null_dist_mat p_values = np.mean(actual_is_less, axis=1) sweep_p_values[str(nc)] = p_values - #compute mean response across trials, only use trials within eye_thresh of mean eye position - response = np.empty((8, 2, 4, self.numbercells, 4)) #center_ori X TF x center/iso/ortho/blank X cells X mean, std, #trials, % significant trials - + # compute mean response across trials, only use trials within eye_thresh of mean eye position + response = np.empty( + (8, 2, 4, self.numbercells, 4) + ) # center_ori X TF x center/iso/ortho/blank X cells X mean, std, #trials, % significant trials + for oi, cori in enumerate(self.orivals): for ti, tf in enumerate(self.tfvals): for ci, cond in enumerate(self.conditions): - if cond=='blank': - subset = mean_sweep_response[(self.stim_table.condition==cond)&(mean_sweep_eye.total0, tuning, 0) + tuning = np.where(tuning > 0, tuning, 0) CV_top_os = np.empty((8, tuning.shape[1]), dtype=np.complex128) for i in range(8): - CV_top_os[i] = (tuning[i]*np.exp(1j*2*orivals_rad[i])) - return np.abs(CV_top_os.sum(axis=0))/tuning.sum(axis=0) - + CV_top_os[i] = tuning[i] * np.exp(1j * 2 * orivals_rad[i]) + return np.abs(CV_top_os.sum(axis=0)) / tuning.sum(axis=0) def get_metrics(self): '''creates a table of metrics for each cell. We can make this more useful in the future @@ -218,68 +321,97 @@ def get_metrics(self): ------- metrics dataframe ''' - + n_iter = 50 - n_trials = int(self.response[:,:,:,:,2].min()) + n_trials = int(self.response[:, :, :, :, 2].min()) print("Number of trials for cross-validation: " + str(n_trials)) cell_index = np.array(range(self.numbercells)) - response_first, response_second = self.cross_validate_response(n_iter, n_trials) - - metrics = pd.DataFrame(columns=('cell_index','center_dir','center_tf','center_osi','center_dsi','iso','ortho', - 'suppression_strength','suppression_tuning','cmi','dir_percent'), index=cell_index) + response_first, response_second = self.cross_validate_response( + n_iter, n_trials + ) + + metrics = pd.DataFrame( + columns=( + 'cell_index', + 'center_dir', + 'center_tf', + 'center_osi', + 'center_dsi', + 'iso', + 'ortho', + 'suppression_strength', + 'suppression_tuning', + 'cmi', + 'dir_percent', + ), + index=cell_index, + ) metrics.cell_index = cell_index - - #cross-validated metrics + + # cross-validated metrics DSI = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) OSI = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) ISO = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - ORTHO = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - STRENGTH = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - TUNING = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - CONTEXT = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) + ORTHO = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) + STRENGTH = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) + TUNING = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) + CONTEXT = pd.DataFrame( + columns=cell_index.astype(str), index=range(n_iter) + ) DIR = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - + for ni in range(n_iter): - #find pref direction for each cell for center only condition -# response_first = response_first[:,:,:,cell_index,:] -# response_second = response_second[:,:,:,cell_index,:] - sort = np.where(response_first[:,:,0,:,ni]==np.nanmax(response_first[:,:,0,:,ni], axis=(0,1))) - #TODO: this is where the TF is going to add issues... + # find pref direction for each cell for center only condition + # response_first = response_first[:,:,:,cell_index,:] + # response_second = response_second[:,:,:,cell_index,:] + sort = np.where( + response_first[:, :, 0, :, ni] + == np.nanmax(response_first[:, :, 0, :, ni], axis=(0, 1)) + ) + # TODO: this is where the TF is going to add issues... sortind = np.argsort(sort[2]) pref_ori = sort[0][sortind] pref_tf = sort[1][sortind] cell_index = sort[2][sortind] inds = np.vstack((pref_ori, pref_tf, cell_index)) - + DIR.loc[ni] = pref_ori - - #osi - OSI.loc[ni] = self.get_osi(response_second[:, inds[1], 0, inds[2], ni]) - #dsi - null_ori= np.mod(pref_ori+4, 8) + # osi + OSI.loc[ni] = self.get_osi( + response_second[:, inds[1], 0, inds[2], ni] + ) + + # dsi + null_ori = np.mod(pref_ori + 4, 8) pref = response_second[inds[0], inds[1], 0, inds[2], ni] - null = response_second[null_ori, inds[1], 0, inds[2], ni] - null = np.where(null>0, null, 0) - DSI.loc[ni] = (pref-null)/(pref+null) - + null = response_second[null_ori, inds[1], 0, inds[2], ni] + null = np.where(null > 0, null, 0) + DSI.loc[ni] = (pref - null) / (pref + null) + center = response_second[inds[0], inds[1], 0, inds[2], ni] iso = response_second[inds[0], inds[1], 1, inds[2], ni] - ortho = response_second[inds[0], inds[1], 2, inds[2], ni] - #suppression strength - STRENGTH.loc[ni] = (center - ((iso+ortho)/2)) / center - - #suppression tuning - TUNING.loc[ni] = (ortho - iso) / (center - ((iso+ortho)/2)) - - #iso + ortho = response_second[inds[0], inds[1], 2, inds[2], ni] + # suppression strength + STRENGTH.loc[ni] = (center - ((iso + ortho) / 2)) / center + + # suppression tuning + TUNING.loc[ni] = (ortho - iso) / (center - ((iso + ortho) / 2)) + + # iso ISO.loc[ni] = (center - iso) / (center + iso) - - #ortho + + # ortho ORTHO.loc[ni] = (center - ortho) / (center + ortho) - - #context modulation index (Keller et al) - #TODO: right now we're using the center to identify the preferred direction. Might not be ideal + + # context modulation index (Keller et al) + # TODO: right now we're using the center to identify the preferred direction. Might not be ideal CONTEXT.loc[ni] = (ortho - iso) / (ortho + iso) metrics['center_osi'] = OSI.mean().values @@ -289,42 +421,55 @@ def get_metrics(self): metrics['suppression_strength'] = STRENGTH.mean().values metrics['suppression_tuning'] = TUNING.mean().values metrics['cmi'] = CONTEXT.mean().values - - #how consistent is the selected preferred direction? + + # how consistent is the selected preferred direction? for nc in range(self.numbercells): metrics['dir_percent'].loc[nc] = DIR[str(nc)].value_counts().max() - #non cross-validated metrics + # non cross-validated metrics cell_index = np.array(range(self.numbercells)) - sort = np.where(self.response[:,:,0,cell_index,0] == np.nanmax(self.response[:,:,0,cell_index,0], axis=(0,1))) -# sort = np.where(self.response[:,0,:,0] == np.nanmax(self.response[:,0,:,0], axis=0)) + sort = np.where( + self.response[:, :, 0, cell_index, 0] + == np.nanmax(self.response[:, :, 0, cell_index, 0], axis=(0, 1)) + ) + # sort = np.where(self.response[:,0,:,0] == np.nanmax(self.response[:,0,:,0], axis=0)) sortind = np.argsort(sort[2]) pref_ori = sort[0][sortind] pref_tf = sort[1][sortind] cell_index = sort[2][sortind] metrics['center_dir'] = pref_ori metrics['center_tf'] = pref_tf - metrics['center_mean'] = self.response[pref_ori,pref_tf,0,cell_index,0] - metrics['center_std'] = self.response[pref_ori,pref_tf,0,cell_index,1] - metrics['center_percent_trials'] = self.response[pref_ori, pref_tf,0,cell_index,3] - metrics['blank_mean'] = self.response[0,0,3,cell_index,0] - metrics['blank_std'] = self.response[0,0,3,cell_index,1] - metrics['iso_mean'] = self.response[pref_ori,pref_tf,1,cell_index,0] - metrics['iso_std'] = self.response[pref_ori,pref_tf,1,cell_index,1] - metrics['ortho_mean'] = self.response[pref_ori,pref_tf,2,cell_index,0] - metrics['ortho_std'] = self.response[pref_ori,pref_tf,2,cell_index,1] - + metrics['center_mean'] = self.response[ + pref_ori, pref_tf, 0, cell_index, 0 + ] + metrics['center_std'] = self.response[ + pref_ori, pref_tf, 0, cell_index, 1 + ] + metrics['center_percent_trials'] = self.response[ + pref_ori, pref_tf, 0, cell_index, 3 + ] + metrics['blank_mean'] = self.response[0, 0, 3, cell_index, 0] + metrics['blank_std'] = self.response[0, 0, 3, cell_index, 1] + metrics['iso_mean'] = self.response[pref_ori, pref_tf, 1, cell_index, 0] + metrics['iso_std'] = self.response[pref_ori, pref_tf, 1, cell_index, 1] + metrics['ortho_mean'] = self.response[ + pref_ori, pref_tf, 2, cell_index, 0 + ] + metrics['ortho_std'] = self.response[ + pref_ori, pref_tf, 2, cell_index, 1 + ] + b = set(metrics.index) a = set(range(self.numbercells)) toadd = a.difference(b) - if len(toadd)>0: + if len(toadd) > 0: newdf = pd.DataFrame(columns=metrics.columns, index=toadd) newdf.cell_index = toadd newdf.valid = False metrics = metrics.append(newdf) metrics.sort_index(inplace=True) - - metrics = metrics.join(self.roi[['cell_id','session_id','valid']]) + + metrics = metrics.join(self.roi[['cell_id', 'session_id', 'valid']]) metrics['cre'] = self.cre metrics['area'] = self.area metrics['depth'] = self.depth @@ -333,7 +478,10 @@ def get_metrics(self): def save_data(self): '''saves intermediate analysis files in an h5 file''' - save_file = os.path.join(r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/analysis/tf', str(self.session_id)+"_cs_analysis.h5") + save_file = os.path.join( + r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/analysis/tf', + str(self.session_id) + "_cs_analysis.h5", + ) print("Saving data to: ", save_file) store = pd.HDFStore(save_file) store['sweep_response'] = self.sweep_response @@ -347,32 +495,44 @@ def save_data(self): dset = f.create_dataset('response', data=self.response) f.close() - -if __name__=='__main__': -# expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Center_Surround_1006636506_data.h5' -# eye_thresh = 10 -# cre = 'test' -# area = 'area test' -# depth = '33' -# cs = CenterSurround(expt_path=expt_path, eye_thresh=eye_thresh, cre=cre, area=area, depth=depth) - - manifest = pd.read_csv(r'/Users/saskiad/Dropbox/Openscope Multiplex/data manifest.csv') - subset = manifest[manifest.Target=='soma'] + +if __name__ == '__main__': + # expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Center_Surround_1006636506_data.h5' + # eye_thresh = 10 + # cre = 'test' + # area = 'area test' + # depth = '33' + # cs = CenterSurround(expt_path=expt_path, eye_thresh=eye_thresh, cre=cre, area=area, depth=depth) + + manifest = pd.read_csv( + r'/Users/saskiad/Dropbox/Openscope Multiplex/data manifest.csv' + ) + subset = manifest[manifest.Target == 'soma'] print(len(subset)) count = 0 failed = [] for index, row in subset.iterrows(): if np.isfinite(row.Center_Surround_Expt_ID): - count+=1 + count += 1 cre = row.Cre area = row.Area depth = row.Depth -# expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex/Center Surround/Center_Surround_'+str(int(row.Center_Surround_Expt_ID))+'_data.h5' - expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Center_Surround_'+str(int(row.Center_Surround_Expt_ID))+'_data.h5' + # expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex/Center Surround/Center_Surround_'+str(int(row.Center_Surround_Expt_ID))+'_data.h5' + expt_path = ( + r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Center_Surround_' + + str(int(row.Center_Surround_Expt_ID)) + + '_data.h5' + ) eye_thresh = 10 try: - cs = CenterSurround(expt_path=expt_path, eye_thresh=eye_thresh, cre=cre, area=area, depth=depth) - if count==1: + cs = CenterSurround( + expt_path=expt_path, + eye_thresh=eye_thresh, + cre=cre, + area=area, + depth=depth, + ) + if count == 1: metrics_all = cs.metrics.copy() print("reached here") else: @@ -380,6 +540,3 @@ def save_data(self): except: print(expt_path + " FAILED") failed.append(int(row.Center_Surround_Expt_ID)) - - - \ No newline at end of file diff --git a/analysis/compute_and_plot_RFs.ipynb b/analysis/compute_and_plot_RFs.ipynb new file mode 100644 index 0000000..7c0b4db --- /dev/null +++ b/analysis/compute_and_plot_RFs.ipynb @@ -0,0 +1,775 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2021-05-17T15:15:07.613022Z", + "start_time": "2021-05-17T15:15:06.893308Z" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "from oscopetools.LSN_analysis import LSN_analysis\n", + "from oscopetools import read_data as rd\n", + "import os, warnings\n", + "warnings.filterwarnings('ignore')\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2020-12-04T13:29:40.104254Z", + "start_time": "2020-12-04T13:29:40.098296Z" + } + }, + "outputs": [], + "source": [ + "mpl.rcParams['figure.figsize'] = [8,5] #[15,10]\n", + "mpl.rcParams['font.size'] = 20\n", + "mpl.rcParams['figure.titlesize'] = 'x-large'\n", + "mpl.rcParams['axes.titlesize'] = 'xx-small' #'medium'\n", + "mpl.rcParams['axes.labelsize'] = 'small'\n", + "mpl.rcParams['legend.fontsize'] = 'xx-small'\n", + "mpl.rcParams['xtick.labelsize'] = 'xx-small'\n", + "mpl.rcParams['ytick.labelsize'] = 'xx-small'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Analyze single session" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. To initialize the analysis\n", + "\n", + "**NOTE:** For more consistency in computing RFs using greedy pixelwise approach, please change the `number_of_shuffles` of the function `events_to_pvalues_no_fdr_correction` to 20000 or higher in `greedy_pixelwise_rf.py`." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2021-05-17T15:17:07.797613Z", + "start_time": "2021-05-17T15:15:36.660662Z" + }, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Analyzing file: /home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/new_data/Soma Data/Center_Surround/Center_Surround_1010436210_data.h5\n", + "ON LSN stimulus value: 255\n", + "OFF LSN stimulus value: 0\n", + "Background LSN value: 127\n", + "LSN stimulus size: 9.3 degree\n", + "Number of cells: 14\n", + "Current RF type: Greedy pixelwise RF\n", + "Use DF/F z-score: False\n", + "Use corrected LSN: False\n", + "Use only valid eye positions: False\n", + "Use only positive fluorescence responses: False\n" + ] + } + ], + "source": [ + "CS_dir = '/home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/new_data/Soma Data/Center_Surround'\n", + "file = 'Center_Surround_1010436210_data.h5'\n", + "\n", + "# The path to the data file.\n", + "datafile_path = os.path.join(CS_dir, file)\n", + "# The path to the LSN stimulus npy file.\n", + "LSN_stim_path = '/home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/openscope_surround-master/stimulus/sparse_noise_8x14.npy'\n", + "num_baseline_frames = 35 # int or None. The number of baseline frames before the start and after the end of a trial.\n", + "use_dff_z_score = False # True or False. If True, the cell responses will be converted to z-score before analysis.\n", + "correct_LSN = False # If True, the LSN stimulus corrected by eye positions will be used.\n", + "use_only_valid_eye_pos = False # Use False for greedy pixelwise RF.\n", + "use_only_positive_responses = False # If True, the fluorescence responses less than 0 will be set to 0 when computing the avg_responses.\n", + "RF_type = \"Greedy pixelwise RF\" # \"Greedy pixelwise RF\" or \"Trial averaged RF\". The type of RFs to be computed.\n", + "RF_loc_thresh = 0.8 # The threshold for deciding whether the RF is located within the center or surround or not.\n", + "\n", + "LSN_data = LSN_analysis(datafile_path, LSN_stim_path, num_baseline_frames, use_dff_z_score, correct_LSN, \n", + " use_only_valid_eye_pos, use_only_positive_responses, RF_type, RF_loc_thresh)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Changing parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 Different conditions for computing ON-OFF responses and RFs\n", + "\n", + "- Other variables (RFs, ON/OFF responses, etc.) will be automatically updated.\n", + "- If using trial averaged RF, the RF array will be automatically updated with default RF parameters:\n", + " - threshold = 0\n", + " - window_start = None (the start frame of the stimulus will be used)\n", + " - window_len = None (the stimulus trial length in frames will be used)\n", + "- If using greedy pixelwise RF, the RF array will be automatically updated with default RF parameters:\n", + " - frame_shift = 3\n", + " - alpha = 0.05\n", + " - sweep_response_type = 'mean'\n", + " - chisq_significant_lvl = 0.05\n", + " - norm_RF = False\n", + "- The overlapping index and RF location masks will be updated with:\n", + " - loc_thresh = LSN_data.RF_loc_thresh\n", + " - RF_thresh = 0\n", + " - bin_num = 1000" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2021-04-28T18:52:25.838910Z", + "start_time": "2021-04-28T18:51:17.363356Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Analyzing file: /home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/Multiplex/Center_Surround/Center_Surround_986765043_data.h5\n", + "ON LSN stimulus value: 255\n", + "OFF LSN stimulus value: 0\n", + "Background LSN value: 127\n", + "LSN stimulus size: 9.3 degree\n", + "Number of cells: 41\n", + "Current RF type: Greedy pixelwise RF\n", + "Use DF/F z-score: False\n", + "Use corrected LSN: True\n", + "Use only valid eye positions: False\n", + "Use only positive fluorescence responses: False\n" + ] + } + ], + "source": [ + "# If True, the LSN stimulus corrected by eye positions will be used. \n", + "# Otherwise, the original LSN stimulus will be used.\n", + "correct_LSN = True\n", + "LSN_data.correct_LSN_by_eye_pos(correct_LSN)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "ExecuteTime": { + "end_time": "2021-04-28T18:53:34.045341Z", + "start_time": "2021-04-28T18:52:26.288125Z" + }, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Failed to change use_valid_eye_pos to True! \n", + "Recomputing the responses with use_valid_eye_pos(False)...\n", + "\n", + "Analyzing file: /home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/Multiplex/Center_Surround/Center_Surround_986765043_data.h5\n", + "ON LSN stimulus value: 255\n", + "OFF LSN stimulus value: 0\n", + "Background LSN value: 127\n", + "LSN stimulus size: 9.3 degree\n", + "Number of cells: 41\n", + "Current RF type: Greedy pixelwise RF\n", + "Use DF/F z-score: False\n", + "Use corrected LSN: True\n", + "Use only valid eye positions: False\n", + "Use only positive fluorescence responses: False\n" + ] + } + ], + "source": [ + "# If True, only stimuli with valid eye positions are used. Otherwise, all stimuli will be used.\n", + "use_only_valid_eye_pos = True\n", + "LSN_data.use_valid_eye_pos(use_only_valid_eye_pos)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2021-04-28T18:54:43.267779Z", + "start_time": "2021-04-28T18:53:34.466998Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Analyzing file: /home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/Multiplex/Center_Surround/Center_Surround_986765043_data.h5\n", + "ON LSN stimulus value: 255\n", + "OFF LSN stimulus value: 0\n", + "Background LSN value: 127\n", + "LSN stimulus size: 9.3 degree\n", + "Number of cells: 41\n", + "Current RF type: Greedy pixelwise RF\n", + "Use DF/F z-score: False\n", + "Use corrected LSN: True\n", + "Use only valid eye positions: False\n", + "Use only positive fluorescence responses: True\n" + ] + } + ], + "source": [ + "# If True, the fluorescence responses less than 0 will be set to 0 when computing the avg_responses.\n", + "use_only_positive_responses = True\n", + "LSN_data.use_positive_fluo(use_only_positive_responses)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 Different RF types\n", + "\n", + "- The RFs were computed during initialization with default parameters. \n", + "\n", + "#### 2.2.1 Trial averaged RF\n", + "- The threshold and integration window for RFs can be changed.\n", + "- To compute the RFs by using different thresholds (default = 0) and different integration windows by adjusting:\n", + " - window_start:\n", + " The start of the window in frame. If there are baseline frames, then index $0$ to $n-1$ are the first $n$ baseline frames. The stimulus starts at the $n$th frame.\n", + " - window_len: \n", + " The length of the integration window in frames. If None, the stimulus trial length in frames will be used." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "ExecuteTime": { + "end_time": "2021-04-29T20:48:58.119426Z", + "start_time": "2021-04-29T20:48:58.114767Z" + } + }, + "outputs": [], + "source": [ + "threshold = 0. # int or float, range = [0, 1]. The threshold for the RF, anything below the threshold will be set to 0.\n", + "window_start = num_baseline_frames + 3 # int or None. The start index (within a trial) of the integration window for computing the RFs.\n", + "window_len = 7 * 3 # int or None. The length of the integration window in frames for computing the RFs.\n", + "LSN_data.get_trial_avg_RFs(threshold, window_start, window_len)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.2.2 Greedy pixelwise RF\n", + "\n", + "- frame_shift: The frame shift of the window to account for the delay in calcium responses for the Chi-square test. Default is 3.\n", + "- alpha: The significance threshold for a pixel to be included in the RF map. This number will be corrected for multiple comparisons (number of pixels).\n", + "- sweep_response_type: Choice of 'mean' for mean_sweep_events or 'binary' to make boolean calls of whether any events occurred within the sweep window.\n", + "- chisq_significant_lvl: The significance threshold of the Chi-square test p-values for the RF pixels to be included.\n", + "- norm_RF: If True, the computed RFs will be normalized to their corresponding max value." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "ExecuteTime": { + "end_time": "2021-04-28T21:05:43.323504Z", + "start_time": "2021-04-28T21:04:56.163404Z" + } + }, + "outputs": [], + "source": [ + "frame_shift = 3 # int\n", + "alpha = 0.05 # float\n", + "sweep_response_type = 'mean' # str\n", + "chisq_significant_lvl = 0.05 # float\n", + "norm_RF = False # bool\n", + "LSN_data.get_greedy_RFs(frame_shift, alpha, sweep_response_type, chisq_significant_lvl, norm_RF)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3 Using different location thresholds\n", + "\n", + "To get the boolean masks of RF locations based on their overlapping index with the centers. This has to be recomputed if changed the RF type in section 2.2 but is auto-recomputed if changed conditions in section 2.1 with deefault parameters.\n", + "- loc_thresh ($\\vartheta$): The threshold for deciding whether the RF is located within the center or surround or not.\n", + "- RF_thresh: The threshold of RFs to be considered. Default is 0.\n", + "- bin_num ($n$): The number of binning for an LSN pixel when computing the overlapping indices. Higher bin_num gives higher precision but will take longer computational time." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$ S_i^{P} (\\vec x_c, r_c) = \\frac {\\sum_{\\vec x} R(\\vec x, \\vec x_c, r_c) \\left| \\Psi_i^P(\\vec x) \\right|} {\\sum_{\\vec x} \\left| \\Psi_i^P(\\vec x) \\right|}, P \\in \\{ \\text{ON}, \\text{OFF} \\} $$\n", + "\n", + "\\begin{split}\n", + "R(\\vec x, \\vec x_c, r_c) &= \n", + "\\begin{cases}\n", + "1, & \\text{if } \\left\\Vert \\vec x - \\vec x_c \\right\\Vert_2 \\leq r_c \\\\\n", + "0, & \\text{otherwise}\n", + "\\end{cases}\n", + "\\end{split}\n", + "\n", + "$$ \\vec x \\in \\left\\{ \n", + " \\begin{bmatrix}\n", + " -0.5 + \\frac{i}{n} \\\\\n", + " -0.5 + \\frac{j}{n}\n", + " \\end{bmatrix}\n", + " \\Bigg| \\forall i \\in \\left[ 0 .. 14n \\right], \\forall j \\in \\left[ 0 .. 8n \\right] , n \\in \\mathbb{Z}^+\n", + "\\right\\} $$\n", + "\n", + "$$ \\vec x_c = \n", + " \\begin{bmatrix}\n", + " 6.5 \\\\\n", + " 3.5\n", + " \\end{bmatrix} +\n", + " \\begin{bmatrix}\n", + " x_{\\text{shift}} \\\\\n", + " y_{\\text{shift}}\n", + " \\end{bmatrix} $$\n", + "\n", + "$$ r_c: \\text{The radius of the CS center in LSN pixels} $$\n", + "\n", + "$$ n: \\text{The number of bins per LSN pixel} $$\n", + "\n", + "$$ x_{\\text{shift}}, y_{\\text{shift}}: \\text{The x- and y-shifts of the CS center in LSN pixels} $$\n", + "\n", + "$$ \\Psi_i^P(\\vec x): \\text{ON or OFF receptive subfield of } i \\text{th cell} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\\begin{split}\n", + "G_i^P &= \n", + "\\begin{cases}\n", + "\\text{Center}, & \\text{if } S_i^P \\geq \\vartheta \\\\\n", + "\\text{Surround}, & \\text{if } S_i^P \\leq 1 - \\vartheta \\\\\n", + "\\text{Border}, & \\text{if } 1 - \\vartheta < S_i^P < \\vartheta \\\\\n", + "\\text{No } P \\text{ subfield}, & \\text{otherwise}\n", + "\\end{cases}\n", + "\\end{split}\n", + "\n", + "\\begin{split}\n", + "G_i &= \n", + "\\begin{cases}\n", + "\\text{Both center}, & \\text{if } S_i^{\\text{ON}} \\geq \\vartheta \\text{ and } S_i^{\\text{OFF}} \\geq \\vartheta \\\\\n", + "\\text{Both surround}, & \\text{if } S_i^{\\text{ON}} \\leq 1 - \\vartheta \\text{ and } S_i^{\\text{OFF}} \\leq 1 - \\vartheta \\\\\n", + "\\text{Both border}, & \\text{if } 1 - \\vartheta < S_i^{\\text{ON}} < \\vartheta \\text{ and } 1 - \\vartheta < S_i^{\\text{OFF}} < \\vartheta \\\\\n", + "\\text{ON center alone}, & \\text{if } S_i^{\\text{ON}} \\geq \\vartheta \\text{ and no OFF subfield} \\\\\n", + "\\text{OFF center alone}, & \\text{if } S_i^{\\text{OFF}} \\geq \\vartheta \\text{ and no ON subfield} \\\\\n", + "\\text{ON center OFF surround}, & \\text{if } S_i^{\\text{ON}} \\geq \\vartheta \\text{ and } S_i^{\\text{OFF}} \\leq 1 - \\vartheta \\\\\n", + "\\text{OFF center ON surround}, & \\text{if } S_i^{\\text{OFF}} \\geq \\vartheta \\text{ and } S_i^{\\text{ON}} \\leq 1 - \\vartheta \\\\\n", + "\\text{No RF}, & \\text{if no ON subfield and no OFF subfield}\n", + "\\end{cases}\n", + "\\end{split}\n", + "\n", + "$$ \\vartheta: \\text{The overlapping threshold for determining whether a receptive subfield is within the CS center or not} $$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2021-04-30T14:26:33.803769Z", + "start_time": "2021-04-30T14:26:31.116209Z" + } + }, + "outputs": [], + "source": [ + "loc_thresh = 0.8 # float\n", + "RF_thresh = 0 # float or int\n", + "bin_num = 1000 # int\n", + "LSN_data.get_RF_loc_masks(loc_thresh, RF_thresh, bin_num)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 Save data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2021-05-04T23:27:26.547864Z", + "start_time": "2021-05-04T23:27:26.529207Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Data saved!\n" + ] + } + ], + "source": [ + "save_dir = \"/home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/analysed_data/greedy_RFs\"\n", + "metadata = rd.get_metadata(datafile_path)\n", + "save_filepath = os.path.join(save_dir, \"outputs_{}.npy\".format(metadata['session_ID']))\n", + "LSN_data.save_data(save_filepath)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Plotting" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1 To plot the trial-averaged responses within pixels (all pixels of the LSN stimulus) for a cell.\n", + "\n", + "- To visualize the integration window of the RF (blue) relative to the stimulus (gray).\n", + "- Each line plot is the average ON or OFF response of the selected cell on a square pixel of the LSN stimulus.\n", + "- Other keyword arguments can be added for plt.plot()." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2021-05-04T16:19:08.396114Z", + "start_time": "2021-05-04T16:19:08.392295Z" + } + }, + "outputs": [], + "source": [ + "idx = iter(range(LSN_data.num_cells))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "ExecuteTime": { + "end_time": "2021-05-04T16:19:10.040290Z", + "start_time": "2021-05-04T16:19:09.094028Z" + }, + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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+XFbCOBj7s+7qVSK1atXz/lx45ksexrr5vy4IgvZoUOH2Llz5+Dn5WhXIYvHyN8nAGPMo9baPSO3VcZQRERERGSeUhAnc0VrDEVERERERJY4BYYiIiIiIiJLnAJDERERERGRJU6BoYiIiIiIyBKnwFBERERERGSJU2AoIiIiZXN/X5R3PnmSbH7ptM8Sme/cbje7d+/mggsu4JWvfCXhcBiApqYmgsEgu3fvHvyXTqeHvXbv3r188IMfHHf/4XCYr371q7M1/GHuuusu7r///sHPb7zxRr7zne/MybGf/exnT2n7u+66i1e84hWzNJqJqV2FiIiIlM0vu8Pc1tXPA+EoVy+rKvdwROadp7oHSGRyM7a/oNfN+fXj93ENBoMcOHAAgLe//e185Stf4e///u8B2LJly+Bzo9mzZw979pzTIm+YYmD4vve9b0pjH0s2m8XjGT2sueuuu6isrBwM0t773vfOyDEnY2hAuhAoYygiIiJlczyeAuAXXeHyDkRknkpkcoS8nhn7N9Ug81nPehatra2T3n5o1uu6667jHe94B9dccw2bN2/my1/+MgAf//jHOX78OLt37+ajH/0oAF/4whd4xjOewUUXXcQnP/nJwf398z//M9u3b+eqq67izW9+M9dffz0A11xzDR/60IfYs2cP//Zv/8att97KFVdcwSWXXMILX/hCOjo6aGpq4sYbb+RLX/oSu3fv5p577uG6664b3MeBAwd45jOfyUUXXcQf/dEf0dfXN7jvj33sY1x++eVs27aNe+6555yv8/3vfz+33HILAH/0R3/EO97xDgC+8Y1vDAbRlZWVg9+Ta665hte//vXs2LGDt7zlLVjrzJL41a9+xY4dO7j00kv56U9/Orj/3t5eXvOa13DRRRfxzGc+k8cffxyACy+8kHA4jLWW5cuXD2Y/3/a2t3HHHXdM+uc0GgWGIiIiUjYnEk5g+MvufvJW00lF5pNcLsedd97Jq171qsHHigHd7t27ef/73z/hPg4fPsyvf/1rHn74Yf7xH/+RTCbDZz/72cHM4xe+8AV+85vfcPToUR5++GEOHDjAo48+yh/+8AceeeQRfvKTn/DYY4/xy1/+kr179w7bdzqdZu/evXz4wx/mqquu4sEHH2T//v286U1v4vOf/zwbN27kve99L3/1V3/FgQMHuPrqq4e9/m1vexuf+9znePzxx7nwwgv5x3/8x8HnstksDz/8MDfccMOwx4uuvvrqwYCxtbWVgwcPAnDPPffwnOc855zt9+/fzw033MDBgwc5ceIE9913H8lkkne/+93ceuutPProo7S3tw9u/8lPfpJLLrmExx9/nE9/+tO87W1vA+DKK6/kvvvu46mnnmLz5s2DY3jggQemPHV1JE0lFRERkbJI5/M0J9NsCfo5nkixtz/G5bWV5R6WyJKXSCTYvXs3ra2t7Ny5kxe96EWDz000lXSkl7/85fj9fvx+Pw0NDXR0dJyzzW9+8xt+85vfcMkllwAQjUY5evQokUiEV7/61QQCAQKBAK985SuHve6Nb3zj4MctLS288Y1vpK2tjXQ6zaZNm8YdV39/P+FwmOc+97mAM2X2DW94w+Dzr33tawG47LLLaGpqOuf1V1999WCgt2vXLvr6+mhra+OBBx4YzIwOdfnll7N27VoAdu/eTVNTE5WVlWzatImtW7cC8Na3vpWbbroJgHvvvZef/OQnADz/+c+np6eHgYEBrr76av7whz+wYcMG/uIv/oKbbrqJ1tZW6urqqKioGPdrnogyhiIiIlIWp5NpchbeubYenzHc1tVf7iGJCGfXGJ46dQprLV/5ylemvS+/3z/4sdvtJpvNnrONtZa//du/5cCBAxw4cIBjx47xzne+c8J9Dw2E/vIv/5IPfOADPPHEE3z9618nmUxOe8xDxz3WmNesWUM4HOZXv/oVz3nOc7j66qv58Y9/TGVlJVVV566Xnsz3YTKe85zncM8993DPPfdwzTXXsGLFCm6++eZzsqHTocBQREREyuJEYX3hxVUhnrusitu6w4PrbkSk/EKhEF/+8pf54he/OO1AZjRVVVVEIpHBz1/84hfzjW98g2g0CjhTMzs7O7nyyiu59dZbSSaTRKNRfvGLX4y5z/7+ftasWQPAt7/97TGPVVRTU0NdXd3gVMzvfve7g9nDyXrmM5/JDTfcMBgYXn/99VMK0Hbs2EFTUxPHjx8H4Ac/+MHgc1dffTXf+973AGeNYn19PdXV1axbt47u7m6OHj3K5s2bueqqq7j++utHnb46VQoMRUREpCyKhWc2h/y8fEUNLckMj0cTZR6ViAx1ySWXcNFFFw0LWkq1fPlyrrzySi644AI++tGPcu211/Inf/InPOtZz+LCCy/k9a9/PZFIhGc84xm86lWv4qKLLuKlL30pF154ITU1NaPu87rrruMNb3gDl112GfX19YOPv/KVr+RnP/vZYPGZob797W/z0Y9+lIsuuogDBw7wiU98Ykpfx9VXX002m+W8887j0ksvpbe3d0qBYSAQ4KabbuLlL385l156KQ0NDcO+nkcffZSLLrqIj3/848OC3SuuuIJt27YNjqG1tZWrrrpqSmMfjVlKd+b27NljRy5aFRGRpeeRRx6hunr8cu2zoYUAPub+vJtKpVi9evWcHzeeybKnsW7M5//mSDO/6Apz8KoL6c1kufC+J3n/ugb+bsvcj1Vkvjh06BA7d+4c/Lwc7Srmk2g0SmVlJfF4nOc85zncdNNNXHrppeUe1oIx8vcJwBjzqLX2nJ4iKj4jIiIiZXE8nmJz0Fl3s8zr4craSm7r6udvNzdijCnz6ETmh4UUxM2G97znPRw8eJBkMsnb3/52BYWzSIGhiIiIlMWJRIqr6s5WIX35ilo+9nQLh2NJdlYGyzgyEZkvvv/975d7CEuG1hiKiIjInIvlcrSlMmwJnq3U99L6GgyoOqmISBkoMBQREZE515RIA7A5FBh8rMHv5YqaCm7vCpdpVCIiS5cCQxEREZlzgxVJg75hj79sRQ0HY0lOFp4XEZG5ocBQRERE5tyJuNN8etOQqaQAL1tRC8AvlDUUEZlTCgxFRERkzp1IpGj0e6nwuIc9vjbgY3dVSOsMRUTmmAJDERERmXMnhrSqGOnlK2o4EInTkkzP8ahERJYuBYYiIiIy504kUmwOjRUY1gLwS2UNRcrGGMNb3/rWwc+z2SwrVqzgFa94RRlHdVZzczPPe97z2LVrF+effz7/9m//NunXhsNhvvrVr475/HXXXcf1118/E8NcUNTHUEREROZUXyZLbyY3ZsZwc8jPzooAt3WFefe6FXM8OpH55YH4A0TykRnbX5WrimeFnjXhdhUVFTz55JMkEgmCwSB33HEHa9asmbFxTOSuu+7iW9/6Ft/61rdGfd7j8fDFL36RSy+9lEgkwmWXXcaLXvQidu3aNeG+i4Hh+973vhke9cKmjKGIiIjMqWLF0S1jZAzByRo+1B+jM5WZq2GJzEuRfIRqd/WM/ZtKkPmyl72M2267DYAf/OAHvPnNbx587r//+7+5/PLL2b17N3/+539OLpcD4DWveQ2XXXYZ559/PjfddBMATU1N7Ny5k3e/+92cf/75XHvttSQSiZK+L42NjVx66aUAVFVVsXPnTlpbW8/ZLhaL8fKXv5yLL76YCy64gB/96Ed8/OMf5/jx4+zevZuPfvSjAHzqU59i27ZtXHXVVRw5cqSksS1UCgxFRERkTh1PFFpVjBsY1mCBX3ZrOqlIubzpTW/ihz/8Iclkkscff5wrrrgCgEOHDvGjH/2I++67jwMHDuB2u/ne974HwDe+8Q0effRR9u7dy5e//GV6enoAOHr0KO9///t56qmnqK2t5Sc/+cmox7ziiivYvXs373rXu7jlllvYvXs3u3fv5te//vWY42xqamL//v2D4xvqV7/6FatXr+axxx7jySef5CUveQmf/exn2bJlCwcOHOALX/gCjz76KD/84Q85cOAAt99+O4888kip37oFSVNJRUREZE6diKdwAesDvjG32VERYEvQz+1d/bx9Tf3cDU5EBl100UU0NTXxgx/8gJe97GWDj9955508+uijPOMZzwAgkUjQ0NAAwJe//GV+9rOfAc46wKNHj7Jq1So2bdrE7t27Abjssstoamoa9ZgPPfQQMPFU0qJoNMrrXvc6brjhBqqrq895/sILL+TDH/4wH/vYx3jFK17B1VdfTV9f37Bt7rnnHv7oj/6IUCgEwKte9arxvzGLlAJDERERmVPHEynWB334XGNPXDLG8LIVNXytuZO+TJY6ry5ZRMrhVa96FR/5yEe46667BrN/1lre/va385nPfGbYtnfddRe//e1veeCBBwiFQlxzzTUkk07PUr//7AwBt9td8lRSgEwmw+te9zre8pa38NrXvnbUbbZt28a+ffu4/fbb+Yd/+Ade8IIX8La3va3kYy9GmkoqIiIic+rkOK0qhnr5ilqyFn6t6aQiZfOOd7yDT37yk1x44YWDj73gBS/g5ptvprOzE4De3l5OnTpFf38/dXV1hEIhDh8+zIMPPjjt415zzTXjZguttbzzne9k586d/PVf//WY2505c4ZQKMRb3/pWPvrRj7Jv3z6qqqqIRM6utXzOc57Dz3/+cxKJBJFIhFtvvXXa417IdPtNRERE5oy1luOJFM+srZhw24urgqwNeLmtq583NS6fg9GJyEhr167lgx/84LDHdu3axb/8y79w7bXXks/n8Xq9fOUrX+ElL3kJN954Izt37mT79u0885nPnPLxrrjiClKp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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(15,10))\n", + "polarity = 'OFF' # 'ON' or 'OFF'. The polarity of the responses to be plotted.\n", + "cell_idx = 1 #next(idx) # The cell index to be plotted.\n", + "num_std = 2 # int or float. Number of standard deviation from mean for plotting the horizontal span.\n", + "save_fig = False\n", + "ax = LSN_data.plot_pixel_avg_dff_traces(polarity, cell_idx, num_std)\n", + "if save_fig:\n", + " fig = ax.get_figure()\n", + " fig.savefig(os.path.join(save_dir, 'cell_{}_{}_responses'.format(cell_idx, polarity)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 To plot the RFs\n", + "\n", + "- To plot the RF of selected cells using the integration window (if used trial averaged RF) set above.\n", + "- Choose the polarity (ON, OFF, or both) to be plotted.\n", + "- The RFs are being normalized to range [-1, 1] for plotting." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2021-05-04T16:19:11.594557Z", + "start_time": "2021-05-04T16:19:10.751819Z" + }, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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9BMOh4OQkBDi4uIICw0lMyuL7du306hRI9q1a8ell17KueecQ0iINurJ0dasWcN7773Hb7//zpo1a6hevTpVqlQBID09nX379tGqVSs6duhA3759adu2bSmPWIKRy+Xi66+/ZunSpax0OEhJSaFu3bpER0XhdLnYu3cveXl5tEtKotOpp9K/Xz/q1KlT2sOWIJSVlcXiJUv44vPPcTgc7N23j4S6dYmIiCAnJ4ftO3ZQtWpVkpKSOOecc+jdqxexsbGlPexSp+SpCMnJyfzvf//j62++oUePHgwdMoR27dpRu3btfy2XnZ3N2nXr+P2335g6dSoPTJrEkCFDuOqqq4iMjCyl0UuwsNay/JNPeO2119i6ZQsDBgxg7G23kZiYeCRxOiw9PZ3k5GR+/PFHrhs1irp16zLi2mu55JJLtBVByMnJYfbs2cyYOZNKsbH069+fwYMH06pVq6M+a3bt2oXD4eDzzz+ne48edD7jDK4fPZr27dqV0uglmOzdu5eXXn6ZBe+9R/sOHejZowe33HILTZo0ITQ09MhyLpeLTZs2sdLhYNmyZTz55JP06tWLG0aPPuq7sCIx1tpiL9yuXTu7aOHCkhtNkMjOzua555/nrbfeYsyYMfTr25fKlSsXq661lhUrVvD888+zZetWJk+eXK4/rJo1b/6LtbaTL3UqShwB7Nmzh/snTmT9X38xduxYunbtWuzdcnl5eXz22Wc8PXUqDRs04KGHHqJWrVolPOLSo1gqWnJyMnfedRe1a9fm5ptuomPHjsVOqDMyMliwYAHPPf88/fr25ZZbbinXP+wUS0VbunQpDzz4IN27d+ea4cNp2LBhsetu27aNGTNn8u6773L33XfT9/LLy+0Pu6LiSPuW8tm2bRuX9+3LunXrWLJ4McOvvrrYiROAMYYOHTrw0ksvccPo0YwcOZKXX3mlBEcswerb776je48eNG7UiPfff5+LL77Yp+OZwsLC6NatGwsXLKBlq1b06NmTr7/+ugRHLMHq9ddfZ/g11zBixAhee/VVTjrpJJ++sCpVqsRVV13FksWLSdm0iT59+rBly5YSHLEEo5ycHMaNG8fUadP434svMvH++31KnAASEhK4+667ePONN5g+fTo3jBlDZmZmCY04eCl58rJlyxYGXnkl/fr25X8vvkh8fPxxt2WMoXfv3ixauJD33n2Xp55+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6tWrV8prIMGibdu2zH/nHVY6HMyZPZsLu3WjatWqJCUl0axZM6KjonC6XOzbt4/k5GTWrFlDgwYNuHLgQB599NEjsSZy6aWXctFFF/Hll18ya/ZsJk6cSIMGDUhKSqJB/fpERESQk5PDtu3bcTgcpKSkcPLJJzPi2mvp2rUrYWEVO30wvhzX065dO7to4cKSG02QS09PJzk5mVWrVrE/LY283FyioqJo3LgxSUlJNG7cuMLtUmnWvPkv1tpOvtSp6HEEsGvXLhwOB2vXrj2yOy8mJoaWLVvSrl07ateuXcojDDzFku9cLhebNm1ipcNBysaNZGVlERoWRrWqVWnbti2JiYkV8pABxZLvcnJyWLduHQ6Hgx07dpCTk0N4RAS1a9UiKSmJVq1aVbi9KEXFUcVOHX1UuXJlzjjjDM4444zSHoqUcbVq1eKCCy7gggsuKO2hSBkWEhJCkyZNAnYZFym/IiIiSEpK0kXri6libSYREREROUFKnkRERER8oORJRERExAdKnkRERER8oORJRERExAdKnkRERER8oORJRERExAdKnkRERER8oORJRERExAdKnkRERER8oORJRERExAdKnkRERER8oORJRERExAdKnkRERER8oORJRERExAdKnkRERER8oORJRERExAfGWlv8hY3ZDWwqueFIGdTIWhvvSwXFkRRCsST+olgSfyg0jnxKnkREREQqOu22ExEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERHyh5EhEREfGBkicRERERH5SZ5MkY09gYY40xYZ7HnxtjRpb2uKTsUSyJvyiWxF8US2VLwJMnY8xgY8zPxpgMY8x2Y8wyY8zZfu4jyRjzkTFmjzHGFlBewxizwBhz0BizyRgz2KusrjHmfWPMNk8gN85XN9IYM90Yc8AYs8MYM9ar7HDwZ3jdJniV1zPGLDLG7DPGbDXGjM7Xdi9jjMNT71tjTNt85U2NMYuNMemedZviNabXPOuSboz53RhzqVe9M4wxyz397jbGvGOMqXsCL3FQUCyVSiy19bzmqZ7bJ/nbLosUS4GPpXxt3O8Z44U+vqxBR7FUKp9LRY6rRFhrA3YDxgK7gL5ALBAO9AKeKEbdxoAFwjyPPwdGFrJsK2AE0Me9ikeVzwXeAioBZwNpQKKnrDYwBujs6a9xvrqPAV8B1YE2wA7gkoLGWEC/nwHTPOvdAdgHnO8pawEc8IwnDLgH+MtrfSOA9Z7XMBaIAtp7ymKBSZ7+Q4CeQPrhsQOXAgOAKkAMMB34MJDvvWKp3MRSNU+ZAUKB/wArSjseFEtlL5a8+m8GrAS2AReWdjwolspeLB1rXCXyXgcwqKoCGcCAIpYJAe72vIB7gbeBGr4Glld7zfMHludNyAFaej03E3g833JhhQTWNuAir8cPAfOO9QZ6gtgC8V7PvQzM9Ny/CViS77XIBLp6Ho8CvvLh9V4B9Cuk7GQgPVDvvWKpfMaSZ71uBA6VdkwolspuLAEfAt2BFMpw8qRYKr1YKmpcJXUL5G67zrgzyQVFLHMzcBlwHpAApALP+3kcLYE8a+06r+f+ABKPVdEYUx2o61m+qLqbPJssXzfG1DxcPd/fw/eT8j32vu9dfgaQ4tkEvMe494e3K2SctXGvZ3Ihq3JuEWVlgWLp338P3w9YLBlj9gNZwLPAo4WuaPBTLP377+H7AYklY8wAINtau/RY61kGKJb+/ffw/UB+xxU0rhIRyOQpDthjrc0rYpnRwL3W2q3W2mzcm+n6G88BdH5SCfemQ29pQOVi1j28fEF19wCnAo2AUzzPzwaw1qYD3wATjDFRxpiTgX64d6MBfAKcZ4zpYoyJAMbj3ox5uLw+cCXwDO5/uiXAIs+yRxhjwj19vmmtXZN/BYwx7YH7gTuKsb7BSrFUyrFkra2G+5f2TcBvxVjfYKVYKqVYMsZUxp1431KMdSwLFEul97lU6LhKSiCTp71AzWMESSNggTFmv+eX7WrAiXsfrb9k4D72x1sV3PtPi1P38PJH1bXWZlhrf7bW5llrd+L+YrnI8yEBMARoAmwBXgRmAVs9ddcAVwPPAduBmsCqw+W4N29+ba1dZq3NAZ7E/c/a5vBAjDEhuDfP5nj6/hdjTHNgGXCLtfarYqxvsFIslXIsefo5CPwPmGGMqVWMdQ5GiqXSi6VJuHfppBRjHcsCxVIpxVIxxuV3gUyevgOycW+yLMwW4FJrbTWvW5S19m8/jmMdEGaMaeH1XAeKsRvLWpuK+03vUMy61vM3xFN/k7W2p7U23lp7Ou7g+dGr/fnW2iRrbRwwEfd+3J88xSu82juKMcYAr+H+J+xnrc3NV94Id+b/kLV25rHWNcgplkoxlvIJwf3LsV4RywQzxVLpxVJX4D/GfUbXDqAB8LYx5q5jrXOQUiwFz+fSv8ZVIopzYJS/bsA4YCfu4IrBfUT+pcAUT/ltuA+Sa+R5HA/0sT4eTId7P2oU0NZTJwqI9Cqfh/tshFjgLLzORPCUR3nKLO6zGqK8yh4HvsB9JkJr3IF2+EyE0z3Lh+DOmN8CPvOq2wb35sQIYCjuTY3eB9edgvsMpnjcBxLO8SprBRwCLvQscxvugw4jPOX/A74HKhXwetTzLHt7IN9vxVK5jKVuwEmeelVwb2Lf5r1eZe2mWCq1WIoD6njdtuA+K/ioZcvKTbFUarFU5LhK5L0uheAaAvwMHMR9CuQS4ExPWQju0xTX4t5MuB549DgC6/Cy3rcUr/IawELPGDYDg/PVz1/XepVF4j7V/wDuf5KxXmWDgI2edrcDM4A6XuW3Ars95V8DnfL1+7VnvfcBLwGx+cr74j6184Bn/Q+fetrIM84s3JtdD9+GeMonesq9yzIC/d4rlspFLA0A1nie2+15zduXdiwolspeLBXw+qRQhs+2UyyV6udSkeMqiZvxdCwiIiIixVBmLs8iIiIiEgyUPImIiIj4QMmTiIiIiA+UPImIiIj4wKdZTWvUqGHr1Sur07lISXA4HHustfG+1FEcSUEUS+IviiXxh6LiyKfkqV69eixauNAvg5LyoVnz5pt8raM4koIolsRfFEviD0XFkXbbiYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPggrLQHUBYdPHiQtLQ0nE4nUVFRxMXFERKiPFR8l5qaysGDBwGIjY2lWrVqGGNKeVRS1rhcLvbu3UtWVhahoaFUqVKFSpUqlfawpAzKyclh37595OTkEB4eTo0aNYiMjCztYQUdJU/FkJ6ezvvvv8+PP/2Ew+Fg586dVK1ShdCwMDIzM8nJzqZt27a0a9eOSy+9lI4dO+oLUAr0999/s2DhQv74/XccyckcOnSIKlWqAO44i4yMJCkpiY4dOnDZZZfRoEGDUh6xBCNrLStWrGDJ0qU4Vq4kedUqIiIiiI6Oxul0kpaWRq1atUhKSuLUTp3o06fPkTgT8ZaXl8dnn33G5198gcPh4K+//qJKlSpERESQk5PDgQMHaNqkCUlJSZxzzjl069aN8PDw0h52qVPyVISNKSm8+uqrLF26lLPPPpsuXbowZswYmjVtSljYPy9damoqycnJ/Pb774wdN47KlSpx1VVX0bdvX0JDQ0txDSRY/PDDD7z22mv88uuv9O7dm/79+zNp0iQSEhKOJNrWWrZv385Kh4Mff/yRy/v2pUOHDlx77bWcdeaZpbwGEgxcLhcLFi5kxowZpKWl0ffyy7nhhhtITEykRo0aR5ZzOp1s2LABh8PB5198wdNTp3LJJZdw3ciRNG3atBTXQIJFeno6M2bOZO7cudSpU4eePXvSt29f2rRuTUxMzJHlsrKyWLNmDQ6Hg1mzZvHQww9zxRVXcM3w4VSrVq30VqCUGWttsRdu166dXbRwYcmNJkg4nU5ef/11/vfSS1w1dCiDBg2iVq1axarrcrn4+uuveeHFF8nLy2PK5Mnl+sOqWfPmv1hrO/lSp6LEEbg/oB597DG+/vprbrrxRnr16vWvD6aiZGZmsmTJEp597jlOP/107rv33nK99UCxVLSUlBTuuvtunE4nN954I+eec06xf5zt2bOHeW+9xZtvvMHI665j5IgR5fqHnWKpaN988w33jB9Pp1NOYcSIESQmJha77rp163j99df54ssveejBB+natWsJjrR0FRVHOlAnnz179zJo8GA+/fRT3p0/n1tuuaXYiRNASEgI5557LnNmz6Z3r15cMXAgb731VgmOWILVihUruLR7d0JCQli6ZAkDBw4sduIEEB0dTf/+/Vm6ZAnRUVFc2r07v/32WwmOWILVu++9R/8BA7jk4ot5a948zu/Sxafkp2bNmtx0440sWLCAr776iiuuuIJdu3aV4IglGDmdTh586CHuuvtuHnrwQZ5++mmfEieAli1b8thjjzH16ad5+OGHufvuu8nNzS2hEQcv7bbzsnPnToZedRWXXnopt95yywkdBB4SEsKwYcM459xzufaaaziQns51I0f6cbTlW0Lyh8VablviJSU8kuPz008/MebGG3nkkUe4qFu3E2orNjaWBx54gC5dujDq+ut55r//pXPnzn4aqQS7N958k+nTpzNv7lyaN29+Qm3Vr1+fGW++yfPPP8/AK69kzuzZ1K1b108jlWCWl5fHuNtvZ+/evSxbupTKlSufUHunn346S5Ys4bbbbuOGMWN4/rnnKtSB5dry5JGens7Vw4dz2WWXMfa22/x29lyTxo2ZO3cus2fP5u233/ZLmxLc1qxZw5gbb2Ta1KknnDh5O//883n2mWf4zy23sNLh8Fu7ErzeW7DAb4nTYSEhIdx8880MHjyYq4cPJy0tzS/tSnC7f+JE9qem8tqrr55w4nRYTEwMzz33HOHh4dx+++34chhQWafkyePRRx/lpI4dGXPDDX5vu06dOrw+fTpPPPEEGzdu9Hv7Ejyys7O5bexY7rnnHs466yy/t3/GGWcwceJExo0bR3Z2tt/bl+CxadMmHnv0Uaa/9hoJCQl+b/+6kSM54/TTeejhh/3etgSXZcuW8dNPP/HCCy/4fetQeHg406ZOZdPmzRVqA4GSJ+CLL77gm2+/Zfz48SU2xUCTJk246eabufOuu3A6nSXSh5S+555/noYNG3L5ZZeVWB89e/SgVcuWTJ02rcT6kNLlcrm4++67GT16tN+2OBXk7rvv5peff+bTTz8tsT6kdO3du5cHHnyQKZMnExsbWyJ9REZG8sSUKTz55JNs27atRPoINhU+eXI6nUyaNIlHHn7Yb5syC3PV0KGEhISwoIKc0VHRbNmyhblz5/LQgw+W+DxfkyZN4t1332VjSkqJ9iOlY/HixeTk5DB8+PAS7ScmJobHHnuMSQ88QF5eXon2JaVj2n//S6+ePTnppJNKtJ9WrVox7OqrmTxlSon2EywqfPL05VdfUa16dc4555wS7yskJITRo0cza9asEu9LAm/u3Ln0vfxyn87OPF5xcXFcMWAAc+fMKfG+JPBmzprF6NGjAzKdwBlnnEGdOnX4v88+K/G+JLDS09NZvHgxo0aNCkh/w6++mq+++ordu3cHpL/SVOGTp9mzZzNkyJCA9XfuOeewf/9+VqxYEbA+peRlZ2fzzvz5DBo8OGB9Dho0iPcWLCAzMzNgfUrJW7VqFdu3b+f8888PWJ9Dhwxhtn7UlTvvLVjAOeecQ3x8fED6q1y5Mt27d+etCnDsU4VOng4ePMj3339Pzx49AtZnaGgofS+/nKXLlgWsTyl5P/zwA02aNKFJ48YB67N+/fq0bt2ab7/9NmB9Sslb9uGHXNanz7+uYlDSLrnkEn77/XedeVfOLFu2jH59+wa0z359+7KsAny/VejkadWqVbRs2ZKoqKgCyyNdv1Er7yZiXf4NhA4dOuDQqeblisPhoGPHjgWWhdkUqjmfp07eSOKcD1PJtYBwuw7siR9j0lGxVO6sXLmy0FgqKZGRkbRu3ZrkVasC2q+UHKfTyepVq4r4XNpKTed9VHG+4dd+27ZtS0pKCllZWX5tN9hUiEkyE35+t8DnNy/7ijNqxxwp/3ToawBE1c6l9W17qNcjHVcuVAr/kL8/qEzyI7U4d+69xepzW7NzCy1LSkrC4XBgrdUFhAsRrJNfVn694NO6Vy/5P/q0aXykfMUbX5BwSTp1L02nWqJ7SoGMDRFUqvsFVaPdc6G4ckPI2V2ZnJ1Vyd5ZhZydVcnZXRmbl+84lwn/LXQ87dq145358/2wZhIMrLU4HA7atWsX8L7btWvHypUrOVMTsJY5db46epfrmm27iY+JoNWKDwD47Dr38ZERcXk0v24f9a/YjwkFEwJ7n3mRv16KA6DNmqUnNJbIyEiaNW3K6tWrS/wg9dJUIZKnwqzfsZcWdf/ZFxwS5aLZ8FSaXbsPQuDPl2uw4Y3qNB68nxbX7yXu1EOE2D9wZXU4oX7j4uIIDQ1l3759xMXFnehqSBDYmJpOmwZRRLVcTVTjjXQd6r70xX5HJKueiGf7R5XI2hmOCbXENs6haptsGl8eTWTtA8S22UaVkzYDYF2G9JX12PNhO7DH3jDcpEkTNm/eXKLrJoGTkZFBTk4OtWvXDnjfzZo2xZGcHPB+pWRs2LWPFnX++X4Jq+Sk6fBUmlyVSkiEZevCqvz5Ug1a3byHVjftBTiSQJ2ops2asWnTJiVP5VV2bh7REWGAi5Bqf9DlgxSi6+Sx7cNKrJkaT+a2cKrZTOyLhhXLatN0aipVWv6XvIyzyUsdBDb6uPuOiorSJIflRET9zbz0xAHO7vQxJgTy9ldj7TNxbPuwMoe2RABQzWZSz6az10azf300GesjqVK1hacFS1jVTCJqpxHTeA9VTt5MSLiLXR90OGYCFR0dXe43j1ck2dnZpXaJi6joaLIVS+VGVm4eMZHhYHIJq/Mj5y/bSEQ1F9s+rMS652pycFME1WwmGeMj2LUphlY37/Vb39FRUeX+c6lCJ09hoSE4XZawhCWExX/Nwc3hfDusAam/uZOiajaTM5xbMVjsBsOPAxI49as2hFX5hJCITeTsmAQc3263vLy8gB4QKiUjvNYOqnb5P84BtvzYgtidbXGmVeevV/45iPtfcYTh+9D67DfeibchLy2GvLQYDq2rS97BSGqc8ye5+2JJ/bplkf3nOZ2Ko3IkNDQUl8tVKn3n5eYSFh5eKn2L/4WFhJDndBHV7iVCYvawf2UkP4yqzYHV7mN8//W59IJhT0Q0rW7ayw7XRxwKufiE+s7Nyyv3sVShDxivHhvDrrR0XOktsLmxxNTPpX6fNCLj3AfyxtlMDJYQwGBJiM8gJHoF1hpcmSdxvIlTbm4uGRkZJT4pp5Q8Z3pl8vZVB6Bm681ENf+TsLjdwD/XeMofR3G28KkFTGQuMU13Y52GrL+rH7P/vXv3UrVq1RNdDQkSsbGxZGZmlspWacVS+VI9NprdBw6StzcJ6wqjSuts6vc5QEQh329VM7LJ2R9CrmlRdMPFsHfvXqqV81iq0MlThyYJ/L5xG6701mSvuYMNb1anfu8DnLc4habX7iM1PBKLwQUQBg2npAGWnF13kZd22XH3++eff1K/Xj2io49/t58EB1dmLKkf9eCl5xPYtDGa6JZrqH7pErosTaHVzXuo3CKbvSb6SBxZDHuPbHWyhFU9REzLHVQ/Zy21+/9Eg1GfE1knjZ0LTyZz47HnZnE4HLRt27ZE11ECJyIigiZNmrBmzZqA9+1wOEhULJUb7RvWwbF1J9lbziXrt/+wZWFVGg3cz/lLN9Lypj3sj/nn+81EAqdZvh/RgFzT9IT6tdaSnJxc7j+XKvT2/pOb1OPOGe4zEXBFs+bpeDbPr0qbcbtpc9seDg0IZ/vrlYgPO0TkJU42ra1K7fgHwBY8tUFxORwOkkrhbBopIc4wcjY1Zfz//c3LV1xKRIPNZNvfaHrtPpqP2kf6nxFsfaMy9ntDdrNQ6p6ZQas2e6jefiOh0bkAWBfk7q1E5sZ40lfWJ2tTzWJ17XA46HTKKSW5dhJg7Txn43bocGInpvjKkZzMuHHjAtqnlJyqMVHUrVaZtdv30LZeLRwP1mbjm9VpedMeWly/j0YDQ9j1Sgzx4Yewp8B30xqSvu7Ej7fbsWMH1lrq1q3rh7UIXhU6eWpcqwYhxrBi0zbaN3JftfzQ5gh+uaUecacfou1du6g/IZ3MHWH8cH899nwXS+0lJ5Y4AXz2+ed0Oe+8E25HgscZDWrz4Kc/k5UZht3Qgh8n7yaiRh51u2VQ99J0Gj1y4MiyzmxD+roIDq6p65mioAo5u6scPUXBMeTm5vLNN98w5oYb/L06UopOO/10li5dGtArH/z5559kZ2fTOICTvErJO6tlI5b9vo629dyXjDq4KYLf7khg/fQsWv1nD3XvOEjugRC+u6aBXxIncH+/nX7aaeV+Gp4KnTwZYxjR9XReWf49z4789yyse3+I4esBjQiv4sSVa8jL8M81prZv384PP/zAk0884Zf2JDg0rl6ZxNo1+GBNCv2TmgGQsy+MTW9VY9Nb1YiqnUu19lkcTIkgY2MENs/QZsiJHVuwfPlymjRpQtOmJ7aZXYLLpZdcwqOPPsrWrVupX79+QPqcPWcOAwcOJCSkQh/JUe6M6NKJYf97h1svPfNfzx9YHcVPN9QnMj6P3P0huHL9875ba5k9ezbj77nHL+0Fswrxn7KtU79Cy4ZfcBrzv1tBasaho8qs05CTGvavxOnTHo+f0Fhmz5lD7969iY2NPaF2pHSkX3NfoWXXnNKK135ajbX2qLKsneHsWF6Z9D8jsXnuX2SrZ/953OOw1jJj5kyGBnDrhARGdHQ0fS+/nFmzZwekv/T0dN5//32uHDgwIP1J4JzStB41YmP4aMWfnP/K0dfdzN4d5rfECeDnn38mOzubzhVgotUKs+WpqASq52Ub+c+HyUwu5syq245zDBs2bGDevHkseO+942xBgkFhCVTnvDymXH45b1RtS/81E0p0DB988AH79++nW7duJdqPlI7hw4fTp08f+vXtS4sWJ372U1EmT5nCxRdfXO6PUSnPdpwztNCy0ffUZdwjj9Bm5HjarCl8uROVk5PDpAceYMyYMRViC2b5X8NiuOOOO/j+++/57PPPS6wPp9PJnXfdxc0330yDBg1KrB8pPWFhYUyZMoXJkyezY8eOEutn9+7dPPzII0yZMoXwcj6XSkWVkJDAbWPHcuddd5GXd+LXQCzMN998w+eff14hdrNUVF27duWkjh158qmnSrSfF154gbp163L5ZZeVaD/BQskTUKlSJR599FHGjx9PSkpKifTxxJNPEhERwVVDSy7zl9LXpk0bhg0bxn9uuYXMzMLnczpe2dnZ3HLrrQwcOJD2OmOzXBt05ZVUqVyZxx9/vMBdwSdq69at3HnXXTzy8MOac66cmzBhAh8uW8ayZf69yP1hX3zxBXPmzuXhhx4q9weKH6bkyeOsM8/k5ptv5urhw9m0aZPf2rXWMm3aND7/7DOef+65CrE5s6K7ccwYGjRowPWjR3Po0NHH0h2vzMxMbhgzhpo1a3LrLbf4rV0JTsYYnnnmGb77/nuefPJJvyZQW7du5aphwxg1ahTn6czfcq969eq8+uqrTJw0iY+XL/dr219//TW33347L774InXq1PFr28FM3+ReBg8axPXXX8+Vgwb5ZRfegQMHuOPOO/nk00+ZNWsW1asfe8ZoKftCQkKY/Pjj1KlTh0GDB/PXX3+dcJsbN25k6NChVKtalaeefJLQUP+c/SnBrWrVqsycMYOvv/mG28aOZf/+/Sfc5pdffsnAgQO5Zvhwrh427MQHKWVCmzZteO2117j//vt58cUXT3h3sMvl4vU33uC2sWN58cUXOeXkk/000rJByVM+gwcN4qmnnmLSpEncedddx/VhZa3ls88+49Lu3YmJjmbe3LnUrFm8SQ+lfAgLC2Py449zxYABDBo0iJdefpnc3Fyf28nNzeW1115jwBVX0LtPH5588kkd51TB1KhRg7lz5lC9enW69+jB8uXLj2sr1IEDB7hn/Hjuve8+Jk+ezDAlThVOu6Qk3nv3Xb77/nv6DxjA2rVrj6udjRs3MnjIEJYtW8bbb79Np06d/DzS4KfkqQBndu7M0iVLiImO5vwLLuCe8eNxOBzHrHfo0CHmzptHr969eeTRR3niiSd48MEHqVSpUgBGLcHGGMOQIUNYsGAB33//Peeedx7Tpk1j+/btx6y7c+dOnnnmGc7r0oUvv/ySd+fP5+phw7Tbt4KKiYlh4v33M/Xpp3nyySfp0bMnc+bMISMj45h1V69ezb333cd5XboQFhbG0iVLOPvsswMwaglGCQkJvPnGGwwcOJChV13F8OHDWb58+TG3RLlcLr744gtGjRpF/wEDuKhbN+bOmUOTCjqxqvHlF0y7du3sooULS240QWjPnj28/fbbzHvrLXJyckhKSiIxMZG4GjUICwsjMzOT9Rs24HA42LBhA2effTZDhwzhzDPPrBBfdM2aN//FWuvTz46KGEfgnsV59pw5LFq0iOrVq9OuXTvatG59JLnOyMhgzdq1rFy5kj179tCnd2+GDBlCq1atSnnkgaFYKh5rLd9+9x2zZ8/myy+/pGmTJiQmJdG8WTOio6PJy8tj3759JCcn40hOJjQ0lCuvvJKBV1xBfPyxr5dYHiiWiic7O5tly5Yxa/Zs/ly3jjZt25KUmEj9Bg2ICA8nJzeXbdu24XA4WLVqFQ0bNmTokCH06tWrQlybtag4UvJUTNZatm/fzsqVK0letYoDaWnk5uURFRVFo4YN3V+EbdoQFXXil28pS/Qh5Tun08n69etxJCezdu3aIweVx8TE0LJlS5KSkmjWtClhYRVmGjZAsXQ8srKyWLNmDQ6Hg40pKWRlZREWGkqVqlVJbNuWdu3akZCQUGHOgDpMseS7tLQ0HMnJOFauZMfOneTk5BAeHk6t+HjatWtHYmIiNWrUKO1hBlRRcVSxPp1PgDGGhIQEEhISuPjii0t7OFKGhYaG0rJlS1q2bFnaQ5EyLioqio4dO9KxY8fSHoqUcVWrVuWsM8/krDPPPPbComOeRERERHyh5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHxgrLXFX9iY3cCmkhuOlEGNrLXxvlRQHEkhFEviL4ol8YdC48in5ElERESkotNuOxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8YGSJxEREREfKHkSERER8UGZSZ6MMY2NMdYYE+Z5/Lkx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1qtXr6TGImWQw+HYY62N96WO4kgKolgSf1EsiT8UFUc+JU/16tVj0cKFfhmUlA/Nmjff5GsdxZEURLEk/qJYEn8oKo60205ERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB0qeRERERHyg5ElERETEB2GlPYCyyOVykZWVhdPpJCIigsjIyNIekpRReXl5ZGZmAhAdHU1YmP4l5fhkZ2eTk5NDSEgIUVFRhIaGlvaQpAyy1h6JpfDwcKKiojDGlPawgo4+qYshOzubj5cv56cff8SRnMzatWsxxhAaEkJ2Tg5xcXEkJSXRrl07Lr3kEpo1a1baQ5YgtW/fPpYsWcLvf/xBssNByqZNREREAJCTk0PDhg1JSkykQ8eO9OzRg7i4uFIesQSrjRs3snTZMlauXInD4WDPnj1ERkTgdLlwuVy0atWKpKQkTu3UiYsvvlg/8qRA1lp++uknPv/8cxzJySQnJ3Po0CEiIiLIzc0lIiKCxMREkpKSOPecc+jcuTMhIdpppeSpCDt37uTNN9/knfnzadOmDed36UKvXr1o06YNlSpVAtyBt3nzZhwOB7/99huDhwyhRYsWXHXVVVzUrZsydgEgOTmZ1994g08++YQLzj+f008/nWuvuYYWLVocSZ5yc3P5888/cTgc/PDjj0ydOpULzj+f4ddcQ/t27Up5DSQYWGv59NNPmTFzJqtXr6ZXr1707NmTu++6i4YNGx75Ujt48CCrV69mpcPBewsW8NBDD9Gvf3+uHjaMunXrlvJaSDDIzs7mnXfeYdbs2TidTnr26ME1w4eTlJREfHz8keX27t2Lw+FgpcPBI48+Sk5ODoMHDeLKK68kJiamFNegdBlrbbEXbteunV20cGHJjSZIWGt59913mTxlCr169eKqoUNp0qRJserm5OTw0ccf89JLLxEfH8+jjzxSrj+smjVv/ou1tpMvdSpKHIH7A2rqtGksWLCAESNGMKB/f6pXr17o8iF2P5YIrIlh//79vPvuu7z62mv06N6dcePGER0d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07GMv+cePvrooyIP+D1R1lruGT+eESNG6LiCcioiIoLJjz/OAw8+yN69e0usn/3793P/xIlMmTy5XF87qiJr3Lgxo6+/nnvuuQdXvrl6/OmXX3/l/Q8+YMJ9BV/PTMq+nj160KhRI557/vkS7ee16dOJiIzkyitP/Iz0skDJE+6zEh568EFuv+MOduzYUSJ9vPDiixw8eJCRI0eWSPsSHE466ST69u3LuHHjyMk59kU0fZWbm8vtd9xB9+7dOfXUU/3evgSPa665hty8PJ599tljL3wcdu3axe3jxvHApEm6TFQ5Zozh4Yce4u233+bLL78skT5+/vlnXnn5ZSY//viRaRHKu4qxlsXQtWtXhg4dyrCrr/Z7AvX6668z/513ePGFF8r9rKsC48aOJTIqiltvu43s7Gy/tZubm8vYceMAuPuuu/zWrgSn0NBQXnzhBd7/4ANeevllv7a9e/durh4+nH79+3PxxRf7tW0JPvHx8bzwwguMGzeOb7791q9t//rrr9wwZgxTp06lQYMGfm07mCl58nL9qFH069uXgVdeyc+//HLC7WVmZvLQww8za/ZsZs2aRe3ax76+lJR9YWFhPPPf/2Kt5Zprr2Xbtm0n3Ob27dsZMXIk2VlZPPfss4VOhyDlS82aNZk1cybvvvsuEydO5NChQyfc5m+//cYVV1xB9+7duXHMGD+MUsqCU04+meeff55bb72VOXPmYO3xHt3kZq3lvQULuH70aJ544gnOPvtsP420bFDylM/111/P+PHjufnmm3nkkUeO++KGP//yCz179WLPnj3Mf+edcj9hmPxbZGQkzz7zDGefdRZ9+vRh3rx5x3XsirWW+fPn07t3b07t1Innn3+eqKioEhixBKu6devyzttvk5GRQY+ePfnxxx+Pq52srCwenzyZ0TfcwB133MHNN91U7ufikX877bTTmDtnDvPffZerhg1j69atx9XOzp07GTVqFK+99hpvvP46XSrA2XX5KXkqwMUXXcSSxYvZs3cv5557Lo9PnszmzZuPWS83N5elS5cyeMgQ/vOf/3DnHXfw32nTqF69egBGLcEmLCyMMWPGMGv2bN555x0uuvhiXn/9ddLS0o5Z98CBA7zx5ptcdPHFzJw1ixkzZnDzzTdri1MFVbVqVZ566inuHT+e28aOZdCgQSxesqRYx9Vt2bKFKVOmcM65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ayWqFdFv/rP8pOxLSkri119/DXi/DoeDpMTEgPcrIlKRVejkqUmTJmRkZLBp0yYaNWp05Pn8CRRPHLstZ7Y5kjgdyzfffsvJJ510AiOXYHPyySfz/PPP43Q6S/S6dt5cLhffffstgwcNCkh/IiLiVqGTp5CQEPr268fcefO4+667/lV2OIHaNDeTGqdk4soxuHIMIVHhuHINrjyDzXU/58oN4dDWCLJ2FT4H1GGpqal88skn3HP33SW1WlIKWrVsSa1atfj888/p2rVrQPr8+uuvqVy5Mona8iQiElAVOnkCGDxoEP379+fWW245qsw6Dft+iWHfL/8+Bb2oiTKP5Z358+natSs1atQ47jYkOA0dOpSZs2YFLHmaNWsWQ4cO1USrIiIBVuGTp0aNGnFG5848++yz3LFmaYn2tWvXLl555RVmvPlmifYjpaNH9+4888wzfPb555zfpUuJ9vXNN9+wavVqpk2bVqL9iIjI0Sr02XaHTbz/ft6ZP58//vijxPqw1jJhwgQGDRpEG50dVS5FRkby2KOPct9993HgwIES6yc9PZ17xo/n0UceIaYUJuYUEanolDwBNWvWZMKECYwdN459+/aVSB8zZ85k85Yt3DhmTIm0L8Ghc+fOXNi1K3ffcw9Op9Pv7btcLu6bMIGzzjyzVK6lJyIiSp6O6NWzJ5dcfDHDr7mG1NRUv7Y9/913eemll3jpf/8jMjLSr21L8Bk/fjwHDhzgnvHj/ZpAOZ1O7pswgV07d3L//ff7rV0REfGNkicvt99+O2efdRZXXnkla9asOeH2cnNzeeaZZ5g2bRozZsygYcOGfhilBLvIyEhe+t//2LFjBzfccAN79+494TZTU1O5+T//ISUlhVdeeYXo6MInbBURkZKl5MmLMYY777yT6667jquuuopnn3uO3Nzc42pr7dq19Ovfn19/+43577xDs2bN/DxaCWaxsbG88vLLNGnalB49e7Js2bLjbuvj5cvp3qMHCXXrMv211zQzvYhIKavwZ9sVpH///px55pncN2ECF3TtyuBBgxhwxRXUjIsrsp61lm+//ZbZc+bw448/cucddzBgwACdSl5BRUZGcs/dd3PxRRdx9z338MqrrzJkyBB6dO9OVFRUkXWzs7NZunQps2fPJnX/fp7573859dRTAzRyEREpipKnQiQkJDD9tddY6XAwe9YsLrzwQlq0aEFSUhKJiYnExcURFhpKZlYWG9avx+Fw8Psff1ClShWGDhnClMmTtYVAAPfs48uWLuWLL75g1uzZPPLII7Rv146kpCRat2lDZU+cZGRksGbtWlauXMmKFSto364do0ePpkuXLoSF6V9VRCRYGGttsRdu166dXbRwYcmNJoilp6fjcDhwJCezatUq0tLSyMvLIyoykkaNGpGUlERSUhJNmzatUFuamjVv/ou1tpMvdSpyHAHs3r2bFStW4HA4WLtuHYcOHgQgJjbWnaAnJtK+fXtq165dyiMNrOOJJRGR0qCfs8VUuXJlOnfuTOfOnUt7KFLGxcfH07Vr14DNRC4iIv6lA8ZFREREfKDkSURERMQHSp5EREREfKDkSURERMQHSp5EREREfKDkSURERMQHSp5EREREfKDkSURERMQHSp5EREREfKDkSURERMQHSp5EREREfKDkSURERMQHSp5EREREfKDkSURERMQHSp5EREREfKDkSURERMQHSp5EREREfGCstcVf2JjdwKaSG46UQY2stfG+VFAcSSF8jiURkdLgU/IkIiIiUtFpt52IiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID5Q8iYiIiPhAyZOIiIiID/4f6zlOz07vGP4AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig_title = \"Receptive fields\" # The title of the figure.\n", + "cell_idx_lst = np.arange(LSN_data.num_cells) # list or np.array. The cell numbers to be plotted.\n", + "polarity = 'ON' # 'ON', 'OFF', or 'both'. The polarity of the RFs to be plotted.\n", + "num_cols = 4 # int. The number of columns of the subplots.\n", + "label_peak = True # bool. If True, the pixel with max response will be labeled. The ON peaks are labeled with red dots and OFF peaks with blue dots.\n", + "show_CS_center = True # bool. If True, the CS center will be plotted.\n", + "contour_levels = [0.6] # list or array-like. The contour levels to be plotted. Examples: [], [0.5], [0.6, 0.8].\n", + "fig = LSN_data.plot_RFs(fig_title, cell_idx_lst, polarity, num_cols, label_peak, show_CS_center, contour_levels)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Analyze multiple sessions" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2021-05-03T10:58:34.826537Z", + "start_time": "2021-05-03T10:58:34.812736Z" + } + }, + "outputs": [], + "source": [ + "def analyze_RFs_all_sessions(datadir_path, savedir_path, LSN_stim_path, num_baseline_frames,\n", + " use_dff_z_score=False, correct_LSN=False, use_only_valid_eye_pos=False,\n", + " use_only_positive_responses=False, RF_type=\"Greedy pixelwise RF\", \n", + " RF_loc_thresh=0.8):\n", + " \"\"\"To analyze the RFs for all sessions within a folder.\n", + " \n", + " Parameters:\n", + " -----------\n", + " datadir_path : str\n", + " The path to the folder containing the data.\n", + " savedir_path : str\n", + " The path to the folder for saving the outputs.\n", + " LSN_stim_path : str\n", + " The path to the LSN stimulus npy file.\n", + " num_baseline_frames : int\n", + " The number of baseline frames before the start and after the end of a trial.\n", + " use_dff_z_score : bool\n", + " If True, the cell responses will be converted to z-score before analysis.\n", + " correct_LSN : bool\n", + " If True, the LSN stimulus corrected by eye positions will be used. Otherwise, the original LSN \n", + " stimulus will be used. The stimulus wlll remain unchanged for those frames without valid eye positions.\n", + " use_only_valid_eye_pos : bool\n", + " If True, only stimuli with valid eye positions are used. Otherwise, all stimuli will be used.\n", + " use_only_positive_responses : bool\n", + " If True, the fluorescence responses less than 0 will be set to 0 when computing the avg_responses.\n", + " RF_type : str\n", + " \"Greedy pixelwise RF\" or \"Trial averaged RF\". The type of RFs to be computed.\n", + " RF_loc_thresh : float\n", + " The threshold for deciding whether the RF is located within the center or surround or not.\n", + " \n", + " Returns\n", + " -------\n", + " chi_square_pvals_dict : dict\n", + " Dictionary containing the Chi-square p-values for all sessions.\n", + " RFs_dict : dict\n", + " Dictionary containing the ON and OFF RFs for all sessions.\n", + " ovl_idx_dict : dict\n", + " Dictionary containing the ON and OFF overlapping index for all sessions.\n", + " RF_loc_mask_dict : dict\n", + " Dictionary containing the RF location masks for different conditions for all sessions.\n", + " \"\"\"\n", + " chi_square_pvals_dict = {}\n", + " RFs_dict = {}\n", + " ovl_idx_dict = {}\n", + " RF_loc_mask_dict = {}\n", + " files = os.listdir(datadir_path)\n", + " for i, file in enumerate(files):\n", + " datafile_path = os.path.join(datadir_path, file)\n", + " metadata = rd.get_metadata(datafile_path)\n", + " LSN_data = LSN_analysis(datafile_path, LSN_stim_path, num_baseline_frames, use_dff_z_score, \n", + " correct_LSN, use_only_valid_eye_pos, use_only_positive_responses, \n", + " RF_type, RF_loc_thresh, verbose=False)\n", + " stim_sess = 'CS' if LSN_data._is_CS_session else 'Session'\n", + " session = '{} {}, ({}, {})'.format(stim_sess, metadata['session_ID'], metadata['area'], metadata['cre'])\n", + " chi_square_pvals_dict[session] = LSN_data.chi_square_pvals\n", + " RFs_dict[session] = {}\n", + " RFs_dict[session]['ON'] = LSN_data.ON_RFs\n", + " RFs_dict[session]['OFF'] = LSN_data.OFF_RFs\n", + " ovl_idx_dict[session] = {}\n", + " ovl_idx_dict[session]['ON'] = LSN_data.ON_overlap_idx\n", + " ovl_idx_dict[session]['OFF'] = LSN_data.OFF_overlap_idx\n", + " RF_loc_mask_dict[session] = LSN_data.location_mask_dict\n", + " print(\"{} ({}/{}) done.\".format(file, i+1, len(files)))\n", + " np.save(os.path.join(savedir_path, 'Chi_squares_p_val_all_sessions'), chi_square_pvals_dict)\n", + " np.save(os.path.join(savedir_path, 'final_RFs_all_sessions'), RFs_dict)\n", + " np.save(os.path.join(savedir_path, 'overlapping_index_all_sessions'), ovl_idx_dict)\n", + " np.save(os.path.join(savedir_path, 'RF_location_masks_thresh_{}'.format(RF_loc_thresh)), RF_loc_mask_dict)\n", + " return chi_square_pvals_dict, RFs_dict, ovl_idx_dict, RF_loc_mask_dict" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2021-05-03T17:49:04.455440Z", + "start_time": "2021-05-03T11:08:08.757422Z" + }, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Center_Surround_1010436210_data.h5 (1/37) done.\n", + "Center_Surround_989418742_data.h5 (2/37) done.\n", + "Center_Surround_986765043_data.h5 (3/37) done.\n", + "Center_Surround_1005201417_data.h5 (4/37) done.\n", + "Center_Surround_992742223_data.h5 (5/37) done.\n", + "Center_Surround_981714380_data.h5 (6/37) done.\n", + "Center_Surround_993230912_data.h5 (7/37) done.\n", + "Center_Surround_992260410_data.h5 (8/37) done.\n", + "Center_Surround_978206308_data.h5 (9/37) done.\n", + "Center_Surround_993675703_data.h5 (10/37) done.\n", + "Center_Surround_993777805_data.h5 (11/37) done.\n", + "Center_Surround_1012864690_data.h5 (12/37) done.\n", + "Center_Surround_990815631_data.h5 (13/37) done.\n", + "Center_Surround_1013163234_data.h5 (14/37) done.\n", + "Center_Surround_976085882_data.h5 (15/37) done.\n", + "Center_Surround_994732235_data.h5 (16/37) done.\n", + "Center_Surround_979264183_data.h5 (17/37) done.\n", + "Center_Surround_991976591_data.h5 (18/37) done.\n", + "Center_Surround_993944623_data.h5 (19/37) done.\n", + "Center_Surround_993256153_data.h5 (20/37) done.\n", + "Center_Surround_993994146_data.h5 (21/37) done.\n", + "Center_Surround_1006636506_data.h5 (22/37) done.\n", + "Center_Surround_993269234_data.h5 (23/37) done.\n", + "Center_Surround_992419828_data.h5 (24/37) done.\n", + "Center_Surround_995545810_data.h5 (25/37) done.\n", + "Center_Surround_974290613_data.h5 (26/37) done.\n", + "Center_Surround_1010368135_data.h5 (27/37) done.\n", + "Center_Surround_1004747593_data.h5 (28/37) done.\n", + "Center_Surround_1012847933_data.h5 (29/37) done.\n", + "Center_Surround_1002937736_data.h5 (30/37) done.\n", + "Center_Surround_992698474_data.h5 (31/37) done.\n", + "Center_Surround_990548570_data.h5 (32/37) done.\n", + "Center_Surround_1010686440_data.h5 (33/37) done.\n", + "Center_Surround_1011892173_data.h5 (34/37) done.\n", + "Center_Surround_978322303_data.h5 (35/37) done.\n", + "Center_Surround_994865495_data.h5 (36/37) done.\n", + "Center_Surround_976474801_data.h5 (37/37) done.\n" + ] + } + ], + "source": [ + "data_dir = '/home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/new_data/Soma Data/Center_Surround'\n", + "LSN_stim_path = '/home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/openscope_surround-master/stimulus/sparse_noise_8x14.npy'\n", + "save_dir = '/home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/analysed_data/greedy_RFs'\n", + "num_baseline_frames = 10 # int or None. The number of baseline frames before the start and after the end of a trial.\n", + "use_dff_z_score = False\n", + "correct_LSN = False # If True, the LSN stimulus corrected by eye positions will be used.\n", + "use_only_valid_eye_pos = False # Use False for greedy pixelwise RF.\n", + "use_only_positive_responses = False # If True, the fluorescence responses less than 0 will be set to 0 when computing the avg_responses.\n", + "RF_type = \"Greedy pixelwise RF\" # \"Greedy pixelwise RF\" or \"Trial averaged RF\". The type of RFs to be computed.\n", + "RF_loc_thresh = 0.8 # The threshold for deciding whether the RF is located within the center or surround or not.\n", + "\n", + "(chi_square_pvals_dict, RFs_dict, ovl_idx_dict, \n", + " RF_loc_mask_dict) = analyze_RFs_all_sessions(data_dir, save_dir, LSN_stim_path, num_baseline_frames, \n", + " use_dff_z_score, correct_LSN, use_only_valid_eye_pos, \n", + " use_only_positive_responses, RF_type, RF_loc_thresh)" + ] + } + ], + "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.8.5" + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/analysis/compute_and_plot_RFs.py b/analysis/compute_and_plot_RFs.py new file mode 100644 index 0000000..2e2802f --- /dev/null +++ b/analysis/compute_and_plot_RFs.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Wed Jul 22 05:34:22 2020 + +@author: kailun +""" + +import numpy as np +from oscopetools.LSN_analysis import LSN_analysis + +# The path to the data file. +datafile_path = '/home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/Multiplex/Center_Surround_976474801_data.h5' +# The path to the LSN stimulus npy file. +LSN_stim_path = '/home/kailun/Desktop/PhD/other_projects/surround_suppression_neural_code/openscope_surround-master/stimulus/sparse_noise_8x14.npy' +num_baseline_frames = 3 # int or None. The number of baseline frames before the start and after the end of a trial. +use_dff_z_score = False # True or False. If True, the cell responses will be converted to z-score before analysis. + +# To initialize the analysis. +LSN_data = LSN_analysis(datafile_path, LSN_stim_path, num_baseline_frames, use_dff_z_score) + +#%% +# To get an overview of the data. +print(LSN_data) + +#%% +# Other variables (RFs, ON/OFF responses, etc.) will be automatically updated. +correct_LSN = False # If True, the LSN stimulus corrected by eye positions will be used. Otherwise, the original LSN stimulus will be used. +LSN_data.correct_LSN_by_eye_pos(correct_LSN) + +#%% +# Other variables (RFs, ON/OFF responses, etc.) will be automatically updated. +use_only_valid_eye_pos = False # If True, only stimuli with valid eye positions are used. Otherwise, all stimuli will be used. +LSN_data.use_valid_eye_pos(use_only_valid_eye_pos) + +#%% +# Other variables (RFs, ON/OFF responses, etc.) will be automatically updated. +use_only_positive_responses = False # If True, the fluorescence responses less than 0 will be set to 0 when computing the avg_responses. +LSN_data.use_positive_fluo(use_only_positive_responses) + +#%% +# The RFs are computed during initialization with default parameters. Here, we can change the threshold and integration window for RFs. +# To compute the RFs by using different thresholds (default = 0) and different integration windows by adjusting the window_start (shifting) +# and window_len (length of the integration window). + +threshold = 0. # int or float, range = [0, 1]. The threshold for the RF, anything below the threshold will be set to 0. +window_start = None # int or None. The start index (within a trial) of the integration window for computing the RFs. +window_len = None # int or None. The length of the integration window in frames for computing the RFs. +LSN_data.get_RFs(threshold, window_start, window_len) + +#%% +# To plot the RFs. +fig_title = "Receptive fields" # The title of the figure. +cell_idx_lst = np.arange(100) # list or np.array. The cell numbers to be plotted. +polarity = 'both' # 'ON', 'OFF', or 'both'. The polarity of the RFs to be plotted. +num_cols = 10 # int. The number of columns of the subplots. +label_peak = True # bool. If True, the pixel with max response will be labeled. The ON peaks are labeled with red dots and OFF peaks with blue dots. +contour_levels = [0.6] # list or array-like. The contour levels to be plotted. Examples: [], [0.5], [0.6, 0.8]. +LSN_data.plot_RFs(fig_title, cell_idx_lst, polarity, num_cols, label_peak, contour_levels) + +#%% +# To plot the trial-averaged responses within pixels (all pixels of the LSN stimulus) for a cell. +# Other keyword arguments can be added for plt.plot(). +polarity = 'ON' # 'ON' or 'OFF'. The polarity of the responses to be plotted. +cell_idx = 10 # The cell index to be plotted. +num_std = 2 # int or float. Number of standard deviation from mean for plotting the horizontal span. +LSN_data.plot_pixel_avg_dff_traces(polarity, cell_idx, num_std) \ No newline at end of file diff --git a/analysis/example_code/locally_sparse_noise_events.py b/analysis/example_code/locally_sparse_noise_events.py index fdcc35a..c71e5a4 100644 --- a/analysis/example_code/locally_sparse_noise_events.py +++ b/analysis/example_code/locally_sparse_noise_events.py @@ -24,63 +24,32 @@ class LocallySparseNoise: def __init__(self, session_id): self.session_id = session_id - save_path_head = core.get_save_path() + save_path_head = # TODO self.save_path = os.path.join(save_path_head, 'LocallySparseNoise') - self.l0_events = core.get_L0_events(self.session_id) + + f = h5py.File(dff_path, 'r') + self.dff = f['data'][()] + f.close() + self.stim_table_sp, _, _ = core.get_stim_table( self.session_id, 'spontaneous' ) - self.dxcm = core.get_running_speed(self.session_id) - try: - lsn_name = 'locally_sparse_noise' - ( - self.stim_table, - self.numbercells, - self.specimen_ids, - ) = core.get_stim_table(self.session_id, lsn_name) - self.LSN = core.get_stimulus_template(self.session_id, lsn_name) - ( - self.sweep_events, - self.mean_sweep_events, - self.sweep_p_values, - self.running_speed, - self.response_events_on, - self.response_events_off, - ) = self.get_stimulus_response(self.LSN) - except: - lsn_name = 'locally_sparse_noise_4deg' - ( - self.stim_table, - self.numbercells, - self.specimen_ids, - ) = core.get_stim_table(self.session_id, lsn_name) - self.LSN_4deg = core.get_stimulus_template( - self.session_id, lsn_name - ) - ( - self.sweep_events_4deg, - self.mean_sweep_events_4deg, - self.sweep_p_values_4deg, - self.running_speed_4deg, - self.response_events_on_4deg, - self.response_events_off_4deg, - ) = self.get_stimulus_response(self.LSN_4deg) - lsn_name = 'locally_sparse_noise_8deg' - self.stim_table, _, _ = core.get_stim_table( - self.session_id, lsn_name - ) - self.LSN_8deg = core.get_stimulus_template( - self.session_id, lsn_name - ) - ( - self.sweep_events_8deg, - self.mean_sweep_events_8deg, - self.sweep_p_values_8deg, - self.running_speed_8deg, - self.response_events_on_8deg, - self.response_events_off_8deg, - ) = self.get_stimulus_response(self.LSN_8deg) + lsn_name = 'locally_sparse_noise' + ( + self.stim_table, + self.numbercells, + self.specimen_ids, + ) = core.get_stim_table(self.session_id, lsn_name) + self.LSN = core.get_stimulus_template(self.session_id, lsn_name) + ( + self.sweep_events, + self.mean_sweep_events, + self.sweep_p_values, + self.running_speed, + self.response_events_on, + self.response_events_off, + ) = self.get_stimulus_response(self.LSN) self.peak = self.get_peak(lsn_name) self.save_data(lsn_name) @@ -100,20 +69,14 @@ def get_stimulus_response(self, LSN): ''' sweep_events = pd.DataFrame( index=self.stim_table.index.values, - columns=np.array(list(range(self.numbercells))).astype(str), - ) - running_speed = pd.DataFrame( - index=self.stim_table.index.values, - columns=('running_speed', 'null'), + columns=np.array(range(self.numbercells)).astype(str), ) + for index, row in self.stim_table.iterrows(): for nc in range(self.numbercells): sweep_events[str(nc)][index] = self.l0_events[ nc, int(row.start) - 28 : int(row.start) + 35 ] - running_speed.running_speed[index] = self.dxcm[ - int(row.start) : int(row.start) + 7 - ].mean() mean_sweep_events = sweep_events.applymap(do_sweep_mean_shifted) @@ -284,4 +247,7 @@ def save_data(self, lsn_name): if __name__ == '__main__': session_id = 569611979 + dff_path = ( + r'/Volumes/My Passport/Openscope Multiplex/891653201/892006924_dff.h5' + ) lsn = LocallySparseNoise(session_id=session_id) diff --git a/analysis/get_all_data.py b/analysis/get_all_data.py index 9e86971..d576585 100644 --- a/analysis/get_all_data.py +++ b/analysis/get_all_data.py @@ -11,13 +11,14 @@ import json import h5py from PIL import Image -from stim_table import create_stim_tables, get_center_coordinates -from RunningData import get_running_data -from get_eye_tracking import align_eye_tracking +from oscopetools.stim_table import create_stim_tables, get_center_coordinates +from oscopetools.RunningData import get_running_data +from oscopetools.get_eye_tracking import align_eye_tracking + def get_all_data(path_name, save_path, expt_name, row): - - #get access to sub folders + + # get access to sub folders for f in os.listdir(path_name): if f.startswith('ophys_experiment'): expt_path = os.path.join(path_name, f) @@ -29,25 +30,25 @@ def get_all_data(path_name, save_path, expt_name, row): for f in os.listdir(proc_path): if f.startswith('ophys_cell_segmentation_run'): roi_path = os.path.join(proc_path, f) - - #ROI table + + # ROI table for fname in os.listdir(expt_path): if fname.endswith('output_cell_roi_creation.json'): - jsonpath= os.path.join(expt_path, fname) + jsonpath = os.path.join(expt_path, fname) with open(jsonpath, 'r') as f: jin = json.load(f) f.close() break - roi_locations = pd.DataFrame.from_dict(data = jin['rois'], orient='index') - roi_locations.drop(columns=['exclude_code','mask_page'], inplace=True) #removing columns I don't think we need - roi_locations.reset_index(inplace=True) - - session_id = int( - path_name.split('/')[-1] - ) + roi_locations = pd.DataFrame.from_dict(data=jin['rois'], orient='index') + roi_locations.drop( + columns=['exclude_code', 'mask_page'], inplace=True + ) # removing columns I don't think we need + roi_locations.reset_index(inplace=True) + + session_id = int(path_name.split('/')[-1]) roi_locations['session_id'] = session_id - - #dff traces + + # dff traces for f in os.listdir(expt_path): if f.endswith('_dff.h5'): dff_path = os.path.join(expt_path, f) @@ -55,87 +56,60 @@ def get_all_data(path_name, save_path, expt_name, row): dff = f['data'].value f.close() - #raw fluorescence & cell ids + # raw fluorescence & cell ids for f in os.listdir(proc_path): - if f.endswith('roi_traces.h5'): - traces_path = os.path.join(proc_path, f) - f = h5py.File(traces_path, 'r') - raw_traces = f['data'][()] - cell_ids = f['roi_names'][()].astype(str) - f.close() - roi_locations['cell_id'] = cell_ids - - #eyetracking + if f.endswith('roi_traces.h5'): + traces_path = os.path.join(proc_path, f) + f = h5py.File(traces_path, 'r') + raw_traces = f['data'][()] + cell_ids = f['roi_names'][()].astype(str) + f.close() + roi_locations['cell_id'] = cell_ids + + # eyetracking for fn in os.listdir(eye_path): if fn.endswith('mapping.h5'): dlc_file = os.path.join(eye_path, fn) for f in os.listdir(expt_path): if f.endswith('time_synchronization.h5'): - temporal_alignment_file = os.path.join(expt_path, f) + temporal_alignment_file = os.path.join(expt_path, f) eye_sync = align_eye_tracking(dlc_file, temporal_alignment_file) -# pupil_area = pd.read_hdf(dlc_file, 'raw_pupil_areas') -# eye_area = pd.read_hdf(dlc_file, 'raw_eye_areas') -# pos = pd.read_hdf(dlc_file, 'raw_screen_coordinates_spherical') -# -# ##temporal alignment -# f = h5py.File(temporal_alignment_file, 'r') -# eye_frames = f['eye_tracking_alignment'].value -# f.close() -# eye_frames = eye_frames.astype(int) -# eye_frames = eye_frames[np.where(eye_frames>0)] -# -# eye_area_sync = eye_area[eye_frames] -# pupil_area_sync = pupil_area[eye_frames] -# x_pos_sync = pos.x_pos_deg.values[eye_frames] -# y_pos_sync = pos.y_pos_deg.values[eye_frames] -# -# ##correcting dropped camera frames -# test = eye_frames[np.isfinite(eye_frames)] -# test = test.astype(int) -# temp2 = np.bincount(test) -# dropped_camera_frames = np.where(temp2>2)[0] -# for a in dropped_camera_frames: -# null_2p_frames = np.where(eye_frames==a)[0] -# eye_area_sync[null_2p_frames] = np.NaN -# pupil_area_sync[null_2p_frames] = np.NaN -# x_pos_sync[null_2p_frames] = np.NaN -# y_pos_sync[null_2p_frames] = np.NaN -# -# eye_sync = pd.DataFrame(data=np.vstack((eye_area_sync, pupil_area_sync, x_pos_sync, y_pos_sync)).T, columns=('eye_area','pupil_area','x_pos_deg','y_pos_deg')) - - #max projection + + # max projection mp_path = os.path.join(proc_path, 'max_downsample_4Hz_0.png') mp = Image.open(mp_path) mp_array = np.array(mp) - #ROI masks outlines + # ROI masks outlines boundary_path = os.path.join(roi_path, 'maxInt_boundary.png') boundary = Image.open(boundary_path) boundary_array = np.array(boundary) - - #stimulus table - stim_table = create_stim_tables(path_name) #returns dictionary. Not sure how to save dictionary so pulling out each dataframe - #running speed + # stimulus table + stim_table = create_stim_tables( + path_name + ) # returns dictionary. Not sure how to save dictionary so pulling out each dataframe + + # running speed dxds, startdate = get_running_data(path_name) - #pad end with NaNs to match length of dff + # pad end with NaNs to match length of dff nframes = dff.shape[1] - dxds.shape[0] dx = np.append(dxds, np.repeat(np.NaN, nframes)) - - #remove traces with NaNs from dff, roi_table, and roi_masks + + # remove traces with NaNs from dff, roi_table, and roi_masks roi_locations['roi_mask_id'] = range(len(roi_locations)) - to_keep = np.where(np.isfinite(dff[:,0]))[0] - to_del = np.where(np.isnan(dff[:,0]))[0] - roi_locations['finite'] = np.isfinite(dff[:,0]) + to_keep = np.where(np.isfinite(dff[:, 0]))[0] + to_del = np.where(np.isnan(dff[:, 0]))[0] + roi_locations['finite'] = np.isfinite(dff[:, 0]) roi_trimmed = roi_locations[roi_locations.finite] roi_trimmed.reset_index(inplace=True) - - new_dff = dff[to_keep,:] - + + new_dff = dff[to_keep, :] + for i in to_del: - boundary_array[np.where(boundary_array==i)] = 0 - - #meta data + boundary_array[np.where(boundary_array == i)] = 0 + + # meta data meta_data = {} meta_data['mouse_id'] = row.Mouse_ID meta_data['area'] = row.Area @@ -144,16 +118,18 @@ def get_all_data(path_name, save_path, expt_name, row): meta_data['container_ID'] = row.Container_ID meta_data['session_ID'] = session_id meta_data['startdate'] = startdate - - #Save Data - save_file = os.path.join(save_path, expt_name+'_'+str(session_id)+'_data.h5') + + # Save Data + save_file = os.path.join( + save_path, expt_name + '_' + str(session_id) + '_data.h5' + ) print("Saving data to: ", save_file) store = pd.HDFStore(save_file) store['roi_table'] = roi_trimmed for key in stim_table.keys(): store[key] = stim_table[key] store['eye_tracking'] = eye_sync - + store.close() f = h5py.File(save_file, 'r+') dset = f.create_dataset('dff_traces', data=new_dff) @@ -163,16 +139,18 @@ def get_all_data(path_name, save_path, expt_name, row): dset4 = f.create_dataset('roi_outlines', data=boundary_array) dset5 = f.create_dataset('running_speed', data=dx) dset6 = f.create_dataset('meta_data', data=str(meta_data)) - f.close() + f.close() return -if __name__=='__main__': - manifest = pd.read_csv(r'/Users/saskiad/Documents/Openscope/2019/Surround suppression/Final dataset/data manifest.csv') +if __name__ == '__main__': + manifest = pd.read_csv( + r'/Users/saskiad/Documents/Openscope/2019/Surround suppression/Final dataset/data manifest.csv' + ) save_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim' - soma = manifest[manifest.Target=='soma'] + soma = manifest[manifest.Target == 'soma'] for index, row in soma.iterrows(): - if np.mod(index, 10)==0: + if np.mod(index, 10) == 0: print(index) expt_id = row.Center_Surround_Expt_ID if np.isfinite(expt_id): @@ -189,16 +167,10 @@ def get_all_data(path_name, save_path, expt_name, row): expt_name = 'Size_Tuning' path_name = os.path.join(r'/Volumes/New Volume', str(int(expt_id))) get_all_data(path_name, save_path, expt_name, row) -# +# # row = manifest.loc[27] # expt_id = row.Center_Surround_Expt_ID # path_name = os.path.join(r'/Volumes/New Volume', str(int(expt_id)))#975348996' # expt_name = 'Multiplex' # save_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim' # get_all_data(path_name, save_path, expt_name, row) - - - - - - diff --git a/analysis/get_eye_tracking.py b/analysis/get_eye_tracking.py deleted file mode 100644 index 6da346f..0000000 --- a/analysis/get_eye_tracking.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Mon Jun 8 16:28:23 2020 - -@author: saskiad -""" -import pandas as pd -import numpy as np -import h5py - - -def align_eye_tracking(dlc_file, temporal_alignment_file): - pupil_area = pd.read_hdf(dlc_file, 'raw_pupil_areas').values - eye_area = pd.read_hdf(dlc_file, 'raw_eye_areas').values - pos = pd.read_hdf(dlc_file, 'raw_screen_coordinates_spherical') - - ##temporal alignment - f = h5py.File(temporal_alignment_file, 'r') - eye_frames = f['eye_tracking_alignment'][()] - f.close() - eye_frames = eye_frames.astype(int) - eye_frames = eye_frames[np.where(eye_frames > 0)] - - eye_area_sync = eye_area[eye_frames] - pupil_area_sync = pupil_area[eye_frames] - x_pos_sync = pos.x_pos_deg.values[eye_frames] - y_pos_sync = pos.y_pos_deg.values[eye_frames] - - ##correcting dropped camera frames - test = eye_frames[np.isfinite(eye_frames)] - test = test.astype(int) - temp2 = np.bincount(test) - dropped_camera_frames = np.where(temp2 > 2)[0] - for a in dropped_camera_frames: - null_2p_frames = np.where(eye_frames == a)[0] - eye_area_sync[null_2p_frames] = np.NaN - pupil_area_sync[null_2p_frames] = np.NaN - x_pos_sync[null_2p_frames] = np.NaN - y_pos_sync[null_2p_frames] = np.NaN - - eye_sync = pd.DataFrame( - data=np.vstack( - (eye_area_sync, pupil_area_sync, x_pos_sync, y_pos_sync) - ).T, - columns=('eye_area', 'pupil_area', 'x_pos_deg', 'y_pos_deg'), - ) - return eye_sync - - -if __name__ == '__main__': - dlc_file = r'/Volumes/New Volume/1010368135/eye_tracking/1010368135_eyetracking_dlc_to_screen_mapping.h5' - temporal_alignment_file = r'/Volumes/New Volume/1010368135/ophys_experiment_1010535819/1010535819_time_synchronization.h5' - eye_sync = (dlc_file, temporal_alignment_file) diff --git a/analysis/inspect_center_surround_eyetracking.ipynb b/analysis/inspect_center_surround_eyetracking.ipynb new file mode 100644 index 0000000..885dcef --- /dev/null +++ b/analysis/inspect_center_surround_eyetracking.ipynb @@ -0,0 +1,194 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/eharkin/miniconda3/envs/oscope/lib/python3.8/site-packages/pims/image_reader.py:26: RuntimeWarning: PIMS image_reader.py could not find scikit-image. Falling back to matplotlib's imread(), which uses floats instead of integers. This may break your scripts. \n", + "(To ignore this warning, include the line \"warnings.simplefilter(\"ignore\", RuntimeWarning)\" in your script.)\n", + " warnings.warn(RuntimeWarning(ski_preferred))\n" + ] + } + ], + "source": [ + "import os\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.gridspec as gs\n", + "import seaborn as sns\n", + "import numpy as np\n", + "\n", + "from oscopetools import read_data as rd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "DATA_PATH = '/data/eharkin/openscope2019_data/center_surround'\n", + "IMG_PATH = '/data/eharkin/openscope2019_data/plots/behaviour_summary'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "eyetracking = [\n", + " rd.get_eye_tracking(os.path.join(DATA_PATH, fname)) \n", + " for fname in os.listdir(DATA_PATH) \n", + " if fname.endswith('.h5')\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "bins = np.logspace(-4.5, -0.5)\n", + "\n", + "plt.figure(figsize=(6, 6))\n", + "\n", + "all_ax = plt.subplot(211)\n", + "all_ax.set_xscale('log')\n", + "all_ax.set_title('Pupil area, all center-surround sessions')\n", + "\n", + "sessions = []\n", + "for et in eyetracking:\n", + " sessions.append(et.data['pupil_area'].to_numpy())\n", + " \n", + "all_ax.hist(np.concatenate(sessions), bins=bins)\n", + "all_ax.set_yticks([])\n", + "all_ax.set_xlabel('Pupil area')\n", + "\n", + "individual_ax = plt.subplot(212)\n", + "individual_ax.set_title('Individual center-surround sessions')\n", + "individual_ax.imshow(np.array([np.histogram(sess, bins=bins)[0] for sess in sessions]), aspect='auto')\n", + "individual_ax.set_xticks([])\n", + "individual_ax.set_yticks([])\n", + "individual_ax.set_ylabel('Sessions')\n", + "individual_ax.set_xlabel('Pupil area (same scale as above)')\n", + "\n", + "plt.tight_layout()\n", + "\n", + "plt.savefig(os.path.join(IMG_PATH, 'pupil_area_center_surround.png'), dpi=600)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "bins = np.linspace(-30, 30)\n", + "\n", + "plt.figure(figsize=(6, 6))\n", + "plt.suptitle('Eye position')\n", + "\n", + "all_x_ax = plt.subplot(221)\n", + "individual_x_ax = plt.subplot(223)\n", + "all_y_ax = plt.subplot(222)\n", + "individual_y_ax = plt.subplot(224)\n", + "\n", + "sessions = {\n", + " 'x': [],\n", + " 'y': []\n", + "}\n", + "\n", + "for et in eyetracking:\n", + " sessions['x'].append(et.data['x_pos_deg'].to_numpy())\n", + " sessions['y'].append(et.data['y_pos_deg'].to_numpy())\n", + " \n", + "all_x_ax.hist(np.concatenate(sessions['x']), bins=bins)\n", + "all_x_ax.set_title('All center-surround sessions pooled', loc='left')\n", + "all_x_ax.set_yticks([])\n", + "all_x_ax.set_xlabel('x position (deg)')\n", + "individual_x_ax.imshow(np.array([np.histogram(sess, bins=bins)[0] for sess in sessions['x']]), aspect='auto')\n", + "individual_x_ax.set_title('Individual center-surround sessions', loc='left')\n", + "individual_x_ax.set_ylabel('Sessions')\n", + "individual_x_ax.set_yticks([])\n", + "individual_x_ax.set_xticks([])\n", + "\n", + "all_y_ax.hist(np.concatenate(sessions['y']), bins=bins)\n", + "all_y_ax.set_yticks([])\n", + "all_y_ax.set_xlabel('y position (deg)')\n", + "individual_y_ax.imshow(np.array([np.histogram(sess, bins=bins)[0] for sess in sessions['y']]), aspect='auto')\n", + "individual_y_ax.set_yticks([])\n", + "individual_y_ax.set_xticks([])\n", + "\n", + "plt.tight_layout()\n", + "plt.subplots_adjust(top=0.85)\n", + "\n", + "plt.savefig(os.path.join(IMG_PATH, 'eye_position_center_surround.png'), dpi=600)\n", + "plt.show()" + ] + }, + { + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/analysis/orientation_plots.py b/analysis/orientation_plots.py new file mode 100644 index 0000000..0f3e6ae --- /dev/null +++ b/analysis/orientation_plots.py @@ -0,0 +1,211 @@ +import os +import argparse + +from tqdm import tqdm +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.gridspec as gs + +from oscopetools import read_data as rd + +parser = argparse.ArgumentParser() +parser.add_argument( + 'DATA_PATH', help='Path to folder with center-surround data files.' +) +parser.add_argument( + '-o', '--output', help='Path to folder in which to place diagnostic plots.' +) + +args = parser.parse_args() + + +def _complete_circle(ls): + """Close a circular list. Use to join 0 deg and 360 deg in polar plots.""" + ls.append(ls[0]) + + +# Define placement of plots +## Define gridspec layout +row_spec = gs.GridSpec( + 2, + 1, + left=0.1, + top=0.9, + bottom=0.1, + right=0.95, + hspace=0.35, + height_ratios=[0.7, 0.3], +) +top_spec = gs.GridSpecFromSubplotSpec( + 1, 3, row_spec[0, :], width_ratios=[0.65, 0.2, 0.15], wspace=0.3 +) +mean_spec = gs.GridSpecFromSubplotSpec( + 2, 4, top_spec[:, 0], wspace=0.45, hspace=0.5 +) +max_resp_spec = gs.GridSpecFromSubplotSpec(1, 3, row_spec[1, :], wspace=0.3) + +## Get lists to use for placing plots. +## Gridspecs can be safely ignored from here on. +mean_slots = [mean_spec[i // 4, i % 4] for i in range(8)] +polar_slot = top_spec[:, 1] +waterfall_slot = top_spec[:, 2] +max_resp_slots = [max_resp_spec[0, i] for i in range(3)] + +del row_spec, top_spec, mean_spec, max_resp_spec + +# Make a set of plots for each file. + +STIM_TIME_WINDOW = (0, 2) + +# ITERATE OVER FILES +for dfile in os.listdir(args.DATA_PATH): + if not dfile.endswith('.h5'): + continue + + stim_table = rd.get_stimulus_table( + os.path.join(args.DATA_PATH, dfile), 'center_surround', + ) + dff_fluo = rd.get_dff_traces(os.path.join(args.DATA_PATH, dfile)) + dff_fluo.z_score() # Convert to Z-score + trial_fluo = dff_fluo.cut_by_trials(stim_table, num_baseline_frames=30) + + # ITERATE OVER ALL CELLS IN A FILE + for cell_num, cell_fluo in tqdm(trial_fluo.iter_cells()): + + plt.figure(figsize=(9, 7)) + plt.suptitle('{} cell {}'.format(dfile.strip('.h5'), cell_num)) + + # Create a set of axes for plotting the mean response of each cell + mean_axes = [plt.subplot(mean_slots[0])] + mean_axes.extend( + [plt.subplot(spec, sharey=mean_axes[0]) for spec in mean_slots[1:]] + ) + + # Plot the mean response for each surround condition, + # and collect the max response for each condition at the same time. + # (Use this later to plot the preferred orientation of each cell.) + orientations = [] + max_responses = { + 'no_surround': [], + 'ortho_surround': [], + 'iso_surround': [], + } + for i, ori in enumerate(rd.Orientation): + mean_axes[i].set_title(str(int(ori))) + orientations.append(ori) + + ## Plot NO-SURROUND trials + no_surround = stim_table['center_surround'].apply( + lambda x: (x.center_orientation == ori) + and x.surround_is_empty() + ) + no_surround_trials = cell_fluo.get_trials(no_surround) + no_surround_trials.plot(ax=mean_axes[i], alpha=0.7) + max_responses['no_surround'].append( + no_surround_trials.get_time_range(*STIM_TIME_WINDOW) + .trial_mean() + .data.max() + ) + + ## Plot ORTHOGONAL surround trials + ortho_surround = stim_table['center_surround'].apply( + lambda x: (x.center_orientation == ori) + and (x.surround_orientation in ori.orthogonal()) + ) + ortho_surround_trials = cell_fluo.get_trials(ortho_surround) + ortho_surround_trials.plot(ax=mean_axes[i], alpha=0.7) + max_responses['ortho_surround'].append( + ortho_surround_trials.get_time_range(*STIM_TIME_WINDOW) + .trial_mean() + .data.max() + ) + + ## Plot ISO surround trials + iso_surround = stim_table['center_surround'].apply( + lambda x: (x.center_orientation == ori) + and (x.surround_orientation == x.center_orientation) + ) + iso_surround_trials = cell_fluo.get_trials(iso_surround) + iso_surround_trials.plot(ax=mean_axes[i], alpha=0.7) + max_responses['iso_surround'].append( + iso_surround_trials.get_time_range(*STIM_TIME_WINDOW) + .trial_mean() + .data.max() + ) + + mean_axes[i].legend().remove() + if i < 4: + mean_axes[i].set_xlabel('') + if (i % 4) == 0: + mean_axes[i].set_ylabel('Z-score') + + # Polar plot of angular tuning + ## Link 0 deg and 360 deg inplace with `_complete_circle` + _complete_circle(orientations) + orientations_in_rad = [ori.radians for ori in orientations] + {_complete_circle(val) for val in max_responses.values()} + + polar_ax = plt.subplot(polar_slot, polar=True) + polar_ax.set_title( + 'Max resp. in {} window'.format(STIM_TIME_WINDOW), + pad=25 + ) + for surround_condition in max_responses: + polar_ax.fill_between( + orientations_in_rad, + np.zeros_like(orientations_in_rad), + np.clip(max_responses[surround_condition], 0, np.inf), + alpha=0.5, + ) + polar_ax.plot( + orientations_in_rad, + np.clip(max_responses[surround_condition], 0, np.inf), + label=surround_condition, + ) + polar_ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.2)) + + # Plot all trials in chronological order + water_ax = plt.subplot(waterfall_slot) + water_ax.set_title('All trials') + water_ax.imshow(cell_fluo.data.squeeze(), aspect='auto') + water_ax.set_yticks([]) + water_ax.set_xticks([]) + + # Plot trial-resolved response for preferred orientation + preferred_orientation = orientations[ + np.argmax(max_responses['iso_surround']) + ] + surround_orientations = { + 'no surr': [rd.Orientation(None)], + 'ortho surr': preferred_orientation.orthogonal(), + 'iso surr': [preferred_orientation], + } + + for (surr_condition, surr_orientations_), plot_slot in zip( + surround_orientations.items(), max_resp_slots + ): + trial_resolved_ax = plt.subplot(plot_slot) + trial_resolved_ax.set_title( + 'Center {} + {}'.format(int(preferred_orientation), surr_condition) + ) + + trial_mask = stim_table['center_surround'].apply( + lambda x: (x.center_orientation == preferred_orientation) + and (x.surround_orientation in surr_orientations_) + ) + trial_resolved_ax.plot( + cell_fluo.time_vec, + cell_fluo.get_trials(trial_mask).data.squeeze().T, + 'k-', + alpha=0.5, + ) + trial_resolved_ax.set_xlabel('Time (s)') + trial_resolved_ax.set_ylabel('Z-score') + + plt.savefig( + os.path.join( + args.output, '{}_{}.png'.format(dfile.strip('.h5'), cell_num) + ), + dpi=600, + ) + plt.close() diff --git a/analysis/plotting_size_tuning.ipynb b/analysis/plotting_size_tuning.ipynb new file mode 100644 index 0000000..c8a245b --- /dev/null +++ b/analysis/plotting_size_tuning.ipynb @@ -0,0 +1,449 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "import os\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "metrics = pd.read_csv(r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/analysis/tf/size_metrics_all.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "analysis_file_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/analysis/tf'" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import h5py" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "sizevals = [30,52,67,79,120]\n", + "orivals = range(0,360,45)\n", + "tfvals = [1,2]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "session_id = 976843461" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "analysis_file = os.path.join(analysis_file_path, str(session_id)+'_st_analysis.h5')\n", + "expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Size_Tuning_'+str(session_id)+'_data.h5'" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "f = h5py.File(analysis_file, 'r')\n", + "response = f['response'][()]\n", + "f.close()\n", + "sweep_response = pd.read_hdf(analysis_file, 'sweep_response')\n", + "stim_table = pd.read_hdf(expt_path, 'drifting_gratings_size')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(8, 2, 6, 112, 4)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "response.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(response[:,0,:,1,0])" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "orivals = range(0,360,45)\n", + "tfvals = [1.,2.]\n", + "sizevals = [30,52,67,79,120]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "from allensdk.brain_observatory.observatory_plots import plot_mask_outline" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/saskiad/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:2: FutureWarning: \n", + ".ix is deprecated. Please use\n", + ".loc for label based indexing or\n", + ".iloc for positional indexing\n", + "\n", + "See the documentation here:\n", + "http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#ix-indexer-is-deprecated\n", + " \n", + "/Users/saskiad/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:6: FutureWarning: \n", + ".ix is deprecated. Please use\n", + ".loc for label based indexing or\n", + ".iloc for positional indexing\n", + "\n", + "See the documentation here:\n", + "http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#ix-indexer-is-deprecated\n", + " \n" + ] + } + ], + "source": [ + "metrics['responsive'] = False\n", + "metrics.ix[metrics.peak_percent_trials>0.25, 'responsive'] = True\n", + "\n", + "metrics.dir_percent/=50.\n", + "metrics['responsive_2'] = False\n", + "metrics.ix[metrics.dir_percent>0.6, 'responsive_2'] = True" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Unnamed: 0', 'cell_index', 'dir', 'tf', 'prefsize', 'osi', 'dsi',\n", + " 'dir_percent', 'peak_mean', 'peak_std', 'blank_mean', 'blank_std',\n", + " 'peak_percent_trials', 'cell_id', 'session_id', 'valid', 'cre', 'area',\n", + " 'depth', 'responsive', 'responsive_2'],\n", + " dtype='object')" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "metrics.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "keys1 = ['valid','responsive','responsive_2','cell_index','cell_id', 'session_id', 'cre', 'area', 'depth', \n", + " 'dir', 'tf', 'prefsize', 'osi', 'dsi', 'peak_mean','peak_std','blank_mean','blank_std', 'peak_percent_trials','dir_percent']\n", + "\n", + "valid = metrics#[metrics_rf.valid]\n", + "for index, row in valid.iterrows():\n", + " cell_id = row.cell_id\n", + " session_id = row.session_id\n", + " cell_index = row.cell_index\n", + " pref_ori = orivals[int(row.dir)]\n", + " pref_tf = tfvals[int(row.tf)]\n", + " pref_size = sizevals[int(row.prefsize-1)]\n", + "# print(row.prefsize, pref_size)\n", + " \n", + " analysis_file = os.path.join(analysis_file_path, str(session_id)+'_st_analysis.h5')\n", + " expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Size_Tuning_'+str(session_id)+'_data.h5'\n", + " \n", + " f = h5py.File(analysis_file, 'r')\n", + " response = f['response'][()]\n", + " f.close()\n", + " sweep_response = pd.read_hdf(analysis_file, 'sweep_response')\n", + " stim_table = pd.read_hdf(expt_path, 'drifting_gratings_size')\n", + " \n", + " f = h5py.File(expt_path, 'r')\n", + " mp = f['max_projection'][()]\n", + " rois = f['roi_outlines'][()]\n", + " f.close()\n", + " rois = rois.astype(float)\n", + " rois[rois==0] = np.NaN\n", + " roi_table = pd.read_hdf(expt_path, 'roi_table')\n", + " \n", + " plt.figure(figsize=(25,15))\n", + "\n", + " ax1 = plt.subplot2grid((3,3),(0,0))\n", + " ax2 = plt.subplot2grid((3,3),(1,0))\n", + " ax3 = plt.subplot2grid((3,3),(0,1), rowspan=2)\n", + "# ax6 = plt.subplot2grid((3,3),(0,2), rowspan=2)\n", + " ax4 = plt.subplot2grid((3,3), (2,0))\n", + " ax5 = plt.subplot2grid((3,3), (2,1))\n", + " ax7 = plt.subplot2grid((3,3),(2,2))\n", + " \n", + " #Tuning curve\n", + " ax1.errorbar(range(5), response[row.dir,row.tf,1:,cell_index,0], \n", + " yerr=response[row.dir,row.tf,1:,cell_index,1]/np.sqrt(response[row.dir,row.tf,1:,cell_index,2]), fmt='o-')\n", + " ax1.fill_between(range(5), response[0,0,0,cell_index,0]+(response[0,0,0,cell_index,1]/np.sqrt(response[0,0,0,cell_index,2])), \n", + " response[0,0,0,cell_index,0]-(response[0,0,0,cell_index,1]/np.sqrt(response[0,0,0,cell_index,2])), \n", + " color='k', alpha=0.3)\n", + " ax1.axhline(y=response[0,0,0,cell_index,0], color='k', ls='--',lw=2)\n", + " \n", + " ax1.set_xticks(range(5));\n", + " ax1.set_xticklabels(sizevals)\n", + " ax1.set_xlabel(\"Size (deg)\", fontsize=16)\n", + " ax1.set_ylabel(\"DF/F\", fontsize=16)\n", + " ax1.set_title(str(pref_ori)+\" Deg\"+\" \"+str(pref_tf)+\" Hz\", fontsize=16)\n", + " sns.despine()\n", + "\n", + " #Preferred direction\n", + " ax2.plot(sweep_response[(stim_table.Ori==pref_ori)&(stim_table.TF==pref_tf)&(stim_table.Size==pref_size)][str(cell_index)].mean())\n", + " ax2.plot(sweep_response[np.isnan(stim_table.Ori)][str(cell_index)].mean(), color='gray')\n", + " ax2.axvspan(30,90, color='gray', alpha=0.1)\n", + " ax2.set_xticks([30,60,90,120],[0,1,2,3])\n", + " ax2.set_xlabel(\"Time (s)\", fontsize=18)\n", + " ax2.set_ylabel(\"DFF\", fontsize=18)\n", + " ax2.set_title(str(pref_ori)+\" Deg\"+\" \"+str(pref_tf)+\" Hz\"+\" \"+str(pref_size), fontsize=16)\n", + " sns.despine()\n", + " \n", + " #Heatmap\n", + " ax4.imshow(response[:,0,1:,cell_index,0], vmin=0, vmax=row.peak_mean)\n", + " ax4.set_yticks(range(8))\n", + " ax4.set_yticklabels(orivals)\n", + " ax4.set_xticks(range(5))\n", + " ax4.set_xticklabels(sizevals)\n", + " ax4.set_xlabel(\"Size\")\n", + " ax4.set_ylabel(\"Direction\")\n", + " ax4.set_title(\"1 Hz\", fontsize=16)\n", + " \n", + " ax5.imshow(response[:,1,1:,cell_index,0], vmin=0, vmax=row.peak_mean)\n", + " ax5.set_yticks(range(8))\n", + " ax5.set_yticklabels(orivals)\n", + " ax5.set_xticks(range(5))\n", + " ax5.set_xticklabels(sizevals)\n", + " ax5.set_title(\"2 Hz\", fontsize=16)\n", + " \n", + " #ROI mask\n", + " mask_test = np.zeros((512,512))\n", + " x_start = roi_table.x[cell_index]\n", + " y_start = roi_table.y[cell_index]\n", + " x_delta = np.array(roi_table['mask'][cell_index]).shape[1]\n", + " y_delta = np.array(roi_table['mask'][cell_index]).shape[0]\n", + " mask_test[y_start:y_start+y_delta, x_start:x_start+x_delta] = np.array(roi_table['mask'][cell_index])\n", + " # mask_test[mask_test==0] = np.NaN\n", + "\n", + " ax7.imshow(mp, cmap='gray')\n", + " # plt.imshow(rois)\n", + " # plt.imshow(mask_test, cmap='viridis_r')\n", + " plot_mask_outline(mask_test, ax7, color='y')\n", + " ax7.set_xlim(x_start-90, x_start+90)\n", + " ax7.set_ylim(y_start+90, y_start-90)\n", + " \n", + " #metrics\n", + " table_data = []\n", + " for key in keys1:\n", + " table_data.append([key, valid[valid.cell_id==cell_id][key].values[0]])\n", + " table = ax3.table(cellText=table_data, loc='center')\n", + " table.set_fontsize(12)\n", + "# table.scale(1,2)\n", + " ax3.axis('off')\n", + "\n", + " \n", + " plt.suptitle(\"Session: \"+str(session_id)+\" Cell: \"+str(cell_id), fontsize=18)\n", + " plt.tight_layout()\n", + " plt.savefig(r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/analysis/ST_figures/'+str(cell_id)+'.png')\n", + " plt.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "row.tf" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1.0, 2.0]" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tfvals" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.0" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tfvals[int(row.tf)]" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "row.prefsize" + ] + }, + { + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/analysis/read_data.py b/analysis/read_data.py index 8b4c620..a359484 100644 --- a/analysis/read_data.py +++ b/analysis/read_data.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat Jun 6 21:59:56 2020 @@ -17,89 +17,124 @@ def get_dff_traces(file_path): f.close() return dff + def get_raw_traces(file_path): f = h5py.File(file_path) raw = f['raw_traces'][()] f.close() return raw + def get_running_speed(file_path): f = h5py.File(file_path) dx = f['running_speed'][()] f.close() return dx + def get_cell_ids(file_path): f = h5py.File(file_path) cell_ids = f['cell_ids'][()] f.close() return cell_ids + def get_max_projection(file_path): f = h5py.File(file_path) max_proj = f['max_projection'][()] f.close() return max_proj + def get_metadata(file_path): import ast + f = h5py.File(file_path) md = f.get('meta_data')[...].tolist() f.close() meta_data = ast.literal_eval(md) return meta_data + def get_roi_table(file_path): return pd.read_hdf(file_path, 'roi_table') + def get_stimulus_table(file_path, stimulus): return pd.read_hdf(file_path, stimulus) + def get_eye_tracking(file_path): return pd.read_hdf(file_path, 'eye_tracking') + def get_stimulus_epochs(file_path, session_type): - if session_type=='size_tuning': + if session_type == 'size_tuning': stim_name_1 = 'drifting_gratings_size' stim1 = get_stimulus_table(file_path, stim_name_1) - stim_epoch = pd.DataFrame(columns=('Start','End','Stimulus_name')) - break1 = np.where(np.ediff1d(stim1.Start)>1000)[0][0] + stim_epoch = pd.DataFrame(columns=('Start', 'End', 'Stimulus_name')) + break1 = np.where(np.ediff1d(stim1.Start) > 1000)[0][0] stim_epoch.loc[0] = [stim1.Start[0], stim1.End[break1], stim_name_1] - stim_epoch.loc[1] = [stim1.Start[break1+1], stim1.End.max(), stim_name_1] - stim_epoch.loc[2] = [0, stim_epoch.Start.iloc[0]-1, 'spontaneous_activity'] - stim_epoch.loc[3] = [stim_epoch.End.iloc[0]+1, stim_epoch.Start.iloc[1]-1, 'spontaneous_activity'] + stim_epoch.loc[1] = [ + stim1.Start[break1 + 1], + stim1.End.max(), + stim_name_1, + ] + stim_epoch.loc[2] = [ + 0, + stim_epoch.Start.iloc[0] - 1, + 'spontaneous_activity', + ] + stim_epoch.loc[3] = [ + stim_epoch.End.iloc[0] + 1, + stim_epoch.Start.iloc[1] - 1, + 'spontaneous_activity', + ] stim_epoch.sort_values(by='Start', inplace=True) stim_epoch.reset_index(inplace=True) stim_epoch['Duration'] = stim_epoch.End - stim_epoch.Start - - elif session_type=='drifting_gratings_grid': + + elif session_type == 'drifting_gratings_grid': stim_name_1 = 'drifting_gratings_grid' stim_epoch = get_epochs(file_path, stim_name_1) - elif session_type=='center_surround': + elif session_type == 'center_surround': stim_name_1 = 'center_surround' stim_epoch = get_epochs(file_path, stim_name_1) - + return stim_epoch - -def get_epochs(file_path, stim_name_1): - stim1 = get_stimulus_table(file_path, stim_name_1) - stim2 = get_stimulus_table(file_path, 'locally_sparse_noise') - stim_epoch = pd.DataFrame(columns=('Start','End','Stimulus_name')) - break1 = np.where(np.ediff1d(stim1.Start)>1000)[0][0] - break2 = np.where(np.ediff1d(stim2.Start)>1000)[0][0] - stim_epoch.loc[0] = [stim1.Start[0], stim1.End[break1], stim_name_1] - stim_epoch.loc[1] = [stim1.Start[break1+1], stim1.End.max(), stim_name_1] - stim_epoch.loc[2] = [stim2.Start[0], stim2.End[break2], 'locally_sparse_noise'] - stim_epoch.loc[3] = [stim2.Start[break2+1], stim2.End.max(), 'locally_sparse_noise'] - stim_epoch.sort_values(by='Start', inplace=True) - stim_epoch.loc[4] = [0, stim_epoch.Start.iloc[0]-1, 'spontaneous_activity'] - for i in range(1,4): - stim_epoch.loc[4+i] = [stim_epoch.End.iloc[i-1]+1, stim_epoch.Start.iloc[i]-1, 'spontaneous_activity'] - stim_epoch.sort_values(by='Start', inplace=True) - stim_epoch.reset_index(inplace=True) - stim_epoch['Duration'] = stim_epoch.End - stim_epoch.Start - return stim_epoch - - +def get_epochs(file_path, stim_name_1): + stim1 = get_stimulus_table(file_path, stim_name_1) + stim2 = get_stimulus_table(file_path, 'locally_sparse_noise') + stim_epoch = pd.DataFrame(columns=('Start', 'End', 'Stimulus_name')) + break1 = np.where(np.ediff1d(stim1.Start) > 1000)[0][0] + break2 = np.where(np.ediff1d(stim2.Start) > 1000)[0][0] + stim_epoch.loc[0] = [stim1.Start[0], stim1.End[break1], stim_name_1] + stim_epoch.loc[1] = [stim1.Start[break1 + 1], stim1.End.max(), stim_name_1] + stim_epoch.loc[2] = [ + stim2.Start[0], + stim2.End[break2], + 'locally_sparse_noise', + ] + stim_epoch.loc[3] = [ + stim2.Start[break2 + 1], + stim2.End.max(), + 'locally_sparse_noise', + ] + stim_epoch.sort_values(by='Start', inplace=True) + stim_epoch.loc[4] = [ + 0, + stim_epoch.Start.iloc[0] - 1, + 'spontaneous_activity', + ] + for i in range(1, 4): + stim_epoch.loc[4 + i] = [ + stim_epoch.End.iloc[i - 1] + 1, + stim_epoch.Start.iloc[i] - 1, + 'spontaneous_activity', + ] + stim_epoch.sort_values(by='Start', inplace=True) + stim_epoch.reset_index(inplace=True) + stim_epoch['Duration'] = stim_epoch.End - stim_epoch.Start + return stim_epoch diff --git a/analysis/size_tuning.py b/analysis/size_tuning.py index 0cf2ddf..a067650 100644 --- a/analysis/size_tuning.py +++ b/analysis/size_tuning.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed Aug 22 10:59:54 2018 @@ -11,75 +11,83 @@ import os, h5py import matplotlib.pyplot as plt + def do_sweep_mean(x): return x[30:90].mean() + def do_sweep_mean_shifted(x): return x[30:40].mean() + def do_eye(x): return x[30:35].mean() + class SizeTuning: def __init__(self, expt_path, eye_thresh, cre, area, depth): self.expt_path = expt_path self.session_id = self.expt_path.split('/')[-1].split('_')[-2] - + self.eye_thresh = eye_thresh self.cre = cre self.area = area self.depth = depth - - self.orivals = range(0,360,45) - self.tfvals = [1.,2.] - self.sizevals = [30,52,67,79,120] - - #load dff traces + + self.orivals = range(0, 360, 45) + self.tfvals = [1.0, 2.0] + self.sizevals = [30, 52, 67, 79, 120] + + # load dff traces f = h5py.File(self.expt_path, 'r') self.dff = f['dff_traces'][()] f.close() - - #load raw traces + + # load raw traces f = h5py.File(self.expt_path, 'r') self.traces = f['raw_traces'][()] f.close() self.numbercells = self.dff.shape[0] - - #load roi_table + + # load roi_table self.roi = pd.read_hdf(self.expt_path, 'roi_table') - - - #get stimulus table for center surround + + # get stimulus table for center surround self.stim_table = pd.read_hdf(self.expt_path, 'drifting_gratings_size') - #get spontaneous window + # get spontaneous window self.stim_table_spont = self.get_spont_table() - - #load eyetracking + + # load eyetracking self.pupil_pos = pd.read_hdf(self.expt_path, 'eye_tracking') - - #run analysis - self.sweep_response, self.mean_sweep_response, self.sweep_eye, self.mean_sweep_eye, self.sweep_p_values, self.response = self.get_stimulus_response() -# self.first, self.second = self.cross_validate_response(n_trials=int(self.response[:,:,:,:,2].min())) + # run analysis + ( + self.sweep_response, + self.mean_sweep_response, + self.sweep_eye, + self.mean_sweep_eye, + self.sweep_p_values, + self.response, + ) = self.get_stimulus_response() + + # self.first, self.second = self.cross_validate_response(n_trials=int(self.response[:,:,:,:,2].min())) self.metrics, self.OSI, self.DSI, self.DIR = self.get_metrics() - - #save outputs + + # save outputs self.save_data() - - #plot traces + + # plot traces def get_spont_table(self): '''finds the window of spotaneous activity during the session''' - spont_start = np.where(np.ediff1d(self.stim_table.Start)>8000)[0][0] - stim_table_spont = pd.DataFrame(columns=('Start','End'), index=[0]) - stim_table_spont.Start = self.stim_table.End[spont_start]+1 - stim_table_spont.End = self.stim_table.Start[spont_start+1]-1 + spont_start = np.where(np.ediff1d(self.stim_table.Start) > 8000)[0][0] + stim_table_spont = pd.DataFrame(columns=('Start', 'End'), index=[0]) + stim_table_spont.Start = self.stim_table.End[spont_start] + 1 + stim_table_spont.End = self.stim_table.Start[spont_start + 1] - 1 return stim_table_spont - - def get_stimulus_response(self): '''calculates the response to each stimulus trial. Calculates the mean response to each stimulus condition. @@ -89,81 +97,128 @@ def get_stimulus_response(self): ------- sweep response: full trial for each trial mean sweep response: mean response for each trial -sweep_eye: eye position across the full trial +sweep_eye: eye position across the full trial mean_sweep_eye: mean of first three time points of eye position for each trial response_mean: mean response for each stimulus condition response_std: std of response to each stimulus condition ''' - sweep_response = pd.DataFrame(index=self.stim_table.index.values, columns=np.array(range(self.numbercells)).astype(str)) - - sweep_eye = pd.DataFrame(index=self.stim_table.index.values, columns=('x_pos_deg','y_pos_deg')) - - for index,row in self.stim_table.iterrows(): + sweep_response = pd.DataFrame( + index=self.stim_table.index.values, + columns=np.array(range(self.numbercells)).astype(str), + ) + + sweep_eye = pd.DataFrame( + index=self.stim_table.index.values, + columns=('x_pos_deg', 'y_pos_deg'), + ) + + for index, row in self.stim_table.iterrows(): for nc in range(self.numbercells): - #uses the global dff trace - sweep_response[str(nc)][index] = self.dff[nc, int(row.Start)-30:int(row.Start)+90] - - #computes DF/F using the mean of the inter-sweep gray for the Fo -# temp = self.traces[nc, int(row.Start)-30:int(row.Start)+90] -# sweep_response[str(nc)][index] = ((temp/np.mean(temp[:30]))-1) - sweep_eye.x_pos_deg[index] = self.pupil_pos.x_pos_deg[int(row.Start)-30:int(row.Start+90)].values - sweep_eye.y_pos_deg[index] = self.pupil_pos.y_pos_deg[int(row.Start)-30:int(row.Start+90)].values + # uses the global dff trace + sweep_response[str(nc)][index] = self.dff[ + nc, int(row.Start) - 30 : int(row.Start) + 90 + ] + + # computes DF/F using the mean of the inter-sweep gray for the Fo + # temp = self.traces[nc, int(row.Start)-30:int(row.Start)+90] + # sweep_response[str(nc)][index] = ((temp/np.mean(temp[:30]))-1) + sweep_eye.x_pos_deg[index] = self.pupil_pos.x_pos_deg[ + int(row.Start) - 30 : int(row.Start + 90) + ].values + sweep_eye.y_pos_deg[index] = self.pupil_pos.y_pos_deg[ + int(row.Start) - 30 : int(row.Start + 90) + ].values mean_sweep_response = sweep_response.applymap(do_sweep_mean) mean_sweep_eye = sweep_eye.applymap(do_eye) - mean_sweep_eye['total'] = np.sqrt(((mean_sweep_eye.x_pos_deg-mean_sweep_eye.x_pos_deg.mean())**2) + ((mean_sweep_eye.y_pos_deg-mean_sweep_eye.y_pos_deg.mean())**2)) - - #make spontaneous p_values + mean_sweep_eye['total'] = np.sqrt( + ((mean_sweep_eye.x_pos_deg - mean_sweep_eye.x_pos_deg.mean()) ** 2) + + ( + (mean_sweep_eye.y_pos_deg - mean_sweep_eye.y_pos_deg.mean()) + ** 2 + ) + ) + + # make spontaneous p_values shuffled_responses = np.empty((self.numbercells, 10000, 60)) -# idx = np.random.choice(range(self.stim_table_spont.Start, self.stim_table_spont.End), 10000) - idx = np.random.choice(range(int(self.stim_table_spont.Start), int(self.stim_table_spont.End)), 10000) + # idx = np.random.choice(range(self.stim_table_spont.Start, self.stim_table_spont.End), 10000) + idx = np.random.choice( + range( + int(self.stim_table_spont.Start), int(self.stim_table_spont.End) + ), + 10000, + ) for i in range(60): - shuffled_responses[:,:,i] = self.dff[:,idx+i] + shuffled_responses[:, :, i] = self.dff[:, idx + i] shuffled_mean = shuffled_responses.mean(axis=2) - sweep_p_values = pd.DataFrame(index = self.stim_table.index.values, columns=np.array(range(self.numbercells)).astype(str)) + sweep_p_values = pd.DataFrame( + index=self.stim_table.index.values, + columns=np.array(range(self.numbercells)).astype(str), + ) for nc in range(self.numbercells): subset = mean_sweep_response[str(nc)].values - null_dist_mat = np.tile(shuffled_mean[nc,:], reps=(len(subset),1)) - actual_is_less = subset.reshape(len(subset),1) <= null_dist_mat + null_dist_mat = np.tile(shuffled_mean[nc, :], reps=(len(subset), 1)) + actual_is_less = subset.reshape(len(subset), 1) <= null_dist_mat p_values = np.mean(actual_is_less, axis=1) sweep_p_values[str(nc)] = p_values - #compute mean response across trials, only use trials within eye_thresh of mean eye position - response = np.empty((8, 2, 6, self.numbercells, 4)) #ori X TF x size X cells X mean, std, #trials, % significant trials - + # compute mean response across trials, only use trials within eye_thresh of mean eye position + response = np.empty( + (8, 2, 6, self.numbercells, 4) + ) # ori X TF x size X cells X mean, std, #trials, % significant trials + response[:] = np.NaN + for oi, ori in enumerate(self.orivals): for ti, tf in enumerate(self.tfvals): for si, size in enumerate(self.sizevals): - subset = mean_sweep_response[(self.stim_table.Ori==ori)&(self.stim_table.TF==tf)& - (self.stim_table.Size==size)&(mean_sweep_eye.total0, tuning, 0) + tuning = np.where(tuning > 0, tuning, 0) CV_top_os = np.empty((8, tuning.shape[1]), dtype=np.complex128) for i in range(8): - CV_top_os[i] = (tuning[i]*np.exp(1j*2*orivals_rad[i])) - return np.abs(CV_top_os.sum(axis=0))/tuning.sum(axis=0) - + CV_top_os[i] = tuning[i] * np.exp(1j * 2 * orivals_rad[i]) + return np.abs(CV_top_os.sum(axis=0)) / tuning.sum(axis=0) def get_metrics(self): '''creates a table of metrics for each cell. We can make this more useful in the future @@ -215,59 +288,83 @@ def get_metrics(self): ------- metrics dataframe ''' - + n_iter = 50 - n_trials = int(np.nanmin(self.response[:,:,1:,:,2])) + n_trials = int(np.nanmin(self.response[:, :, 1:, :, 2])) print("Number of trials for cross-validation: " + str(n_trials)) cell_index = np.array(range(self.numbercells)) - response_first, response_second = self.cross_validate_response(n_iter, n_trials) - - metrics = pd.DataFrame(columns=('cell_index','dir','tf','prefsize','osi','dsi','dir_percent', - 'peak_mean','peak_std','blank_mean','blank_std', - 'peak_percent_trials'), index=cell_index) + response_first, response_second = self.cross_validate_response( + n_iter, n_trials + ) + + metrics = pd.DataFrame( + columns=( + 'cell_index', + 'dir', + 'tf', + 'prefsize', + 'osi', + 'dsi', + 'dir_percent', + 'peak_mean', + 'peak_std', + 'blank_mean', + 'blank_std', + 'peak_percent_trials', + ), + index=cell_index, + ) metrics.cell_index = cell_index - - #cross-validated metrics + + # cross-validated metrics DSI = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) OSI = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) DIR = pd.DataFrame(columns=cell_index.astype(str), index=range(n_iter)) - + for ni in range(n_iter): - #find pref direction for each cell for center only condition -# response_first = response_first[:,:,:,cell_index,:] -# response_second = response_second[:,:,:,cell_index,:] - sort = np.where(response_first[:,:,:,:,ni]==np.nanmax(response_first[:,:,:,:,ni], axis=(0,1,2))) - #TODO: this is where the TF is going to add issues... + # find pref direction for each cell for center only condition + # response_first = response_first[:,:,:,cell_index,:] + # response_second = response_second[:,:,:,cell_index,:] + sort = np.where( + response_first[:, :, :, :, ni] + == np.nanmax(response_first[:, :, :, :, ni], axis=(0, 1, 2)) + ) + # TODO: this is where the TF is going to add issues... sortind = np.argsort(sort[3]) pref_ori = sort[0][sortind] -# print(len(pref_ori)) + # print(len(pref_ori)) pref_tf = sort[1][sortind] pref_size = sort[2][sortind] cell_index = sort[3][sortind] - inds = np.vstack((pref_ori, pref_tf, pref_size,cell_index)) - + inds = np.vstack((pref_ori, pref_tf, pref_size, cell_index)) + DIR.loc[ni] = pref_ori - - #osi - OSI.loc[ni] = self.get_osi(response_second[:, inds[1], inds[2], inds[3], ni]) - #dsi - null_ori= np.mod(pref_ori+4, 8) + # osi + OSI.loc[ni] = self.get_osi( + response_second[:, inds[1], inds[2], inds[3], ni] + ) + + # dsi + null_ori = np.mod(pref_ori + 4, 8) pref = response_second[inds[0], inds[1], inds[2], inds[3], ni] - null = response_second[null_ori, inds[1], inds[2], inds[3], ni] - null = np.where(null>0, null, 0) - DSI.loc[ni] = (pref-null)/(pref+null) + null = response_second[null_ori, inds[1], inds[2], inds[3], ni] + null = np.where(null > 0, null, 0) + DSI.loc[ni] = (pref - null) / (pref + null) metrics['osi'] = OSI.mean().values metrics['dsi'] = DSI.mean().values - - #how consistent is the selected preferred direction? + + # how consistent is the selected preferred direction? for nc in range(self.numbercells): metrics['dir_percent'].loc[nc] = DIR[str(nc)].value_counts().max() - #non cross-validated metrics + # non cross-validated metrics cell_index = np.array(range(self.numbercells)) - sort = np.where(self.response[:,:,:,cell_index,0] == np.nanmax(self.response[:,:,:,cell_index,0], axis=(0,1,2))) + sort = np.where( + self.response[:, :, :, cell_index, 0] + == np.nanmax(self.response[:, :, :, cell_index, 0], axis=(0, 1, 2)) + ) sortind = np.argsort(sort[3]) pref_ori = sort[0][sortind] pref_tf = sort[1][sortind] @@ -276,23 +373,29 @@ def get_metrics(self): metrics['dir'] = pref_ori metrics['tf'] = pref_tf metrics['prefsize'] = pref_size - metrics['peak_mean'] = self.response[pref_ori,pref_tf,pref_size,cell_index,0] - metrics['peak_std'] = self.response[pref_ori,pref_tf,pref_size,cell_index,1] - metrics['peak_percent_trials'] = self.response[pref_ori, pref_tf,pref_size,cell_index,3] - metrics['blank_mean'] = self.response[0,0,0,cell_index,0] - metrics['blank_std'] = self.response[0,0,0,cell_index,1] - + metrics['peak_mean'] = self.response[ + pref_ori, pref_tf, pref_size, cell_index, 0 + ] + metrics['peak_std'] = self.response[ + pref_ori, pref_tf, pref_size, cell_index, 1 + ] + metrics['peak_percent_trials'] = self.response[ + pref_ori, pref_tf, pref_size, cell_index, 3 + ] + metrics['blank_mean'] = self.response[0, 0, 0, cell_index, 0] + metrics['blank_std'] = self.response[0, 0, 0, cell_index, 1] + b = set(metrics.index) a = set(range(self.numbercells)) toadd = a.difference(b) - if len(toadd)>0: + if len(toadd) > 0: newdf = pd.DataFrame(columns=metrics.columns, index=toadd) newdf.cell_index = toadd newdf.valid = False metrics = metrics.append(newdf) metrics.sort_index(inplace=True) - - metrics = metrics.join(self.roi[['cell_id','session_id','valid']]) + + metrics = metrics.join(self.roi[['cell_id', 'session_id', 'valid']]) metrics['cre'] = self.cre metrics['area'] = self.area metrics['depth'] = self.depth @@ -301,7 +404,10 @@ def get_metrics(self): def save_data(self): '''saves intermediate analysis files in an h5 file''' - save_file = os.path.join(r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/analysis/tf', str(self.session_id)+"_st_analysis.h5") + save_file = os.path.join( + r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/analysis/tf', + str(self.session_id) + "_st_analysis.h5", + ) print("Saving data to: ", save_file) store = pd.HDFStore(save_file) store['sweep_response'] = self.sweep_response @@ -315,31 +421,43 @@ def save_data(self): dset = f.create_dataset('response', data=self.response) f.close() - -if __name__=='__main__': -# expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Size_Tuning_976843461_data.h5' -# eye_thresh = 10 -# cre = 'test' -# area = 'area test' -# depth = '33' -# szt = SizeTuning(expt_path=expt_path, eye_thresh=eye_thresh, cre=cre, area=area, depth=depth) - - manifest = pd.read_csv(r'/Users/saskiad/Dropbox/Openscope Multiplex/data manifest.csv') - subset = manifest[manifest.Target=='soma'] + +if __name__ == '__main__': + # expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Size_Tuning_976843461_data.h5' + # eye_thresh = 10 + # cre = 'test' + # area = 'area test' + # depth = '33' + # szt = SizeTuning(expt_path=expt_path, eye_thresh=eye_thresh, cre=cre, area=area, depth=depth) + + manifest = pd.read_csv( + r'/Users/saskiad/Dropbox/Openscope Multiplex/data manifest.csv' + ) + subset = manifest[manifest.Target == 'soma'] print(len(subset)) count = 0 failed = [] for index, row in subset.iterrows(): if np.isfinite(row.Size_Tuning_Expt_ID): - count+=1 + count += 1 cre = row.Cre area = row.Area depth = row.Depth - expt_path = r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Size_Tuning_'+str(int(row.Size_Tuning_Expt_ID))+'_data.h5' + expt_path = ( + r'/Users/saskiad/Documents/Data/Openscope_Multiplex_trim/Size_Tuning_' + + str(int(row.Size_Tuning_Expt_ID)) + + '_data.h5' + ) eye_thresh = 10 try: - szt = SizeTuning(expt_path=expt_path, eye_thresh=eye_thresh, cre=cre, area=area, depth=depth) - if count==1: + szt = SizeTuning( + expt_path=expt_path, + eye_thresh=eye_thresh, + cre=cre, + area=area, + depth=depth, + ) + if count == 1: metrics_all = szt.metrics.copy() print("reached here") else: @@ -347,6 +465,3 @@ def save_data(self): except: print(expt_path + " FAILED") failed.append(int(row.Size_Tuning_Expt_ID)) - - - \ No newline at end of file diff --git a/analysis/stim_table.py b/analysis/stim_table.py deleted file mode 100644 index f62be7a..0000000 --- a/analysis/stim_table.py +++ /dev/null @@ -1,530 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Mon Apr 22 17:33:28 2019 - -@author: danielm -additions from saskiad Jun 7 2020 -""" -import os -import warnings - -import numpy as np -import pandas as pd -import h5py - -from sync import Dataset - - -# Generic interface for creating stim tables. PREFERRED. -def create_stim_tables( - exptpath, - stimulus_names = ['locally_sparse_noise', - 'center_surround', 'drifting_gratings_grid', 'drifting_gratings_size'], - verbose = True): - """Create a stim table from data located in folder exptpath. - - Tries to extract a stim_table for each stim type in stimulus_names and - continues if KeyErrors are produced. - - Inputs: - exptpath (str) - -- Path to directory in which to look for experiment-related files. - stimulus_names (list of strs) - -- Types of stimuli to try extracting. - verbose (bool, default True) - -- Print information about progress. - - Returns: - Dict of DataFrames with information about start and end times of each - stimulus presented in a given experiment. - - """ - data = load_stim(exptpath) -# twop_frames, _, _, _ = load_sync(exptpath) - twop_frames = load_alignment(exptpath) - - stim_table_funcs = { - 'locally_sparse_noise': locally_sparse_noise_table, - 'center_surround': center_surround_table, - 'drifting_gratings_grid': DGgrid_table, - 'drifting_gratings_size': DGsize_table - } - stim_table = {} - for stim_name in stimulus_names: - try: - stim_table[stim_name] = stim_table_funcs[stim_name]( - data, twop_frames - ) - except KeyError: - if verbose: - print( - 'Could not locate stimulus type {} in {}'.format( - stim_name, exptpath - ) - ) - continue - - return stim_table - - -# DEPRECATED. Use `create_stim_tables(exptpath, ['locally_sparse_noise', 'drifting_gratings_grid'])` instead. -def coarse_mapping_create_stim_table(exptpath): - """Return stim_tables for locally sparse noise and drifting gratings grid. - - Input: - exptpath (str) - - Returns: - Dict of locally_sparse_noise and drifting_gratings_grid stim tables. - - """ - data = load_stim(exptpath) - twop_frames, _, _, _ = load_sync(exptpath) - - stim_table = {} - stim_table['locally_sparse_noise'] = locally_sparse_noise_table( - data, twop_frames - ) - stim_table['drifting_gratings_grid'] = DGgrid_table(data, twop_frames) - - return stim_table - - -# DEPRECATED. Use `create_stim_tables(exptpath, ['locally_sparse_noise', 'center_surround'])` instead. -def lsnCS_create_stim_table(exptpath): - """Return stim_tables for locally sparse noise and center surround stimuli. - - Input: - exptpath (str) - - Returns: - Dict of center_surround and locally_sparse_noise stim tables. - - """ - data = load_stim(exptpath) - twop_frames, _, _, _ = load_sync(exptpath) - - stim_table = {} - stim_table['center_surround'] = center_surround_table(data, twop_frames) - stim_table['locally_sparse_noise'] = locally_sparse_noise_table( - data, twop_frames - ) - - return stim_table - - -def DGgrid_table(data, twop_frames, verbose = True): - - DG_idx = get_stimulus_index(data, 'drifting_gratings_grid_5.stim') - - timing_table, actual_sweeps, expected_sweeps = get_sweep_frames( - data, DG_idx - ) - - if verbose: - print 'Found {} of {} expected sweeps.'.format( - actual_sweeps, expected_sweeps - ) - - stim_table = pd.DataFrame( - np.column_stack(( - twop_frames[timing_table['start']], - twop_frames[timing_table['end']] - )), - columns=('Start', 'End') - ) - - for attribute in ['TF', 'SF', 'Contrast', 'Ori', 'PosX', 'PosY']: - stim_table[attribute] = get_attribute_by_sweep( - data, DG_idx, attribute - )[:len(stim_table)] - - return stim_table - -def DGsize_table(data, twop_frames, verbose = True): - - DGs_idx = get_stimulus_index(data, 'drifting_gratings_size.stim') - - timing_table, actual_sweeps, expected_sweeps = get_sweep_frames( - data, DGs_idx - ) - - if verbose: - print 'Found {} of {} expected sweeps.'.format( - actual_sweeps, expected_sweeps - ) - - stim_table = pd.DataFrame( - np.column_stack(( - twop_frames[timing_table['start']], - twop_frames[timing_table['end']] - )), - columns=('Start', 'End') - ) - - for attribute in ['TF', 'SF', 'Contrast', 'Ori', 'Size']: - stim_table[attribute] = get_attribute_by_sweep( - data, DGs_idx, attribute - )[:len(stim_table)] - - x_corr, y_corr = get_center_coordinates(data, DGs_idx) - stim_table['Center_x'] = x_corr - stim_table['Center_y'] = y_corr - - return stim_table - - -def locally_sparse_noise_table(data, twop_frames, verbose = True): - """Return stim table for locally sparse noise stimulus. - - """ - lsn_idx = get_stimulus_index(data, 'locally_sparse_noise.stim') - - timing_table, actual_sweeps, expected_sweeps = get_sweep_frames( - data, lsn_idx - ) - if verbose: - print 'Found {} of {} expected sweeps.'.format( - actual_sweeps, expected_sweeps - ) - - stim_table = pd.DataFrame( - np.column_stack(( - twop_frames[timing_table['start']], - twop_frames[timing_table['end']] - )), - columns=('Start', 'End') - ) - - stim_table['Frame'] = np.array( - data['stimuli'][lsn_idx]['sweep_order'][:len(stim_table)] - ) - - return stim_table - - -def center_surround_table(data, twop_frames, verbose = True): - - center_idx = get_stimulus_index(data, 'center') - surround_idx = get_stimulus_index(data, 'surround') - - timing_table, actual_sweeps, expected_sweeps = get_sweep_frames( - data, center_idx - ) - if verbose: - print 'Found {} of {} expected sweeps'.format( - actual_sweeps, expected_sweeps - ) - - stim_table = pd.DataFrame( - np.column_stack(( - twop_frames[timing_table['start']], - twop_frames[timing_table['end']] - )), - columns=('Start', 'End') - ) - - x_corr, y_corr = get_center_coordinates(data, center_idx) - stim_table['Center_x'] = x_corr - stim_table['Center_y'] = y_corr - - # TODO: make this take either center or surround SF and TF depending on which is not NaN - for attribute in ['TF', 'SF', 'Contrast']: - stim_table[attribute] = get_attribute_by_sweep( - data, center_idx, attribute - )[:len(stim_table)] - stim_table['Center_Ori'] = get_attribute_by_sweep( - data, center_idx, 'Ori' - )[:len(stim_table)] - stim_table['Surround_Ori'] = get_attribute_by_sweep( - data, surround_idx, 'Ori' - )[:len(stim_table)] - - return stim_table - - -def get_stimulus_index(data, stim_name): - """Return the index of stimulus in data. - - Returns the position of the first occurrence of stim_name in data. Raises a - KeyError if a stimulus with a name containing stim_name is not found. - - Inputs: - data (dict-like) - -- Object in which to search for a named stimulus. - stim_name (str) - - Returns: - Index of stimulus stim_name in data. - - """ - for i_stim, stim_data in enumerate(data['stimuli']): - if stim_name in stim_data['stim_path']: - return i_stim - - raise KeyError('Stimulus with stim_name={} not found!'.format(stim_name)) - - -def get_display_sequence(data, stimulus_idx): - - display_sequence = np.array( - data['stimuli'][stimulus_idx]['display_sequence'] - ) - pre_blank_sec = int(data['pre_blank_sec']) - display_sequence += pre_blank_sec - display_sequence *= int(data['fps']) # in stimulus frames - - return display_sequence - - -def get_sweep_frames(data, stimulus_idx): - - sweep_frames = data['stimuli'][stimulus_idx]['sweep_frames'] - timing_table = pd.DataFrame( - np.array(sweep_frames).astype(np.int), - columns=('start', 'end') - ) - timing_table['dif'] = timing_table['end']-timing_table['start'] - - display_sequence = get_display_sequence(data, stimulus_idx) - - timing_table.start += display_sequence[0, 0] - for seg in range(len(display_sequence)-1): - for index, row in timing_table.iterrows(): - if row.start >= display_sequence[seg, 1]: - timing_table.start[index] = ( - timing_table.start[index] - - display_sequence[seg, 1] - + display_sequence[seg+1, 0] - ) - timing_table.end = timing_table.start+timing_table.dif - expected_sweeps = len(timing_table) - timing_table = timing_table[timing_table.end <= display_sequence[-1, 1]] - timing_table = timing_table[timing_table.start <= display_sequence[-1, 1]] - actual_sweeps = len(timing_table) - - return timing_table, actual_sweeps, expected_sweeps - - -def get_attribute_by_sweep(data, stimulus_idx, attribute): - - attribute_idx = get_attribute_idx(data, stimulus_idx, attribute) - - sweep_order = data['stimuli'][stimulus_idx]['sweep_order'] - sweep_table = data['stimuli'][stimulus_idx]['sweep_table'] - - num_sweeps = len(sweep_order) - - attribute_by_sweep = np.zeros((num_sweeps,)) - attribute_by_sweep[:] = np.NaN - - unique_conditions = np.unique(sweep_order) - for i_condition, condition in enumerate(unique_conditions): - sweeps_with_condition = np.argwhere(sweep_order == condition)[:, 0] - - if condition > 0: # blank sweep is -1 - try: - attribute_by_sweep[sweeps_with_condition] = sweep_table[condition][attribute_idx] - except: - attribute_by_sweep[sweeps_with_condition] = sweep_table[condition][attribute_idx][0] - - return attribute_by_sweep - - -def get_attribute_idx(data, stimulus_idx, attribute): - """Return the index of attribute in data for the given stimulus. - - Returns the position of the first occurrence of attribute. Raises a - KeyError if not found. - """ - attribute_names = data['stimuli'][stimulus_idx]['dimnames'] - for attribute_idx, attribute_str in enumerate(attribute_names): - if attribute_str == attribute: - return attribute_idx - - raise KeyError('Attribute {} for stimulus_ids {} not found!'.format( - attribute, stimulus_idx - )) - - -def load_stim(exptpath, verbose = True): - """Load stim.pkl file into a DataFrame. - - Inputs: - exptpath (str) - -- Directory in which to search for files with _stim.pkl suffix. - verbose (bool) - -- Print filename (if found). - - Returns: - DataFrame with contents of stim pkl. - - """ - # Look for a file with the suffix '_stim.pkl' - pklpath = None - for f in os.listdir(exptpath): - if f.endswith('_stim.pkl'): - pklpath = os.path.join(exptpath, f) - if verbose: - print "Pkl file:", f - - if pklpath is None: - raise IOError( - 'No files with the suffix _stim.pkl were found in {}'.format( - exptpath - ) - ) - - return pd.read_pickle(pklpath) - -def load_alignment(exptpath): - for f in os.listdir(exptpath): - if f.startswith('ophys_experiment'): - ophys_path = os.path.join(exptpath, f) - for f in os.listdir(ophys_path): - if f.endswith('time_synchronization.h5'): - temporal_alignment_file = os.path.join(ophys_path, f) - f = h5py.File(temporal_alignment_file, 'r') - twop_frames = f['stimulus_alignment'].value - f.close() - return twop_frames - - -def load_sync(exptpath, verbose = True): - - #verify that sync file exists in exptpath - syncpath = None - for f in os.listdir(exptpath): - if f.endswith('_sync.h5'): - syncpath = os.path.join(exptpath, f) - if verbose: - print "Sync file:", f - if syncpath is None: - raise IOError( - 'No files with the suffix _sync.h5 were found in {}'.format( - exptpath - ) - ) - - #load the sync data from .h5 and .pkl files - d = Dataset(syncpath) - #print d.line_labels - - #set the appropriate sample frequency - sample_freq = d.meta_data['ni_daq']['counter_output_freq'] - - #get sync timing for each channel - twop_vsync_fall = d.get_falling_edges('2p_vsync')/sample_freq - stim_vsync_fall = d.get_falling_edges('stim_vsync')[1:]/sample_freq #eliminating the DAQ pulse - photodiode_rise = d.get_rising_edges('stim_photodiode')/sample_freq - - #make sure all of the sync data are available - channels = { - 'twop_vsync_fall': twop_vsync_fall, - 'stim_vsync_fall': stim_vsync_fall, - 'photodiode_rise': photodiode_rise - } - channel_test = [] - for chan in channels.keys(): - # Check that signal is high at least once in each channel. - channel_test.append(any(channels[chan])) - if not all(channel_test): - raise RuntimeError('Not all channels present. Sync test failed.') - elif verbose: - print "All channels present." - - #test and correct for photodiode transition errors - ptd_rise_diff = np.ediff1d(photodiode_rise) - short = np.where(np.logical_and(ptd_rise_diff > 0.1, ptd_rise_diff < 0.3))[0] - medium = np.where(np.logical_and(ptd_rise_diff > 0.5, ptd_rise_diff < 1.5))[0] - ptd_start = 3 - for i in medium: - if set(range(i-2, i)) <= set(short): - ptd_start = i+1 - ptd_end = np.where(photodiode_rise > stim_vsync_fall.max())[0][0] - 1 - - if ptd_start > 3 and verbose: - print 'ptd_start: ' + str(ptd_start) - print "Photodiode events before stimulus start. Deleted." - - ptd_errors = [] - while any(ptd_rise_diff[ptd_start:ptd_end] < 1.8): - error_frames = np.where(ptd_rise_diff[ptd_start:ptd_end] < 1.8)[0] + ptd_start - print "Photodiode error detected. Number of frames:", len(error_frames) - photodiode_rise = np.delete(photodiode_rise, error_frames[-1]) - ptd_errors.append(photodiode_rise[error_frames[-1]]) - ptd_end -= 1 - ptd_rise_diff = np.ediff1d(photodiode_rise) - - first_pulse = ptd_start - stim_on_photodiode_idx = 60 + 120 * np.arange(0, ptd_end - ptd_start, 1) - - stim_on_photodiode = stim_vsync_fall[stim_on_photodiode_idx] - photodiode_on = photodiode_rise[first_pulse + np.arange(0, ptd_end - ptd_start, 1)] - delay_rise = photodiode_on - stim_on_photodiode - - delay = np.mean(delay_rise[:-1]) - if verbose: - print "monitor delay: ", delay - - #adjust stimulus time to incorporate monitor delay - stim_time = stim_vsync_fall + delay - - #convert stimulus frames into twop frames - twop_frames = np.empty((len(stim_time), 1)) - for i in range(len(stim_time)): - # crossings = np.nonzero(np.ediff1d(np.sign(twop_vsync_fall - stim_time[i]))>0) - crossings = np.searchsorted(twop_vsync_fall, stim_time[i], side='left') - 1 - if crossings < (len(twop_vsync_fall)-1): - twop_frames[i] = crossings - else: - twop_frames[i:len(stim_time)] = np.NaN - warnings.warn( - 'Acquisition ends before stimulus.', RuntimeWarning - ) - break - - return twop_frames, twop_vsync_fall, stim_vsync_fall, photodiode_rise - -def get_center_coordinates(data, idx): - -# center_idx = get_stimulus_index(data,'center') -# stim_definition = data['stimuli'][center_idx]['stim'] - stim_definition = data['stimuli'][idx]['stim'] - - position_idx = stim_definition.find('pos=array(') - coor_start = position_idx + stim_definition[position_idx:].find('[') + 1 - coor_end = position_idx + stim_definition[position_idx:].find(']') - comma_idx = position_idx + stim_definition[position_idx:].find(',') - - x_coor = float(stim_definition[coor_start:comma_idx]) - y_coor = float(stim_definition[(comma_idx+1):coor_end]) - - return x_coor, y_coor - - -def print_summary(stim_table): - """Print summary of generated stim_table. - - Print column names, number of 'unique' conditions per column (treating - nans as equal), and average number of samples per condition. - """ - print( - '{:<20}{:>15}{:>15}\n'.format('Colname', 'No. conditions', 'Mean N/cond') - ) - for colname in stim_table.columns: - conditions, occurrences = np.unique( - np.nan_to_num(stim_table[colname]), return_counts = True - ) - print( - '{:<20}{:>15}{:>15.1f}'.format( - colname, len(conditions), np.mean(occurrences) - ) - ) - - -if __name__ == '__main__': -# exptpath = r'\\allen\programs\braintv\production\neuralcoding\prod55\specimen_859061987\ophys_session_882666374\\' - exptpath = r'/Volumes/New Volume/994901365' - stim_table = create_stim_tables(exptpath) -# stim_table = lsnCS_create_stim_table(exptpath) diff --git a/autoformat.sh b/autoformat.sh new file mode 100755 index 0000000..85a822b --- /dev/null +++ b/autoformat.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +# Autoformat one or more Python files using Black with consistent settings. +# -S disables string normalization (leave single quotes as single quotes) +# -l 80 sets line length to 80 characters +black -S -l 80 "$@" diff --git a/conf.py b/conf.py new file mode 100644 index 0000000..a4ecbc4 --- /dev/null +++ b/conf.py @@ -0,0 +1,58 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'OScopeTools' +copyright = '2020, Saskia de Vries, Dan Millman, Emerson Harkin' +author = 'Saskia de Vries, Dan Millman, Emerson Harkin' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.napoleon', + 'sphinx_rtd_theme' +] + +autodoc_default_options = { + 'inherited-members': True +} + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'test_*.py'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] diff --git a/index.rst b/index.rst new file mode 100644 index 0000000..8d3031d --- /dev/null +++ b/index.rst @@ -0,0 +1,18 @@ +.. OScopeTools documentation master file, created by + sphinx-quickstart on Tue Jul 7 09:38:50 2020. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to OScopeTools's documentation! +======================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/oscopetools/LSN_analysis.py b/oscopetools/LSN_analysis.py new file mode 100644 index 0000000..3fba996 --- /dev/null +++ b/oscopetools/LSN_analysis.py @@ -0,0 +1,1005 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Wed Jul 22 02:35:35 2020 + +@author: kailun +""" + +import numpy as np +import matplotlib.pyplot as plt +from oscopetools import read_data as rd +from .adjust_stim import * +from .chi_square_lsn import chi_square_RFs +from .greedy_pixelwise_rf import get_receptive_field_greedy +from enum import Enum +import warnings, sys, os + + +class LSN_analysis: + _ON_stim_value = 255 + _OFF_stim_value = 0 + _background_stim_value = 127 + _yx_ref = None # The reference y- and x-positions used for correcting the LSN stimulus array. + _stim_size_deg = ( + 9.3 # The side length of the stimulus in degree (same unit as eye pos). + ) + _frame_rate_Hz = 30 # The frame rate of fluorescent responses in Hz. + _CS_center_diameter_deg = ( + 30 # The diameter in degrees of the center-surround stimulus' center. + ) + + def __init__( + self, + datafile_path, + LSN_stim_path, + num_baseline_frames=None, + use_dff_z_score=False, + correct_LSN=False, + use_only_valid_eye_pos=False, + use_only_positive_responses=False, + RF_type="Greedy pixelwise RF", + RF_loc_thresh=0.8, + verbose=True, + ): + """To analyze the locally-sparse-noise-stimulated cell responses. + + Parameters + ---------- + datafile_path : str + The path to the data file. + LSN_stim_path : str + The path to the LSN stimulus npy file. + num_baseline_frames : int or None + The number of baseline frames before the start and after the end of a trial. + use_dff_z_score : bool + If True, the cell responses will be converted to z-score before analysis. + correct_LSN : bool + If True, the LSN stimulus corrected by eye positions will be used. Otherwise, the original LSN stimulus will be used. + The stimulus wlll remain unchanged for those frames without valid eye positions. + use_only_valid_eye_pos : bool + If True, only stimuli with valid eye positions are used. Otherwise, all stimuli will be used. + use_only_positive_responses : bool + If True, the fluorescence responses less than 0 will be set to 0 when computing the avg_responses. + RF_type : str + "Greedy pixelwise RF" or "Trial averaged RF". The type of RFs to be computed. + RF_loc_thresh : float + The threshold for deciding whether the RF is located within the center or surround or not. + verbose : bool + If True, the parameters used will be printed. + + """ + self.datafile_path = datafile_path + self.LSN_stim_path = LSN_stim_path + self.num_baseline_frames = num_baseline_frames + if (self.num_baseline_frames is None) or (self.num_baseline_frames < 0): + self.num_baseline_frames = 0 + self.is_use_dff_z_score = use_dff_z_score + self.is_use_corrected_LSN = correct_LSN + self.is_use_valid_eye_pos = use_only_valid_eye_pos + self.is_use_positive_fluo = use_only_positive_responses + self.RF_type = RF_type + self.RF_loc_thresh = RF_loc_thresh + self._verbose = verbose + self.dff_fluo = rd.get_dff_traces(self.datafile_path) + self.num_cells = self.dff_fluo.num_cells + self.cell_ids = np.array(rd.get_roi_table(datafile_path).cell_id).tolist() + self.LSN_stim_table = rd.get_stimulus_table( + self.datafile_path, "locally_sparse_noise" + ) + if self.is_use_dff_z_score: + self.dff_fluo.z_score() + self.trial_fluo = self.dff_fluo.cut_by_trials( + self.LSN_stim_table, + self.num_baseline_frames, + both_ends_baseline=True, + ) + self._full_LSN_stim = np.load(self.LSN_stim_path) + self.eye_tracking = rd.get_eye_tracking(self.datafile_path) + ( + self._corrected_LSN_stim, + self.valid_eye_pos, + self.yx_ref, + ) = correct_LSN_stim_by_eye_pos( + self._full_LSN_stim, + self.LSN_stim_table, + self.eye_tracking, + self._yx_ref, + self._stim_size_deg, + self._background_stim_value, + ) + self._all_trial_mask = np.array([True] * self.LSN_stim_table.shape[0]) + self._update_params() + self._get_CS_center_info() + self._update_responses() + + def __str__(self): + return ( + "\nAnalyzing file: {}\n" + "ON LSN stimulus value: {}\n" + "OFF LSN stimulus value: {}\n" + "Background LSN value: {}\n" + "LSN stimulus size: {} degree\n" + "Number of cells: {}\n" + "Current RF type: {}\n" + "Use DF/F z-score: {}\n" + "Use corrected LSN: {}\n" + "Use only valid eye positions: {}\n" + "Use only positive fluorescence responses: {}" + ).format( + self.datafile_path, + self._ON_stim_value, + self._OFF_stim_value, + self._background_stim_value, + self._stim_size_deg, + self.num_cells, + self.RF_type, + self.is_use_dff_z_score, + self.is_use_corrected_LSN, + self.is_use_valid_eye_pos, + self.is_use_positive_fluo, + ) + + def correct_LSN_by_eye_pos(self, value=True): + """ + value : bool + If True, the LSN stimulus corrected by eye positions will be used. Otherwise, the original LSN stimulus will be used. + The stimulus wlll remain unchanged for those frames without valid eye positions. + """ + if self.is_use_corrected_LSN == bool(value): + raise ValueError( + "LSN stim is already corrected." + if bool(value) + else "LSN stim is already original." + ) + try: + self.is_use_corrected_LSN = bool(value) + self._update_responses() + except: + print( + "Failed to change correct_LSN_by_eye_pos to {}! \nRecomputing the responses with correct_LSN_by_eye_pos({})...".format( + value, bool(1 - value) + ) + ) + self.correct_LSN_by_eye_pos(bool(1 - value)) + + def use_valid_eye_pos(self, value=True): + """ + value : bool + If True, only stimuli with valid eye positions are used. Otherwise, all stimuli will be used. + """ + if self.is_use_valid_eye_pos == bool(value): + raise ValueError( + "The valid eye positions are used." + if bool(value) + else "All eye positions are used." + ) + try: + self.is_use_valid_eye_pos = bool(value) + self._update_responses() + except: + print( + "Failed to change use_valid_eye_pos to {}! \nRecomputing the responses with use_valid_eye_pos({})...".format( + value, bool(1 - value) + ) + ) + self.use_valid_eye_pos(bool(1 - value)) + + def use_positive_fluo(self, value=True): + """ + value : bool + If True, the fluorescence responses less than 0 will be set to 0 when computing the avg_responses. + """ + if self.is_use_positive_fluo == bool(value): + raise ValueError( + "The positive responses are already used." + if bool(value) + else "Both positive and negative responses are already used." + ) + try: + self.is_use_positive_fluo = bool(value) + self._update_responses() + except: + print( + "Failed to change use_positive_fluo to {}! \nRecomputing the responses with use_positive_fluo({})...".format( + value, bool(1 - value) + ) + ) + self.use_positive_fluo(bool(1 - value)) + + def _update_responses(self): + self._update_params() + self.ON_avg_responses = self._compute_avg_pixel_response( + self.trial_fluo.get_trials(self._trial_mask), + self.LSN_stim[self._trial_mask], + self._ON_stim_value, + ) + self.OFF_avg_responses = self._compute_avg_pixel_response( + self.trial_fluo.get_trials(self._trial_mask), + self.LSN_stim[self._trial_mask], + self._OFF_stim_value, + ) + if self.RF_type.upper() == "TRIAL AVERAGED RF": + self.get_trial_avg_RFs() + elif self.RF_type.upper() == "GREEDY PIXELWISE RF": + self.get_greedy_RFs() + else: + print( + "Please choose either 'Trial averaged RF' or 'Greedy pixelwise RF' for RF_type." + ) + if self._is_CS_session: + self.get_RF_loc_masks(self.RF_loc_thresh) + if self._verbose: + print(self) + + def _update_params(self): + if self.is_use_corrected_LSN: + self.LSN_stim = self._corrected_LSN_stim + else: + self.LSN_stim = self._full_LSN_stim[self.LSN_stim_table.Frame] + + if self.is_use_valid_eye_pos: + self._trial_mask = self.valid_eye_pos + else: + self._trial_mask = self._all_trial_mask + + def _compute_avg_pixel_response(self, trial_response, LSN_stim, target): + """ + Parameters + ---------- + trial_response : TrialFluorescence object + The DF/F trial response. + LSN_stim : 3d np.array + LSN stimulus array, shape = (num_frame, ylen, xlen). + target : int + The target value (value of interest) in the stimulus array. + + Returns + ------- + avg_responses : 4d np.array + The trial-averaged responses within pixel, shape = (num_cells, ylen, xlen, trial_len). + """ + response = ( + trial_response.positive_part() + if self.is_use_positive_fluo + else trial_response + ) + avg_responses = np.zeros( + ( + response.num_cells, + LSN_stim.shape[1], + LSN_stim.shape[2], + response.num_timesteps, + ) + ) + for y in range(LSN_stim.shape[1]): + for x in range(LSN_stim.shape[2]): + avg_responses[:, y, x, :] = ( + response.get_trials(LSN_stim[:, y, x] == target).trial_mean().data + ) + return avg_responses + + def _get_chi_square_pvals(self, frame_shift, num_shuffles=1000): + """To do the Chi-square test on the DF/F responses to LSN stimuli. + + Parameters + ---------- + frame_shift : int + The frame shift of the window to account for the delay in calcium responses for the Chi-square test. + Default is 3. + + Creates + ------- + chi_square_pvals : array-like, 3D + The p-values from the Chi-square test for each cell. Shape = (num_cells, ylen, xlen). + """ + assert ( + abs(frame_shift) <= self.num_baseline_frames + ), "Please use frame_shift with absolute value smaller or equal to num_baseline_frames!" + if self.is_use_positive_fluo: + trial_dff = ( + self.trial_fluo.get_trials(self._trial_mask).positive_part().data + ) + else: + trial_dff = self.trial_fluo.get_trials(self._trial_mask).data + stim_trial = trial_dff[ + :, + :, + self.num_baseline_frames + + frame_shift : -self.num_baseline_frames + + frame_shift, + ] + responses = stim_trial.mean(2) + LSN_template = self.LSN_stim[self._trial_mask] + with gag(): + self.chi_square_pvals = chi_square_RFs(responses, LSN_template, num_shuffles) + + @staticmethod + def _remove_non_significant(RF, p_values, significant_lvl=0.05): + """To remove the non-significant part of the RF. + + Parameters + ---------- + RF : array-like, 2D + The receptive field computed by greedy pixelwise approach. + p_values : array-like, 2D + The p-values from Chi-square test. + significant_lvl : float + The significant level of the Chi-square p-values. + + Returns + ------- + RF : array-like, 2D + The receptive field with non-significant parts removed. + """ + RF = RF.copy() + non_sig_mask = p_values > significant_lvl + RF[non_sig_mask] = 0 + return RF + + @staticmethod + def _normalize_RF(RF): + """To normalize the receptive field to range from 0 to 1. + + Parameters + ---------- + RF : array-like + The receptive field to be normalized. + + Returns + ------- + RF : array-like + The normalized RF. + """ + if np.nanmin(RF) == np.nanmax(RF): + return np.zeros(RF.shape) + RF /= np.nanmax(abs(RF)) + return RF + + def get_greedy_RFs( + self, + frame_shift=3, + alpha=0.05, + sweep_response_type="mean", + chisq_significant_lvl=0.05, + norm_RF=False, + ): + """To compute the receptive fields using greedy pixelwise approach. + + Parameters + ---------- + frame_shift : int + The frame shift of the window to account for the delay in calcium responses for the Chi-square test. + Default is 3. + alpha : float + The significance threshold for a pixel to be included in the RF map. + This number will be corrected for multiple comparisons (number of pixels). + sweep_response_type : str + Choice of 'mean' for mean_sweep_events or 'binary' to make boolean calls of + whether any events occurred within the sweep window. + chisq_significant_lvl : float + The significance threshold of the Chi-square test p-values for the RF pixels to be included. + norm_RF : bool + If True, the computed RFs will be normalized to their corresponding max value. + + Creates + ------- + ON_RFs, OFF_RFs : array-like, 3D + The ON/OFF receptive subfields. Shape = (num_cells, ylen, xlen). + """ + self._get_chi_square_pvals(frame_shift) + self.ON_RFs = [] + self.OFF_RFs = [] + stimulus_table = self.LSN_stim_table.astype(int) + stimulus_table.columns = ["start", "end", "frame"] + stimulus_table = stimulus_table[self._trial_mask] + stimulus_table["start"] = stimulus_table["start"] + frame_shift + stimulus_table["end"] = stimulus_table["end"] + frame_shift + LSN_template = self.LSN_stim[self._trial_mask] + all_L0_events = ( + self.dff_fluo.positive_part().data + if self.is_use_positive_fluo + else self.dff_fluo.data + ) + + for idx in range(self.num_cells): + RF_ON, RF_OFF = get_receptive_field_greedy( + all_L0_events[idx], + stimulus_table, + LSN_template, + alpha, + sweep_response_type, + ) + RF_ON = self._remove_non_significant( + RF_ON, self.chi_square_pvals[idx], chisq_significant_lvl + ) + RF_OFF = self._remove_non_significant( + RF_OFF, self.chi_square_pvals[idx], chisq_significant_lvl + ) + self.ON_RFs.append(self._normalize_RF(RF_ON) if norm_RF else RF_ON) + self.OFF_RFs.append(self._normalize_RF(RF_OFF) if norm_RF else RF_OFF) + self.ON_RFs, self.OFF_RFs = np.array(self.ON_RFs), -np.array(self.OFF_RFs) + self._integration_window_start = self.num_baseline_frames + frame_shift + self._integration_window_len = ( + self.ON_avg_responses.shape[-1] - 2 * self.num_baseline_frames + ) + self.RF_type = "Greedy pixelwise RF" + + def get_trial_avg_RFs(self, threshold=0, window_start=None, window_len=None): + """To get the ON and OFF RFs and the position of their max response. + + Parameters + ---------- + threshold : int or float + Range = [0, 1]. The threshold for the RF, anything below the threshold will be set to 0. + window_start : int + The start frame index (within a trial) of the integration window for computing the RFs. + window_len : int + The length of the integration window in frames for computing the RFs. + + Creates + ------- + ON_RFs : 3d np.array + The ON receptive field array, shape = (num_cells, ylen, xlen). + OFF_RFs : 3d np.array + The OFF receptive field array, shape = (num_cells, ylen, xlen). + ON_RF_peaks_yx : 2d np.array + The yx-indices of the peak ON responses of each cell, shape = (num_cells, 2). + OFF_RF_peaks_yx : 2d np.array + The yx-indices of the peak OFF responses of each cell, shape = (num_cells, 2). + """ + if window_start is None: + window_start = self.num_baseline_frames + if window_len is None: + window_len = self.ON_avg_responses.shape[-1] - 2 * self.num_baseline_frames + if window_start + window_len > self.ON_avg_responses.shape[-1]: + warnings.warn( + "The integration window [{}:{}] is shifted beyond the trial of length {}!".format( + window_start, + window_start + window_len, + self.ON_avg_responses.shape[-1], + ) + ) + self._integration_window_start = max(0, int(window_start)) + self._integration_window_len = max(0, int(window_len)) + threshold = max(0, threshold) + self.ON_RFs = self._compute_RF_subfield( + "ON", + threshold, + self._integration_window_start, + self._integration_window_len, + ) + self.OFF_RFs = self._compute_RF_subfield( + "OFF", + threshold, + self._integration_window_start, + self._integration_window_len, + ) + self.RF_type = "Trial averaged RF" + + def _get_RF_peaks_yx(self): + """To get the yx coordinates of max response of the ON and OFF RFs. + + Creates + ------- + ON_RF_peaks_yx : 2d np.array + The yx-indices of the peak ON responses of each cell, shape = (num_cells, 2). + OFF_RF_peaks_yx : 2d np.array + The yx-indices of the peak OFF responses of each cell, shape = (num_cells, 2). + """ + ON_cell_peak_idx = self.ON_RFs.reshape(self.ON_RFs.shape[0], -1).argmax(1) + OFF_cell_peak_idx = self.OFF_RFs.reshape(self.OFF_RFs.shape[0], -1).argmin(1) + self.ON_RF_peaks_yx = np.column_stack( + np.unravel_index(ON_cell_peak_idx, self.ON_RFs[0, :, :].shape) + ).astype(float) + self.OFF_RF_peaks_yx = np.column_stack( + np.unravel_index(OFF_cell_peak_idx, self.OFF_RFs[0, :, :].shape) + ).astype(float) + for i in range(self.num_cells): + if self.location_mask_dict["No_ON"][i]: + self.ON_RF_peaks_yx[i] = [np.nan, np.nan] + if self.location_mask_dict["No_OFF"][i]: + self.OFF_RF_peaks_yx[i] = [np.nan, np.nan] + + def _compute_RF_subfield(self, polarity, threshold, window_start, window_len): + """To compute the ON or OFF subfield given a threshold. + + Parameters + ---------- + polarity : str + 'ON' or 'OFF'. + threshold : int or float + Range = [0, 1]. The threshold for the RF, anything below the threshold will be set to 0. + window_start : int + The start index (within a trial) of the integration window for computing the RFs. + window_len : int + The length of the integration window in frames for computing the RFs. + + Returns + ------- + RFs : 3d np.array + Array containing ON or OFF RFs for all cells, shape = (num_cells, ylen, xlen). + """ + polarity = ReceptiveFieldPolarity.from_(polarity) + if polarity == ReceptiveFieldPolarity.ON: + RFs = self.ON_avg_responses[ + ..., window_start : window_start + window_len + ].mean(-1) + pol = 1 + elif polarity == ReceptiveFieldPolarity.OFF: + RFs = self.OFF_avg_responses[ + ..., window_start : window_start + window_len + ].mean(-1) + pol = -1 + else: + raise ValueError("Please enter 'ON' or 'OFF' for the polarity.") + RFs -= np.nanmean(RFs, axis=(1, 2))[:, None, None] + RFs /= np.nanmax(abs(RFs), axis=(1, 2))[:, None, None] + RFs[RFs < threshold] = 0.0 + RFs *= pol + return RFs + + def _compute_center_overlap(self, RF_arr, RF_thresh=0, bin_num=1000): + """Compute the fraction of overlap between ON/OFF receptive subfields and center. + + Parameters + ---------- + RF_arr : array-like, 2D + The receptive field. Shape = (ylen, xlen). + RF_thresh : float + The threshold of RF, the RF values below the threshold will not be considered. Default is 0. + bin_num : int + The number of binning for an LSN pixel when computing the overlapping indices. + Higher bin_num gives higher precision but will take longer computational time. + + Returns + ------- + overlapping_index : float + The overlapping index (fraction) of the RF with the stimulus center. + """ + RF = abs(np.array(RF_arr).copy()) + RF[RF < RF_thresh] = 0 + RF_ys, RF_xs = np.where(RF > 0) + total_overlap = 0 + for i, RFy in enumerate(RF_ys): + RFx = RF_xs[i] + tmp_ys = np.arange(RFy - 0.5, RFy + 0.5, 1 / bin_num) + tmp_xs = np.arange(RFx - 0.5, RFx + 0.5, 1 / bin_num) + xs, ys = np.meshgrid(tmp_xs, tmp_ys) + tmp_xys = np.vstack((xs.flatten(), ys.flatten())).T + distances = np.linalg.norm(tmp_xys - self.CS_center_pos_xy_pix, axis=1) + within_center = distances <= self.CS_center_radius_pix + overlap_fraction = within_center.sum() / bin_num ** 2 + total_overlap += overlap_fraction * RF[RFy, RFx] + overlapping_index = total_overlap / RF.sum() + return overlapping_index + + def _get_center_overlap(self, RF_thresh=0, bin_num=1000): + """To compute the overlapping index for ON/OFF RFs with inner/outer centers. + + Parameters + ---------- + RF_thresh : float or int + The threshold of RFs to be considered. Default is 0. + bin_num : int + The number of binning for an LSN pixel when computing the overlapping indices. + Higher bin_num gives higher precision but will take longer computational time. + + Creates + ------- + ON_overlap_idx, OFF_overlap_idx : list + List containing overlapping indices for the ON and OFF RFs with the CS center. + """ + overlapping_idx_ONOFF = [] + for RFs in [self.ON_RFs, self.OFF_RFs]: + sublst = [] + for RF in RFs: + overlap_idx = self._compute_center_overlap(RF, RF_thresh, bin_num) + sublst.append(overlap_idx) + overlapping_idx_ONOFF.append(sublst) + self.ON_overlap_idx, self.OFF_overlap_idx = np.array(overlapping_idx_ONOFF) + + def _get_CS_center_shift(self): + """ + Creates + ------- + _center_shift_xy_deg, center_shift_xy_pix : array-like, 1D + The x- and y-shifts of the CS center relative to the center of the monitor in degrees and LSN pixels. + """ + with gag(): + stim_table = rd.get_stimulus_table(self.datafile_path, "center_surround") + center_xs = np.array(stim_table.Center_x) + center_ys = np.array(stim_table.Center_y) + is_same_x = center_xs.min() == center_xs.max() + is_same_y = center_ys.min() == center_ys.max() + all_same = is_same_x & is_same_y + if all_same: + self._center_shift_xy_deg = np.array([center_xs[0], center_ys[0]]) + self._center_shift_xy_pix = self._center_shift_xy_deg / self._stim_size_deg + else: + raise ValueError( + "The center is not fixed at one location for this session: {}".format( + self.datafile_path + ) + ) + + def _get_CS_center_info(self): + """ + Creates + ------- + CS_center_pos_xy_pix : array-like, 1D + The x- and y-coordinates of the CS center in LSN pixels (origin at bottom-left). + CS_center_radius_pix : float + The radius of the CS center in LSN pixels. + """ + try: + self._get_CS_center_shift() + self.monitor_center_pix_xy = ( + np.array(self.LSN_stim.shape[-2:][::-1]) / 2 - 0.5 + ) + self.CS_center_pos_xy_pix = ( + self.monitor_center_pix_xy + self._center_shift_xy_pix + ) + CS_center_radius_deg = self._CS_center_diameter_deg / 2 + self.CS_center_radius_pix = CS_center_radius_deg / self._stim_size_deg + self._is_CS_session = True + except KeyError: + print("This is not a center-surround session!") + self._is_CS_session = False + + def get_RF_loc_masks(self, loc_thresh=0.8, RF_thresh=0, bin_num=1000): + """To get the boolean masks of RF locations based on their overlapping index with the centers. + + Parameters + ---------- + loc_thresh : float + The threshold for deciding whether the RF is located within the center or surround or not. + RF_thresh : float or int + The threshold of RFs to be considered. Default is 0. + bin_num : int + The number of binning for an LSN pixel when computing the overlapping indices. + Higher bin_num gives higher precision but will take longer computational time. + + Creates + ------- + location_mask_dict : dict + Dictionary containing masks for different conditions. + """ + self._get_center_overlap(RF_thresh, bin_num) + self.RF_loc_thresh = loc_thresh + ON_center = self.ON_overlap_idx >= self.RF_loc_thresh + ON_surround = self.ON_overlap_idx <= 1 - self.RF_loc_thresh + ON_border = (self.ON_overlap_idx > 1 - self.RF_loc_thresh) & ~ON_center + No_ON = ~(ON_center | ON_surround | ON_border) + OFF_center = self.OFF_overlap_idx >= self.RF_loc_thresh + OFF_surround = self.OFF_overlap_idx <= 1 - self.RF_loc_thresh + OFF_border = (self.OFF_overlap_idx > 1 - self.RF_loc_thresh) & ~OFF_center + No_OFF = ~(OFF_center | OFF_surround | OFF_border) + both_center = ON_center & OFF_center + both_surround = ON_surround & OFF_surround + both_border = ON_border & OFF_border + No_RF = No_ON & No_OFF + ON_center_alone = ON_center & No_OFF + OFF_center_alone = OFF_center & No_ON + ON_center_OFF_surround = ON_center & OFF_surround + OFF_center_ON_surround = OFF_center & ON_surround + + self.location_mask_dict = {} + self.location_mask_dict["ON_center"] = ON_center + self.location_mask_dict["ON_surround"] = ON_surround + self.location_mask_dict["ON_border"] = ON_border + self.location_mask_dict["No_ON"] = No_ON + self.location_mask_dict["OFF_center"] = OFF_center + self.location_mask_dict["OFF_surround"] = OFF_surround + self.location_mask_dict["OFF_border"] = OFF_border + self.location_mask_dict["No_OFF"] = No_OFF + self.location_mask_dict["both_center"] = both_center + self.location_mask_dict["both_surround"] = both_surround + self.location_mask_dict["both_border"] = both_border + self.location_mask_dict["No_RF"] = No_RF + self.location_mask_dict["ON_center_alone"] = ON_center_alone + self.location_mask_dict["OFF_center_alone"] = OFF_center_alone + self.location_mask_dict["ON_center_OFF_surround"] = ON_center_OFF_surround + self.location_mask_dict["OFF_center_ON_surround"] = OFF_center_ON_surround + + def plot_RFs( + self, + title, + cell_idx_lst, + polarity="both", + num_cols=5, + label_peak=True, + show_CS_center=True, + contour_levels=[], + ): + """To plot the RFs. + + Parameters + ---------- + title : str + The title of the figure. + cell_idx_lst : list or np.array + The cell numbers to be plotted. + polarity : str + 'ON', 'OFF', or 'both' (default). The polarity of the RFs to be plotted. + num_cols : int + The number of columns of the subplots. + label_peak : bool + If True, the pixel with max response will be labeled. + contour_levels : array-like + The contour levels to be plotted. + """ + if label_peak: + self._get_RF_peaks_yx() + ON_RFs = [ + self._normalize_RF(self.ON_RFs[i].copy()) for i in range(self.num_cells) + ] + OFF_RFs = [ + self._normalize_RF(self.OFF_RFs[i].copy()) for i in range(self.num_cells) + ] + polarity = ReceptiveFieldPolarity.from_(polarity) + figsize_x = num_cols * 2 + num_rows = np.ceil(len(cell_idx_lst) / num_cols).astype(int) + figsize_factor = ( + (self.LSN_stim.shape[1] * num_rows) + / (self.LSN_stim.shape[2] * num_cols) + * 1.5 + ) + figsize_y = figsize_x * figsize_factor + fig, axes = plt.subplots(num_rows, num_cols, figsize=(figsize_x, figsize_y)) + axes = axes.flatten() + fig.tight_layout() + fig.subplots_adjust( + wspace=0.1, + hspace=0.2, + top=0.95, + bottom=0.01, + left=0.002, + right=0.998, + ) + fig.suptitle(title) + for i, ax in enumerate(axes): + if i < len(cell_idx_lst) and cell_idx_lst[i] < self.num_cells: + idx = cell_idx_lst[i] + if polarity == ReceptiveFieldPolarity.ON: + pcol = ax.pcolormesh(ON_RFs[idx], cmap="coolwarm") + if label_peak: + ax.plot( + self.ON_RF_peaks_yx[idx, 1] + 0.5, + self.ON_RF_peaks_yx[idx, 0] + 0.5, + ".r", + ) + if polarity == ReceptiveFieldPolarity.OFF: + pcol = ax.pcolormesh(OFF_RFs[idx], cmap="coolwarm") + if label_peak: + ax.plot( + self.OFF_RF_peaks_yx[idx, 1] + 0.5, + self.OFF_RF_peaks_yx[idx, 0] + 0.5, + ".b", + ) + if polarity == ReceptiveFieldPolarity.BOTH: + pcol = ax.pcolormesh( + ON_RFs[idx] + OFF_RFs[idx], cmap="coolwarm" + ) # plus because OFF_RFs are already negative. + if label_peak: + ax.plot( + self.ON_RF_peaks_yx[idx, 1] + 0.5, + self.ON_RF_peaks_yx[idx, 0] + 0.5, + ".r", + ) + ax.plot( + self.OFF_RF_peaks_yx[idx, 1] + 0.5, + self.OFF_RF_peaks_yx[idx, 0] + 0.5, + ".b", + ) + ax.set_aspect("equal", "box") + pcol.set_edgecolor("face") + pcol.set_clim([-1, 1]) + ax.set_xticks([]) + ax.set_yticks([]) + ax.set_title("Cell {}".format(self.cell_ids[idx]), y=0.99) + # ax.set_ylim(ax.get_ylim()[::-1]) + if show_CS_center: + CS_center = plt.Circle( + self.CS_center_pos_xy_pix + 0.5, + self.CS_center_radius_pix, + color="k", + fill=False, + ) + ax.add_patch(CS_center) + if contour_levels: + if polarity != ReceptiveFieldPolarity.ON: + ax.contour( + -OFF_RFs[idx], + contour_levels, + colors="deepskyblue", + origin="lower", + ) + if polarity != ReceptiveFieldPolarity.OFF: + ax.contour( + ON_RFs[idx], + contour_levels, + colors="gold", + origin="lower", + ) + else: + ax.set_visible(False) + return fig + + def plot_pixel_avg_dff_traces( + self, polarity, cell_idx, num_std=2, ax=None, **pltargs + ): + """To plot the trial-averaged responses within pixels (all pixels of the LSN stimulus) for a cell. + + Parameters + ---------- + polarity : str + 'ON' or 'OFF'. The polarity of the responses to be plotted. + cell_idx : int + The cell index to be plotted. + num_std : int or float + Number of standard deviation from mean for plotting the horizontal span. + pltargs + Other kwargs as for plt.plot(). + """ + polarity = ReceptiveFieldPolarity.from_(polarity) + if polarity == ReceptiveFieldPolarity.ON: + avg_responses = self.ON_avg_responses + elif polarity == ReceptiveFieldPolarity.OFF: + avg_responses = self.OFF_avg_responses + else: + raise ValueError("Please enter 'ON' or 'OFF' for the polarity.") + flat_response = avg_responses[cell_idx].reshape( + -1, self.trial_fluo.num_timesteps + ) + response_mean = np.nanmean(flat_response) + response_std = np.nanstd(flat_response) + lower_bound = response_mean - num_std * response_std + upper_bound = response_mean + num_std * response_std + if ax is None: + ax = plt.gca() + if polarity == ReceptiveFieldPolarity.ON: + target = self._ON_stim_value + else: + target = self._OFF_stim_value + if self.is_use_positive_fluo: + single_cell_data = ( + self.trial_fluo.get_trials(self._trial_mask) + .get_cells(cell_idx) + .positive_part() + ) + else: + single_cell_data = self.trial_fluo.get_trials(self._trial_mask).get_cells( + cell_idx + ) + stimulus_highlighted = ( + False # Add a flag so we can avoid highlighting the stimulus multiple times + ) + for y in range(self.LSN_stim.shape[1]): + for x in range(self.LSN_stim.shape[2]): + trial_mean = single_cell_data.get_trials( + self.LSN_stim[self._trial_mask, y, x] == target + ).trial_mean() + if not stimulus_highlighted: + trial_mean.plot( + ax=ax, + fill_mean_pm_std=False, + highlight_non_baseline=True, + **pltargs + ) + stimulus_highlighted = True + else: + trial_mean.plot( + ax=ax, + fill_mean_pm_std=False, + highlight_non_baseline=False, + **pltargs + ) + integration_start_sec = ( + self._integration_window_start * self.trial_fluo.timestep_width + - self.trial_fluo._baseline_duration + ) + integration_end_sec = ( + integration_start_sec + + (self._integration_window_len - 1) * self.trial_fluo.timestep_width + ) + ax.axvspan( + integration_start_sec, + integration_end_sec, + color="lightblue", + alpha=0.5, + label="RF integration window", + ) + ax.axhspan( + lower_bound, + upper_bound, + color="lightgreen", + alpha=0.5, + label="Mean $\pm$ {} std".format(num_std), + ) + ax.legend() + ax.set_title( + "Cell {} ({} responses)\nTrial-averaged DF/F traces within pixel".format( + cell_idx, polarity.name + ) + ) + return ax + + def save_data(self, save_path): + data_dict = {} + data_dict['cell IDs'] = self.cell_ids + data_dict['Chi-square p-values'] = self.chi_square_pvals + data_dict['CS center pos xy (pix)'] = self.CS_center_pos_xy_pix + data_dict['CS center radius (pix)'] = self.CS_center_radius_pix + data_dict['analyzed data file'] = self.datafile_path + data_dict['is use corrected LSN'] = self.is_use_corrected_LSN + data_dict['is use DFF z-score'] = self.is_use_dff_z_score + data_dict['is use positive fluo'] = self.is_use_positive_fluo + data_dict['is use valid eye pos'] = self.is_use_valid_eye_pos + data_dict['location masks'] = self.location_mask_dict + data_dict['LSN stimuli'] = self.LSN_stim + data_dict['monitor center xy (pix)'] = self.monitor_center_pix_xy + data_dict['num baseline frames'] = self.num_baseline_frames + data_dict['number of cells'] = self.num_cells + data_dict['OFF averaged responses'] = self.OFF_avg_responses + data_dict['OFF overlapping index'] = self.OFF_overlap_idx + data_dict['OFF RFs'] = self.OFF_RFs + data_dict['ON averaged responses'] = self.ON_avg_responses + data_dict['ON overlapping index'] = self.ON_overlap_idx + data_dict['ON RFs'] = self.ON_RFs + data_dict['RF location threshold'] = self.RF_loc_thresh + data_dict['RF type'] = self.RF_type + data_dict['valid eye pos masks'] = self.valid_eye_pos + data_dict['ref pos for LSN stim correction'] = self.yx_ref + data_dict['CS center xy shifts (deg)'] = self._center_shift_xy_deg + data_dict['CS center xy shifts (pix)'] = self._center_shift_xy_pix + data_dict['corrected LSN stim by eye pos'] = self._corrected_LSN_stim + data_dict['CS center diametere (deg)'] = self._CS_center_diameter_deg + data_dict['Fluo frame rate (Hz)'] = self._frame_rate_Hz + data_dict['Original full LSN stim'] = self._full_LSN_stim + data_dict['RF integration window length'] = self._integration_window_len + data_dict['RF integration window start'] = self._integration_window_start + data_dict['is CS session'] = self._is_CS_session + data_dict['LSN grid size (deg)'] = self._stim_size_deg + data_dict['LSN trial masks'] = self._trial_mask + np.save(save_path, data_dict) + print("Data saved!") + + +class ReceptiveFieldPolarity(Enum): + ON = 1 + OFF = 2 + BOTH = 3 + + @staticmethod + def from_(polarity): + """Coerce `polarity` to a ReceptiveFieldPolarity.""" + if isinstance(polarity, ReceptiveFieldPolarity): + return polarity + elif polarity.upper() == "ON": + return ReceptiveFieldPolarity.ON + elif polarity.upper() == "OFF": + return ReceptiveFieldPolarity.OFF + elif polarity.upper() == "ANY": + pol_value = ReceptiveFieldPolarity._get_any() + return ( + ReceptiveFieldPolarity.ON + if pol_value == 1 + else ReceptiveFieldPolarity.OFF + ) + elif polarity.upper() == "BOTH": + return ReceptiveFieldPolarity.BOTH + else: + raise ValueError("Polarity must be 'ON', 'OFF', 'ANY' or 'BOTH'.") + + def _get_any(): + return np.random.randint(1, 3) + + +class gag: + def __enter__(self): + self._original_stdout = sys.stdout + sys.stdout = open(os.devnull, 'w') + + def __exit__(self, exc_type, exc_val, exc_tb): + sys.stdout = self._original_stdout \ No newline at end of file diff --git a/oscopetools/__init__.py b/oscopetools/__init__.py index 216b588..e2e72c0 100644 --- a/oscopetools/__init__.py +++ b/oscopetools/__init__.py @@ -1,8 +1,10 @@ from . import chi_square_lsn from . import chisq_categorical -from . import get_all_data +from . import read_data from . import locally_sparse_noise from . import nd2_zstack from . import roi_information from . import stim_table from . import util +from . import adjust_stim +from . import LSN_analysis diff --git a/oscopetools/adjust_stim.py b/oscopetools/adjust_stim.py new file mode 100644 index 0000000..9b53681 --- /dev/null +++ b/oscopetools/adjust_stim.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Jul 21 17:18:47 2020 + +@author: kailun +""" + +import numpy as np + + +def correct_LSN_stim_by_eye_pos( + LSN_stim, + LSN_stim_table, + eye_tracking, + yx_ref=None, + stim_size=10, + stim_background_value=127, +): + """ + To correct the LSN stimulus array by using the eye position averaged within trial. + + Parameters + ---------- + LSN_stim : 3d np.array + The LSN stimulus array, shape = (num_trials, ylen, xlen). + LSN_stim_table : pd.DataFrame + The stim_table of loccally sparse noise. + eye_tracking : EyeTracking + The eye tracking data. + yx_ref : list, np.array, or None, default None + The reference y- and x-positions (hypothetical eye position looking at the center of the stimulus monitor), + where corrected_stim_pos = original_stim_pos - yx_ref. If None, the mean y- and x-positions of the + eye during LSN stimuli will be the yx_ref. + stim_size : int, default 10 + The side length of the stimulus in degree. + stim_background_value : int, default 127 + The background value (gray) of the LSN stimulus. + + Returns + ------- + corrected_stim_arr : 3d np.array + The corrected LSN stimulus array according to the eye positions averaged within trial. + isvalid_eye_pos : bool vector-like + Boolean array showing valid eye position (not NaN). Use corrected_stim_arr[isvalid_eye_pos] + to get the trials with valid eye position. + yx_ref : 1d np.array + The reference y- and x-positions used for correcting the LSN stimulus array. + """ + eye_trials = eye_tracking.cut_by_trials(LSN_stim_table) + eye_trial_mean = eye_trials.trial_mean(within_trial=True, ignore_nan=True) + yx_eye_pos = np.squeeze( + np.dstack( + [eye_trial_mean.data.y_pos_deg, eye_trial_mean.data.x_pos_deg] + ) + ) + if yx_ref is None: + yx_ref = np.nanmean(yx_eye_pos, 0) + border = ( + np.ceil(np.nanmax(abs(yx_eye_pos - yx_ref)) / stim_size).astype(int) + + 1 + ) # + 1 for ensuring that the border is wide enough + corrected_stim_arr = np.zeros( + ( + LSN_stim_table.shape[0], + LSN_stim.shape[1] + 2 * border, + LSN_stim.shape[2] + 2 * border, + ), + dtype="int32", + ) + corrected_stim_arr += stim_background_value + corrected_stim_arr[:, border:-border, border:-border] = LSN_stim[ + LSN_stim_table["Frame"] + ] + isvalid_eye_pos = [] + for i in range(LSN_stim_table.shape[0]): + if np.isnan(yx_eye_pos[i]).any(): + isvalid_eye_pos.append(False) + continue + else: + isvalid_eye_pos.append(True) + yx_deviation = np.around((yx_eye_pos[i] - yx_ref) / stim_size).astype( + int + ) + corrected_stim_arr[i] = np.roll( + corrected_stim_arr[i], (yx_deviation[0], yx_deviation[1]), (0, 1) + ) + return ( + corrected_stim_arr[:, border:-border, border:-border], + np.array(isvalid_eye_pos), + yx_ref, + ) diff --git a/oscopetools/get_all_data.py b/oscopetools/get_all_data.py deleted file mode 100644 index eb1fcbd..0000000 --- a/oscopetools/get_all_data.py +++ /dev/null @@ -1,180 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Mon Mar 09 20:46:47 2020 - -@author: saskiad -""" - -import os -import numpy as np -import pandas as pd -import json -import h5py -from PIL import Image -from .stim_table import create_stim_tables, get_center_coordinates -from .RunningData import get_running_data - - -def get_all_data(path_name, save_path, expt_name, row): - - # get access to sub folders - for f in os.listdir(path_name): - if f.startswith('ophys_experiment'): - expt_path = os.path.join(path_name, f) - elif f.startswith('eye_tracking'): - eye_path = os.path.join(path_name, f) - for f in os.listdir(expt_path): - if f.startswith('processed'): - proc_path = os.path.join(expt_path, f) - for f in os.listdir(proc_path): - if f.startswith('ophys_cell_segmentation_run'): - roi_path = os.path.join(proc_path, f) - - # ROI table - for fname in os.listdir(expt_path): - if fname.endswith('output_cell_roi_creation.json'): - jsonpath = os.path.join(expt_path, fname) - with open(jsonpath, 'r') as f: - jin = json.load(f) - f.close() - break - roi_locations = pd.DataFrame.from_dict(data=jin['rois'], orient='index') - roi_locations.drop( - columns=['exclude_code', 'mask_page'], inplace=True - ) # removing columns I don't think we need - roi_locations.reset_index(inplace=True) - - session_id = int(path_name.split('/')[-1]) - roi_locations['session_id'] = session_id - - # dff traces - for f in os.listdir(expt_path): - if f.endswith('_dff.h5'): - dff_path = os.path.join(expt_path, f) - f = h5py.File(dff_path, 'r') - dff = f['data'].value - f.close() - - # raw fluorescence & cell ids - for f in os.listdir(proc_path): - if f.endswith('roi_traces.h5'): - traces_path = os.path.join(proc_path, f) - f = h5py.File(traces_path, 'r') - raw_traces = f['data'][()] - cell_ids = f['roi_names'][()].astype(str) - f.close() - roi_locations['cell_id'] = cell_ids - - # eyetracking - eye_data = pd.DataFrame() - for fn in os.listdir(eye_path): - if fn.endswith('ellipse.h5'): - eye_file = os.path.join(eye_path, fn) - if fn.endswith('mapping.h5'): - dlc_file = os.path.join(eye_path, fn) - pupil_area = pd.read_hdf(dlc_file, 'raw_pupil_areas') - eye_area = pd.read_hdf(dlc_file, 'raw_eye_areas') - pos = pd.read_hdf(dlc_file, 'raw_screen_coordinates_spherical') - - ##temporal alignment - for f in os.listdir(expt_path): - if f.endswith('time_synchronization.h5'): - temporal_alignment_file = os.path.join(expt_path, f) - f = h5py.File(temporal_alignment_file, 'r') - eye_frames = f['eye_tracking_alignment'].value - f.close() - eye_frames = eye_frames.astype(int) - eye_frames = eye_frames[np.where(eye_frames > 0)] - - eye_area_sync = eye_area[eye_frames] - pupil_area_sync = pupil_area[eye_frames] - x_pos_sync = pos.x_pos_deg.values[eye_frames] - y_pos_sync = pos.y_pos_deg.values[eye_frames] - - ##correcting dropped camera frames - test = eye_frames[np.isfinite(eye_frames)] - test = test.astype(int) - temp2 = np.bincount(test) - dropped_camera_frames = np.where(temp2 > 2)[0] - for a in dropped_camera_frames: - null_2p_frames = np.where(eye_frames == a)[0] - eye_area_sync[null_2p_frames] = np.NaN - pupil_area_sync[null_2p_frames] = np.NaN - x_pos_sync[null_2p_frames] = np.NaN - y_pos_sync[null_2p_frames] = np.NaN - - eye_sync = pd.DataFrame( - data=np.vstack( - (eye_area_sync, pupil_area_sync, x_pos_sync, y_pos_sync) - ).T, - columns=('eye_area', 'pupil_area', 'x_pos_deg', 'y_pos_deg'), - ) - - # max projection - mp_path = os.path.join(proc_path, 'max_downsample_4Hz_0.png') - mp = Image.open(mp_path) - mp_array = np.array(mp) - - # ROI masks outlines - boundary_path = os.path.join(roi_path, 'maxInt_boundary.png') - boundary = Image.open(boundary_path) - boundary_array = np.array(boundary) - - # stimulus table - stim_table = create_stim_tables( - path_name - ) # returns dictionary. Not sure how to save dictionary so pulling out each dataframe - - # running speed - dxds, startdate = get_running_data(path_name) - # pad end with NaNs to match length of dff - nframes = dff.shape[1] - dxds.shape[0] - dx = np.append(dxds, np.repeat(np.NaN, nframes)) - - # meta data - meta_data = {} - meta_data['mouse_id'] = row.Mouse_ID - meta_data['area'] = row.Area - meta_data['imaging_depth'] = row.Depth - meta_data['cre'] = row.Cre - meta_data['container_ID'] = row.Container_ID - meta_data['session_ID'] = session_id - meta_data['startdate'] = startdate - - # Save Data - save_file = os.path.join( - save_path, expt_name + '_' + str(session_id) + '_data.h5' - ) - print("Saving data to: ", save_file) - store = pd.HDFStore(save_file) - store['roi_table'] = roi_locations - for key in list(stim_table.keys()): - store[key] = stim_table[key] - store['eye_tracking'] = eye_sync - - store.close() - f = h5py.File(save_file, 'r+') - dset = f.create_dataset('dff_traces', data=dff) - dset1 = f.create_dataset('raw_traces', data=raw_traces) - dset2 = f.create_dataset('cell_ids', data=cell_ids) - dset3 = f.create_dataset('max_projection', data=mp_array) - dset4 = f.create_dataset('roi_outlines', data=boundary_array) - dset5 = f.create_dataset('running_speed', data=dx) - dset6 = f.create_dataset('meta_data', data=str(meta_data)) - f.close() - - return - - -if __name__ == '__main__': - manifest = pd.read_csv( - r'/Users/saskiad/Documents/Openscope/2019/Surround suppression/Final dataset/data manifest.csv' - ) - row = manifest.loc[27] - expt_id = row.Size_Tuning_Expt_ID - path_name = os.path.join( - r'/Volumes/New Volume', str(int(expt_id)) - ) # 975348996' - expt_name = 'Multiplex' - save_path = r'/Users/saskiad/Documents/Openscope/2019/Surround suppression/Final dataset' - get_all_data(path_name, save_path, expt_name, row) diff --git a/oscopetools/greedy_pixelwise_rf.py b/oscopetools/greedy_pixelwise_rf.py new file mode 100644 index 0000000..f03104e --- /dev/null +++ b/oscopetools/greedy_pixelwise_rf.py @@ -0,0 +1,253 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +""" +Created on Wed May 27 22:20:46 2020 + +@author: danielm +""" + +import numpy as np +from statsmodels.sandbox.stats.multicomp import multipletests + +def get_receptive_field_greedy(L0_events, + stimulus_table, + LSN_template, + alpha=0.05, + sweep_response_type='mean'): + # INPUTS: + # + # LO_events: 1D numpy array with shape (num_2p_imaging_frames_in_session,) + # that is the timeseries of detected L0 events for the entire + # imaging session for a single ROI (e.g. cell/soma). + # stimulus_table: pandas DataFrame that contains 'start' and 'end' columns + # that indicate the imaging frames that bound the presentation + # of each stimulus frame (i.e. one frame of LSN pixels, NOT one + # monitor refresh cycle). + # + # LSN_template: 3D numpy array with shape (num_stim_frames,num_y_pixels,num_x_pixels) + # where each stimulus frame contains the locally sparse noise stimulus + # on a single trials (i.e. one row of 'stimulus_table'). + # + # alpha: the significance threshold for a pixel to be included in the RF map. + # This number will be corrected for multiple comparisons (number of pixels). + # + # sweep_response_type: Choice of 'mean' for mean_sweep_events or 'binary' to + # make boolean calls of whether any events occurred + # within the sweep window. + # + # OUTPUTS: + # + # receptive_field_on, receptive_field_off: 2D numpy arrays of the stimulus triggered + # average ('STA') receptive fields, after masking to show only + # responses for pixels that are determined to be significant + # by bootstrapping. + + # determine the type of calculation for sweep responses + if sweep_response_type == 'mean': + sweep_events = get_mean_sweep_events(L0_events,stimulus_table) + else: #to stay consistent with Nic's original analysis + sweep_events = binarize_sweep_events(L0_events,stimulus_table) + + # calculate p-values for each pixel to determine if the response is significant + pvalues_on, pvalues_off = greedy_pixelwise_pvals(sweep_events, + stimulus_table, + LSN_template, + alpha=alpha) + mask_on = pvals_to_mask(pvalues_on,alpha=alpha) + mask_off = pvals_to_mask(pvalues_off,alpha=alpha) + + A = get_design_matrix(stimulus_table,LSN_template) + + STA_on, STA_off = calc_STA(A,sweep_events,LSN_template) + + # apply mask to get only the significant pixels of the STA + receptive_field_on = STA_on * mask_on + receptive_field_off = STA_off * mask_off + + return receptive_field_on, receptive_field_off + +def calc_STA(A,sweep_events,LSN_template): + + (num_frames,num_y_pixels,num_x_pixels) = np.shape(LSN_template) + number_of_pixels = A.shape[0] // 2 + + STA = A.dot(sweep_events) + STA_on = STA[:number_of_pixels].reshape(num_y_pixels,num_x_pixels) + STA_off = STA[number_of_pixels:].reshape(num_y_pixels,num_x_pixels) + + return STA_on, STA_off + +def pvals_to_mask(pixelwise_pvals,alpha=0.05): + return pixelwise_pvals < alpha + +def greedy_pixelwise_pvals(sweep_events, + stimulus_table, + LSN_template, + alpha=0.05): + + # INPUTS: + # + # sweep_events: 1D numpy array with shape (num_sweeps,) that has the response + # on each sweep. + # + # stimulus_table: pandas DataFrame that contains 'start' and 'end' columns + # that indicate the imaging frames that bound the presentation + # of each stimulus frame (i.e. one frame of LSN pixels, NOT one + # monitor refresh cycle). + # + # LSN_template: 3D numpy array with shape (num_stim_frames,num_y_pixels,num_x_pixels) + # where each stimulus frame contains the locally sparse noise stimulus + # on a single trials (i.e. one row of 'stimulus_table'). + # + # OUTPUTS: + # + # fdr_corrected_pvalues_on, fdr_corrected_pvalues_off: 2D numpy arrays + # containing the p-values for each pixel location after + # correction for multiple comparisons. + + (num_stim_frames,num_y_pixels,num_x_pixels) = np.shape(LSN_template) + number_of_pixels = num_y_pixels * num_x_pixels + + # compute p-values for each pixel by comparing the number of sweeps with + # an event against a null distribution obtained by shuffling. + pvalues = events_to_pvalues_no_fdr_correction(sweep_events,stimulus_table,LSN_template) + + # correct the p-values for the multiple comparisons that were performed across + # all pixels, default is Holm-Sidak: + fdr_corrected_pvalues = multipletests(pvalues, alpha=alpha)[1] + + # convert to 2D pixel arrays, split by On/Off pixels + fdr_corrected_pvalues_on = fdr_corrected_pvalues[:number_of_pixels].reshape(num_y_pixels,num_x_pixels) + fdr_corrected_pvalues_off = fdr_corrected_pvalues[number_of_pixels:].reshape(num_y_pixels,num_x_pixels) + + return fdr_corrected_pvalues_on, fdr_corrected_pvalues_off + +def events_to_pvalues_no_fdr_correction(sweep_events, + stimulus_table, + LSN_template, + number_of_shuffles=20000, + seed=1): + + # get stimulus design matrix: + A = get_design_matrix(stimulus_table,LSN_template) + + # initialize random seed for reproducibility: + np.random.seed(seed) + + # generate null distribution of pixel responses by shuffling with replacement + shuffled_STAs = get_shuffled_pixelwise_responses(sweep_events, A, number_of_shuffles=number_of_shuffles) + + # p-values are the fraction of times the shuffled response to each pixel is greater than the + # actual observed response to that pixel. + actual_STA = A.dot(sweep_events) + p_values = np.mean(actual_STA.reshape(A.shape[0],1) <= shuffled_STAs,axis=1) + + return p_values + +def get_design_matrix(stimulus_table,LSN_template,GRAY_VALUE=127): + + # construct the design matrix + # + # OUTPUTS: + # + # A: 2D numpy array with size (num_pixels, num_sweeps) where each element is + # True if the pixel was active during that sweep. + + (num_stim_frames,num_y_pixels,num_x_pixels) = np.shape(LSN_template) + num_sweeps = len(stimulus_table) + num_pixels = num_y_pixels * num_x_pixels + + sweep_stim_frames = stimulus_table['frame'].values.astype(np.int) + + # check that the inputs are complete + assert np.max(sweep_stim_frames) <= num_stim_frames + + A = np.zeros((2*num_pixels, num_sweeps)) + for i_sweep,sweep_frame in enumerate(sweep_stim_frames): + A[:num_pixels, i_sweep] = (LSN_template[sweep_frame,:,:].flatten() > GRAY_VALUE).astype(float) + A[num_pixels:, i_sweep] = (LSN_template[sweep_frame,:,:].flatten() < GRAY_VALUE).astype(float) + + return A + +def binarize_sweep_events(L0_events,stimulus_table): + + # INPUTS: + # + # LO_events: 1D numpy array with shape (num_2p_imaging_frames_in_session,) + # that is the timeseries of detected L0 events for the entire + # imaging session for a single ROI (e.g. cell/soma). + # + # stimulus_table: pandas DataFrame that contains 'start' and 'end' columns + # that indicate the imaging frames that bound the presentation + # of each stimulus frame (i.e. one frame of LSN pixels, NOT one + # monitor refresh cycle). + # + # OUTPUTS: + # + # sweep_has_event: 1D numpy array of type bool with shape (num_sweeps,) + # that has a binary call for each sweep of whether or not + # the ROI had any events during the sweep. + + num_imaging_frames = len(L0_events) + last_imaging_frame_during_stim = np.max(stimulus_table['end'].values) + + assert last_imaging_frame_during_stim <= num_imaging_frames + + num_sweeps = len(stimulus_table) + sweep_has_event = np.zeros(num_sweeps, dtype=np.bool) + for i_sweep, (start_frame, end_frame) in enumerate(zip(stimulus_table['start'].values, stimulus_table['end'].values)): + + if L0_events[start_frame:end_frame].max() > 0: + sweep_has_event[i_sweep] = True + + return sweep_has_event + +def get_mean_sweep_events(L0_events,stimulus_table): + + # INPUTS: + # + # LO_events: 1D numpy array with shape (num_2p_imaging_frames_in_session,) + # that is the timeseries of detected L0 events for the entire + # imaging session for a single ROI (e.g. cell/soma). + # + # stimulus_table: pandas DataFrame that contains 'start' and 'end' columns + # that indicate the imaging frames that bound the presentation + # of each stimulus frame (i.e. one frame of LSN pixels, NOT one + # monitor refresh cycle). + # + # OUTPUTS: + # + # mean_sweep_events: 1D numpy array of type float with shape (num_sweeps,) + # that has the mean event size for each sweep for the ROI. + + num_imaging_frames = len(L0_events) + last_imaging_frame_during_stim = np.max(stimulus_table['end'].values) + + assert last_imaging_frame_during_stim <= num_imaging_frames + + num_sweeps = len(stimulus_table) + mean_sweep_events = np.zeros(num_sweeps, dtype=np.float) + for i_sweep, (start_frame, end_frame) in enumerate(zip(stimulus_table['start'].values, stimulus_table['end'].values)): + mean_sweep_events[i_sweep] = L0_events[start_frame:end_frame].mean() + + return mean_sweep_events + +def get_shuffled_pixelwise_responses(sweep_events,A,number_of_shuffles=5000): + + # OUTPUTS: + # + # shuffled_STAs: 2D numpy array with shape (num_pixels,num_shuffles) + # where each column is an STA generated from bootstrap resampling the sweep + # responses, with replacement. + + num_sweeps = len(sweep_events) + + shuffled_STAs = np.zeros((A.shape[0],number_of_shuffles)) + for i_shuffle in range(number_of_shuffles): + + shuffled_sweeps = np.random.choice(num_sweeps, size=(num_sweeps,), replace=True) + shuffled_events = sweep_events[shuffled_sweeps] + + shuffled_STAs[:,i_shuffle] = A.dot(shuffled_events) + + return shuffled_STAs diff --git a/oscopetools/locally_sparse_noise.py b/oscopetools/locally_sparse_noise.py index 9b70891..afc3500 100644 --- a/oscopetools/locally_sparse_noise.py +++ b/oscopetools/locally_sparse_noise.py @@ -9,9 +9,7 @@ import numpy as np import pandas as pd import os, h5py - -# import core -from .stim_table import * +import matplotlib.pyplot as plt def do_sweep_mean(x): @@ -22,42 +20,48 @@ def do_sweep_mean_shifted(x): return x[30:40].mean() +def do_eye(x): + return x[28:32].mean() + + class LocallySparseNoise: def __init__(self, expt_path): self.expt_path = expt_path - self.session_id = self.expt_path.split('/')[ - -1 - ] # this might need to be modified for where the data is for you. + self.session_id = self.expt_path.split('/')[-1].split('_')[-2] # load dff traces - for f in os.listdir(self.expt_path): - if f.endswith('_dff.h5'): - dff_path = os.path.join(self.expt_path, f) - f = h5py.File(dff_path, 'r') - self.dff = f['data'][()] + f = h5py.File(self.expt_path, 'r') + self.dff = f['dff_traces'][()] f.close() + self.numbercells = self.dff.shape[0] # create stimulus table for locally sparse noise - stim_dict = lsnCS_create_stim_table(self.expt_path) - self.stim_table = stim_dict['locally_sparse_noise'] + self.stim_table = pd.read_hdf(self.expt_path, 'locally_sparse_noise') # load stimulus template self.LSN = np.load(lsn_path) + # load eyetracking + self.pupil_pos = pd.read_hdf(self.expt_path, 'eye_tracking') + # run analysis ( self.sweep_response, self.mean_sweep_response, - self.sweep_p_values, self.response_on, self.response_off, + self.sweep_eye, + self.mean_sweep_eye, ) = self.get_stimulus_response(self.LSN) self.peak = self.get_peak() # save outputs - self.save_data() + # self.save_data() + + # plot traces + self.plot_LSN_Traces() def get_stimulus_response(self, LSN): '''calculates the response to each stimulus trial. Calculates the mean response to each stimulus condition. @@ -77,36 +81,30 @@ def get_stimulus_response(self, LSN): columns=np.array(list(range(self.numbercells))).astype(str), ) + sweep_eye = pd.DataFrame( + index=self.stim_table.index.values, + columns=('x_pos_deg', 'y_pos_deg'), + ) + for index, row in self.stim_table.iterrows(): for nc in range(self.numbercells): sweep_response[str(nc)][index] = self.dff[ nc, int(row.Start) - 28 : int(row.Start) + 35 ] + sweep_eye.x_pos_deg[index] = self.pupil_pos.x_pos_deg[ + int(row.Start) - 28 : int(row.Start + 35) + ].values + sweep_eye.y_pos_deg[index] = self.pupil_pos.y_pos_deg[ + int(row.Start) - 28 : int(row.Start + 35) + ].values mean_sweep_response = sweep_response.applymap(do_sweep_mean_shifted) - - # make spontaneous p_values - # TODO: pilot stimulus does not have spontaneous activity. But real data will and we shoudl re-implement this - # shuffled_responses = np.empty((self.numbercells, 10000,10)) - # idx = np.random.choice(range(self.stim_table_sp.start[0], self.stim_table_sp.end[0]), 10000) - # for i in range(10): - # shuffled_responses[:,:,i] = self.l0_events[:,idx+i] - # shuffled_mean = shuffled_responses.mean(axis=2) - sweep_p_values = pd.DataFrame( - index=self.stim_table.index.values, - columns=np.array(list(range(self.numbercells))).astype(str), - ) - # for nc in range(self.numbercells): - # subset = mean_sweep_events[str(nc)].values - # null_dist_mat = np.tile(shuffled_mean[nc,:], reps=(len(subset),1)) - # actual_is_less = subset.reshape(len(subset),1) <= null_dist_mat - # p_values = np.mean(actual_is_less, axis=1) - # sweep_p_values[str(nc)] = p_values + mean_sweep_eye = sweep_eye.applymap(do_eye) x_shape = LSN.shape[1] y_shape = LSN.shape[2] - response_on = np.empty((x_shape, y_shape, self.numbercells, 3)) - response_off = np.empty((x_shape, y_shape, self.numbercells, 3)) + response_on = np.empty((x_shape, y_shape, self.numbercells, 2)) + response_off = np.empty((x_shape, y_shape, self.numbercells, 2)) for xp in range(x_shape): for yp in range(y_shape): on_frame = np.where(LSN[:, xp, yp] == 255)[0] @@ -114,27 +112,24 @@ def get_stimulus_response(self, LSN): subset_on = mean_sweep_response[ self.stim_table.Frame.isin(on_frame) ] - # subset_on_p = sweep_p_values[self.stim_table.frame.isin(on_frame)] subset_off = mean_sweep_response[ self.stim_table.Frame.isin(off_frame) ] - # subset_off_p = sweep_p_values[self.stim_table.frame.isin(off_frame)] response_on[xp, yp, :, 0] = subset_on.mean(axis=0) response_on[xp, yp, :, 1] = subset_on.std(axis=0) / np.sqrt( len(subset_on) ) - # response_on[xp,yp,:,2] = subset_on_p[subset_on_p<0.05].count().values/float(len(subset_on_p)) response_off[xp, yp, :, 0] = subset_off.mean(axis=0) response_off[xp, yp, :, 1] = subset_off.std(axis=0) / np.sqrt( len(subset_off) ) - # response_off[xp,yp,:,2] = subset_off_p[subset_off_p<0.05].count().values/float(len(subset_off_p)) return ( sweep_response, mean_sweep_response, - sweep_p_values, response_on, response_off, + sweep_eye, + mean_sweep_eye, ) def get_peak(self): @@ -149,30 +144,93 @@ def get_peak(self): ) peak['rf_on'] = False peak['rf_off'] = False - on_rfs = np.where(self.response_events_on[:, :, :, 2] > 0.25)[2] - off_rfs = np.where(self.response_events_off[:, :, :, 2] > 0.25)[2] + on_rfs = np.where(self.response_on[:, :, :, 2] > 0.25)[2] + off_rfs = np.where(self.response_off[:, :, :, 2] > 0.25)[2] peak.rf_on.loc[on_rfs] = True peak.rf_off.loc[off_rfs] = True return peak def save_data(self): + '''saves intermediate analysis files in an h5 file''' save_file = os.path.join( - self.expt_path, str(self.session_id) + "_lsn_analysis.h5" + r'/Users/saskiad/Documents/Data/Openscope_Multiplex/analysis', + str(self.session_id) + "_lsn_analysis.h5", ) print("Saving data to: ", save_file) store = pd.HDFStore(save_file) - store['sweep_response'] = self.sweep_events - store['mean_sweep_response'] = self.mean_sweep_events + store['sweep_response'] = self.sweep_response + store['mean_sweep_response'] = self.mean_sweep_response store['sweep_p_values'] = self.sweep_p_values store['peak'] = self.peak store.close() f = h5py.File(save_file, 'r+') - dset = f.create_dataset('response_on', data=self.response_events_on) - dset1 = f.create_dataset('response_off', data=self.response_events_off) + dset = f.create_dataset('response_on', data=self.response_on) + dset1 = f.create_dataset('response_off', data=self.response_off) f.close() + def plot_LSN_Traces(self): + '''plots ON and OFF traces for each position for each cell''' + print("Plotting LSN traces for all cells") + + for nc in range(self.numbercells): + if np.mod(nc, 100) == 0: + print("Cell #", str(nc)) + plt.figure(nc, figsize=(24, 20)) + vmax = 0 + vmin = 0 + one_cell = self.sweep_response[str(nc)] + for yp in range(8): + for xp in range(14): + sp_pt = (yp * 14) + xp + 1 + on_frame = np.where(self.LSN[:, yp, xp] == 255)[0] + off_frame = np.where(self.LSN[:, yp, xp] == 0)[0] + subset_on = one_cell[self.stim_table.Frame.isin(on_frame)] + subset_off = one_cell[self.stim_table.Frame.isin(off_frame)] + ax = plt.subplot(8, 14, sp_pt) + ax.plot(subset_on.mean(), color='r', lw=2) + ax.plot(subset_off.mean(), color='b', lw=2) + ax.axvspan( + 28, 35, ymin=0, ymax=1, facecolor='gray', alpha=0.3 + ) + vmax = np.where( + np.amax(subset_on.mean()) > vmax, + np.amax(subset_on.mean()), + vmax, + ) + vmax = np.where( + np.amax(subset_off.mean()) > vmax, + np.amax(subset_off.mean()), + vmax, + ) + vmin = np.where( + np.amin(subset_on.mean()) < vmin, + np.amin(subset_on.mean()), + vmin, + ) + vmin = np.where( + np.amin(subset_off.mean()) < vmin, + np.amin(subset_off.mean()), + vmin, + ) + ax.set_xticks([]) + ax.set_yticks([]) + for i in range(1, sp_pt + 1): + ax = plt.subplot(8, 14, i) + ax.set_ylim(vmin, vmax) + + plt.tight_layout() + plt.suptitle("Cell " + str(nc + 1), fontsize=20) + plt.subplots_adjust(top=0.9) + filename = 'Traces LSN Cell_' + str(nc + 1) + '.png' + fullfilename = os.path.join( + r'/Users/saskiad/Documents/Data/Openscope_Multiplex/analysis', + filename, + ) + plt.savefig(fullfilename) + plt.close() + if __name__ == '__main__': lsn_path = r'/Users/saskiad/Code/openscope_surround/stimulus/sparse_noise_8x14.npy' # update this to local path the the stimulus array - expt_path = r'/Volumes/My Passport/Openscope Multiplex/891653201' + expt_path = r'/Users/saskiad/Dropbox/Openscope Multiplex/Center Surround/Center_Surround_1010436210_data.h5' lsn = LocallySparseNoise(expt_path=expt_path) diff --git a/oscopetools/read_data.py b/oscopetools/read_data.py deleted file mode 100644 index ef42afd..0000000 --- a/oscopetools/read_data.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Sat Jun 6 21:59:56 2020 - -@author: saskiad -""" - -import h5py -import pandas as pd -import numpy as np - - -def get_dff_traces(file_path): - f = h5py.File(file_path) - dff = f['dff_traces'][()] - f.close() - return dff - - -def get_raw_traces(file_path): - f = h5py.File(file_path) - raw = f['raw_traces'][()] - f.close() - return raw - - -def get_running_speed(file_path): - f = h5py.File(file_path) - dx = f['running_speed'][()] - f.close() - return dx - - -def get_cell_ids(file_path): - f = h5py.File(file_path) - cell_ids = f['cell_ids'][()] - f.close() - return cell_ids - - -def get_max_projection(file_path): - f = h5py.File(file_path) - max_proj = f['max_projection'][()] - f.close() - return max_proj - - -def get_metadata(file_path): - import ast - - f = h5py.File(file_path) - md = f.get('meta_data')[...].tolist() - f.close() - meta_data = ast.literal_eval(md) - return meta_data - - -def get_roi_table(file_path): - return pd.read_hdf(file_path, 'roi_table') - - -def get_stimulus_table(file_path, stimulus): - return pd.read_hdf(file_path, stimulus) - - -def get_stimulus_epochs(file_path, session_type): - if session_type == 'drifting_gratings_grid': - stim_name_1 = 'drifting_gratings_grid' - elif session_type == 'center_surround': - stim_name_1 = 'center_surround' - elif session_type == 'size_tuning': - stim_name_1 = np.NaN # TODO: figure this out - - stim1 = get_stimulus_table(file_path, stim_name_1) - stim2 = get_stimulus_table(file_path, 'locally_sparse_noise') - stim_epoch = pd.DataFrame(columns=('Start', 'End', 'Stimulus_name')) - break1 = np.where(np.ediff1d(stim1.Start) > 1000)[0][0] - break2 = np.where(np.ediff1d(stim2.Start) > 1000)[0][0] - stim_epoch.loc[0] = [stim1.Start[0], stim1.End[break1], stim_name_1] - stim_epoch.loc[1] = [stim1.Start[break1 + 1], stim1.End.max(), stim_name_1] - stim_epoch.loc[2] = [ - stim2.Start[0], - stim2.End[break2], - 'locally_sparse_noise', - ] - stim_epoch.loc[3] = [ - stim2.Start[break2 + 1], - stim2.End.max(), - 'locally_sparse_noise', - ] - stim_epoch.sort_values(by='Start', inplace=True) - stim_epoch.loc[4] = [ - 0, - stim_epoch.Start.iloc[0] - 1, - 'spontaneous_activity', - ] - for i in range(1, 4): - stim_epoch.loc[4 + i] = [ - stim_epoch.End.iloc[i - 1] + 1, - stim_epoch.Start.iloc[i] - 1, - 'spontaneous_activity', - ] - stim_epoch.sort_values(by='Start', inplace=True) - stim_epoch.reset_index(inplace=True) - stim_epoch['Duration'] = stim_epoch.End - stim_epoch.Start - - return stim_epoch - - -def get_eye_tracking(file_path): - return pd.read_hdf(file_path, 'eye_tracking') diff --git a/oscopetools/read_data/__init__.py b/oscopetools/read_data/__init__.py new file mode 100644 index 0000000..bba457b --- /dev/null +++ b/oscopetools/read_data/__init__.py @@ -0,0 +1,3 @@ +from .factories import * +from .dataset_objects import * +from .conditions import * diff --git a/oscopetools/read_data/conditions.py b/oscopetools/read_data/conditions.py new file mode 100644 index 0000000..805fec1 --- /dev/null +++ b/oscopetools/read_data/conditions.py @@ -0,0 +1,430 @@ +"""Types for representing experimental conditions.""" + +__all__ = ( + 'Orientation', + 'TemporalFrequency', + 'SpatialFrequency', + 'Contrast', + 'CenterSurroundStimulus', +) + +import warnings + +import numpy as np + + +class _IterableNamedOrderedSet(type): + def __iter__(cls): + for member in cls._MEMBERS: + yield cls(member) + + def __len__(cls): + return len(cls._MEMBERS) + + +class SetMembershipError(Exception): + pass + + +class _NamedOrderedSet(metaclass=_IterableNamedOrderedSet): + _MEMBERS = () + _NULL_ALLOWED = ( + False # Whether None or NaN can be used to initialize the class. + ) + + def __init__(self, member_value): + if member_value in self._MEMBERS: + self._member_value = member_value + elif self._NULL_ALLOWED and ( + (member_value is None) or np.isnan(member_value) + ): + self._member_value = None + else: + raise SetMembershipError( + 'Unrecognized member {}, expected ' + 'one of {}'.format(member_value, self._MEMBERS) + ) + + def __eq__(self, other): + raise NotImplementedError + + def __lt__(self, other): + raise NotImplementedError + + def __le__(self, other): + return self.__lt__(other) or self.__eq__(other) + + def __gt__(self, other): + return not self.__le__(other) + + def __ge__(self, other): + return not self.__lt__(other) + + def __repr__(self): + return '_NamedOrderedSet({})'.format(self._member_value) + + def __hash__(self): + return hash(self._member_value) + + +class Orientation(_NamedOrderedSet): + """Orientation of part of a CenterSurroundStimulus.""" + + _MEMBERS = (0, 45, 90, 135, 180, 225, 270, 315) + _NULL_ALLOWED = True + + def __init__(self, orientation): + if issubclass(type(orientation), Orientation): + member_value = orientation._member_value + else: + member_value = orientation + + super().__init__(member_value) + + def __int__(self): + return int(self._member_value) + + def __lt__(self, other): + other_as_ori = Orientation(other) + + if (self._member_value is not None) and ( + other_as_ori._member_value is not None + ): + result = self._member_value < other_as_ori._member_value + elif (self._member_value is None) and ( + other_as_ori._member_value is not None + ): + result = True + else: + result = False + + return result + + def __eq__(self, other): + other_as_ori = Orientation(other) + return other_as_ori._member_value == self._member_value + + def __repr__(self): + return 'Orientation({})'.format(self._member_value) + + def __add__(self, other): + other_as_ori = Orientation(other) + + if (self._member_value is None) or ( + other_as_ori._member_value is None + ): + new_orientation = Orientation(None) + else: + new_angle = ( + self._member_value + other_as_ori._member_value + ) % 360.0 + new_orientation = Orientation(new_angle) + + return new_orientation + + __radd__ = __add__ + + def __sub__(self, other): + other_as_ori = Orientation(other) + + if (self._member_value is None) or ( + other_as_ori._member_value is None + ): + new_orientation = Orientation(None) + else: + new_angle = ( + self._member_value - other_as_ori._member_value + ) % 360.0 + new_orientation = Orientation(new_angle) + + return new_orientation + + def __rsub__(self, lhs): + lhs_as_ori = Orientation(lhs) + + if (self._member_value is None) or (lhs_as_ori._member_value is None): + new_orientation = Orientation(None) + else: + new_angle = (lhs_as_ori._member_value - self._member_value) % 360.0 + new_orientation = Orientation(new_angle) + + return new_orientation + + def orthogonal(self): + """Return a tuple of orthogonal Orientations.""" + return (self + 90.0, self - 90.0) + + def opposite(self): + """Return the Orientation opposite to the current one.""" + return self + 180.0 + + @property + def radians(self): + """Get the equivalent Orientation in radians.""" + if self._member_value is None: + result = np.nan + else: + result = self._member_value / 360. * (2. * np.pi) + return result + + +class Contrast(_NamedOrderedSet): + """Contrast of a CenterSurroundStimulus.""" + + _MEMBERS = [0.8] + + def __init__(self, contrast): + if issubclass(type(contrast), Contrast): + member_value = contrast._member_value + else: + member_value = contrast + + super().__init__(member_value) + + def __lt__(self, other): + other_as_contrast = Contrast(other) + + if (self._member_value is not None) and ( + other_as_contrast._member_value is not None + ): + result = self._member_value < other_as_contrast._member_value + elif (self._member_value is None) and ( + other_as_contrast._member_value is not None + ): + result = True + else: + result = False + + return result + + def __eq__(self, other): + other_as_contrast = Contrast(other) + return other_as_contrast._member_value == self._member_value + + def __repr__(self): + return 'Contrast({})'.format(self._member_value) + + +class TemporalFrequency(_NamedOrderedSet): + """Temporal frequency of a CenterSurroundStimulus.""" + + _MEMBERS = (1, 2) + + def __init__(self, temporal_frequency): + if issubclass(type(temporal_frequency), TemporalFrequency): + member_value = temporal_frequency._member_value + else: + member_value = temporal_frequency + + super().__init__(member_value) + + def __lt__(self, other): + other_as_tf = TemporalFrequency(other) + + if (self._member_value is not None) and ( + other_as_tf._member_value is not None + ): + result = self._member_value < other_as_tf._member_value + elif (self._member_value is None) and ( + other_as_tf._member_value is not None + ): + result = True + else: + result = False + + return result + + def __eq__(self, other): + other_as_tf = TemporalFrequency(other) + return other_as_tf._member_value == self._member_value + + def __repr__(self): + return 'TemporalFrequency({})'.format(self._member_value) + + +class SpatialFrequency(_NamedOrderedSet): + """Spatial frequency of a CenterSurroundStimulus.""" + + _MEMBERS = [0.04] + + def __init__(self, spatial_frequency): + if issubclass(type(spatial_frequency), SpatialFrequency): + member_value = spatial_frequency._member_value + else: + member_value = spatial_frequency + + super().__init__(member_value) + + def __lt__(self, other): + other_as_tf = SpatialFrequency(other) + + if (self._member_value is not None) and ( + other_as_tf._member_value is not None + ): + result = self._member_value < other_as_tf._member_value + elif (self._member_value is None) and ( + other_as_tf._member_value is not None + ): + result = True + else: + result = False + + return result + + def __eq__(self, other): + other_as_tf = SpatialFrequency(other) + return other_as_tf._member_value == self._member_value + + def __repr__(self): + return 'SpatialFrequency({})'.format(self._member_value) + + +class CenterSurroundStimulus: + """A center-surround stimulus with possibly empty components. + + Methods + ------- + is_empty() + Returns True if the stimulus is completely empty. + center_is_empty() + Returns True if the center of the visual field is empty. + surround_is_empty() + Returns True if the surround part of the visual field is empty. + + Attributes + ---------- + temporal_frequency : TemporalFrequency + spatial_frequency : SpatialFrequency + contrast : Contrast + center_orientation, surround_orientation : Orientation + Orientation of center and surround part of the visual field. Can be + empty if this part of the visual field is omitted. + + Notes + ----- + Please use this class instead of a DataFrame with NaN entries. NaN is not + equal to itself, is not greater or less than other quantities, and is not + equal to zero (coercing it to zero using np.nan_to_num could cause bugs by + mixing empty stimuli with eg. stimulus with 0 deg orientation), whereas + `CenterSurroundStimulus` and its attributes are always guaranteed to be + well-defined. + + """ + + def __init__( + self, + temporal_frequency, + spatial_frequency, + contrast, + center_orientation, + surround_orientation, + ): + """Initialize CenterSurroundStimulus. + + Parameters + ---------- + temporal_frequency : int, float, or TemporalFrequency + spatial_frequency : int, float, or SpatialFrequency + contrast : int, float, or Contrast + center_orientation, surround_orientation : int, float, None, NaN, or Orientation + Orientation in degrees, or None or NaN if absent. + + Returns + ------- + center_surround_stimulus : CenterSurroundStimulus + + Raises + ------ + SetMembershipError + If one of the parameters has an invalid value. + + """ + if (center_orientation is None) or np.isnan(center_orientation): + warnings.warn( + 'Constructing a CenterSurroundStimulus with an empty center.' + ) + self._stimulus_attributes = { + 'temporal_frequency': TemporalFrequency(temporal_frequency), + 'spatial_frequency': SpatialFrequency(spatial_frequency), + 'contrast': Contrast(contrast), + 'center_orientation': Orientation(center_orientation), + 'surround_orientation': Orientation(surround_orientation), + } + + @property + def temporal_frequency(self): + return self._stimulus_attributes['temporal_frequency'] + + @property + def spatial_frequency(self): + return self._stimulus_attributes['spatial_frequency'] + + @property + def contrast(self): + return self._stimulus_attributes['contrast'] + + @property + def center_orientation(self): + """Center orientation in degrees.""" + return self._stimulus_attributes['center_orientation'] + + @property + def surround_orientation(self): + """Surround orientation in degrees.""" + return self._stimulus_attributes['surround_orientation'] + + def is_empty(self): + """Check whether the stimulus is completely empty.""" + return self == CenterSurroundStimulus(None, None, None, None, None) + + def center_is_empty(self): + """Check whether the center of the stimulus is empty.""" + return self.center_orientation == Orientation(None) + + def surround_is_empty(self): + """Check whether the surround portion of the stimulus is empty.""" + return self.surround_orientation == Orientation(None) + + def __repr__(self): + return ( + f'CenterSurroundStimulus(' + f'{self.temporal_frequency._member_value}, ' + f'{self.spatial_frequency._member_value}, ' + f'{self.contrast._member_value}, ' + f'{self.center_orientation._member_value}, ' + f'{self.surround_orientation._member_value})' + ) + + def __str__(self): + return ( + '\rCenterSurroundStimulus with attributes' + f'\n temporal_frequency {str(self.temporal_frequency._member_value):>5}' + f'\n spatial_frequency {str(self.spatial_frequency._member_value):>5}' + f'\n contrast {str(self.contrast._member_value):>5}' + f'\n center_orientation {str(self.center_orientation._member_value):>5}' + f'\n surround_orientation {str(self.surround_orientation._member_value):>5}\n' + ) + + def __eq__(self, other): + """Test equality.""" + if not issubclass(type(other), CenterSurroundStimulus): + raise TypeError( + '`==` is not supported between types ' + '`CenterSurroundStimulus` and `{}`'.format(type(other)) + ) + + # Two CenterSurroundStimulus objects are equal if all attrs are equal. + if all( + [ + getattr(self, name) == getattr(other, name) + for name in self._stimulus_attributes + ] + ): + result = True + else: + result = False + + return result + + def __hash__(self): + return hash((value for value in self._stimulus_attributes.values())) diff --git a/oscopetools/read_data/dataset_objects.py b/oscopetools/read_data/dataset_objects.py new file mode 100644 index 0000000..24390a8 --- /dev/null +++ b/oscopetools/read_data/dataset_objects.py @@ -0,0 +1,1230 @@ +"""Classes for interacting with OpenScope datasets.""" +__all__ = ( + "RawFluorescence", + "TrialFluorescence", + "EyeTracking", + "RunningSpeed", + "robust_range", +) + +from abc import ABC, abstractmethod +from copy import deepcopy +import warnings + +import numpy as np +import seaborn as sns +import matplotlib.pyplot as plt +import pandas as pd + + +def _stripnan(values): + values_arr = np.asarray(values).flatten() + return values_arr[~np.isnan(values_arr)] + + +class SliceParseError(Exception): + pass + + +def _try_parse_positionals_as_slice_like(*args): + """Try to parse positional arguments as a slice-like int or pair of ints. + + Output can be treated as a `(start, stop)` range (where `stop` is optional) + on success, and can be treated as a boolean mask if a `SliceParseError` is + raised. + + Returns + ------- + slice_like : [int] or [int, int] + + Raises + ------ + SliceParseError + If positional arguments are a boolean mask, not a slice. + TypeError + If positional arguments are not bool-like or int-like. + ValueError + If positional arguments are empty or have more than two entries. + + """ + flattened_args = np.asarray(args).flatten() + if len(flattened_args) == 0: + raise ValueError("Empty positional arguments") + elif _is_bool(flattened_args[0]): + raise SliceParseError("Cannot parse bool positionals as slice.") + elif int(flattened_args[0]) != flattened_args[0]: + raise TypeError( + "Expected positionals to be bool-like or int-like, " + "got type {} instead".format(flattened_args.dtype) + ) + elif (len(flattened_args) > 0) and (len(flattened_args) <= 2): + # Positional arguments are a valid slice-like int or pair of ints + return flattened_args.tolist() + else: + # Case: positionals are not bool and are of the wrong length + raise ValueError( + "Positionals of length {} cannot be parsed as slice-like".format( + len(flattened_args) + ) + ) + + +def _is_bool(x): + return isinstance(x, (bool, np.bool, np.bool8, np.bool_)) + + +def _validate_vector_mask_length(mask, expected_length): + if np.ndim(mask) != 1: + raise ValueError( + "Expected mask to be vector-like, got " + "{}D array instead".format(np.ndim(mask)) + ) + + mask = np.asarray(mask).flatten() + if len(mask) != expected_length: + raise ValueError( + "Expected mask of length {}, got mask of " + "length {} instead.".format(len(mask), expected_length) + ) + + return mask + + +def _get_vector_mask_from_range(values_to_mask, start, stop=None): + """Unmask all values within a range.""" + if stop is not None: + mask = values_to_mask >= start + mask &= values_to_mask < stop + else: + mask = values_to_mask == start + return mask + + +def robust_range( + values, half_width=2, center="median", spread="interquartile_range" +): + """Get a range around a center point robust to outliers.""" + if center == "median": + center_val = np.nanmedian(values) + elif center == "mean": + center_val = np.nanmean(values) + else: + raise ValueError( + "Unrecognized `center` {}, expected " + "`median` or `mean`.".format(center) + ) + + if spread in ("interquartile_range", "iqr"): + lower_quantile, upper_quantile = np.percentile( + _stripnan(values), (25, 75) + ) + spread_val = upper_quantile - lower_quantile + elif spread in ("standard_deviation", "std"): + spread_val = np.nanstd(values) + else: + raise ValueError( + "Unrecognized `spread` {}, expected " + "`interquartile_range` (`iqr`) or `standard_deviation` (`std`)".format( + spread + ) + ) + + lower_bound = center_val - half_width * spread_val + upper_bound = center_val + half_width * spread_val + + return (lower_bound, upper_bound) + + +ROBUST_PLOT_RANGE_DEFAULT_HALF_WIDTH = 3 + + +class Dataset(ABC): + """A dataset that is interesting to analyze on its own.""" + + @abstractmethod + def __init__(self): + self._clean = False # Whether quality control has been applied + + @abstractmethod + def plot(self, ax=None, **pltargs): + """Display a diagnostic plot. + + Parameters + ---------- + ax : matplotlib.Axes object or None + Axes object onto which to draw the diagnostic plot. Defaults to the + current Axes if None. + pltargs + Parameters passed to `plt.plot()` (or similar) as keyword + arguments. See `plt.plot` for a list of valid arguments. Examples: + `color='red'`, `linestyle='dashed'`. + + Returns + ------- + axes : Axes + Axes object containing the diagnostic plot. + + """ + # Suggested implementation for derived classes: + # def plot(self, type_specific_arguments, ax=None, **pltargs): + # ax = super().plot(ax=ax, **pltargs) + # ax.plot(relevant_data, **pltargs) # pltargs might include color, linestyle, etc + # return ax # ax should be returned so the user can change axis labels, etc + + # Default to the current Axes if none are supplied. + if ax is None: + ax = plt.gca() + + return ax + + @abstractmethod + def apply_quality_control(self, inplace=False): + """Clean up the dataset. + + Parameters + ---------- + inplace : bool, default False + Whether to clean up the current Dataset instance (ie, self) or + a copy. In either case, a cleaned Dataset instance is returned. + + Returns + ------- + dataset : Dataset + A cleaned dataset. + + """ + # Suggested implementation for derived classes: + # def apply_quality_control(self, type_specific_arguments, inplace=False): + # dset_to_clean = super().apply_quality_control(inplace) + # # Do stuff to `dset_to_clean` to clean it. + # dset_to_clean._clean = True + # return dset_to_clean + + # Get a reference to the dataset to be cleaned. Might be the current + # dataset or a copy of it. + if inplace: + dset_to_clean = self + else: + dset_to_clean = self.copy() + + return dset_to_clean + + def copy(self): + """Get a deep copy of the current Dataset.""" + return deepcopy(self) + + +class TimeseriesDataset(Dataset): + """Abstract base class for Datasets containing timeseries.""" + + def __init__(self, timestep_width): + self._timestep_width = timestep_width + + def __len__(self): + return self.num_timesteps + + @property + @abstractmethod + def num_timesteps(self): + """Number of timesteps in timeseries.""" + raise NotImplementedError + + @property + def timestep_width(self): + """Width of each timestep in seconds.""" + return self._timestep_width + + @property + def duration(self): + """Duration of the timeseries in seconds.""" + return self.num_timesteps * self.timestep_width + + @property + def time_vec(self): + """A vector of timestamps the same length as the timeseries.""" + time_vec = np.arange( + 0, self.duration - 0.5 * self.timestep_width, self.timestep_width + ) + assert len(time_vec) == len( + self + ), "Length of time_vec ({}) does not match instance length ({})".format( + len(time_vec), len(self) + ) + return time_vec + + def get_time_range(self, start, stop=None): + """Extract a time window from the timeseries by time in seconds. + + Parameters + ---------- + start, stop : float + Beginning and end of the time window to extract in seconds. If + `stop` is omitted, only the frame closest to `start` is returned. + + Returns + ------- + windowed_timeseries : TimeseriesDataset + A timeseries of the same type as the current instance containing + only the frames in the specified window. Note that the `time_vec` + of `windowed_timeseries` will start at 0, not `start`. + + """ + frame_range = [ + self._get_nearest_frame(t_) + for t_ in (start, stop) + if t_ is not None + ] + return self.get_frame_range(*frame_range) + + @abstractmethod + def get_frame_range(self, start, stop=None): + """Extract a time window from the timeseries by frame number. + + Parameters + ---------- + start, stop : int + Beginning and end of the time window to extract in frames. If + `stop` is omitted, only the `start` frame is returned. + + Returns + ------- + windowed_timeseries : TimeseriesDataset + A timeseries of the same type as the current instance containing + only the frames in the specified window. Note that the `time_vec` + of `windowed_timeseries` will start at 0, not `start`. + + """ + raise NotImplementedError + + def _get_nearest_frame(self, time_): + """Round a timestamp to the nearest integer frame number.""" + frame_num = np.argmin(np.abs(self.time_vec - time_)) + assert frame_num <= len(self) + + return min(frame_num, len(self) - 1) + + +class TrialDataset(Dataset): + """Abstract base class for datasets that are divided into trials. + + All children should have a list-like `_trial_num` attribute. + + """ + + @property + def num_trials(self): + """Number of trials.""" + return len(self._trial_num) + + @property + def trial_vec(self): + """Trial numbers.""" + return self._trial_num + + def get_trials(self, *args): + """Get a subset of the trials in TrialDataset. + + Parameters + ---------- + start, stop : int + Get a range of trials from `start` to an optional `stop`. + mask : bool vector-like + A boolean mask used to select trials. + + Returns + ------- + trial_subset : TrialDataset + A new `TrialDataset` object containing only the specified trials. + + """ + # Implementation note: + # This function tries to convert positional arguments to a boolean + # trial mask. `_get_trials_from_mask` is reponsible for actually + # getting the `trial_subset` to be returned. + try: + # Try to parse positional arguments as a range of trials + trial_range = _try_parse_positionals_as_slice_like(*args) + mask = _get_vector_mask_from_range(self.trial_vec, *trial_range) + except SliceParseError: + # Couldn't parse pos args as a range of trials. Try parsing as + # a boolean trial mask. + if len(args) == 1: + mask = _validate_vector_mask_length(args[0], self.num_trials) + else: + raise ValueError( + "Expected a single mask argument, got {}".format(len(args)) + ) + + return self._get_trials_from_mask(mask) + + def iter_trials(self): + """Get an iterator over all trials. + + Yields + ------ + (trial_num, trial_contents): (int, TrialDataset) + Yields a tuple containing the trial number and a `TrialDataset` + containing that trial for each trial in the original + `TrialDataset`. + + Example + ------- + >>> trials = TrialDataset() + >>> for trial_num, trial in trials.iter_trials(): + >>> print(trial_num) + >>> trial.plot() + + """ + for trial_num in self.trial_vec: + yield (trial_num, self.get_trials(trial_num)) + + @abstractmethod + def _get_trials_from_mask(self, mask): + """Get a subset of trials using a boolean mask. + + Subclasses are required to implement this method to get the rest of + TrialDataset functionality. + + Parameters + ---------- + mask : bool vector-like + A boolean trial mask, the length of which is guaranteed to match + the number of trials. + + Returns + ------- + trial_subset : TrialDataset + A new `TrialDataset` object containing only the specified trials. + + """ + raise NotImplementedError + + @abstractmethod + def trial_mean(self): + """Get the mean across all trials. + + Returns + ------- + trial_mean : TrialDataset + A new `TrialDataset` object containing the mean of all trials in + the current one. + + """ + raise NotImplementedError + + @abstractmethod + def trial_std(self): + """Get the standard deviation across all trials. + + Returns + ------- + trial_std : TrialDataset + A new `TrialDataset` object containing the standard deviation of + all trials in the current one. + + """ + raise NotImplementedError + + +class Fluorescence(TimeseriesDataset): + """A fluorescence timeseries. + + Any fluorescence timeseries. May have one or more cells and one or more + trials. + + """ + + def __init__(self, fluorescence_array, timestep_width): + super().__init__(timestep_width) + + self.data = np.asarray(fluorescence_array) + self.cell_vec = np.arange(0, self.num_cells) + self.is_z_score = False + self.is_dff = False + self.is_positive_clipped = False + + @property + def num_timesteps(self): + """Number of timesteps.""" + return self.data.shape[-1] + + @property + def num_cells(self): + """Number of ROIs.""" + return self.data.shape[-2] + + def get_cells(self, *args): + # Implementation note: + # This function tries to convert positional arguments to a boolean + # cell mask. `_get_cells_from_mask` is reponsible for actually + # getting the `cell_subset` to be returned. + try: + # Try to parse positional arguments as a range of cells + cell_range = _try_parse_positionals_as_slice_like(*args) + mask = _get_vector_mask_from_range(self.cell_vec, *cell_range) + except SliceParseError: + # Couldn't parse pos args as a range of cells. Try parsing as + # a boolean cell mask. + if len(args) == 1: + mask = _validate_vector_mask_length(args[0], self.num_cells) + else: + raise ValueError( + "Expected a single mask argument, got {}".format(len(args)) + ) + + return self._get_cells_from_mask(mask) + + def iter_cells(self): + """Get an iterator over all cells in the fluorescence dataset. + + Yields + ------ + (cell_num, cell_fluorescence) : (int, Fluorescence) + Yields a tuple of the cell number and fluorescence for each cell. + + Example + ------- + >>> fluo_dset = Fluorescence() + >>> for cell_num, cell_fluorescence in fluo_dset.iter_cells(): + >>> print('Cell number {}'.format(cell_num)) + >>> cell_fluorescence.plot() + + """ + for cell_num in self.cell_vec: + yield (cell_num, self.get_cells(cell_num)) + + def get_frame_range(self, start, stop=None): + """Get a time window by frame number.""" + fluo_copy = self.copy(read_only=True) + + if stop is None: + time_slice = self.data[..., start][..., np.newaxis] + else: + time_slice = self.data[..., start:stop] + + fluo_copy.data = time_slice.copy() + return fluo_copy + + def copy(self, read_only=False): + """Get a deep copy. + + Parameters + ---------- + read_only : bool, default False + Whether to get a read-only copy of the underlying `fluo` array. + Getting a read-only copy is much faster and should be used if a + large number of copies need to be created. + + """ + if read_only: + # Get a read-only view of the fluo array + # This is much faster than creating a full copy + read_only_fluo = self.data.view() + read_only_fluo.flags.writeable = False + + deepcopy_memo = {id(self.data): read_only_fluo} + copy_ = deepcopy(self, deepcopy_memo) + else: + copy_ = deepcopy(self) + + return copy_ + + def _get_cells_from_mask(self, mask): + cell_subset = self.copy(read_only=False) + cell_subset.cell_vec = self.cell_vec[mask].copy() + cell_subset.data = self.data[..., mask, :].copy() + + assert cell_subset.data.ndim == self.data.ndim + assert cell_subset.num_cells == np.sum(mask) + + return cell_subset + + def positive_part(self): + """Set the negative part of data to zero.""" + if self.is_positive_clipped: + raise ValueError("Instance is already positive clipped.") + fluo_copy = self.copy(read_only=False) + fluo_copy.data[fluo_copy.data < 0] = 0 + fluo_copy.is_positive_clipped = True + return fluo_copy + + +class RawFluorescence(Fluorescence): + """Fluorescence timeseries from a full imaging session. + + Not divided into trials. + + """ + + def __init__(self, fluorescence_array, timestep_width): + fluorescence_array = np.asarray(fluorescence_array) + assert fluorescence_array.ndim == 2 + + super().__init__(fluorescence_array, timestep_width) + + def z_score(self): + """Convert to Z-score.""" + if self.is_z_score: + raise ValueError("Instance is already a Z-score") + else: + z_score = self.data - self.data.mean(axis=1)[:, np.newaxis] + z_score /= z_score.std(axis=1)[:, np.newaxis] + self.data = z_score + self.is_z_score = True + + def cut_by_trials( + self, + trial_timetable, + num_baseline_frames=None, + both_ends_baseline=False, + ): + """Divide fluorescence traces up into equal-length trials. + + Parameters + ---------- + trial_timetable : pd.DataFrame-like + A DataFrame-like object with 'Start' and 'End' items for the start + and end frames of each trial, respectively. + + Returns + ------- + trial_fluorescence : TrialFluorescence + + """ + if ("Start" not in trial_timetable) or ("End" not in trial_timetable): + raise ValueError( + "Could not find `Start` and `End` in trial_timetable." + ) + + if (num_baseline_frames is None) or (num_baseline_frames < 0): + num_baseline_frames = 0 + + # Slice the RawFluorescence up into trials. + trials = [] + num_frames = [] + for start, end in zip( + trial_timetable["Start"], trial_timetable["End"] + ): + # Coerce `start` and `end` to ints if possible + if (int(start) != start) or (int(end) != end): + raise ValueError( + "Expected trial start and end frame numbers" + " to be ints, got {} and {} instead".format(start, end) + ) + start = max(int(start) - num_baseline_frames, 0) + if both_ends_baseline: + end = int(end) + num_baseline_frames + else: + end = int(end) + + trials.append(self.data[..., start:end]) + num_frames.append(end - start) + + # Truncate all trials to the same length if necessary + min_num_frames = min(num_frames) + if not all([dur == min_num_frames for dur in num_frames]): + warnings.warn( + "Truncating all trials to shortest duration {} " + "frames (longest trial is {} frames)".format( + min_num_frames, max(num_frames) + ) + ) + for i in range(len(trials)): + trials[i] = trials[i][..., :min_num_frames] + + # Try to get a vector of trial numbers + try: + trial_num = trial_timetable["trial_num"] + except KeyError: + try: + trial_num = trial_timetable.index.tolist() + except AttributeError: + warnings.warn( + "Could not get trial_num from trial_timetable. " + "Falling back to arange." + ) + trial_num = np.arange(0, len(trials)) + + # Construct TrialFluorescence and return it. + trial_fluorescence = TrialFluorescence( + np.asarray(trials), trial_num, self.timestep_width, + ) + trial_fluorescence.is_z_score = self.is_z_score + trial_fluorescence.is_dff = self.is_dff + trial_fluorescence._baseline_duration = ( + num_baseline_frames * self.timestep_width + ) + trial_fluorescence._both_ends_baseline = both_ends_baseline + + # Check that trial_fluorescence was constructed correctly. + assert trial_fluorescence.num_cells == self.num_cells + assert trial_fluorescence.num_timesteps == min_num_frames + assert trial_fluorescence.num_trials == len(trials) + + return trial_fluorescence + + def plot(self, ax=None, **pltargs): + if ax is not None: + ax = plt.gca() + + ax.imshow(self.data, **pltargs) + + return ax + + def apply_quality_control(self, inplace=False): + raise NotImplementedError + + +class TrialFluorescence(Fluorescence, TrialDataset): + """Fluorescence timeseries divided into trials.""" + + def __init__(self, fluorescence_array, trial_num, timestep_width): + fluorescence_array = np.asarray(fluorescence_array) + assert fluorescence_array.ndim == 3 + assert fluorescence_array.shape[0] == len(trial_num) + + super().__init__(fluorescence_array, timestep_width) + + self._baseline_duration = 0 + self._both_ends_baseline = False + self._trial_num = np.asarray(trial_num) + + @property + def time_vec(self): + time_vec_without_baseline = super().time_vec + return time_vec_without_baseline - self._baseline_duration + + def plot( + self, + ax=None, + fill_mean_pm_std=True, + highlight_non_baseline=False, + **pltargs + ): + if ax is None: + ax = plt.gca() + + if self.num_cells == 1: + # If there is only one cell, make a line plot + alpha = pltargs.pop("alpha", 1) + + fluo_mean = self.trial_mean().data[0, 0, :] + fluo_std = self.trial_std().data[0, 0, :] + + if fill_mean_pm_std: + ax.fill_between( + self.time_vec, + fluo_mean - fluo_std, + fluo_mean + fluo_std, + label="Mean $\pm$ SD", + alpha=alpha * 0.6, + **pltargs, + ) + + ax.plot(self.time_vec, fluo_mean, alpha=alpha, **pltargs) + if highlight_non_baseline: + stim_start = self.time_vec[0] + self._baseline_duration + if self._both_ends_baseline: + stim_end = self.time_vec[-1] - self._baseline_duration + else: + stim_end = self.time_vec[-1] + ax.axvspan( + stim_start, + stim_end, + color="gray", + alpha=0.3, + label="Stimulus", + ) + ax.set_xlabel("Time (s)") + if self.is_z_score: + ax.set_ylabel("DF/F (Z-score)") + else: + ax.set_ylabel("DF/F") + ax.legend() + else: + # If there are many cells, just show the mean as a matrix. + ax.imshow(self.trial_mean().data[0, ...], **pltargs) + + return ax + + def apply_quality_control(self, inplace=False): + raise NotImplementedError + + def _get_trials_from_mask(self, mask): + trial_subset = self.copy(read_only=True) + trial_subset._trial_num = trial_subset._trial_num[mask].copy() + trial_subset.data = trial_subset.data[mask, ...].copy() + + return trial_subset + + def trial_mean(self, ignore_nan=False): + """Get the mean fluorescence for each cell across all trials. + + Parameters + ---------- + ignore_nan : bool, default False + Whether to return the `mean` or `nanmean` for each cell. + + Returns + ------- + trial_mean : TrialFluoresence + A new `TrialFluorescence` object with the mean across trials. + + See Also + -------- + `trial_std()` + + """ + trial_mean = self.copy(read_only=True) + trial_mean._trial_num = np.asarray([np.nan]) + + if ignore_nan: + trial_mean.data = np.nanmean(self.data, axis=0)[np.newaxis, :, :] + else: + trial_mean.data = self.data.mean(axis=0)[np.newaxis, :, :] + + return trial_mean + + def trial_std(self, ignore_nan=False): + """Get the standard deviation of the fluorescence for each cell across trials. + + Parameters + ---------- + ignore_nan : bool, default False + Whether to return the `std` or `nanstd` for each cell. + + Returns + ------- + trial_std : TrialFluorescence + A new `TrialFluorescence` object with the standard deviation across + trials. + + See Also + -------- + `trial_mean()` + + """ + trial_std = self.copy(read_only=True) + trial_std._trial_num = np.asarray([np.nan]) + + if ignore_nan: + trial_std.data = np.nanstd(self.data, axis=0)[np.newaxis, :, :] + else: + trial_std.data = self.data.std(axis=0)[np.newaxis, :, :] + + return trial_std + + +class EyeTracking(TimeseriesDataset): + _eye_area_name = "eye_area" + _pupil_area_name = "pupil_area" + _x_pos_name = "x_pos_deg" + _y_pos_name = "y_pos_deg" + + def __init__( + self, tracked_attributes: pd.DataFrame, timestep_width: float + ): + super().__init__(timestep_width) + self.data = pd.DataFrame(tracked_attributes) + + @property + def num_timesteps(self): + """Number of timesteps in EyeTracking dataset.""" + if issubclass(type(self), TrialDataset): + if self._within_trial: + return 1 + else: + return len(self.data.iloc[0, 0]) + else: + return self.data.shape[0] + + def get_frame_range(self, start: int, stop: int = None): + window = self.copy() + if stop is not None: + if issubclass(type(self), TrialDataset): + if not self._within_trial: + window.data = window.data.applymap( + lambda x: x[start:stop] + ).copy() + else: + window.data = window.data.iloc[start:stop, :].copy() + else: + if issubclass(type(self), TrialDataset): + if not self._within_trial: + window.data = window.data.applymap( + lambda x: x[start : start + 1] + ).copy() + else: + window.data = window.data.iloc[start, :].copy() + + return window + + def cut_by_trials( + self, + trial_timetable, + num_baseline_frames=None, + both_ends_baseline=False, + ): + """Divide eye tracking parameters up into equal-length trials. + + Parameters + ---------- + trial_timetable : pd.DataFrame-like + A DataFrame-like object with 'Start' and 'End' items for the start + and end frames of each trial, respectively. + + Returns + ------- + trial_eyetracking : TrialEyeTracking + + """ + if ("Start" not in trial_timetable) or ("End" not in trial_timetable): + raise ValueError( + "Could not find `Start` and `End` in trial_timetable." + ) + + if (num_baseline_frames is None) or (num_baseline_frames < 0): + num_baseline_frames = 0 + + # Slice one EyeTracking parameter up into trials. + # 4 columns in total: col_0, col_1, col_2, and col_3, + # corresponding to eye_area, pupil_area, x_pos_deg, and y_pos_deg, + # Noneed to worry even if the columns are switched. + col_0 = [] + col_1 = [] + col_2 = [] + col_3 = [] + num_frames = [] + for start, end in zip( + trial_timetable["Start"], trial_timetable["End"] + ): + # Coerce `start` and `end` to ints if possible + if (int(start) != start) or (int(end) != end): + raise ValueError( + "Expected trial start and end frame numbers" + " to be ints, got {} and {} instead".format(start, end) + ) + start = max(int(start) - num_baseline_frames, 0) + if both_ends_baseline: + end = int(end) + num_baseline_frames + else: + end = int(end) + + col_0.append(self.data.iloc[start:end, 0].values) + col_1.append(self.data.iloc[start:end, 1].values) + col_2.append(self.data.iloc[start:end, 2].values) + col_3.append(self.data.iloc[start:end, 3].values) + num_frames.append(end - start) + + # Create a new pd.DataFrame with trials as rows + list_of_tuples = list(zip(col_0, col_1, col_2, col_3)) + trials = pd.DataFrame(list_of_tuples, columns=self.data.columns) + + # Truncate all trials to the same length if necessary + min_num_frames = min(num_frames) + if not all([dur == min_num_frames for dur in num_frames]): + warnings.warn( + "Truncating all trials to shortest duration {} " + "frames (longest trial is {} frames)".format( + min_num_frames, max(num_frames) + ) + ) + trials = trials.applymap(lambda x: x[:min_num_frames]) + + # Try to get a vector of trial numbers + try: + trial_num = trial_timetable["trial_num"] + except KeyError: + try: + trial_num = trial_timetable.index.tolist() + except AttributeError: + warnings.warn( + "Could not get trial_num from trial_timetable. " + "Falling back to arange." + ) + trial_num = np.arange(0, len(trials)) + + # Construct TrialEyeTracking and return it. + trial_eyetracking = TrialEyeTracking( + trials, trial_num, self.timestep_width, + ) + trial_eyetracking._baseline_duration = ( + num_baseline_frames * self.timestep_width + ) + trial_eyetracking._both_ends_baseline = both_ends_baseline + + # Check that trial_eyetracking was constructed correctly. + assert trial_eyetracking.num_timesteps == min_num_frames + assert trial_eyetracking.num_trials == len(trials) + + return trial_eyetracking + + def plot( + self, channel="position", robust_range_=False, ax=None, **pltargs + ): + """Make a diagnostic plot of eyetracking data.""" + ax = super().plot(ax, **pltargs) + + # Check whether the `channel` argument is valid + if channel not in self.data.columns and channel != "position": + raise ValueError( + "Got unrecognized channel `{}`, expected one of " + "{} or `position`".format(channel, self.data.columns.tolist()) + ) + + if channel in self.data.columns: + if robust_range_: + ax.axhspan( + *robust_range( + self.data[channel], + half_width=1.5, + center="median", + spread="iqr", + ), + color="gray", + label="Median $\pm$ 1.5 IQR", + alpha=0.5, + ) + ax.legend() + + ax.plot(self.time_vec, self.data[channel], **pltargs) + ax.set_xlabel("Time (s)") + + if robust_range_: + ax.set_ylim( + robust_range( + self.data[channel], + half_width=ROBUST_PLOT_RANGE_DEFAULT_HALF_WIDTH, + ) + ) + + elif channel == "position": + if pltargs.pop("style", None) in ["contour", "density"]: + x = self.data[self._x_pos_name] + y = self.data[self._y_pos_name] + mask = np.isnan(x) | np.isnan(y) + if any(mask): + warnings.warn( + "Dropping {} NaN entries in order to estimate " + "density.".format(sum(mask)) + ) + sns.kdeplot(x[~mask], y[~mask], ax=ax, **pltargs) + else: + ax.plot( + self.data[self._x_pos_name], + self.data[self._y_pos_name], + **pltargs, + ) + + if robust_range_: + # Set limits based on approx. data range, excluding outliers + ax.set_ylim( + robust_range( + self.data[self._y_pos_name], + half_width=ROBUST_PLOT_RANGE_DEFAULT_HALF_WIDTH, + ) + ) + ax.set_xlim( + robust_range( + self.data[self._x_pos_name], + half_width=ROBUST_PLOT_RANGE_DEFAULT_HALF_WIDTH, + ) + ) + else: + # Set limits to a 180 deg standard range + ax.set_xlim(-90.0, 90.0) + ax.set_ylim(-90.0, 90.0) + + else: + raise NotImplementedError( + "Plotting for channel {} is not implemented.".format(channel) + ) + + return ax + + def apply_quality_control(self, inplace=False): + super().apply_quality_control(inplace) + raise NotImplementedError + + +class TrialEyeTracking(EyeTracking, TrialDataset): + """EyeTracking timeseries divided into trials.""" + + def __init__(self, eye_tracking_df, trial_num, timestep_width): + eye_tracking_df = pd.DataFrame(eye_tracking_df) + assert eye_tracking_df.ndim == 2 + assert eye_tracking_df.shape[0] == len(trial_num) + + super().__init__(eye_tracking_df, timestep_width) + + self._baseline_duration = 0 + self._both_ends_baseline = False + self._trial_num = np.asarray(trial_num) + self._within_trial = False + + def _get_trials_from_mask(self, mask): + trial_subset = self.copy() + trial_subset._trial_num = trial_subset._trial_num[mask].copy() + trial_subset.data = trial_subset.data[mask].copy() + + return trial_subset + + def trial_mean(self, within_trial=True, ignore_nan=False): + """Get the mean eye parameters within or across trials. + + Parameters + ---------- + within_trial : bool, default True + Whether to compute within_trial_mean or across_trial_mean. + ignore_nan : bool, default False + Whether to return the `mean` or `nanmean`. + + Returns + ------- + trial_mean : TrialEyeTracking + A new `TrialEyeTracking` object with the mean within/across trials. + + See Also + -------- + `trial_std()` + + """ + trial_mean = self.copy() + if within_trial: + trial_mean._within_trial = True + else: + trial_mean._trial_num = np.asarray([np.nan]) + + if ignore_nan: + if within_trial: + trial_mean.data = self.data.applymap(np.nanmean) + else: + trial_mean.data = self._across_trials_operation(np.nanmean) + else: + if within_trial: + trial_mean.data = self.data.applymap(np.mean) + else: + trial_mean.data = self._across_trials_operation(np.mean) + + return trial_mean + + def trial_std(self, within_trial=True, ignore_nan=False): + """Get the standard deviation of the eye parameters within or across trials. + + Parameters + ---------- + within_trial : bool, default True + Whether to compute within_trial_std or across_trial_std. + ignore_nan : bool, default False + Whether to return the `std` or `nanstd`. + + Returns + ------- + trial_std : TrialEyeTracking + A new `TrialEyeTracking` object with the standard deviation within/ + across trials. + + See Also + -------- + `trial_mean()` + + """ + trial_std = self.copy() + if within_trial: + trial_std._within_trial = True + else: + trial_std._trial_num = np.asarray([np.nan]) + + if ignore_nan: + if within_trial: + trial_std.data = self.data.applymap(np.nanstd) + else: + trial_std.data = self._across_trials_operation(np.nanstd) + else: + if within_trial: + trial_std.data = self.data.applymap(np.std) + else: + trial_std.data = self._across_trials_operation(np.std) + + return trial_std + + def _across_trials_operation(self, func): + """Perform operation across trials (axis=0) for the pd.DataFrame data. + + Parameters + ---------- + func : function + Function for performing the operation along axis 0. + + Returns + ------- + func_df : pd.DataFrame + Dataframe that contains the results. + + """ + trials = [] + for i in range(self.data.shape[0]): + eye_param = [] + for j in range(self.data.shape[1]): + eye_param.append(self.data.iloc[i, j].tolist()) + trials.append(eye_param) + trials = np.asarray(trials) + func_arr = func(trials, axis=0) + eye_param_lst = [list(func_arr)] + func_df = pd.DataFrame(eye_param_lst, columns=self.data.columns) + return func_df + + +class RunningSpeed(TimeseriesDataset): + def __init__(self, running_speed: np.ndarray, timestep_width: float): + running_speed = np.asarray(running_speed) + assert running_speed.ndim == 1 + + super().__init__(timestep_width) + self.data = running_speed + + @property + def num_timesteps(self): + """Number of timesteps in RunningSpeed dataset.""" + return len(self.data) + + def get_frame_range(self, start: int, stop: int = None): + window = self.copy() + if stop is not None: + window.data = window.data[start:stop, :].copy() + else: + window.data = window.data[start, :].copy() + + return window + + def plot(self, robust_range_=False, ax=None, **pltargs): + if ax is None: + ax = plt.gca() + + if robust_range_: + ax.axhspan( + *robust_range( + self.data, half_width=1.5, center="median", spread="iqr" + ), + color="gray", + label="Median $\pm$ 1.5 IQR", + alpha=0.5, + ) + ax.legend() + + ax.plot(self.time_vec, self.data, **pltargs) + ax.set_xlabel("Time (s)") + ax.set_ylabel("Running speed") + + if robust_range_: + ax.set_ylim( + robust_range( + self.data, half_width=ROBUST_PLOT_RANGE_DEFAULT_HALF_WIDTH + ) + ) + + return ax + + def apply_quality_control(self, inplace=False): + super().apply_quality_control(inplace) + raise NotImplementedError diff --git a/oscopetools/read_data/factories.py b/oscopetools/read_data/factories.py new file mode 100644 index 0000000..dbfc0ef --- /dev/null +++ b/oscopetools/read_data/factories.py @@ -0,0 +1,228 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sat Jun 6 21:59:56 2020 + +@author: saskiad +""" + +__all__ = ( + 'get_dff_traces', + 'get_raw_traces', + 'get_cell_ids', + 'get_max_projection', + 'get_metadata', + 'get_stimulus_table', + 'get_stimulus_epochs', + 'get_eye_tracking', + 'get_running_speed', + 'get_roi_table', +) + +import warnings + +import h5py +import pandas as pd +import numpy as np + +from .dataset_objects import RawFluorescence, EyeTracking, RunningSpeed +from .conditions import CenterSurroundStimulus, SetMembershipError + +FRAME_RATE = 30.0 # Assumed frame rate in Hz. TODO: load from a file + + +def get_dff_traces(file_path): + """Get DFF normalized fluorescence traces. + + Parameters + ---------- + file_path : str + Path to an HDF5 file containing DFF-normalized fluorescence traces. + + Returns + ------- + dff_fluorescence : RawFluorescence + A `TimeseriesDataset` subclass containing DFF-normalized fluorescence + traces. + + """ + f = h5py.File(file_path, 'r') + dff = f['dff_traces'][()] + f.close() + + fluorescence_dataset = RawFluorescence(dff, 1.0 / FRAME_RATE) + fluorescence_dataset.is_dff = True + + return fluorescence_dataset + + +def get_raw_traces(file_path): + """Get raw fluorescence traces. + + Parameters + ---------- + file_path : str + Path to an HDF5 file containing raw fluorescence traces. + + Returns + ------- + raw_fluoresence : RawFluorescence + A `TimeseriesDataset` subclass containing fluorescence traces. + + """ + f = h5py.File(file_path, 'r') + raw = f['raw_traces'][()] + f.close() + + fluorescence_dataset = RawFluorescence(raw, 1.0 / FRAME_RATE) + fluorescence_dataset.is_dff = False + + return fluorescence_dataset + + +def get_running_speed(file_path): + f = h5py.File(file_path, 'r') + dx = f['running_speed'][()] + f.close() + + speed = RunningSpeed(dx, 1.0/FRAME_RATE) + return speed + + +def get_cell_ids(file_path): + f = h5py.File(file_path, 'r') + cell_ids = f['cell_ids'][()] + f.close() + return cell_ids + + +def get_max_projection(file_path): + f = h5py.File(file_path, 'r') + max_proj = f['max_projection'][()] + f.close() + return max_proj + + +def get_metadata(file_path): + import ast, datetime + + f = h5py.File(file_path, 'r') + md = f.get('meta_data')[...].tolist() + f.close() + try: + meta_data = ast.literal_eval(md) + except: + dict_str = md.decode("UTF-8") + meta_data = eval(dict_str) + return meta_data + + +def get_roi_table(file_path): + return pd.read_hdf(file_path, 'roi_table') + + +def get_stimulus_table(file_path, stimulus): + """Read stimulus table into a pd.DataFrame. + + Parameters + ---------- + file_path : str + stimulus : str + Type of stimulus to load. + + Returns + ------- + stimulus_table : pd.DataFrame + + Notes + ----- + If `stimulus` is 'center_surround', details of the stimulus are loaded + into `CenterSurroundStimulus` objects. See + `oscopetools.read_data.CenterSurroundStimulus` for details. + + """ + df = pd.read_hdf(file_path, stimulus) + + center_surround_objects = [] + invalid_rows = [] + if stimulus == 'center_surround': + for ind, row in df.iterrows(): + try: + cs_stimulus = CenterSurroundStimulus( + row['TF'], + row['SF'], + row['Contrast'], + row['Center_Ori'], + row['Surround_Ori'], + ) + center_surround_objects.append(cs_stimulus) + except SetMembershipError: + invalid_rows.append(ind) + + if len(invalid_rows) > 0: + warnings.warn( + 'Removed {} trials with invalid stimulus parameters: {}'.format( + len(invalid_rows), df.loc[invalid_rows, :] + ) + ) + + print(len(center_surround_objects)) + print(len(invalid_rows)) + print(df.shape[0]) + df.drop(index=invalid_rows, inplace=True) + df['center_surround'] = center_surround_objects + df.drop( + columns=['TF', 'SF', 'Contrast', 'Center_Ori', 'Surround_Ori'], + inplace=True, + ) + + return df + + +def get_stimulus_epochs(file_path, session_type): + if session_type == 'drifting_gratings_grid': + stim_name_1 = 'drifting_gratings_grid' + elif session_type == 'center_surround': + stim_name_1 = 'center_surround' + elif session_type == 'size_tuning': + stim_name_1 = np.NaN # TODO: figure this out + + stim1 = get_stimulus_table(file_path, stim_name_1) + stim2 = get_stimulus_table(file_path, 'locally_sparse_noise') + stim_epoch = pd.DataFrame(columns=('Start', 'End', 'Stimulus_name')) + break1 = np.where(np.ediff1d(stim1.Start) > 1000)[0][0] + break2 = np.where(np.ediff1d(stim2.Start) > 1000)[0][0] + stim_epoch.loc[0] = [stim1.Start[0], stim1.End[break1], stim_name_1] + stim_epoch.loc[1] = [stim1.Start[break1 + 1], stim1.End.max(), stim_name_1] + stim_epoch.loc[2] = [ + stim2.Start[0], + stim2.End[break2], + 'locally_sparse_noise', + ] + stim_epoch.loc[3] = [ + stim2.Start[break2 + 1], + stim2.End.max(), + 'locally_sparse_noise', + ] + stim_epoch.sort_values(by='Start', inplace=True) + stim_epoch.loc[4] = [ + 0, + stim_epoch.Start.iloc[0] - 1, + 'spontaneous_activity', + ] + for i in range(1, 4): + stim_epoch.loc[4 + i] = [ + stim_epoch.End.iloc[i - 1] + 1, + stim_epoch.Start.iloc[i] - 1, + 'spontaneous_activity', + ] + stim_epoch.sort_values(by='Start', inplace=True) + stim_epoch.reset_index(inplace=True) + stim_epoch['Duration'] = stim_epoch.End - stim_epoch.Start + + return stim_epoch + + +def get_eye_tracking(file_path): + raw_eyetracking_dataset = pd.read_hdf(file_path, 'eye_tracking') + return EyeTracking(raw_eyetracking_dataset, 1.0 / FRAME_RATE) diff --git a/oscopetools/read_data/test_conditions.py b/oscopetools/read_data/test_conditions.py new file mode 100644 index 0000000..ada86a4 --- /dev/null +++ b/oscopetools/read_data/test_conditions.py @@ -0,0 +1,158 @@ +import unittest + +import numpy as np + +from . import conditions as cond + + +class OrientationOrdering(unittest.TestCase): + def test_le_numeric(self): + self.assertLess(cond.Orientation(45), cond.Orientation(90)) + self.assertLess(cond.Orientation(90), cond.Orientation(180)) + + def test_le_none(self): + self.assertLess(cond.Orientation(None), cond.Orientation(45)) + self.assertLess(cond.Orientation(None), cond.Orientation(0)) + + def test_le_nan(self): + self.assertLess(cond.Orientation(np.nan), cond.Orientation(45)) + self.assertLess(cond.Orientation(np.nan), cond.Orientation(0)) + + def test_ge_numeric(self): + self.assertGreater(cond.Orientation(90), cond.Orientation(45)) + + def test_ge_none(self): + self.assertGreater(cond.Orientation(45), cond.Orientation(None)) + self.assertGreater(cond.Orientation(0), cond.Orientation(None)) + + def test_ge_nan(self): + self.assertGreater(cond.Orientation(45), cond.Orientation(np.nan)) + self.assertGreater(cond.Orientation(0), cond.Orientation(np.nan)) + + def test_eq_numeric(self): + self.assertEqual(cond.Orientation(45), cond.Orientation(45)) + self.assertEqual(cond.Orientation(90), cond.Orientation(90.0)) + + def test_eq_none(self): + """Assert that None orientation is equal to itself.""" + self.assertEqual(cond.Orientation(None), cond.Orientation(None)) + self.assertNotEqual(cond.Orientation(None), cond.Orientation(0)) + + def test_eq_nan(self): + """Assert that NaN orientation is equal to itself.""" + self.assertEqual(cond.Orientation(np.nan), cond.Orientation(np.nan)) + self.assertNotEqual(cond.Orientation(np.nan), cond.Orientation(0)) + + def test_eq_nan_none(self): + """Assert that None and NaN orientations are equal.""" + self.assertEqual(cond.Orientation(np.nan), cond.Orientation(None)) + + +class OrientationArithmetic(unittest.TestCase): + def test_lhs_add(self): + expected = cond.Orientation(180.0) + actual = cond.Orientation(90.0) + 90.0 + self.assertEqual(expected, actual, "90 + 90 != 180") + + expected = cond.Orientation(45) + actual = cond.Orientation(90) + 315.0 + self.assertEqual(expected, actual, "90 + 315 != 45") + + def test_lhs_subtract(self): + expected = cond.Orientation(90.0) + actual = cond.Orientation(180.0) - 90.0 + self.assertEqual(expected, actual, "180 - 90 != 90") + + expected = cond.Orientation(315) + actual = cond.Orientation(45) - 90.0 + self.assertEqual(expected, actual, "45 - 90 != 315") + + def test_none_propagation(self): + expected = cond.Orientation(None) + + # Try various combinations that should all produce Orientation(None) + actual = cond.Orientation(90) + None + self.assertEqual(expected, actual) + + actual = cond.Orientation(90) + np.nan + self.assertEqual(expected, actual) + + actual = cond.Orientation(None) + np.nan + self.assertEqual(expected, actual) + + actual = cond.Orientation(None) + 90 + self.assertEqual(expected, actual) + + actual = cond.Orientation(np.nan) + 90 + self.assertEqual(expected, actual) + + def test_rhs_add(self): + expected = cond.Orientation(180) + actual = 90.0 + cond.Orientation(90) + self.assertEqual(expected, actual) + + def test_rhs_sub(self): + expected = cond.Orientation(90) + actual = 180 - cond.Orientation(90) + self.assertEqual(expected, actual) + + +class OrientationIteration(unittest.TestCase): + def test_iteration(self): + """Iteration yield all allowed values + None""" + for allowed_value, orientation_value in zip( + cond.Orientation._MEMBERS, cond.Orientation + ): + self.assertEqual(orientation_value, allowed_value) + + +class CenterSurroundStimulusEquality(unittest.TestCase): + def test_equal_all_numeric(self): + css1 = cond.CenterSurroundStimulus(2.0, 0.04, 0.8, 45, 90) + css2 = cond.CenterSurroundStimulus(2.0, 0.04, 0.8, 45, 90) + self.assertEqual(css1, css2) + + def test_neq_all_numeric(self): + css1 = cond.CenterSurroundStimulus(2.0, 0.04, 0.8, 45, 90) + + # Not equal if surround orientation differs + css2 = cond.CenterSurroundStimulus(2.0, 0.04, 0.8, 45, 45) + self.assertNotEqual(css1, css2) + + # Not equal if center orientation differs + css2 = cond.CenterSurroundStimulus(2.0, 0.04, 0.8, 90, 90) + self.assertNotEqual(css1, css2) + + # Not equal if temporal_frequency differs + css2 = cond.CenterSurroundStimulus(1.0, 0.04, 0.8, 45, 90) + self.assertNotEqual(css1, css2) + + def test_eq_all_none(self): + css1 = cond.CenterSurroundStimulus(1.0, 0.04, 0.8, None, None) + css2 = cond.CenterSurroundStimulus(1.0, 0.04, 0.8, None, None) + self.assertEqual(css1, css2) + + def test_eq_all_nan(self): + css1 = cond.CenterSurroundStimulus(1.0, 0.04, 0.8, np.nan, np.nan) + css2 = cond.CenterSurroundStimulus(1.0, 0.04, 0.8, np.nan, np.nan) + self.assertEqual(css1, css2) + + def test_eq_nan_none(self): + css1 = cond.CenterSurroundStimulus(1.0, 0.04, 0.8, np.nan, np.nan) + css2 = cond.CenterSurroundStimulus(1.0, 0.04, 0.8, None, None) + self.assertEqual(css1, css2) + + def test_neq_some_none(self): + css1 = cond.CenterSurroundStimulus(2.0, 0.04, 0.8, 45, 90) + + # Not equal if surround orientation differs + css2 = cond.CenterSurroundStimulus(2.0, 0.04, 0.8, 45, None) + self.assertNotEqual(css1, css2) + + # Not equal if center orientation differs + css2 = cond.CenterSurroundStimulus(2.0, 0.04, 0.8, None, 90) + self.assertNotEqual(css1, css2) + + +if __name__ == '__main__': + unittest.main() diff --git a/oscopetools/read_data/test_dataset_objects.py b/oscopetools/read_data/test_dataset_objects.py new file mode 100644 index 0000000..7653df5 --- /dev/null +++ b/oscopetools/read_data/test_dataset_objects.py @@ -0,0 +1,195 @@ +import unittest + +import numpy as np +from numpy import testing as npt + +from . import dataset_objects as do + +class TestTrialFluorescenceSubsetting(unittest.TestCase): + def setUp(self): + self.fluo_matrix = np.array([ + # Trial 0 + [[1, 2], # Cell 0 + [3, 4], # Cell 1 + [5, 6]], # Cell 2 + # Trial 1 + [[7, 8], # Cell 0 + [9, 10], # Cell 1 + [11, 12]] # Cell 2 + ]) + self.trial_fluorescence = do.TrialFluorescence( + self.fluo_matrix, [0, 1], 1. / 30. + ) + + def test_cell_subset_by_single_int(self): + # Test whether fluorescence is extracted correctly + cell_to_extract = 0 + expected_fluo = self.fluo_matrix[:, cell_to_extract, :][:, np.newaxis, :] + actual_fluo = self.trial_fluorescence.get_cells(cell_to_extract).data + npt.assert_array_equal(expected_fluo, actual_fluo) + + # Test whether cell labels are subsetted correctly + npt.assert_array_equal( + [cell_to_extract], + self.trial_fluorescence.get_cells(cell_to_extract).cell_vec + ) + + def test_squeezed_cell_subset_by_single_int(self): + # Test whether fluorescence is extracted correctly + cell_to_extract = 0 + expected_fluo = self.fluo_matrix[:, cell_to_extract, :] + actual_fluo = self.trial_fluorescence.get_cells( + cell_to_extract + ).data.squeeze() + npt.assert_array_equal(expected_fluo, actual_fluo) + + def test_cell_subset_by_pair_of_ints(self): + # Test whether fluorescence is extracted correctly + expected_fluo = self.fluo_matrix[:, 0:2, :] + actual_fluo = self.trial_fluorescence.get_cells(0, 2).data + npt.assert_array_equal(expected_fluo, actual_fluo) + + # Test whether cell labels are subsetted correctly + npt.assert_array_equal( + [0, 1], + self.trial_fluorescence.get_cells(0, 2).cell_vec + ) + + def test_cell_subset_by_tuple_of_ints(self): + # Test whether fluorescence is extracted correctly + expected_fluo = self.fluo_matrix[:, 0:2, :] + actual_fluo = self.trial_fluorescence.get_cells((0, 2)).data + npt.assert_array_equal(expected_fluo, actual_fluo) + + # Test whether cell labels are subsetted correctly + npt.assert_array_equal( + [0, 1], + self.trial_fluorescence.get_cells((0, 2)).cell_vec + ) + + def test_cell_subset_by_bool_mask(self): + mask = [True, False, True] + expected_fluo = self.fluo_matrix[:, mask, :] + actual_fluo = self.trial_fluorescence.get_cells(mask).data + npt.assert_array_equal(expected_fluo, actual_fluo) + + # Test whether cell labels are subsetted correctly + npt.assert_array_equal( + [0, 2], + self.trial_fluorescence.get_cells(mask).cell_vec + ) + + def test_trial_subset_by_single_int(self): + # Test whether fluorescence is extracted correctly + trial_to_extract = 0 + expected_fluo = self.fluo_matrix[trial_to_extract, :, :][np.newaxis, :, :] + actual_fluo = self.trial_fluorescence.get_trials(trial_to_extract).data + npt.assert_array_equal(expected_fluo, actual_fluo) + + # Test whether cell labels are subsetted correctly + npt.assert_array_equal( + [trial_to_extract], + self.trial_fluorescence.get_trials(trial_to_extract).trial_vec + ) + + def test_trial_subset_by_bool_mask(self): + mask = [False, True] + expected_fluo = self.fluo_matrix[mask, :, :] + actual_fluo = self.trial_fluorescence.get_trials(mask).data + npt.assert_array_equal(expected_fluo, actual_fluo) + + # Test whether trial labels are subsetted correctly + npt.assert_array_equal( + [1], + self.trial_fluorescence.get_trials(mask).trial_vec + ) + + +class TestTrialFluorescenceSummaryStatistics(unittest.TestCase): + def setUp(self): + self.fluo_matrix = np.array([ + # Trial 0 + [[1, 2], # Cell 0 + [3, 4], # Cell 1 + [5, 6]], # Cell 2 + # Trial 1 + [[7, 8], # Cell 0 + [9, 10], # Cell 1 + [11, 12]] # Cell 2 + ]) + self.trial_fluorescence = do.TrialFluorescence( + self.fluo_matrix, [0, 1], 1. / 30. + ) + + def test_trial_mean(self): + expected = self.fluo_matrix.mean(axis=0)[np.newaxis, :, :] + actual = self.trial_fluorescence.trial_mean().data + npt.assert_allclose( + actual, expected, err_msg='Trial mean not correct to within tol.' + ) + + def test_trial_std(self): + expected = self.fluo_matrix.std(axis=0)[np.newaxis, :, :] + actual = self.trial_fluorescence.trial_std().data + npt.assert_allclose( + actual, expected, err_msg='Trial std not correct to within tol.' + ) + + def test_trial_num_isnan_after_mean(self): + tr_mean = self.trial_fluorescence.trial_mean() + self.assertEqual( + len(tr_mean.trial_vec), + 1, + 'Expected only 1 trial after taking mean.' + ) + self.assertTrue( + np.isnan(tr_mean.trial_vec[0]), + 'Expected trial_num to be NaN after taking mean across trials' + ) + + def test_trial_num_isnan_after_std(self): + tr_mean = self.trial_fluorescence.trial_std() + self.assertEqual( + len(tr_mean.trial_vec), + 1, + 'Expected only 1 trial after taking std.' + ) + self.assertTrue( + np.isnan(tr_mean.trial_vec[0]), + 'Expected trial_num to be NaN after taking std across trials' + ) + + +class TestTrialFluorescenceIterators(unittest.TestCase): + def setUp(self): + self.fluo_matrix = np.array([ + # Trial 0 + [[1, 2], # Cell 0 + [3, 4], # Cell 1 + [5, 6]], # Cell 2 + # Trial 1 + [[7, 8], # Cell 0 + [9, 10], # Cell 1 + [11, 12]] # Cell 2 + ]) + self.trial_fluorescence = do.TrialFluorescence( + self.fluo_matrix, [0, 1], 1. / 30. + ) + + def test_trial_iterator(self): + for trial_num, trial_data in self.trial_fluorescence.iter_trials(): + npt.assert_array_equal( + trial_data.data, + self.fluo_matrix[trial_num, ...][np.newaxis, :, :] + ) + + def test_cell_iterator(self): + for cell_num, cell_data in self.trial_fluorescence.iter_cells(): + npt.assert_array_equal( + cell_data.data, + self.fluo_matrix[:, cell_num, :][:, np.newaxis, :] + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/oscopetools/stim_table.py b/oscopetools/stim_table.py index fb79ac9..20bd4c9 100644 --- a/oscopetools/stim_table.py +++ b/oscopetools/stim_table.py @@ -183,6 +183,10 @@ def DGsize_table(data, twop_frames, verbose=True): data, DGs_idx, attribute )[: len(stim_table)] + x_corr, y_corr = get_center_coordinates(data, DGs_idx) + stim_table['Center_x'] = x_corr + stim_table['Center_y'] = y_corr + return stim_table @@ -244,6 +248,10 @@ def center_surround_table(data, twop_frames, verbose=True): columns=('Start', 'End'), ) + x_corr, y_corr = get_center_coordinates(data, center_idx) + stim_table['Center_x'] = x_corr + stim_table['Center_y'] = y_corr + # TODO: make this take either center or surround SF and TF depending on which is not NaN for attribute in ['TF', 'SF', 'Contrast']: stim_table[attribute] = get_attribute_by_sweep( @@ -337,10 +345,15 @@ def get_attribute_by_sweep(data, stimulus_idx, attribute): for i_condition, condition in enumerate(unique_conditions): sweeps_with_condition = np.argwhere(sweep_order == condition)[:, 0] - if condition > 0: # blank sweep is -1 - attribute_by_sweep[sweeps_with_condition] = sweep_table[condition][ - attribute_idx - ] + if condition >= 0: # blank sweep is -1 + try: + attribute_by_sweep[sweeps_with_condition] = sweep_table[ + condition + ][attribute_idx] + except: + attribute_by_sweep[sweeps_with_condition] = sweep_table[ + condition + ][attribute_idx][0] return attribute_by_sweep diff --git a/oscopetools/sync/sync.py b/oscopetools/sync/sync.py index 31ee897..0d9c3eb 100755 --- a/oscopetools/sync/sync.py +++ b/oscopetools/sync/sync.py @@ -158,7 +158,7 @@ def start(self): def stop(self): """ Stops all tasks. They can be restarted. - + ***This doesn't seem to work sometimes. I don't know why.*** #should we just use clear? diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3716ea9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,13 @@ +numpy>=1.18.5 +matplotlib>=3.2.1 +seaborn>=0.10.1 +pandas>=1.0.3 +tqdm>=4.45.0 +h5py>=2.10.0 +psychopy==2020.1.2 +pillow>=7.1.2 +pg8000>=1.15.2 +nd2reader>=3.2.1 + +sphinx>=3.1.1 +sphinx-rtd-theme>=0.5.0 diff --git a/setup.py b/setup.py index 17055e7..c121b77 100644 --- a/setup.py +++ b/setup.py @@ -4,6 +4,7 @@ name='openscope', description='Tools for surround-suppression AIBS Open Scope project.', packages=['oscopetools'], + python_requires='>=3', install_requires=[ 'psychopy', 'numpy',