septum-mec/actions/theta-rhythmicity/data/10-calculate-theta-rhythmic...

833 lines
415 KiB
Plaintext
Raw Normal View History

2021-03-10 12:25:21 +00:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/mikkel/.virtualenvs/expipe/lib/python3.6/site-packages/ipykernel_launcher.py:26: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0\n",
"Please use `tqdm.notebook.*` instead of `tqdm._tqdm_notebook.*`\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import spatial_maps as sp\n",
"import septum_mec.analysis.data_processing as dp\n",
"import septum_mec.analysis.registration\n",
"import expipe\n",
"import os\n",
"import pathlib\n",
"import scipy\n",
"import scipy.signal as ss\n",
"import numpy as np\n",
"import exdir\n",
"import pandas as pd\n",
"import optogenetics as og\n",
"import quantities as pq\n",
"import shutil\n",
"from distutils.dir_util import copy_tree\n",
"import elephant as el\n",
"import neo\n",
"from scipy.signal import find_peaks\n",
"from scipy.interpolate import interp1d\n",
"from matplotlib import mlab\n",
"from spike_statistics.core import theta_mod_idx, correlogram\n",
"\n",
"from tqdm import tqdm_notebook as tqdm\n",
"from tqdm._tqdm_notebook import tqdm_notebook\n",
"tqdm_notebook.pandas()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# data_loader = dp.Data()\n",
"# actions = data_loader.actions\n",
"# project = data_loader.project\n",
"\n",
"max_speed = .5 # m/s only used for speed score\n",
"min_speed = 0.02 # m/s only used for speed score\n",
"position_sampling_rate = 100 # for interpolation\n",
"position_low_pass_frequency = 6 # for low pass filtering of position\n",
"\n",
"box_size = [1.0, 1.0]\n",
"bin_size = 0.02\n",
"smoothing_low = 0.03\n",
"smoothing_high = 0.06\n",
"\n",
"speed_binsize = 0.02\n",
"\n",
"stim_mask = True\n",
"# baseline_duration = 600\n",
"baseline_duration = None\n",
"\n",
"data_loader = dp.Data(\n",
" position_sampling_rate=position_sampling_rate, \n",
" position_low_pass_frequency=position_low_pass_frequency,\n",
" box_size=box_size, bin_size=bin_size, \n",
" stim_mask=stim_mask, baseline_duration=baseline_duration\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"actions = data_loader.actions\n",
"project = data_loader.project"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"output = pathlib.Path('output/theta-rhythmicity')\n",
"(output / 'data').mkdir(parents=True, exist_ok=True)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"identify_neurons = actions['identify-neurons']\n",
"# sessions = pd.read_csv(identify_neurons.data_path('sessions'))\n",
"units = pd.read_csv(identify_neurons.data_path('units'))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def get_lim(action_id):\n",
" stim_times = data_loader.stim_times(action_id)\n",
" if stim_times is None:\n",
" return [0, np.inf]\n",
" stim_times = np.array(stim_times)\n",
" return [stim_times.min(), stim_times.max()]\n",
"\n",
"\n",
"def compute_stim_freq(action_id):\n",
" stim_times = data_loader.stim_times(action_id)\n",
" if stim_times is None:\n",
" return np.nan\n",
" stim_times = np.array(stim_times)\n",
" return 1 / np.mean(np.diff(stim_times))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def plot_acorr(sptr, binsize=0.01, time_limit=1):\n",
" count, bins = correlogram(\n",
" t1=sptr, t2=None, binsize=binsize, limit=time_limit, auto=True)\n",
" plt.bar(bins, count, width=binsize)\n",
" plt.axvspan(.05, .07, color='r', alpha=.5)\n",
" plt.axvspan(.1, .14, color='k', alpha=.5)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def zscore(a):\n",
" return (a - a.mean(0)) / a.std(0)\n",
"\n",
"\n",
"def signaltonoise(a, axis=0, ddof=0):\n",
" a = np.asanyarray(a)\n",
" m = a.mean(axis)\n",
" sd = a.std(axis=axis, ddof=ddof)\n",
" return np.where(sd == 0, 0, m / sd)\n",
"\n",
"\n",
"def compute_energy(p, f, f1, f2):\n",
" if np.isnan(f1) or np.all(np.isnan(p)):\n",
" return np.nan\n",
" mask = (f > f1) & (f < f2)\n",
" df = f[1] - f[0]\n",
" return np.sum(p[mask]) * df\n",
"\n",
"\n",
"def compute_band_power(p, f, f1, f2):\n",
" if np.isnan(f1) or np.all(np.isnan(p)):\n",
" return [np.nan] * 2\n",
" from scipy.integrate import simps\n",
" dx = f[1] - f[0]\n",
" mask = (f > f1) & (f < f2)\n",
" # Compute the absolute power by approximating the area under the curve\n",
" band_power = simps(p[mask], dx=dx)\n",
" total_power = simps(p, dx=dx)\n",
" rel_power = band_power / total_power\n",
" return band_power, rel_power\n",
"\n",
"\n",
"def find_theta_peak(p, f, f1, f2):\n",
" if np.all(np.isnan(p)):\n",
" return np.nan, np.nan\n",
" mask = (f > f1) & (f < f2)\n",
" p_m = p[mask]\n",
" f_m = f[mask]\n",
" peaks, _ = find_peaks(p_m)\n",
" if len(peaks) == 0:\n",
" return np.nan, np.nan\n",
" idx = np.argmax(p_m[peaks])\n",
" return f_m[peaks[idx]], p_m[peaks[idx]]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def compute_half_width(power, freq, max_power, max_frequency, band, band_width=1):\n",
" if np.isnan(max_power):\n",
" return [np.nan] * 3\n",
" \n",
" # estimate baseline power\n",
" low_baseline_mask = (freq > band[0] - band_width) & (freq < band[0])\n",
" high_baseline_mask = (freq > band[1]) & (freq < band[1] + band_width)\n",
" baseline = np.mean(np.concatenate([power[low_baseline_mask], power[high_baseline_mask]]))\n",
" p = power - baseline\n",
" m_p = max_power - baseline\n",
" m_f = max_frequency\n",
" f = freq\n",
" \n",
" # estimate half width\n",
" m_p_half = m_p / 2\n",
" half_p = p - m_p_half\n",
" idx_f = np.where(f <= m_f)[0].max()\n",
" idxs_p1, = np.where(np.diff(half_p[:idx_f + 1] > 0) == 1)\n",
" if len(idxs_p1) == 0:\n",
" return [np.nan] * 3\n",
" m1 = idxs_p1.max()\n",
" idxs_p2, = np.where(np.diff(half_p[idx_f:] > 0) == 1)\n",
" if len(idxs_p2) == 0:\n",
" return [np.nan] * 3\n",
" m2 = idxs_p2.min() + idx_f\n",
"# assert p[m1] < m_p_half < p[m1+1], (p[m1], m_p_half, p[m1+1])\n",
"# assert p[m2] > m_p_half > p[m2+1], (p[m2], m_p_half, p[m2+1])\n",
" \n",
" f1 = interp1d([half_p[m1], half_p[m1 + 1]], [f[m1], f[m1 + 1]])(0)\n",
" f2 = interp1d([half_p[m2], half_p[m2 + 1]], [f[m2], f[m2 + 1]])(0)\n",
" return f1, f2, m_p_half + baseline"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def compute_relative_peak(power, freq, max_power, band, band_width=1):\n",
" # estimate baseline power\n",
" low_baseline_mask = (freq > band[0] - band_width) & (freq < band[0])\n",
" high_baseline_mask = (freq > band[1]) & (freq < band[1] + band_width)\n",
" baseline = np.mean(np.concatenate([power[low_baseline_mask], power[high_baseline_mask]]))\n",
" return (max_power - baseline) / abs(baseline)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def compute_stim_peak(p, f, s_f):\n",
" if np.isnan(s_f):\n",
" return np.nan\n",
" return interp1d(f, p)(s_f)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sampling_period = 10 * pq.ms\n",
"kernel_width = 10 * pq.ms\n",
"\n",
"kernel = el.kernels.GaussianKernel(kernel_width)\n",
"\n",
"# Define window length (6 seconds)\n",
"sampling_frequency = 1 / sampling_period.rescale('s').magnitude\n",
"\n",
"window = int(6 * sampling_frequency)\n",
"\n",
"theta_band_f1, theta_band_f2 = 6, 10 "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"psd_data, freq_data = {}, {}\n",
"\n",
"def process(row):\n",
" action_id = row['action']\n",
" channel_group = row['channel_group']\n",
" unit_name = row['unit_name']\n",
" \n",
" name = f'{action_id}_{channel_group}_{unit_name}'\n",
" \n",
" sptr = data_loader.spike_train(action_id, channel_group, unit_name)\n",
" \n",
" rate = el.statistics.instantaneous_rate(sptr, sampling_period, kernel=kernel)\n",
" \n",
" freq, p_xx = ss.welch(rate.ravel(), fs=sampling_frequency, nperseg=window, nfft=scipy.fftpack.next_fast_len(window))\n",
"# p_xx = 10 * np.log10(p_xx)\n",
" \n",
" theta_f, theta_p_max = find_theta_peak(p_xx, freq, theta_band_f1, theta_band_f2)\n",
" \n",
" theta_bandpower, theta_relpower = compute_band_power(p_xx, freq, theta_band_f1, theta_band_f2)\n",
" \n",
" theta_relpeak = compute_relative_peak(p_xx, freq, theta_p_max, [theta_band_f1, theta_band_f2])\n",
" \n",
" theta_half_f1, theta_half_f2, theta_half_power = compute_half_width(p_xx, freq, theta_p_max, theta_f, [theta_band_f1, theta_band_f2])\n",
" \n",
" theta_half_width = theta_half_f2 - theta_half_f1\n",
" \n",
" psd_data.update({name: p_xx})\n",
" freq_data.update({name: freq})\n",
"\n",
" \n",
" # stim\n",
" \n",
" stim_freq = compute_stim_freq(action_id)\n",
" \n",
" stim_p_max = compute_stim_peak(p_xx, freq, stim_freq)\n",
" \n",
" stim_half_f1, stim_half_f2, stim_half_power = compute_half_width(p_xx, freq, stim_p_max, stim_freq, [stim_freq - 1, stim_freq + 1])\n",
" \n",
" stim_half_width = stim_half_f2 - stim_half_f1\n",
" \n",
" stim_bandpower, stim_relpower = compute_band_power(p_xx, freq, stim_freq - 1, stim_freq + 1)\n",
" \n",
" stim_relpeak = compute_relative_peak(p_xx, freq, stim_p_max, [stim_freq - 1, stim_freq + 1])\n",
" \n",
" if len(sptr) == 0:\n",
" theta_score = np.nan\n",
" else:\n",
" theta_score = theta_mod_idx(np.array(sptr))\n",
" \n",
" result = pd.Series({\n",
" 'theta_score': theta_score,\n",
" 'signal_to_noise': signaltonoise(rate.ravel()),\n",
" 'theta_freq': theta_f,\n",
" 'theta_peak': theta_p_max,\n",
" 'theta_bandpower': theta_bandpower,\n",
" 'theta_relpower': theta_relpower,\n",
" 'theta_relpeak': theta_relpeak,\n",
" 'theta_half_f1': theta_half_f1, \n",
" 'theta_half_f2': theta_half_f2,\n",
" 'theta_half_width': theta_half_width,\n",
" 'stim_freq': stim_freq,\n",
" 'stim_p_max': stim_p_max,\n",
" 'stim_half_f1': stim_half_f1, \n",
" 'stim_half_f2': stim_half_f2,\n",
" 'stim_half_width': stim_half_width,\n",
" 'stim_bandpower': stim_bandpower,\n",
" 'stim_relpower': stim_relpower,\n",
" 'stim_relpeak': stim_relpeak,\n",
" })\n",
" \n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ce07856dd5d247edb76e1a5855e405a0",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(IntProgress(value=0, max=1284), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/mikkel/.virtualenvs/expipe/lib/python3.6/site-packages/elephant/statistics.py:835: UserWarning: Instantaneous firing rate approximation contains negative values, possibly caused due to machine precision errors.\n",
" warnings.warn(\"Instantaneous firing rate approximation contains \"\n",
"/home/mikkel/.virtualenvs/expipe/lib/python3.6/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n",
" out=out, **kwargs)\n",
"/home/mikkel/.virtualenvs/expipe/lib/python3.6/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n",
" ret = ret.dtype.type(ret / rcount)\n",
"/home/mikkel/.virtualenvs/expipe/lib/python3.6/site-packages/ipykernel_launcher.py:29: RuntimeWarning: invalid value encountered in double_scalars\n",
"/home/mikkel/.virtualenvs/expipe/lib/python3.6/site-packages/ipykernel_launcher.py:6: RuntimeWarning: invalid value encountered in double_scalars\n",
" \n",
"/home/mikkel/.virtualenvs/expipe/lib/python3.6/site-packages/ipykernel_launcher.py:9: RuntimeWarning: invalid value encountered in true_divide\n",
" if __name__ == '__main__':\n",
"/home/mikkel/apps/expipe-project/spike-statistics/spike_statistics/core.py:27: RuntimeWarning: invalid value encountered in double_scalars\n",
" return (pk - th)/(pk + th)\n"
]
}
],
"source": [
"results = units.merge(\n",
" units.progress_apply(process, axis=1), \n",
" left_index=True, right_index=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pd.DataFrame(psd_data).to_feather(output / 'data' / 'spike_psd.feather')\n",
"pd.DataFrame(freq_data).to_feather(output / 'data' / 'freqs.feather')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Save to expipe"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"action = project.require_action(\"theta-rhythmicity\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"action.data['results'] = 'results.csv'\n",
"results.to_csv(action.data_path('results'), index=False)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"copy_tree(output, str(action.data_path()))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"septum_mec.analysis.registration.store_notebook(action, \"10-calculate-theta-rhythmicity.ipynb\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Explore"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"plt.rc('axes', titlesize=12)\n",
"plt.rcParams.update({\n",
" 'font.size': 12, \n",
" 'figure.figsize': (6, 4), \n",
" 'figure.dpi': 150\n",
"})\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"# action_id_0, channel_0, unit_0 = '1833-200619-1', 6, 163\n",
"# action_id_1, channel_1, unit_1 = '1833-200619-2', 6, 28\n",
"# action_id_0, channel_0, unit_0 = '1834-220319-3', 2, 46\n",
"action_id_1, channel_1, unit_1 = '1834-220319-4', 2, 60\n",
"\n",
"action_id_0, channel_0, unit_0 = '1834-150319-3', 3, 61"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"lim_0 = get_lim(action_id_0)\n",
"lim_1 = get_lim(action_id_1)\n",
"\n",
"sptrs_0 = data_loader.spike_trains(action_id_0, channel_0)\n",
"\n",
"sptrs_1 = data_loader.spike_trains(action_id_1, channel_1)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"kernel = el.kernels.GaussianKernel(10*pq.ms)\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/mikkel/.virtualenvs/expipe/lib/python3.6/site-packages/elephant/statistics.py:835: UserWarning: Instantaneous firing rate approximation contains negative values, possibly caused due to machine precision errors.\n",
" warnings.warn(\"Instantaneous firing rate approximation contains \"\n"
]
}
],
"source": [
"rate_0 = el.statistics.instantaneous_rate(sptrs_0[unit_0], 10*pq.ms, kernel=kernel)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7efc19113e48>]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 900x600 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(rate_0)\n",
"# plt.xlim(0,10000)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7efc14154d68>]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 2400x1350 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(16,9))\n",
"from scipy import signal\n",
"\n",
"# Define window length (6 seconds)\n",
"sf = 100\n",
"win = 6 * sf\n",
"freq, p_xx = ss.welch(rate_0.ravel(), sf, nperseg=win, nfft=scipy.fftpack.next_fast_len(win))\n",
"p_xx = 10*np.log10(p_xx)\n",
"\n",
"theta_f, theta_p_max = find_theta_peak(p_xx, freq, theta_band_f1, theta_band_f2)\n",
" \n",
"theta_bandpower, theta_relpower = compute_band_power(p_xx, freq, theta_band_f1, theta_band_f2)\n",
"\n",
"theta_relpeak = compute_relative_peak(p_xx, freq, theta_p_max, [theta_band_f1, theta_band_f2])\n",
"\n",
"theta_half_f1, theta_half_f2, theta_half_power = compute_half_width(p_xx, freq, theta_p_max, theta_f, [theta_band_f1, theta_band_f2])\n",
"\n",
"theta_half_width = theta_half_f2 - theta_half_f1\n",
"\n",
"plt.plot(freq, p_xx)\n",
"\n",
"plt.xlim(0,50)\n",
"plt.title(f'theta bandpower = {theta_bandpower}, {theta_relpower}, relpeak = {theta_relpeak}')\n",
"\n",
"plt.scatter(theta_f, theta_p_max)\n",
"\n",
"plt.plot([theta_half_f1, theta_half_f2], [theta_half_power]*2, marker='.')"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"33.439801780086405 -201.5410642685435\n",
"-6.8019949006129155 -201.5410642685435\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f574ccf4c18>"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 2400x1350 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(16,9))\n",
"from scipy import signal\n",
"rate_1 = el.statistics.instantaneous_rate(sptrs_1[unit_1], 10*pq.ms, kernel=kernel)\n",
"\n",
"# Define window length (6 seconds)\n",
"sf = 100\n",
"win = 6 * sf\n",
"freq, p_xx = ss.welch(rate_1.ravel(), sf, nperseg=win, nfft=scipy.fftpack.next_fast_len(win))\n",
"# freq, p_xx = ss.welch(zscore(rate_1.ravel()), sf, nperseg=win, nfft=scipy.fftpack.next_fast_len(win))\n",
"p_xx = 10*np.log10(p_xx)\n",
"\n",
"# p_xx, freq = mlab.psd(zscore(np.array(rate_1).ravel()), Fs=100, NFFT=scipy.fftpack.next_fast_len(1000))\n",
"\n",
"plt.plot(freq, p_xx)\n",
"plt.xlim(0,50)\n",
"band_power, rel_power = compute_band_power(p_xx, freq, 6, 10)\n",
"\n",
"f, p = find_theta_peak(p_xx, freq, 6, 10)\n",
"\n",
"plt.scatter(f,p)\n",
"f1, f2, p_half = compute_half_width(p_xx, freq, p, f, [6,10])\n",
"\n",
"theta_relpeak = compute_relative_peak(p_xx, freq, p, [6,10])\n",
"\n",
"plt.plot([f1, f2], [p_half]*2, marker='.')\n",
"\n",
"stim_freq = compute_stim_freq(action_id_1)\n",
"\n",
"stim_p_max = compute_stim_peak(p_xx, freq, stim_freq)\n",
"\n",
"stim_half_f1, stim_half_f2, stim_half_power = compute_half_width(p_xx, freq, stim_p_max, stim_freq, [stim_freq - 1, stim_freq + 1])\n",
"\n",
"stim_half_width = stim_half_f2 - stim_half_f1\n",
"\n",
"stim_bandpower, stim_relpower = compute_band_power(p_xx, freq, stim_freq - 1, stim_freq + 1)\n",
"\n",
"stim_relpeak = compute_relative_peak(p_xx, freq, stim_p_max, [stim_freq - 1, stim_freq + 1])\n",
"\n",
"plt.title(f'theta bandpower = {band_power}, {rel_power}\\n stim bandpower = {stim_bandpower}, {stim_relpower}\\n theta_relpeak = {theta_relpeak}, stim_relpeak = {stim_relpeak}')\n",
"\n",
"plt.plot([stim_half_f1, stim_half_f2], [stim_half_power]*2, marker='.')\n",
"\n",
"plt.scatter(stim_freq, stim_p_max)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fb52960a860>"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 900x600 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 900x600 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 900x600 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 900x600 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"\n",
"\n",
"plt.figure()\n",
"plot_acorr(np.array(sptrs_0[unit_0]))\n",
"plt.title(f'{theta_mod_idx(np.array(sptrs_0[unit_0]))}')\n",
"\n",
"plt.figure()\n",
"plt.imshow(data_loader.rate_map(action_id_0, channel_0, unit_0, 0.04))\n",
"\n",
"plt.figure()\n",
"plot_acorr(np.array(sptrs_1[unit_1]))\n",
"plt.title(f'{theta_mod_idx(np.array(sptrs_1[unit_1]))}')\n",
"\n",
"plt.figure()\n",
"plt.imshow(data_loader.rate_map(action_id_1, channel_1, unit_1, 0.04))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}