{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Import packages" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "code_folding": [ 5 ] }, "outputs": [], "source": [ "import sys\n", "from brian2 import *\n", "import sympy\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "from pathlib import Path\n", "import seaborn as sns\n", "from scipy import signal\n", "from scipy import optimize\n", "from scipy import stats\n", "from scipy.stats import gaussian_kde\n", "import pickle\n", "import yaml\n", "import time\n", "import h5py\n", "\n", "import matplotlib\n", "# matplotlib.rcParams['pdf.fonttype'] = 42\n", "import warnings\n", "warnings.filterwarnings(action='ignore', message='Mean of empty slice')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# define paths" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# You must define the path to the raw data (downloaded from the database)\n", "# the raw data to plot example cells is not part of the github directory\n", "data_folder = '/Users/kperks/mnt/OneDrive - wesleyan.edu/Research/Manuscripts/GRC_PerksSawtell/AcceptedRevision_CellReports/data_raw'" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "top_dir = Path.cwd().resolve().parents[0] #this is the path to the folder you should be running these notebooks from (Perks_Sawtell_2022)\n", "\n", "#primary resource folders:\n", "script_folder = top_dir / 'scripts'\n", "# data_folder = top_dir / 'data_raw'\n", "\n", "#folders with processed data:\n", "df_folder = top_dir / 'data_processed/df_cmdintact'\n", "meta_data_folder = top_dir / 'data_processed/GRC_properties_Meta'\n", "\n", "#where to save any figures that are generated:\n", "#change as needed. Default is the location where Perks_Sawtell_2022 lives (if you are running this script from that folder)\n", "figure_folder = Path.cwd().resolve().parents[1] / 'Perks_Sawtell_2022_FiguresComponents'\n", "\n", "#for storing simulation states\n", "sim_filename = 'grc_model_initialized.pickle'\n", "sim_filepath = top_dir / 'data_processed/grc_model_simulations' / sim_filename " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# import custom functions from scripts folder" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "sys.path.append(script_folder)\n", "from ClassDef_AmplitudeShift_Stable import AmpShift_Stable #this is the function that imports all of the cell_data structures. Needed if plotting any example cells. \n", "from FunctionDefinitions import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# configure figure styles" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "sns.set_style(\"ticks\")\n", "sns.set_context(\"paper\")\n", "rc = set_fig_style()\n", "matplotlib.rcParams.update(rc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Example Cells for long delay readout waveforms" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DGC '20200607_005'" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/kperks/mnt/OneDrive - wesleyan.edu/Research/Manuscripts/GRC_PerksSawtell/AcceptedRevision_CellReports/data_raw/20200607_005.smr\n" ] } ], "source": [ "## example DGC amplitude tuning; plot agains example afferent latency instead of stimamp\n", "\n", "exptname = '20200607_005'\n", "expt = AmpShift_Stable()\n", "expt.load_expt(exptname, data_folder)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "expt.set_amps(11,[-40,-30,-20,-10,-5,0,5,10,20,30,40])\n", "expt.set_channels('CmdTrig','lowgain','spikes','SIU','DigMark')\n", "\n", "bout_uc = [expt.get_bout_win('R','Keyboard')[0],\n", " expt.get_bout_win('R','Keyboard')[1]]\n", "\n", "sweepdur = 0.05\n", "marker_df = expt.get_marker_table() #access with : getattr(expt,'marker_df')\n", "CmdTrig = expt.get_events('CmdTrig')\n", "\n", "bout_df = expt.filter_marker_df_time(marker_df,bout_uc)\n", "trial_df = expt.filter_marker_df_code(bout_df,['T'])\n", "stim_t = trial_df.time.values\n", "\n", "eventDur = 0.001\n", "xtime,event_sweeps = expt.get_sweepsmat('SIU',trial_df['time'].values,eventDur)\n", "event_Amp = np.asarray([np.max(sweep) for sweep in event_sweeps.T])\n", "\n", "base_df = expt.filter_marker_df_code(bout_df,['U'])\n", "xtime,event_sweeps = expt.get_sweepsmat('SIU',base_df['time'].values,eventDur)\n", "event_0_Amp = np.median(np.asarray([np.max(sweep) for sweep in event_sweeps.T]))\n", "\n", "ampshift = np.asarray([np.round(((A/event_0_Amp)*100)-100) for A in event_Amp]).reshape(-1, 1)\n", "trial_df.insert(np.shape(trial_df)[1],'ampshift',ampshift)\n", " \n", "trialmat = []\n", "for a in np.unique(trial_df['ampshift']):\n", " theseT = trial_df[trial_df['ampshift']==a].time.values \n", " xtime, R = expt.get_sweepsmat('lowgain',theseT,sweepdur)\n", " trialmat.append(np.mean(R,1))\n", "trialmat = np.asarray(trialmat).T \n", "trialmat = np.asarray([sweep-sweep[0] for sweep in trialmat.T]).T\n", "\n", "hfig,ax = create_fig()\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,11))\n", "colinds = array([c for c in reversed(colinds)])\n", "trialmat = array([sweep for sweep in reversed(trialmat.T)]).T\n", "for i,sweep in enumerate(trialmat.T):\n", " ax.plot(xtime,sweep,color = colinds[i],lw = 0.5);\n", "\n", "\n", "# ax.vlines(4.5,15,20)\n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(0,50)\n", "ax.set_yticks([15,20])\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time after stimulus (ms)');\n", "\n", "\n", "\n", "figsave(figure_folder,'Fig5_ExampleDGRCwavs')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dt = expt.get_dt('lowgain')\n", "\n", "amp = []\n", "searchinds = xtime>1.5\n", "for sweep in trialmat.T:\n", "# r_u = calc_peaks(xtime,sweep, order, min_peakt,threshold_h,dt)\n", "# amp.append(r_u[1])\n", " maxR = sweep[searchinds][np.argmax(sweep[searchinds])]\n", " amp.append(maxR)\n", "amp = np.asarray(amp)\n", "\n", "stim_ampshift = np.unique(trial_df['ampshift'])\n", "\n", "\n", "figsize=[1,1.2]\n", "hfig = plt.figure(figsize = figsize) \n", "ax = hfig.add_axes([0.3,0.3,0.5,0.6])\n", "\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,11))\n", "i=0\n", "for s,r in zip(stim_ampshift,reversed(amp)):\n", " ax.scatter(s,r,color = colinds[i], s=10)\n", " i+=1\n", "ax.set_xlim(-47,47)\n", "xticks([-40,0,40]);\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.9)\n", "ax.set_ylabel('Peak response (mV)');\n", "sns.despine(hfig)\n", "\n", "figsave(figure_folder,'Fig5_ExampleDGRCscatter')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## SGC '20200607_000'" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/kperks/mnt/engram_share/home/kep2142/spikedata/data_raw/20200607/20200607_000.smr\n" ] } ], "source": [ "exptname = '20200607_000'\n", "expt = AmpShift_Stable()\n", "expt.load_expt(exptname, data_folder)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "expt.set_amps(11,[-40,-30,-20,-10,-5,0,5,10,20,30,40])\n", "expt.set_channels('CmdTrig','lowgain','spikes','SIU','DigMark')\n", "marker_df = expt.get_marker_table()\n", "\n", "bout_uc = [expt.get_bout_win('R','Keyboard')[1],\n", " expt.get_bout_win('R','Keyboard')[2]]\n", "\n", "sweepdur = 0.05\n", "marker_df = expt.get_marker_table() #access with : getattr(expt,'marker_df')\n", "CmdTrig = expt.get_events('CmdTrig')\n", "\n", "bout_df = expt.filter_marker_df_time(marker_df,bout_uc)\n", "trial_df = expt.filter_marker_df_code(bout_df,['T'])\n", "stim_t = trial_df.time.values\n", "\n", "eventDur = 0.001\n", "xtime,event_sweeps = expt.get_sweepsmat('SIU',trial_df['time'].values,eventDur)\n", "event_Amp = np.asarray([np.max(sweep) for sweep in event_sweeps.T])\n", "\n", "base_df = expt.filter_marker_df_code(bout_df,['U'])\n", "xtime,event_sweeps = expt.get_sweepsmat('SIU',base_df['time'].values,eventDur)\n", "event_0_Amp = np.median(np.asarray([np.max(sweep) for sweep in event_sweeps.T]))\n", "\n", "ampshift = np.asarray([np.round(((A/event_0_Amp)*100)-100) for A in event_Amp]).reshape(-1, 1)\n", "trial_df.insert(np.shape(trial_df)[1],'ampshift',ampshift)\n", " \n", "trialmat = []\n", "for a in np.unique(trial_df['ampshift']):\n", " theseT = trial_df[trial_df['ampshift']==a].time.values\n", " xtime, R = expt.get_sweepsmat('lowgain',theseT,sweepdur)\n", " trialmat.append(np.mean(R,1))\n", "trialmat = np.asarray(trialmat).T \n", "trialmat = np.asarray([sweep-sweep[0] for sweep in trialmat.T]).T\n", "\n", "hfig,ax = create_fig()\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,11))\n", "colinds = array([c for c in reversed(colinds)])\n", "trialmat = array([sweep for sweep in reversed(trialmat.T)]).T\n", "for i,sweep in enumerate(trialmat.T):\n", " ax.plot(xtime,sweep,color = colinds[i],lw = 0.5);\n", "\n", "# ax.vlines(4.5,2,7)\n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(0,50)\n", "ax.set_yticks([2,7])\n", "ax.set_ylim(-1,9)\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time after stimulus (ms)');\n", "\n", "figsave(figure_folder,'Fig5_ExampleSGRCwavs')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dt = expt.get_dt('lowgain')\n", "\n", "amp = []\n", "searchinds = xtime>1.5\n", "for sweep in trialmat.T:\n", "# r_u = calc_peaks(xtime,sweep, order, min_peakt,threshold_h,dt)\n", "# amp.append(r_u[1])\n", " maxR = sweep[searchinds][np.argmax(sweep[searchinds])]\n", " amp.append(maxR)\n", "amp = np.asarray(amp)\n", "\n", "stim_ampshift = np.unique(trial_df['ampshift'])\n", "restrict_inds = stim_ampshift>-20\n", "\n", "figsize=[1,1.2]\n", "hfig = plt.figure(figsize = figsize) \n", "ax = hfig.add_axes([0.3,0.3,0.5,0.6])\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,11))\n", "i = 0\n", "for s,r in zip(stim_ampshift,reversed(amp)):\n", " ax.scatter(s,r,color = colinds[i], s=10)\n", " i+=1\n", "ax.set_xlim(-47,47)\n", "xticks([-40,0,40]);\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.9)\n", "ax.set_ylabel('Peak response (mV)');\n", "sns.despine(hfig)\n", "\n", "figsave(figure_folder,'Fig5_ExampleSGRCscatter')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## SGC '20200718_000'" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/kperks/mnt/OneDrive - wesleyan.edu/Research/Manuscripts/GRC_PerksSawtell/AcceptedRevision_CellReports/data_raw/20200718_000.smr\n" ] } ], "source": [ "exptname = '20200718_000'\n", "expt = AmpShift_Stable()\n", "expt.load_expt(exptname, data_folder)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "expt.set_amps(11,[-40,-30,-20,-10,-5,0,5,10,20,30,40])\n", "expt.set_channels('CmdTrig','lowgain','spikes','SIU','DigMark')\n", "marker_df = expt.get_marker_table()\n", "\n", "bout_uc = [expt.get_bout_win('R','Keyboard')[0],\n", " expt.get_bout_win('R','Keyboard')[1]]\n", "\n", "sweepdur = 0.05\n", "marker_df = expt.get_marker_table() #access with : getattr(expt,'marker_df')\n", "CmdTrig = expt.get_events('CmdTrig')\n", "\n", "bout_df = expt.filter_marker_df_time(marker_df,bout_uc)\n", "trial_df = expt.filter_marker_df_code(bout_df,['T'])\n", "stim_t = trial_df.time.values\n", "\n", "eventDur = 0.001\n", "xtime,event_sweeps = expt.get_sweepsmat('SIU',trial_df['time'].values,eventDur)\n", "event_Amp = np.asarray([np.max(sweep) for sweep in event_sweeps.T])\n", "\n", "base_df = expt.filter_marker_df_code(bout_df,['U'])\n", "xtime,event_sweeps = expt.get_sweepsmat('SIU',base_df['time'].values,eventDur)\n", "event_0_Amp = np.median(np.asarray([np.max(sweep) for sweep in event_sweeps.T]))\n", "\n", "ampshift = np.asarray([np.round(((A/event_0_Amp)*100)-100) for A in event_Amp]).reshape(-1, 1)\n", "trial_df.insert(np.shape(trial_df)[1],'ampshift',ampshift)\n", " \n", "trialmat = []\n", "for a in np.unique(trial_df['ampshift']):\n", " theseT = trial_df[trial_df['ampshift']==a].time.values\n", " xtime, R = expt.get_sweepsmat('lowgain',theseT,sweepdur)\n", " trialmat.append(np.mean(R,1))\n", "trialmat = np.asarray(trialmat).T \n", "trialmat = np.asarray([sweep-sweep[0] for sweep in trialmat.T]).T\n", "\n", "hfig,ax = create_fig()\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,11))\n", "colinds = array([c for c in reversed(colinds)])\n", "trialmat = array([sweep for sweep in reversed(trialmat.T)]).T\n", "for i,sweep in enumerate(trialmat.T):\n", " ax.plot(xtime,sweep,color = colinds[i],lw = 0.5);\n", "\n", "# ax.vlines(4.5,2,7)\n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(0,50)\n", "ax.set_yticks([2,7])\n", "ax.set_ylim(-2,21)\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time after stimulus (ms)');\n", "\n", "figsave(figure_folder,'Fig5_ExampleSGRCwavs_cell2')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dt = expt.get_dt('lowgain')\n", "\n", "amp = []\n", "searchinds = xtime>1.5\n", "for sweep in trialmat.T:\n", "# r_u = calc_peaks(xtime,sweep, order, min_peakt,threshold_h,dt)\n", "# amp.append(r_u[1])\n", " maxR = sweep[searchinds][np.argmax(sweep[searchinds])]\n", " amp.append(maxR)\n", "amp = np.asarray(amp)\n", "\n", "stim_ampshift = np.unique(trial_df['ampshift'])\n", "restrict_inds = stim_ampshift>-20\n", "\n", "figsize=[1,1.2]\n", "hfig = plt.figure(figsize = figsize) \n", "ax = hfig.add_axes([0.3,0.3,0.5,0.6])\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,11))\n", "i = 0\n", "for s,r in zip(stim_ampshift,reversed(amp)):\n", " ax.scatter(s,r,color = colinds[i], s=10)\n", " i+=1\n", "ax.set_xlim(-47,47)\n", "xticks([-40,0,40]);\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.9)\n", "ax.set_ylabel('Peak response (mV)');\n", "sns.despine(hfig)\n", "\n", "figsave(figure_folder,'Fig5_ExampleSGRCscatter')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Import data for simulations" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "20200129(blue) has a total of 11 afferents recorded\n", "20200204(orange) has a total of 11 afferents recorded\n", "20200531(brown) has a total of 27 afferents recorded\n", "20200621(green) has a total of 15 afferents recorded\n", "number afferents excluded because first fsl threshold too high or could not be fit: 3\n", "number afferents included (spike thresh at least 0%): 61\n", " exptname animal stretch tau offset max_fsl \\\n", "1 20200129_003 20200129 5.002921 -0.017816 1.000000 9.532944 \n", "4 20200129_006 20200129 5.715809 -0.022154 1.000000 9.858215 \n", "7 20200129_009 20200129 5.451725 -0.015384 1.000000 9.357798 \n", "10 20200129_012 20200129 6.623366 -0.019459 1.000000 12.010008 \n", "1 20200531_001 20200531 6.964934 -0.020705 1.000000 11.347565 \n", "7 20200531_007 20200531 3.842939 -0.038101 2.673761 11.087392 \n", "\n", " sse df \n", "1 103.435863 94 \n", "4 48.310496 108 \n", "7 43.739012 40 \n", "10 91.976468 85 \n", "1 56.609527 105 \n", "7 109.099794 105 \n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "exptdate = 'all'\n", "# meta_df.to_csv('DF_AfferentPopulation_' + exptdate + '.csv')\n", "meta_df = pd.read_csv(top_dir / ('data_processed/DF_AfferentPopulation_' + exptdate + '.csv'))\n", "\n", "meta_params_df,expt_excluded = exclude_HighThreshAff(meta_df)\n", "\n", "well_fit,un_fit = assess_fits(meta_params_df)\n", "\n", "# meta_params_df = meta_params_df.dropna()\n", "data_df = well_fit\n", "dataset = list(zip(\n", " data_df['stretch'],\n", " data_df['tau'],\n", " data_df['offset'],\n", " data_df['max_fsl']\n", " ))\n", "dataset = np.asarray(dataset)\n", "# dataset = dataset[:,0:3]\n", "\n", "rv = gaussian_kde(dataset[:,0:3].T)\n", "\n", "max_fsl_global = np.max(meta_params_df['max_fsl'])\n", "\n", "# plot_corr_matrix_multigauss(rv)\n", "filtered_df = meta_df[meta_df.exptname.str.match('|'.join(well_fit.exptname.values))]" ] }, { "cell_type": "code", "execution_count": 9, "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", "
Unnamed: 0timecodeampshifts0ts0as1ts1as2ts2as3ts3aanimalIDexptname
051.885168T30.03.20534217.364502NaNNaNNaNNaNNaNNaN2020012920200129_002
172.278948T10.03.98163615.441895NaNNaNNaNNaNNaNNaN2020012920200129_002
292.672728T-20.0NaNNaNNaNNaNNaNNaNNaNNaN2020012920200129_002
3113.066488T-40.0NaNNaNNaNNaNNaNNaNNaNNaN2020012920200129_002
4133.460268T-10.05.73455815.502930NaNNaNNaNNaNNaNNaN2020012920200129_002
\n", "
" ], "text/plain": [ " Unnamed: 0 time code ampshift s0t s0a s1t s1a s2t \\\n", "0 5 1.885168 T 30.0 3.205342 17.364502 NaN NaN NaN \n", "1 7 2.278948 T 10.0 3.981636 15.441895 NaN NaN NaN \n", "2 9 2.672728 T -20.0 NaN NaN NaN NaN NaN \n", "3 11 3.066488 T -40.0 NaN NaN NaN NaN NaN \n", "4 13 3.460268 T -10.0 5.734558 15.502930 NaN NaN NaN \n", "\n", " s2a s3t s3a animalID exptname \n", "0 NaN NaN NaN 20200129 20200129_002 \n", "1 NaN NaN NaN 20200129 20200129_002 \n", "2 NaN NaN NaN 20200129 20200129_002 \n", "3 NaN NaN NaN 20200129 20200129_002 \n", "4 NaN NaN NaN 20200129 20200129_002 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## load multispike metadata\n", "\n", "meta_df = pd.read_csv(top_dir / 'data_processed/DF_Afferent_MultiSpikePop_ALL.csv')\n", "\n", "meta_df.head()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "x = np.asarray([-40,-30,-20,-10,-5,0,5,10,20,30,40])\n", "n_inputs = 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Example model waveforms" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## initialize model" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "## set up stimamp values\n", "N_inputs = 4\n", "N_runs = 1\n", "\n", "x = np.asarray([-40,-30,-20,-10,-5,0,5,10,20,30,40])\n", "\n", "meta_params = {\n", " 'N_inputs' : N_inputs*4, # 7 inputs with 4 possible spikes each\n", " 'N_runs' : N_runs,\n", " 'duration' : 0.05*second,\n", " 'onset_offset' : 0, # 5msec is for figure making because data plotted with 5msec pre-stimonset #4.5,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,#ms, time of normal stimulus onset relative to cmd\n", " 'e_lmi_delay' : 4*ms #ms\n", "}\n", "\n", "invpeak = (meta_params['tau_e2'] / meta_params['tau_e1']) ** \\\n", " (meta_params['tau_e1'] / (meta_params['tau_e2'] - meta_params['tau_e1']))\n", "\n", "namespace_sim = {\n", " 'sim_dt' : 0.1*ms,\n", " 'Cm' : 6*pF,\n", " 'E_l' : -70*mV,\n", " 'g_l' : 1*nS, # a 1MOhm cell has gl = 1*nS\n", " 'E_e' : 0*mV,\n", " 'E_e_lmi' : -90*mV,\n", " 'V_th' : 0*mV,\n", " 'V_r' : -70*mV,\n", " 'w_e' : 0.1*nS,\n", " 'w_e_lmi' : 4*nS, #0*nS,##0,#either on and off... weight by logistic 0*nS,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,\n", " 'tau_e_lmi' : 5*ms,\n", " 'invpeak' : invpeak\n", "}\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "get an afferent set" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": false }, "outputs": [], "source": [ "\n", "\n", "### subsample from data\n", "\n", "meta_params['e_lmi_delay']=4*ms #ms\n", " \n", "net = initialize_model(namespace_sim,meta_params) \n", "#initialized with max inputs going to test so don't have to recreate\n", "net.store('intialized',filename=sim_filepath) \n", "\n", "multispike = get_afferents_subsampled(meta_df,N_inputs)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "OR Load Pre-existing afferent set:\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# multispike = np.load(figure_folder / 'ExampleModelResponses_0_MultispikeInputTimes',multispike,allow_pickle=False)\n", "multispike_example_input = np.load(top_dir / 'data_processed/ExampleModelResponses_0_MultispikeInputTimes.npy')\n", "multispike = multispike_example_input\n", "# /Users/kperks/mnt/engram_share/locker/GranularCellPaperResources/Figure_RawEPScomponents/ExampleModelResponses_0_MultispikeInputTimes.npy" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4, 4)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#if need to get fsls... can reshape each pop response to stim by doing... then getting first val in each row\n", "np.shape(multispike_example_input[10].reshape(4,-1)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "first get reponses without inhibition for this set of afferents\n", "calculate the amp and sum at lmi onset" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "namespace_sim['w_e_lmi'] = 0*nS\n", "namespace_sim['Cm'] = 12*pF\n", "### subsample from data\n", "net = initialize_model(namespace_sim,meta_params) \n", "#initialized with max inputs going to test so don't have to recreate\n", "net.store('intialized',filename=sim_filepath) \n", "\n", "R_wav = []\n", "for _,y in enumerate(multispike):\n", " net.restore('intialized',filename=sim_filepath) # this resets simulation clock to 0\n", " # the state of the system at time of restore should affect the network operation accordingly\n", "\n", " y = y[~np.isnan(y)] # remove nan values from array of spike times\n", " spk_t_aff = np.asarray(y)*ms # create spike time array for SpikeGeneratorGroup, sorted\n", " ind_aff = np.empty(0) # create default afferent index array in case all were nan\n", "\n", " spk_t_lmi = np.empty(0)*ms # create default lmi spike time in case where no afferent input (all nan)\n", " ind_lmi = np.empty(0) # create default lmi index array in case all were nan\n", "\n", " if len(y)!=0: # if not all were nan, create index array for afferent spikes, lmi neuron, and lmi spike\n", " ind_aff = np.arange(len(y))\n", " ind_lmi = np.arange(1)\n", " spk_t_lmi = [np.min(y)]*ms\n", "\n", " # update SpikeGeneratorGroup neuron indices and spikes\n", " net['aff_input'].set_spikes(ind_aff,spk_t_aff)\n", " net['lmi_input'].set_spikes(ind_lmi,spk_t_lmi)\n", "\n", " net.run(duration = meta_params['duration'])\n", "\n", " r =net['state_mon'].v/mV+70 # set r to voltage trace from simulation trial\n", " R_wav.append(r)\n", " \n", " xtime = net['state_mon'].t\n", " \n", "# if len(y)>0:\n", "# print(_)\n", "# print(np.sum(r[0,argmin((np.min(y))>(xtime/ms)):argmin((np.min(y)+4)>(xtime/ms))].T))\n", "# print(np.max(r[0,argmin((np.min(y))>(xtime/ms)):argmin((np.min(y)+4)>(xtime/ms))].T))\n", " \n", "\n", "R_wav = (np.asarray(R_wav).squeeze())\n", "\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,11))\n", "order = np.linspace(10,0,11)\n", "hfig,ax = create_fig()\n", "# plt.figure()\n", "for i,w in enumerate(R_wav):\n", " ax.plot(xtime*1000,w,color=colinds[i],zorder=order[i],linewidth=0.5);\n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(0,50)\n", "ax.set_yticks([5,10])\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time after stimulus (ms)');\n", " \n", " \n", "figsave(figure_folder,'Fig5_ExampleModelResponses_0_NoInhib_Cm12pF')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 6.68251639 22.23362903 57.15736409 75.72267638\n", " 107.01673981 128.65489881 144.76788667 168.0808483 180.96633829\n", " 197.25074787]\n" ] }, { "data": { "image/png": "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N0uxWEx66623pD/+8Y+pr3nwwQfzWhlOBOkZMDNl1GY28O/oETNTb+DPz+tTGZ5r6jEz9ZiZenxP04bnmnrMTL1MP3/WTtczzzyDgoIC3Hnnnbjgggtw0003wWaz4fbbb891cThpMDP1mJl6zEwb5qYeM1OPmanHzLRhbuoxM/WY2chlLbr+53/+p9/vzznnnLwdzGTBzNRjZuoxM22Ym3rMTD1mph4z04a5qcfM1GNmI8cl44mIiIiIiPKIRRcREREREVEesegiIiIiIiLKIxZdREREREREecSii4iIiIiIKI9YdBEREREREeURiy4iIiIiIqI8YtFFRERERESURyy6iIiIiIiI8ohFFxERERERUR6x6CIiIiIiIsojFl1ERERERER5xKKLiIiIiIgoj1h0ERERERER5RGLLiIiIiIiojxi0UVERERERJRHLLqIiIiIiIjyiEUXERERERFRHrHoIiIiIiIiyiMWXURERERERHnEoouIiIiIiCiPWHQRERERERHlEYsuIiIiIiKiPGLRRURERERElEcsuoiIiIiIiPKIRRcREREREVEembN9gSiK2LRpE7Zt24bq6mq8//77MBgMuPnmm1FcXDwaxzjhMDNtmJt6zEw9ZqYeM9OGuanHzNRjZtowN/WY2chkLbpaW1uxfft2SJKEnTt3wuPxwOVyoaioaDSOb0JiZtowN/WYmXrMTD1mpg1zU4+ZqcfMtGFu6jGzkcladFVXV+OSSy7B+vXrsWbNGixZsgS///3v8eabb8Jut2PLli1oamoajWOdMJiZNsxNPWamHjNTL1Nmq1evxubNm5nbEHiuqcfM1GNm2jA39ZjZyKia09XQ0AAA8Hg8iMViWLFiBa677jrU1NTk5eAmA2amDXNTj5mpx8zUG5gZAOamAM819ZiZesxMG+amHjNTT1XR1dnZidtvvx3vvPMOzjjjjHwd06TCzLRhbuoxM/WYmXrMTBvmph4zU4+ZacPc1GNm6mUdXggANTU1WLt2bb6PZVJhZtowN/WYmXrMTD1mpg1zU4+ZqcfMtGFu6jEz7bhkPBERERERUR6x6CIiIiIiIsojFl1ERERERER5xKKLiIiIiIgoj1h0ERERERER5RGLLiIiIiIiojxi0UVERERERJRHLLqIiIiIiIjyiEUXERERERGNip6ggDf3tY/1YYw6Fl1ERERE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cvXa1157Ld5//33s2bMH8+fPz+lrP/7447jyyisVv2Yuv/d4zEzp6+cjt3xmpvT1J9q5xsy04fWpHjNTj9enesxMG16f6jEz9Xh9Kqe56LJarQiFQmhubkZVVRUAQJIkxOPx1J/FYjEA8qSy5Nfk6rWfeOIJNDQ04K677oLVas3Za1dWVqKxsRE/+9nP8OGHH2L37t2KXzsXP9d4zEzJ6+crt3xmpvT1J9q5xsy04fWpHjNTj9enesxMG16f6jEz9Xh9KqdqTle6+vp6PPbYY7BYLJg+fTo+85nP4NixY9iwYQNsNhtuv/12/PWvf8WWLVvgcrnwve99D0ajshov22vfeuutWLNmDRYvXgwAuPrqq1FbW5uz47bb7QCAG2+8Effdd5+WeDR/7/GYmdJjz0du+cxMyetPxHONmWnD61M9ZqYer0/1mJk2vD7VY2bq8fpUTnPRRURERERERNlpHl5IRERERERE2bHoIiIiIiIiyiMWXURERERERHnEoouIiIiIiCiPWHQRERERERHlEYsuIiIiIiKiPGLRRURERERElEcsuoiIiIiIiPLo/wN1vnnGhpBWggAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "meta_params ['e_lmi_delay'] = 4*ms #ms\n", "\n", "namespace_sim ['Cm'] = 6*pF\n", "\n", "w = [0.5,0.7,1,1.5,1.5,2,2,2,3,4,4]\n", " \n", "R_wav = [] # initialize array to store the result of each run\n", "\n", "\n", "for w_,y in zip(w,multispike):\n", "# print(t_,w_)\n", " namespace_sim['w_e_lmi'] = w_*nS\n", " \n", " net = initialize_model(namespace_sim,meta_params) \n", " #initialized with max inputs going to test so don't have to recreate\n", " net.store('intialized',filename=sim_filepath) \n", " \n", " # y = multispike[ampind,:]\n", " y = y[~np.isnan(y)] # remove nan values from array of spike times\n", " spk_t_aff = np.asarray(y)*ms # create spike time array for SpikeGeneratorGroup, sorted\n", " ind_aff = np.empty(0) # create default afferent index array in case all were nan\n", "\n", " spk_t_lmi = np.empty(0)*ms # create default lmi spike time in case where no afferent input (all nan)\n", " ind_lmi = np.empty(0) # create default lmi index array in case all were nan\n", "\n", " if len(y)!=0: # if not all were nan, create index array for afferent spikes, lmi neuron, and lmi spike\n", " ind_aff = np.arange(len(y))\n", " ind_lmi = np.arange(1)\n", " spk_t_lmi = [np.min(y)]*ms\n", "\n", " # update SpikeGeneratorGroup neuron indices and spikes\n", " net['aff_input'].set_spikes(ind_aff,spk_t_aff)\n", " net['lmi_input'].set_spikes(ind_lmi,spk_t_lmi)\n", "\n", " net.run(duration = meta_params['duration'])\n", "\n", " r =net['state_mon'].v/mV+70 # set r to voltage trace from simulation trial\n", "\n", " R_wav.append(r)\n", "# r = r.reshape(-1)\n", "\n", "# containers for storing across different inhib and afferent input params:\n", "# R_amp_mat.append(np.nanmean(R_amp,1)) # append the average across runs for these #aff and this inhib delay\n", "# R_amp_mat_subsamp = np.asarray(R_amp_mat)\\\n", "\n", "# R_wav = np.asarray(R_wav).reshape(11,-1).T\n", "xtime = net['state_mon'].t\n", "R_wav = (np.asarray(R_wav).squeeze())\n", "\n", "hfig,ax = plt.subplots(1,len(w),figsize=(15,3))\n", "\n", "_ = 0\n", "for j,w_ in enumerate(w):\n", " ax[j].plot(xtime,R_wav[_,:])\n", " ax[j].set_ylim(-5,20)\n", "# ax[j].vlines(np.min(y)/1000,0,15)\n", "# ax[j].vlines((np.min(y)+4)/1000,0,15)\n", " _+=1\n", " ax[j].set_title('weight = ' + str(w_))\n", "\n", "figsave(figure_folder,'Fig5_ExampleModelResponses_0_Inhib_ByWeightLMI')\n", "# \n", "print(np.sum(R_wav[:,argmin((np.min(y))>(xtime/ms)):argmin((np.min(y)+4)>(xtime/ms))].T,0))\n", "\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,11))\n", "order = np.linspace(10,0,11)\n", "hfig,ax = create_fig()\n", "for i,w in enumerate(R_wav):\n", " ax.plot(xtime*1000,w,color=colinds[i],zorder=order[i],linewidth=0.5);\n", " \n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(0,50)\n", "ax.set_yticks([0,5])\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time after stimulus (ms)');\n", " \n", "figsave(figure_folder,'Fig5_ExampleModelResponses_0_Inhib')" ] }, { "cell_type": "code", "execution_count": 322, "metadata": {}, "outputs": [], "source": [ "## Use this function to save a different example set of inputs\n", "# np.save('filepath to save',multispike,allow_pickle=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Plot sample afferent input tuning curves for each condition" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "results_path = top_dir / 'data_processed'" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "size_dict = {\n", " '1' : 10,\n", " '2' : 30,\n", " '3' : 50,\n", " '4' : 70,\n", " '5' : 90\n", "}" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# multispike,fsl = get_afferents_subsampled(n_inputs)\n", "# np.save(results_path / 'multispike_sub_4.npy', multispike)\n", "multispike = np.load(results_path / 'multispike_sub_4.npy')\n", "\n", "color = 'black'\n", "\n", "# maxnumaff = 1\n", "df = pd.DataFrame(np.round(multispike,1).T,columns=[x])\n", "\n", "dfmelted = pd.melt(df,value_vars=[x],var_name = 'stimamp', value_name='latency')\n", "\n", "df_plot = dfmelted.groupby(dfmelted.columns.tolist(),as_index=False).size()\n", "df_plot['size']=df_plot['size'].astype('str')\n", "\n", "# hfig,ax = create_fig_tuning()\n", "# [ax.scatter(x_.repeat(4*n_inputs),y_,color='white',alpha=0.25,\n", "# s=10,edgecolors='purple') for x_,y_ in zip(x,multispike_homogisi)];\n", "hfig,ax = create_fig_tuning()\n", "sns.scatterplot(x=\"stimamp\", y=\"latency\", size=\"size\",\n", " sizes=size_dict, alpha=.5, color=color,\n", " ax=ax, legend=False, data=df_plot)\n", "\n", "ax.set_ylim(1.5,12)\n", "ax.set_ylabel('Spike latency (msec)')\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.75)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "\n", "\n", "figsave(figure_folder,'Fig5_ModelSimulation_AfferentInputPop_subsamp4')" ] }, { "cell_type": "code", "execution_count": 228, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# multispike = generate_y_fit_multispike_homogisi(x,n_inputs,dataset,rv)\n", "# np.save(results_path / 'multispike_homogisi.npy', multispike)\n", "multispike = np.load(results_path / 'multispike_homogisi.npy')\n", "\n", "color = 'purple'\n", "\n", "df = pd.DataFrame(np.round(multispike,1).T,columns=[x])\n", "\n", "dfmelted = pd.melt(df,value_vars=[x],var_name = 'stimamp', value_name='latency')\n", "\n", "df_plot = dfmelted.groupby(dfmelted.columns.tolist(),as_index=False).size()\n", "\n", "df_plot['size']=df_plot['size'].astype('str')\n", "\n", "# hfig,ax = create_fig_tuning()\n", "# [ax.scatter(x_.repeat(4*n_inputs),y_,color='white',alpha=0.25,\n", "# s=10,edgecolors='purple') for x_,y_ in zip(x,multispike_homogisi)];\n", "hfig,ax = create_fig_tuning()\n", "sns.scatterplot(x=\"stimamp\", y=\"latency\", size=\"size\",\n", " sizes=size_dict, alpha=.5, color=color,\n", " ax=ax, legend=False, data=df_plot)\n", "\n", "ax.set_ylim(1.5,12)\n", "ax.set_ylabel('Spike latency (msec)')\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.75)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "figsave(figure_folder,'Fig5_ModelSimulation_AfferentInputPop_homogisi')" ] }, { "cell_type": "code", "execution_count": 231, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "multispike,fsl = generate_y_fit_multispike_gauss(x,n_inputs,dataset,rv)\n", "np.save(results_path / 'multispike_homogpspike.npy', multispike)\n", "\n", "multispike = np.load(results_path / 'multispike_homogpspike.npy')\n", "\n", "color = 'orange'\n", "\n", "df = pd.DataFrame(np.round(multispike,1).T,columns=[x])\n", "\n", "dfmelted = pd.melt(df,value_vars=[x],var_name = 'stimamp', value_name='latency')\n", "\n", "df_plot = dfmelted.groupby(dfmelted.columns.tolist(),as_index=False).size()\n", "\n", "df_plot['size']=df_plot['size'].astype('str')\n", "\n", "# hfig,ax = create_fig_tuning()\n", "# [ax.scatter(x_.repeat(4*n_inputs),y_,color='white',alpha=0.25,\n", "# s=10,edgecolors='purple') for x_,y_ in zip(x,multispike_homogisi)];\n", "hfig,ax = create_fig_tuning()\n", "sns.scatterplot(x=\"stimamp\", y=\"latency\", size=\"size\",\n", " sizes=size_dict, alpha=.5, color=color,\n", " ax=ax, legend=False, data=df_plot)\n", "\n", "ax.set_ylim(1.5,12)\n", "ax.set_ylabel('Spike latency (msec)')\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.75)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "figsave(figure_folder,'Fig5_ModelSimulation_AfferentInputPop_homogpspike')\n", "\n" ] }, { "cell_type": "code", "execution_count": 232, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "multispike,fsl = generate_y_fit_multispike_homog(x,n_inputs,dataset,rv)\n", "\n", "np.save(results_path / 'multispike_homog.npy', multispike)\n", "\n", "multispike = np.load(results_path / 'multispike_homog.npy')\n", "\n", "color = 'blue'\n", "\n", "df = pd.DataFrame(np.round(multispike,1).T,columns=[x])\n", "\n", "dfmelted = pd.melt(df,value_vars=[x],var_name = 'stimamp', value_name='latency')\n", "\n", "df_plot = dfmelted.groupby(dfmelted.columns.tolist(),as_index=False).size()\n", "\n", "df_plot['size']=df_plot['size'].astype('str')\n", "\n", "# hfig,ax = create_fig_tuning()\n", "# [ax.scatter(x_.repeat(4*n_inputs),y_,color='white',alpha=0.25,\n", "# s=10,edgecolors='purple') for x_,y_ in zip(x,multispike_homogisi)];\n", "hfig,ax = create_fig_tuning()\n", "sns.scatterplot(x=\"stimamp\", y=\"latency\", size=\"size\",\n", " sizes=size_dict, alpha=.5, color=color,\n", " ax=ax, legend=False, data=df_plot)\n", "\n", "ax.set_ylim(1.5,12)\n", "ax.set_ylabel('Spike latency (msec)')\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.75)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "figsave(figure_folder,'Fig5_ModelSimulation_AfferentInputPop_homogall')\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Model DGC" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initialize" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "meta_params = {\n", " 'N_inputs' : n_inputs*4, # 7 inputs with 4 possible spikes each\n", " 'N_runs' : 100,\n", " 'duration' : 0.05*second,\n", " 'onset_offset' : 0, # 5msec is for figure making because data plotted with 5msec pre-stimonset #4.5,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,#ms, time of normal stimulus onset relative to cmd\n", " 'e_lmi_delay' : 4*ms #ms\n", "}\n", "\n", "invpeak = (meta_params['tau_e2'] / meta_params['tau_e1']) ** \\\n", " (meta_params['tau_e1'] / (meta_params['tau_e2'] - meta_params['tau_e1']))\n", "\n", "namespace_sim = {\n", " 'sim_dt' : 0.1*ms,\n", " 'Cm' : 6*pF,\n", " 'E_l' : -70*mV,\n", " 'g_l' : 1*nS, # a 1MOhm cell has gl = 1*nS\n", " 'E_e' : 0*mV,\n", " 'E_e_lmi' : -90*mV,\n", " 'V_th' : 0*mV,\n", " 'V_r' : -70*mV,\n", " 'w_e' : 0.1*nS,\n", " 'w_e_lmi' : 5*nS, #0*nS,##0,#either on and off... weight by logistic 0*nS,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,\n", " 'tau_e_lmi' : 5*ms,\n", " 'invpeak' : invpeak\n", "}\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Do all 4 model conditions" ] }, { "cell_type": "code", "execution_count": 234, "metadata": { "scrolled": false }, "outputs": [], "source": [ "n_runs = 100\n", "subsamp, homog_all, homog_isi, homog_pspike = run_4_model_conditions(x, n_runs, n_inputs)" ] }, { "cell_type": "code", "execution_count": 242, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'amp': array([[ 2.82613441, 4.64370549, 8.39206015, ..., 0. ,\n", " 0. , 0. ],\n", " [ 6.07879702, 5.5813473 , 9.50008967, ..., 7.31562706,\n", " 12.00044691, 0. ],\n", " [ 6.85622798, 11.00529536, 10.74602919, ..., 6.3339422 ,\n", " 13.3528154 , 11.03439812],\n", " ...,\n", " [11.86757475, 13.85390868, 12.95369835, ..., 12.4738864 ,\n", " 15.4086111 , 11.81820399],\n", " [11.87399865, 14.18381719, 12.80169256, ..., 13.87994404,\n", " 15.90947877, 12.90485362],\n", " [12.32291842, 14.64783683, 13.16323994, ..., 14.66751725,\n", " 15.55613922, 14.04648338]]),\n", " 'dvdt': array([[0.7065336 , 1.16092637, 2.09801504, ..., nan, nan,\n", " nan],\n", " [1.51969925, 1.39533683, 2.37502242, ..., 1.82890677, 3.00011173,\n", " nan],\n", " [1.714057 , 2.75132384, 2.6865073 , ..., 1.58348555, 3.33820385,\n", " 2.75859953],\n", " ...,\n", " [2.96689369, 3.46347717, 3.23842459, ..., 3.1184716 , 3.85215278,\n", " 2.954551 ],\n", " [2.96849966, 3.5459543 , 3.20042314, ..., 3.46998601, 3.97736969,\n", " 3.2262134 ],\n", " [3.08072961, 3.66195921, 3.29080999, ..., 3.66687931, 3.8890348 ,\n", " 3.51162084]])}" ] }, "execution_count": 242, "metadata": {}, "output_type": "execute_result" } ], "source": [ "homog_pspike" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot results" ] }, { "cell_type": "code", "execution_count": 244, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "### plot all 4 conditions overlaid\n", "\n", "hfig,ax = create_fig_tuning()\n", "ax.set_ylabel('Mean Response Amplitude \\n (mV)',linespacing=0.9)\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.9)\n", "# ax.set_ylim(-5,105)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "\n", "\n", "plt.errorbar(x,\n", " np.mean(subsamp['amp'],1),\n", " yerr=stats.sem(subsamp['amp'],1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['black'], capsize=2)\n", "\n", "plt.errorbar(x,\n", " np.mean(homog_all['amp'],1),\n", " yerr=stats.sem(homog_all['amp'],1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['blue'], capsize=2,zorder=3)\n", "\n", "plt.errorbar(x,\n", " np.mean(homog_isi['amp'],1),\n", " yerr=stats.sem(homog_isi['amp'],1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['purple'], capsize=2,zorder=3)\n", "\n", "plt.errorbar(x,\n", " np.mean(homog_pspike['amp'],1),\n", " yerr=stats.sem(homog_pspike['amp'],1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['orange'], capsize=2,zorder=3)\n", "\n", "\n", "sns.despine(hfig)\n", "figsave(figure_folder,'Fig5_ModelSimulation_AllFourConditions_DGC')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Model SGC" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initialize" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "meta_params = {\n", " 'N_inputs' : n_inputs*4, # 7 inputs with 4 possible spikes each\n", " 'N_runs' : 100,\n", " 'duration' : 0.05*second,\n", " 'onset_offset' : 0, # 5msec is for figure making because data plotted with 5msec pre-stimonset #4.5,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,#ms, time of normal stimulus onset relative to cmd\n", " 'e_lmi_delay' : 4*ms #ms\n", "}\n", "\n", "invpeak = (meta_params['tau_e2'] / meta_params['tau_e1']) ** \\\n", " (meta_params['tau_e1'] / (meta_params['tau_e2'] - meta_params['tau_e1']))\n", "\n", "namespace_sim = {\n", " 'sim_dt' : 0.1*ms,\n", " 'Cm' : 12*pF, #12*pF,\n", " 'E_l' : -70*mV,\n", " 'g_l' : 1*nS, # a 1MOhm cell has gl = 1*nS\n", " 'E_e' : 0*mV,\n", " 'E_e_lmi' : -90*mV,\n", " 'V_th' : 0*mV,\n", " 'V_r' : -70*mV,\n", " 'w_e' : 0.1*nS,\n", " 'w_e_lmi' : 0*nS, #0*nS,##0,#either on and off... weight by logistic 0*nS,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,\n", " 'tau_e_lmi' : 5*ms,\n", " 'invpeak' : invpeak\n", "}\n", "\n" ] }, { "cell_type": "code", "execution_count": 249, "metadata": { "scrolled": false }, "outputs": [], "source": [ "n_runs = 100\n", "subsamp, homog_all, homog_isi, homog_pspike = run_4_model_conditions(x, n_runs, n_inputs)" ] }, { "cell_type": "code", "execution_count": 250, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "### plot all 4 conditions overlaid\n", "\n", "hfig,ax = create_fig_tuning()\n", "ax.set_ylabel('Mean Response Amplitude \\n (mV)',linespacing=0.9)\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.9)\n", "# ax.set_ylim(-5,105)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "\n", "\n", "plt.errorbar(x,\n", " np.mean(subsamp['amp'],1),\n", " yerr=stats.sem(subsamp['amp'],1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['black'], capsize=2)\n", "\n", "plt.errorbar(x,\n", " np.mean(homog_all['amp'],1),\n", " yerr=stats.sem(homog_all['amp'],1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['blue'], capsize=2,zorder=3)\n", "\n", "plt.errorbar(x,\n", " np.mean(homog_isi['amp'],1),\n", " yerr=stats.sem(homog_isi['amp'],1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['purple'], capsize=2,zorder=3)\n", "\n", "plt.errorbar(x,\n", " np.mean(homog_pspike['amp'],1),\n", " yerr=stats.sem(homog_pspike['amp'],1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['orange'], capsize=2,zorder=3)\n", "\n", "sns.despine(hfig)\n", "figsave(figure_folder,'Fig5_ModelSimulation_AllFourConditions_SGC_12pF')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# analyze simulation results from RunSimulation_hyperparameterize.py that saved results to h5" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "def get_response_amp_atdelay(results,results_onset,lmi_delay):\n", " amp = []\n", " for i,rmat in enumerate(np.moveaxis(results, [0, 1, 2], [-1, -2, -3])):\n", " rmat = rmat.T\n", " ronset = results_onset[:,i]\n", "\n", " t0ind = np.array([np.argmax(xtime>=r) for r in ronset]).astype('float')\n", " t0ind[t0ind==0] = np.nan\n", " tind = np.array([np.argmax(xtime>=(r+lmi_delay)) for r in ronset]).astype('float')\n", " tind[tind==0] = np.nan\n", "\n", " amp_ = []\n", " for o,t,r in zip(t0ind,tind,rmat):\n", " if np.isnan(o):\n", " amp_.append(0)\n", " if ~np.isnan(o):\n", " amp_.append(r[int(t)]-r[int(o)])\n", " amp.append(np.array(amp_).T)\n", " amp = np.array(amp).T\n", " return amp\n", "\n", "def get_response_amp_peak(results):\n", " amp = []\n", " for rmat in np.moveaxis(results, [0, 1, 2], [-1, -2, -3]):\n", " amp_ = [np.max(r)-r[0] for r in rmat.T]\n", " amp.append(np.array(amp_).T)\n", " amp = np.array(amp).T\n", " return amp" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "results_path = top_dir / 'data_processed'\n", "results_path = results_path / 'simulation_results_4inputs.h5'\n" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with h5py.File(results_path, 'a') as h5file:\n", " group = h5file.get('results')\n", " randtrial = randint(np.shape(np.array(group['subsamp']))[2])\n", " plt.plot(np.array(group['subsamp'])[:,:,randtrial].T);" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['homog_all', 'homog_all_onset', 'homog_isi', 'homog_isi_onset', 'homog_pspike', 'homog_pspike_onset', 'subsamp', 'subsamp_onset']\n", "['n_inputs', 'n_runs', 'stimamp', 'xtime']\n" ] } ], "source": [ "h5file = h5py.File(results_path, 'r')\n", "\n", "\n", "print(list(h5file['results'].keys()))\n", "\n", "xtime = np.array(h5file['metadata']['xtime'])\n", "x = np.array(h5file['metadata']['stimamp'])\n", "subsamp = np.array(h5file['results']['subsamp'])\n", "\n", "subsamp = np.array(h5file['results']['subsamp'])\n", "homog_isi = np.array(h5file['results']['homog_isi'])\n", "homog_pspike = np.array(h5file['results']['homog_pspike'])\n", "homog_all = np.array(h5file['results']['homog_all'])\n", "\n", "subsamp_onset = np.array(h5file['results']['subsamp_onset'])\n", "homog_isi_onset = np.array(h5file['results']['homog_isi_onset'])\n", "homog_pspike_onset = np.array(h5file['results']['homog_pspike_onset'])\n", "homog_all_onset = np.array(h5file['results']['homog_all_onset'])\n", "\n", "print(list(h5file['metadata'].keys()))\n", "\n", "xtime = np.array(h5file['metadata']['xtime'])\n", "stimamp = np.array(h5file['metadata']['stimamp'])\n", "\n", "h5file.close()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(11, 500, 200)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.shape(homog_isi)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lmi_delay = 2\n", "\n", "\n", "hfig,ax = create_fig_tuning()\n", "ax.set_ylabel('Mean Response Amplitude \\n (mV)',linespacing=0.9)\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.9)\n", "# ax.set_ylim(0,17)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "\n", "amp = get_response_amp_atdelay(subsamp,subsamp_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1,nan_policy='omit'),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['black'], capsize=2)\n", "\n", "amp = get_response_amp_atdelay(homog_all,homog_all_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1,nan_policy='omit'),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['blue'], capsize=2,zorder=3)\n", "\n", "amp = get_response_amp_atdelay(homog_isi,homog_isi_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1,nan_policy='omit'),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['purple'], capsize=2,zorder=3)\n", "\n", "amp = get_response_amp_atdelay(homog_pspike,homog_pspike_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1,nan_policy='omit'),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['orange'], capsize=2,zorder=3)\n", "\n", "\n", "sns.despine(hfig)\n", "figsave(figure_folder,'Fig5_ModelSimulation_AllFourConditions_DGC_2msecLMI')\n" ] }, { "cell_type": "code", "execution_count": 295, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 295, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "hfig,ax = create_fig_tuning()\n", "ax.set_ylabel('Mean Response Amplitude (mV)')\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.75)\n", "# ax.set_ylim(-5,105)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "\n", "amp = get_response_amp_peak(subsamp)\n", "plt.errorbar(x,\n", " np.mean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['black'], capsize=2)\n", "\n", "amp = get_response_amp_peak(homog_isi)\n", "plt.errorbar(x,\n", " np.mean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['purple'], capsize=2)\n", "\n", "amp = get_response_amp_peak(homog_pspike)\n", "plt.errorbar(x,\n", " np.mean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['orange'], capsize=2)\n", "\n", "amp = get_response_amp_peak(homog_all)\n", "plt.errorbar(x,\n", " np.mean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['grey'], capsize=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### add no stimamp latency tuning condition" ] }, { "cell_type": "code", "execution_count": 377, "metadata": {}, "outputs": [], "source": [ "def generate_y_fit_multispike_nolatencytuning_pspikevar(x,n_inputs,dataset,rv):\n", " jitter_amp = 0.1 #(max jitter amp)\n", " mean_val = 2\n", " minfsl = np.array([mean_val+random.uniform(-jitter_amp,jitter_amp)]).repeat(11,-1)\n", " offset_2 = 1.74 #(these are averages from empirical data in ms from first spikes)\n", " offset_3 = 3.66\n", " offset_4 = 6.37\n", " t2 = minfsl + offset_2\n", " t3 = minfsl + offset_3\n", " t4 = minfsl + offset_4\n", " basis = np.vstack([minfsl,t2,t3,t4]).T\n", " \n", " # select a subset of real afferent p(spike) to mimic\n", " subset = random.choices(np.unique(meta_df['exptname']),k=n_inputs) #divide by 4 if multispike\n", " multispike = []\n", " # get spike times across stimamps\n", " for expt_ in subset:\n", " spkt = meta_df[meta_df['exptname'].isin([expt_])].groupby(['ampshift']).mean()[['s0t','s1t','s2t','s3t']].values\n", " spk_mask = np.isnan(spkt)\n", " y = basis.copy()\n", " y[spk_mask] = np.nan\n", " multispike.extend(y.T)\n", " multispike = np.asarray(multispike).T\n", " \n", " return multispike\n", " \n" ] }, { "cell_type": "code", "execution_count": 380, "metadata": {}, "outputs": [], "source": [ "multispike = generate_y_fit_multispike_nolatencytuning_pspikevar(x,n_inputs,dataset,rv)" ] }, { "cell_type": "code", "execution_count": 378, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\r", " 0%| | 0/50 [00:00" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWsAAADwCAYAAADGkEVMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABgvklEQVR4nO3dd3RVxdrA4d/pPb33QiiBUKX3XhQFVKzYvYiK/Sr2cvVTsaGo6LU3RAFFRAFFegu9J0BCeu/JSU4/5/sj3GBMgARSyTxrZZnMnpnzbmS92cyeInG5XC4EQRCENk3a2gEIgiAI5yeStSAIQjsgkrUgCEI7IJK1IAhCOyCStSAIQjsgb45On376aQICApqja0EQhEtWbm4ur7zySr3XmiVZBwQEMHfu3OboWhAE4ZK1cOHCs14TwyCCIAjtgEjWgiAI7YBI1oIgCO2ASNaCIAjtgEjWgiAI7YBI1oIgCO2ASNaCIAjtQLPMsxZqczpdHMoqI7vUhIdWQY9gd9zUitYOSxCEdkQk62a26lA2r/6eSF65GT+DipIqGy5cTO8TzCPju+BrULV2iIIgtAMiWTcTl8vFCyuPsmR3Bg+P78wNA8Jw1yhwOl1sSy5kwbqTjH1rIwuu782Yrv6tHa4gCG2cSNbN5JXfEvjlYDbL5wyhR7B7TblUKmF4jC9Do334ZMsp/vX1Xp6/sjuzBoW3YrSCILR1Ilk3g9WHc/hqRyo/zh5cK1H/nVQqYfbIaMK9dTzw/X6kErhpoEjYgiDUT8wGaWJFRgtPLD/EvMnd6BPmed76k3oEsOD63jz/y1E2nShogQgFQWiPRLJuYm/9eYJIHx23D4locJspcYE8PL4z93+3j6R8Y/MFJwhCuyWSdRNKyq/gh90ZPH9ld6RSSaPa3jsqmtFd/Zj7/X7MNkczRSgIQnslknUT+nBjMiM7+9K3AcMf/ySRSHhleg+MFhvz1xxvhugEQWjPRLJuIpklVaw8kM19o6MvuA+DWsG71/fh6x2pbE8qbMLoBEFo70SybiLf7kynV6gH/cK9LqqfvmGe3Dk8kid/PiyGQwRBqCGSdROwOZws25vJjQPCmqS/h8Z2xuWCd/862ST9CYLQ/olk3QT+SsjDYncwJS6wSfrTKGX83/Q4Ptl8iqT8iibpUxCE9k0k6ybw074sruodhEYpa7I+h8X4MK6bPy//ltBkfQqC0H6JZH2RKsw2Np4oYGrPoCbv+6kp3dieVMSG4/lN3rcgCO2LSNYXaV1CHh4aBZdFXNyLxfqEeWu5Y1gkL686hs3hbPL+BUFoPxqVrBMTE5k7dy7z5s1jz549JCQkcN999/Hoo4+SnZ3dXDG2ab8dymVKXCCyRi6Caaj7RkdTZrLz/a70ZulfEIT2oVHJ+vDhw6hUKtRqNVFRUSxfvpz58+fzwAMPsHTp0uaKsc0y2xxsTSpgQmzzbXFqUCt4YGwnFq5PwmQVU/kEoaNq1K57ffr0YfLkyRQUFPDpp59iNBrR6XTIZDIKCwuJj49n165dZGZmNle8bcqOU0XIpdLzDoGkmyysL64g1WRBK5PSx6BlpJcBpbRhvyuv7x/Gx5tO8fWOVGaPvPBFN4IgtF/nTdaLFi3iwIEDACQnJ7NmzRrc3NxwOp0olUpMJhO5ubkEBgYycOBABg4cyMKFC5s77jZhQ2I+wzr5oJTXn3Qr7Q5eSM5mcU4RnbRqOmvVGB0OPskoQCuT8nBEALcEeSOVnHsIRSmX8uC4GF79PYEbB4ZhEEeCCUKHc95kPWfOnJrvt23bxhNPPIFcLuf++++nsrKSJ598EoVCwbx585o10LbG5XKx4Xg+c0fH1Hs9z2Jj5sFkXC5Y0SeG/u66mmsmh5MlucW8diqHX/NL+ah7OL7KcyfgGX2C+WhjMp9vTeXBcfV/piAIl65GDYMMHTqUoUOH1ipbsGBBU8bTbmQUm8goNjG8s0+da2U2O9cdTMZfKeeLuEh0strzrzUyKbcH+3C5jzv/OprK5L0nWN67E+Gas5/HKJdJeWh8Z57+6TC3DgnHQ6ts8nsSBKHtElP3LtDOlCLCvbUEumtqlbtcLh49noFSIuGLHnUT9d/5qRT82DuaXgYtM/YnkWaynPMzr4gLJNhTwydbTjXJPQiC0H6IZH2Bdp4qYmBk3ReLS/NKWF9cwUfdI9DJz7+iUSmV8lFsBL3dtMw8kEyR1X7WulKphPvHdOLr7WmUm20XFb8gCO2LSNYXKP5UMYOivGuVldsdvJSUzVNRgURpzz6k8U8KqYQPY8PxVym462gKVufZF8BM7hGIr0HFNzvSLjh2QRDaH5GsL0BGcRVZpSYG/iNZL0jNw0sh57aguuPY56OSSvmsRwQZZivPJZ19gZFMKuGeUdF8tjVFzLsWhA5EJOsLEJ9STKiXhmCPM+PVhVY7X2QV8Ex0IPILXM3oq1TwWY9IvssuYnVB6VnrTesdjFouZclusapREDoKkawvQPV4de2n6s8yC4jUqBjv7XZRffcyaHkqKpCHEzPINlvrraOUS5k9Mpr/bj6F1S72DBGEjkAk6wuwO7WYAX97uVjlcPJ5ViFzw/2RnGeBS0PMDvWll0HLY8czcLlc9da5rn8oNoeTn/d3jNWigtDRiWTdSCWVVtKKqmodivtLfgkqqYQrfD2a5DOkEglvdAlhZ1klP+WV1FtHrZBxx7BIFm1MxuGsP6ELgnDpEMm6kQ5mlmJQyYnyObMi8ZvsIm4I9EbRhDvvhWlUPBUVyLNJWRSeZTrfrEHhFBmtrD2a22SfKwhC2ySSdSMdzCgjLsQd6enEnGA0sb+8ipsCm34/69uDfYjUqHg+Kave6wa1ghsGholFMoLQAYhk3UiHMkvpFepR8/PPeSUM8tARdo6l4hdKJpHwZpdQVuSXsKPUWG+d24ZEcDizjL1pxU3++YIgtB0iWTeCy+XiYGYpvUI8an5ekV/KND/Pcze8CN30Gm4P9uGZk5k46nnZGOSh4YqegXyyOaXZYhAEofWJZN0IWaUmCo1Wep9+st5XXkW2xdpkLxbP5rGIAHIsNr7NLqr3+l3Do/jjWC6phZXNGocgCK1HJOtGOJhRhr+bigB3NQC/F5YxzMOAt7JRmxc2modCzpNRgbx2KocSW92XjT2C3RkY6c3n28TTtSBcqkSyboS/D4EArCsqZ5zPxS2CaagbA70JUit4Ny2v3ut3j4hk6Z5MSqvqX0gjCEL71ryPhJeYw5llDImuXrmYbrJwvNJ83hWLVlMVW1e+SYV9LxJVGS6HAqk1iPDQK+k56uoGf7ZMIuGZqCBuPZzCnSG+hKpr72c9qrMfQR5qvotP577RnRp/c4IgtGniybqBXC4XCbnlxAZVJ+d1ReXEaFXnPDBg56r/8ue64dg8vgepDYkpHInVG3TJ5DseZ+XS0STuWNPgGEZ5GRjgrmN+Sk6da1KphLuGR/Hl9lQsdrHBkyBcakSybqDccjOlVTa6BZ5J1uPO8VS99rvHqVC/gb0sist6rOaqG35n6qyvuHLWEqbO2EqgcgEup5yMyrms+faRBsUgkUh4JjqI5bklHDOa6lyf3icYl8vFLwfOvmufIAjtk0jWDZSQU467RkGgu5pKh4NtpUbGe7vXW/evH15A6v8TrrwZXHXzUryDI+rU6T58Kldd9yfkXY3UfxUrv70Gq6VuAv6n3m5apvp58HJy3YSsVsiYNSiCz7aknHVPEUEQ2ieRrBsoIaeCboEGJBIJO0srUUgktQ7B/Z9DG5fj8FqMPWcKE256/bz9jr/pNbxdz6L0SWT18muxW8//gnBeZCCbSyrYXlJ3ocysweGkFlWy5WRhw25MEIR2QSTrBjqWU14zBLK91MggD32dvUAqS4pIL38VU2FnJs96r8F995swixDdy6i8Uvht6TXY7Wc/2gsgUqvixkBv5qfk1HmC9tIpmdE3mM+2iml8gnApEcm6gRL+nqxLjAzx0Neps2HVY8jkVoaP+rDR/fcYPo0g9UuofU+wevFd563/QLg/e8ur2FbPMvQ7hkay+WQBSfkVjY5DEIS2SSTrBjBZHaQWVhIb6IbR7uCQsapOsj51YBvKgO0oK2bgFRh2QZ/Tc9TV6Cpnow7axl9Lnj1n3RC1kpuCvHkjJbfO03WMv4HhMb58tjX1guIQBKHtEcm6AY7nVSCVSIjx17OrrBKtVEoPvaZWncNH52Op8GXk1c9c1GcNm/4w9pzJOLx/5OiWX89Z94EwP/aXV7G5nrHru4ZF8tO+TIorxSIZQbgUiGTdAMeyy4n21aOSy9heamSgh77WOYvJ+zaj9T+Kt+wG5PKLX2c0/oa3MRVFkVLyEhXF+WetF6RWcnOQN2/UM3Y9PMaHcG8t3+0Up6ALwqVAJOsGOJFXQZcAA1D9cnHwP4ZAjhxbgKk8gCFX3dcknyeXyxk+8mMkUjvrV//rnHUfCPfnsNHExuLa49MSiYQ7hkby9c40sUhGEC4BIlk3wMn8Cjr766m0OzhYUcVgjzNT9ooyU9D4H8XNMaVJP9MrMIwg9eNo/Y+y/of/nLVegErBrCBv3kitO3Y9rU8wDqeLVQfrrngUBKF9Ecm6AU7mGenkZ+BARRUKiYQ4vbbmWvyGN7BbNQy58uEm/9w+427Akj0Cq/sP5J46dtZ6c8P8OWY08dc/nq7VChk3Dwrn061ikYwgtHciWZ9HWZWN/AoLMf569pVX0cugrZlfbbfbcXnE4ywegFKlOU9PF2bCtQuxmfXExz921jr+KgW3BPnwTj1P17MGhZOcb2THqfr3whYEoX0Qyfo8kgoqUMqkhHtp2VdeRV+3M0/Vh9YvQaUto9dl9zTb5ys1WiI8H0fre5INP7x81npzwnw5XGGqM+/a16Diyt5BfC4WyQhCuyaS9XmcyDMS5atDJpWwt7ySfm5nxqsz81dQVRJCaLe+zRpD3MgZWHKGYXb7geKc9HrrBKqUXB/oxYLUuvtd3zE0kr8S8zlVUP85joIgtH0iWZ9H9Xi1nkyLjXyrvebJ2mqqQumTgMY6uEXiGDttAU67kq3rzj4ccl+YHzvKjOwpq328V2yQG0OivfliW2ozRykIQnMRyfo8TuZXEONnYG9ZJYEqBUGnN/3f+fsHSGV2Boyb2yJxaAzueDhuRRO4j4Mbl9VbJ1yjYrqfJwvqOU3mzmGRLNsrTpIRhPZKJOvzSMo3EuOvZ/8/xqtLrBsxFUbj7hfUYrEMnfYAVYUxpJe8c9bd+R4I92d9UTlHKqpqlY/q7Eegh5rvd2W0RKiCIDQxkazPocJsI6fMTIyfnr3llfQ9PV5tNVWh8krBIB3U4jH17vkSSl0Rfy19qt7rnXVqJvu6825a7ZWPUqmE24dG8tX2VGwOZ0uEKghCExLJ+hxO5huRSyWEeGk5YjTR21A9PW/vn18ik9noM/KOFo8pPLY/jrwxuLzXUJSVWm+dh8L9+a2glJOV5lrlV/cNxmx38PthsUhGENobkazPISnPSKSPjlSLFbPTRZyhehikoGwjppIQPANCWiWu0dNfw2FTsW39k/VejzNoGeVlYGF67bFrrVLOjQPC+EwskhGEdkck63M4mV9BjL+eI0YTERolbnIZADLPkyjMca0Wl0bvht4yE03gHk7uWV9vnYfC/VmeV0K6yVKr/JbBERzLLmdPWklLhCoIQhMRyfocTuZXLzM/XGGq2RL12PZVqLXldO11favGNnTao5hKgzmWVP/RYQM89Ax01/NBeu2x6wB3NVf0DOTTLadaIkxBEJpIo5J1YmIic+fOZd68eezZs4dNmzbxyCOPMG/ePJKTk5srxlbzvznWh41V9Dw9BJKSvBJThQ+RPYe0amxyuZxI3wfQ+Sazc9VH9dZ5KNyf73OKybXYapXfOSyKP4/lkV5UVW87QRDankYl68OHD6NSqVCr1URFRbF//34MBgNubm4EBwc3V4ytwmR1kFVqItpXx5G/PVk7NCdwlke3cnTV4kbOoDKnJ4WOL+qdyjfcU093vYZFGbWfruNC3Lkswosvtosl6ILQXjQqWffp04cXXniBW2+9lU8//ZTx48fzzDPPMGLECJYvX058fDwLFy4kMzOzueJtMSmF1asAZXoFFQ4ncQYNlWUlqN2z8Ta0/JS9s+k/6CUUmjLWL617DJhEIuGhCH++ziqiyFr7EN47h0Xy4+4Mys22Ou0EQWh7zpusFy1axOzZs5k9ezb33HMParUaNzc3nE4niYmJKBSKmp8HDhzI3LlzCQlpnVkSTSmlsJIgdzUnzFYClAp8lQoObvwOgN4jb2rl6M4I6tQDW+4w7J6rqSypu7PeeG83IjRKPs0sqFU+rps/3noVP4hFMoLQLpz3DKo5c+bUfL9t2zaeeOIJ5HI5999/P3v37uXJJ5/E5XIxb968Zg20pZ0qMBLlq+dIRRU9Ts+vLizfAbZAdJ7erRxdbSOv+D+2xo9l46qnuXxW7fFrqUTCg+H+PHEik3vD/DD8b0aLVMIdQyP4ZEsKtw+NQC4T75oFoS1r1IGBQ4cOZejQoTU/h4aGMm3atKaOqU1IKawkylfHYaOJ3qdfLkoMp5CUd2/lyOoyePkhKZqAzG81RZkpeIdE1ro+1c+D11Ny+DKrkLnh/jXl114Wylt/nmDt0Twu7xnY0mELgtAI4nHqLJILK4nw1nG4wkScQUN+xkk0hgKCAke3dmj1GnP1f3BYNWzbUPd0dZlEwtwwfz7KKKDqb0vNdSo5NwwI47OtYhqfILR1IlnXw+VycarAiJenmkKbnR56DUe3/4DdrqTnyGtbO7x6KTVatKYZqAN2k3ZkV53r1wR4opZKWJxTe1z71iERHMwsY1+6WCQjCG2ZSNb1KKq0UmG2U6WS4iGXEapWUmE9hKUsELlS2drhndXwGU9gMfpy4OArda4ppVLmhPnxYXo+VueZp+tgDw2TewTwmThJRhDaNJGs63GqoBKlXEq21EkPvQaJRILEkIHM0jbmV5+NXC7HV3EruoCjHN3ya53rNwV6Y3W6WJpb+yn6zmGRrDmSS1apqaVCFQShkUSyrkdKoZEIby1HK830MGgoy89GrS/A36ftzK8+m0FX/IvKogiSst+rc00jkzI71JeF6XnYnWc2cuoT5kmvEHe+2p7agpEKgtAYIlnX41RBJVE+1cvM4/Qajmxfhsslpcewq1s7tAaJDrwfnU8Ku37/rM6124J9KLE5WFlQWqv8zmFRfB+fjtFir9NGEITWJ5J1PU4VVhLkpSHTbKO7QUNx+R7M5f5oDO6tHVqD9Bg+jcq8WHLNX2C3106+BrmMO0N8eDctD+fftkmd2N0fN42CpXvEIhlBaItEsq5HWlElSr0ChURCtEaNS5eKpDKitcNqlJ495qE25LNtxVt1rt0V4kuG2crawrKaMrlMyu1DI/hiWyoOp9jrWhDaGpGs/8HlcpFeXIVZIyNGq8JeVYHaLQ9PQ9/WDq1RInsOwZzbhwrlsjqbPHkp5NwS5M27afm1DiGY2T+UIqOFP4/VPXBXEITWJZL1PxRUWDDbnBTJXHTTazi67WekUgfdB7fN+dXnMmD4SyjUFWxY9nyda3NC/UioNLG5xFhT5qZWMLN/KJ+LaXyC0OaIZP0P6cVVKGVS0lwOuunU5OVtx1Thc9FHeDksNjI2HODAR6vZ+96vJCzeQFlyVhNFXb+AiC7Ycodgc1+NqaKs1jV/lYLrA7xYkJZbq/z2IZHsSSvmcGbt+oIgtK5G7Q3SEaQXVxHsqSHRZOZBfQBG1Skwhl5wf5bicnYsWE1SlhqLXIfGXoUMBxaJBNvm47jbNxPbx42428ai0Kmb8E6qjZjyCtt2j2fDiqeYMuuDWtfuC/NjSHwCu0qNDPDQAxDmrWVCbACfbT3Fguv7NHk8giBcGJGs/yGtqAp/DzUJdicxagXH3HNQlA6+oL5Sft/F+uVZSJHRp7eM2Bv6o/GpnlHidDop2HuSoyvy2LPfwYF9vzF4rBfdbmzavUfcfAKhcCxS33WU5GbW+hdCmEbFDH9PFqTlsfh0sga4c3gkN/x3J/MmdyPAvel/gQiC0HhiGOQfMoqr0BiUuMtlmI/tQKE0Ed19SqP7OfzZWlavKCXU28SshVfQb+4VNYkaQCqV4t+/C2NeuYFb3xpDRICNDRttrJz7DZbi8qa8JUZN/w8Ou5Ktfzxd59oD4f5sLK7gUMWZI74uC/ckNsiNr3akNmkcgiBcOJGs/yG9uAqnRkY3nZq0k+uwmnVExDVu5eLRr9axJV5K/1gzE+bfiFx77qdTlbueMa9cz4w7QimpUvH9v9dSsO/kxdxGLRq9G2rjFSgD4sk+eaTWtU5aNZf7evBu2pkZIBKJhDuHRbI4Pp0qq1gkIwhtgUjW/5BWXIVRKaWrXkOVMxFreeP2ec7ceJDNW+30jTbS/6ErG9U2YFA3rn97Ch5qMz9/mEjq6t2Nan8uI2c8i83kzp74F+tcezDcj9UFZZyoNNeUTYkLRKuU8eNusUhGENoCkaz/xmR1UFBhIV/uoqtOjcyQhcIW1eD2luJy/vzmJGG6QgY9Mf2CYlC567ny3RuJ8qlg9U9FnPxp6wX1809ypRJ3x3VoAg6QvG9zrWs9DFrGeLvx3t+erhUyKXcPj+K/m09htTv/2Z0gCC1MJOu/ySipHrfNkDgIshpR64vw9R3Y4PZ/vbwSCS7GvTjtouKQymWMe+1GugeXs261kaSft11Uf/8z+MoHMJUFcuT4/DrXHgz35+f8EtJMlpqy6weEYrY7+eVA804xFATh/ESy/pv0oio8dUrMUgm2w3/gdErpMbRhT8gZ6w+QWunP6OsiUbnrz9+gAUa8MJPY4DL+/L2CUyt3XHR/crmcIP2d6PwSObRxea1r/d11DHTX8356fk2ZVinnjqERLNqULJagC0IrE8n6b9KKq/ByU+Eml+Isjcdi9G3Q5k1Op5MtixMIVeURPuGyJo1p5AvX0dW/lD9XFpO9/ehF93fZxFupLIwiJf/DOtceifBnSU4xGeYzy9NnDY4gv9zCH0dz69QXBKHliGT9NxnFVaj1Sjpp1TjVqbgqG7Zq8dB/11IucWfkQ2OaJa6RL80kWFfC75+doOT4xb/wiwl9AJ13GjtX/bdW+TBPA5e5a3k39czYtbtGwc2DwvlgY1KtfUQEQWhZIln/TWaJCadGRrRaicotF7089rxtHDY7+3dXEhtsxC0qqFnikkqlTHr9Wtzklfw6f/tFz8OOHXIFlbndKbB+VWcL1X9HBLIkt6jW2PWdwyI5mWdk88nCi/pcQRAunEjWf5NVaqJSKcGzNAuF0kx0z/Mvhjn65TqsEg2X3Tu+WWOTq1VMfeVKXEj47emVOJ0XN0OjV88nURkK2PbzG7XKh3jqGeSurzXv2teg4rr+oXywIemiPlMQhAsnkvXfZJeaKJS50OUdwmrREh7b/5z1nU4nB3aWEeNfjtbPs9nj0/i4cfkD/SiwebDlpaUX1VdE3CDMuX2pUP1UZwvVf0cG8GNuca2n63+NiGJfWgm7U4sv6nMFQbgwIlmfZrTYKTPZKJGDh+UItgq/87Y5vmQTlVJ3+s8Z1wIRVvPpFc3oie4czfbi2LfrL6qvQcNfQqEysmHpc7XKB3roGeKh552/jV2HeGq5qncwH4qna0FoFSJZn5ZVUn2yt0wjw1dxDIk5+LxtDm/KItxQiCHEt7nDq6XztcPpFVHO5o1mCvZfePL0i+iMLW8INo/VVJbVPvH835GBLM0rJqXqzNP1nFHRbDpRwJEssX2qILQ0kaxPyy41oVXLCder0RryMGi6nrN+4aFTFBBA76tbZxvRwfOm468sZs37e7AaTRfcz4gpLyOROti0svYmT/3ddYzwNPD23/a77uSnZ0pcIO/+1XT7lgiC0DAiWZ+WWWpCq1cQZKtEobAQ2e3cQxsHFu/E05FP0NDuLRRhbVKplIkvXI4NBeueW37+BmdxZgvVTRTnpNe69u+IAH7KKyG56syeIQ+OjeGvhDzxdC0ILUwk69OySkxINHLcytKwWTUEdz37mYu2SjOnCg106+fRcgHWQ+vnyfibo0k1+nHokzUX3M//tlDdtu7ZWuV93XWM9DTUGruO8Tdwec8gFqw7ccGfJwhC44lkfVp2qQmrSoqH9RTWCl/k8rOfy5C4ZBMgofuspj0o4EKEju5Nv86VbN/lJH/vhSVQjd4NdcVUVP4762yh+u/IQH7KK6m1I9+DYzuxPjGfQ5mlFxO6IAiNIJL1aVmlJioUEnylyXCel4vHdxcQ4laKUq9poejOrf8jV+GvLGLth/uw/23IojFGXv0MVpMHe+JfqFXex03LRB93Xk/JqSnr5Gdgaq8gFqwTY9eC0FJEsj4ts8SEWSklSH0CvbLzWetVpOeT7/QndnyXFozu3KRSKROfuxwrKja+9NMF9SFXKvFwXo8m4CBJezbWuvZEVACrC8rYV15ZU/bA2Bg2Hs/nQEbpRUQuCEJDiWQN2BxOCirMSDUyApSZBEec/czFoz9sQ+0oJ2xivxaM8Py0/l6Mnh7IiWLfC95Sddj0hzGVBnM06bVa5V11Gq4N8OKV5Jya/UGiffVc1TtYjF0LQgsRyRrILTPjdIGXygYOCZG9h521bvJxM5FBdqTStvdHF3XFILr6FrJxVQHGzIIL6iPc5350vkns+v3TWuWPRQawu6ySzSXGmrK5Yzqx5WQh+9JL/tmNIAhNrO1lnFaQVWpCLpfg4yrBavJAqap/LLrw0ClK5f70mH72mSKtbcSzM1BLTPzxytoL2j+k16hrqMztTp71s1qbPIWqldwW7MMrp7Jxnn66jvLVc1XvIN4VY9eC0OxEsqZ62p5Kq8DXkYujyvus9RJX7sNgK8C3b0wLRtc4crWKiff1J9/uzf73f7ugPvr1ewGltoSNS5+vVf5AuD/JVRZWFZyZYz13TAxbkwrFniGC0MxEsqZ62p5EI8dXkonUevY9QdJSbYSHtmBgF8i3Tyf6xznYfVh+Qaekh3Ttgy13KFb3X6koPnNyjI9SzpxQP147lYPt9MkxkT46Zl4WyuurE8V+14LQjESypnoYxKKSEqhIQauKrLdOyfEMSuX+dJnSq4WjuzB97p+Cv6KItR/sxW62nL/BP4yeOh+QsGnVvFrl94T6Umq380PumSfph8bFcCS7jL8S8hEEoXmIZA2kF1dRpZQQrEjDP6h3vXUSV+xGZysiYMC59wxpK6RSKROemYQZFZv/0/jpfDpPb5RlU1EGbCMjYV9NuV4u4+HwAN5MyaXKUT0m7u+m5vahkcxfmyjOahSEZiKSNZBeasKlluPjzCe6d/2rElOTzIQFOFo4soujC/Jh1BV+JBb4kPJbfKPbj7r2BSyV3uzb92Kt8luCvVFKJXycceZJ+p4R0eSWmVmxX5yELgjNoVHJuri4mMcff5ynnnqKlStXkpCQwH333cejjz5KdnZ2c8XYrFwuF3llZvQqGxKTpt4DcstTcyiW+tFl4vmP+WprOk0fSoxnARt+yqIqv3FT7ORyOQHqu9AFHOXg+h9rylVSKc9GB7EwPZ88iw0Ad62Ce0d34u0/T2Cxt69faoLQHjQqWa9cuRKNRoPL5SI2Npbly5czf/58HnjgAZYuXUp8fDwLFy4kMzOzueJtcsWVVmx2J17ycuxVXvXWSfxpFxp7GYHDerRwdE1j1HMzkGNj3X8aPzuk/+Q7qCyIIa3k/VpT+a7wdaeHXlNrGfptQyJwOF18uzO9vq4EQbgIjUrWaWlpTJo0iXnz5rFo0SKMRiM6nQ5/f38KCwsZOHAgc+fOJSSkYaeCtwVZpSYkEghQ5iI5y0yQlEQjob6WNrkQpiEUOjUT7oojy+LLoU/XNrp9XNdnULvlsWnpSzVlEomEFzoFsSSnmKOn99NWK2Q8NC6GDzYkUWG2NVn8giA0IFkvWrSI2bNnM3v2bMxmM3q9HrVajVQqRalUYjKZyMnJITAwsCXibXJZJSYUajkB8gw0srA6142ZBRRJ/Og85uz7hbQHAYNj6R1dyY6ddkoSG/fkG9V7KNacYVjdV1CWf2a4q6+bjmn+njx/Mqtm2t41/ULw1Cr4aFNyk8YvCB3d2fcBPW3OnDk132dkZPDqq6+i1Wq55ZZbUCqVPPnkkygUCubNm3eOXtqurFITTrWUIHkaPn6T6lw//lM8SruN0DFjWiG6pjXw0avIuHcJa9/awsxF1yOVyxrcdvRVb7Jxyxg2rX2MK2ctril/KiqQYfEJ/FlUzgQfd+QyKU9f3o17vt3HDQPCCPHUNsetCEKH06h/14eGhvLhhx/y5ptv0rNnT7p27cqCBQt444038PY++8q/tiyjxIRFJcOPPKJ7j6pzPeVoKSGeVY1KbG2VVC5jwr9HUe5yY8drPzeqrc7dEzfLTWgCd3Ns++815SFqJbND/XgpObtmoczoLn4MjPTitdWJTRq/IHRk7XMQtgklF1fi0sjwNBurj7j6G1NhGfkuPzqPiGql6JqeR0wwQ4apOZjuRtaWw41qO/zqx6gqDicpe36tl41zw/woszv4MqsQqB7PfubyWFYfyWVvmliGLghNocMn64wSE3KVC3WVos6148u2o3CYCJ/cvxUiaz49bhtPmCafdV8mYP3bHtUN0T3qGdTu2Wxe/mpNmV4u45moIOan5FBgrX6x2CXAwPX9Q3np12M4xUIZQbhoHT5Z55eZcVNWIjH71rl26mARwW4VyBTnHdpvd8Y/fyUOZKx/aUWj2nW6bBSW3MGYDctq7RtybYAnXXUaXk4+M5XvkfGdOVVQyS8HxUIZQbhYHTpZV1ntmMx2fDUFKCW1d2iylFSQZ/chZmh4K0XXvFReboydGc6pcj+O/7C5UW3HXPE2uCRsXPVITZlUIuH/OgezLK+YPWXVT+veehVzx3bi9dXHqbLaz9adIAgN0KGTdXZp9fzgUG0aXl7dal078fNOZC47kVcMaI3QWkT4xMuIDShm8x8lVDTisAKdpzc60w2og+I5smVlTXmcQcusIB+ePJGJ4/RUvluHRKBSSPl406kmj18QOpIOnawzS0xI5BKCFdlExI2sde3U3jwCtaXI1apWiq5lDH96BlpJVaMPKxh5zRNUFUaRUjAfu9VaU/5EZABZFivfZBcBoJLLeObyWBZtSiatqHHj44IgnNGhk3X1HGsZXrYS/ELPHChgqzSTY/Wi06Bzn3Jen2JzMd8lfMcjGx9h0vJJDFk8hAHfDWDKT1OY/edsPj74MUeLjraZvZ9lKgUT5w6gwO7FvoWrGtW2b69XUeoLWffj4zVlngo5T0cF8dqpHIpOD32Mj/VneCcfXljZdu5bENqbS+/NWSOcLKzEqZHjVVV7v+dTq+IBCZ2uOvvBuf9Uai5l0cFFLD2xlGB9MMOChzEubByeak9kEhmFpkKSy5LZnr2dDw9+SLhbONd3uZ4ZMTNQy9VNfGeN49Mrmv5xCew+rCB838kGn4QT2q0vR/dOQuK7loyEfYR2qz7u7IZAL77JLuLlU9m807V6VegLV3Zn3Nub+ONYHhO7BzTbvQjCpapDJ+uk4krQSPCorD1tL2V3Jr5yFwpdw5Lo9qztPL3taXw1vrw/9n0GBw5GIpGctX6hqZBVyav47MhnfHL4E+7ocQfXd70ehbTu9MGW0uf+KaTdt5i1H5Zy/fthDR7+GTdzPqtX7WbfwacI7bYGqH7ZOL9LCFP2nuAaf0+GehoI9dJy/+hOvLjyKMNjfNAqO/RfPUFotA4/DKJTmVG7zjzpOZ1OskvUhHVxa1AfSxKXcN9f9zGz80wWX76YIUFDzpmoAXw0PtzW4zZWz1jNnF5z+OLIF1y78lp25ey6qPu5GFKplAlPT8Ts0rLl5YavbpQrlUT6PoHWJ5lNy+bXlPc0aLk7xJfHj2diPn1Iwb9GRqFSyFi4PqnJ4xeES12HTtYFZWY8NSW4u505/aVg7wlMCk9iLu933vY/Hv+R+bvn8+bIN5nTew5yaeOeFpUyJTO7zOTX6b8yLHgYs/+czQvbX6DKVtXoe2kK+hBfRkzyIiHfm9TVuxvcrsfwKzFnD6JS+x3FOWc2iXosMgCry8W7aXlA9cvGF6/szqdbTpGUX9Hk8QvCpazDJmu7w4mx0oa/Jp+wLkNrypP+PIqbLR+PmHO/XFyTsoZX41/l9RGvMzZ87EXFolPoeKz/Yyy+fDH78/czc9VMjhQeuag+L1Tna4cT7Z7P+mXpmArLzt/gtDFXvYfTrmDL+gdqynQyGfM7h/B+ej4Jp7dRHdHZlwmxATyz4oh42SgIjdBhk3VehQVcEKjII6BTXE15RoqZ4PO8/0ouTea57c/x1KCnGB8+vsli6ubdjSVXLGFw4GBmrZ7FV0e/apWENvr5Gcixs+b5lQ2ezqdz9yRI/RBa/yNs+entM315u3GlnwePHc+omXv97BWxHM0u54fdGc0SvyBcijpsss4qMYEUgpwlyOXVwxeWkgqKJb5EDo0+a7sqWxWPbnyUcWHjuCbmmiaPSyPX8PSgp3l75Nt8dPAjntjyBCa7qck/51yUeg2T7u1DntWbPe+sPH+D0/pOuBlTziCM6i8pykqtKX+xUzCnqiw1Gz0FuKt5eko3Xvktgdwyc1OHLwiXpA6brJOLKnGqZfiYzpwXmPrHfqQuO2Fje5+13cL9C3G4HDwz6Jnzvki8GKPDRrP48sUkFicy6/dZZBlbdn8Nv36dGXSZlL3HNWRuPNjgduOnfYDDrmLrxgdrynyUcl6MCeb/TuWQZqqeJnld/1DiQtx5ZsVhMRwiCA3QYZP1sYIKXGo5AdYzU9QyDmThLS1Gpqp/Cl1CUQLfJ37Pi0NeRKto/k31I90jWTxlMYH6QG767SaOFh5t9s/8u96zJxGuK+CPb5IaPH6tMbgTpHkIrf9Rtix/s6b8Wn9PhnjoeSgxHafLhUQi4bUZPdmWVMTKg+3zsGVBaEkdNlknF1Wi1Njx1kbUlOUWSAgKq39utdPl5OWdL3NF1BX09e/bQlGCXqlnwagFTIqcxO1rb2dTxqYW+2yAcS9Ob/T4dd/xN2HOHoxR+xX5GSeB6j2u3+oSSqLRzGeZ1cMhYd5aHpvYhRd/PUaR0XKuLgWhw+uwyTq9oBSD2khw1CAAqvJLKJP5EDakU731fzv1GynlKTzc7+GWDBMAmVTGvAHzmNtnLg9teIgliUta7LOVbroLGr8eN/19HFYNO7bNrTmowE+l4LUuIbxyKpukquqx6tuGRBDhreWFX481S/yCcKnosMm6qMKKp7qM8LjqJeWpf+xH7rAQNKxHnbo2p41FBxdxe/fb8da03vFls2Jn8cbIN3hzz5u8s/edFhvr/fv4dcaGAw1qozG4E+n1LBrvU/z1w1M15Vf5eTLRx525x9KxO13IpBLmX9OTtUdzWX045xw9CkLH1iGTtcvlwmwGH1lZzUyQjIM5+ChK6j1o4NfkXzFajdzU7aaWDrWOceHj+HTCpyw9sZQXd7yIw+k4f6Mm8L/x6z+/TaYyu7BBbboPn4ozbwoS3184Hv9nTfmrnUPItFj5IL368IJOfgYen9iFJ38+TF65mB0iCPXpkMm6pMqGywlBkvKasrxiOUERdV8a2hw2Pj74MXf0uKNFXio2RG+/3nw56Us2ZW7iiS1PYHPYWuRzx798DSqJld9eWIvD1rDDBMZd/yamkjBO5DyHyVj95+2lkPNWl1DeTM3lUEX1as07hkbSLcCNfy87JGaHCEI9OmSyTi2uxAVEuqpfalVkFlCh8CV8eJc6ddemraXKXsV1Xa9r4SjPrbNnZ76a9BVHCo8wd8PcFpmLrdCpufyJ4ZQ59Gx8bmmD2sjlcgb2fxe5ysifP8+pKZ/g484NgV7cczQNo92BVCrhrZm92J9ewjc705rrFgSh3eqQyfpwQQWopETLPQBI/eMACruRgEG1T4txuVx8e+xbru18LRq5phUiPbcwtzC+mvQVucZcZv85m3Jr+fkbXSSPmBDGTvfneJE3hz//8/wNgICoWNwsd6MJjGf7Lx/UlL/YKRilVMK8E5kABHloeHlaD175LYGkfGOzxC8I7VWHTNZ7kjORqCE6pHqZeXZCPj6KcqTS2n8cBwsOcrz4ONd1aVtP1X/nr/Pny0lfYnPYuHPtnRSaGjaefDGirhhE306VbNthJ3dHw2ZxDJ32AKacAZQpF5GRsA8AjUzKR93D+a2glKW5xQBc1TuYCd0DeOiH/VjsLTMeLwjtQYdM1ifyCtForHTqMwqAghIZ/qF1n5y/OfYNEyIm4K/zb9kAG8lD7cGnEz/FTenG7WtuJ8fY/LMqBjx2FUHqIlZ/eoyqvOIGtZl0zafYqjzZf+xBrKbqsequOg3/iQnhiROZJJ+ezvfytB6UmWy8+ntis8UvCO1Nh0zWBVVODMpKlBotljIj5VJvQvrVPsW80FTIX+l/cWO3G1spysbRKXR8OO5DItwiuGXNLaSVN++4r1QqZdIr1QtmVj27Gofl/C85lRotfWLfRaEtYc2yu2rKbwr0YqyXG/ccTcPidOKuUfD+DX35Lj6NNUfEdD5BgA6arI0WGd6K6sNbszYdRoKzzvzqX5N/JcItgp4+PVsjxAuikql4e/Tb9PHrw62rb+V48fFm/Tylm44rHh9KuUPHn0/92KA2od364mm/D03gLjYu/T+genXjm11CKLU7eO5k9R4ovUI9mDe5G/9edoiM4tbZ31sQ2pIOl6xdLhdWs5RgWXUCyDqQibuzqNYRXi6Xi5+TfmZ6zPRm3aypOSikCl4d9iqjw0Zz+9rbOVjQ8E2YLoRnl1Am3hRBSrk3O+c37ISZQVPnYMkZg8XtG07uWQ+Au0LOZz0i+CG3mCU51Sej3zE0gkFR3ty/eB9We8NPXheES1GHS9ZZ5WZwQBdl9c952Rb8fGrXOVR4iIzyDC6PurzlA2wCMqmM5wY9xzUx13D3H3cTnxPfrJ8XOqY3w4fK2JekJ3HJxga1mXTDh5jLgjmeNY+y/OqNnHoatLzeOZR5JzI5VFGFRCLhjWt6Umi08spvYjm60LF1uGS9MTEFlwSGBIXgdDoptrsTGFv7BeLPJ39mRMgIfDQ+Z+ml7ZNIJDzc72HuiruLe9fdy8aMjc36eT1uG0/P0FI2/lVF9vbz7w4ol8sZNvRTJFIHGzfcht1qBeC6QC+uD/Tm9sMpFFnteGiVLLq5L9/vzmDpHnFYgdBxdbhkve14ElKNhN79xlC4PwmbXEfYyO41120OG3+k/cHU6KlN9pmmygpy00+Sm36SkoIcXA3cve5iSSQS/tXzXzxy2SM8vPFhfjv1W7N+3pCnryZEW8zqz45Tnnr+F4PewRHEBMxH5ZHJ6h/urCl/qVMQQSol9xxLxe500TPEg1enx/H0iiMczChtxjsQhLarcSe8XgJOlZlQadTo3D1J3L4Nrc2MIfzMOV47cnbgcDoYFjzsgj+jIDuV5A1focncSpgpEU/K+fvEQLNLQY4smAKPOAgdSNTgq/AJCLuIuzq3m7rdhE6h45mtz1Bpq2Rml5nN8jlSqZRJr17DsgeX88t/NnHN65PR+Lifs03n/mMpWDGHqsD3+Ov75xh7w0sopVI+6RHBhD3HeeVUNs93CubqfiEczirjnm/3svL+YfgaVOfsVxAuNR3uybrAKsegql5mnptcire29sZBf6T+wajQUajl9e9rfS5pCXvZ9+ZUvD7uTUDyMqo8u5I65FVSZq6j8J4jFN5zhOxb40me+DX5XW9G4rAScmghXot6kvDKEOJ/eI2KsobNWW6saZ2mMX/kfF7b9RqfH/m8WT4DQK5Vc+UrU3AhYeVTq7BVnn9jpqHT5mLPmYzDZwn7/vwOgACVgs96RPJ5ViGLs6tfOD59eTfCvLTcJ144Ch1Qh3uyNloURGmqp+0VVijp1v3ME5rNYWN9+npeHvZyo/o0myo58OUj9M/9gWLdEE5NW0mnXsOIkNb/uzAosiswBQCX00nKsd2Uxv9IRMKnyI69TbzPZPzHzSWi22UXdpNnMT58PNoxWh7a8BBGq5G5feY2y2wXrZ8n054ezrJXdvDb40u58t0bkcpl52wzedZ7/PLtDPK8XiflUCSRPYfQ313Hgq5hPJCQTphGyTBPAx/c1Jer3t/G0z8fZv41PdvdbB1BuFAd6sna5XJhNckI10BVXjFGhQ8hA88cNrAjZwdOnAwNHtrgPjOSDpP7xiBC8zdwYsoP9Hn8d2L6jEBylkT9TxKplKgeAxl851v4PZPIiRHvoanMInTJOPa9MZVTR5p2JsfQ4KF8NP4jvk/8ntd2vYbT1TxPqG5RQUy9vxf5Fnf+mLekQafMTJj2JbZKb46mPlBzwsx0f08eDPfnziOpJFWZ8dGr+Py2/qw5ksuHG5ObJXZBaIs6VLLeceAg2GBEaCAZGw8js5vxH3Bmp721qWsZFToKlaxh46GJe/5C/+0UirRReDyyi24DJ15UfDK5nN5jr6fnvHWkXrMGgPClE9n35lQyk45cVN9/18+/H59N/IzVKat5dtuz2J0N2+60sXz7dGLyjWGklnmy5aXz79Kn0bsxfPg3uJxy4nffTmVJ9fDHoxH+jPV24+ZDpyiy2ukSYODDm/uyYN0JcX6j0GF0qGT965FjuGQSpg8dTvbhHLykZw4bsDqsbEjfwMTwhiXcxPg/CP/1eo4HTKXPwz+hM3g0aazRcYPo++9fSZ+5FqnTht83I9i5aDZlxQVN0n+sdyxfTvqSndk7+femf2N1WJuk338KHdObcVPcOZbtwbZXlp23vmdACH1jP0aqrGTd2huxW61IJBLe7hKKv1LBzYdOUWl3MDzGl5eu6sFjSw+yJ7V5xvkFoS3pUMn6SLkdhd6JVqMmP9+BX8CZIfv4nHgcLgdDgoect5+Uo/EErb6NA8HXM+ieD5HKzj0eezEiuw+k9+NrODHuC/wKduJ6rzfxP7yOw37xT8NRHlF8Nfkrjpccb9YtVjtNH8roMSoOprmx843zr3IM7tyLTr7VU/p+//FG7HY7apmUr+IiMTmd3HkkFavTyQ0DwrhjaCR3fb2Hk3kVzRK7ILQVHSpZ51g0uGvMOCw2SlyeBPcMqrm2KXMTQ4OHnncIpCgvE93S60n0HM2gu95t7pBr9Bh+FeFP7eVE3GN0TlhI8muDSTq49aL7DTGE8M3kbzDbzdy6+tZm27Gv6/WjGDlMxr6TOna/88t563cZOB5f6TzU/odZvbh6DraHQs6SXtEkmcw8mJCO0+Xi8YldGNvVn1mf7SKzROwhIly6GpWsi4uLefzxx3nqqadYuXIlmzZt4pFHHmHevHkkJ7f9lz1lJjVBKhPZ24/ikCoJGVW9SZPL5WJT5iZGhow8Z3uH3U7O5zdRpAikz5zPG/wSsanI5HIGXP0w3LebUn0nIn6ays4P7rro6X7eGm8+m/gZwfpgbv79ZhKLm2dr0u63jGX4QBe7E7Tse//8C3T6TZiFrvJ+VIE7WPX13UD1lL4fekWzqaSCZ09mIZHA61fHERfizqzPdlFotDRL7ILQ2hqVbVauXIlGo8HlchEbG8v+/fsxGAy4ubkRHBzcXDE2icqqSmyVUrq7ycnalYLBXlSzYONEyQnyKvPOuxBm19dPEmBJxef2xSiUrbcow9M3kAEPfc+Jyd8TUBSP+Z2+7F/71UX1qVVoWTB6ASNDR3LbmtvYnr29iaKtLe7OiQzpa2PnISV73l153vpDp81FU/4vVEEb+f2bewGI1qpZ3DOaH3OL+U9yDjKphIU39MHfTcWtn++i3NwyZ1IKQktqVLJOS0tj0qRJzJs3j0WLFjF+/HieeeYZRowYwfLly4mPj2fhwoVkZmY2V7wXbMWWbeCEK+O6kZtuxM/jzJjvpsxN9PTtibfG+6ztkw5u47K0z8gZ/Q6+QREtEPH5xQ6aRPC8PSRF3kTs9kfZ9+aVFOZe+P4ZcqmcZwc9y11xd3HfX/exMvn8yfRC9L5nCsP6O9h1VM3O188/hj386sdQlNyOIvBPVn/zYHUfblq+7xXNV9mFvHoqB5Vcyie3XIZUIuH2L3ZjtDTPDBdBaC3nTdaLFi1i9uzZzJ49G7PZjF6vR61WI5VKSUxMRKFQ4ObmhtPpZODAgcydO5eQkJCWiL1RNmfkgkrCoB49KTQbCOxyJjFvytjEqNBRZ21rs1qQrLyf/V6TiBs5owWibTiFUsXgW18h76Z1aCwFyD8axJ6VH13w/iMSiYS74u7ipSEv8fz25/ngwAfNMhe7592TGDVczr5kHVv/c/5pfaOufQpp0U3IA39nzbePAHCZu47ve0bxaVYh81Ny0avkfHPnAExWB7d+vkskbOGSct5kPWfOHD7++GM+/vhj7r33XhYtWsTTTz/NrFmzkMlkPPnkkyxevJipU5tu46PmcNIkQ6OzUZqQjkXhRtiIWKD6RJjDhYcZETLirG33LHkZg6OULre811LhNlpY5950mbeVxC73Ebv3OQ69MYm8zAt/jzA1eiofj/uY7xO/57FNj1Fla/qXd7GzxjB2nIbD6QY2PHP+hTNjr3sBaeH1yAJ+rRkSGeChZ3HPKD7OLODN1Fw8tEq+u2sgJquD20TCFi4hjRoGCQ0N5cMPP+TNN9+kZ8+eTJs2jVdffZXXXnsNDw+PZgqxaRSYNXipTaRvOYbaVoZn1+qNk7ZkbiFQF0iMR0y97Qpz0+mZ/F/S+z+Fu2fb3jJVKpMx6IanKL1tMzKnBe0nQ9m17O0LfsoeEDiA76d8z6nSU9y6pnlminSZOZyJU905nufG2scW47CdO7mOvf4/NUMiq76+HYBBHnq+jYviw/QCXknOxkOr4Lu7BlJpdXD7F7uoEGPYwiWgw0zdq6xSEaa2kn2iGB91ZU35psxNjAwdedY9Jk79MI8MZRT9Jt9Z7/W2KCiyK92f2EBCz3l0PfIGR18fTXbKhc3wCHUL5dsp3+Kv9ef6367nQP6Bpg0WiLpyMFfcFExmmYEVDyzBWl55zvqjrn0KTcV9KAO3s/KbG7Db7Qzx1PNDryi+zi7iiROZuJ1O2FVWBzd+Ek+RmCUitHMdIlmnZWXgMMEAXzcKyxQEROqA6lWL27O3n3XKXvLhnfQtXo108mstPk3vYkmkUgZc/RDmu7djl2nw+HIEOxf/54IW0+iVet4d/S7TOk3jjrV38PPJhh3f1Rgho3ox4+FeVFhVLHtkJcbMc6/UHDb9Idytj6Hy389vP1yL1WJigIeen/t0YnVhGXOOpaHXyPn+X4PQKGVc+/EOsktNTR63ILSU9pWBLtCPO+JBAlO7dKNC7l2zedOe3D0A9A/oX2+78tUvctBtJJ37nnv+dVvmFxxJr8d+59iAV+h84r8kvTaElGO7G92PTCrj4X4P8+KQF3kl/hVe2P4CFkfTPq1694jgmhdHAbDs+Y0UHjp1zvoDL78bP9kLKL1OsvqXKyjLzyZWr+HXvjEcKK/i1sMpyBRSvr5jABHeOq5ZtJ3kAmOTxiwILaVDJOs9hZXItOA4nIvMYSVgUDegeghkcOBglDJlnTbJh7bTs3IH3lOeaelwm5xEKuWyy+9Gct8uKrRhBP8wkR2fPYbF3PiXhlOjp/LdlO/YnbubWb/PIrOiaadp6kN8uebtK3FTWvjpvaMkrTj3fO8+Y6+nc8Ai5JoyNm+fQUbCPiI0Klb2jSHbYmPG/iTKnE4+ntWP/pFeXLNoO7vFXiJCO9QhknW6RYVeayHrUHbN5k0ul4vNmZvPOgukfO0rHDSMaPI9pVuTp28glz2yjIRRHxOZsYKc+QNI3PNXo/vp4tWFJVcsIVAXyMxVM5v8fEelm45pC28gJqCSP343suutFeesH91nOP17f4/LoeTwqds5smUlASoFK/t0wl0uY8reE5wwWXhnZm9uGBDGTZ/Es2J/VpPGLAjNrUMk6xKTBj+1ifx8J36B1Zs3pZSnkGnMZHjI8Dr1Tx2Jp6dxG56Tn27pUFtEr9HXon9kN3leA+j06zXs/PBuKitKG9WHQWlgwegF/CvuXzy84WHe3vs2NkfTzbqQymWMfvl6hg90sTdRze8Pf4vdfPZhF7/QGMZP+BVbeShZVU+wadl83BVyvusZzVhvN67cd5J1xeU8PqkrL0/vwb+XHWTBuhO4XK4mi1kQmtMln6xtNhvmSjmdNQ5K8CakdyhQPWWvm1c3/LR+ddqUrnmZg4bhRHYf2NLhthi9mycD7/+cpMt/JLBwO+VvXcbhTT81qg+JRMJtPW7j04mfsjplNTevvpnUstQmjTPuzolMvSmQnHIdP96/nNKTZx920RjcufzaFdjyhmD1+C+rvr4didPB651DeDwygDuOpPBRej7X9gvhqzsG8PnWFB7+4QBmm6NJYxaE5nDJJ+st+w+ADfrLlLikMkJHxQGcdQgkJ+04vSq2YBj77xaOtHV0HTCegMd3kxZyJV3W38Xud65t9JL1fv79WDZ1GaGGUGaumsnyE8ub9Ik1ZFQvZj43GJnUxY+v7+P4j1vOWlcul3PFLZ+hLrsHhf9Ofls+mZLcDGaH+vF5j0jeSs3lnmNp9Ar35Kd7h3Iws4yrF20nvUjs2Ce0bZd8sv498QQumYTIdAlu9iJUngYqrBXsy9tXb7JOXfM+SYouxPQ5+4rGS41KrWXQXW+TNXM1+qpMlB8NIH7Jq9htDT+QwF3lzhsj3uDpgU8zf/d8Ht30KKXm0iaL0RAewDUfXEfnYBN/rTOz4Zkl51xAM/zqx4j0eh+ZppQde6ZzZMtKJvi4s/ayLpyoNDNp7wkcOjm/3D+UYA8NVyzcwobE/CaLVxCa2iWfrBMqnCj1Doqzbfh6Vf9zd0f2DtxUbvTw6VGrrrnKSLecn6jodUdrhNrqIrsPrF6y3uspYhI/JO21gSTuXtfg9hKJhKs6XcXSqUvJq8xj2i/T+Cut8S8wz0amkDPqxeuYMFlLUo6Gpff+QEli+lnrd+4/luGDfsFu9Cfb/Bhrvn2YMKWM3/p1ppdBy+S9J1hfZuTjWf24d3Qn7v56D2//cRyHU4xjC23PJZ+scywaPDQmiqwGgrr6AtVT9oYFD0MqqX37h9d8hh05PSfc2hqhtglSmYwB0+cie2AfhZ696bTqWnYtuIHi/IbPnghzC+OryV9xS/dbeHzz4zy26TGKzU03Xa7T9KFc93R/pBL48c3D7F/0+1n3FXH3C+Lya1fiyr8Kqf/v/LbscozZySzsFsYL0UE8kJDOI8czuHloBF/fMYDv4tO58ZOdZIkFNEIbc8kn63KTmiCFCavCQNio7jhdTrZmba0zC8TldOJ19EtOhl6LUqVupWjbDncvXwbe/wUp01fiYUxC9mF/dn7/f9isDVsII5fKuaPHHSy9cim5lblMWzGN1Smrm2ws2y0qiGs+uoE+3Wzs3Cfll/sXn3XVo1wuZ+JNbxCieweZppQ9h68h/rePuSXYh9WXdWZfeRXj9hxH5ath9UPDUStkTFqwWRzGK7Qpl3SyrjBWYKuUEGM3o7GV4B4dzNHCo5RbyhkSVPusxcTdfxJmTyNm8txWirZtiuk9nE5P7uR43L/pdPxjcl/tzf4/vm3w5lBR7lF8Nekr7u55N89te477/rqPjPIL33P776RSKQMencY1c6Kpssr4/vntHPnyz7PWjx0yhdGj1mAv6oJR8ya/fHstoeZS1vbrzHhvN67af5KvCkv49NbLeGxCF/699CAPLdkvDjMQ2oRLOlkv37wFiRO65YCPtvpt/x9pf9A/oD9uSrdadau2fMhBt1H4BIW3RqhtmlQmY8DVD6N+5ACZwZPouu1hjr02ssFnQMqkMmbFzuKnq35CKpEy7ZdpfHjgQ8x2c5PE59s3hus/uIYuYVa2bHeyfM63Z53ip3P35MpZP6I3PY7cI4mt8VPY/9tH/CcmhG97RvFtdhFT9p2kT5wfv84dxvE8IxPe3sy6Y3lNEqsgXKhLOllvzS5AopIgK/AiMMoNp8vJ2tS1TI6cXKteflYKvSo2ox9xbytF2j7o3TwZfNc7lN+9kypNIJE/XcHud64lN/1kg9qHGkJ5f+z7vDXqLVYmr2TaL9PYlLGpSWKTqRSMeP5arrknCptdwpL5h4h/82ec9vrnUA+64l8MH/Q79uIYKnVv88u3M4irKmLTgK70MmiZsvcE31eU8/09g7lxYBj3freP+xfvE2c8Cq3mkk7WySYFGp2VSoU3oYNiOFRwiAJTAWPCxtSut/o9UuRRdOk35iw9CX/nHxJN/4d/JGXGKrSmXLw+G0T8+3dQmJ3WoPajQkex4qoVTI2eyiMbH2H2n7M5Xny8SWLz7RvDzI9vYEAvFwcTFSyevZSU3+vfuMrNJ5ArZ/2Im2UeMrcMdh+Zyq4fn+a1ToH80CuatYXlTNx3grje/vz+4DByy8yMe3sTS/dk4BQzRoQWdkkn6wKzBi9VFXK7Cb/+XVidspqhQUNxV7nX1LGYq+icuZzSuNvb3Taora1Tr2HEztvE8bGf41F6BP3H/dj50b0Nmjmilqu5r/d9/DLtF9yV7sxcNZNntj5DbmXuRccllUrpe//l3PDCQLzc7Kz+pZRf7v+WkuP1j5UPmHIXY8f8haNgGC7fX1i9chT6g2v5q38XrvLz4JbDKbyUW8Drt/TlkfGdeenXY8xYtJ2DGaUXHasgNNQlnZ0qq5SEUom3rASXtHq8elLkpFp1Dq39Eiku4ibe3kpRtm8SqZS4EVfR+amdHB/5Pj4FO1F90JcdnzzYoKQdYghh/sj5fDflOzKNmUz9eSrv7XuPcmv5RcdmCPFlyjs3c9XNAZgsEpa8eZSNz/2AqbBu3xq9G5fP+oiuId/gtBoocMzjjyUzmGXNZdOArriA0buPk+6n5NeHh9PF38CMRdv599KDFFSIoRGh+V2yyfrA8QRcJoguseEXpGJv3l4qrBWMDh1dq5774S9IDJ6BWqNrpUgvDRKplF5jrifqqd2cGDIf/5yNaD7oTfwHdzZoTLuHTw++mPgFb4x8g/Xp65m0bBIfHviwSZJ28PA4Zn58A8MGy0jJkvHNvE1sf3U5VmPdudThsf256vrV6E2PIdXmkZB5A0eX38V7fkq+jItkTWEZU4+eosugQH68ZzDJBUZGv7mRd9edFOc9Cs1K4mqGbccWLlzI3LmtOwXu2cVL+PqIgUeLnFwx1ZdvvNdSZinj7VFv19Q5vmc90b9eTdHde/APiW7FaC89LqeTQxuXodjxLjHWBA54jMN30uMN2nLW4XTwZ9qffHTwI/Kr8rk59mZujr25zgyeC2E3W9j/0VoOHq5+8dirh5Q+cyYhV6vq1rXb2bT8Zcy6X5DJbTgLRjBoyvOsNMt4OzUXtVTKYxH+KPPMLPjzBBVmO/eO7sRNA8NQK2QXHavQ8Zwrd16yT9YHy6wodE7kLhX+w7qxLm0dkyJqD4FUbP6AQ4bhIlE3g+on7ZnEPr2N5ClLUFjLCFsyjoOvj+fQhmU4HWff6U4mlTEpchLLr1zOc4Of44/UP5i4bCJv7Xnrose05WoV/R+6klvenURsjJP9R6V8fd8qdr21os7Zj3K5nLHXvcCYUZtwFYxC4r2VXbvH4vvX06yN9mRWkDfPJmXzjrWC+2/qycPjO/PJ5lOMeXMj3+5ME7v5CU3qkn2y7vfOUiTAw0fthL8YyqMbH2XjdRvRyDVA9XQ9z//24+TkxcQOmnTuzoQmkXJsNwXr3iWuaC2FUh+yOs+i+5R7MLh7nbOd0+Xkr/S/+PLolxwrPMakyEnc2v1Wunp1veiYLMXl7PnoTxKSZbiQ0DXcSr97xqH186xTt7KshM0rX8DlvQGp1IE9fzCxo55iqV3D51mFeMhl/CvIB2tqBV9sTcEF3DUskpsGhaNXyS86VuHSd67ceckm606vrKKbPp8HstVsnHoUu9PO6yNer7m+478P4JO/nU5P7RKzQFpYWVEeCas/JCx5Me7Oco74TsFnxN1E9xxy3rYH8g/w5dEv2ZCxgf7+/bmu63WMCh2FQqq4qJhslWYOfvoHhw9ZsUi0RHmV0vemgfj0qvuvLlNFGZt+eRGn53pkCjPm/DjCOs9he0APPs6o3rnvjgBv9Hlmvt6aSmmVlVuHRDBrcDh+BrGVgXB2HS5ZF5WU0Hf+dqa6Z/KvwAhmK17g1eGvMip0FABVxjKsb8aSdNnzXHbFv1otzo7OYbdzaP0SZPu+oIdpL6fkURR1vo6uE+7E3dPnnG3TytP4PvF7ViavRCVTMSNmBlfHXE2QPujiYrLZOfb1eo7sLKRY6ocfucSNDqHzNcORymuPQ1stJraueAOj4g+07rlUFkbioZlBSp+r+W9WETkWK9N8PehU7mRVfCZJ+RVMiQvklsER9A3zQCKRXFSswqWnwyXrD1euZP52GfeaTPSdpeK5k6+ycebGmoNx43+cT8Sxj/B6KgGFsu6LJaHl5aafJGXdJ4Rn/IyXs4Qj7iNR9r2RbkOuOOf/I5PdxNrUtSw9vpTDhYcZHjKc6Z2mMyJkRL0HITdG9tYj7F92gPRKH1TOSmLCncTdMBiPmJA6dff98S0ZRd+j9T2B1eSGs+QyLH3u4xeXnnVF5Qxw0zICFUmJhfxxNI9ugQZuGRzBFT0D0SrFEIlQrcMl65v/+xXbc3x4Id3IkVv2opKr+M/Q/wBgs1ooeDWO9KjrGTTrpVaLUaif0+Hg2PZVmHd/TWzZFiwSFSe8x6Dvdx3dBk5EKjv7LIuEogSWnVjG6tTVAEyMmMgVUVfQx69Pne1wG6Mqr5gDX2wg6aSDCrkXvq48OvfzJvaG4Sjdak/5zDpxkP3xHyDx3INSXUFVYRQ29ZUc7nYFSwvKcbhggk6HJruKDQdzqbLYubxnINf0C6V/hKd42u7gOlyyHvruEsptSubnVvJ8n4UsGLWAIcHV46HxS98i5ugC1I8dQat3P09PQmuqMpaRsHkZ0qM/EWuMp0xi4JTfeDz6XUNMvzHI5PU/kVodVrZkbmHVqVVsytyEr8aXyZGTGR8+nljv2AtOiE6nk+zNhzn62xHSStxwIiNEV0zM0HCirxxQa/qf3W5nz+pPyDOuQuNzEqdDibEwlkyfmewN7MP6kgoiVUr622SUpJaz/XghAe5qru4bwuU9A+nkp7+gGIX2rcMl6y6vriRUW8qDmHnD/1vWz1yPXCqnoqwY0zv9OBVzG4Nuer7V4hMar7y0iOMbl6BM/Jlupn1USnQkuQ9BHjuFzkOuQmfwqLddmaWMP9P+ZHXKavbm7cVP68fYsLGMCRtDX7++yKQXNh/aXmXm+LJtnNiZQ67NB6nLTpC2lJjBIURfOQiF7syLxOKcdPZuWIRJsQuNZzo2q5bikn4k+F/LbrdIDlWaiVUqiShxkJtSxrGsMrr4G5gcF8DlcYHE+BsuKEah/elQybrcWEHc/21mokc2PtFH0Qb78MygZwDY9d7N+JYeIujxnajU2laJT7h4FWXFnNz+C47E1XQq247OZSJR0wdTxFgC+kwmLKZnvTN8SswlbMzYyPr09WzP3o5eqWdY8DCGBA1hcNBgvNTnnkJ4NpYyIyd/3kHynjxyLF5IXC78VcWEdfOi0xV9cYsIrKmbm3qcA1s/wqrZi9YjG5tVTVbZZSToJ3LYpyeHTDa6SOUElzooSi/neFY5nfz0TIj1Z0xXP3qHeiCXidlLl6oOlawX/rKCN3coeNSYxxcDF/LphE/p59+Pw5t+ouv6u0id/gsxvYefvyOhXbDbrJzYu57yAyvxz99GpDOVfLxIcx+AJHoUEQMuxycgrE67SlslW7O2sjVrK9uytlFoKiTWO5YhQUMYFjyMON+4C5oOaDWaSFqxg9S92eSU6zAr3HG35RMcCJFDowkZ3bNmuCQ39TiHt39FlXQfaq9UJBInmeU9OSgdy3GP3hyRaNDbXESVu7DnVZGSVY5GIWNEZ19Gd/FjRGdffA3iBfmlpEMl62s/+op9BT68kpfKl6N/ZfWM1dXDHwv6kxIyjUF3vX3+ToR2qzA3ndTdq3EmbyS8NB5/ikiThpLn3gvCBhEYN4qQqO61nrxdLhcnS0+yPWs7W7O3si9vH3KpnN6+venn349+/v2I841DJWtcYnQ6neTuTODU+gQy0ywUS/yQuux4SYoJDFESNjCS4JFxyNUqTBVl7F33BcWV25C6paLRF1Nm8eKgaRQJyoEc1UdRZIOwShduJTaKsisoqbDS2V/PoChvBkV5MzDSC2+9SN7tWYdK1v3eWYrLBVeXb8ZzWjfu7X0vu969EZ+yo4Q8ES/OV+xAXE4nGUmHyDn4F9LMeALLDxLiyqUId9K1PbAE9cet02DCYgeidzuzYrHKVsWhwkPszdvL3ry9HCo4hNPlJM4njt5+venh04M4nzj8tf6NellpKakgbd0BMvZnkpcPpdLqsW5PSTF+fjICYv0JGdEDQ4gvWScOkrD3Ryqdh1F4pKPUVJBq6cwR60CS5HEcV4dhrILgSifaMhvFeVUYq2x09tczMNKbPmEe9A71IMJbh1QqZpi0F+fKnZfcBM9So5bubvn8GrCNpdGPc3DDUvoUryFtxq8iUXcwEqmUsM69Cevcu6asMDed9APrsabswCv1d8JPfoBitZ10WRD5uq7Y/ePQR15Gt9jBDOo9CKieXXK06Ch7cvdwqOAQvyT9QpG5CG+1Nz18etDdpzs9vHvQ1asrPhqfsyZwlaeBztcOp/O11T//L3lnHigjP9/Bidwq7JsPo7GV4K024Rfaj+ieVxEwoAvZ6QdxHV+Dr+Mw4wyrUVFEhjqMI9JBnDB0pygyDIvFk1OlNoqyi1lxNIeKCisGtZxeIR70CfOgV4gHPUPdxSrKduqSStab9uzBUQk9rUYyhsShN8vRbHqMPeF3MrjX0NYOT2gDfALC8Jl0G3AbUD3vPuX4fopPxuPMPoBn6hrCTn6I5k8r2RI/CtSRVHnEIPfvxqjwntw0cCYanRt5VXkcKTzCkcIj7M3dy9dHv8ZoM+Kh8iDGM4YYj5jq/57+Xquo+0L7n8nbaXdQsD+JrF0m8pJNJJ20sv9UKa6Ve9HYSnFXxOLp3RPfKE+0Bj1a4178Kg4wUrUHhb4Asw5OarpwwieOlMguGAmmqELCznILh45lY96agtXqwF2rIDbQjdhAN7oGGOgW6EYnP73YKbCNu6SS9ef7j4LKB11BMtM7TSPly7vRyf3pP+uV1g5NaKMUShXRcYOIjhtUU2a3WUlNOkThyT3Y8hJRl5zAJ3c9QftzkElcp5N4BHpDBIM8IxntPwGPy+7D5e1OalU6J0tOcrLkJN8lfEdqWSp2l51AXSBhbmFEuEUQZggj3C2ccLdwgg3BNS8ypXIZ/v274N+/y5lYzBYK9yeTe8hKUaqFokI7p3KrsOxWIHV2QesIwKC0oveQ4eZjx82QRndlGg7VdqS6Aso9FWT6hJLqiCbNEU2GNZTCKh1bKizsPZmN9KATc4UNiQT8PTRE++ro6qsnyk9PpI+OKB89/m4qsVinDbikkvURoxZPdxMHPU8y4nA4XY27KJ61Hrni4pYdCx2LXKEkottldfbeNpsqSUs+QnHaIew5CcjLUnErPoDf8Ww8MOJwSVBJfPBRBdNLF4rD0BmX+0hK3TWUaKFUYSXbnMsfaX+QVp5GqaUUmURGkD6IEH0IQfogAnQBBOmDCNQFEqALIEAbQMDgWAIGx9aKpTK7kLw9Jyk6ZaE0105piYOKfDVVsgG4pEOQ203oXBVolCZivQvo5pWHS78JdEXYtOUUeOvJl/mTTTCZ1jAyK4PINsnJrLKwLakC+UE7zioHTico5FL8PDWEeGqI8tIS7a0jxFNDsIeWEE8NHlqFSOYt4JJJ1larleIyLZd5ZNMtNo7e217jSM8nGdCpR2uHJlwi1BodUT0GEtVjYJ1rZcUF5KclUJ59AmtBErLSNPS5u3DLyKe3owCtpProrxIMFMt8qFD6U6wNI1enI98so8QFpaZMUgpOUGQvI8+Uj9lhRoIEX40vAfoAfDW++Gh8znz18cF3SDShGm+81d4oZAocFhslxzMoSsigJNVKRbETY3EQlbmhmFxarIrqBTYSeyWRqmxiPTKRehxEatiMS1tOuQ8UhOopUbpRiC/ZlkDyjH7kVclIs8D21EqkCdnIzA6cluq5CXKZBHc3FT4GFX5uaoLd1ER4aAjx0OBnUONrUOFnUKET28RelEvmT++/q3/HaVbQKf8U040/c8xjFP2nP9jaYQkdhLuXL+5evtBnRJ1rLqeTsrJiirOTKc9Lw1yUjrMsC0NFNj75p9DainFzlODpKkMhqT6woNKlIk3uQarSnWy1nTxlPqWKItLlcETmpFxio9xlotxZhYvqpOmh8sBb7Y27yh13X3c8Qjyqvz/95a/SYrArUGbYcGXLsOX6YS71oCrHhukUmG0yHC4VOpkejdRJlCYLlS4bpe4EMl0ZTm0VZf5ySrRqSlQ6yqRaCqw+FJq8KDW7kWLRkVBmwZVfhsTqRGK2I7E6wVn95yCVgUoBGpUUvVqOl0GDr5sWP70af72KAL2KAIMKb50SD60Sg1qOXikXs1lOu2SS9Q9pVag99GjZjsruTud7Phf7VAttgkQqxd3Tp3rb1+51n8r/x+lwUFZaSGlBFsaiHMylOXiV5+FpLCDOUoasqgylrQy1vRytowKdy4jWZaRcLqFQJqNQlk+WVE2RTEWxXEmpTE62TEaFVIJRBkapi0qJA8vpXwh4g9RbglqiQitTo5Vp0Mq16GRafCxu+Ja74V6hA1MgivxwpBY57hY5blY5IXYFdqcSu8yGRF+OTJ+HXF2GVF2BRWvD6C2hXKOkUimnFC2lTj2lNj1Gu44qm4YSm4Ycqw1btgmHTYLE5gSbszrJO2rPJpbIXMhkIJe5UMpdKGUuNHJQK6TolDIMaiVuWhUeOg3uOi0eWg3uGiXuKjkeagUeKjk6pRyNUoZGIUOtkCFrh78AGpWsFy9ezO7duwHQarXcfPPNvP/++6jVah599FGCgi5uL+ELdSQxkYx8DwZ4pzO9shDvO34XB+AK7Y5UJsPd2x93b/8Gt3E6HKgqSnEvKUBeVoBnRTE2UwV2UzlOcwVOixEsFUjMRqS2SuR2Iy67EauzEqvEhAMTdkkFVqkdq8SBSSbBKJVSKZFSKZWQopZSqZVSIZFilMowSSSYpVIsEgkWCVhOPw/JbRI8q7QYTGr0BWoMZhUGqxadVUOI3UK03YzSaURiV6CQKVBoHMjUdmRqKw61HYvOicUTLCoJVXIp5VIVRokKIyqqXEpMLhUmpxKzQ4nVoaTMoaDIDnaLBEelFWeeDaezEpdDUp3snS5wVH/Vm5alIJFW/yKQSEAidSGVgFTqQio58yWTuJBJnKf/60Je6wvkEhcKKcilEhQScFPKef2mKzFomn5xUqOS9Y033siNN97Izz//THR0NMuXL2f+/PkUFhaydOlSHnzw4oYdvvjua97J1eN0Nu63nsmiQKaGy0t/Iui+P/DyC76oOAShvZDKZLh5eOPm4Q1c3DFnLqcTm82K2VSJ1VyJ1VSFzVyJ1VKF/fSXw2LCYa3CYTXhslbhtJmwOaxYZSasWjNWtRmb04rNacXqqsTmKsPmsmHHjhU7Dpcdp8uBQ+LAgRMnDuw4cUqc2O0u7A6wu1zgkKGyKdHaFchsSiR2JVKbErlDidyuQuqUI7HLkEvkqGRKlHIpCokEiVyCSy7DqZRj18qwymWYFXLMMgUmmRyzVI4VKVapHCsyrMiwIcXukmJHVv3lkmJ3yXC4pNVfTinW0z87XVKcTilOpwSXi+r/OiW4XNU/SyTQ54evufu2u5vmf/DfNHoYpLS0lISEBKZPn87ixYvR6XTIZDIKCwuJj49n165dZGZmXlAw/j7eeBcW42jkOb5SpZMZshxuuXeNGPoQhAskkUpRqtSnF495t3Y4Z+VyOnE6ndjtVpwOBw6HHYfdjtNhx+Gw43I6cNhtOB2OmjKHw4rNbsPhqv7Z7qz+xeFwVn9vd55u53LgdDpxuU7/YnE6cbocOJ0OnK7qcqcLHA47Trsd7A5cdidOuwuX3Y5CoWb6tY81y32fN1kvWrSIAwcOAODt7U1oaChXX301AEqlEpPJRG5uLoGBgQwcOJCBAweycOHCCwpmysTLmTLxgpoKgtBBSKRSZFLpWfczv1Sd927nzJlT6+eHHnqopuzGG2/kySefRKFQMG/evOaJUBAEQWj8MMiCBQtqvu/atWutnwVBEITmIQZ4BUEQ2gGRrAVBENoBkawFQRDaAZGsBUEQ2gGRrAVBENoBkawFQRDagWaZVZ6bm3vBC2MyMzMJCQlp4ojaNnHPHYO4547hYu45Nzf37Bddbcx7773X2iG0OHHPHYO4546hue65zQ2DDBgwoLVDaHHinjsGcc8dQ3Pds8TlcrnOX61lJCQktIktV1uC3W5n+/bt7Nu3j379+rFs2TJUKhXPPvssBoOhtcNrFrt27eL777/H4XDQr18/9u3bd8nf85YtW1ixYgWVlZVMnDiRjRs3XvL3DFBUVMTdd9/Nww8/3CH+bm/atIlffvkFpVJJt27dmuXvdptK1i+//DIPP/wwhYWFrFix4qK3XG3LsrKyWLZsGU6nk4KCAl555RV27NhBdnY211xzTWuH1yw+/vhj7rzzTpKSkrjqqqtITEy85O958eLF3Hjjjfzxxx+89tpr/PXXX5f8PQO8/vrrZGZmYjAYOsTf7QULFlBSUoJKpcJoNDbLPbepYRCj0YhOp8Pf35/CwsLWDqdZBQcH1+xe6HQ6kUgkl/x9z549m9zcXL766iumTp3aIe75xhtvZOPGjbzzzjsMGDCgQ9zz0qVLmTJlCiqVqsP83R4/fjzPPPMMI0aMYMOGDc1yz20qWf9vy9WcnBwCAwNbO5wW43K5cDqdl/x9b968me+++46nn34amUzWIe55xYoVjBo1irfeeos1a9Z0iHvet28fK1eu5OjRo/z+++8d4p4TExNRKBS4ublV74HdDPfcpoZBEhMT+eijj2q2XPX2brsboDeFzMxMli5dyoABA/jpp59QqVQ899xzqNXq1g6tWcyZMwd3d3cAJkyYwG+//XbJ3/PixYs5ePAgVVVVDBgwgAMHDlzy9/w/jz32GNOnT+8Qf7dXrFhBfHw8LpeLESNG8NdffzX5PbepZC0IgiDUr00NgwiCIAj1E8laEAShHRDJWhAEoR0QyVoQBKEdEMlaEAShHRDJWhAEoR0QyVoQBKEd+H9rRHB09SvQaQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "results_path = results_path_ / 'simulation_results_4inputs.h5'\n", "with h5py.File(results_path, 'r') as h5file:\n", " group = h5file.get('results')\n", " print(list(h5file['results'].keys()))\n", " randtrial = randint(np.shape(np.array(group['subsamp']))[2])\n", " print(randtrial)\n", " plt.figure()\n", " plt.plot(xtime,np.array(group['subsamp'])[:,:,randtrial].T);\n", " \n", "results_path = results_path_ / 'simulation_results_4inputs_nolatencytuning.h5'\n", "with h5py.File(results_path, 'r') as h5file:\n", " group = h5file.get('results')\n", " print(list(h5file['results'].keys()))\n", " randtrial = randint(np.shape(np.array(group['pspike_nolattuning']))[2])\n", " print(randtrial)\n", " plt.figure()\n", " plt.plot(xtime,np.array(group['pspike_nolattuning'])[:,:,randtrial].T);" ] }, { "cell_type": "code", "execution_count": 386, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['pspike_nolattuning', 'pspike_nolattuning_onset']\n" ] } ], "source": [ "h5file = h5py.File(results_path, 'r')\n", "\n", "print(list(h5file['results'].keys()))\n", "\n", "homog_isi_nolattuning = np.array(h5file['results']['pspike_nolattuning'])\n", "homog_isi_nolatshift_onset = np.array(h5file['results']['pspike_nolattuning_onset'])\n", "\n", "# print(list(h5file['metadata'].keys()))\n", "\n", "# xtime = np.array(h5file['metadata']['xtime'])\n", "# stimamp = np.array(h5file['metadata']['stimamp'])\n", "\n", "h5file.close()" ] }, { "cell_type": "code", "execution_count": 387, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 387, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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dWXAgAH06dOHjRs34ubmRnl5OR988EG9qMDT05OioiLGjRtntnNrFxacmZlJQEAAQ4cO5ZtvvqFHjx7k5uZy6dIlli9fzt27dwG4c+cOKpWKZcuW8corNa/sHT16NDExMXz33Xc4OjoyduxY/Pz8OH36NFAzNQ4LC+P48ePs3LmTWbNmSf7z4aigb9++nD171qzn1i4UXFFRgYuLCy4uLoSHh9O3b19efPFFfvjhB0aNGiVFI3q9XoosastpXV1dsbW1RavV8tVXX6FSqejfv7/kWpycnKToQKvVYmdnJ1Xr11p6aGgovXr1QqFQmP2JVrPVRbSGrl271gvRrly5Ir0s8J///CczZ9asjebq6oq7uztRUVF4eHg0KHDx8fHhu+++48aNG1y+fLnBBe3NN98kNjZWCuOMRQW14aPZaFEW2cyo1WqxceNGix+noKBAVFVViWvXromPP/64QXthYaFISUkx6zHbhQX7+Pig0+kwGAzY2FjOaxkMBpYtW4bBYOD9999v0H7ixIkGL+huLe0iiujItIuLXEfmsYItzGMFW5jHCrYwjxVsYf4fDJoxPy14+/oAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lmi_delay = 4\n", "\n", "hfig,ax = create_fig_tuning()\n", "ax.set_ylabel('Mean Response Amplitude (mV)')\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.75)\n", "# ax.set_ylim(-5,105)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "\n", "amp = get_response_amp_atdelay(subsamp,subsamp_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['black'], capsize=2)\n", "\n", "amp = get_response_amp_atdelay(homog_isi,homog_isi_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['purple'], capsize=2)\n", "\n", "amp = get_response_amp_atdelay(homog_isi_nolattuning,homog_isi_nolatshift_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['red'], capsize=2)\n", "\n", "\n", "amp = get_response_amp_atdelay(homog_pspike,homog_pspike_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['orange'], capsize=2)\n", "\n", "amp = get_response_amp_atdelay(homog_all,homog_all_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['grey'], capsize=2)\n", "\n", "\n", "hfig,ax = create_fig_tuning()\n", "ax.set_ylabel('Mean Response Amplitude (mV)')\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.75)\n", "# ax.set_ylim(-5,105)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "\n", "amp = get_response_amp_peak(subsamp)\n", "plt.errorbar(x,\n", " np.mean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['black'], capsize=2)\n", "\n", "amp = get_response_amp_peak(homog_isi)\n", "plt.errorbar(x,\n", " np.mean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['purple'], capsize=2)\n", "\n", "amp = get_response_amp_peak(homog_isi_nolattuning)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['red'], capsize=2)\n", "\n", "amp = get_response_amp_peak(homog_pspike)\n", "plt.errorbar(x,\n", " np.mean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['orange'], capsize=2)\n", "\n", "amp = get_response_amp_peak(homog_all)\n", "plt.errorbar(x,\n", " np.mean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['grey'], capsize=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Make graphic of latency shift mech with inhib using model DGC " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initialize" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%matplotlib widget" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "n_inputs = 4\n", "meta_params = {\n", " 'N_inputs' : n_inputs*4, # 7 inputs with 4 possible spikes each\n", " 'N_runs' : 100,\n", " 'duration' : 0.05*second,\n", " 'onset_offset' : 0, # 5msec is for figure making because data plotted with 5msec pre-stimonset #4.5,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,#ms, time of normal stimulus onset relative to cmd\n", " 'e_lmi_delay' : 4*ms #ms\n", "}\n", "\n", "invpeak = (meta_params['tau_e2'] / meta_params['tau_e1']) ** \\\n", " (meta_params['tau_e1'] / (meta_params['tau_e2'] - meta_params['tau_e1']))\n", "\n", "namespace_sim = {\n", " 'sim_dt' : 0.1*ms,\n", " 'Cm' : 6*pF,\n", " 'E_l' : -70*mV,\n", " 'g_l' : 1*nS, # a 1MOhm cell has gl = 1*nS\n", " 'E_e' : 0*mV,\n", " 'E_e_lmi' : -90*mV,\n", " 'V_th' : 0*mV,\n", " 'V_r' : -70*mV,\n", " 'w_e' : 0.1*nS,\n", " 'w_e_lmi' : 0*nS, #0*nS,##0,#either on and off... weight by logistic 0*nS,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,\n", " 'tau_e_lmi' : 5*ms,\n", " 'invpeak' : invpeak\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Use just two inputs and do two different relative latencies" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "multispike,fsl = get_afferents_subsampled(2)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ nan, nan],\n", " [ nan, nan],\n", " [ nan, nan],\n", " [7.08681135, 7.40487316],\n", " [6.75500835, 6.66138184],\n", " [ nan, 5.99799733],\n", " [5.64065109, 5.57242991],\n", " [6.01717148, 5.16188251],\n", " [5.66658717, 4.3858478 ],\n", " [4.19449082, 3.92773698],\n", " [3.72843628, 3.65236983]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fsl" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 3/3 [00:00<00:00, 4.07it/s]\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "# multispike = np.asarray([[3],[2.5],[2.25]])\n", "multispike = np.asarray([[3.5],[3],[2.75]])\n", "\n", "net = initialize_model(namespace_sim,meta_params) \n", "net.store('intialized',filename=sim_filepath) \n", "\n", "### subsample from data\n", "R_wavs_ = [] # initialize array to store responses across stimulus set\n", "onset_ = []\n", "\n", "i = 0\n", "for _ in tqdm(range(len(multispike))):\n", "\n", " # get spike times for afferent population\n", "# multispike,fsl = get_afferents_subsampled(a)\n", "\n", "\n", "# for y in multispike:\n", " y = multispike[i]\n", " i+=1\n", " miny = np.NaN\n", " net.restore('intialized',filename=sim_filepath) # this resets simulation clock to 0\n", " # the state of the system at time of restore should affect the network operation accordingly\n", " y = y[~np.isnan(y)] # remove nan values from array of spike times\n", " spk_t_aff = np.asarray(y)*ms # create spike time array for SpikeGeneratorGroup, sorted\n", " ind_aff = np.empty(0) # create default afferent index array in case all were nan\n", "\n", " spk_t_lmi = np.empty(0)*ms # create default lmi spike time in case where no afferent input (all nan)\n", " ind_lmi = np.empty(0) # create default lmi index array in case all were nan\n", "\n", " if len(y)!=0: # if not all were nan, create index array for afferent spikes, lmi neuron, and lmi spike\n", " ind_aff = np.arange(len(y))\n", " ind_lmi = np.arange(1)\n", " spk_t_lmi = [np.min(y)]*ms\n", " miny = np.min(y)\n", "\n", " # update SpikeGeneratorGroup neuron indices and spikes\n", " net['aff_input'].set_spikes(ind_aff,spk_t_aff)\n", " net['lmi_input'].set_spikes(ind_lmi,spk_t_lmi)\n", "\n", " net.run(duration = meta_params['duration'])\n", "\n", " r =net['state_mon'].v/mV # set r to voltage trace from simulation trial\n", " xtime = net['state_mon'].t/ms\n", " R_wavs_.append(r.reshape(-1)) # append response for this stimamp to response mat across all stimamp\n", " onset_.append(miny)\n", "\n", "\n", "R_wavs = np.asarray(R_wavs_).T\n", "R_wavs = R_wavs-R_wavs[0,:]\n", "onset = np.asarray(onset_).T\n", "\n", "plt.figure(figsize=(3,5))\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,3))\n", "plt.plot(xtime, R_wavs[:,0],color=colinds[0],linestyle='-')\n", "plt.vlines(multispike[0][0],0,5,color=colinds[0],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,1],color=colinds[1],linestyle='-')\n", "plt.vlines(multispike[1][0],0,5,color=colinds[1],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,2],color=colinds[2],linestyle='-')\n", "plt.vlines(multispike[2][0],0,5,color=colinds[2],linestyle='-')\n", "plt.xlim(0,10)\n", "plt.vlines(2,0,10,color='black',linestyle='--')\n", "plt.vlines(5,0,15,color='blue',linestyle='--')\n", "\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 3/3 [00:00<00:00, 4.08it/s]\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# multispike = np.asarray([[2,3],[2,2.5],[2,2.25]])\n", "multispike = np.asarray([[2,3.5],[2,3],[2,2.75]])\n", "\n", "net = initialize_model(namespace_sim,meta_params) \n", "net.store('intialized',filename=sim_filepath) \n", "\n", "### subsample from data\n", "R_wavs_ = [] # initialize array to store responses across stimulus set\n", "onset_ = []\n", "\n", "i = 0\n", "for _ in tqdm(range(len(multispike))):\n", "\n", " # get spike times for afferent population\n", "# multispike,fsl = get_afferents_subsampled(a)\n", "\n", "\n", "# for y in multispike:\n", " y = multispike[i]\n", " i+=1\n", " miny = np.NaN\n", " net.restore('intialized',filename=sim_filepath) # this resets simulation clock to 0\n", " # the state of the system at time of restore should affect the network operation accordingly\n", " y = y[~np.isnan(y)] # remove nan values from array of spike times\n", " spk_t_aff = np.asarray(y)*ms # create spike time array for SpikeGeneratorGroup, sorted\n", " ind_aff = np.empty(0) # create default afferent index array in case all were nan\n", "\n", " spk_t_lmi = np.empty(0)*ms # create default lmi spike time in case where no afferent input (all nan)\n", " ind_lmi = np.empty(0) # create default lmi index array in case all were nan\n", "\n", " if len(y)!=0: # if not all were nan, create index array for afferent spikes, lmi neuron, and lmi spike\n", " ind_aff = np.arange(len(y))\n", " ind_lmi = np.arange(1)\n", " spk_t_lmi = [np.min(y)]*ms\n", " miny = np.min(y)\n", "\n", " # update SpikeGeneratorGroup neuron indices and spikes\n", " net['aff_input'].set_spikes(ind_aff,spk_t_aff)\n", " net['lmi_input'].set_spikes(ind_lmi,spk_t_lmi)\n", "\n", " net.run(duration = meta_params['duration'])\n", "\n", " r =net['state_mon'].v/mV # set r to voltage trace from simulation trial\n", " xtime = net['state_mon'].t/ms\n", " R_wavs_.append(r.reshape(-1)) # append response for this stimamp to response mat across all stimamp\n", " onset_.append(miny)\n", "\n", "\n", "R_wavs = np.asarray(R_wavs_).T\n", "R_wavs = R_wavs-R_wavs[0,:]\n", "onset = np.asarray(onset_).T\n", "\n", "plt.figure(figsize=(3,5))\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,3))\n", "plt.plot(xtime, R_wavs[:,0],color=colinds[0],linestyle='-')\n", "plt.vlines(multispike[0][1],0,5,color=colinds[0],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,1],color=colinds[1],linestyle='-')\n", "plt.vlines(multispike[1][1],0,5,color=colinds[1],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,2],color=colinds[2],linestyle='-')\n", "plt.vlines(multispike[2][1],0,5,color=colinds[2],linestyle='-')\n", "plt.xlim(0,10)\n", "plt.vlines(2,0,10,color='black',linestyle='--')\n", "plt.vlines(5,0,15,color='blue',linestyle='--')\n", "\n", "plt.show()\n", "# plt.vlines(2.5,-70,-64,color=colinds[1],linestyle='-')" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 3/3 [00:00<00:00, 4.00it/s]\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# multispike = np.asarray([[2,2.1,3],[2,2.1,2.5],[2,2.1,2.25]])\n", "multispike = np.asarray([[2,2.75,3.5],[2,2.75,3],[2,2.75,2.75]])\n", "\n", "net = initialize_model(namespace_sim,meta_params) \n", "net.store('intialized',filename=sim_filepath) \n", "\n", "### subsample from data\n", "R_wavs_ = [] # initialize array to store responses across stimulus set\n", "onset_ = []\n", "\n", "i = 0\n", "for _ in tqdm(range(len(multispike))):\n", "\n", " # get spike times for afferent population\n", "# multispike,fsl = get_afferents_subsampled(a)\n", "\n", "\n", "# for y in multispike:\n", " y = multispike[i]\n", " i+=1\n", " miny = np.NaN\n", " net.restore('intialized',filename=sim_filepath) # this resets simulation clock to 0\n", " # the state of the system at time of restore should affect the network operation accordingly\n", " y = y[~np.isnan(y)] # remove nan values from array of spike times\n", " spk_t_aff = np.asarray(y)*ms # create spike time array for SpikeGeneratorGroup, sorted\n", " ind_aff = np.empty(0) # create default afferent index array in case all were nan\n", "\n", " spk_t_lmi = np.empty(0)*ms # create default lmi spike time in case where no afferent input (all nan)\n", " ind_lmi = np.empty(0) # create default lmi index array in case all were nan\n", "\n", " if len(y)!=0: # if not all were nan, create index array for afferent spikes, lmi neuron, and lmi spike\n", " ind_aff = np.arange(len(y))\n", " ind_lmi = np.arange(1)\n", " spk_t_lmi = [np.min(y)]*ms\n", " miny = np.min(y)\n", "\n", " # update SpikeGeneratorGroup neuron indices and spikes\n", " net['aff_input'].set_spikes(ind_aff,spk_t_aff)\n", " net['lmi_input'].set_spikes(ind_lmi,spk_t_lmi)\n", "\n", " net.run(duration = meta_params['duration'])\n", "\n", " r =net['state_mon'].v/mV # set r to voltage trace from simulation trial\n", " xtime = net['state_mon'].t/ms\n", " R_wavs_.append(r.reshape(-1)) # append response for this stimamp to response mat across all stimamp\n", " onset_.append(miny)\n", "\n", "\n", "R_wavs = np.asarray(R_wavs_).T\n", "R_wavs = R_wavs-R_wavs[0,:]\n", "onset = np.asarray(onset_).T\n", "\n", "plt.figure(figsize=(3,5))\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,3))\n", "plt.plot(xtime, R_wavs[:,0],color=colinds[0],linestyle='-')\n", "plt.vlines(multispike[0][2],0,5,color=colinds[0],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,1],color=colinds[1],linestyle='-')\n", "plt.vlines(multispike[1][2],0,5,color=colinds[1],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,2],color=colinds[2],linestyle='-')\n", "plt.vlines(multispike[2][2],0,5,color=colinds[2],linestyle='-')\n", "plt.xlim(0,10)\n", "plt.vlines(2,0,10,color='black',linestyle='--')\n", "plt.vlines(5,0,15,color='blue',linestyle='--')\n", "\n", "plt.show()\n", "# plt.vlines(2.5,-70,-64,color=colinds[1],linestyle='-')" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 3/3 [00:00<00:00, 3.63it/s]\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# multispike = np.asarray([[2,2.1,2.25,3],[2,2.1,2.25,2.5],[2,2.1,2.25,2.25]])\n", "multispike = np.asarray([[2,2.75,3,3.5],[2,2.75,3,3],[2,2.75,3,2.75]])\n", "\n", "net = initialize_model(namespace_sim,meta_params) \n", "net.store('intialized',filename=sim_filepath) \n", "\n", "### subsample from data\n", "R_wavs_ = [] # initialize array to store responses across stimulus set\n", "onset_ = []\n", "\n", "i = 0\n", "for _ in tqdm(range(len(multispike))):\n", "\n", " # get spike times for afferent population\n", "# multispike,fsl = get_afferents_subsampled(a)\n", "\n", "\n", "# for y in multispike:\n", " y = multispike[i]\n", " i+=1\n", " miny = np.NaN\n", " net.restore('intialized',filename=sim_filepath) # this resets simulation clock to 0\n", " # the state of the system at time of restore should affect the network operation accordingly\n", " y = y[~np.isnan(y)] # remove nan values from array of spike times\n", " spk_t_aff = np.asarray(y)*ms # create spike time array for SpikeGeneratorGroup, sorted\n", " ind_aff = np.empty(0) # create default afferent index array in case all were nan\n", "\n", " spk_t_lmi = np.empty(0)*ms # create default lmi spike time in case where no afferent input (all nan)\n", " ind_lmi = np.empty(0) # create default lmi index array in case all were nan\n", "\n", " if len(y)!=0: # if not all were nan, create index array for afferent spikes, lmi neuron, and lmi spike\n", " ind_aff = np.arange(len(y))\n", " ind_lmi = np.arange(1)\n", " spk_t_lmi = [np.min(y)]*ms\n", " miny = np.min(y)\n", "\n", " # update SpikeGeneratorGroup neuron indices and spikes\n", " net['aff_input'].set_spikes(ind_aff,spk_t_aff)\n", " net['lmi_input'].set_spikes(ind_lmi,spk_t_lmi)\n", "\n", " net.run(duration = meta_params['duration'])\n", "\n", " r =net['state_mon'].v/mV # set r to voltage trace from simulation trial\n", " xtime = net['state_mon'].t/ms\n", " R_wavs_.append(r.reshape(-1)) # append response for this stimamp to response mat across all stimamp\n", " onset_.append(miny)\n", "\n", "\n", "R_wavs = np.asarray(R_wavs_).T\n", "R_wavs = R_wavs-R_wavs[0,:]\n", "onset = np.asarray(onset_).T\n", "\n", "plt.figure(figsize=(3,5))\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,3))\n", "plt.plot(xtime, R_wavs[:,0],color=colinds[0],linestyle='-')\n", "plt.vlines(multispike[0][3],0,5,color=colinds[0],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,1],color=colinds[1],linestyle='-')\n", "plt.vlines(multispike[1][3],0,5,color=colinds[1],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,2],color=colinds[2],linestyle='-')\n", "plt.vlines(multispike[2][3],0,5,color=colinds[2],linestyle='-')\n", "plt.xlim(0,10)\n", "plt.vlines(2,0,10,color='black',linestyle='--')\n", "plt.vlines(5,0,15,color='blue',linestyle='--')\n", "\n", "plt.show()\n", "# plt.vlines(2.5,-70,-64,color=colinds[1],linestyle='-')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## now move all 3 by same amount relative to first" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 3/3 [00:00<00:00, 4.26it/s]\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "multispike = np.asarray([[2,2.75,3,3.5],[2,2.25,2.5,3],[2,2,2.25,2.75]])\n", "\n", "net = initialize_model(namespace_sim,meta_params) \n", "net.store('intialized',filename=sim_filepath) \n", "\n", "### subsample from data\n", "R_wavs_ = [] # initialize array to store responses across stimulus set\n", "onset_ = []\n", "\n", "i = 0\n", "for _ in tqdm(range(len(multispike))):\n", "\n", " # get spike times for afferent population\n", "# multispike,fsl = get_afferents_subsampled(a)\n", "\n", "\n", "# for y in multispike:\n", " y = multispike[i]\n", " i+=1\n", " miny = np.NaN\n", " net.restore('intialized',filename=sim_filepath) # this resets simulation clock to 0\n", " # the state of the system at time of restore should affect the network operation accordingly\n", " y = y[~np.isnan(y)] # remove nan values from array of spike times\n", " spk_t_aff = np.asarray(y)*ms # create spike time array for SpikeGeneratorGroup, sorted\n", " ind_aff = np.empty(0) # create default afferent index array in case all were nan\n", "\n", " spk_t_lmi = np.empty(0)*ms # create default lmi spike time in case where no afferent input (all nan)\n", " ind_lmi = np.empty(0) # create default lmi index array in case all were nan\n", "\n", " if len(y)!=0: # if not all were nan, create index array for afferent spikes, lmi neuron, and lmi spike\n", " ind_aff = np.arange(len(y))\n", " ind_lmi = np.arange(1)\n", " spk_t_lmi = [np.min(y)]*ms\n", " miny = np.min(y)\n", "\n", " # update SpikeGeneratorGroup neuron indices and spikes\n", " net['aff_input'].set_spikes(ind_aff,spk_t_aff)\n", " net['lmi_input'].set_spikes(ind_lmi,spk_t_lmi)\n", "\n", " net.run(duration = meta_params['duration'])\n", "\n", " r =net['state_mon'].v/mV # set r to voltage trace from simulation trial\n", " xtime = net['state_mon'].t/ms\n", " R_wavs_.append(r.reshape(-1)) # append response for this stimamp to response mat across all stimamp\n", " onset_.append(miny)\n", "\n", "\n", "R_wavs = np.asarray(R_wavs_).T\n", "R_wavs = R_wavs-R_wavs[0,:]\n", "onset = np.asarray(onset_).T\n", "\n", "plt.figure(figsize=(3,5))\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,3))\n", "plt.plot(xtime, R_wavs[:,0],color=colinds[0],linestyle='-')\n", "plt.vlines(multispike[0][3],0,5,color=colinds[0],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,1],color=colinds[1],linestyle='-')\n", "plt.vlines(multispike[1][3],0,5,color=colinds[1],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,2],color=colinds[2],linestyle='-')\n", "plt.vlines(multispike[2][3],0,5,color=colinds[2],linestyle='-')\n", "plt.xlim(0,10)\n", "plt.vlines(2,0,10,color='black',linestyle='--')\n", "plt.vlines(5,0,15,color='blue',linestyle='--')\n", "\n", "plt.show()\n", "# plt.vlines(2.5,-70,-64,color=colinds[1],linestyle='-')" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([11.42227156, 11.45383545, 11.46735578])" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.max(R_wavs,0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## make CD + EA for Figure 1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# multispike = np.asarray([[2,3],[2,2.5],[2,2.25]])\n", "multispike = np.asarray([[np.nan,5],[5,12],[5,24]])\n", "\n", "\n", "meta_params['duration'] = 0.075*second\n", "\n", "net = initialize_model(namespace_sim,meta_params) \n", "net.store('intialized',filename=sim_filepath) \n", "\n", "### subsample from data\n", "R_wavs_ = [] # initialize array to store responses across stimulus set\n", "onset_ = []\n", "\n", "i = 0\n", "for _ in tqdm(range(len(multispike))):\n", "\n", " # get spike times for afferent population\n", "# multispike,fsl = get_afferents_subsampled(a)\n", "\n", "\n", "# for y in multispike:\n", " y = multispike[i]\n", " i+=1\n", " miny = np.NaN\n", " net.restore('intialized',filename=sim_filepath) # this resets simulation clock to 0\n", " # the state of the system at time of restore should affect the network operation accordingly\n", " y = y[~np.isnan(y)] # remove nan values from array of spike times\n", " spk_t_aff = np.asarray(y)*ms # create spike time array for SpikeGeneratorGroup, sorted\n", " ind_aff = np.empty(0) # create default afferent index array in case all were nan\n", "\n", " spk_t_lmi = np.empty(0)*ms # create default lmi spike time in case where no afferent input (all nan)\n", " ind_lmi = np.empty(0) # create default lmi index array in case all were nan\n", "\n", " if len(y)!=0: # if not all were nan, create index array for afferent spikes, lmi neuron, and lmi spike\n", " ind_aff = np.arange(len(y))\n", " ind_lmi = np.arange(1)\n", " spk_t_lmi = [np.min(y)]*ms\n", " miny = np.min(y)\n", "\n", " # update SpikeGeneratorGroup neuron indices and spikes\n", " net['aff_input'].set_spikes(ind_aff,spk_t_aff)\n", " net['lmi_input'].set_spikes(ind_lmi,spk_t_lmi)\n", "\n", " net.run(duration = meta_params['duration'])\n", "\n", " r =net['state_mon'].v/mV # set r to voltage trace from simulation trial\n", " xtime = net['state_mon'].t/ms\n", " R_wavs_.append(r.reshape(-1)) # append response for this stimamp to response mat across all stimamp\n", " onset_.append(miny)\n", "\n", "\n", "R_wavs = np.asarray(R_wavs_).T\n", "R_wavs = R_wavs-R_wavs[0,:]\n", "onset = np.asarray(onset_).T" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "scrolled": false }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b4583317519d450e9dd088299bd9eb0a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# hfig,ax = create_fig()\n", "hfig = plt.figure(figsize=[3,1])\n", "ax = hfig.add_axes([0.2,0.2,0.7,0.7],frameon=False)\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,2))\n", "plt.plot(xtime, R_wavs[:,0],color='black',linestyle='-')\n", "plt.plot(xtime, R_wavs[:,1],color=colinds[0],linestyle='-')\n", "plt.vlines(multispike[1][1],0,5,color=colinds[0],linestyle='-')\n", "plt.plot(xtime, R_wavs[:,2],color=colinds[1],linestyle='-')\n", "plt.vlines(multispike[2][1],0,5,color=colinds[1],linestyle='-')\n", "# plt.plot(xtime, R_wavs[:,2],color=colinds[2],linestyle='-')\n", "# plt.vlines(multispike[2][1],0,5,color=colinds[2],linestyle='-')\n", "plt.xlim(0,60)\n", "# plt.vlines(2,0,10,color='black',linestyle='--')\n", "# plt.vlines(5,0,15,color='blue',linestyle='--')\n", "\n", "plt.show()\n", "# plt.vlines(2.5,-70,-64,color=colinds[1],linestyle='-')\n", "figsave(figure_folder,'Fig1_HypothesisWavs')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## plot min psps for sgc and dgc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### dgc" ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [], "source": [ "n_inputs = 4\n", "meta_params = {\n", " 'N_inputs' : n_inputs*4, # 7 inputs with 4 possible spikes each\n", " 'N_runs' : 100,\n", " 'duration' : 0.05*second,\n", " 'onset_offset' : 0, # 5msec is for figure making because data plotted with 5msec pre-stimonset #4.5,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,#ms, time of normal stimulus onset relative to cmd\n", " 'e_lmi_delay' : 4*ms #ms\n", "}\n", "\n", "invpeak = (meta_params['tau_e2'] / meta_params['tau_e1']) ** \\\n", " (meta_params['tau_e1'] / (meta_params['tau_e2'] - meta_params['tau_e1']))\n", "\n", "namespace_sim = {\n", " 'sim_dt' : 0.1*ms,\n", " 'Cm' : 6*pF,\n", " 'E_l' : -70*mV,\n", " 'g_l' : 1*nS, # a 1MOhm cell has gl = 1*nS\n", " 'E_e' : 0*mV,\n", " 'E_e_lmi' : -90*mV,\n", " 'V_th' : 0*mV,\n", " 'V_r' : -70*mV,\n", " 'w_e' : 0.1*nS,\n", " 'w_e_lmi' : 0*nS, #0*nS,##0,#either on and off... weight by logistic 0*nS,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,\n", " 'tau_e_lmi' : 5*ms,\n", " 'invpeak' : invpeak\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### make single EA input for Supplement Fig 4" ] }, { "cell_type": "code", "execution_count": 119, "metadata": { "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1/1 [00:00<00:00, 3.95it/s]\n" ] } ], "source": [ "# multispike = np.asarray([[2,3],[2,2.5],[2,2.25]])\n", "multispike = np.asarray([[np.nan,0]])\n", "\n", "\n", "meta_params['duration'] = 0.075*second\n", "\n", "net = initialize_model(namespace_sim,meta_params) \n", "net.store('intialized',filename=sim_filepath) \n", "\n", "### subsample from data\n", "R_wavs_ = [] # initialize array to store responses across stimulus set\n", "onset_ = []\n", "\n", "i = 0\n", "for _ in tqdm(range(len(multispike))):\n", "\n", " # get spike times for afferent population\n", "# multispike,fsl = get_afferents_subsampled(a)\n", "\n", "\n", "# for y in multispike:\n", " y = multispike[i]\n", " i+=1\n", " miny = np.NaN\n", " net.restore('intialized',filename=sim_filepath) # this resets simulation clock to 0\n", " # the state of the system at time of restore should affect the network operation accordingly\n", " y = y[~np.isnan(y)] # remove nan values from array of spike times\n", " spk_t_aff = np.asarray(y)*ms # create spike time array for SpikeGeneratorGroup, sorted\n", " ind_aff = np.empty(0) # create default afferent index array in case all were nan\n", "\n", " spk_t_lmi = np.empty(0)*ms # create default lmi spike time in case where no afferent input (all nan)\n", " ind_lmi = np.empty(0) # create default lmi index array in case all were nan\n", "\n", " if len(y)!=0: # if not all were nan, create index array for afferent spikes, lmi neuron, and lmi spike\n", " ind_aff = np.arange(len(y))\n", " ind_lmi = np.arange(1)\n", " spk_t_lmi = [np.min(y)]*ms\n", " miny = np.min(y)\n", "\n", " # update SpikeGeneratorGroup neuron indices and spikes\n", " net['aff_input'].set_spikes(ind_aff,spk_t_aff)\n", " net['lmi_input'].set_spikes(ind_lmi,spk_t_lmi)\n", "\n", " net.run(duration = meta_params['duration'])\n", "\n", " r =net['state_mon'].v/mV # set r to voltage trace from simulation trial\n", " xtime_model = net['state_mon'].t/ms\n", " R_wavs_.append(r.reshape(-1)) # append response for this stimamp to response mat across all stimamp\n", " onset_.append(miny)\n", "\n", "\n", "R_wavs = np.asarray(R_wavs_).T\n", "R_wavs = R_wavs-R_wavs[0,:]\n", "onset = np.asarray(onset_).T" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "scrolled": false }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "abc807e022344eb394793b81a2102d2d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING /Users/kperks/opt/anaconda3/envs/grc_study/lib/python3.6/site-packages/ipykernel_launcher.py:3: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", " This is separate from the ipykernel package so we can avoid doing imports until\n", " [py.warnings]\n" ] } ], "source": [ "hfig,ax = create_fig()\n", "# hfig = plt.figure(figsize=[3,1])\n", "ax = hfig.add_axes([0.2,0.2,0.7,0.7],frameon=False)\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,2))\n", "plt.plot(xtime_model, R_wavs[:,0],color='black',linestyle='-')\n", "\n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(0,50)\n", "# ax.set_yticks([15,20])\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time after stimulus (ms)');\n", "plt.show()\n", "# plt.vlines(2.5,-70,-64,color=colinds[1],linestyle='-')\n", "figsave(figure_folder,'S4_SingleModelPSP_DGC')" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "filename = \"minresponse_dict_dgrc.pickle\"\n", "# fileobj = open(filename, 'wb')\n", "# pickle.dump(minresponse_dict_dgrc, fileobj)\n", "# fileobj.close()\n", "fileobj = open(top_dir / 'data_processed' / filename, 'rb')\n", "minresponse_dict = pickle.load(fileobj)\n", "fileobj.close()" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [], "source": [ "# xtime, dt, minresponses, minresponses_norm = get_minresponse_mat(all_exptname)\n", "sweepdur = 0.05\n", "newdt = 1/10000\n", "newsamp = int(sweepdur/newdt)\n", "xtime = np.linspace(0,sweepdur,newsamp)*1000\n", "minresponse_expts = {\n", "# '20200719_001' : [13],\n", "# '20200719_004' : [0,1,9,10,12,14],\n", " '20200607_004' : [0],\n", " '20200607_002' : [0,1,4,6,9,10,11],\n", " '20200115_002' : [0,1,2,5,6,7,8],\n", " '20200115_004' : [1]}\n", "\n", "mean_onsets = {\n", "# '20200719_001' : [8.73],\n", "# '20200719_004' : [0,1,9,10,12,14],\n", " '20200607_004' : [5.31],\n", " '20200607_002' : [6.7],\n", " '20200115_002' : [5.96],\n", " '20200115_004' : [4.68]}\n", "\n", "mean_peaks = {\n", "# '20200719_001' : [8.73],\n", "# '20200719_004' : [0,1,9,10,12,14],\n", " '20200607_004' : [1.29],\n", " '20200607_002' : [1.29],\n", " '20200115_002' : [1.93],\n", " '20200115_004' : [2.17]}" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "763bcc6e5b764cc6a0f495b2926df206", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "20200607_004 [0]\n", "20200607_002 [0, 1, 4, 6, 9, 10, 11]\n", "20200115_002 [0, 1, 2, 5, 6, 7, 8]\n", "20200115_004 [1]\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "4ed6e34b0b0849658196e34a98f0636a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "20200607_004 [0]\n", "20200607_002 [0, 1, 4, 6, 9, 10, 11]\n", "20200115_002 [0, 1, 2, 5, 6, 7, 8]\n", "20200115_004 [1]\n" ] } ], "source": [ "hfig,ax = create_fig()\n", "# hfig = plt.figure(figsize=[5,5])\n", "# ax = hfig.add_axes([0.2,0.2,0.7,0.7],frameon=False)\n", "\n", "for name,trials in minresponse_expts.items():\n", " print(name,trials)\n", " \n", " xtime = np.linspace(0,50,np.shape(minresponse_dict[name])[0])\n", "\n", " plt.plot(xtime-mean_onsets[name],(np.mean(minresponse_dict[name][:,trials],1)-\n", " np.mean(minresponse_dict[name][:,trials],1)[-1])/mean_peaks[name],\n", " color='black',linewidth=0.5);\n", "\n", "plt.plot(xtime_model, R_wavs[:,0]/np.max(R_wavs[:,0]),color='grey',linewidth=3)\n", " \n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(-2,45)\n", "plt.ylim(-0.25,1.25)\n", "# ax.set_yticks([15,20])\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time (msec)');\n", "plt.show()\n", "\n", "figsave(figure_folder,'S4_miniPSP_DGC_ModelOverlay_Norm')\n", "\n", "hfig,ax = create_fig()\n", "# hfig = plt.figure(figsize=[5,5])\n", "# ax = hfig.add_axes([0.2,0.2,0.7,0.7],frameon=False)\n", "\n", "for name,trials in minresponse_expts.items():\n", " print(name,trials)\n", " \n", " xtime = np.linspace(0,50,np.shape(minresponse_dict[name])[0])\n", "\n", " plt.plot(xtime-mean_onsets[name],(np.mean(minresponse_dict[name][:,trials],1)-\n", " np.mean(minresponse_dict[name][:,trials],1)[-1]),\n", " color='black',linewidth=0.5);\n", "\n", "# plt.plot(xtime_model, R_wavs[:,0]/np.max(R_wavs[:,0]),color='grey',linewidth=3)\n", " \n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(-2,45)\n", "plt.ylim(-0.5,3)\n", "# ax.set_yticks([15,20])\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time (msec)');\n", "plt.show()\n", "\n", "figsave(figure_folder,'S4_miniPSP_DGC')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### sgc" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [], "source": [ "n_inputs = 4\n", "meta_params = {\n", " 'N_inputs' : n_inputs*4, # 7 inputs with 4 possible spikes each\n", " 'N_runs' : 100,\n", " 'duration' : 0.05*second,\n", " 'onset_offset' : 0, # 5msec is for figure making because data plotted with 5msec pre-stimonset #4.5,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,#ms, time of normal stimulus onset relative to cmd\n", " 'e_lmi_delay' : 4*ms #ms\n", "}\n", "\n", "invpeak = (meta_params['tau_e2'] / meta_params['tau_e1']) ** \\\n", " (meta_params['tau_e1'] / (meta_params['tau_e2'] - meta_params['tau_e1']))\n", "\n", "namespace_sim = {\n", " 'sim_dt' : 0.1*ms,\n", " 'Cm' : 12*pF,\n", " 'E_l' : -70*mV,\n", " 'g_l' : 1*nS, # a 1MOhm cell has gl = 1*nS\n", " 'E_e' : 0*mV,\n", " 'E_e_lmi' : -90*mV,\n", " 'V_th' : 0*mV,\n", " 'V_r' : -70*mV,\n", " 'w_e' : 0.1*nS,\n", " 'w_e_lmi' : 0*nS, #0*nS,##0,#either on and off... weight by logistic 0*nS,\n", " 'tau_e1' : 4*ms,\n", " 'tau_e2' : 1*ms,\n", " 'tau_e_lmi' : 5*ms,\n", " 'invpeak' : invpeak\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### make single EA input for Supplement Fig 4" ] }, { "cell_type": "code", "execution_count": 101, "metadata": { "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1/1 [00:00<00:00, 3.90it/s]\n" ] } ], "source": [ "# multispike = np.asarray([[2,3],[2,2.5],[2,2.25]])\n", "multispike = np.asarray([[np.nan,0]])\n", "\n", "\n", "meta_params['duration'] = 0.075*second\n", "\n", "net = initialize_model(namespace_sim,meta_params) \n", "net.store('intialized',filename=sim_filepath) \n", "\n", "### subsample from data\n", "R_wavs_ = [] # initialize array to store responses across stimulus set\n", "onset_ = []\n", "\n", "i = 0\n", "for _ in tqdm(range(len(multispike))):\n", "\n", " # get spike times for afferent population\n", "# multispike,fsl = get_afferents_subsampled(a)\n", "\n", "\n", "# for y in multispike:\n", " y = multispike[i]\n", " i+=1\n", " miny = np.NaN\n", " net.restore('intialized',filename=sim_filepath) # this resets simulation clock to 0\n", " # the state of the system at time of restore should affect the network operation accordingly\n", " y = y[~np.isnan(y)] # remove nan values from array of spike times\n", " spk_t_aff = np.asarray(y)*ms # create spike time array for SpikeGeneratorGroup, sorted\n", " ind_aff = np.empty(0) # create default afferent index array in case all were nan\n", "\n", " spk_t_lmi = np.empty(0)*ms # create default lmi spike time in case where no afferent input (all nan)\n", " ind_lmi = np.empty(0) # create default lmi index array in case all were nan\n", "\n", " if len(y)!=0: # if not all were nan, create index array for afferent spikes, lmi neuron, and lmi spike\n", " ind_aff = np.arange(len(y))\n", " ind_lmi = np.arange(1)\n", " spk_t_lmi = [np.min(y)]*ms\n", " miny = np.min(y)\n", "\n", " # update SpikeGeneratorGroup neuron indices and spikes\n", " net['aff_input'].set_spikes(ind_aff,spk_t_aff)\n", " net['lmi_input'].set_spikes(ind_lmi,spk_t_lmi)\n", "\n", " net.run(duration = meta_params['duration'])\n", "\n", " r =net['state_mon'].v/mV # set r to voltage trace from simulation trial\n", " xtime_model = net['state_mon'].t/ms\n", " R_wavs_.append(r.reshape(-1)) # append response for this stimamp to response mat across all stimamp\n", " onset_.append(miny)\n", "\n", "\n", "R_wavs = np.asarray(R_wavs_).T\n", "R_wavs = R_wavs-R_wavs[0,:]\n", "onset = np.asarray(onset_).T" ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "scrolled": false }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "05ce1d57869b4b39af11df2f9866d771", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING /Users/kperks/opt/anaconda3/envs/grc_study/lib/python3.6/site-packages/ipykernel_launcher.py:3: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", " This is separate from the ipykernel package so we can avoid doing imports until\n", " [py.warnings]\n" ] } ], "source": [ "hfig,ax = create_fig()\n", "# hfig = plt.figure(figsize=[3,1])\n", "ax = hfig.add_axes([0.2,0.2,0.7,0.7],frameon=False)\n", "colinds = plt.cm.plasma(np.linspace(0.2,0.85,2))\n", "plt.plot(xtime_model, R_wavs[:,0],color='black',linestyle='-')\n", "\n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(0,50)\n", "# ax.set_yticks([15,20])\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time after stimulus (ms)');\n", "plt.show()\n", "# plt.vlines(2.5,-70,-64,color=colinds[1],linestyle='-')\n", "figsave(figure_folder,'S4_SingleModelPSP_SGC')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## plot min psps for sgc and dgc" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [], "source": [ "filename = \"minresponse_dict_sgrc.pickle\"\n", "# fileobj = open(filename, 'wb')\n", "# pickle.dump(minresponse_dict_dgrc, fileobj)\n", "# fileobj.close()\n", "fileobj = open(top_dir / 'data_processed' / filename, 'rb')\n", "minresponse_dict = pickle.load(fileobj)\n", "fileobj.close()" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [], "source": [ "# xtime, dt, minresponses, minresponses_norm = get_minresponse_mat(all_exptname)\n", "sweepdur = 0.05\n", "newdt = 1/10000\n", "newsamp = int(sweepdur/newdt)\n", "xtime = np.linspace(0,sweepdur,newsamp)*1000\n", "minresponse_expts = {\n", " '20200718_000' : [1,2,3,4,5],\n", " '20200606_001' : [0,5,6],\n", "# '20200607_000' : [4,9],\n", "# '20200524_002' : [0,1,3,4],\n", " '20200109_004' : [0,1,2,3]\n", " }\n", "\n", "mean_onsets = {\n", " '20200718_000' : [6.83],\n", " '20200606_001' : [7.43],\n", "# '20200607_000' : [0],\n", "# '20200524_002' : [0],\n", " '20200109_004' : [5.39]\n", " }\n", "\n", "mean_offsets = {\n", " '20200718_000' : [139],\n", " '20200606_001' : [377],\n", "# '20200607_000' : [0],\n", "# '20200524_002' : [0],\n", " '20200109_004' : [214]\n", " }\n", "\n", "mean_peaks = {\n", " '20200718_000' : [2.98],\n", " '20200606_001' : [1.41],\n", "# '20200607_000' : [0],\n", "# '20200524_002' : [0],\n", " '20200109_004' : [2.94]\n", "}" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ab4f31fe698f4c65a1b098d5084ce6c7", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "20200718_000 [1, 2, 3, 4, 5]\n", "20200606_001 [0, 5, 6]\n", "20200109_004 [0, 1, 2, 3]\n" ] } ], "source": [ "# hfig,ax = create_fig()\n", "hfig = plt.figure(figsize=[8,5])\n", "ax = hfig.add_axes([0.2,0.2,0.7,0.7],frameon=False)\n", "\n", "for name,trials in minresponse_expts.items():\n", " print(name,trials)\n", " \n", " xtime = np.linspace(0,50,np.shape(minresponse_dict[name])[0])\n", "\n", " plt.plot(np.nanmean(minresponse_dict[name][:,trials],1)-\n", " np.nanmean(minresponse_dict[name][:,trials],1)[0],\n", " linewidth=0.5);\n", "\n", "# plt.plot(xtime_model, R_wavs[:,0],color='grey',linewidth=2)\n", " \n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "# plt.xlim(-2,45)\n", "# plt.ylim(-1.5,4)\n", "# ax.set_yticks([15,20])\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time (msec)');\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9d23ad465dbb43ccbd8c5673529512ed", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "20200718_000 [1, 2, 3, 4, 5]\n", "20200606_001 [0, 5, 6]\n", "20200109_004 [0, 1, 2, 3]\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b7a7dabc89364951a9d4a2e199b68772", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "20200718_000 [1, 2, 3, 4, 5]\n", "20200606_001 [0, 5, 6]\n", "20200109_004 [0, 1, 2, 3]\n" ] } ], "source": [ "hfig,ax = create_fig()\n", "# hfig = plt.figure(figsize=[5,5])\n", "# ax = hfig.add_axes([0.2,0.2,0.7,0.7],frameon=False)\n", "\n", "for name,trials in minresponse_expts.items():\n", " print(name,trials)\n", " \n", " xtime = np.linspace(0,50,np.shape(minresponse_dict[name])[0])\n", "\n", " plt.plot(xtime-mean_onsets[name],(np.mean(minresponse_dict[name][:,trials],1)-\n", " np.mean(minresponse_dict[name][:,trials],1)[mean_offsets[name]])/mean_peaks[name],\n", " color='black',linewidth=0.5);\n", "\n", "plt.plot(xtime_model, R_wavs[:,0]/np.max(R_wavs[:,0]),color='grey',linewidth=3)\n", " \n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(-2,45)\n", "plt.ylim(-0.25,1.25)\n", "# ax.set_yticks([15,20])\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time (msec)');\n", "plt.show()\n", "\n", "figsave(figure_folder,'S4_miniPSP_SGC_ModelOverlay_Norm')\n", "\n", "hfig,ax = create_fig()\n", "# hfig = plt.figure(figsize=[5,5])\n", "# ax = hfig.add_axes([0.2,0.2,0.7,0.7],frameon=False)\n", "\n", "for name,trials in minresponse_expts.items():\n", " print(name,trials)\n", " \n", " xtime = np.linspace(0,50,np.shape(minresponse_dict[name])[0])\n", "\n", " plt.plot(xtime-mean_onsets[name],(np.mean(minresponse_dict[name][:,trials],1)-\n", " np.mean(minresponse_dict[name][:,trials],1)[mean_offsets[name]]),\n", " color='black',linewidth=0.5);\n", "\n", "# plt.plot(xtime_model, R_wavs[:,0]/np.max(R_wavs[:,0]),color='grey',linewidth=3)\n", " \n", "sns.despine(hfig)\n", "ax.set_xticks(np.arange(0,55,10))\n", "plt.xlim(-2,45)\n", "plt.ylim(-0.5,3.2)\n", "# ax.set_yticks([15,20])\n", "ax.set_frame_on(True)\n", "yax = ax.spines[\"left\"]\n", "yax.set_visible(False)\n", "ax.set_xlabel('Time (msec)');\n", "plt.show()\n", "\n", "figsave(figure_folder,'S4_miniPSP_SGC')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Hyperparameterize model Figure S4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## analyze simulation results from RunSimulation_hyperparameterize.py that saved results to h5" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def get_response_amp_atdelay(results,results_onset,lmi_delay):\n", " amp = []\n", " for i,rmat in enumerate(np.moveaxis(results, [0, 1, 2], [-1, -2, -3])):\n", " rmat = rmat.T\n", " ronset = results_onset[:,i]\n", "\n", " t0ind = np.array([np.argmax(xtime>=r) for r in ronset]).astype('float')\n", " t0ind[t0ind==0] = np.nan\n", " tind = np.array([np.argmax(xtime>=(r+lmi_delay)) for r in ronset]).astype('float')\n", " tind[tind==0] = np.nan\n", "\n", " amp_ = []\n", " for o,t,r in zip(t0ind,tind,rmat):\n", " if np.isnan(o):\n", " amp_.append(np.nan)\n", " if ~np.isnan(o):\n", " amp_.append(r[int(t)]-r[int(o)])\n", " amp.append(np.array(amp_).T)\n", " amp = np.array(amp).T\n", " return amp\n", "\n", "def get_response_amp_peak(results):\n", " amp = []\n", " for rmat in np.moveaxis(results, [0, 1, 2], [-1, -2, -3]):\n", " amp_ = [np.max(r)-r[0] for r in rmat.T]\n", " amp.append(np.array(amp_).T)\n", " amp = np.array(amp).T\n", " return amp" ] }, { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1ce820f9bc8d40fba8c7105321acfe32", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "results_path = top_dir / 'data_processed'\n", "results_path = results_path / 'simulation_results_4inputs.h5'\n", "with h5py.File(results_path, 'a') as h5file:\n", " group = h5file.get('results')\n", " randtrial = randint(np.shape(np.array(group['subsamp']))[2])\n", " plt.figure()\n", " plt.plot(np.array(group['subsamp'])[:,:,randtrial].T);\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['homog_all', 'homog_all_onset', 'homog_isi', 'homog_isi_onset', 'homog_pspike', 'homog_pspike_onset', 'subsamp', 'subsamp_onset']\n", "['n_inputs', 'n_runs', 'stimamp', 'xtime']\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2230bbebefe441798cef08bcb68c5bcf", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "results_path = top_dir / 'data_processed'\n", "results_path = results_path / 'simulation_results_4inputs.h5'\n", "lmi_delay = 5\n", "\n", "conditions = '4input_lmi5'\n", "\n", "\n", "h5file = h5py.File(results_path, 'r')\n", "print(list(h5file['results'].keys()))\n", "\n", "xtime = np.array(h5file['metadata']['xtime'])\n", "x = np.array(h5file['metadata']['stimamp'])\n", "subsamp = np.array(h5file['results']['subsamp'])\n", "\n", "subsamp = np.array(h5file['results']['subsamp'])\n", "homog_isi = np.array(h5file['results']['homog_isi'])\n", "homog_pspike = np.array(h5file['results']['homog_pspike'])\n", "homog_all = np.array(h5file['results']['homog_all'])\n", "\n", "subsamp_onset = np.array(h5file['results']['subsamp_onset'])\n", "homog_isi_onset = np.array(h5file['results']['homog_isi_onset'])\n", "homog_pspike_onset = np.array(h5file['results']['homog_pspike_onset'])\n", "homog_all_onset = np.array(h5file['results']['homog_all_onset'])\n", "\n", "print(list(h5file['metadata'].keys()))\n", "\n", "xtime = np.array(h5file['metadata']['xtime'])\n", "stimamp = np.array(h5file['metadata']['stimamp'])\n", "\n", "h5file.close()\n", "\n", "\n", "hfig,ax = create_fig_tuning()\n", "ax.set_ylabel('Mean Response Amplitude (mV)')\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.75)\n", "# ax.set_ylim(-5,105)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "\n", "amp = get_response_amp_atdelay(subsamp,subsamp_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['black'], capsize=2)\n", "\n", "amp = get_response_amp_atdelay(homog_isi,homog_isi_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['purple'], capsize=2)\n", "\n", "amp = get_response_amp_atdelay(homog_pspike,homog_pspike_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['orange'], capsize=2)\n", "\n", "amp = get_response_amp_atdelay(homog_all,homog_all_onset,lmi_delay)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['blue'], capsize=2)\n", "\n", "\n", "figsave(figure_folder,'S4_model_hyperparameterize_'+conditions)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['homog_all', 'homog_all_onset', 'homog_isi', 'homog_isi_onset', 'homog_pspike', 'homog_pspike_onset', 'subsamp', 'subsamp_onset']\n", "['n_inputs', 'n_runs', 'stimamp', 'xtime']\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ef30d990e8e547f29a12b350c867e969", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureCanvasNbAgg()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "results_path = top_dir / 'data_processed'\n", "results_path = results_path / 'simulation_results_7inputs.h5'\n", "\n", "conditions = '7input_peakamp'\n", "\n", "\n", "h5file = h5py.File(results_path, 'r')\n", "print(list(h5file['results'].keys()))\n", "\n", "xtime = np.array(h5file['metadata']['xtime'])\n", "x = np.array(h5file['metadata']['stimamp'])\n", "subsamp = np.array(h5file['results']['subsamp'])\n", "\n", "subsamp = np.array(h5file['results']['subsamp'])\n", "homog_isi = np.array(h5file['results']['homog_isi'])\n", "homog_pspike = np.array(h5file['results']['homog_pspike'])\n", "homog_all = np.array(h5file['results']['homog_all'])\n", "\n", "subsamp_onset = np.array(h5file['results']['subsamp_onset'])\n", "homog_isi_onset = np.array(h5file['results']['homog_isi_onset'])\n", "homog_pspike_onset = np.array(h5file['results']['homog_pspike_onset'])\n", "homog_all_onset = np.array(h5file['results']['homog_all_onset'])\n", "\n", "print(list(h5file['metadata'].keys()))\n", "\n", "xtime = np.array(h5file['metadata']['xtime'])\n", "stimamp = np.array(h5file['metadata']['stimamp'])\n", "\n", "h5file.close()\n", "\n", "\n", "hfig,ax = create_fig_tuning()\n", "ax.set_ylabel('Mean Response Amplitude (mV)')\n", "ax.set_xlabel('Stimulus amplitude \\n (% change)',linespacing=0.75)\n", "# ax.set_ylim(-5,105)\n", "ax.set_xlim(-47,47)\n", "xticks([-40,-20,0,20,40]);\n", "\n", "amp = get_response_amp_peak(subsamp)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['black'], capsize=2)\n", "\n", "amp = get_response_amp_peak(homog_isi)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['purple'], capsize=2)\n", "\n", "amp = get_response_amp_peak(homog_pspike)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['orange'], capsize=2)\n", "\n", "amp = get_response_amp_peak(homog_all)\n", "plt.errorbar(x,\n", " np.nanmean(amp,1),\n", " yerr=stats.sem(amp,1),marker='o',markersize=2,\n", " linestyle=\"None\",color = sns.xkcd_rgb['blue'], capsize=2)\n", "\n", "\n", "figsave(figure_folder,'S4_model_hyperparameterize_'+conditions)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.12" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "367.797px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 4 }