diff --git a/notebooks/01-configure.ipynb b/notebooks/01-configure.ipynb deleted file mode 100644 index 24f82f9..0000000 --- a/notebooks/01-configure.ipynb +++ /dev/null @@ -1,249 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "15bdef0d-bd52-49e6-87a0-d569006149a0", - "metadata": { - "tags": [] - }, - "source": [ - "# DataJoint configuration\n", - "\n", - "## Setup - Working Directory\n", - "\n", - "To run the array ephys workflow, we need to properly set up the DataJoint configuration. The configuration can be saved in a local directory as `dj_local_conf.json` or at your root directory as a hidden file. This notebook walks you through the setup process.\n", - "\n", - "**The configuration only needs to be set up once**, if you have gone through the configuration before, directly go to [02-workflow-structure](02-workflow-structure-optional.ipynb)." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "dc2dc935", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "if os.path.basename(os.getcwd()) == \"notebooks\": os.chdir(\"..\")\n", - "import datajoint as dj" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup - Credentials\n", - "\n", - "Now let's set up the host, user and password in the `dj.config` global variable" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import getpass\n", - "dj.config[\"database.host\"] = \"{YOUR_HOST}\" # CodeBook users should omit this\n", - "dj.config[\"database.user\"] = \"{YOUR_USERNAME}\"\n", - "dj.config[\"database.password\"] = getpass.getpass() # enter the password securily" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You should be able to connect to the database at this stage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dj.conn()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup - `dj.config['custom']`\n", - "\n", - "The major component of the current workflow is the [DataJoint Array Ephys Element](https://github.com/datajoint/element-array-ephys). Array Ephys Element requires configurations in the field `custom` in `dj.config`:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Database prefix\n", - "\n", - "Giving a prefix to schema could help on the configuration of privilege settings. For example, if we set prefix `neuro_`, every schema created with the current workflow will start with `neuro_`, e.g. `neuro_lab`, `neuro_subject`, `neuro_ephys` etc.\n", - "\n", - "The prefix could be configurated in `dj.config` as follows. CodeBook users should keep their username as the prefix for schema for declaration permissions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "username_as_prefix = dj.config[\"database.user\"] + \"_\"\n", - "dj.config[\"custom\"] = {\"database.prefix\": username_as_prefix}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Root directories for raw/processed data\n", - "\n", - "`ephys_root_data_dir` field indicates the root directory for\n", - "+ The **ephys raw data** from SpikeGLX or OpenEphys, including `*{.ap,lf}.{bin,meta}`\n", - "+ The **clustering results** from kilosort2 (e.g. `spike_{times,clusters}.npy`\n", - "\n", - "The root path typically **do not** contain information of subjects or sessions, all data from subjects/sessions should be subdirectories in the root path.\n", - "\n", - "- In the example dataset downloaded with [these instructions](00-data-download-optional.ipynb), `/tmp/test_data` will be the root. \n", - "- For CodeBook users, the root is `/home/inbox/0.1.0a4/`\n", - "\n", - "```\n", - "- subject6\n", - " - session1\n", - " - towersTask_g0_imec0\n", - " - towersTask_g0_t0_nidq.meta\n", - " - towersTask_g0_t0.nidq.bin\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# If there is only one root path.\n", - "dj.config[\"custom\"][\"ephys_root_data_dir\"] = \"/tmp/test_data\"\n", - "# If there are multiple possible root paths:\n", - "dj.config[\"custom\"][\"ephys_root_data_dir\"] = [\n", - " \"/tmp/test_data/workflow_ephys_data1/\",\n", - " \"/tmp/test_data/workflow_ephys_data2/\",\n", - " \"/tmp/test_data/workflow_localization/\", \n", - " \"/home/inbox/0.1.0a4/workflow_ephys_data1/\",\n", - " \"/home/inbox/0.1.0a4/workflow_ephys_data2/\",\n", - " \"/home/inbox/0.1.0a4/workflow_localization/\"\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dj.config" - ] - }, - { - "cell_type": "markdown", - "id": "f7733450", - "metadata": {}, - "source": [ - "+ In the database, every path for the ephys raw data is **relative to root path(s)** to allow for the absolute path to be configured for **each machine**. When transferring data, we just need to change the root directory in the config file.\n", - "\n", - "+ DataJoint Elements use `pathlib.Path()` to maintain path information in **POSIX standards** (Unix/Linux), with `/`. The path conversion for machines of any operating system is taken care of inside the elements." - ] - }, - { - "cell_type": "markdown", - "id": "26e5b2ff", - "metadata": {}, - "source": [ - "### Ephys Mode\n", - "\n", - "`element-array-ephys` offers 3 different schemas: `acute`, `chronic`, and `no-curation`. For more information about each, please visit the [electrophysiology description page](https://elements.datajoint.org/description/array_ephys/). This decision should be made before first activating the schema. Note: only `no-curation` is supported for export to NWB directly from the Element." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6d533d1c", - "metadata": {}, - "outputs": [], - "source": [ - "dj.config[\"custom\"][\"ephys_mode\"] = \"no-curation\" # or acute or chronic" - ] - }, - { - "cell_type": "markdown", - "id": "940ea19a", - "metadata": {}, - "source": [ - "## Save configuration\n", - "\n", - "With the proper configurations, we could save this as a file, either as a local json file, or a global file.\n", - "\n", - "Local configuration file is saved as `dj_local_conf.json` in current directory, which is great for project-specific settings.\n", - "\n", - "For first-time and CodeBook users, we recommend saving globally. This will create a hidden configuration file saved in your root directory, loaded whenever there is no local version to override it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dcc8b17b", - "metadata": {}, - "outputs": [], - "source": [ - "# dj.config.save_local()\n", - "dj.config.save_global()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Next Step" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "After the configuration, we will be able to review the workflow structure with [02-workflow-structure-optional](02-workflow-structure-optional.ipynb)." - ] - } - ], - "metadata": { - "jupytext": { - "formats": "ipynb,py_scripts//py" - }, - "kernelspec": { - "display_name": "Python 3.9.13 ('ele')", - "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.9.13" - }, - "vscode": { - "interpreter": { - "hash": "d00c4ad21a7027bf1726d6ae3a9a6ef39c8838928eca5a3d5f51f3eb68720410" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/02-workflow-structure-optional.ipynb b/notebooks/02-workflow-structure-optional.ipynb deleted file mode 100644 index 08da3e1..0000000 --- a/notebooks/02-workflow-structure-optional.ipynb +++ /dev/null @@ -1,559 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Introduction to the workflow structure" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook gives an overview of the workflow structure and introduces useful DataJoint tools for exploration.\n", - "+ DataJoint needs to be configured before running this notebook. If you haven't done so, refer to notebook [01-configure](01-configure.ipynb).\n", - "+ If you are familar with DataJoint workflow structures, proceed to the next notebook [03-process](03-process.ipynb) directly to run this workflow.\n", - "+ For a more thorough introduction of DataJoint functions, please visit our [general documentation](https://docs.datajoint.org/python/v0.13/index.html)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To load the local configuration, we will change the directory to the package root." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "if os.path.basename(os.getcwd()) == \"notebooks\":\n", - " os.chdir(\"..\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Schemas, Diagrams and Tables" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Schemas are conceptually related sets of tables. By importing schemas from `workflow_array_ephys.pipeline`, we'll declare the tables on the server with the prefix in the config (if we have permission to do so). If these tables are already declared, we'll gain access. \n", - "\n", - "- `dj.list_schemas()` lists all schemas a user has access to in the current database\n", - "- `.schema.list_tables()` will provide names for each table in the format used under the hood." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-09-15 09:10:04,082][INFO]: Connecting cbroz@tutorial-db.datajoint.io:3306\n", - "[2022-09-15 09:10:04,591][INFO]: Connected cbroz@tutorial-db.datajoint.io:3306\n" - ] - } - ], - "source": [ - "import datajoint as dj\n", - "from workflow_array_ephys.pipeline import lab, subject, session, probe, ephys" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Schema `cbroz_probe`" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.schema" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "title": "Each module imported above corresponds to one schema inside the database. For example, `ephys` corresponds to `neuro_ephys` schema in the database." - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['#acquisition_software',\n", - " '#clustering_method',\n", - " 'probe_insertion',\n", - " '#cluster_quality_label',\n", - " '#clustering_param_set',\n", - " '_ephys_recording',\n", - " '_ephys_recording__ephys_file',\n", - " 'insertion_location',\n", - " '_l_f_p',\n", - " '_l_f_p__electrode',\n", - " 'clustering_task',\n", - " '_clustering',\n", - " '_curated_clustering',\n", - " '_curated_clustering__unit',\n", - " '_waveform_set',\n", - " '_waveform_set__peak_waveform',\n", - " '_waveform_set__waveform']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.schema.list_tables()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`dj.Diagram()` plots tables and dependencies in a schema. To see additional upstream or downstream connections, add `- N` or `+ N`.\n", - "\n", - "- `probe`: Neuropixels-based probe information\n", - "- `ephys`: Electrophysiology data" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "title": "`dj.Diagram()`: plot tables and dependencies" - }, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\nprobe.ElectrodeConfig\n\n\nprobe.ElectrodeConfig\n\n\n\n\n\nprobe.ElectrodeConfig.Electrode\n\n\nprobe.ElectrodeConfig.Electrode\n\n\n\n\n\nprobe.ElectrodeConfig->probe.ElectrodeConfig.Electrode\n\n\n\n\nprobe.ProbeType.Electrode\n\n\nprobe.ProbeType.Electrode\n\n\n\n\n\nprobe.ProbeType.Electrode->probe.ElectrodeConfig.Electrode\n\n\n\n\nprobe.Probe\n\n\nprobe.Probe\n\n\n\n\n\nprobe.ProbeType\n\n\nprobe.ProbeType\n\n\n\n\n\nprobe.ProbeType->probe.ElectrodeConfig\n\n\n\n\nprobe.ProbeType->probe.ProbeType.Electrode\n\n\n\n\nprobe.ProbeType->probe.Probe\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# plot diagram for all tables in a schema\n", - "dj.Diagram(probe)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.Float64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n", - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n", - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.UInt64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n", - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.Float64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n", - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n", - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.UInt64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n" - ] - }, - { - "data": { - "image/svg+xml": "\n\n\n\n\n`cbroz_lab`.`#skull_reference`\n\n`cbroz_lab`.`#skull_reference`\n\n\n\nephys.InsertionLocation\n\n\nephys.InsertionLocation\n\n\n\n\n\n`cbroz_lab`.`#skull_reference`->ephys.InsertionLocation\n\n\n\n\nlab.Project\n\n\nlab.Project\n\n\n\n\n\nsession.ProjectSession\n\n\nsession.ProjectSession\n\n\n\n\n\nlab.Project->session.ProjectSession\n\n\n\n\nephys.CuratedClustering.Unit\n\n\nephys.CuratedClustering.Unit\n\n\n\n\n\nephys.WaveformSet.Waveform\n\n\nephys.WaveformSet.Waveform\n\n\n\n\n\nephys.CuratedClustering.Unit->ephys.WaveformSet.Waveform\n\n\n\n\nephys.WaveformSet.PeakWaveform\n\n\nephys.WaveformSet.PeakWaveform\n\n\n\n\n\nephys.CuratedClustering.Unit->ephys.WaveformSet.PeakWaveform\n\n\n\n\nprobe.Probe\n\n\nprobe.Probe\n\n\n\n\n\nephys.ProbeInsertion\n\n\nephys.ProbeInsertion\n\n\n\n\n\nprobe.Probe->ephys.ProbeInsertion\n\n\n\n\nephys.LFP\n\n\nephys.LFP\n\n\n\n\n\nephys.LFP.Electrode\n\n\nephys.LFP.Electrode\n\n\n\n\n\nephys.LFP->ephys.LFP.Electrode\n\n\n\n\nprobe.ElectrodeConfig.Electrode\n\n\nprobe.ElectrodeConfig.Electrode\n\n\n\n\n\nprobe.ElectrodeConfig.Electrode->ephys.CuratedClustering.Unit\n\n\n\n\nprobe.ElectrodeConfig.Electrode->ephys.WaveformSet.Waveform\n\n\n\n\nprobe.ElectrodeConfig.Electrode->ephys.LFP.Electrode\n\n\n\n\nephys.ClusteringMethod\n\n\nephys.ClusteringMethod\n\n\n\n\n\nephys.ClusteringParamSet\n\n\nephys.ClusteringParamSet\n\n\n\n\n\nephys.ClusteringMethod->ephys.ClusteringParamSet\n\n\n\n\nsubject.Subject\n\n\nsubject.Subject\n\n\n\n\n\nsession.Session\n\n\nsession.Session\n\n\n\n\n\nsubject.Subject->session.Session\n\n\n\n\nsession.SessionDirectory\n\n\nsession.SessionDirectory\n\n\n\n\n\nsession.Session->session.SessionDirectory\n\n\n\n\nsession.Session->session.ProjectSession\n\n\n\n\nsession.SessionExperimenter\n\n\nsession.SessionExperimenter\n\n\n\n\n\nsession.Session->session.SessionExperimenter\n\n\n\n\nsession.SessionNote\n\n\nsession.SessionNote\n\n\n\n\n\nsession.Session->session.SessionNote\n\n\n\n\nsession.Session->ephys.ProbeInsertion\n\n\n\n\nephys.ClusteringTask\n\n\nephys.ClusteringTask\n\n\n\n\n\nephys.Clustering\n\n\nephys.Clustering\n\n\n\n\n\nephys.ClusteringTask->ephys.Clustering\n\n\n\n\nephys.WaveformSet\n\n\nephys.WaveformSet\n\n\n\n\n\nephys.WaveformSet->ephys.WaveformSet.Waveform\n\n\n\n\nephys.WaveformSet->ephys.WaveformSet.PeakWaveform\n\n\n\n\nephys.EphysRecording\n\n\nephys.EphysRecording\n\n\n\n\n\nephys.EphysRecording->ephys.LFP\n\n\n\n\nephys.EphysRecording->ephys.ClusteringTask\n\n\n\n\nephys.EphysRecording.EphysFile\n\n\nephys.EphysRecording.EphysFile\n\n\n\n\n\nephys.EphysRecording->ephys.EphysRecording.EphysFile\n\n\n\n\nephys.CuratedClustering\n\n\nephys.CuratedClustering\n\n\n\n\n\nephys.Clustering->ephys.CuratedClustering\n\n\n\n\nephys.AcquisitionSoftware\n\n\nephys.AcquisitionSoftware\n\n\n\n\n\nephys.AcquisitionSoftware->ephys.EphysRecording\n\n\n\n\nprobe.ElectrodeConfig\n\n\nprobe.ElectrodeConfig\n\n\n\n\n\nprobe.ElectrodeConfig->probe.ElectrodeConfig.Electrode\n\n\n\n\nprobe.ElectrodeConfig->ephys.EphysRecording\n\n\n\n\nephys.CuratedClustering->ephys.CuratedClustering.Unit\n\n\n\n\nephys.CuratedClustering->ephys.WaveformSet\n\n\n\n\nephys.ClusteringParamSet->ephys.ClusteringTask\n\n\n\n\nlab.User\n\n\nlab.User\n\n\n\n\n\nlab.User->session.SessionExperimenter\n\n\n\n\nephys.ClusterQualityLabel\n\n\nephys.ClusterQualityLabel\n\n\n\n\n\nephys.ClusterQualityLabel->ephys.CuratedClustering.Unit\n\n\n\n\nephys.ProbeInsertion->ephys.EphysRecording\n\n\n\n\nephys.ProbeInsertion->ephys.InsertionLocation\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dj.Diagram(ephys) + dj.Diagram(session) - 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Table Types\n", - "\n", - "- **Manual table**: green box, manually inserted table, expect new entries daily, e.g. Subject, ProbeInsertion. \n", - "- **Lookup table**: gray box, pre inserted table, commonly used for general facts or parameters. e.g. Strain, ClusteringMethod, ClusteringParamSet. \n", - "- **Imported table**: blue oval, auto-processing table, the processing depends on the importing of external files. e.g. process of Clustering requires output files from kilosort2. \n", - "- **Computed table**: red circle, auto-processing table, the processing does not depend on files external to the database, commonly used for \n", - "- **Part table**: plain text, as an appendix to the master table, all the part entries of a given master entry represent a intact set of the master entry. e.g. Unit of a CuratedClustering.\n", - "\n", - "### Table Links\n", - "\n", - "- **One-to-one primary**: thick solid line, share the exact same primary key, meaning the child table inherits all the primary key fields from the parent table as its own primary key. \n", - "- **One-to-many primary**: thin solid line, inherit the primary key from the parent table, but have additional field(s) as part of the primary key as well\n", - "- **Secondary dependency**: dashed line, the child table inherits the primary key fields from parent table as its own secondary attribute." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Common Table Functions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "- `()` show table contents\n", - "- `heading` shows attribute definitions\n", - "- `describe()` show table definition with foreign key references" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "title": "Each datajoint table class inside the module corresponds to a table inside the schema. For example, the class `ephys.EphysRecording` correponds to the table `_ephys_recording` in the schema `neuro_ephys` in the database." - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Ephys recording from a probe insertion for a given session.\n", - "
\n", - "
\n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

acq_software

\n", - " \n", - "
\n", - "

sampling_rate

\n", - " (Hz)\n", - "
\n", - "

recording_datetime

\n", - " datetime of the recording from this probe\n", - "
\n", - "

recording_duration

\n", - " (seconds) duration of the recording from this probe\n", - "
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3SpikeGLX30000.62021-01-15 11:16:381907.94
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- SpikeGLX 30000.6 2021-01-15 11: 1907.94 \n", - " (Total: 1)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# preview table columns and contents in a table\n", - "ephys.EphysRecording()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "# Clustering Procedure\n", - "subject : varchar(8) # \n", - "session_datetime : datetime # \n", - "insertion_number : tinyint unsigned # \n", - "paramset_idx : smallint # \n", - "---\n", - "clustering_time : datetime # time of generation of this set of clustering results\n", - "package_version=\"\" : varchar(16) # " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.Clustering.heading" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# A set of spike waveforms for units out of a given CuratedClustering\n", - "-> ephys.CuratedClustering\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "'# A set of spike waveforms for units out of a given CuratedClustering\\n-> ephys.CuratedClustering\\n'" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.WaveformSet.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "lines_to_next_cell": 0, - "title": "probe" - }, - "source": [ - "## Other Elements installed with the workflow\n", - "\n", - "- [`lab`](https://github.com/datajoint/element-lab): lab management related information, such as Lab, User, Project, Protocol, Source.\n", - "- [`subject`](https://github.com/datajoint/element-animal): (element-animal) general animal information, User, Genetic background, Death etc.\n", - "- [`session`](https://github.com/datajoint/element-session): General information of experimental sessions.\n", - "\n", - "For more information about these Elements, see [workflow session](https://github.com/datajoint/workflow-session)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dj.Diagram(lab)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\nsubject.Allele.Source\n\n\nsubject.Allele.Source\n\n\n\n\n\nsubject.Subject\n\n\nsubject.Subject\n\n\n\n\n\nsubject.SubjectCullMethod\n\n\nsubject.SubjectCullMethod\n\n\n\n\n\nsubject.Subject->subject.SubjectCullMethod\n\n\n\n\nsubject.Subject.Lab\n\n\nsubject.Subject.Lab\n\n\n\n\n\nsubject.Subject->subject.Subject.Lab\n\n\n\n\nsubject.Subject.User\n\n\nsubject.Subject.User\n\n\n\n\n\nsubject.Subject->subject.Subject.User\n\n\n\n\nsubject.Subject.Line\n\n\nsubject.Subject.Line\n\n\n\n\n\nsubject.Subject->subject.Subject.Line\n\n\n\n\nsubject.Subject.Protocol\n\n\nsubject.Subject.Protocol\n\n\n\n\n\nsubject.Subject->subject.Subject.Protocol\n\n\n\n\nsubject.Subject.Strain\n\n\nsubject.Subject.Strain\n\n\n\n\n\nsubject.Subject->subject.Subject.Strain\n\n\n\n\nsubject.Subject.Source\n\n\nsubject.Subject.Source\n\n\n\n\n\nsubject.Subject->subject.Subject.Source\n\n\n\n\nsubject.Zygosity\n\n\nsubject.Zygosity\n\n\n\n\n\nsubject.Subject->subject.Zygosity\n\n\n\n\nsubject.SubjectDeath\n\n\nsubject.SubjectDeath\n\n\n\n\n\nsubject.Subject->subject.SubjectDeath\n\n\n\n\nsubject.Strain\n\n\nsubject.Strain\n\n\n\n\n\nsubject.Strain->subject.Subject.Strain\n\n\n\n\nsubject.Line\n\n\nsubject.Line\n\n\n\n\n\nsubject.Line->subject.Subject.Line\n\n\n\n\nsubject.Line.Allele\n\n\nsubject.Line.Allele\n\n\n\n\n\nsubject.Line->subject.Line.Allele\n\n\n\n\nsubject.Allele\n\n\nsubject.Allele\n\n\n\n\n\nsubject.Allele->subject.Allele.Source\n\n\n\n\nsubject.Allele->subject.Zygosity\n\n\n\n\nsubject.Allele->subject.Line.Allele\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dj.Diagram(subject)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "title": "[subject](https://github.com/datajoint/element-animal): contains the basic information of subject, including Strain, Line, Subject, Zygosity, and SubjectDeath information." - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# Animal Subject\n", - "subject : varchar(8) \n", - "---\n", - "sex : enum('M','F','U') \n", - "subject_birth_date : date \n", - "subject_description=\"\" : varchar(1024) \n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "'# Animal Subject\\nsubject : varchar(8) \\n---\\nsex : enum(\\'M\\',\\'F\\',\\'U\\') \\nsubject_birth_date : date \\nsubject_description=\"\" : varchar(1024) \\n'" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "subject.Subject.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\nsession.SessionDirectory\n\n\nsession.SessionDirectory\n\n\n\n\n\nsession.Session\n\n\nsession.Session\n\n\n\n\n\nsession.Session->session.SessionDirectory\n\n\n\n\nsession.SessionExperimenter\n\n\nsession.SessionExperimenter\n\n\n\n\n\nsession.Session->session.SessionExperimenter\n\n\n\n\nsession.SessionNote\n\n\nsession.SessionNote\n\n\n\n\n\nsession.Session->session.SessionNote\n\n\n\n\nsession.ProjectSession\n\n\nsession.ProjectSession\n\n\n\n\n\nsession.Session->session.ProjectSession\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dj.Diagram(session)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Summary and next step\n", - "\n", - "+ This notebook introduced the overall structures of the schemas and tables in the workflow and relevant tools to explore the schema structure and table definitions.\n", - "\n", - "+ In the next notebook [03-process](03-process.ipynb), we will further introduce the detailed steps running through the pipeline and table contents accordingly." - ] - } - ], - "metadata": { - "jupytext": { - "encoding": "# -*- coding: utf-8 -*-", - "formats": "ipynb,py" - }, - "kernelspec": { - "display_name": "Python 3.9.13 ('ele')", - "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.9.13" - }, - "vscode": { - "interpreter": { - "hash": "d00c4ad21a7027bf1726d6ae3a9a6ef39c8838928eca5a3d5f51f3eb68720410" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/03-process.ipynb b/notebooks/03-process.ipynb deleted file mode 100644 index 07aada2..0000000 --- a/notebooks/03-process.ipynb +++ /dev/null @@ -1,3108 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Interatively run array ephys workflow" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook walks you through the steps in detail to run the ephys workflow.\n", - "\n", - "+ If you need a more automatic approach to run the workflow, refer to [03-automate](03-automate.ipynb)\n", - "+ The workflow requires neuropixels meta file and kilosort output data. If you haven't configure the paths, refer to [01-configure](01-configure.ipynb)\n", - "+ To overview the schema structures, refer to [02-workflow-structure](02-workflow-structure.ipynb)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's will change the directory to the package root to load configuration and also import relevant schemas." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "if os.path.basename(os.getcwd()) == \"notebooks\": os.chdir(\"..\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-09-15 09:12:40,845][INFO]: Connecting cbroz@tutorial-db.datajoint.io:3306\n", - "[2022-09-15 09:12:41,306][INFO]: Connected cbroz@tutorial-db.datajoint.io:3306\n" - ] - } - ], - "source": [ - "import datajoint as dj\n", - "from workflow_array_ephys.pipeline import lab, subject, session, probe, ephys" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Ingestion of metadata: subjects, sessions, probes, and probe insertions\n", - "\n", - "The first step to run through the workflow is to insert metadata into the following tables:\n", - "\n", - "+ subject.Subject: an animal subject for experiments\n", - "+ session.Session: an experimental session performed on an animal subject\n", - "+ session.SessionDirectory: directory to the data for a given experimental session\n", - "+ probe.Probe: probe information\n", - "+ ephys.ProbeInsertion: probe insertion into an animal subject during a given experimental session" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\nsubject.Subject\n\n\nsubject.Subject\n\n\n\n\n\nsession.Session\n\n\nsession.Session\n\n\n\n\n\nsubject.Subject->session.Session\n\n\n\n\nephys.ProbeInsertion\n\n\nephys.ProbeInsertion\n\n\n\n\n\nsession.Session->ephys.ProbeInsertion\n\n\n\n\nprobe.Probe\n\n\nprobe.Probe\n\n\n\n\n\nprobe.Probe->ephys.ProbeInsertion\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(\n", - " dj.Diagram(subject.Subject)\n", - " + dj.Diagram(session.Session)\n", - " + dj.Diagram(probe.Probe)\n", - " + dj.Diagram(ephys.ProbeInsertion)\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Our example dataset is for subject6, session1." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Ingest Subject" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "# Animal Subject\n", - "subject : varchar(8) # \n", - "---\n", - "sex : enum('M','F','U') # \n", - "subject_birth_date : date # \n", - "subject_description=\"\" : varchar(1024) # " - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "subject.Subject.heading" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Animal Subject\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

sex

\n", - " \n", - "
\n", - "

subject_birth_date

\n", - " \n", - "
\n", - "

subject_description

\n", - " \n", - "
subject5F2020-01-01rich
subject6M2020-01-03hneih_E105
\n", - " \n", - "

Total: 2

\n", - " " - ], - "text/plain": [ - "*subject sex subject_birth_ subject_descri\n", - "+----------+ +-----+ +------------+ +------------+\n", - "subject5 F 2020-01-01 rich \n", - "subject6 M 2020-01-03 hneih_E105 \n", - " (Total: 2)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# insert entries with insert1() or insert(), with all required attributes specified in a dictionary\n", - "subject.Subject.insert1(\n", - " dict(subject=\"subject6\", sex=\"M\", subject_birth_date=\"2020-01-04\"),\n", - " skip_duplicates=True,\n", - ") # skip_duplicates avoids error when inserting entries with duplicated primary keys\n", - "subject.Subject()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Ingest Session" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-> subject.Subject\n", - "session_datetime : datetime \n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "'-> subject.Subject\\nsession_datetime : datetime \\n'" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "session.Session.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "# \n", - "subject : varchar(8) # \n", - "session_datetime : datetime # " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "session.Session.heading" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
subject52018-07-03 20:32:28
subject62021-01-15 11:16:38
\n", - " \n", - "

Total: 2

\n", - " " - ], - "text/plain": [ - "*subject *session_datet\n", - "+----------+ +------------+\n", - "subject5 2018-07-03 20:\n", - "subject6 2021-01-15 11:\n", - " (Total: 2)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "session_key = dict(subject=\"subject6\", session_datetime=\"2021-01-15 11:16:38\")\n", - "session.Session.insert1(session_key, skip_duplicates=True)\n", - "session.Session()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Ingest SessionDirectory" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-> session.Session\n", - "---\n", - "session_dir : varchar(256) # Path to the data directory for a session\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "'-> session.Session\\n---\\nsession_dir : varchar(256) # Path to the data directory for a session\\n'" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "session.SessionDirectory.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "# \n", - "subject : varchar(8) # \n", - "session_datetime : datetime # \n", - "---\n", - "session_dir : varchar(256) # Path to the data directory for a session" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "session.SessionDirectory.heading" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

session_dir

\n", - " Path to the data directory for a session\n", - "
subject52018-07-03 20:32:28subject5/session1
subject62021-01-15 11:16:38subject6/session1
\n", - " \n", - "

Total: 2

\n", - " " - ], - "text/plain": [ - "*subject *session_datet session_dir \n", - "+----------+ +------------+ +------------+\n", - "subject5 2018-07-03 20: subject5/sessi\n", - "subject6 2021-01-15 11: subject6/sessi\n", - " (Total: 2)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "session.SessionDirectory.insert1(\n", - " dict(\n", - " subject=\"subject6\",\n", - " session_datetime=\"2021-01-15 11:16:38\",\n", - " session_dir=\"subject6/session1\",\n", - " ),\n", - " skip_duplicates=True,\n", - ")\n", - "session.SessionDirectory()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note**:\n", - "\n", - "the `session_dir` needs to be:\n", - "+ a directory **relative to** the `ephys_root_path` in the configuration file, refer to [01-configure](01-configure.ipynb) for more information.\n", - "+ a directory in POSIX format (Unix/Linux), with `/`, the difference in Operating system will be taken care of by the elements." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Ingest Probe" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "# Represent a physical probe with unique identification\n", - "probe : varchar(32) # unique identifier for this model of probe (e.g. serial number)\n", - "---\n", - "probe_type : varchar(32) # e.g. neuropixels_1.0\n", - "probe_comment=\"\" : varchar(1000) # " - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.Probe.heading" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Represent a physical probe with unique identification\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

probe_comment

\n", - " \n", - "
17131311651neuropixels 1.0 - 3B
262716621neuropixels 1.0 - 3A
714000838neuropixels 1.0 - 3A
\n", - " \n", - "

Total: 3

\n", - " " - ], - "text/plain": [ - "*probe probe_type probe_comment \n", - "+------------+ +------------+ +------------+\n", - "17131311651 neuropixels 1. \n", - "262716621 neuropixels 1. \n", - "714000838 neuropixels 1. \n", - " (Total: 3)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.Probe.insert1(\n", - " dict(probe=\"17131311651\", probe_type=\"neuropixels 1.0 - 3B\"), skip_duplicates=True\n", - ") # this info could be achieve from neuropixels meta file.\n", - "probe.Probe()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Ingest ProbeInsertion" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# Probe insertion implanted into an animal for a given session.\n", - "-> session.Session\n", - "insertion_number : tinyint unsigned \n", - "---\n", - "-> probe.Probe\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "'# Probe insertion implanted into an animal for a given session.\\n-> session.Session\\ninsertion_number : tinyint unsigned \\n---\\n-> probe.Probe\\n'" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ProbeInsertion.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "# Probe insertion implanted into an animal for a given session.\n", - "subject : varchar(8) # \n", - "session_datetime : datetime # \n", - "insertion_number : tinyint unsigned # \n", - "---\n", - "probe : varchar(32) # unique identifier for this model of probe (e.g. serial number)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ProbeInsertion.heading" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Probe insertion implanted into an animal for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
subject62021-01-15 11:16:38017131311651
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num probe \n", - "+----------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 0 17131311651 \n", - " (Total: 1)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ProbeInsertion.insert1(\n", - " dict(\n", - " subject=\"subject6\",\n", - " session_datetime=\"2021-01-15 11:16:38\",\n", - " insertion_number=0,\n", - " probe=\"17131311651\",\n", - " ),\n", - " skip_duplicates=True,\n", - ") # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", - "ephys.ProbeInsertion()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Automate this manual step\n", - "\n", - "In this workflow, these manual steps could be automated by:\n", - "1. Insert entries in files `/user_data/subjects.csv` and `/user_data/session.csv`\n", - "2. Extract user-specified information from `/user_data/subjects.csv` and `/user_data/sessions.csv` and insert to Subject and Session tables by running:\n", - "```\n", - "from workflow_array_ephys.ingest import ingest_subjects, ingest_sessions\n", - "ingest_subjects()\n", - "ingest_sessions()\n", - "```\n", - "`ingest_sessions` also extracts probe and probe insertion information automatically from the meta files.\n", - "\n", - "This is the regular routine for daily data processing, illustrated in notebook [04-automate](04-automate[optional].ipynb)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Populate EphysRecording" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we are ready to populate EphysRecording, a table for entries of ephys recording in a particular session." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\nprobe.ElectrodeConfig.Electrode\n\n\nprobe.ElectrodeConfig.Electrode\n\n\n\n\n\nephys.EphysRecording.EphysFile\n\n\nephys.EphysRecording.EphysFile\n\n\n\n\n\nephys.EphysRecording\n\n\nephys.EphysRecording\n\n\n\n\n\nephys.EphysRecording->ephys.EphysRecording.EphysFile\n\n\n\n\nephys.ProbeInsertion\n\n\nephys.ProbeInsertion\n\n\n\n\n\nephys.ProbeInsertion->ephys.EphysRecording\n\n\n\n\nprobe.ElectrodeConfig\n\n\nprobe.ElectrodeConfig\n\n\n\n\n\nprobe.ElectrodeConfig->probe.ElectrodeConfig.Electrode\n\n\n\n\nprobe.ElectrodeConfig->ephys.EphysRecording\n\n\n\n\nsession.Session\n\n\nsession.Session\n\n\n\n\n\nsession.Session->ephys.ProbeInsertion\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(\n", - " dj.Diagram(session.Session)\n", - " + (dj.Diagram(probe.ElectrodeConfig) + 1)\n", - " + dj.Diagram(ephys.EphysRecording)\n", - " + dj.Diagram(ephys.EphysRecording.EphysFile)\n", - ")\n", - "# +1 means plotting 1 more layer of the child tables" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 100%|████████████████████████████████████████████████████████████████████| 1/1 [00:02<00:00, 2.84s/it]\n" - ] - } - ], - "source": [ - "# The first argument specify a particular session to populate\n", - "ephys.EphysRecording.populate(session_key, display_progress=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Populate EphysRecording extracts the following information from .ap.meta file from SpikeGLX:\n", - "\n", - "1. **probe.EelectrodeConfig**: this procedure detects new ElectrodeConfig, i.e. which 384 electrodes out of the total 960 on the probe were used in this ephys session, and save the results into the table `probe.EelectrodeConfig`. Each entry in table `ephys.EphysRecording` specifies which ElectrodeConfig is used in a particular ephys session." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For this ephys session we just populated, Electrodes 0-383 was used." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " The electrode configuration setting on a given probe\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode_config_name

\n", - " user friendly name\n", - "
6f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B0-383
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*electrode_con probe_type electrode_conf\n", - "+------------+ +------------+ +------------+\n", - "6f6d8149-1603- neuropixels 1. 0-383 \n", - " (Total: 1)" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.ElectrodeConfig()" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Electrodes selected for recording\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
6f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B0
6f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B1
6f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B2
6f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B3
6f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B4
6f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B5
6f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B6
\n", - "

...

\n", - "

Total: 384

\n", - " " - ], - "text/plain": [ - "*electrode_con *probe_type *electrode \n", - "+------------+ +------------+ +-----------+\n", - "6f6d8149-1603- neuropixels 1. 0 \n", - "6f6d8149-1603- neuropixels 1. 1 \n", - "6f6d8149-1603- neuropixels 1. 2 \n", - "6f6d8149-1603- neuropixels 1. 3 \n", - "6f6d8149-1603- neuropixels 1. 4 \n", - "6f6d8149-1603- neuropixels 1. 5 \n", - "6f6d8149-1603- neuropixels 1. 6 \n", - " ...\n", - " (Total: 384)" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.ElectrodeConfig.Electrode()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2. **ephys.EphysRecording**: note here that it refers to a particular electrode_config identified with a hash." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Ephys recording from a probe insertion for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

acq_software

\n", - " \n", - "
\n", - "

sampling_rate

\n", - " (Hz)\n", - "
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3SpikeGLX30000.6
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num electrode_conf acq_software sampling_rate \n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- SpikeGLX 30000.6 \n", - " (Total: 1)" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.EphysRecording() & session_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3. **ephys_element.EphysRecording.EphysFile**\n", - "\n", - "The table `EphysFile` only saves the meta file from the recording" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Paths of files of a given EphysRecording round.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

file_path

\n", - " filepath relative to root data directory\n", - "
subject62021-01-15 11:16:380subject6/session1/towersTask_g0_imec0/towersTask_g0_t0.imec0.ap.meta
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *file_path \n", - "+----------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 0 subject6/sessi\n", - " (Total: 1)" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.EphysRecording.EphysFile() & session_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create ClusteringTask and run/validate Clustering" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n%3\n\n\nephys.ClusteringTask\n\n\nephys.ClusteringTask\n\n\n\n\nephys.Clustering\n\n\nephys.Clustering\n\n\n\n\nephys.ClusteringTask->ephys.Clustering\n\n\n\nephys.EphysRecording\n\n\nephys.EphysRecording\n\n\n\n\nephys.EphysRecording->ephys.ClusteringTask\n\n\n\nephys.ClusteringParamSet\n\n\nephys.ClusteringParamSet\n\n\n\n\nephys.ClusteringParamSet->ephys.ClusteringTask\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(\n", - " dj.Diagram(ephys.EphysRecording)\n", - " + ephys.ClusteringParamSet\n", - " + ephys.ClusteringTask\n", - " + ephys.Clustering\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The next major table in the ephys pipeline is the `ClusteringTask`.\n", - "\n", - "+ An entry in `ClusteringTask` indicates a set of clustering results generated from Kilosort2 outside `workflow-array-ephys` are ready be ingested. In a future release, an entry in `ClusteringTask` can also indicate a new Kilosort2 clustering job is ready to be triggered.\n", - "\n", - "+ The `ClusteringTask` table depends on the table `ClusteringParamSet`, which are the parameters of the clustering task and needed to be ingested first." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A method of the class `ClusteringParamSet` called `insert_new_params` helps on the insertion of a parameter set and ensures the inserted one is not duplicated with existing parameter sets in the database.\n", - "\n", - "The following parameters' values are set based on [Kilosort StandardConfig file](https://github.com/MouseLand/Kilosort/tree/main/configFiles)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Parameter set to be used in a clustering procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_method

\n", - " \n", - "
\n", - "

paramset_desc

\n", - " \n", - "
\n", - "

param_set_hash

\n", - " \n", - "
\n", - "

params

\n", - " dictionary of all applicable parameters\n", - "
0kilosort2Spike sorting using Kilosort2de78cee1-526f-319e-b6d5-8a2ba04963d8=BLOB=
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*paramset_idx clustering_met paramset_desc param_set_hash params \n", - "+------------+ +------------+ +------------+ +------------+ +--------+\n", - "0 kilosort2 Spike sorting de78cee1-526f- =BLOB= \n", - " (Total: 1)" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# insert clustering task manually\n", - "params_ks = {\n", - " \"fs\": 30000,\n", - " \"fshigh\": 150,\n", - " \"minfr_goodchannels\": 0.1,\n", - " \"Th\": [10, 4],\n", - " \"lam\": 10,\n", - " \"AUCsplit\": 0.9,\n", - " \"minFR\": 0.02,\n", - " \"momentum\": [20, 400],\n", - " \"sigmaMask\": 30,\n", - " \"ThPr\": 8,\n", - " \"spkTh\": -6,\n", - " \"reorder\": 1,\n", - " \"nskip\": 25,\n", - " \"GPU\": 1,\n", - " \"Nfilt\": 1024,\n", - " \"nfilt_factor\": 4,\n", - " \"ntbuff\": 64,\n", - " \"whiteningRange\": 32,\n", - " \"nSkipCov\": 25,\n", - " \"scaleproc\": 200,\n", - " \"nPCs\": 3,\n", - " \"useRAM\": 0,\n", - "}\n", - "ephys.ClusteringParamSet.insert_new_params(\n", - " clustering_method=\"kilosort2\",\n", - " paramset_idx=0,\n", - " params=params_ks,\n", - " paramset_desc=\"Spike sorting using Kilosort2\",\n", - ")\n", - "ephys.ClusteringParamSet()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We are then able to insert an entry into the `ClusteringTask` table. One important field of the table is `clustering_output_dir`, which specifies the Kilosort2 output directory for the later processing.\n", - "**Note**: this output dir is a relative path to be combined with `ephys_root_directory` in the config file." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# Manual table for defining a clustering task ready to be run\n", - "-> ephys.EphysRecording\n", - "-> ephys.ClusteringParamSet\n", - "---\n", - "clustering_output_dir : varchar(255) # clustering output directory relative to the clustering root data directory\n", - "task_mode=\"load\" : enum('load','trigger') # 'load': load computed analysis results, 'trigger': trigger computation\n", - "\n" - ] - } - ], - "source": [ - "ephys.ClusteringTask.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "# Manual table for defining a clustering task ready to be run\n", - "subject : varchar(32) # \n", - "session_datetime : datetime(3) # \n", - "insertion_number : tinyint unsigned # \n", - "paramset_idx : smallint # \n", - "---\n", - "clustering_output_dir : varchar(255) # clustering output directory relative to the clustering root data directory\n", - "task_mode=\"load\" : enum('load','trigger') # 'load': load computed analysis results, 'trigger': trigger computation" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ClusteringTask.heading" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], - "source": [ - "ephys.ClusteringTask.insert1(\n", - " dict(\n", - " session_key,\n", - " insertion_number=0,\n", - " paramset_idx=0,\n", - " clustering_output_dir=\"subject6/session1/towersTask_g0_imec0\",\n", - " ),\n", - " skip_duplicates=True,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Manual table for defining a clustering task ready to be run\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_output_dir

\n", - " clustering output directory relative to the clustering root data directory\n", - "
\n", - "

task_mode

\n", - " 'load': load computed analysis results, 'trigger': trigger computation\n", - "
subject62021-01-15 11:16:3800subject6/session1/towersTask_g0_imec0load
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx clustering_out task_mode \n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +-----------+\n", - "subject6 2021-01-15 11: 0 0 subject6/sessi load \n", - " (Total: 1)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ClusteringTask() & session_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We are then able to populate the clustering results. The `Clustering` table now validates the Kilosort2 outcomes before ingesting the spike sorted results. In a future release of `element-array-ephys`, this table may be used to trigger a Kilosort2 process. A record in the `Clustering` indicates that Kilosort2 job is done successfully and the results are ready to be processed." - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Clustering: 100%|████████████████████████████████████████████████████████████████████████| 1/1 [00:02<00:00, 2.75s/it]\n" - ] - } - ], - "source": [ - "ephys.Clustering.populate(display_progress=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Clustering Procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_time

\n", - " time of generation of this set of clustering results\n", - "
\n", - "

package_version

\n", - " \n", - "
subject62021-01-15 11:16:38002021-02-22 23:07:16
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx clustering_tim package_versio\n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 0 0 2021-02-22 23: \n", - " (Total: 1)" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.Clustering() & session_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Import clustering results and manually curated results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We are now ready to ingest the clustering results (spike times etc.) into the database. For the `no-curation` mode, these clustering results directly from Kilosort2. For more information on manual curation, please visit the [electrophysiology description page](https://elements.datajoint.org/description/array_ephys/)." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\nephys.Clustering\n\n\nephys.Clustering\n\n\n\n\n\nephys.CuratedClustering\n\n\nephys.CuratedClustering\n\n\n\n\n\nephys.Clustering->ephys.CuratedClustering\n\n\n\n\nephys.CuratedClustering.Unit\n\n\nephys.CuratedClustering.Unit\n\n\n\n\n\nephys.CuratedClustering->ephys.CuratedClustering.Unit\n\n\n\n\nephys.ClusteringTask\n\n\nephys.ClusteringTask\n\n\n\n\n\nephys.ClusteringTask->ephys.Clustering\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(\n", - " dj.Diagram(ephys.ClusteringTask)\n", - " + dj.Diagram(ephys.Clustering)\n", - " + dj.Diagram(ephys.CuratedClustering)\n", - " + dj.Diagram(ephys.CuratedClustering.Unit)\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, we populate `CuratedClustering`, ingesting the output of Kilosort2." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "ephys.CuratedClustering.populate(session_key, display_progress=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The part table `CuratedClustering.Unit` contains the spike sorted units" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Properties of a given unit from a round of clustering (and curation)\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", - "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", - "
subject62021-01-15 11:16:380006f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B0mua1227=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380016f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B0mua9390=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380026f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B2mua34=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380036f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B4mua4393=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380046f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B5mua5535=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380056f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B6mua20133=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380066f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B6good8519=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380076f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B8good10475=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380086f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B9mua212=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380096f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B11good30=BLOB==BLOB==BLOB=
\n", - "

...

\n", - "

Total: 150

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", - "+----------+ +------------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", - "subject6 2021-01-15 11: 0 0 0 6f6d8149-1603- neuropixels 1. 0 mua 1227 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 6f6d8149-1603- neuropixels 1. 0 mua 9390 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 2 6f6d8149-1603- neuropixels 1. 2 mua 34 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 3 6f6d8149-1603- neuropixels 1. 4 mua 4393 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 4 6f6d8149-1603- neuropixels 1. 5 mua 5535 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 5 6f6d8149-1603- neuropixels 1. 6 mua 20133 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 6 6f6d8149-1603- neuropixels 1. 6 good 8519 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 7 6f6d8149-1603- neuropixels 1. 8 good 10475 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 8 6f6d8149-1603- neuropixels 1. 9 mua 212 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 9 6f6d8149-1603- neuropixels 1. 11 good 30 =BLOB= =BLOB= =BLOB= \n", - " ...\n", - " (Total: 150)" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering.Unit()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Populate LFP\n", - "+ `LFP`: Mean local field potential across different electrodes.\n", - "+ `LFP.Electrode`: Local field potential of a given electrode." - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "title": "LFP and LFP.Electrode: By populating LFP, LFP of every other 9 electrode on the probe will be saved into table `ephys_element.LFP.Electrode` and an average LFP saved into table `ephys_element.LFP`" - }, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n%3\n\n\nephys.LFP.Electrode\n\n\nephys.LFP.Electrode\n\n\n\n\nephys.EphysRecording\n\n\nephys.EphysRecording\n\n\n\n\nephys.LFP\n\n\nephys.LFP\n\n\n\n\nephys.EphysRecording->ephys.LFP\n\n\n\nephys.LFP->ephys.LFP.Electrode\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(\n", - " dj.Diagram(ephys.EphysRecording)\n", - " + dj.Diagram(ephys.LFP)\n", - " + dj.Diagram(ephys.LFP.Electrode)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "LFP: 100%|██████████████████████████████████████████████████████████████████████████████| 1/1 [02:31<00:00, 151.23s/it]\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Acquired local field potential (LFP) from a given Ephys recording.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

lfp_sampling_rate

\n", - " (Hz)\n", - "
\n", - "

lfp_time_stamps

\n", - " (s) timestamps with respect to the start of the recording (recording_timestamp)\n", - "
\n", - "

lfp_mean

\n", - " (uV) mean of LFP across electrodes - shape (time,)\n", - "
subject62021-01-15 11:16:3802500.05=BLOB==BLOB=
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num lfp_sampling_r lfp_time_s lfp_mean \n", - "+----------+ +------------+ +------------+ +------------+ +--------+ +--------+\n", - "subject6 2021-01-15 11: 0 2500.05 =BLOB= =BLOB= \n", - " (Total: 1)" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Takes a few minutes to populate\n", - "ephys.LFP.populate(session_key, display_progress=True)\n", - "ephys.LFP & session_key" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "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", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

lfp

\n", - " (uV) recorded lfp at this electrode\n", - "
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B5=BLOB=
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B14=BLOB=
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B23=BLOB=
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B32=BLOB=
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B41=BLOB=
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B50=BLOB=
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B59=BLOB=
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B68=BLOB=
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B77=BLOB=
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B86=BLOB=
\n", - "

...

\n", - "

Total: 43

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *electrode_con *probe_type *electrode lfp \n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +-----------+ +--------+\n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- neuropixels 1. 5 =BLOB= \n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- neuropixels 1. 14 =BLOB= \n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- neuropixels 1. 23 =BLOB= \n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- neuropixels 1. 32 =BLOB= \n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- neuropixels 1. 41 =BLOB= \n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- neuropixels 1. 50 =BLOB= \n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- neuropixels 1. 59 =BLOB= \n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- neuropixels 1. 68 =BLOB= \n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- neuropixels 1. 77 =BLOB= \n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- neuropixels 1. 86 =BLOB= \n", - " ...\n", - " (Total: 43)" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.LFP.Electrode & session_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Populate Spike Waveform" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The current workflow also contain tables to save spike waveforms:\n", - "+ `WaveformSet`: a table to drive the processing of all spikes waveforms resulting from a CuratedClustering.\n", - "+ `WaveformSet.Waveform`: mean waveform across spikes for a given unit and electrode.\n", - "+ `WaveformSet.PeakWaveform`: mean waveform across spikes for a given unit at the electrode with peak spike amplitude." - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n%3\n\n\nephys.WaveformSet\n\n\nephys.WaveformSet\n\n\n\n\nephys.WaveformSet.PeakWaveform\n\n\nephys.WaveformSet.PeakWaveform\n\n\n\n\nephys.WaveformSet->ephys.WaveformSet.PeakWaveform\n\n\n\nephys.WaveformSet.Waveform\n\n\nephys.WaveformSet.Waveform\n\n\n\n\nephys.WaveformSet->ephys.WaveformSet.Waveform\n\n\n\nephys.CuratedClustering.Unit\n\n\nephys.CuratedClustering.Unit\n\n\n\n\nephys.CuratedClustering.Unit->ephys.WaveformSet.PeakWaveform\n\n\n\nephys.CuratedClustering.Unit->ephys.WaveformSet.Waveform\n\n\n\nephys.CuratedClustering\n\n\nephys.CuratedClustering\n\n\n\n\nephys.CuratedClustering->ephys.WaveformSet\n\n\n\nephys.CuratedClustering->ephys.CuratedClustering.Unit\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dj.Diagram(ephys.CuratedClustering) + dj.Diagram(ephys.WaveformSet) + 1" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "title": "The `probe_element.EelectrodeConfig` table conains the configuration information of the electrodes used, i.e. which 384 electrodes out of the total 960 on the probe were used in this ephys session, while the table `ephys_element.EphysRecording` specify which ElectrodeConfig is used in a particular ephys session." - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WaveformSet: 100%|█████████████████████████████████████████████████████████████████████| 1/1 [28:14<00:00, 1694.99s/it]\n" - ] - } - ], - "source": [ - "# Takes ~1h to populate for the test dataset\n", - "ephys.WaveformSet.populate(session_key, display_progress=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " A set of spike waveforms for units out of a given CuratedClustering\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

curation_id

\n", - " \n", - "
subject62021-01-15 11:16:38001
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *curation_id \n", - "+----------+ +------------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 0 0 1 \n", - " (Total: 1)" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.WaveformSet & session_key" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Spike waveforms and their mean across spikes for the given unit\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

curation_id

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

waveform_mean

\n", - " (uV) mean waveform across spikes of the given unit\n", - "
\n", - "

waveforms

\n", - " (uV) (spike x sample) waveforms of a sampling of spikes at the given electrode for the given unit\n", - "
subject62021-01-15 11:16:3800106f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B0=BLOB==BLOB=
subject62021-01-15 11:16:3800106f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B1=BLOB==BLOB=
subject62021-01-15 11:16:3800106f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B2=BLOB==BLOB=
subject62021-01-15 11:16:3800106f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B3=BLOB==BLOB=
subject62021-01-15 11:16:3800106f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B4=BLOB==BLOB=
subject62021-01-15 11:16:3800106f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B5=BLOB==BLOB=
subject62021-01-15 11:16:3800106f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B6=BLOB==BLOB=
\n", - "

...

\n", - "

Total: 57450

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *curation_id *unit *electrode_con *probe_type *electrode waveform_m waveforms \n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +--------+ +--------+\n", - "subject6 2021-01-15 11: 0 0 1 0 6f6d8149-1603- neuropixels 1. 0 =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 0 6f6d8149-1603- neuropixels 1. 1 =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 0 6f6d8149-1603- neuropixels 1. 2 =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 0 6f6d8149-1603- neuropixels 1. 3 =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 0 6f6d8149-1603- neuropixels 1. 4 =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 0 6f6d8149-1603- neuropixels 1. 5 =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 0 6f6d8149-1603- neuropixels 1. 6 =BLOB= =BLOB= \n", - " ...\n", - " (Total: 57450)" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.WaveformSet.Waveform & session_key" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Mean waveform across spikes for a given unit at its representative electrode\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

curation_id

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

peak_electrode_waveform

\n", - " (uV) mean waveform for a given unit at its representative electrode\n", - "
subject62021-01-15 11:16:380010=BLOB=
subject62021-01-15 11:16:380011=BLOB=
subject62021-01-15 11:16:380012=BLOB=
subject62021-01-15 11:16:380013=BLOB=
subject62021-01-15 11:16:380014=BLOB=
subject62021-01-15 11:16:380015=BLOB=
subject62021-01-15 11:16:380016=BLOB=
\n", - "

...

\n", - "

Total: 150

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *curation_id *unit peak_elect\n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +------+ +--------+\n", - "subject6 2021-01-15 11: 0 0 1 0 =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 1 =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 2 =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 3 =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 4 =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 5 =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 6 =BLOB= \n", - " ...\n", - " (Total: 150)" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.WaveformSet.PeakWaveform & session_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Summary and next step" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook walks through the detailed steps running the workflow.\n", - "\n", - "+ For an more automated way running the workflow, refer to [04-automate](04-automate-optional.ipynb)\n", - "+ In the next notebook [05-explore](05-explore.ipynb), we will introduce DataJoint methods to explore and visualize the ingested data." - ] - } - ], - "metadata": { - "jupytext": { - "encoding": "# -*- coding: utf-8 -*-", - "formats": "ipynb,py_scripts//py" - }, - "kernelspec": { - "display_name": "Python 3.9.13 ('ele')", - "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.9.13" - }, - "vscode": { - "interpreter": { - "hash": "d00c4ad21a7027bf1726d6ae3a9a6ef39c8838928eca5a3d5f51f3eb68720410" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/05-explore.ipynb b/notebooks/05-explore.ipynb deleted file mode 100644 index ebe2213..0000000 --- a/notebooks/05-explore.ipynb +++ /dev/null @@ -1,1883 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Explore experimental metadata and processed data\n", - "\n", - "This notebook will describe the steps for interacting with the data ingested into `workflow-array-ephys`." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "if os.path.basename(os.getcwd()) == \"notebooks\": os.chdir(\"..\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-09-15 09:35:02,437][INFO]: Connecting cbroz@tutorial-db.datajoint.io:3306\n", - "[2022-09-15 09:35:02,877][INFO]: Connected cbroz@tutorial-db.datajoint.io:3306\n" - ] - } - ], - "source": [ - "import datajoint as dj\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "from workflow_array_ephys.pipeline import lab, subject, session, ephys" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Workflow architecture\n", - "\n", - "This workflow is assembled from 4 DataJoint elements:\n", - "\n", - "+ [element-lab](https://github.com/datajoint/element-lab)\n", - "+ [element-animal](https://github.com/datajoint/element-animal)\n", - "+ [element-session](https://github.com/datajoint/element-session)\n", - "+ [element-array-ephys](https://github.com/datajoint/element-array-ephys)\n", - "\n", - "For the architecture and detailed descriptions for each of those elements, please visit the respective links.\n", - "\n", - "Below is the diagram describing the core components of the fully assembled pipeline.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.Float64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n", - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n", - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.UInt64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n" - ] - }, - { - "data": { - "image/svg+xml": "\n\n\n\n\n`cbroz_lab`.`#skull_reference`\n\n`cbroz_lab`.`#skull_reference`\n\n\n\nephys.InsertionLocation\n\n\nephys.InsertionLocation\n\n\n\n\n\n`cbroz_lab`.`#skull_reference`->ephys.InsertionLocation\n\n\n\n\nsubject.Subject\n\n\nsubject.Subject\n\n\n\n\n\nsession.Session\n\n\nsession.Session\n\n\n\n\n\nsubject.Subject->session.Session\n\n\n\n\nsession.SessionNote\n\n\nsession.SessionNote\n\n\n\n\n\nsession.SessionExperimenter\n\n\nsession.SessionExperimenter\n\n\n\n\n\nsession.SessionDirectory\n\n\nsession.SessionDirectory\n\n\n\n\n\nsession.Session->session.SessionNote\n\n\n\n\nsession.Session->session.SessionExperimenter\n\n\n\n\nsession.Session->session.SessionDirectory\n\n\n\n\nsession.ProjectSession\n\n\nsession.ProjectSession\n\n\n\n\n\nsession.Session->session.ProjectSession\n\n\n\n\nephys.ProbeInsertion\n\n\nephys.ProbeInsertion\n\n\n\n\n\nsession.Session->ephys.ProbeInsertion\n\n\n\n\nephys.probe.Probe\n\n\nephys.probe.Probe\n\n\n\n\n\nephys.probe.Probe->ephys.ProbeInsertion\n\n\n\n\nephys.probe.ElectrodeConfig.Electrode\n\n\nephys.probe.ElectrodeConfig.Electrode\n\n\n\n\n\nephys.WaveformSet.Waveform\n\n\nephys.WaveformSet.Waveform\n\n\n\n\n\nephys.probe.ElectrodeConfig.Electrode->ephys.WaveformSet.Waveform\n\n\n\n\nephys.LFP.Electrode\n\n\nephys.LFP.Electrode\n\n\n\n\n\nephys.probe.ElectrodeConfig.Electrode->ephys.LFP.Electrode\n\n\n\n\nephys.CuratedClustering.Unit\n\n\nephys.CuratedClustering.Unit\n\n\n\n\n\nephys.probe.ElectrodeConfig.Electrode->ephys.CuratedClustering.Unit\n\n\n\n\nephys.probe.ElectrodeConfig\n\n\nephys.probe.ElectrodeConfig\n\n\n\n\n\nephys.probe.ElectrodeConfig->ephys.probe.ElectrodeConfig.Electrode\n\n\n\n\nephys.EphysRecording\n\n\nephys.EphysRecording\n\n\n\n\n\nephys.probe.ElectrodeConfig->ephys.EphysRecording\n\n\n\n\nlab.User\n\n\nlab.User\n\n\n\n\n\nlab.User->session.SessionExperimenter\n\n\n\n\nlab.Project\n\n\nlab.Project\n\n\n\n\n\nlab.Project->session.ProjectSession\n\n\n\n\nephys.ProbeInsertion->ephys.InsertionLocation\n\n\n\n\nephys.ProbeInsertion->ephys.EphysRecording\n\n\n\n\nephys.ClusteringTask\n\n\nephys.ClusteringTask\n\n\n\n\n\nephys.Clustering\n\n\nephys.Clustering\n\n\n\n\n\nephys.ClusteringTask->ephys.Clustering\n\n\n\n\nephys.WaveformSet.PeakWaveform\n\n\nephys.WaveformSet.PeakWaveform\n\n\n\n\n\nephys.WaveformSet\n\n\nephys.WaveformSet\n\n\n\n\n\nephys.WaveformSet->ephys.WaveformSet.Waveform\n\n\n\n\nephys.WaveformSet->ephys.WaveformSet.PeakWaveform\n\n\n\n\nephys.LFP\n\n\nephys.LFP\n\n\n\n\n\nephys.LFP->ephys.LFP.Electrode\n\n\n\n\nephys.EphysRecording.EphysFile\n\n\nephys.EphysRecording.EphysFile\n\n\n\n\n\nephys.EphysRecording->ephys.ClusteringTask\n\n\n\n\nephys.EphysRecording->ephys.LFP\n\n\n\n\nephys.EphysRecording->ephys.EphysRecording.EphysFile\n\n\n\n\nephys.CuratedClustering.Unit->ephys.WaveformSet.Waveform\n\n\n\n\nephys.CuratedClustering.Unit->ephys.WaveformSet.PeakWaveform\n\n\n\n\nephys.CuratedClustering\n\n\nephys.CuratedClustering\n\n\n\n\n\nephys.CuratedClustering->ephys.WaveformSet\n\n\n\n\nephys.CuratedClustering->ephys.CuratedClustering.Unit\n\n\n\n\nephys.Clustering->ephys.CuratedClustering\n\n\n\n\nephys.ClusteringParamSet\n\n\nephys.ClusteringParamSet\n\n\n\n\n\nephys.ClusteringParamSet->ephys.ClusteringTask\n\n\n\n\nephys.ClusteringMethod\n\n\nephys.ClusteringMethod\n\n\n\n\n\nephys.ClusteringMethod->ephys.ClusteringParamSet\n\n\n\n\nephys.ClusterQualityLabel\n\n\nephys.ClusterQualityLabel\n\n\n\n\n\nephys.ClusterQualityLabel->ephys.CuratedClustering.Unit\n\n\n\n\nephys.AcquisitionSoftware\n\n\nephys.AcquisitionSoftware\n\n\n\n\n\nephys.AcquisitionSoftware->ephys.EphysRecording\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dj.Diagram(ephys) + (dj.Diagram(session.Session) + 1) - 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Browsing the data with DataJoint query and fetch\n", - "\n", - "\n", - "DataJoint provides abundant functions to query data and fetch. For a detailed tutorials, visit our [general tutorial site](https://playground.datajoint.io/)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Running through the pipeline, we have ingested data of subject6 session1 into the database. Here are some highlights of the important tables." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### `Subject` and `Session` tables" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Animal Subject\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

sex

\n", - " \n", - "
\n", - "

subject_birth_date

\n", - " \n", - "
\n", - "

subject_description

\n", - " \n", - "
subject6M2020-01-04
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject sex subject_birth_ subject_descri\n", - "+----------+ +-----+ +------------+ +------------+\n", - "subject6 M 2020-01-04 \n", - " (Total: 1)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "subject.Subject()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
subject62021-01-15 11:16:38
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet\n", - "+----------+ +------------+\n", - "subject6 2021-01-15 11:\n", - " (Total: 1)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "session.Session()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "session_key = (\n", - " session.Session & 'subject=\"subject6\"' & 'session_datetime = \"2021-01-15 11:16:38\"'\n", - ").fetch1(\"KEY\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### `ephys.ProbeInsertion` and `ephys.EphysRecording` tables\n", - "\n", - "These tables stores the probe recordings within a particular session from one or more probes." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Probe insertion implanted into an animal for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
subject62021-01-15 11:16:38017131311651
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num probe \n", - "+----------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 0 17131311651 \n", - " (Total: 1)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ProbeInsertion & session_key" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Ephys recording from a probe insertion for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

acq_software

\n", - " \n", - "
\n", - "

sampling_rate

\n", - " (Hz)\n", - "
subject62021-01-15 11:16:3806f6d8149-1603-9d2c-f884-0fdf995ec8b3SpikeGLX30000.6
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num electrode_conf acq_software sampling_rate \n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 0 6f6d8149-1603- SpikeGLX 30000.6 \n", - " (Total: 1)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.EphysRecording & session_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### `ephys.ClusteringTask` , `ephys.Clustering`, and `ephys.CuratedClustering`\n", - "\n", - "+ Spike-sorting is performed on a per-probe basis with the details stored in `ClusteringTask` and `Clustering`\n", - "\n", - "+ After the spike sorting, a copy of `Clustering` entry was inserted into `CuratedClustering`.\n", - "\n", - "+ For manual curation options, please visit the [electrophysiology description page](https://elements.datajoint.org/description/array_ephys/)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Manual table for defining a clustering task ready to be run\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_output_dir

\n", - " clustering output directory relative to the clustering root data directory\n", - "
\n", - "

task_mode

\n", - " 'load': load computed analysis results, 'trigger': trigger computation\n", - "
subject62021-01-15 11:16:3800subject6/session1/towersTask_g0_imec0load
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx clustering_out task_mode \n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +-----------+\n", - "subject6 2021-01-15 11: 0 0 subject6/sessi load \n", - " (Total: 1)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ClusteringTask & session_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In our example workflow, `curation_output_dir` is the same as `clustering_output_dir`" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Clustering results of the spike sorting step.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
subject62021-01-15 11:16:3800
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx \n", - "+----------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 0 0 \n", - " (Total: 1)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering & session_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Waveform\n", - "\n", - "Spike-sorting results are stored in `ephys.CuratedClustering` and `ephys.WaveformSet.Waveform`" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Properties of a given unit from a round of clustering (and curation)\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", - "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", - "
subject62021-01-15 11:16:380006f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B0mua1227=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380016f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B0mua9390=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380026f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B2mua34=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380036f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B4mua4393=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380046f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B5mua5535=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380056f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B6mua20133=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380066f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B6good8519=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380076f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B8good10475=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380086f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B9mua212=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380096f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B11good30=BLOB==BLOB==BLOB=
\n", - "

...

\n", - "

Total: 150

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", - "+----------+ +------------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", - "subject6 2021-01-15 11: 0 0 0 6f6d8149-1603- neuropixels 1. 0 mua 1227 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 6f6d8149-1603- neuropixels 1. 0 mua 9390 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 2 6f6d8149-1603- neuropixels 1. 2 mua 34 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 3 6f6d8149-1603- neuropixels 1. 4 mua 4393 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 4 6f6d8149-1603- neuropixels 1. 5 mua 5535 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 5 6f6d8149-1603- neuropixels 1. 6 mua 20133 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 6 6f6d8149-1603- neuropixels 1. 6 good 8519 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 7 6f6d8149-1603- neuropixels 1. 8 good 10475 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 8 6f6d8149-1603- neuropixels 1. 9 mua 212 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 9 6f6d8149-1603- neuropixels 1. 11 good 30 =BLOB= =BLOB= =BLOB= \n", - " ...\n", - " (Total: 150)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering.Unit & session_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's pick one probe insertion and one `insertion_number`, and further inspect the clustering results." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "insertion_key = (\n", - " ephys.CuratedClustering & session_key & \"insertion_number = 0\"\n", - ").fetch1(\"KEY\")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Properties of a given unit from a round of clustering (and curation)\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", - "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", - "
subject62021-01-15 11:16:380006f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B0mua1227=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380016f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B0mua9390=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380026f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B2mua34=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380036f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B4mua4393=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380046f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B5mua5535=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380056f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B6mua20133=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380066f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B6good8519=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380076f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B8good10475=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380086f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B9mua212=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380096f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B11good30=BLOB==BLOB==BLOB=
\n", - "

...

\n", - "

Total: 150

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", - "+----------+ +------------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", - "subject6 2021-01-15 11: 0 0 0 6f6d8149-1603- neuropixels 1. 0 mua 1227 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 1 6f6d8149-1603- neuropixels 1. 0 mua 9390 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 2 6f6d8149-1603- neuropixels 1. 2 mua 34 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 3 6f6d8149-1603- neuropixels 1. 4 mua 4393 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 4 6f6d8149-1603- neuropixels 1. 5 mua 5535 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 5 6f6d8149-1603- neuropixels 1. 6 mua 20133 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 6 6f6d8149-1603- neuropixels 1. 6 good 8519 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 7 6f6d8149-1603- neuropixels 1. 8 good 10475 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 8 6f6d8149-1603- neuropixels 1. 9 mua 212 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 9 6f6d8149-1603- neuropixels 1. 11 good 30 =BLOB= =BLOB= =BLOB= \n", - " ...\n", - " (Total: 150)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering.Unit & insertion_key" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Generate a raster plot" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's try a raster plot for a subset of units" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Properties of a given unit from a round of clustering (and curation)\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", - "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", - "
subject62021-01-15 11:16:380066f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B6good8519=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380076f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B8good10475=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:380096f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B11good30=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:3800146f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B14good9706=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:3800156f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B14good16094=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:3800176f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B14good13=BLOB==BLOB==BLOB=
subject62021-01-15 11:16:3800196f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B18good16164=BLOB==BLOB==BLOB=
\n", - " \n", - "

Total: 7

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", - "+----------+ +------------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", - "subject6 2021-01-15 11: 0 0 6 6f6d8149-1603- neuropixels 1. 6 good 8519 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 7 6f6d8149-1603- neuropixels 1. 8 good 10475 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 9 6f6d8149-1603- neuropixels 1. 11 good 30 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 14 6f6d8149-1603- neuropixels 1. 14 good 9706 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 15 6f6d8149-1603- neuropixels 1. 14 good 16094 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 17 6f6d8149-1603- neuropixels 1. 14 good 13 =BLOB= =BLOB= =BLOB= \n", - "subject6 2021-01-15 11: 0 0 19 6f6d8149-1603- neuropixels 1. 18 good 16164 =BLOB= =BLOB= =BLOB= \n", - " (Total: 7)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "subset = ephys.CuratedClustering.Unit & 'unit IN (\"6\",\"7\",\"9\",\"14\",\"15\",\"17\",\"19\")'\n", - "subset" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "units, unit_spiketimes = (subset).fetch(\"unit\", \"spike_times\")" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "x = np.hstack(unit_spiketimes)\n", - "y = np.hstack([np.full_like(s, u) for u, s in zip(units, unit_spiketimes)])" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Unit')" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAACgAAAAKnCAYAAABKohTpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAADEBElEQVR4nOz9eZRc92Ef+H5v7dX7goUACZAAF4mkJIrWQlmiZNGRItO2ZNmTFzsZe/Qmx9HLvIkdxY7i0cw4seclR9nsyPbo2Z7JwuN4kolfxlJkeyRvEsXIkmiJMk1LlERCBDfsW3ej0d3VW70/qrvZALuBBgigUdTnc04foKvq3vure3/b/dUXqKLdbrcDAAAAAAAAAAAAdJXSZhcAAAAAAAAAAAAAuHgCgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0ocpmF+BKW1xczMGDB9Pf35+iKDa7OAAAAAAAAAAAAHybaLfbOX36dHbu3JlS6fL/f30v+wDgwYMHs2vXrs0uBgAAAAAAAAAAAN+mnnvuudxwww2Xfb8v+wBgf39/ks4JHBgY2OTSAAAAAAAAAAAA8O1iYmIiu3btWsmxXW4v+wDg8tf+DgwMCAACAAAAAAAAAABw1S3n2C63y/+lwgAAAAAAAAAAAMAVJwAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EKVzS4AXMjP/ee/yANfePa8ryklWbw6xbmsqkVSFEmKZHZh/dc1Ksn8fDJ/GY891KxkbHrjeyyW/mxfxjKUkyy/7Uou7v01K8lFFJ8N6qsVmZw9/1UebJQzPnOeCrsJqqVk7pxOoFYkF3grl1WjkrTm128jw81qTk3PXdK+N6OPG6iXMtFa/6jLZTr33C8/Xk4y2lfL0cnZs7arpHOOFs557ELNuVokcxe4niPNSiam51f2VeTS+6xL2fZCdeB8KkUy37461/pC720j1+NKlLNWSmbPs9P60vm9WuVZz+qx62Jdi/OVgUY584uLmZ5tn1UvykUy0Kjk1EUMtpv9/i5Ud5fr/rl16UJjX72ctK7isNesFZm+wgPYS6nHl8uF2vxGXKjOre7vLnS80tLPpYwh5SSVc+rVlt5qjp/Z2LhfJOmrl3J6adytl5LVQ/D55uGv2tGXf/b/eG1+/ncez0989y350tOn8oabhvNPPvmNnJ6Zy+mZ+dy1azAHx2aSJHu39OaJI6dzampu5fFquZR/9ldekzt2DuboxEz+t4eeyonJVp48Opldw80cnmjlH//gq1ae/8gfPZGvHzqdn/7Lt60c71c+vS//8N135I6dg0mysp8kef/b9ibJyu8/9B3X57e/ciBJctOWnvzj33s82/sb2bOlN3/+/HhGeqt5457R/Oibbszvf+1I3nDTcH7hD57IULOSrx6cyKuuH8jBsZnMzC3k1NRsiiT9jWomZuZSLoq86ebRpJ08vP9kemrlTMzMnfWaIslwTy3lUpFKuZS9W3pzeKKVv3HvTfn1zz6VIxMzOTY5m7uuH8hkaz7HJltpt9udvnLpkg41yplqLaSdpFItknaRv/GWm/JvP78/U0vtt6dWZLBRy9GJVhaSVMtFfuqdt+bjf3YwB8am0ppdTLvduR+s1UppVMr5u++8Lb/0R0/m2ORsRpqVbB1oZLS3li8/fTILi536PtJby+T0bIpyMjO3VP/KRV5303COjM/k1NRc7tk7kpnZhXxx/8ncuXMgTx07k55aOZOt+Qw1q5mYmc/Jqc6bWX2v2awVnXaw0M6OwWZ2DjXzpf0nM9fu1MOR3lqmWnN5+yu35Se++9b87w89lc8+cSyVUpHjk7Ppb1QyPjOfO67ry7HJ2dx765Z89yu35Wc//tXMzC3kVdcP5okjp9OaW8jW/kbqlVJm5hdzYKl+LqsUSbVaZHGhncFmLWNnZpMiGe2rZ3puIX31Slrzi/kH774j//djh/LJrx3ZUFtbtpF55Wa7mPvj3nop8/OLaS0k2/trGemt5euHJ1eer5aSH7z7+vzWIwfO2q5WLvLX37grv/mFZy94rPPNwxqVZGbVc5VS8tZbt2SoWcvjhyaSJHfsGMjM3EK+8NSJzMzNr7y+UUlu2tKXH33TjfnVB7+Vt9w8mt965EDK6fR553bbFzPX2Ox5ycUaXGo/G7HRMapWShYWO2N+aWmbl1r1iySvvn4g3zg0cda4eqlz+eX7yaFGOWNrrDOsNU9rVJJqufNv2qdai2fNac7Xvl/KPfm1ZqP1+2LX2rpRZx5VzumrOWH/NlCkM06M9NZyaKJ1UduWkrzq+oE8dmDivK/rv8B1W14nWc+VuKe5mDZzvr54qFnJlr5a9h2buuQyDCzdH7zUfrtSJKXS+T97eCkux33dy81LmYNs1vylXk4WFjp1b/U8rEhSKpLXXD+QP3u+06aX6/7yGN6sFumvV3PizGx2DTfz9Mnp87aPbf31TEy3VuaDL2X9Nrk253zL60jXQtmuZhmKJPVq0prr/P1KHvfcMeByvM+RZiVnZufPuwa4fF88dmZ2Q2NQkWTrGp+RLCsnqdWKzKxaly0lqVVfuN9fPs5LbSvJ2nPlyzWeNipL/Uj7/OW80OdO16q1zv/5rsm5n5stn+eX8hnSS1Ek6amVcuZlNmhv5DPtc5277nopLsc+Xqqf+Z7b8t+9/dbNLQTXpKLdbl/jy54vzcTERAYHBzM+Pp6BgYHNLg6X4B2/+NnsOzp54RcCAAB8G6mVi/yzv3JXPvAfH81Pv/O2/MIfPrHy58X4yA+/Nu+9+/p89cB4vv9XPreh58893vJrkpz1ut/9iXuTZOX3j/zwa/OB//hokuT+V12XT3718LplWv2+rrQfvWd3fvPh8//Ds/N5zQ2Deez58fO+5s03j+bz3zqx7vPnOx/XmtXX8Xxe6nndrH2/3Nww3Mzzp6Zf9Pgt2/quifWW5bq/XjkBANg8jaV/uAMAXBvefPNo/v3ffNNmF4NLcKXza74CGAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBeqbHYB4ELuvXkk+45Onvc1pSSLV6c4l1W1SIoiSZHMLqz/ukYlmZ9P5i/jsYealYxNb3yPxdKf7ctYhnKS5bddycW9v2YluYjis0F9tSKTs+e/yoONcsZnzlNhN0G1lMyd0wnUiuQCb+WyalSS1vz6bWS4Wc2p6blL2vdm9HED9VImWusfdblM55775cfLSUb7ajk6OXvWdpV0ztHCOY9dqDlXi2TuAtdzpFnJxPT8yr6KXHqfdSnbXqgOnE+lSObbV+daX+i9beR6XIly1krJ7Hl2Wl86v1erPOtZPXZdrGtxvjLQKGd+cTHTs+2z6kW5SAYalZy6iMF2s9/fheruct0/ty5daOyrl5PWVRz2mrUi01d4AHsp9fhyuVCb34gL1bnV/d2Fjlda+rmUMaScpHJOvdrSW83xMxsb94skffVSTi+Nu/VSsnoIPt88/LZtvblte1/u2TOSu3cP5e/8pVtz9+6hvGrnQE7PzOX0zHzu2jWYg2MzSZK9W3rzxJHTOTU1t/J4tVzKbdv7kiTb+uv58Xv35MRkK08encyu4WYOT7TOev6vv3FXvn7o9FnHu2fPyMprVu9n+e9JVn6/bXvfyt9v2tKTB795JNv7G9mzpTd//vx4RnqreeOe0dy2vW9l/3fvGspQs5KvHpzIq64fyMGxmczMLeTU1GyKJP2NaiZm5lIuirzp5tGknTy8/2R6auVMzMyd9ZoiyXBPLeVSkUq5lL1benN4opV79o7k0efGcmRiJscmZ3PX9QOZbM3n2GQr7Xa701cuXdKhRjlTrYW0k1SqRdIu8tZbRrPv6ESmltpvT63IYKOWoxOtLCSplou89dbRnJhs5cDYVFqzi2m3O/eDtVopjUo5b7llNF9++mSOTc5mpFnJ1oFGRntr+fLTJ7Ow2KnvI721TE7PpignM3NL9a9c5HU3DefI+ExOTc3lnr0jmZldyBf3n8ydOwfy1LEz6amVM9maz1CzmomZ+Zyc6ryZ1feazVrRaQcL7ewYbGbnUDNf2n8yc+1OPRzprWWqNZe3v3Jbbtvelx987c589oljqZSKHJ+cTX+jkvGZ+dxxXV+OTc7m3lu35J69I/ndxw5mZm4hr7p+ME8cOZ3W3EK29jdSr5QyM7+YA0v1c1mlSKrVIosL7Qw2axk7M5sUyWhfPdNzC+mrV9KaX8w9e0dyYrKVT37tyIba2rKNzCs328XcH/fWS5mfX0xrIdneX8tIby1fP/zCGkq1lLx570h+65EDZ21XKxe59+aRPH108oLHOt88rFFJZlY9Vyklb711S4aatTx+aCJJcseOgczMLeQLT53IzNz8yusbleSmLX15yy2jeez5sZVyltPp887tti9mrrHZ85KLNbjUfjZio2NUrZQsLHbG/NLSNi+16hdJXn39QL5xaOKscfVS5/LL95NDjXLG1lhnWGue1qgk1XLn37RPtRbPmtOcr32/lHvya81G6/fFrrV1o848qpzTV3PC/m2gSGecGOmt5dBE66K2LSV51fUDeezAxHlf13+B67a8TrKeK3FPczFt5nx98VCzki19tew7NnXJZRhYuj94qf12pUhKpfN/9vBSXI77upeblzIH2az5S72cLCx06t7qeViRpFQkt1/Xlz97vtOml+v+8hjerBbpr1dz4sxsdg038/TJ6fO2j2399UxMt1bmgy9l/Ta5Nud8y+tI10LZrmYZiiT1atKa6/z9Sh733DHgcrzPkWYlZ2bnz7sGuHxfPHZmdkNjUJFk6xqfkSwrJ6nVisysWpctJalVX7jfXz7OS20rydpz5cs1njYqS/1I+/zlvNDnTteqtc7/+a7JuZ+bLZ/nl/IZ0ktRJOmplXLmZTZob+Qz7XOdu+56KS7HPl6qt946urkF4JpVtNvta3zZ86WZmJjI4OBgxsfHMzAwsNnFAQAAAAAAAAAA4NvElc6v+QpgAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EKbGgB86KGH8u53vzs7d+5MURT5+Mc/ftbzk5OT+dt/+2/nhhtuSLPZzB133JFf+7Vf25zCAgAAAAAAAAAAwDVkUwOAZ86cyV133ZWPfvSjaz7/Uz/1U/nUpz6V3/zN38zXv/71fOADH8jf/tt/O5/4xCeuckkBAAAAAAAAAADg2lLZzIPff//9uf/++9d9/vOf/3ze97735e1vf3uS5P3vf39+/dd/PX/6p3+a97znPVeplAAAAAAAAAAAAHDt2dT/AfBC3vzmN+cTn/hEDhw4kHa7nc985jN54okn8pf/8l9ed5tWq5WJiYmzfgAAAAAAAAAAAODl5poOAP7Kr/xK7rjjjtxwww2p1Wr5nu/5nnz0ox/N2972tnW3+fCHP5zBwcGVn127dl3FEgMAAAAAAAAAAMDVcc0HAL/4xS/mE5/4RB555JH8wi/8Qv77//6/zx/90R+tu82HPvShjI+Pr/w899xzV7HEAAAAAAAAAAAAcHVUNrsA65mens7/+D/+j/nYxz6W7/u+70uSvOY1r8mjjz6af/Ev/kXe8Y53rLldvV5PvV6/mkUFAAAAAAAAAACAq+6a/R8A5+bmMjc3l1Lp7CKWy+UsLi5uUqkAAAAAAAAAAADg2rCp/wPg5ORk9u3bt/L7/v378+ijj2ZkZCS7d+/Od33Xd+WDH/xgms1mbrzxxnz2s5/Nb/zGb+QXf/EXN7HUAAAAAAAAAAAAsPmKdrvd3qyDP/jgg7nvvvte9Pj73ve+PPDAAzl8+HA+9KEP5Q/+4A9y8uTJ3HjjjXn/+9+fv/t3/26KotjQMSYmJjI4OJjx8fEMDAxc7rcAAAAAAAAAAAAAa7rS+bVNDQBeDQKAAAAAAAAAAAAAbIYrnV8rXfY9AgAAAAAAAAAAAFecACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEOASHZ2Yyb/8wydydGJms4sCAHQBcwcS9YBLo95A99OOr02uy7Xh5XQdjk7M5B/97uP5R7/7+Mvi/Xw7eTnVw5e7brpW3VRWAODyMg/gahMABLhER0+38kt//GSOnm5tdlEAgC5g7kCiHnBp1Bvoftrxtcl1uTa8nK7D0dOt/KvP7c+/+tz+l8X7+XbycqqHL3fddK26qawAwOVlHsDVJgAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgC1U2uwAA3Wpbfz1/5y/dmm399c0uCgDQBcwdSNQDLo16A91PO742uS7XhpfTddjWX8+P37tn5e90j5dTPXy566Zr1U1lBQAuL/MArrai3W63N7sQV9LExEQGBwczPj6egYGBzS4OAAAAAAAAAAAA3yaudH7NVwADAAAAAAAAAABAFxIABAAAAAAAAAAAgC4kAAgAAAAAAAAAAABdSAAQAAAAAAAAAAAAupAAIAAAAAAAAAAAAHQhAUAAAAAAAAAAAADoQgKAAAAAAAAAAAAA0IUEAAEAAAAAAAAAAKALCQACAAAAAAAAAABAFxIABAAAAAAAAAAAgC4kAAgAAAAAAAAAAABdSAAQAAAAAAAAAAAAupAAIAAAAAAAAAAAAHQhAUAAAAAAAAAAAADoQgKAAAAAAAAAAAAA0IUEAAEAAAAAAAAAAKALCQACAAAAAAAAAABAFxIABAAAAAAAAAAAgC4kAAgAAAAAAAAAAABdSAAQAAAAAAAAAAAAupAAIAAAAAAAAAAAAHQhAUAAAAAAAAAAAADoQgKAAAAAAAAAAAAA0IUEAAEAAAAAAAAAAKALCQACAAAAAAAAAABAFxIABAAAAAAAAAAAgC4kAAgAAAAAAAAAAABdSAAQAAAAAAAAAAAAupAAIAAAAAAAAAAAAHQhAUAAAAAAAAAAAADoQgKAAAAAAAAAAAAA0IUEAAEAAAAAAAAAAKALCQACAAAAAAAAAABAF9rUAOBDDz2Ud7/73dm5c2eKosjHP/7xF73m61//et7znvdkcHAwvb29ecMb3pBnn3326hcWAAAAAAAAAAAAriGbGgA8c+ZM7rrrrnz0ox9d8/lvfetbuffee/PKV74yDz74YB577LH87M/+bBqNxlUuKQAAAAAAAAAAAFxbina73d7sQiRJURT52Mc+lve+970rj/3Ij/xIqtVq/t2/+3eXvN+JiYkMDg5mfHw8AwMDl6GkAAAAAAAAAAAAcGFXOr+2qf8D4PksLi7m937v93LbbbflXe96V7Zt25Z77rlnza8JXq3VamViYuKsHwAAAAAAAAAAAHi5uWYDgEePHs3k5GT+yT/5J/me7/me/MEf/EF+8Ad/MD/0Qz+Uz372s+tu9+EPfziDg4MrP7t27bqKpQYAAAAAAAAAAICr45r9CuCDBw/m+uuvz1/7a38t//7f//uV173nPe9Jb29v/sN/+A9r7qfVaqXVaq38PjExkV27dvkKYAAAAAAAAAAAAK6qK/0VwJXLvsfLZMuWLalUKrnjjjvOevz222/P5z73uXW3q9frqdfrV7p4AAAAAAAAAAAAsKmu2a8ArtVqecMb3pBvfvObZz3+xBNP5MYbb9ykUgEAAAAAAAAAAMC1YVP/B8DJycns27dv5ff9+/fn0UcfzcjISHbv3p0PfvCD+eEf/uG87W1vy3333ZdPfepT+Z3f+Z08+OCDm1doAAAAAAAAAAAAuAYU7Xa7vVkHf/DBB3Pfffe96PH3ve99eeCBB5Ik/+bf/Jt8+MMfzvPPP59XvOIV+fmf//n8wA/8wIaPcaW/QxkAAAAAAAAAAADWcqXza5saALwaBAABAAAAAAAAAADYDFc6v1a67HsEAAAAAAAAAAAArjgBQAAAAAAAAAAAAOhCAoAAAAAAAAAAAADQhQQAAQAAAAAAAAAAoAsJAAIAAAAAAAAAAEAXEgAEAAAAAAAAAACALiQACAAAAAAAAAAAAF1IABAAAAAAAAAAAAC6kAAgAAAAAAAAAAAAdCEBQAAAAAAAAAAAAOhCAoAAAAAAAAAAAADQhQQAAQAAAAAAAAAAoAsJAAIAAAAAAAAAAEAXEgAEAAAAAAAAAACALiQACAAAAAAAAAAAAF1IABAAAAAAAAAAAAC6kAAgAAAAAAAAAAAAdCEBQAAAAAAAAAAAAOhCAoAAAAAAAAAAAADQhQQAAQAAAAAAAAAAoAsJAAIAAAAAAAAAAEAXEgAEAAAAAAAAAACALiQACAAAAAAAAAAAAF1IABAAAAAAAAAAAAC6kAAgAAAAAAAAAAAAdCEBQAAAAAAAAAAAAOhCAoAAAAAAAAAAAADQhQQAAQAAAAAAAAAAoAsJAAIAAAAAAAAAAEAXEgAEAAAAAAAAAACALiQACAAAAAAAAAAAAF1IABAAAAAAAAAAAAC6UGWzCwAX8nP/+S/ywBeeXff5V+3oy1cPTSZJiiTtSzxOo5zMLKz9XK2UzC6ef/uNvGZZpUjmzylosfTnueUvJ1kuViXJ/MYOcdkMN6s5NT13UdsM1EuZaF34ZFSLZG4DF6ySpFj12kYlGe6p5/hEK3O58HXfM9LM/pPTK78X6ZzXdl44t8nZ5/qs4xdJf6OSU9Ods18tJXPnvL2NvpeXg5fSzq7kvpKkr1ZkcradUpINNseXZCNt8nK/x25XLZJ2+8r0ZZezHa7VT18pGy13rZQsLl79ceBcG+3jl13KdVmvPz6fWjmZXdpoS081x6cubuy6VJejjV+ufuLc/ZxvbtNNKkVSKjrzrKFGOVOzCxuec53r1q09efbkVBbbnbG8Xk4q5SJTs+0XXYMtvdWM9tWzsLiYfcemXrSvwUYl4zNrt8j+ejmnW1f25JeT1KrJRU7TLsq1Pr85X9tpXuFzcy3ZM9LMMyenU6smiwvJ/OLVmQclSbNWpL3YzjpNIcnF3SddTo1K0prfnHlYs5JMn3NOiiQjvbWMn5nd8FjeqBT5jhuH89SxM3n19QP5w68fW/N1lWLpfukC53l5rry6TD31UhYWFjMz3+kTZxeS6qox9VzL960DS33gue1wS281RVHk2ORshhrljM8spK9RzutvHM6zJ6Zy5PRMWrOLmW9f+rW5WnP9l+paKue598Rr2ch8ZPW4UCmSarXI9Oz6W63ui5f3v5GyJEl9qQ1frGopqVWKnFkqV6XotL0Tk7Mvml9ezJyzXkouYgp80YokjWqR6XMG3iKdunRuOdebkw/USzndWky9mszNXfyceqM2ci98of6/VkqGemoZn5rN7OLF9wnnq7M3DDdz69bePPTE8St2DtZyJdftykkatRfq9qWqFcls+6X1Ub31UtJuv+SyXIvWm/9e7mtb65zCa2KuPdQoZ2zVjePqe+tGJZmff/F7X69vOlezVqRSFGnNLV7UfLCy1MA3Y/3jnpuG8mfPjmV28exzsaxeTi72Vu9C25SSVJfGvdVt87r+Wg6fnl2zv1trvnm+dr3euHHDUCPPj81s5G2cpVZKFtrJruFmnt7AuL6Z1hsvNnq/ezFrNsv7LCWpnGdOvZZz5+rJhecfjUrOey/WUytlsFHNoYnWuq9Z/qwk6dSfxXT6hdOthYz21nJ0cjbNainvfs2O/NYjB9JXL+UNN43k2RNTOXFmNtOz82ktJD3V5NyluOX+Za26eTHj0K1be3Jscjat+fkL3udvZH5XLZJS+cJzzdVtt1FN2otJo7p0j7PG9Vq+5zszM5tqpTMnW8v2/lqOnJ5NT63Itr5G2kmOTc5katX+LmVtdCPKS+VcvtaX6krc51eLpFErpVQUKRVFTk3Pv+g4y+1xdf1Z675hedxe7zye2/6X+/s7ruvLU8cn121XOwfrKRVFnh+byUizkpPT82lWO2Pl8v422rf01cu57xVb8zuPHb7wi5e3WaPenWv5PV+pOnTu+S6S1JYeKyepVpOZNdpptUgqlc5z9aX1q3Y66xjLbSJ58fhWL3c+E5lrJyM91Yz0Vs9ap13dRy9/lly5wH3qlXZu/3Y11ui7eR30YvqTnlopN4705OuHO7mQt90ykof2nVx5fvW5Xt0GVn+uv9xGR5qVjE3PX/Z1m6uxFlQk+f+898786JtuusJHohsV7Xb7GrjNvHImJiYyODiY8fHxDAwMbHZxuATv+MXPZt/RyXWfr5WLzC68rKsxAAAA38aGe6o5dZXC7QAA3656ap1/dAac7YbhZp4/dW2HPaHbbOuv5+jp9QO6wPn1Nyo5fb4k/MvY/a+6Lr/6o6/b7GJwCa50fs1XAAMAAAAAAAAAAEAXEgAEAAAAAAAAAACALiQACAAAAAAAAAAAAF1IABAAAAAAAAAAAAC6kAAgAAAAAAAAAAAAdCEBQAAAAAAAAAAAAOhCAoBc8+69eeS8z9+2rXfl78VLOE6jvP5ztQ20lI28ZllljYIWWbv8q4tV2fghLpvhZvWitxmob+xkVDd4wSrnvLZRSXYM1LNcsgvtZs9I86zfi6V9nnvJ16sClSIZbr5w9qtrvL2NvpeXg8v5Vi/3aeurdfZ4tQa3jbTJb6OqsSHV4sr1ZZezHa7VT18pGy13rbQ548C5NtrHL7uU63KeIXldtVUbbem5+LHrUl2OqnK5qtu5+znf3KabVIoX5llDjfJFzbnOdevWntTLL4zl9XLSWyvWvAZbeqt5xfa+3LK1Z819DTbWb5H99St/8stJLmGadlGu9fnN+Yp3pc/NtWTPSDOlJI1qp61czZv8Zq3IeZpCkou7T7qcGpXNm4c11zgnRZLR3tpFjeWNSpE33zyS6wbqef2NQ+u+rlKsfY9yruW58uoy9dZLK9ewXu48VjtPF7Z837rcB557jrf0VrO1r5ak02cXSfob5dz3ii25eUtP+uqlVIuXdm26ZSHrWirnuffEa9nINVk9LlSKTh9wPqv74uVXbqQsSVK/xIlvtdQZ25dVimRbX23N+eXFjNYXOQW+aEWS5hoDb5G1y7nenHygXkqRzphwJWcjG7k8F+r/a6XOtamXLq1PON82Nww3c99tW67oOVjLlbxfK+fsun2plnfxUqp0b710WcpyLVpv/nu5r22tdO3MtYfOuXFcPQ9oVNZ+7+v1Tedq1or010sXPR+sXMG1owt59c7+lfKuNSe6lFu9C21Tygvj3upTdV1/Z061VlVZa755vtO83rhxw1Dj/IVbR62UlIvkpg2O65tpvaa20TZ4MU21uqqPPd+cei3nztWTC88/LnQv1lMrZcdA/byvWf6spJIX6tBQo5zy0hwqSZrVUt68t/M5XV+9tDK3H2pWVur3Wktxy/3LWm/jYrqFW7d2jrWR+/yNnPZqsbG55uq226h2fh9cek9rXa/le75GOek/z8XbvtS2e2pFbhpp5saRZnrO2d+VmsOUc/a1vlRX4j6/WnTO22CjvPJ53LnHWT5Lqx9e61ouP7TeeTy3/S+31zuu6ztvu9o5WF/pN0eWytisnr2/jfYtffVy7tkzvLEXL2+zgflX+Zw/L7dzz3ex6rFyOm1lLdWic66W71VqpRfWMZbbRPLi8a1efuGcjvRUX7ROu/qMLH+WfKH71Cvt3OZxNdbou3kd9GL6k55aKbdf17fy+903DJz1/Opzvfq0r14zW6lPzcoVWbe5GmtBRZK33DJ6FY5ENyra7XZ7swtxJU1MTGRwcDDj4+MZGBi48AYAAAAAAAAAAABwGVzp/Nq19A+SAQAAAAAAAAAAgA0SAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBeqbObBH3roofzzf/7P88gjj+TQoUP52Mc+lve+971rvvZv/a2/lV//9V/Pv/yX/zIf+MAHrmo52Vw/95//Ig984dl1n7/jur4cHJ/JzNx8ZuYv33GLJD21Us7MLl6+na6jVk5mF9YvR/sl7r+UZOdQI1OzCzk5NfcS93ZxNlr+UpLznektvdUMNqs5cWY2Y9MXd6H3jDRzcHw6pXKRudl2zt26SHLz1p7sOza1ZrnKpWTunMKVkyxfsnq58+dgs5ajk7Mv2ke9nMwtnP/9XSsqyYvOz0b1VJNLqV7VNc7vuS5UPy5ln/2NcmqlUk5c4TZxbhtYXXdW66sVmZxtp1FJZucvvb7Uy0lrnf5kvWOvV5a1FEled+NQnj81ncMTrQ2Xq7S07bnHXz7W8nlar4y3bu3JsyenkiJprVNJz9ffDDYqGb/AIHG+vvhi1Zf2VVlVF0ealZyens96NW57fy27hnvyyLNjKRdJs15OX62SIxOtLKbz/kpZ/xoWSUZ6axk7M/ui1xRJGrUiM7PtSx5TqkUy1z67n6gWyUL7xfV1+bVraVaTWrnTcY7PvPjdrHUd1nqsXk6KIpmZ77T523cM5PEDE2f1YSPNSqZm59OsVXLqAmPHSLOSsen5lXOdvLjtLq56bPk8FEs/67XZ5b5xz0gzz52azg3DzTx9cnpln+VSUq4Uac22z9pHo5osLnSeW5hvp1ROZs6pPKvb1UCjnP5GNUfGZtbsx/eMNPP8qenMtTvHXS7zYjpzqWOTs9kx2MjXDkxkx3AzjUqRfcemUisl7fYL13l1O1vub4okffVyTq/R+ZSTVCrrt9vla1stJbds68s3Dk+mtHSMC/WDlSIplTrb7xpq5LmxmRftd3tfLUdWjc09tSL1cnmlPtTLycJC51o2qknaRV51/WD2HZ3M3MJC5hfa2drfyPxiO0cmWqlXk7m5F7fDRiUpilL+xltuyr/9/P5MLfWh5+t3a0v9Q6NWZHGhvdJ3j/bWMtWay/aBxkpdWa23XsrW3nraSQ4uXdPzudC4s6xaJPPt9fvRZq1IpSgyv7iYmbkX+rdmtchQs5aTk62ktP61Xj7Gch1cq0y7hho5ODaTHcPNXNdfzyPPjp3VvpbnA/2Ncl5/43C+fuj0WWNRvVzk1TcM5huHJzI9u5jbtvdl35HJlXNULSXDPbUcn5xds3711ktplMs5MTWXnlqRkZ56Tk61Vq7npRrtreXkmdm08+K5VrH02EKS73rF1rxxz3D+5R8+mX/w7jvyHbuH8/O/83h+4rtvyYPfPJYkef/b9mbbQCO/+uCT+aefeiK1UrKR25XVbXf1XKNRTmaW23GjM+4cnWhlYel1CwsvvmZFkka1yPRcZ/zuqZcyO7uYuXanXjdr5dQr5TXnxUlyx46+VEqlPHZgYt3ynjuOVJbqZ9I5xuLixuas5xv/yumMI/Ptzhh89PTsSr+63AddN9hIrVzk2ORMplbNV9Zy7lyjUen0n+d2jcWq/Z6ams3C4mJm59prjqfnbpelbdvt9ll1/9y+uqdWpFmp5MTU3IvKvFyunqWxcfXzzWpSKZUyt7C4cm99vjrWUyvWbR8jzUpOLvW1q+d5fc1KvvuV2/K6G4fzv3zia+etv6V0+pqhns78pp2kVitlbm7xvNsVSa4fbmb3cDNf2n+yUzfLyWtuGMq+o5Npzc9neu7s17/uxqEcO93KwZPTmU9nTjU5PZt2sfb8sF5OapVSWktlKSWpVZPWXFJdHtuW6vFIs5KpVesVy+NwuVxkx+DZfX2l6Iybs3PJcG8tE2dmM59kqFnNqem5lJOUiqRS7Ywdg81aTk3OZi6dPu7G0d68687t+bUHn0ptqd8uFUX6G9VMzMylXBTZNdKTrx6YSG+jnFdfP5ivHhjPzOxCqtVORWot3TMv95nL+2/WiqTdzsxcp7+495YtOTbRypefHTvr3OwcrOdD33t7PvKHT+T5k1Np1Cv5jt1DeerYmRwem05pjXlPKcmbbh7JTaO96alV8v637U2S/G8PPZUDp6by8P6TGWhUMrfYzsGxmZU6uzw/G2pWMzY9t3Lul/dZLb9Q15cNNcoZn1nIQLOSv/Vde/Prn30qp6fnzxqX6uVka38jY9Ozac0upr00Pi6/prJqrn58orVyfkpJ5ubbqVZf6BeX69grr+vLt45OZmGxs59qKdnSV09rfjF7t/bmsefGsrj0XHupnJMzC5nPC/Pn4Z5a2klOnGmlNbuYokh2DjVz+46BPHdqOo1KaeV6LF+v5bq+vb+WO3YM5OGnT2Rqtp2eWpFtfY0cP9PKZGtxpc2WiuQvvXJr/vDrx7JzsJ5XbO/Pl545manWYrYPNjLQqOR1Nw7njp0D+fn//LXMtV+4V+upV/O//MCd+fTXj+azTxzLSG81r75+KM1aOYfGpvPF/Sdz9+6hPHNiKofHZ3LP3pFs72/k8UMTmWzNr8xjR5qVTEzPZ36p3I1qeaUfXj6fW/vrmZmbT7ko8trdQzk4NpNquZT/4f5X5v/+i0P5k33Hc+jUdBbaZ885dg7Wc/x0K4uLnTEgxQv3a8XSdRnqqWViejb1aqeujDQrmVlYyPTSOLBcd4skr75+IE8dn8xka3Gln3niyOlMtxZWrn9PrcjCOXO9MzOzGe6tZ3puIUWSU9Pz6auX81e+4/r8uy88m+qqOedAo5x//IOvzp8/N54/3X8ijx2YyF3XD2Tv1r48eXQyjUopX3l2LLVq0l5MRnrrOTPb6d+He2rpa1Tz//quvSttslItpVYqZbSvln3HplJK0t/stNOxqfn8jXtvykf+8Il86/jaa2SLq9rA9v56tvU38pVnT2WgUc2Jyc696PL88MTpVlYPE8WqfSz3a9VSsn2gM98+drqVXcPNPHtyOvfeMpKH9p1c2baytN1gs5rx6bmVPnIhnf6jXi7li/tP5qbRnnzj8OSa43W9kswvJLuGm3nm5HTefPNI/ru335Jf+fS+vPuuHflfP72v0x6fH8tka3Hlfm33aG9+7j135v965Pl8bt/x7Bhs5PGDE7lj50CePTmVIsmbbh7NzOxCvvDUiQw0qi+aBzVrRWqlUvob1bTmF/NXX39DHvj807lr11Ampudz67a+JMmfPn0yB1bd1+wZaebA2HQWl+tp0RkLG5Vy/u47b8vv/Pmh/MR335L/44vP5DPfPJobhnvyX73u+vyvn96X23cM5IkjpzM5s5DFJNVykZ965635T19+PgfHpvOmm0dz89b+3LSlJ//49x7PULOW1vxi7to1mLGp+fz0X74t/9cjz+cz3zya6dn5s+Y0y/cSd98wkG8ePf2i+UCR5B23d/qSZdv665manUtraRBfHsv66tWcmJpLKcl33DiUmbnF7Bpu5rED4zk4NpO+pfHq0edOZWq2nXKSWq3I7Gw7C0n66qW89dataVTKefzQROYXFjMzv5jjEzNp1Cu5c+dAnjwymdffNJyZ2YV8/lvHV9aW+uql7N3StzIv3TlYz11L7fjI6ZlMtxZX+pCRZiXNeiXHxmeSIulvVHNqai67R3vy42/dk1/6oycz2Kxk13DPC33t0nrAHTv68uabt+auXYP5x7/39XznzaO5bXtf/vmnnkh5abwdn5pdaZ+v3T2UY6dnM9Co5JFnTqZSKXXaTrudhcXkO28eTaNSzmefPLpy7ktJXnFdX548PJn5pfPyzjuuy99869789lcO5MRkK1959tTKXGdoqS0t9+17t/TmuVPTK3Xx8UOdc7J3S2+eOn4mM3MLGZ+ey5a+ztrV5791PK2FpFwkd+/uzLHa7XZKRXHWuFspluavSY6Nd8bwnkYlb755NONTc/niUydTW1r/6G1U8/637cmvf/apzMwt5DtvHk3ayReeOpHhnlqm5xbSrJZzbKJ11r3A8pzrjuv60ppfzIkzs6mVSzk2OZtaJZmbT7YsjRvtdjuVUilvWtr38jlsVpNGpZK3v3Jb/qvvuCG/8ul9+YfvviMnz8zmJ//Dn6XdbufmbX35i+fH0qh1yj/cU8vTx8/k80+dXKk/r9jen68enMjrbxrO9UM9Ge2r5l986omU1lmrXv5sa2FxMaWiyNb+el59/VCeOzmVLz87lqFGZ63ltu19eerY5Mqxl8/LwuJi5hcXMz33wtzidGsuc/OLGemt59RUKzPznbL9v++7Jf/kk1/PZGsxd1zXl8MTrQw0KqlXy7ljx8DKdZ+ZW8jU7EK+79XX5d//6XP5m2/dk88+cTynpmZzcrKVW7f358mjk7l1W1+eOHI61w008uZbtuR7X70j//A/fzUHTk2tjHHXDTbyo2+6ceW4RZK3v2Jr/tLt2/Lh//vruWvXUA6cms6R8els6e/Uk5OTrbz9ldvyX99zY/6nj/1Fnjk5vWZ//KmvHcz03Nn3K8v3WtOz8xmbns+u4UaOTsykVC7SXkzue+W27N3Sm48++NRKu6kurSM8c2Iqg81K9h2bylCjnNb8Yu68fjBPHDmdmdmFlfW5eq0z/r1xz2i+99U78vf+f3++cm9WJLlxtCf/3//6O5Ikf/8/PZa5hcXs3dKbxw9N5NCp6ZTKpfzIG27If/jTZ9Nud+Ydy+2/lKRWKedH3rAr/+q/PJX5hbxojjq3kGwfbKRUdNrUuXOdLLX/19wwlG8cOp16pZSxqdnceX3nPb7+puGMT82t1NtmNSkVRRYWk9u29+ebhydSq77wucnOgXoOTrRSLyelUin/0/fdnkeePpXPfPNo2u12+hvVHJ+cycx8zppHjjQrmZ5byJtuHs1Qs5Ynj05m13AzTx0/s9K3HJ5o5W/ce1P+10/vy6Hx6ZSLIjdv68vXDk5kqFnNoYlWRnqquWfPyEq/PDe/uDK/3zlYzz17RjMzt5CH959MpVTk+ORstvTXM7+wmHv2jqRRKefJo5MZaFTy5adPpijOXjd6221b80PfcX3+8e99Pbfv6M/BsZnMzC3k1NRsquVSfuQNu/Jv/mR/Rnvr6a135sG7Rpr5hd9/IlsHOvfmx063cvfuzvj1mhsG872v3pFf+IMncvuO/nznzaP5X37n8Qw2K3n19UOZmVvIl585lXtv3ZLvfuW2/JNPfiP/w/2vzG8/8nweeuJ4tq26tkWpyOtuGs7E9PzKfv/hf/5qnj0+9aLPF/aMNtNbr2agUVm5B17ug5v1F67n8lrXxMxc5hYWMjPXWdNZXgurl5P5xeTOnZ057pnWYmqr1nW39Fbzhps61+PYZOusPnW4p5ZTZ2bz8P6TK/cBy33Z8ryhXCR7tvTm//mWm/KrD34r733tzjzw+adz+46B7Ds6mSJZGQN3DTdzeKKVn/7Lt+XBbx7L1Ox8Do1N5wtPnch1A43cvXs4M3MLK/34ruFGPvxDr8n/8cVn8kePHzlrTWl53v7syamVfnNuIbnvFS/MVZq1Io1yObfvHMg3Dp1OT62cqdmF3DDcXJknjDQrOdOaT6nS6VNedf1gvnZwLNNznXui062F/FffcX3+zZ/sT3+9mpOTs2uuXS3X6+V+IUUy2lfP2HQr03OddZukyH2v3Jaf+O5b85tffCaPPHOqM24s9dd/+vTJHBqbyfal9aWp2YX8g3ffkT9/bjwnJlt5/NBExqfncnyycw5n5tp5153b85tffCYPP3Uihyam113PqRRJb+OFsS5JpmcXVo7Zu/Q5QLNaZLS3s3Y6M9vOYLOz7rBjsJHnx2byV193fR7efzLPnZzOlv56xqdaaS106uv40nrUiam5vOHGody6vT/Tswsr94bHJ2ZW1pnfcONQbhjuyWPPj+XI6ZksLCY/+Zduye89djjTs/OZX2zn9Mx87tk7clb/tqW3mqIo8i9/+LW5bXt//o+Hn81/fc/ubBto5PGD4/n533k8b3/FlvzzTz3RWSOtdD4XWB7r79w5kMcPTqRcKvLjb92TX/n0k5la+gy3Wi5lfnExrblk53Azt27tzdcPn87/9H23Z9/RM3nDTcP5mf/rsRwYm8n2/lq29jfy+huH8htffDYffNdt+e/efutKGd5914784h88kXa7ndcurZ0cOjXdWUeuFpmfa2dxab1v61L/9l2v2JoP3X97tg001ryGfHsr2u32S80WXbJPfvKT+ZM/+ZO87nWvyw/90A+tGwD82Mc+lp//+Z/PsWPH8sEPfvCiAoATExMZHBzM+Ph4BgYGLl/huWre8Yufzb6jk5tdDAAAOK/X3DCYx54f3+xi0MXefPNoPv+tE7n/VdflXXdelw/8x0fz0++8Lb/wh08kSX73J+7Nq64fzF//37+Yz3/rxCaXFi7d/a+6Lp/86uHNLsbL0rUwFv3oPbvzmw+v/w85L+R3f+LeJMn3/8rnLleR1rTc53K24Z5OqOV81mvDL/Xav1Srx8xudMu2vjXXQF/qeb2Y7Tf7Gi7rb1Ry+nL+S+91LNeZC41Ll7tuXY6+ernM55btfH3bWs+t99438p4blVJm5tdO5W+kL3m52Oi8ZnX7ulpj0Ed++LX5wH989Iof53K5Fsbm5br/kR9+bZ47OfWS2v618H6WXez8e3lM2mh/tV6fsdZxN1KW9fb3UvvjyzlXXq8sH/nh1ybJum1vvfF+2bUwn1/Pha7dxfb918K843xlWOtaXKhdr64X59v38nMbPQfdPs9dbbkebaSuX8z7vthzdCXmKpe7/V7MOL5eXVqus1d7TnDDcOc/JLgSLmZ8/el33pb7Xrkt3/8rn1tZV/34nx3IB/7joxvez0Zft3wN1qqLy33/m28ezb//m29aKcOlro8tvxe6z5XOr23q/wB4//335/777z/vaw4cOJCf+ImfyO///u/n+77v+65SyQAAAAAAAAAAAODatqkBwAtZXFzMj/3Yj+WDH/xg7rzzzg1t02q10mq98FU4ExPrf60QAAAAAAAAAAAAdKvSZhfgfP7pP/2nqVQq+cmf/MkNb/PhD384g4ODKz+7du26giUEAAAAAAAAAACAzXHNBgAfeeSR/NIv/VIeeOCBFEWx4e0+9KEPZXx8fOXnueeeu4KlBAAAAAAAAAAAgM1xzQYA/8t/+S85evRodu/enUqlkkqlkmeeeSY//dM/nZtuumnd7er1egYGBs76AQAAAAAAAAAAgJebymYXYD0/9mM/lne84x1nPfaud70rP/ZjP5b/9r/9bzepVAAAAAAAAAAAAHBt2NQA4OTkZPbt27fy+/79+/Poo49mZGQku3fvzujo6Fmvr1arue666/KKV7ziaheVTXTvzSPZd3Ry3efvuK4vB8dnMjM3n5n5y3fcIklPrZQzs4uXb6frqJWT2YX1y9F+ifsvJdk51MjU7EJOTs29xL1dnI2Wv5TkfGd6S281g81qTpyZzdj0xV3oPSPNHByfTqlcZG62nXO3LpLcvLUn+45NrVmucimZO6dw5STLl6xe7vw52Kzl6OTsi/ZRLydzC+d/f9eKSvKi87NRPdXkUqpXdY3ze64L1Y9L2Wd/o5xaqZQTV7hNnNsGVted1fpqRSZn22lUktn5S68v9XLSWqc/We/Y65VlLUWS1904lOdPTefwRGvD5SotbXvu8ZePtXye1ivjrVt78uzJqaRIWutU0vP1N4ONSsYvMEicry++WPWlfVVW1cWRZiWnp+ezXo3b3l/LruGePPLsWMpF0qyX01er5MhEK4vpvL9S1r+GRZKR3lrGzsy+6DVFkkatyMxs+5LHlGqRzLXP7ieqRbLQfnF9XX7tWprVpFbudJzjMy9+N2tdh7Ueq5eTokhm5jtt/vYdA3n8wMRZfdhIs5Kp2fk0a5WcusDYMdKsZGx6fuVcJy9uu4urHls+D8XSz3ptdrlv3DPSzHOnpnPDcDNPn5xe2We5lJQrRVqz7bP20agmiwud5xbm2ymVk5lzKs/qdjXQKKe/Uc2RsZk1+/E9I808f2o6c+3OcZfLvJjOXOrY5Gx2DDbytQMT2THcTKNSZN+xqdRKSbv9wnVe3c6W+5siSV+9nNNrdD7lJJXK+u12+dpWS8kt2/ryjcOTKS0d40L9YKVISqXO9ruGGnlubOZF+93eV8uRVWNzT61IvVxeqQ/1crKw0LmWjWqSdpFXXT+YfUcnM7ewkPmFdrb2NzK/2M6RiVbq1WRu7sXtsFFJiqKUt94ymn1HJzK11Ieer9+tLfUPjVqRxYX2St892lvLVGsu2wcaK3Vltd56KVt762knObh0Tc/nQuPOsmqRzLfX70ebtSKVosj84mJm5l7o35rVIkPNWk5OtpLS+td6+RjLdXCtMu0aauTg2Ex2DDdzXX89jzw7dlb7Wp4P9DfKef2Nw/n6odNnjUX1cpFX3zCYbxyeyPTsYm7b3pd9RyZXzlG1lAz31HJ8cnbN+tVbL6VRLufE1Fx6akVGeuo5OdVauZ6XarS3lpNnZtPOi+daxdJjC0m+6xVb88Y9w/ny0yfzlltGc9v2vtyzZyR37x7Kj9+7J0myrb+eJHnrraP5/LdOpFZKNnK7srrtrp5rNMrJzHI7bnTGnaMTrSwsvW5h4cXXrEjSqBaZnuuM3z31UmZnFzPX7tTrZq2ceqW85rw4Se7Y0ZdKqZTHDkysW95zx5HKUv1MOsdYXNzYnPV84185nXFkvt0Zg4+enl3pV5f7oOsGG6mVixybnMnUqvnKWs6dazQqnf7z3K6xWLXfU1OzWVhczOxce83x9NztsrRtu90+q+6f21f31Io0K5WcmJp7UZmXy9WzNDaufr5ZTSqlUuYWFlfurc9Xx3pqxbrtY6RZycmlvnb1PK+vWcl3v3JbXnfjcP748cPnrb+ldPqaoZ7O/KadpFYrZW5u8bzbFUmuH25m93AzX9p/slM3y8lrbhjKvqOTac3PZ3ru7Ne/7sahHDvdysGT05lPZ041OT2bdrH2/LBeTmqVUlpLZSklqVWT1lxSXR7blurxSLOSqVXrFcvjcLlcZMfg2X19peiMm7NzyXBvLRNnZjOfZKhZzanpuZSTlIqkUu2MHYPNWk5NzmYunT7uxtHevPWW0Xzt+fHUlvrtUlGkv1HNxMxcykWRXSM9+eqBifQ2ynn19YP56oHxzMwupFrtVKTW0j3zcp+5vP9mrUja7czMdfqLe2/ZkmMTrXz52bGzzs3OwXru2TuSL3zreJ4/OZVGvZLv2D2Up46dyeGx6ZTWmPeUkrzp5pHcNNqbnlplpa/78Xv35MCpqTy8/2QGGpXMLbZzcGxmpc4uz8+GmtWMTc+tnPvlfVbLL9T1ZUONcsZnFjLQrOStt47m8YPjOT09f9a4VC8nW/sbGZueTWt2Me2l8XH5NZVVc/XjE62V81NKMjffTrX6Qr+4XMdeeV1fvnV0MguLnf1US8mWvnpa84vZu7U3jz03lsWl59pL5ZycWch8Xpg/D/fU0k5y4kwrrdnFFEWyc6iZ23cM5LlT02lUSivXY/l6Ldf17f213LFjIA8/fSJTs+301Ips62vk+JlWJluLK222VCSvv3Eof/j1Y9k5WM8rtvfnS8+czFRrMdsHGxloVPK6G4dzx86B/NHXDmeu/cK9Wk+9mnv2juRMaz6ffeJYRnqrefX1Q2nWyjk0Np0v7j+Zu3cP5ZkTUzk8PpN79o5ke38jjx+ayGRrfmUeO9KsZGJ6PvNL5W5Uyyv98PL53Npfz8zcfMpFkdfuHsrBsZlUy6XcvXsof/2Nu/In+47n0KnpLLTPnnPsHKzn+OlWFhc7Y0CKF+7XiqXrMtRTy8T0bOrVTl0ZaVYys7CQ6aVxYLnuFkleff1Anjo+mcnW4ko/88SR05luLaxc/55akYVz5npnZmYz3FvP9NxCiiSnpufTVy/n3ptHsv/oZKqr5pwDjXLu2TuSRrWcP91/Io8dmMhd1w9k79a+PHl0Mo1KKV95diy1atJeTEZ66zkz2+nfh3tq6WtUz2qTlWoptVIpo3217Ds2lVKS/mannY5Nza+89lvH114jW1zVBrb317Otv5GvPHsqA41qTkx27kWX54cnTreyepgoVu1juV+rlpLtA5359rHTrewabubZk9O5+4aBPLTv5Mq2laXtBpvVjE/PrfSRC+n0H/VyKV/cfzI3jfbkG4cn1xyv65VkfiHZNdzMMyen8+abO/Ose/aM5C23jObPnj3VaY/Pj2Wytbhyv7Z7tDd37x7KD752Zz6373h2DDby+MGJ3LFzIM+enEqR5E03j2ZmdiFfeOpEBhrVF82DmrUitVIp/Y1qWvOLeesto/nW0dO5a9dQJqbnc+u2viTJnz59MgdW3dfsGWnmwNh0FpfradEZCxuVct5yy2hOnpnN3buHcv+d2/OZbx7NDcM9eeuto/nz507l9h0DeeLI6UzOLGQxSbVc5K23jubI+HQOjk3nTTeP5uat/blpS08e/OaRDDVrac0v5q5dgxmbml95z5/55tFMz86fNadZvpe4/bq+fPPo6RfNB4q80Jcs29Zfz9TsXFpLg/jyWNZXr+bE1FxKSb7jxqHMzC1m13Azjx0Yz8GxmfQtjVePPncqU7PtlJPUakVmZ9tZSNJXL+Wtt25No1LO44cmMr+wmJn5xRyfmEmjXsmdOwfy5JHJvP6m4czMLuTz3zq+srbUVy9l75a+lXnpzsF67lpqx0dOz2S6tbjSh4w0K2nWKzk2PpMUSX+jmlNTc9k92pO33DKaLz99MoPNSnYN97zQ1y6tB9yxoy9vvnlr7to1mD/6+pF8582duf4Xv3Ui5aXxdnxqdqV9vnb3UI6dns1Ao5JHnjmZSqXUaTvtdhYWk++8eTSNSjmfffLoyrkvJXnFdX158vBk5pfOyzvvuC63be/Lj9+7JycmW/nKs6dW5jpDS21puW/fu6U3z52aXqmLjx/qnJO9W3rz1PEzmZlbyPj0XLb0ddauPv+t42ktJOUiuXt3Z47VbrdTKoqzxt1KsTR/TXJsvDOG9zQqefPNoxmfmssXnzqZ2tL6R2+jujI2z8wt5DtvHk3ayReeOpHhnlqm5xbSrJZzbKJ11r3A8pzrjuv60ppfzIkzs6mVSzk2OZtaJZmbT7YsjRvtdjuVUilvWtr38jlsVpNGpZK3v3LbSr9w2/a+bOmrZaSnmna7nZu39eUvnh9Lo9Yp/3BPLU8fP5PPP3Vypf68Ynt/vnpwIq+/aTjXD/VktK+ah791IqV11qqXP9taWFxMqSiytb+eV18/lOdOTuXLz45lqNFZa7lte1+eOja5cuzl87KwuJj5xcVMz70wtzjdmsvc/GJGeus5NdXKzHynbG+5ZTT/5cmjmWwt5o7r+nJ4opWBRiX1ajl37BhYue4zcwuZml3IvTeP5NkTZ/LWW0azuNjOqanZnJxs5dbt/Xny6GRu3daXJ46cznUDjbz5li25e/dQbt7SkwOnplbGuOsGG2cdt0jy9ldszVtuGc1DTxzNXbuGcuDUdI6MT2dLf6eenJxsrVyHG0c6/fVa/fGnvnYw03Nn368s32tNz85nbHo+u4YbOToxk1K5SHsxue+V27J3S28ee358pd1Ul9YRnjkxlcFmJfuOTWWoUU5rfjF3Xj+YJ46czszswsr6XL3WGf/euGc0d+8eynUD9ZV7syLJjaM9uW17px29audA5hYWs3dLbx4/NJFDp6ZTKpdy780jee7EZNrtzrxjuf2XktQq5bz1ltF889B45hfyojnq3EKyfbCRUtFpU+fOdbLU/l9zw1C+ceh06pVSxqZmc+f1nff4+puGMz41t1Jvm9WkVBRZWExu296fbx6eSK36wucmOwfqOTjRSr2clEqlvOWW0TQqpXzmm0fTbrfT36jm+ORMZuZz1jxypFnJ9NxC3nTzaIaatTx5dDK7hpt56viZlb7l8EQr9+wdyZeePplD49MpF0Vu3taXrx2cyFCzmkMTrYz0VHPPnpGVfnlufnFlfr9zsJ579oxmZm4hD+8/mUqpyPHJ2Wzpr2d+YbEzf6qU8+TRyQw0Kvny0ydTFGevG73ttq25Z+9I/ujrR3L7jv4cHJvJzNxCTk3NplrurPM9eWQio7319NY78+BdI8386VMnsnWgc29+7HQrd+/ujF+vuWEwd+8eyt27hnL7jv7cs3ckv/+1wxlsVvLq64cyM7eQLz9zKvfeuiX37B3JZ755NPfsHcmBU1N56Inj2bbq2halIq+7aTgT0/Mr+715S0+ePT71os8X9ow201uvZqBRWbkHXu6Dm/UXrufyWtfEzFzmFhYyM9dZ01leC6uXk/nF5M6dnTnumdZiaqvWdbf0VvOGmzrX49hk66w+dbinllNnZvPw/pMr9wHLfdnyvKFcJHu29OYtt4zmsefHVuZDt+8YyL6jkymSlTFw13AzhydaK2tiU7PzOTQ2nS88dSLXDTRy9+7hzMwtrPTju4YbK3OiP3r8yFlrSsvz9mdPTq30m3MLZ89VmrUijXI5t+8cyDcOnU5PrZyp2YXcMNxcmSeMNCs505pPqdLpU151/WC+dnAs03Ode6LTrYWVOtNfr+bk5Oyaa1fL9Xq5X0iRjPbVMzbdyvRcZ90mKXLfK7fltu19+etv3JVHnjnVGTeW+us/ffpkDo3NZPvS+tLU7MLKPcOJyVYePzSR8em5HJ9s5a23juYNN42s7Ovhp07k0MT0uus5lSLpbbww1iXJ9OzCyjF7lz4HaFaLjPZ21k5nZtsZbHbWHXYMNvL82EzevHckD+8/medOTmdLfz3jU620Fjr1dXxpPerE1FzecONQbt3en+nZhZV7w+MTMyvrzG+4cSg3DPfksefHcuT0TBYWO+uiE9NzmZ6dz/xiO6dnOvcxq/u3Lb3VFEWRu3cPZVt/PX/nL926stawvOb61ltH88VvneiskVY6nwssj/V37hzI4wcnUi515tCPPncyU0uf4VbLpcwvLqY1l+wcbubWrb35+uHTuWfvSEb76rl791CuH2rkwNhMtvfXsrW/kdffOJSnjk3mrbeOnlWGt9wymoefOpF2u53XLq2dHDo13VlHrhaZn2tncWm9b+tS//Zdr9i68l7gXEW73X6p2aJL9uCDD+a+++570ePve9/78sADD7zo8Ztuuikf+MAH8oEPfGDDx5iYmMjg4GDGx8d9HTAAAAAAAAAAAABXzZXOr23q/wD49re/PReTP3z66aevXGEAAAAAAAAAAACgi5Q2uwAAAAAAAAAAAADAxRMABAAAAAAAAAAAgC4kAAgAAAAAAAAAAABdSAAQAAAAAAAAAAAAupAAIAAAAAAAAAAAAHQhAUAAAAAAAAAAAADoQgKAAAAAAAAAAAAA0IUEAAEAAAAAAAAAAKALCQACAAAAAAAAAABAFxIABAAAAAAAAAAAgC4kAAgAAAAAAAAAAABdSAAQAAAAAAAAAAAAupAAIAAAAAAAAAAAAHQhAUAAAAAAAAAAAADoQgKAAAAAAAAAAAAA0IUEAAEAAAAAAAAAAKALCQACAAAAAAAAAABAFxIABAAAAAAAAAAAgC4kAAgAAAAAAAAAAABdSAAQAAAAAAAAAAAAupAAIAAAAAAAAAAAAHQhAUAAAAAAAAAAAADoQgKAAAAAAAAAAAAA0IUEAAEAAAAAAAAAAKALCQACAAAAAAAAAABAFxIABAAAAAAAAAAAgC4kAAgAAAAAAAAAAABdSAAQAAAAAAAAAAAAupAAIAAAAAAAAAAAAHQhAUAAAAAAAAAAAADoQgKAAAAAAAAAAAAA0IUEAAEAAAAAAAAAAKALCQACAAAAAAAAAABAFxIABAAAAAAAAAAAgC4kAAgAAAAAAAAAAABdSAAQAAAAAAAAAAAAupAAIAAAAAAAAAAAAHQhAUAAAAAAAAAAAADoQgKAAAAAAAAAAAAA0IUEAAEAAAAAAAAAAKALCQACAAAAAAAAAABAFxIABAAAAAAAAAAAgC4kAAgAAAAAAAAAAABdSAAQAAAAAAAAAAAAupAAIAAAAAAAAAAAAHQhAUAAAAAAAAAAAADoQgKAAAAAAAAAAAAA0IUuKQC4d+/enDhx4kWPj42NZe/evS+5UAAAAAAAAAAAAMD5XVIA8Omnn87CwsKLHm+1Wjlw4MBLLhQAAAAAAAAAAABwfpWLefEnPvGJlb///u//fgYHB1d+X1hYyB//8R/npptuumyFAwAAAAAAAAAAANZ2UQHA9773vUmSoijyvve976znqtVqbrrppvzCL/zCZSscAAAAAAAAAAAAsLaLCgAuLi4mSfbs2ZMvfelL2bJlyxUpFAAAAAAAAAAAAHB+FxUAXLZ///7LXQ4AAAAAAAAAAADgImw4APjLv/zLef/7359Go5Ff/uVfPu9rf/Inf/IlFwwAAAAAAAAAAABYX9Fut9sbeeGePXvy5S9/OaOjo9mzZ8/6OyyKPPXUU5etgC/VxMREBgcHMz4+noGBgc0uDgAAAAAAAAAAAN8mrnR+bcP/A+Dqr/31FcAAAAAAAAAAAACwuUqbXQAAAAAAAAAAAADg4m34fwBcbWFhIQ888ED++I//OEePHs3i4uJZz3/605++LIUDAAAAAAAAAAAA1nZJAcC/83f+Th544IF83/d9X171qlelKIrLXS4AAAAAAAAAAADgPC4pAPh//p//Z37rt34r3/u933u5ywMAAAAAAAAAAABsQOlSNqrVarnlllsud1kAAAAAAAAAAACADbqkAOBP//RP55d+6ZfSbrcvd3kAAAAAAAAAAACADbikrwD+3Oc+l8985jP55Cc/mTvvvDPVavWs53/7t3/7shQOAAAAAAAAAAAAWNslBQCHhobygz/4g5e7LAAAAAAAAAAAAMAGXVIA8N/+2397ucsBAAAAAAAAAAAAXISLCgAODw+nKIoXPT44OJjbbrstf+/v/b28853vvGyFAwAAAAAAAAAAANZ2UQHAj3zkI2s+PjY2lkceeSTf//3fn//0n/5T3v3ud1+OsgEAAAAAAAAAAADruKgA4Pve977zPv/a1742H/7whwUAAQAAAAAAAAAA4AorXc6dff/3f3++8Y1vXM5dAgAAAAAAAAAAAGu4rAHAVquVWq12OXcJAAAAAAAAAAAArOGyBgD/9b/+13nta197OXcJAAAAAAAAAAAArKFyMS/+qZ/6qTUfHx8fz1e+8pU88cQTeeihhy5LwQAAAAAAAAAAAID1XVQA8M/+7M/WfHxgYCDvfOc789u//dvZs2fPZSkYAAAAAAAAAAAAsL6LCgB+5jOfuVLlAAAAAAAAAAAAAC5CabMLAAAAAAAAAAAAAFy8TQ0APvTQQ3n3u9+dnTt3piiKfPzjH195bm5uLj/zMz+TV7/61ent7c3OnTvz3/w3/00OHjy4eQUGAAAAAAAAAACAa8SmBgDPnDmTu+66Kx/96Edf9NzU1FS+8pWv5Gd/9mfzla98Jb/927+db37zm3nPe96zCSUFAAAAAAAAAACAa0vRbrfbm12IJCmKIh/72Mfy3ve+d93XfOlLX8ob3/jGPPPMM9m9e/eG9jsxMZHBwcGMj49nYGDgMpUWAAAAAAAAAAAAzu9K59cql32PV9D4+HiKosjQ0NC6r2m1Wmm1Wiu/T0xMXIWSAQAAAAAAAAAAwNW1qV8BfDFmZmbyMz/zM/lrf+2vnTcJ+eEPfziDg4MrP7t27bqKpQQAAAAAAAAAAICroysCgHNzc/mrf/Wvpt1u51d/9VfP+9oPfehDGR8fX/l57rnnrlIpAQAAAAAAAAAA4Oq55r8CeDn898wzz+TTn/70Bb8HuV6vp16vX6XSAQAAAAAAAAAAwOa4pgOAy+G/J598Mp/5zGcyOjq62UUCAAAAAAAAAACAa8KmBgAnJyezb9++ld/379+fRx99NCMjI9mxY0f+yl/5K/nKV76S3/3d383CwkIOHz6cJBkZGUmtVtusYgMAAAAAAAAAAMCmK9rtdnuzDv7ggw/mvvvue9Hj73vf+/JzP/dz2bNnz5rbfeYzn8nb3/72DR1jYmIig4ODGR8fv+DXBwMAAAAAAAAAAMDlcqXza5v6PwC+/e1vz/nyh5uYTQQAAAAAAAAAAIBrWmmzCwAAAAAAAAAAAABcPAFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFBAABAAAAAAAAAACgCwkAAgAAAAAAAAAAQBcSAAQAAAAAAAAAAIAuJAAIAAAAAAAAAAAAXUgAEAAAAAAAAAAAALqQACAAAAAAAAAAAAB0IQFAAAAAAAAAAAAA6EICgAAAAAAAAAAAANCFNjUA+NBDD+Xd7353du7cmaIo8vGPf/ys59vtdv7BP/gH2bFjR5rNZt7xjnfkySef3JzCAgAAAAAAAAAAwDVkUwOAZ86cyV133ZWPfvSjaz7/z/7ZP8sv//Iv59d+7dfy8MMPp7e3N+9617syMzNzlUsKAAAAAAAAAAAA15bKZh78/vvvz/3337/mc+12Ox/5yEfyP//P/3N+4Ad+IEnyG7/xG9m+fXs+/vGP50d+5EeuZlEBAAAAAAAAAADgmrKp/wPg+ezfvz+HDx/OO97xjpXHBgcHc8899+QLX/jCutu1Wq1MTEyc9QMAAAAAAAAAAAAvN9dsAPDw4cNJku3bt5/1+Pbt21eeW8uHP/zhDA4Orvzs2rXripYTAAAAAAAAAAAANsM1GwC8VB/60IcyPj6+8vPcc89tdpEAAAAAAAAAAADgsrtmA4DXXXddkuTIkSNnPX7kyJGV59ZSr9czMDBw1g8AAAAAAAAAAAC83FyzAcA9e/bkuuuuyx//8R+vPDYxMZGHH3443/md37mJJQMAAAAAAAAAAIDNV9nMg09OTmbfvn0rv+/fvz+PPvpoRkZGsnv37nzgAx/IP/pH/yi33npr9uzZk5/92Z/Nzp078973vnfzCg0AAAAAAAAAAADXgE0NAH75y1/Offfdt/L7T/3UTyVJ3ve+9+WBBx7I3//7fz9nzpzJ+9///oyNjeXee+/Npz71qTQajc0qMgAAAAAAAAAAAFwTina73d7sQlxJExMTGRwczPj4eAYGBja7OAAAAAAAAAAAAPz/27vzMDmu+t7/n1q6qnump6enZ9VoX0ayLduyvCAsL2zGxnEckhC2+EIgsUl8HfYQh3uD4ZIECNyQ3HDBQH4BnAthS4AEJ0AM2ICx8SIvwptkSbaW0TKSZumZ6b27fn9UV013z4wkY41mWn6/nmceS93V1adOnfM933PqePQCMdf718yTfkYAAAAAAAAAAAAAAAAAADDn2AAIAAAAAAAAAAAAAAAAAEATYgMgAAAAAAAAAAAAAAAAAABNiA2AAAAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAABAE2IDIAAAAAAAAAAAAAAAAAAATYgNgAAAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAAAQBNiAyAAAAAAAAAAAAAAAAAAAE2IDYAAAAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAAEATYgMgAAAAAAAAAAAAAAAAAABNiA2AAAAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAABAE2IDIAAAAAAAAAAAAAAAAAAATYgNgAAAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAAAQBNiAyAAAAAAAAAAAAAAAAAAAE2IDYAAAAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAAEATYgMgAAAAAAAAAAAAAAAAAABNiA2AAAAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAABAE2IDIAAAAAAAAAAAAAAAAAAATYgNgAAAAAAAAAAAAAAAAAAANCE2AOK0NpTO6W/v2K6hdG6+iyJp4ZUH84v2gJOJ9oTn62S2IdojTgba0QvL6Xy/T8W1NWv9zWW5m7VOMD8a20vt32lLp5fT7X6ebtczkxfCNb6QzPf9nO/vXyhOdj1QrwtTM9+XZi47gJk1a79u1nLDt9DW5Oa6PLRXAGwAxGltaDyv//OjpzU0np/vokhaeOXB/KI94GSiPeH5OpltiPaIk4F29MJyOt/vU3FtzVp/c1nuZq0TzI/G9lL7d9rS6eV0u5+n2/XM5IVwjS8k830/5/v7F4qTXQ/U68LUzPelmcsOYGbN2q+btdzwLbQ1ubkuD+0VABsAAQAAAAAAAAAAAAAAAABoQmwABAAAAAAAAAAAAAAAAACgCbEBEAAAAAAAAAAAAAAAAACAJsQGQAAAAAAAAAAAAAAAAAAAmhAbAAEAAAAAAAAAAAAAAAAAaEJsAAQAAAAAAAAAAAAAAAAAoAnZ810AYC71tLl65ysG1NPmzndRJC288mB+0R5wMtGe8HydzDZEe8TJQDt6YTmd7/epuLZmrb+5LHez1gnmR2N7afw7ben0cbrFhtPtembyQrjGF5L5vp/z/f0LxcmuB+p1YWrm+9LMZQcws2bt181abvgW2prcXJeH9grA8DzPm+9CzKV0Oq329naNjY0pkUjMd3EAAAAAAAAAAAAAAAAAAC8Qc71/jX8CGAAAAAAAAAAAAAAAAACAJsQGQAAAAAAAAAAAAAAAAAAAmhAbAAEAAAAAAAAAAAAAAAAAaEJsAAQAAAAAAAAAAAAAAAAAoAmxARAAAAAAAAAAAAAAAAAAgCbEBkAAAAAAAAAAAAAAAAAAAJoQGwABAAAAAAAAAAAAAAAAAGhCbAAEAAAAAAAAAAAAAAAAAKAJsQEQAAAAAAAAAAAAAAAAAIAmxAZAAAAAAAAAAAAAAAAAAACaEBsAAQAAAAAAAAAAAAAAAABoQmwABAAAAAAAAAAAAAAAAACgCbEBEAAAAAAAAAAAAAAAAACAJsQGQAAAAAAAAAAAAAAAAAAAmhAbAAEAAAAAAAAAAAAAAAAAaEJsAAQAAAAAAAAAAAAAAAAAoAmxARAAAAAAAAAAAAAAAAAAgCbEBkAAAAAAAAAAAAAAAAAAAJoQGwABAAAAAAAAAAAAAAAAAGhCbAAEAAAAAAAAAAAAAAAAAKAJsQEQAAAAAAAAAAAAAAAAAIAmxAZAAAAAAAAAAAAAAAAAAACaEBsAAQAAAAAAAAAAAAAAAABoQmwABAAAAAAAAAAAAAAAAACgCbEBEAAAAAAAAAAAAAAAAACAJsQGQAAAAAAAAAAAAAAAAAAAmhAbAAEAAAAAAAAAAAAAAAAAaEJsAAQAAAAAAAAAAAAAAAAAoAmxARAAAAAAAAAAAAAAAAAAgCbEBkAAAAAAAAAAAAAAAAAAAJoQGwABAAAAAAAAAAAAAAAAAGhCbAAEAAAAAAAAAAAAAAAAAKAJsQEQAAAAAAAAAAAAAAAAAIAmtKA3AJbLZX3gAx/QypUrFYvFtHr1av3FX/yFPM+b76IBAAAAAAAAAAAAAAAAADCv7PkuwLH89V//tW699VbddtttWr9+vR588EG99a1vVXt7u97xjnfMd/EAAAAAAAAAAAAAAAAAAJg3C3oD4D333KNXv/rVuuaaayRJK1as0Fe/+lXdf//981wyAAAAAAAAAAAAAAAAAADm14L+J4A3b96sH/3oR9q+fbsk6dFHH9Xdd9+tq6++ep5LBgAAAAAAAAAAAAAAAADA/FrQvwHwz/7sz5ROp3XGGWfIsiyVy2X91V/9la677rpZP5PP55XP58O/p9PpU1FUAAAAAAAAAAAAAAAAAABOqQX9GwC/8Y1v6Ctf+Yr++Z//WQ899JBuu+02/e///b912223zfqZj370o2pvbw9/li5degpLDAAAAAAAAAAAAAAAAADAqWF4nufNdyFms3TpUv3Zn/2ZbrrppvC1v/zLv9SXv/xlPfXUUzN+ZqbfALh06VKNjY0pkUjMeZkBAAAAAAAAAAAAAAAAAJD8/Wvt7e1ztn9tQf8TwJlMRqZZ/0sKLctSpVKZ9TOu68p13bkuGgAAAAAAAAAAAAAAAAAA82pBbwC89tpr9Vd/9VdatmyZ1q9fr4cfflif/OQn9fu///vzXTQAAAAAAAAAAAAAAAAAAObVgv4ngMfHx/WBD3xA3/72tzU0NKT+/n698Y1v1C233CLHcU7oHHP9KxQBAAAAAAAAAAAAAAAAAJjJXO9fW9AbAE8GNgACAAAAAAAAAAAAAAAAAObDXO9fM0/6GQEAAAAAAAAAAAAAAAAAwJxjAyAAAAAAAAAAAAAAAAAAAE2IDYAAAAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAAEATYgMgAAAAAAAAAAAAAAAAAABNiA2AAAAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAABAE2IDIAAAAAAAAAAAAAAAAAAATYgNgAAAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAAAQBNiAyAAAAAAAAAAAAAAAAAAAE2IDYAAAAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAAEATYgMgAAAAAAAAAAAAAAAAAABNiA2AAAAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAABAE2IDIAAAAAAAAAAAAAAAAAAATYgNgAAAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAAAQBNiAyAAAAAAAAAAAAAAAAAAAE2IDYAAAAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAAEATYgMgAAAAAAAAAAAAAAAAAABNiA2AAAAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAABAE7LnuwDA8dz99GH9yTcfVUdLRE8enJj2fsSQip4UMaXeRFSubapU8TQ0nlW2KNmGtKQjpo3LOpQrlvXznUeUL5YVdyMazhSViNn6y988W4/uHdPOoXHds/OITMtQqejJNA1tXtOpfLGie3YNS5KitlQqSWVJfe1RmYZ0eCyniueXx5P/Xswx5Jim2qIRDWfyyhY8tbimOmKOJvIlOZapoYmCXNvQB379LD2xP62f7ziiAyNZyZD6kzF1xV09sndUZ/UntOPwuDIFL7zuWERqcSK69txF+qd798gypbhrayRbqqufRe1RjWXz4Wd72lwVSmUlYxFNFso6PFGYqktTumhlSoMjWe0ZzsqTZFWvZ6C7RftGc3rxqpTkSb94ZlgDPXE9uT+t4lSxZEhqcU3J81SuSOcv71A6W9LSjpieOJAOr68tGtFotqjL13brDy5dqY997yntH81qOFNUV2tEbsTS8EReK7patf3ghJZ2tuila7v0pXv3+NfvGKqUPeXL/k7mtpit85cltf3QhA6M5hRzTE0WKmG5Wl1TixJR9bRFtWX3sKKOrfX9CT2xPy3LNPTuV67VrXft1OBoLmxT/e2u/vvL1ujWu3bqr19zrkYyBf3JNx5RuSzV17J/3UE1tESkTHHqPcuQlnbElIhFtHUwrWTUUjpXVlebq1yxJM/zVKpUlCsqbCPpXFG5QlmFil+O/WP58Hxm9ZyGKRXKfps0DClb9O9hbTuI2lKlIpmWVCxJm4L7t2tYTkQql6SyJwU11R61NZZrvDr/+l66zr9Xf3H7ExoczSiTr6hS00Yihn+etb1xPXVwQp78QaYsybH97291LY3ny+E962+P1vXrJR0x9bW5enDPqCRpw+KERrNFHR7P662XrNAX73mmrh9IkmlIrzijW3c8ebjuPjwXwT1LRi2N5sph3RWrfV3yY0mpevKEaypXqKi2KJesTum8pUl95q5dOrda7tr+fOaihHYdmVSuWNbBsazy5anPmpIilqGXn9kj2zT03a0H/fr0pr5fklocQ/3tMfW0RfXAM8MqetU+V23vpqQ3X7xM//7oAWWLReWKkm1KxUr9OTIFT5Yhnbs4oYf3pevqwjKky9d2KRlz9PTQhAZ64jqUzuneagysrd+Eayqbryho7q4t5Ut+O+xocTSeK2r94nZtPzSuyVw5vJbG/mjbporFigqVqXvR2+YoGrF0eCKnfNHT2t64th+cULlaxmjE0GTBC9vfRcuT6oq7unfXUeWKJTU247hjaKLgyZTkRKRcUTOyDcl1zPD/kKh4ngpFT54nWZahVd2t2nZwQk5Eyhf9+jAkOZahC1Z06NBYTocn8vI8T6ZhhGNAruCptzpmDI3mwjoLvucl67r1ijN79KHvPK6SpvpuoeL3o5liTqKhvwbt35DkznKNrm3o+ktX6hsP7lN7zNZAT5u2Do5pcDRXd1zMlmqHk5hjKGpZOm9ZUvtHcxrLFnUwnQ/rv7FsXs1nXry6U7lCWXc/faRuvDh7UVyPHZg+rruWf+217b/VNdXd6qpY8XR4LKeyNzXW2oYhScpX21AQww1JqVZH6cmCSpIWd8Q00N2qh/eO1rWRVtdUa8TWkYmCutpcpbP5ae0nYEmyTKknEZUn6Ug6J5l+uw/KXtu3Y44hr+IpV/L7XtyJaGiiMGO9Bec35Md0y/bbWEv12tO5koYzxbAt18YryR8r1vW2acueEWXzZXnVujYMfwwIyhi2bfnx88aXrNIPnxzSoXRO5UpF43k/YGxc4seHWMS/H/my3/d62lyN5QrKFLzwXidcU+l8JSxbY5tNxWzlyuW6+B2MN3HX1EUrUtpzNKMD6ayyBU8Ryx/fZqv7UsXTwXS+7r2ehKvJQkmGJNs0dTQzcye3DSnmWorZloaqOVBb1NKSZCwcj6IRqVT071EyFlE6V9Ta3rh2HJqoa8NdrRFdtCKl7YfGdSCdDa/PqtZLEHqjDf3Rqta9HTFULHhhXQX12eIYipimxqr3tyMW0Uh2+vWkYrYKlYryhYpKXn18Du5F7Tl74lG5EUudrU44hgQxT56nfE1ZTEmRaky3DaktWp9jpmK2JvMlRV0/n3pscEyZXFml6nVEI4ayxekjsmVIrzl/sf790UFFbEudLY48SUcn88rlKypJcqr3PxWzlSmUlIg5Gp4ohGWLVMe1VMxPgM5Y1Kat+0Y1ka/INiSzmh+5luR5fvvPFaffF8nPp6WpHCpRzU/X9sa1c2jCj0XVz8QikmkYyhW8GfvvyRLcM7OhrIFgjB2qyeFjjqF8wZvx+BMVtaVcyf/+voSrfKmiVd2tenD3qCTVxa0gVnnVn2WpmJ4dzk7FAtfUGX0JPbx7NJxHHEjnNJGvL2EwbyiVKmHsnCmXmy0/bRTkIVb172VN9bfaONh43bHIVPsO2pdj+mNwI9uQbHv2PKJWb9zRoZr7NJOgzn4VwXgXcEwpYhsqFL1pOeTxxCJ+f5mtmoO4ePy74JspbtQKrjsYLxqv5Xgi1by8Mc9tnDdJfr24ETOcbzk17aQiv70FuUdQhmBes3FZUvtGsjqYzk/NEROu9qfzSsVsjWdLU3lw9RyeNxU3gmOTUUsT1Rgp+f07aOurulu043CmrszRiFQpS5ZtSJ6h11+4RP98354Z22RbdX4VxLxIxM9jCzX96lhiEUO9bVHlShUNpfPqbY8qXyxreIZxtKfNled5eucVA/rXLYOKRcxwPJkvwXwzuI+lsv932/DnnsFYWjuXc6rJkOtYao9GdHg8N2NdOaa/bjFbTtHVEtGR6nuGpDP6/LHD8/wxvnCc8SIRtVQolZUr+d9Vqkhdba7GMvlp5UnF7OpYZGk0U9BAb5u2HxpXXyKqMxcltP3QuPaPZZQtTs9HJb+9t0Tr8x9pahzMF6WOVkcT2YIcx1LcsTWUzoflN+SvfwVtw5AfL1sb1qCWdMR00fIO7R3O6ME9o7INqbvNz9HKlYoK1XW2dX1tenJ/WmVP6k24OpDOa8OShK6/bJX+57d/qXSuLMuQ3vTiZfrOI/uVyZdk2YbKJU8x19byVIt+OZiWVTPuq1qmrrirUsVvp1+7f6/2jWQ0OkMsSkQtfzytrh3+qmxTumxgav7cHXf0i2eOKFtU3dwzyEGdap460N2iZw5nZoyrpqbG2FTM1nC1/LOtdwRjuOTnWn/0klX6yfYjOpTO6fBEIcwLG7/DrOkX0uxjX+MaV+PxSzuiGskU6sZ5Z4Z8vlFrw7pd43e1RS2t623TL/eNyjCn8rna0zaOI6ak85cnNTJZ0L6RzLR1l6Beu1ojMgxDhycKx1xHsiQ5jp//edVrNgypxZk+xrXHbF0+0KXvbj044xw+rBtTaotFdP1lK3XbPbvr1rsb68SUZFfrMlh3WNfXpqcOpOvuVSwiRW07nK9P5EsaGs2pJL8PjufyyhY1bewKviNSXet46uCELEOKRPz+FomYsg1Di5Ixnbu4Xd/YMhh+rrfNUcVT3brysRiSlldzxlpRWypX75Pj+N8XzOdaHEPtUUdHx/OqeFNr7o3nNauvN+YrhqTuuKORiYKKmmqXlqRode26WPLzptIsjSDILwMrUzHtGc766xERQ1HbmtYWZorDtXPioM0lo/445VbXZ4M6KBQqdWNr4/w0mBsGc7xcqaKD6XxdW64td7Cmv6KzpW4NNub497lQmZpTZ4tlxV1bo9lCOD+bSdAXbUme4T9/2FddV5qpTwVzm8Y+HNyTYH2jdi5kGVI8FtErz+ypa3tBnRSLx853G3OBoAy18Sl4ThI8p6ldVzcknbM4oV1HJpQtVLS+3//zRL4y41wtGbXCtc91ff76QcmbvnYXmKmegry1WK7U5eUrOlv0+ouW6P/8cLsM01C2GtODNd7Gc1Qq9TEoiK0bFieUanX0i2eG/es5PCnbNMLcwJJkV+PM9kPjanVsHc0U/dzVkH7tnD59d+tBSX5f2D2cVWvU0oXLOzSaKek1FyzWx7//lCbzZW1cltSBsZwGR3N1cyjXNrRpRYd+umNY/e2uDo8XdN2mpfr3Rw8oXyqpWPJkmFP5ut3QBwe6W7R3JOvP3ScLfnuZZa43k2A8jju2jqTzKmqqbcQcQ/K8aXlB7VpxMKdwI5I8Qyurz6562qPqbHX0hy9ZpY9976lwnbWrNaJMsaRMwaurh9pnmbZlqs21tWXPqCKWdOGKlHYfzejAaE5dba4m8oXp9/kExtmTzZTkOvXrWI1q54FdrRFNFop19dk47wvWZIdmGUtqx+vactSv6xhanIypVPamjTGuKQXpyUxrsXHXVF8iGs7HklFLuWJZXW3+vcmVKjpUHU+D64u5/lpWseLVrfGf1RdXvlTRSKaoVd2temxwTIloJFzPumh5UhHLDJ8zS34fTrW4Gs5MPb8N+mvCNTVRff5We+3r+uJ65sikYpHp48/xxF1/jCl5UzG5sY/VCsbo2jXmlqifi28dnHqmFDyD70/G6uaHqZitkucpXyzXjYvB3Dl4LhnUw1A6p0KlfhwN1g5SMVvZYlkruvxnM65jqCVi6/rLVupTP356Wh8J1nZqWZKsGfpO43OQ2ueNs63Z9LY5/niRKU6bOzfO/13Lr7sgrgfz/dpYd8x5Y7B+Mst6VGPe2Zi7zPT6icQQt3pMdJbYGAjWvlamYto3kp11fSBqS5bpr1md6BpCbR8N2lMwh5b8GJJwIzo6npdRnWc+MZieFqNqcx5p5rlQwJC0ODmV1xxv3S4Yz63qOPmfWw8qWn3Of2gsF15rsAZabhjjZ1rbm2lO1ujmV63VjS8dOP6BeEEyPM87wW7WnNLptNrb2zU2NqZEIjHfxcGv4FM/elp/c8f2Of2O/7Zpmb583545/Y5jufrsPn3vsYO/0mfX9MS1Y2j6Bopm8t5Xrj2hezyX1zrbPQhef+8r1+pQOjev7WQhONF7NRfOXdKurfvGZnyvoyWikVkezJxKxyrjieppczU0nj/+gbN4Lv0kWp3IYmF4PmPBc3Ey2unJ4FiGCuXTOg1tCrO1B+ID5sqSDn9BCABwYhbanP9U5ax44Wlcm3s+bf+F3E4Xynzvhei5rOdsXt2pe3YeneMSnTzk8JgvtD3fQogZx4txJzr2tkVtjdfsflhoue7zMd/PGYEXmrmKjQvleSOay/N9tvtcbF7dqX++4cWn5Ltw8s31/jX+CWAAAAAAAAAAAAAAAAAAAJoQGwABAAAAAAAAAAAAAAAAAGhCbAAEAAAAAAAAAAAAAAAAAKAJsQEQAAAAAAAAAAAAAAAAAIAmxAZAAAAAAAAAAAAAAAAAAACaEBsAAQAAAAAAAAAAAAAAAABoQmwAxIK3cVlSfQlXZ/bFZ3w/YlT/a0pLklGt7mrR8lRMsYj/um1IK1Ix/dZ5/bp6fa8SUUuuJXW2RGRIao/Z2rQqpesvXamXre2Sa0kxx1DEkFzL0MvWdWnzqlT4fVFbsiUZkha1R7U4GZVj+K/ZkqzqcTHHUHvU0pJkVC2OIUNSq2tqSTKqZMxWT9yRJLm2oUvWdOp3X7RUy1MxOYbkmH6ZL1yWlG1I5y5OqMUx6q47FpE6WyO6dHVKZvX6O2L2tPpZ1B6t+2xPm6tkzNaKVEzd1TKEdWlKm1entDwVU/CJ4HoGulsUi5h62bouvWxtl2IRU+cuToT1Hwius9UxFLUNbV6d0tn9CV29vrfu+jpbIrIM6WXrurVxWVJn9yeUavFvWldrRIuTUcVsQ2f2xWVJWtHZoktXT92HmGPIrRbOrN7Hl63r0uJkVKakVqc+vLW6ptZ0t2jzqpRcyz9+8+qUkjFbna0RXbKmU4uT0bo21d/uhq9vXJbUpupnp9eyVFsN1csIWdU2eO7ihCQpGbVkVu9FImqpzTUVi6iujSSiloJL6G93685nVsvoVK8/aits743tIGr79R2N+OXYvDqlzav8NhON+Oepran26ExX55ctuFfreuOKu2b4uaCNRAz/O87si4f1EfQV1/a/p61604J71tivl3T47T6wYXFCy1MxtURMXbamc1o/kCTTkC5cngzL+asI7lkyaoWvRe2pa5P8WBJIuKYai3LJ6pQuW9Mpo6bctf356vW9Wtcb1/JULGy74TXIjzdXn92rTSs7JFXrs7GcjhG246CdGppq76akS1enlGqJhG0qYk4/hzR1rxr5/bJLv3Vev87uT+i3zuvX5lUpGZpevwnXVG1zd6vNJ2JKPXFHMdvQhcuTSkStumtp7I+trhm29+Be9LY5/r13jLCswTksQ2oNrqP62kXLk7p6fa+SMVszNeN49fig7c/GNvzytFV/WqvjgS3/Hp3ZFw/PEdSHUX1v8+qUVne1hP26dgwwNTVm1H69Wf152bpuXbKmM4wvQd+VZo85jf21tjyzXaNrG7psTae6447WdLfo6vW9Yeyr1TicxBxDHdU4u643rr6EH5ca22htOYLPXH12r162tmvaeLG2p3XmMlrT23+ra2pFKhaOubVjbXCvgvqq7RudrY4i1T8v6YjpZWu7prWRVtdUT9wJ4/IsYTC8XqeabyxORuWaU+0+KHutmGOE52txjHDsn6negtft6jVEa8aFFalYOEYGbbk2Xkn+WPGytV1KRK2wzQbnqi1j0OYkP35etqZT63rjSsZstblTASOID7HI1HVZhrQo4YZxJLilierngrI1VmEqZk+L30H7jbt+brG6qyXMl5wZKqi27oP2V/veooQ/prZHLXU2DsQ1bENqi1rhvZD8v9fGw2hkavzqiEXCGNTYhrtaI7p6fW9Y9try1Ibexv5oyb8vMceoq6vgDC3VHDLQEZv5elIxW3HXVMSYHp/jDfeoxTG0IhXTut543RgSxLzWhrKYmmo3tjE9x0zFbLnmVD6ViFrh5w1JscbKCq7dkDavSilq+/W+IhXT8lRMcdcMPx/c/1TMVtTyx5Pabw/GtVTMVqolos2rU4pX26Bdkx+51lQOJE2/L5LfvmtzqCA/PbMvLsf024FZc2yrY8zaf0+WoOZmm6gHY2ytWHWceT6CWGXI70+plkiYX0n1cSuIVUGdrkjFJNXEAtfUhcuTdfOIuDu9hEGMq42dM7Wc2fLTRkGbtWrKG/Q3d5ZTRO369h20L2eWCrWNY+cRtXob7tNMEjPUy4lq7GaOqTBvea7tNBbRMce/IC6eqJniRq3guoMjZgkZswriXmOe2zhvkvx6qZ1v1baT4GuD3KP2/FZ1jhGMOeEcsfr3VMyuz4Or56iNG8GxyZoYqer7Qf9Z090yrczRiF/umGMoFjF16erUrG0ymF8FMS/IYxtzktnEIv740Jdww3w1Ncs42tPmqjvu6JI1ndq4NFk3nsyXYLyW/DoILts2VDeW1s7lHLPaLqq5+mx1FaxbzKar5j1DU2NHMMYf7xYkolbY7xxTYS46U3lSMVvJmK1FCVcx29C5ixOK2kY4z1zd1RKOZzN93tL0/EeaGgdN+XmzW62XRQm3rvzB+lfQNoxqmRv7+ZIOf+0tmNPbxlSOFsQn1zLCtSRT/vuStGFJQptW+TmF5PfBS6trNkF/cKq5x7mLEzJUP+5LfkxYlJhqp2f3J5ScJRYlolbd2uGvyjbr58/+epn/Xu3cM8hBgzY10N0ya1w1NdWuUzXln6271cZvq5rfn92fCNf84s70T5qq7xfS7GPfbN0gOH5pR3TaOD9TPt+ocd2u8bvaopYuXJ6Ua9Xnc7UaxxFTfuxe3dUy47pLcMldrZGwfo4Vxiz5bS84xjH9PjbTGNces8P1nGONmY7pr+deNtA5bb27sU5MTdVlsO5w7uLEtHsVi6huvh6sOxjy40rQJhvHruA7grWOoF8F/a21uq5xRl+8bm1c8tdsGteVj8XQVM5YK2r79y9iTH1f0E9aHEOLEm647j7b+kPwemO+YsjPm4NrDurS0tQcyDGn94VajTnkylRsaj0iYszYFmaL443z6GTUCtdvauugcWxtnJ8GgjlekKvUfqy23MGafuMaYHCfpak5dTJma0kyWjc/m0k43sqPO0tq1pVmqs7GNeRAcE+C9Y3auVDEkDpaItPanlRd5z5G+aTpuUBQhtr4FDwnCcbH2nV1Q/4zmbhryjKm/lx7rlrJqKVI9b1g/WCmtbvATPUU5K2NH1nR2aLLBjr9ZwA1MX2mdfJgHlsriK0bFifC5zoXLk8q1RKpyw0sTcWZqG2EfdGUf5+DGCf5fcGUH6tftq5LG5cmdcmaTn8NuJpHB+uNtXMo1za0cYn/jKS/3VXENMK17KBP1ubrjX1woLtFUdtfX3OMY8/1ZhKMx4sSbhgbwjm/Y8yYF9SuFQdzimhEitY8u1rUHtXZ/X4uU7vO2tUaCe9TbT3UPstc1xvXhcuS4XrY5tWp8BlXT5s7832e64WJGZiavo7VqHYe2NUamVafjfEtWJOdTe14XVuOWrGI/7xkpjGmNj2Zqcri1WcUgWTUUtSaujeLk9G66w3aT7BGXXt5Z/XFtbqrJVxLCdpp8PmLlienxbMWxwifHYSvVU+aqHn+VnvtZ/bFFbVnHn+OJ159plUbk4/Vf4IxunaNOcjFawXP4Bvnh6mYHT6PrxXMnYNyBPUQjEm1xwdrB6mYHT4vDtpikE/N1Eca1wqC652p7zRWZe3zxtnWbHrbnPB+N2qc/7tWfb4ezPdrY92xJGrWPGdaj2q8hbPd09rXTySGuFZ1jXeW2BgI1r5WpmLHXB+I2lNrVieqto8G7anxuU6QKwbj10yXX5vzSDPPhQKG6vOa463bBacJxskgz1ySjNZda7AG2jjGz7S2dyIuG+g8sQPxgmR4nufNdyHmUjqdVnt7u8bGxpRIJI7/AQAAAAAAAAAAAAAAAAAAToK53r/2fH9RAAAAAAAAAAAAAAAAAAAAmAdsAAQAAAAAAAAAAAAAAAAAoAmxARAAAAAAAAAAAAAAAAAAgCbEBkAAAAAAAAAAAAAAAAAAAJoQGwABAAAAAAAAAAAAAAAAAGhCbAAEAAAAAAAAAAAAAAAAAKAJsQEQAAAAAAAAAAAAAAAAAIAmxAZAAAAAAAAAAAAAAAAAAACaEBsAAQAAAAAAAAAAAAAAAABoQmwABAAAAAAAAAAAAAAAAACgCbEBEAAAAAAAAAAAAAAAAACAJsQGQAAAAAAAAAAAAAAAAAAAmhAbAAEAAAAAAAAAAAAAAAAAaEJsAAQAAAAAAAAAAAAAAAAAoAmxARAAAAAAAAAAAAAAAAAAgCbEBkAAAAAAAAAAAAAAAAAAAJoQGwABAAAAAAAAAAAAAAAAAGhCbAAEAAAAAAAAAAAAAAAAAKAJsQEQAAAAAAAAAAAAAAAAAIAmxAZAAAAAAAAAAAAAAAAAAACaEBsAAQAAAAAAAAAAAAAAAABoQmwABAAAAAAAAAAAAAAAAACgCbEBEAAAAAAAAAAAAAAAAACAJsQGQAAAAAAAAAAAAAAAAAAAmhAbAAEAAAAAAAAAAAAAAAAAaEJsAAQAAAAAAAAAAAAAAAAAoAmxARAAAAAAAAAAAAAAAAAAgCbEBkAAAAAAAAAAAAAAAAAAAJoQGwABAAAAAAAAAAAAAAAAAGhCbAAEAAAAAAAAAAAAAAAAAKAJsQEQAAAAAAAAAAAAAAAAAIAmxAZAAAAAAAAAAAAAAAAAAACaEBsAAQAAAAAAAAAAAAAAAABoQvZ8F+B4BgcHdfPNN+t73/ueMpmM1qxZoy9+8Yu68MIL57toOEW+++ig/uQbjyhf9v+ecE1l8xUVa465+VVrtaSjRe/9+iMqVKSIKfUmonJtU7ZlalVXq7YfGtf+sYyy1Q9GTGlxMqauuKuH9ozKdQx5FU+5krQyFdOzw1lZhmRZUr7kf8a1p/6cjFoazZVlSEq1OhqbLKj6luKOoYmCJ0nqT7jan86rJSJlipJjSpWKVJLU6prqbnXlSRrJFOR5niqep0LRU8WTZEi/dk6f/mPrQdmWdOGKlI5OFDSWLepgOi/J38W7ri+uZ49mtKKzRU8enKirP9uQ+tqjanVtdbY62rJ7WDKmrqOWKcl1DOUKnrzqa4akxcmoMoWyhjNFLU1GtXc0N+v96m1zZFumDo/l/GuoYRiSHTFULnkyLalQlLraXGUKReULFb+81fcN0y9jV2tEmWJJ+aKn9f0J7RnOqFguq1yR+hJRPTucDc/fFrW0rrdND+8eVVmSa0mGYWhlV6ueOjghs3o9jZd+yeqU3vCiZfrAdx5TJl+SZRuqlD2lWl1li2UlYxF5ksayRRmSRrIlWZLK1fOZ1T+3uqY6Yo6G0jlVLyesw772qDzP06F0Xi3V40azBRWKFVm2oVLRU8mTPPnX3B6LSJLSuZIOTxSm3dOYa6k9GtFotqBsvqJyte6TLY5c29TWwXTdfV3XF9fOoQlVKlP3oVjwVJaUjEWUzhW1vj+hfSNZJaK2Jgvluu+N2lKrG9G7X7lW/+/e3RoczahU9nT24nZtPzSuQqkS/nkiV1bN5WvD4oQm8iUdSGeVK3jqanM1kS8oV/DUHotoJFvbm33JqKWKpHyxrHzZv5eeJ0UiporFigoV/7VoxFJHixPen2QsIjdiqbPV0X27hlVuOK8phWWLGP45y5K621wVSmXFIpaOpPMqVu/nokRUAz1tdfEjFpFs01SxXFGuJFmSHMe/hxXPP393m6tcsaRypaJ8wVNJUnvM1vuuWqd/+Oku7a5pt44pFSpSf7urFZ2tenjvqNb3J7T90LiKZU+/f8kKfePBfXJtU+lcUZZh6LxlSW0/NKGDYzn1tLk6kM4rZkvZknRWX1zDmakYUSsWMfSqsxfphstW6VsPDWrn0LjufvqISt5UmSOWqQ/9xnrtGJrUVet79Ze3P6F7dg2H/UeG9PIzunXHk4fV2+YoGrF0dDKvYqmiFsfWSLakS1an9D+vOUv/8NNdunfXUf3e5uX68i/26DfP69f/97NdMgxT77xijf5j60FlCyXlShUNjeZUqvYV05COjufU1RZVvlTRkYmC/vRVa/Wa85fq7364XVt2j4Rx0DYk1zFVLleUL0mvvWCxvrt1ULXNypD00nXdesWZPfrL2x9XxLYUsy0NNfStqC11xf14t6Qjpq2D6bD/tkRMxRxbH/+dcyVJb//nh7T7SEYlSYmopc9cd4GePTqp//Xvj2tNjx+TB3ri2nYwHcbciCmt6Ylrx9Ck3nb5Sv3wySHtHZlUruCpt/odI5mihjNFrUzFNDialWEYWtTuxzpTUmvUUtyxdTidnxbLgja+qrtFOw9n1BCCw/HAtU3lSpUwTpflxx7LkJZ2xLSyq1UP7B7WRN7vLdGIVC75/cU0pZhjaSxXlmVIiah/z4N6TkRtjeVKqoYw5atxfiyTV77sHxOUK2JIRW+q7isVv4/L85SvxqfFHTGd05/QEwfSOjCSVaVahs64q8lCScVyWfmi1NseVWeroz98ySr93R3btW84I8fx42Q6VwyPC2JOEAscSyqUpYuWJzXQ26btB8f14J7RafFC8nODZ2r6botj6rylST02OKZ8saxF7THFHKtuHDYN6Zpz+nT71oOS/H42kS8oU6i/O3HX0q+d3advbBkM+1oQvzYsTsg0Tf3+pSv0uZ/s0kimoMNjORWrY4ZjSqWKXwemIQ2N5lSsaQu7j2b1nisHtHc4qy27R5QrljU0nlW2OBWfRzJFbVqV0uBIVlsH07r23D498OyIVnW36rHBMeUK5XBc7m1zVCx7Gs4UtWFxQqu649q6b1QjmaJ6E66ePDihuGuqq9XVs8NZRUzpuk3L9NX790gytHlNp5IxRw/tGdGBkawM09C6vjY9PTSh9f0JPb5/VI3DQtw1dUZfQo/vT6u3za0b+yV//L9weYf2HM3o8ERenuepWI0Jl61J6e6dw3rzi5fp3l3DGhzNKF+oqOxN3d9UzNZ4thTGIM/zwhiajFoyTTOMCZLfl4sVf7xudW2NZAoqVyoqlrxwTJcky/ZznYilMI+1JNmWtKg9pv5kTA/tGVGrY2s4U1Q8aunSNV2K2paePZrRhiUJfenePeF1Rm0pYpkaz1fkmJIbmRqLApb83LVQ9q+r5HkqlMp1x0h+f+9pq+9HtWOyWy1zxJQS0YiOZvzXHUta3R3XtoMTciKSV/GvpTFuBOWt/d6E65fdrX6uPeZoPFfU+mr+kMmVVZIUcwxFLUvnLUtqz9GM9hzNqOhNnc82/L40WZgaZ4N4cdHyDknSs0czes0Fi/W/f7BNk7mSDENa1tmqd14xoI997ykNzpLLtkUtdbY4ciOWzlqU0GimoHt2HpFt+7GpUPTq2k57NebVqo1txxOLGFqcjGnH4Ywsw48r4/nKtOOCvDPIGWpjaVdrRFeu79OvnbNIf/Nf27Wis0Uxx1KLY+ttl69STyIanmcondNX7tujq9b36lsPDSpT8Mve4th66bpuferHO/TBa89SV9zVV+7bo4tWdOgvbn9Cw5MF3XLtWXp075gyhVJ4/Me+95Qk6c+uPkMPPDsSHn8onVNX3NE5i5OSpKeHJjTQE6+7N7fetVM3vnS1vnj3Mxocyaij1dVoNq9scSomZwtlPXHA73dnLUqoM+7qt89frC//YreePDCu9165Vg88O6LrNi3T9kPjuvlft+rGl67W1+7fq2yhFM4D945kNdATV2fclWsb+sxdu7Smu0X7RnPauCypQ2M5HZ0sqCvu6EUrO/XfXrxcP3j8kNb0tOpj33tKf/0af+x/x1cfVrFclmNb+tBvrNeje8ckSW+7fJWOTOT1p/+yVZL0hy9ZpS/c/axiEVMP7x3VxmVJpbOlsA6eOJBWqezf58lCWYfSeUUdQy0RWx/6jfW6d+dRbdk9oohl6uO/c67O6m/XUDqnz/90V/h9kvT5n+4K72GtkcmCHtw9orMXJ7S/2tbPWpSoq/9P/td2FctlmYahRcmY/vyas/SvW/bp7h1HdPbihA6PF7S0I6ZdRyYVsUz92dVn6DN37tA9u4YVMaVLB7qUL1Z0/zPDOm9ZUofH8zo8ntfbX+Hnd8FYVTtuZ4t+rj0ymVdfe0wbl3WE9ZErlpUplHXLtWfp3p1Hdd+uozo0nlO5Iv3Pa87UlmdHdOe2IRmSzluW1GimFLajV57Zo3+6d49sSzp3SVI7hib83O+MHt1w2Sr94PFDum7TMknS3/1wu7buG9PSjliYW5iWqT//9TP17JGMjk7k9fTQhJZ2xLR3JKulHTE9uHtEhycK6mqNqDPuhm3xbZev0n3PHNX7vvmIZEi5ot9XTUOKxyL68Kv9NjI4ktHPdhxWtlDR0o6Y9gxndeNLV2kkU9TWfWPqjjvasmdExbKnd7xijf7lwX0aHMlMq6NSuVLXps9d0q7/9uLlYa6eiFr6q986R4/uHdMT+8f0i13DsqvjQdw1de6SpHYdntTvbV6uz/1klyaypXAuOJotKtKQE9W2o4f3jGo0W1IyZitimTo8UVDcNXXRipS2H5qoi6m1+VNPTd4TrNHkS5VwntmYa0l+3lkoTn890LgekYrZkmFoVXerfrlvVBXPH6MlqaM6z13UHtW+hjK2xWydvyypxwbT0+bbkr+mky162rgsqZHJgg6N55TJV8JyxRxDtmGoVKkoW/TP6WkqFz6W112wWLZl6sdPDelgOq+B7hbtHckqFrE0mi1p/aK4HjswIVtTaxeGpOWdLXrvlWv1uZ/s0niuqJFMQcVyWbmiwhjyhouW6jN37QrHiBbHUKrFVTpXlOd5M44xhupz1GC9IWZbOjxRUItryjFNjWRLYS4iKbz2wKL2qBJRe9r4aUoqlCrKl/38o7PVUTpbUEerq3ypog1L2+vakVP9X9UjEf+zFc9TtuCFdW9KOn95UuPVem6c+wf3xrEtXX/ZSn3yB9vrxmXTkN784mX6ziP7NVHN/xpFTOk9V67Vvzy4T88eyagsqasloiOZ6WsXpiTb9MvrmKaWplr0y8G0LEOKRAwVqnlKIChfbQ5nVH8qkga6W/TsET/3MSUtS/lx480XL9P3Hz8U5qjBGmMqZmus2p8DqZityXxJhuXPx+LVtbJH94yGdWFISrVM5XiN1zRbH5xN7drY8dTOq2pzmoBj+utW7TFHY5mCDMuPsTMJ1mdKlYpy1Wu9dE2XDqfz4bxutjIcSOf8cSlb3wpq+55j+uNYruTX60SuFM7DGlny663xvbp1qIbcOhg3gjW6Y0eP6Z9vFKzJBnNC25BKMxTW1NT98uTPeSaquXgtQ9IFy/04ODiaUa5Un+vaDevmtXUhQ+E6o+d50+o5kHBNpauxyamO5dsPjWsyV1ZZ/hygXFa4Zlp7DZGadfrOhrX5oByeZm/P0YhUKk5fJ5b8+50plORG/PWPQO2af7T6/Y1rHEa1bhzHlG0Y4bplplDWO68Y0P+7d7cOVdvfUDpf12+itqk3XLREX3tgjyzL/3xbNKIjEznlSv65I6aUbHE0OllQyau/Plt+/3EcU5VqnLar8ah2vT3oe7Yh2Xb9Gv1kvhK2i5LnKZevqKT6taFKtV6DeOM4/rhxZKIgp2YeGHdNlUoVxarrhcH3NuYFjbEgmHPHXUt/dvUZuvWunRoczdV9vrEvWIb0phcv0ze27FWm4CkWMdTmRqat/bW6plojtg5Xyxq0IUtSxDb1yrN69N3qGk5QzlbXrltvb3EM9bfHtLSjRY/uG1Miams0W9RotZ23x2xddVavvrFlcKamFzKq/w2uPRaRWpyI3nDRUn32rl0qV9uVZ0i/vXGx/u2RQZXLkmUZOmdJu3YdnlQiassyjfAZQu3zgV8OprWiGnMN+XnfWLYYrkHalqn+9qge25/WpQNdumB5hz76n09qdXdcTw9NaOOypI5OFPx1o8mCfv3cRfrXLYNyHEOOaco2TR3NFBWLSKZhqFxR+BwmYkmXrOnS6u42bVjarg985zFN5koyq2tA2w6mFXVsvfyMHl2wvEMf/vfHVahMrccHc8mH9ozo4GhWqrbdYH3ol/tGZZj140NtfDIlRSz/u54YTKtUvZ8XrUzp0Fiu7jnhys6YTMPQSKaoVGtEOw5n6u5TwjVVKFWUqK5hvHh1p6K2pQd3j2igN66Hdg8rV5KWdkR1aMzPZzrjfp6zqrtVj+9Pa31/QjuGJlSuVFSprnuWqu0uaAPr+uLaM5zVWzYv11fu26OxbGnG8Uby+64bMVQoeuHzjZnGH9fxxxevup7/wycPa/PqlK4+Z5H+4ruPq1Cuj2GS38c9zTymx11T+eqz2dpxrzaWS/XPUWvvTW0uWfE8FUt+0CzUfFkqZitXLitb8ORW43RZ/npdZ6ujlV0t+u7Wg9q4JKGH96XlVucxtjk1DwhsWJxQruS/ONMzYtc29K4rBnTXtiN6+8vX6Cu/2K07tw2po8VRvlTRplUpdbQ44drERL6kI+mcHMdfO8qVKnXPYJzqM9zBkawOjWXVUX2+GHftcH26cc2zv931n2nuHfXX56ptI4hzo9mi1vbGtePQRNi+Y870HDO457YptVU/t3FZUgfGchoczYVlOzSWC8f02fK3ZNRSJl8O12yDPiT5c6za+WNwb4P2Vi554fp+4xpaMM4/cWBMmYIXtpsNixMqe/5zia2DY9o/mlO0mjMHbSVXvd6u1ogK5Ur4LH2yMFsvmVntOl5tuw3ytSB3MiXFXH8+EuTttWOn6/jXWDtPqR3LgmcOAdfyn30Ez1eCNZLgeXOtzatTao9G9POdR5TNl+vimusYytd8Z61gfXz/aE65Yllj2aIcy9TQREG2IbVG/TnwnqOZun4wE0PSxatTmsiVwrGvs9XRRLYQxuNAUHeWIb3m/MX6zsOD4fPxIG8K8uuBnhaN58rTnl0aktzqWkBb9R61OIZcqz5XD55HBvspTMOQW80/Yo6pyUJFUUsKUrdodQ16aapVV63v1Wfv2qVIRCpW40qw/6DxWU3ElFqqz8CSUUvZQlmlylRfqW070YhUKUtmde4Vra5rL021hHUX5G9tNblLY5wMjgue084UL6K25NqWuttcvWhlp951xdq6dV8gYHie99yi4yk0MjKijRs36mUve5luvPFGdXd36+mnn9bq1au1evXqEzpHOp1We3u7xsbGlEgk5rjEmAt//u1f6sv37TnmMZtXd2pVV+txj2tGPW2uhsanb+TByfXfNi07LdvPyXb12X363mMH57sYTetXqb9zl7Rr676xk1qOv3v9eXrX1x+Z9f2gP8x2XEdLRCOzLDjP9B2bV3fqnp1H664leO1EbV7dqf/xa2fq1z919zGPW9IR076R7IzvnYz2+3evP0+SptXLe1+5Vk8cSJ/w+efivmJhxvITHceP1Xal53dtz7W/nezcw9/4OnH8A+dAW9TWeK40r2X4VTVjmReSmWL+QowRJ8t7X7lWf3PH9rrXbn/7pTp7cXv498cGx/Trn7p7xvE9+Pzfvf48remJ69c/dXfdORvrrva94M8zlWEmwb35Vcbl2rIH33f72y/VnU8N6W/u2H7cc57I+Bt8R3DN733lWkmqu7ba+rj97Zdqx9BEWK7n084aP/t3rz9Pv7lxcXjvgu+TdNycaDYz1dHx7t2J3tvnOt40mqnuZrunwevHipXBvTxenf0qbfH2t1+qr92/Z9Z7fax2MFs7fK7119iXT6TtPd97hOfveDmfYxkqlGdeqj3ePWaOUW+29n4iOdZC6yvkhcDp4URyDvp7veeSp52MujtZ6yHHG++PZabx/Pmc70Qdr65/1TIcL3/heUO9ucrnatfzm7nOgz4arf4P7s9XkPOd6JwXwOxOxVj1qzod58qN675oHnO9f21B/wbAv/7rv9bSpUv1xS9+MXxt5cqV81giAAAAAAAAAAAAAAAAAAAWBnO+C3As//7v/64LL7xQr33ta9XT06ONGzfqH/7hH475mXw+r3Q6XfcDAAAAAAAAAAAAAAAAAMDpZkFvANy1a5duvfVWDQwM6Ac/+IFuvPFGveMd79Btt90262c++tGPqr29PfxZunTpKSwxAAAAAAAAAAAAAAAAAACnxoLeAFipVHT++efrIx/5iDZu3Ki3ve1tuuGGG/TZz3521s+8//3v19jYWPizd+/eU1hiAAAAAAAAAAAAAAAAAABOjQW9AXDRokU666yz6l4788wztWfPnlk/47quEolE3Q8AAAAAAAAAAAAAAAAAAKebBb0B8JJLLtG2bdvqXtu+fbuWL18+TyUCAAAAAAAAAAAAAAAAAGBhsOe7AMfy7ne/W5s3b9ZHPvIRve51r9P999+vz3/+8/r85z8/30XDKbRpVUrffHCP8mX/7wnXVDZfUbHmmMsGOrWko0XfeGCPChUpYkq9iahc25RtmVrV1arth8a1fyyjbPWDEVNanIypK+7qoT2jch1DXsVTriStTMX07HBWliFZlpQv+Z9x7ak/J6OWRnNlGZJSrY7GJguqvqW4Y2ii4EmS+hOu9qfzaolImaLkmFKlIpUktbqmultdeZJGMgV5nqeK56lQ9FTxJBnSppUd+o+tB2Vb0oUrUjo6UdBYtqiD6bwkfxfvur64nj2a0YrOFj15cKKu/mxD6muPqtW11dnqaMvuYcmYuo5apiTXMZQrePKqrxmSFiejyhTKGs4UtTQZ1d7R3Kz3q7fNkW2ZOjyW86+hhmFIdsRQueTJtKRCUepqc5UpFJUvVPzyVt83TL+MXa0RZYol5Yue1vcntGc4o2K5rHJF6ktE9exwNjx/W9TSut42Pbx7VGVJriUZhqGVXa166uCEzOr1NF76JatT2rQqpdu37lcmX5JlG6qUPaVaXWWLZSVjEXmSxrJFGZJGsiVZksrV85nVP7e6pjpijobSOVUvJ6zDvvaoPM/ToXReLdXjRrMFFYoVWbahUtFTyZM8+dfcHotIktK5kg5PFKbd05hrqT0a0Wi2oGy+onK17pMtjlzb1NbBdN19XdcX186hCVUqU/ehWPBUlpSMRZTOFbW+P6F9I1klorYmC+W6743aUqsb0SVrOrXr8IQGRzMqlT2dvbhd2w+Nq1CqhH+eyJVVc/nasDihiXxJB9JZ5QqeutpcTeQLyhU8tcciGsnW9mZfMmqpIilfLCtf9u+l50mRiKlisaJCxX8tGrHU0eKE9ycZi8iNWOpsdXTfrmGVG85rSmHZIoZ/zrKk7jZXhVJZsYilI+m8itX7uSgR1UBPW138iEUk2zRVLFeUK0mWJMfx72HF88/f3eYqVyypXKkoX/BUktQes3XJmk49sX9Mu2varWNKhYrU3+5qRWerHt47qvX9CW0/NK5i2dNlazp1YDQr1zaVzhVlGYbOW5bU9kMTOjiWU0+bqwPpvGK2lC1JZ/XFNZyZihG1YhFDrzp7kdb2xnX9pSu1c2hcdz99RCVvqswRy9SmVSl1xl2t7Y1r86qU7tk1HPYfGdKFy5O648nD6m1zFI1YOjqZV7FUUYtjayRb0iWrU1rbG9dvndeve3cd1WUDndp9dFKXrenUtgNjMgxTlw10Kp0tKlsoKVeqaGg0p1K1r5iGdHQ8p662qPKlio5MFHTZQKd62lz97ouWasvukTAO2obkOqbK5YryJWnzqpS+u3VQtc3KkPTSdd26ZE2n7nzqoCK2pZhtaaihb0VtqSvux7slHTFtHUyH/bclYirm2FrbG5ckre5q0e4jGZUkJaKWNi5LqqM1oh8+cVBrevyYPNAT17aD6TDmRkxpTU9cO4b8usgXy9o7MqlcwVNv9TtGMkUNZ4pamYppcDQrwzC0qN2Pdaak1qiluGPrcDo/LZYFbXxVd4t2Hs6oIQSH44Frm8qVKmGcLsuPPZYhLe2IaWVXqx7YPayJvN9bohGpXPL7i2lKMcfSWK4sy5ASUf+eB/WciNoay5VUDWHKV+P8WCavfNk/JihXxJCK3lTdVyp+H5fnKV+NT4s7YjqnP6EnDqR1YCSrSrUMnXFXk4WSiuWy8kWptz2qzlZHm1aldO/OI9o3nJHj+HEynSuGxwUxJ4gFjiUVytJFy5Ma6G3T9oPjenDP6LR4Ifm5wTM1fbfFMXXe0qQeGxxTvljWovaYYo5VNw6b1XH89q0HJfn9bCJfUKZQf3firqXNq1L6xpbBsK8F8WvD4oRM0++Xj+wd1UimoMNjORWrY4ZjSqWKXwemIQ2N5lSsaQu7j2Z12UCnVnS2aMvuEeWKZQ2NZ5UtTsXnkUxRm1alNDiS1dbBtDat7NADz45oVXerHhscU65QDsfl3jZHxbKn4UxRGxYntKo7rq37RjWSKao34erJgxOKu6a6Wl09O5xVxJQuXZ3S3qMTkgxtXtOpZMzRQ3tGdGAkK8M0tK6vTU8PTWh9f0KP7x9V47AQd02d0ZfQ4/vT6m1z68Z+yR//L1zeoT1HMzo8kZfneSpWY8LGJQndvXNYl65OyTKkwdGM8oWKyt7U/U3FbI1nS2EM8jwvjKHJqCXTNMOYIPl9uVjxx+tW19ZIpqBypaJiyQvHdEmybD/XiVgK81hLkm1Ji9pj6k/G9NCeEbU6toYzRcWjli5d06WobenZoxltWJLQjqGp9hS1pYhlajxfkWNKbmRqLApY8nPXQtm/rpLnqVAq1x0j+f29p62+H9WOyW61zBFTSkQjOprxX3csaXV3XNsOTsiJSF7Fv5bGuBGUt/Z7E65fdrf6ufaYo/FcUeur+UMmV1ZJUswxFLUsnbcsqT1HM9pzNKOiN3U+2/D70mRhapwN4sVFyzskSc8ezeiSNZ26d+cRTeZKMgxpWWerNq1K6c5tQxqcJZdti1rqbHHkRiydtSih0UxB9+w8Itv2Y1Oh6NW1nfZqzKtVG9uOJxYxtDgZ047DGVmGH1fG85VpxwV5Z5Az1MbSrtaIrlzfp43Lktq4NKkVnS2KOZZaHFs9bW7deXraXL3zFQNhHpAp+GVvcWxtXJbUppX++N0V94/buCypdb1xDU8WtGlVStGIpUyhFB5/dr//2/Y3LkvWHX8onVNX3NE5i5OSpKeHJjTQE6+7N1v3jeqSNZ3afjCtwZGMOlpdjWbzyhanYnK2UNYTB/x+d9aiRJib/O6LlurJA+Ph9/a0udq4LKnFyaguWdOpvcMZZQulcB64dySrgZ64OuOuXNvQL/eNaU13i/aN5rRxWVKHxnI6OllQV9zRi1Z2am1vXO98xYDW9LTqzm1D2rjMv45US0TFclmObYX1EdSraSisj02rUnp8f1qxiKmH945q47Kk0tlSWAdPHEirVPbv82ShrEPpvKKOoZaIrU2rUqp4nrbsHlHEMsO8o6fN1fWXrgz/LKnuHtYamSzowd0jOntxQvurbf2sRYm6+r9v11EVy2WZhqFFyZg2Lkvqt87r1907jujsxQkdHi9oaUdMu45MKmKZ2rgsGeaEEVO6dKBL+WJF9z8zrPOWJXV4PK/D4/kwvwvGqtpxO1v0c+2Rybz62mPauKwjrI9csaxMoRxe/327jurQeE7linTJmk5FbVN3bhuSIem8ZUmNZkphO7p0dUq7hiZkW9K5S5LaMTTh535n9IT3Mqiz333RUm3dN6alHbEwtzAtU5es6dTiZExHJ/J6emhCSzti2juS1dKOmB7cPaLDEwV1tUbUGXfDttjT5mrTqpT+ZcseyZByRb+vmoYUj0XCNjI4ktHPdhxWtlDR0o6Y9gxnddmaTp3dn9DWfWPqjjvasmfEz/sHOnVoLKvBkcy0OiqVK3Vt+twl7XW5eiI61S6f2D+mX+wall0dD+KuqXOXJLXr8KQuG/DnIxPZUjgXHM0WFWnIiWrb0cN7RjWaLSkZsxWxTB2eKCjumrpoRUrbD03UxdTa/KmnJu8J1mjypUo4z2zMtSQ/7ywUp78eaFyPSMVsyTC0qrtVv9w3qornj9GS1FGd5y5qj2pfQxnbYrbOX5bUY4PpafNtyV/TyRY9bVyW1MhkQYfGc8rkK2G5Yo4h2zBUqlSULfrn9DSVCx/L5lUp2ZapHz81pIPpvAa6W7R3JKtYxNJotqS1Pa167MCEbE2tXRiSlne2hPngeM7vZ8VyWbmiwhhy2ZpO/XLfWDhGtDiGUi2u0rmiPM+bcYwxVJ+jBusNMdvS4YmCWlxTjmlqJFsKcxFJ4bUHFrVHlYja08ZPU1KhVFG+7Ocfna2O0tmCOlpd5UsVbVjaXteOnOr/qh6J+J+teJ6yBS+se1PS+cuTGq/Wc+PcP7g3jm3psoFOPbDraN24bBp+bnpkPKeJav7XKGIq7I/PHsmoLKmrJaIjmelrF6Yk2/TL65imlqZa9MvBtCxDikQMFap5SiAoX20OZ1R/KpIGulv07BE/9zElLUv5cePS1SlN5Kbm+cEaYypma6zanwOpmK3JfEmG5c/H4tW1skf3jIZ1Ycgf147Ock2z9cHZ1K6NHU/tvKo2pwk4pr9u1R5zNJYpyLD8GDuTYH2mVKkoV73WS9d06XA6H87rZivDgXTOH5ey9a2gtu85pj+O5Up+vU7kSuE8rJElv94a36tbh2rIrYNxI1ijO3b0mP75RsGabDAntA2pNENhTU3dL0/+nGeimovXMiRdsNyPg4OjGeVK9bmu3bBuXlsXMhSuM3qeN62eAwnXVLoam5zqWL790Lgmc2WV5c8BymWFa6a11xCpWafvbFibD8rhafb2HI1IpeL0dWLJv9+ZQkluxF//CNSu+Uer39+4xmFU68ZxTNmGEa5bZgrlcF31ULX9DaXzdf0mapu6dHVK+4YnZFn+59uiER2ZyClX8s8dMaVki6PRyYJKXv312fL7j+OYqlTjtF2NR7Xr7UHfsw3JtuvX6CfzlbBdlDxPuXxFJdWvDVWq9RrEG8fxx40jEwU5NfPAuGuqVKooVl0vDL63MS9ojAXBnDvuWmHONziaq/t8Y1+wqvF9/+ikMgVPsYihNjcybe2v1TXVGrF1uFrWoA1ZkiK2qU0rO/Td6hpOUM5W165bb29xDPW3x7S0o0WP7htTImprNFvUaLWdt8fscI3nWIzqf4Nrj0WkFieiy9Z06vF9YypX25Vn+PnDvz0yqHJZsixD5yxp167Dk0pEbVmmET5DqH0+8MvBtFZUY64hP+8byxbDNUjbMtXfHtVj+9O6dKBLFyzv0E+3D2l1d1xPD01o47Kkjk4U/HWjyYI2r0rpX7cMynEMOaYp2zR1NFNULCKZhqFyReFzmIglXbKmS6u727Rhabtu37pfk7mSzOoa0LaDaUUdWy8/o0cXLO/Qj544qEJlaj0+mEs+tGdEB0ezUrXtButDv9w3KsOsHx9q45MpKWL53/XEYFql6v28aGVKh8Zydc8JV3bGZBqGRjJFpVoj2nE4U3efEq6pQqmiRHUN48WrOxW1LT24e0QDvXE9tHtYuZK0tCOqQ2N+PtMZ9/OcVd2tenx/Wuv7/fWdcqWiSnXds1Rtd0EbWNcXD+cKe45OaixbmnG8kfy+60YMFYpe+HxjpvHHdfzxxauu5//wycPavDqlS9Z06sdPHlShXB/DJL+Pe5p5TI+7pvLVZ7O1415tLJfqn6PW3pvaXLLieSqW/KBZqPmyVMxWrlxWtuDJrcbpsvz1us5WRyu7WvTdrQd1Zl9cD+9Ly63OY2xzah4Q2LA4oVzJf3GmZ8SubeiygU6VK37ef/X6Xt25bUgdLY7ypYo2rUqpo8UJ1yYm8iUdSefkOP7aUa5UqXsG41Sf4Q6OZHVoLKuO6vPFuGuH69ONa5797a7/THPvqL8+V20bQZwbzRa1tjeuHYcmwvYdc6bnmME9t02prfq5jcuSOjCW0+BoLizbobFcOKbPlr8lo5Yy+XK4Zhv0IcmfY9XOH4N7G7S3cskL1/cb19CCcf6JA2PKFLyw3WxYnFDZ859LbB0c0/7RnKLVnDloK7nq9Xa1RlQoV8Jn6ZOF2XrJzGrX8WrbbZCvBbmTKSnm+vORIG+vHTtdx7/G2nlK7VgWPHMIuJb/7CN4vhKskQTPm2ttXp1SezSin+88omy+XBfXXMdQvuY7awXr4/tHc8oVyxrLFuVYpoYmCrINqTXqz4H3HM3U9YOZGJIuXp3SRK4Ujn2drY4msoUwHgeCurOqY9V3Hh4Mn48HeVOQXw/0tGg8V5727NKQ5FbXAtqq96jFMeRa9bl68Dwy2E9hGobcav4Rc0xNFiqKWlKQukWra9BLU63h2BqJSMVqXAn2HzQ+q4mYUkv1GVgyailbKKtUmeortW0nGpEqZcmszr2i1XXtpamWsO6C/K2tJndpjJPBccFz2pniRdSWXNtSd5urF63snLbuCwQMz/OeW3Q8xW6//Xa9//3v19NPP62VK1fqPe95j2644YYT/nw6nVZ7e7vGxsb454ABAAAAAAAAAAAAAAAAAKfMXO9fW/AbAJ8vNgACAAAAAAAAAAAAAAAAAObDXO9fM0/6GQEAAAAAAAAAAAAAAAAAwJxjAyAAAAAAAAAAAAAAAAAAAE2IDYAAAAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAAEATYgMgAAAAAAAAAAAAAAAAAABNiA2AAAAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAABAE2IDIAAAAAAAAAAAAAAAAAAATYgNgAAAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAAAQBNiAyAAAAAAAAAAAAAAAAAAAE2IDYAAAAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAANCE2AAIAAAAAAAAAAAAAAAAAEATYgMgAAAAAAAAAAAAAAAAAABNiA2AAAAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAADQhOz5LsBc8zxPkpROp+e5JAAAAAAAAAAAAAAAAACAF5Jg31qwj+1kO+03AI6Pj0uSli5dOs8lAQAAAAAAAAAAAAAAAAC8EI2Pj6u9vf2kn9fw5mpr4QJRqVS0f/9+tbW1yTCM+S4OfgXpdFpLly7V3r17lUgk5rs4ACCJ2ARg4SI+AViIiE0AFiJiE4CFivgEYCEiNgFYqIhPABaixtjkeZ7Gx8fV398v0zRP+ved9r8B0DRNLVmyZL6LgZMgkUgwYANYcIhNABYq4hOAhYjYBGAhIjYBWKiITwAWImITgIWK+ARgIaqNTXPxm/8CJ39LIQAAAAAAAAAAAAAAAAAAmHNsAAQAAAAAAAAAAAAAAAAAoAmxARALnuu6+uAHPyjXdee7KAAQIjYBWKiITwAWImITgIWI2ARgoSI+AViIiE0AFiriE4CF6FTHJsPzPO+UfBMAAAAAAAAAAAAAAAAAADhp+A2AAAAAAAAAAAAAAAAAAAA0ITYAAgAAAAAAAAAAAAAAAADQhNgACAAAAAAAAAAAAAAAAABAE2IDIAAAAAAAAAAAAAAAAAAATYgNgFjQPv3pT2vFihWKRqPatGmT7r///vkuEoDT2Ec/+lFddNFFamtrU09Pj37zN39T27ZtqzvmpS99qQzDqPv5oz/6o7pj9uzZo2uuuUYtLS3q6enR+973PpVKpVN5KQBOMx/60IemxZ4zzjgjfD+Xy+mmm25SZ2en4vG4XvOa1+jQoUN15yA2ATjZVqxYMS02GYahm266SRJ5E4BT46c//amuvfZa9ff3yzAMfec736l73/M83XLLLVq0aJFisZiuuOIKPf3003XHDA8P67rrrlMikVAymdQf/MEfaGJiou6YrVu36rLLLlM0GtXSpUv18Y9/fK4vDUCTO1Z8KhaLuvnmm3XOOeeotbVV/f39evOb36z9+/fXnWOmfOtjH/tY3THEJwDPxfFyp7e85S3T4s6rXvWqumPInQDMhePFp5nWoAzD0Cc+8YnwGHInACfbiewfOFnP6O666y6df/75cl1Xa9as0Ze+9KXnVFY2AGLB+vrXv673vOc9+uAHP6iHHnpIGzZs0FVXXaWhoaH5LhqA09RPfvIT3XTTTfrFL36hO+64Q8ViUVdeeaUmJyfrjrvhhht04MCB8Kd2clAul3XNNdeoUCjonnvu0W233aYvfelLuuWWW0715QA4zaxfv74u9tx9993he+9+97v13e9+V9/85jf1k5/8RPv379dv//Zvh+8TmwDMhQceeKAuLt1xxx2SpNe+9rXhMeRNAOba5OSkNmzYoE9/+tMzvv/xj39cf//3f6/Pfvazuu+++9Ta2qqrrrpKuVwuPOa6667T448/rjvuuEO33367fvrTn+ptb3tb+H46ndaVV16p5cuXa8uWLfrEJz6hD33oQ/r85z8/59cHoHkdKz5lMhk99NBD+sAHPqCHHnpI3/rWt7Rt2zb9xm/8xrRjP/zhD9flU29/+9vD94hPAJ6r4+VOkvSqV72qLu589atfrXuf3AnAXDhefKqNSwcOHNAXvvAFGYah17zmNXXHkTsBOJlOZP/AyXhG98wzz+iaa67Ry172Mj3yyCN617vepeuvv14/+MEPTrywHrBAvehFL/Juuumm8O/lctnr7+/3PvrRj85jqQC8kAwNDXmSvJ/85Cfhay95yUu8d77znbN+5j//8z890zS9gwcPhq/deuutXiKR8PL5/FwWF8Bp7IMf/KC3YcOGGd8bHR31IpGI981vfjN87cknn/Qkeffee6/necQmAKfGO9/5Tm/16tVepVLxPI+8CcCpJ8n79re/Hf69Uql4fX193ic+8YnwtdHRUc91Xe+rX/2q53me98QTT3iSvAceeCA85nvf+55nGIY3ODjoeZ7nfeYzn/E6OjrqYtPNN9/srVu3bo6vCMDpojE+zeT+++/3JHm7d+8OX1u+fLn3t3/7t7N+hvgE4PmYKTb93u/9nvfqV7961s+QOwE4FU4kd3r1q1/tvfzlL697jdwJwFxr3D9wsp7R/emf/qm3fv36uu96/etf71111VUnXDZ+AyAWpEKhoC1btuiKK64IXzNNU1dccYXuvffeeSwZgBeSsbExSVIqlap7/Stf+Yq6urp09tln6/3vf78ymUz43r333qtzzjlHvb294WtXXXWV0um0Hn/88VNTcACnpaefflr9/f1atWqVrrvuOu3Zs0eStGXLFhWLxbq86YwzztCyZcvCvInYBGCuFQoFffnLX9bv//7vyzCM8HXyJgDz6ZlnntHBgwfr8qT29nZt2rSpLk9KJpO68MILw2OuuOIKmaap++67Lzzm8ssvl+M44TFXXXWVtm3bppGRkVN0NQBOd2NjYzIMQ8lksu71j33sY+rs7NTGjRv1iU98ou6fiSI+AZgLd911l3p6erRu3TrdeOONOnr0aPgeuROAheDQoUP6j//4D/3BH/zBtPfInQDMpcb9AyfrGd29995bd47gmOeyP8r+1S4JmFtHjhxRuVyu6wCS1Nvbq6eeemqeSgXghaRSqehd73qXLrnkEp199tnh67/7u7+r5cuXq7+/X1u3btXNN9+sbdu26Vvf+pYk6eDBgzPGruA9APhVbNq0SV/60pe0bt06HThwQP/rf/0vXXbZZXrsscd08OBBOY4z7SFRb29vGHeITQDm2ne+8x2Njo7qLW95S/gaeROA+RbEkpliTW2e1NPTU/e+bdtKpVJ1x6xcuXLaOYL3Ojo65qT8AF44crmcbr75Zr3xjW9UIpEIX3/HO96h888/X6lUSvfcc4/e//7368CBA/rkJz8pifgE4OR71atepd/+7d/WypUrtXPnTv2P//E/dPXVV+vee++VZVnkTgAWhNtuu01tbW11/8SmRO4EYG7NtH/gZD2jm+2YdDqtbDarWCx23PKxARAAgBncdNNNeuyxx3T33XfXvf62t70t/PM555yjRYsW6RWveIV27typ1atXn+piAniBuPrqq8M/n3vuudq0aZOWL1+ub3zjGyeU9APAXPvHf/xHXX311erv7w9fI28CAAA4vmKxqNe97nXyPE+33npr3Xvvec97wj+fe+65chxHf/iHf6iPfvSjcl33VBcVwAvAG97whvDP55xzjs4991ytXr1ad911l17xilfMY8kAYMoXvvAFXXfddYpGo3WvkzsBmEuz7R9YKPgngLEgdXV1ybIsHTp0qO71Q4cOqa+vb55KBeCF4o//+I91++23684779SSJUuOeeymTZskSTt27JAk9fX1zRi7gvcA4GRIJpNau3atduzYob6+PhUKBY2OjtYdU5s3EZsAzKXdu3frhz/8oa6//vpjHkfeBOBUC2LJsdaX+vr6NDQ0VPd+qVTS8PAwuRSAORds/tu9e7fuuOOOut/+N5NNmzapVCrp2WeflUR8AjD3Vq1apa6urrp5HLkTgPn0s5/9TNu2bTvuOpRE7gTg5Jlt/8DJekY32zGJROKEfxEIGwCxIDmOowsuuEA/+tGPwtcqlYp+9KMf6eKLL57HkgE4nXmepz/+4z/Wt7/9bf34xz+e9mvAZ/LII49IkhYtWiRJuvjii/XLX/6ybhEkWMA966yz5qTcAF54JiYmtHPnTi1atEgXXHCBIpFIXd60bds27dmzJ8ybiE0A5tIXv/hF9fT06JprrjnmceRNAE61lStXqq+vry5PSqfTuu++++rypNHRUW3ZsiU85sc//rEqlUq4cfniiy/WT3/6UxWLxfCYO+64Q+vWreOfiALwKws2/z399NP64Q9/qM7OzuN+5pFHHpFpmuE/v0l8AjDX9u3bp6NHj9bN48idAMynf/zHf9QFF1ygDRs2HPdYcicAz9fx9g+crGd0F198cd05gmOe0/4oD1igvva1r3mu63pf+tKXvCeeeMJ729ve5iWTSe/gwYPzXTQAp6kbb7zRa29v9+666y7vwIED4U8mk/E8z/N27NjhffjDH/YefPBB75lnnvH+7d/+zVu1apV3+eWXh+colUre2Wef7V155ZXeI4884n3/+9/3uru7vfe///3zdVkATgPvfe97vbvuust75plnvJ///OfeFVdc4XV1dXlDQ0Oe53neH/3RH3nLli3zfvzjH3sPPvigd/HFF3sXX3xx+HliE4C5Ui6XvWXLlnk333xz3evkTQBOlfHxce/hhx/2Hn74YU+S98lPftJ7+OGHvd27d3ue53kf+9jHvGQy6f3bv/2bt3XrVu/Vr361t3LlSi+bzYbneNWrXuVt3LjRu++++7y7777bGxgY8N74xjeG74+Ojnq9vb3em970Ju+xxx7zvva1r3ktLS3e5z73uVN+vQCax7HiU6FQ8H7jN37DW7JkiffII4/UrUPl83nP8zzvnnvu8f72b//We+SRR7ydO3d6X/7yl73u7m7vzW9+c/gdxCcAz9WxYtP4+Lj3J3/yJ969997rPfPMM94Pf/hD7/zzz/cGBga8XC4XnoPcCcBcON7czvM8b2xszGtpafFuvfXWaZ8ndwIwF463f8DzTs4zul27dnktLS3e+973Pu/JJ5/0Pv3pT3uWZXnf//73T7isbADEgvapT33KW7Zsmec4jveiF73I+8UvfjHfRQJwGpM0488Xv/hFz/M8b8+ePd7ll1/upVIpz3Vdb82aNd773vc+b2xsrO48zz77rHf11Vd7sVjM6+rq8t773vd6xWJxHq4IwOni9a9/vbdo0SLPcRxv8eLF3utf/3pvx44d4fvZbNb77//9v3sdHR1eS0uL91u/9VvegQMH6s5BbAIwF37wgx94krxt27bVvU7eBOBUufPOO2ecx/3e7/2e53meV6lUvA984ANeb2+v57qu94pXvGJazDp69Kj3xje+0YvH414ikfDe+ta3euPj43XHPProo96ll17qua7rLV682PvYxz52qi4RQJM6Vnx65plnZl2HuvPOOz3P87wtW7Z4mzZt8trb271oNOqdeeaZ3kc+8pG6TTieR3wC8NwcKzZlMhnvyiuv9Lq7u71IJOItX77cu+GGG6b9Yg5yJwBz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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(1, 1, figsize=(32, 8))\n", - "ax.plot(x, y, \"|\")\n", - "ax.set_xlabel(\"Time (s)\")\n", - "ax.set_ylabel(\"Unit\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot waveform of a unit" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's pick one unit and further inspect" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "unit_key = (subset & \"unit = 15\").fetch1(\"KEY\")" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

curation_id

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " \n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", - "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", - "
\n", - "

waveform_mean

\n", - " (uV) mean waveform across spikes of the given unit\n", - "
\n", - "

waveforms

\n", - " (uV) (spike x sample) waveforms of a sampling of spikes at the given electrode for the given unit\n", - "
subject62021-01-15 11:16:38001156f6d8149-1603-9d2c-f884-0fdf995ec8b3neuropixels 1.0 - 3B14good16094=BLOB==BLOB==BLOB==BLOB==BLOB=
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *curation_id *unit *electrode_con *probe_type *electrode cluster_qualit spike_count spike_time spike_site spike_dept waveform_m waveforms \n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+ +--------+ +--------+\n", - "subject6 2021-01-15 11: 0 0 1 15 6f6d8149-1603- neuropixels 1. 14 good 16094 =BLOB= =BLOB= =BLOB= =BLOB= =BLOB= \n", - " (Total: 1)" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering.Unit * ephys.WaveformSet.Waveform & unit_key" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "unit_data = (\n", - " ephys.CuratedClustering.Unit * ephys.WaveformSet.PeakWaveform & unit_key\n", - ").fetch1()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'subject': 'subject6',\n", - " 'session_datetime': datetime.datetime(2021, 1, 15, 11, 16, 38),\n", - " 'insertion_number': 0,\n", - " 'paramset_idx': 0,\n", - " 'curation_id': 1,\n", - " 'unit': 15,\n", - " 'electrode_config_hash': UUID('6f6d8149-1603-9d2c-f884-0fdf995ec8b3'),\n", - " 'probe_type': 'neuropixels 1.0 - 3B',\n", - " 'electrode': 14,\n", - " 'cluster_quality_label': 'good',\n", - " 'spike_count': 16094,\n", - " 'spike_times': array([6.07000000e-02, 9.44666667e-02, 1.99133333e-01, ...,\n", - " 1.90760683e+03, 1.90765233e+03, 1.90774290e+03]),\n", - " 'spike_sites': array([14, 14, 14, ..., 14, 14, 14]),\n", - " 'spike_depths': array([160.47843593, 167.44142806, 169.35855343, ..., 166.23517905,\n", - " 166.6919545 , 166.85568899]),\n", - " 'peak_electrode_waveform': array([104.2078125, 104.55 , 104.7234375, 103.7296875, 103.4578125,\n", - " 104.1328125, 104.3296875, 104.3484375, 104.86875 , 104.60625 ,\n", - " 104.5359375, 104.878125 , 104.7328125, 104.79375 , 105.2296875,\n", - " 105.2578125, 104.971875 , 104.7796875, 104.971875 , 104.64375 ,\n", - " 104.0203125, 103.546875 , 104.4234375, 103.7015625, 103.771875 ,\n", - " 103.0453125, 103.284375 , 103.2375 , 104.1234375, 104.428125 ,\n", - " 104.1046875, 104.071875 , 103.8984375, 103.9453125, 104.1609375,\n", - " 103.81875 , 103.85625 , 103.7765625, 104.128125 , 104.390625 ,\n", - " 104.5453125, 104.775 , 104.671875 , 105.0328125, 105.253125 ,\n", - " 105.1359375, 105.0421875, 105.0234375, 104.8875 , 104.9765625,\n", - " 105.384375 , 105.703125 , 105.628125 , 105.05625 , 105.3140625,\n", - " 104.775 , 104.4984375, 104.428125 , 104.4328125, 103.7484375,\n", - " 103.5515625, 103.9359375, 104.1609375, 103.55625 ])}" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unit_data" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "sampling_rate = (ephys.EphysRecording & insertion_key).fetch1(\n", - " \"sampling_rate\"\n", - ") / 1000 # in kHz\n", - "plt.plot(\n", - " np.r_[: unit_data[\"peak_electrode_waveform\"].size] * 1 / sampling_rate,\n", - " unit_data[\"peak_electrode_waveform\"],\n", - ")\n", - "plt.xlabel(\"Time (ms)\")\n", - "plt.ylabel(r\"Voltage ($\\mu$V)\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Summary and Next Step" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook highlights the major tables in the workflow and visualize some of the ingested results.\n", - "\n", - "The next notebook [06-drop](06-drop-optional.ipynb) shows how to drop schemas and tables if needed." - ] - } - ], - "metadata": { - "jupytext": { - "formats": "ipynb,py_scripts//py" - }, - "kernelspec": { - "display_name": "Python 3.9.12 ('ele')", - "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.9.12" - }, - "vscode": { - "interpreter": { - "hash": "61456c693db5d9aa6731701ec9a9b08ab88a172bee0780139a3679beb166da16" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/06-drop-optional.ipynb b/notebooks/06-drop-optional.ipynb deleted file mode 100644 index 463769c..0000000 --- a/notebooks/06-drop-optional.ipynb +++ /dev/null @@ -1,92 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Drop schemas\n", - "\n", - "+ Schemas are not typically dropped in a production workflow with real data in it.\n", - "+ At the developmental phase, it might be required for the table redesign.\n", - "+ When dropping all schemas is needed, the following is the dependency order." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Change into the parent directory to find the `dj_local_conf.json` file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8eab5470", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "if os.path.basename(os.getcwd()) == \"notebooks\": os.chdir(\"..\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting root@localhost:3306\n" - ] - } - ], - "source": [ - "from workflow_array_ephys.pipeline import *" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# ephys.schema.drop()\n", - "# probe.schema.drop()\n", - "# session.schema.drop()\n", - "# subject.schema.drop()\n", - "# lab.schema.drop()" - ] - } - ], - "metadata": { - "jupytext": { - "formats": "ipynb,py_scripts//py" - }, - "kernelspec": { - "display_name": "Python 3.9.13 ('ele')", - "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.9.13" - }, - "vscode": { - "interpreter": { - "hash": "d00c4ad21a7027bf1726d6ae3a9a6ef39c8838928eca5a3d5f51f3eb68720410" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/07-downstream-analysis.ipynb b/notebooks/07-downstream-analysis.ipynb deleted file mode 100644 index a4604b1..0000000 --- a/notebooks/07-downstream-analysis.ipynb +++ /dev/null @@ -1,1795 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "15bdef0d-bd52-49e6-87a0-d569006149a0", - "metadata": { - "tags": [] - }, - "source": [ - "# Event-aligned spike time analysis" - ] - }, - { - "cell_type": "markdown", - "id": "15ba9ad8-f0e4-48ec-b959-324c35c7581b", - "metadata": { - "tags": [] - }, - "source": [ - "## Setup" - ] - }, - { - "cell_type": "markdown", - "id": "fdb8265a-129e-4ccb-b995-bb4ff30d756d", - "metadata": {}, - "source": [ - "First, let's change directories to find the `dj_local_conf` file." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "921a4a03", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "if os.path.basename(os.getcwd()) == \"notebooks\": os.chdir(\"..\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "e69b8c23", - "metadata": {}, - "outputs": [], - "source": [ - "# We'll be working with long tables, so we'll make visualization easier with a limit\n", - "import datajoint as dj\n", - "dj.config[\"display.limit\"] = 10" - ] - }, - { - "cell_type": "markdown", - "id": "84b2c6ae-b8cd-47b8-af38-812f65032933", - "metadata": {}, - "source": [ - "Next, we populate the python namespace with the required schemas" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "79cef246", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-09-15 10:14:05,277][INFO]: Connecting cbroz@tutorial-db.datajoint.io:3306\n", - "[2022-09-15 10:14:05,749][INFO]: Connected cbroz@tutorial-db.datajoint.io:3306\n" - ] - } - ], - "source": [ - "from workflow_array_ephys.pipeline import session, ephys, trial, event, analysis" - ] - }, - { - "cell_type": "markdown", - "id": "04616e30-c9f8-468c-bed1-0d233ab76617", - "metadata": { - "incorrectly_encoded_metadata": "jp-MarkdownHeadingCollapsed=true jp-MarkdownHeadingCollapsed=true", - "tags": [] - }, - "source": [ - "## Trial and Event schemas" - ] - }, - { - "cell_type": "markdown", - "id": "a1451602-df01-4c33-b4bf-e280d3d0742c", - "metadata": {}, - "source": [ - "Tables in the `trial` and `event` schemas specify the structure of your experiment, including block, trial and event timing.\n", - "- Session has a 1-to-1 mapping with a behavior recording\n", - "- A block is a continuous phase of an experiment that contains repeated instances of a condition, or trials.\n", - "- Events may occur within or outside of conditions, either instantaneous or continuous.\n", - "\n", - "The diagram below shows (a) the levels of hierarchy and (b) how the bounds may not completely overlap. A block may not fully capture trials and events may occur outside both blocks/trials." - ] - }, - { - "cell_type": "markdown", - "id": "d5bc66f4-4a30-467a-829d-2e3b05decdd0", - "metadata": {}, - "source": [ - "```\n", - "|----------------------------------------------------------------------------|\n", - "|-------------------------------- Session ---------------------------------|__\n", - "|-------------------------- BehaviorRecording -----------------------------|__\n", - "|----- Block 1 -----|______|----- Block 2 -----|______|----- Block 3 -----|___\n", - "| trial 1 || trial 2 |____| trial 3 || trial 4 |____| trial 5 |____| trial 6 |\n", - "|_|e1|_|e2||e3|_|e4|__|e5|__|e6||e7||e8||e9||e10||e11|____|e12||e13|_________|\n", - "|----------------------------------------------------------------------------|\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "2e9a8cfd-8188-4d69-9c3a-b91a1ba4876a", - "metadata": {}, - "source": [ - "Let's load some example data. The `ingest.py` script has a series of loaders to help." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "dab268a4-ae07-4c8b-b999-536d9e5b3e2e", - "metadata": {}, - "outputs": [], - "source": [ - "from workflow_array_ephys.ingest import (\n", - " ingest_subjects,\n", - " ingest_sessions,\n", - " ingest_events,\n", - " ingest_alignment,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "5b6eaecd-a823-4649-9b81-63f8f2b4dc21", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "---- Insert 0 entry(s) into subject.Subject ----\n", - "\n", - "---- Successfully completed ingest_subjects ----\n", - "\n", - "---- Insert 0 entry(s) into session.Session ----\n", - "\n", - "---- Insert 0 entry(s) into probe.Probe ----\n", - "\n", - "---- Insert 0 entry(s) into ephys.ProbeInsertion ----\n", - "\n", - "---- Successfully completed ingest_subjects ----\n", - "\n", - "---- Inserting 1 entry(s) into behavior_recording ----\n", - "\n", - "---- Inserting 2 entry(s) into behavior_recording__file ----\n", - "\n", - "---- Inserting 4 entry(s) into _block ----\n", - "\n", - "---- Inserting 4 entry(s) into _block__attribute ----\n", - "\n", - "---- Inserting 2 entry(s) into #trial_type ----\n", - "\n", - "---- Inserting 100 entry(s) into _trial ----\n", - "\n", - "---- Inserting 100 entry(s) into _trial__attribute ----\n", - "\n", - "---- Inserting 100 entry(s) into _block_trial ----\n", - "\n", - "---- Inserting 3 entry(s) into #event_type ----\n", - "\n", - "---- Inserting 153 entry(s) into _event ----\n", - "\n", - "---- Inserting 153 entry(s) into _trial_event ----\n" - ] - } - ], - "source": [ - "ingest_subjects()\n", - "ingest_sessions()\n", - "ingest_events()" - ] - }, - { - "cell_type": "markdown", - "id": "3a51de8b-3ddd-473e-b930-b0bc0c50d05f", - "metadata": {}, - "source": [ - "We have 100 total trials, either 'stim' or 'ctrl', with start and stop time" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "4cdf4879-cd05-43c3-89fa-cacc1b1474a6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Experimental trials\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

trial_id

\n", - " trial number (1-based indexing)\n", - "
\n", - "

trial_type

\n", - " \n", - "
\n", - "

trial_start_time

\n", - " (second) relative to recording start\n", - "
\n", - "

trial_stop_time

\n", - " (second) relative to recording start\n", - "
subject62021-01-15 11:16:381stim0.12317.123
subject62021-01-15 11:16:382ctrl17.5434.54
subject62021-01-15 11:16:383ctrl34.8151.81
subject62021-01-15 11:16:384ctrl52.20269.202
subject62021-01-15 11:16:385stim69.61186.611
subject62021-01-15 11:16:386stim87.03104.03
subject62021-01-15 11:16:387ctrl104.165121.165
subject62021-01-15 11:16:388ctrl121.502138.502
subject62021-01-15 11:16:389ctrl138.612155.612
subject62021-01-15 11:16:3810stim155.741172.741
\n", - "

...

\n", - "

Total: 100

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *trial_id trial_type trial_start_ti trial_stop_tim\n", - "+----------+ +------------+ +----------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 1 stim 0.123 17.123 \n", - "subject6 2021-01-15 11: 2 ctrl 17.54 34.54 \n", - "subject6 2021-01-15 11: 3 ctrl 34.81 51.81 \n", - "subject6 2021-01-15 11: 4 ctrl 52.202 69.202 \n", - "subject6 2021-01-15 11: 5 stim 69.611 86.611 \n", - "subject6 2021-01-15 11: 6 stim 87.03 104.03 \n", - "subject6 2021-01-15 11: 7 ctrl 104.165 121.165 \n", - "subject6 2021-01-15 11: 8 ctrl 121.502 138.502 \n", - "subject6 2021-01-15 11: 9 ctrl 138.612 155.612 \n", - "subject6 2021-01-15 11: 10 stim 155.741 172.741 \n", - " ...\n", - " (Total: 100)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trial.Trial()" - ] - }, - { - "cell_type": "markdown", - "id": "ea3ed128-cb2c-400f-866c-1337d6608d2b", - "metadata": {}, - "source": [ - "Each trial is paired with events that take place during the trial window." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "7fe42898-3ff9-4394-a811-a4cb85320f04", - "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", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

trial_id

\n", - " trial number (1-based indexing)\n", - "
\n", - "

event_type

\n", - " \n", - "
\n", - "

event_start_time

\n", - " (second) relative to recording start\n", - "
subject62021-01-15 11:16:381center10.58
subject62021-01-15 11:16:382center21.647
subject62021-01-15 11:16:383center37.044
subject62021-01-15 11:16:384center55.259
subject62021-01-15 11:16:381left4.498
subject62021-01-15 11:16:383left41.892
subject62021-01-15 11:16:382right23.9
\n", - " \n", - "

Total: 7

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *trial_id *event_type *event_start_t\n", - "+----------+ +------------+ +----------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 1 center 10.58 \n", - "subject6 2021-01-15 11: 2 center 21.647 \n", - "subject6 2021-01-15 11: 3 center 37.044 \n", - "subject6 2021-01-15 11: 4 center 55.259 \n", - "subject6 2021-01-15 11: 1 left 4.498 \n", - "subject6 2021-01-15 11: 3 left 41.892 \n", - "subject6 2021-01-15 11: 2 right 23.9 \n", - " (Total: 7)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trial.TrialEvent() & \"trial_id<5\"" - ] - }, - { - "cell_type": "markdown", - "id": "1b2a40b8-8104-4fba-b99c-355162e4c8a9", - "metadata": {}, - "source": [ - "Finally, the `AlignmentEvent` describes the event of interest and the window we'd like to see around it." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "5122d831-48b2-4214-bd43-a42d67a5dc2d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "---- Inserting 3 entry(s) into alignment_event ----\n" - ] - } - ], - "source": [ - "ingest_alignment()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "50a2c99f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " time_shift is seconds to shift with respect to (WRT) a variable\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

alignment_name

\n", - " \n", - "
\n", - "

alignment_description

\n", - " \n", - "
\n", - "

alignment_event_type

\n", - " \n", - "
\n", - "

alignment_time_shift

\n", - " (s) WRT alignment_event_type\n", - "
\n", - "

start_event_type

\n", - " \n", - "
\n", - "

start_time_shift

\n", - " (s) WRT start_event_type\n", - "
\n", - "

end_event_type

\n", - " \n", - "
\n", - "

end_time_shift

\n", - " (s) WRT end_event_type\n", - "
center_buttoncenter0.0center-3.0center3.0
left_buttonleft0.0left-3.0left3.0
right_buttonright0.0right-3.0right3.0
\n", - " \n", - "

Total: 3

\n", - " " - ], - "text/plain": [ - "*alignment_nam alignment_desc alignment_even alignment_time start_event_ty start_time_shi end_event_type end_time_shift\n", - "+------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "center_button center 0.0 center -3.0 center 3.0 \n", - "left_button left 0.0 left -3.0 left 3.0 \n", - "right_button right 0.0 right -3.0 right 3.0 \n", - " (Total: 3)" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "event.AlignmentEvent()" - ] - }, - { - "cell_type": "markdown", - "id": "4936a1e8", - "metadata": { - "tags": [] - }, - "source": [ - "## Event-aligned spike times" - ] - }, - { - "cell_type": "markdown", - "id": "48907760-54b8-485f-b2eb-8c03a5cc2839", - "metadata": {}, - "source": [ - "First, we'll check that the data is still properly inserted from the previous notebooks." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "9a36c342", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Clustering results of the spike sorting step.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
subject62021-01-15 11:16:3800
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx \n", - "+----------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 0 0 \n", - " (Total: 1)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering()" - ] - }, - { - "cell_type": "markdown", - "id": "cc6c1e0c-ad56-4152-a200-873150aafb17", - "metadata": {}, - "source": [ - "For this example, we'll be looking at `subject6`." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "8642f010", - "metadata": {}, - "outputs": [], - "source": [ - "clustering_key = (\n", - " ephys.CuratedClustering\n", - " & {\n", - " \"subject\": \"subject6\",\n", - " \"session_datetime\": \"2021-01-15 11:16:38\",\n", - " \"insertion_number\": 0,\n", - " }\n", - ").fetch1(\"KEY\")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "c9c95806", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Experimental trials\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

trial_id

\n", - " trial number (1-based indexing)\n", - "
\n", - "

trial_type

\n", - " \n", - "
\n", - "

trial_start_time

\n", - " (second) relative to recording start\n", - "
\n", - "

trial_stop_time

\n", - " (second) relative to recording start\n", - "
subject62021-01-15 11:16:381stim0.12317.123
subject62021-01-15 11:16:382ctrl17.5434.54
subject62021-01-15 11:16:383ctrl34.8151.81
subject62021-01-15 11:16:384ctrl52.20269.202
subject62021-01-15 11:16:385stim69.61186.611
subject62021-01-15 11:16:386stim87.03104.03
subject62021-01-15 11:16:387ctrl104.165121.165
subject62021-01-15 11:16:388ctrl121.502138.502
subject62021-01-15 11:16:389ctrl138.612155.612
subject62021-01-15 11:16:3810stim155.741172.741
\n", - "

...

\n", - "

Total: 100

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *trial_id trial_type trial_start_ti trial_stop_tim\n", - "+----------+ +------------+ +----------+ +------------+ +------------+ +------------+\n", - "subject6 2021-01-15 11: 1 stim 0.123 17.123 \n", - "subject6 2021-01-15 11: 2 ctrl 17.54 34.54 \n", - "subject6 2021-01-15 11: 3 ctrl 34.81 51.81 \n", - "subject6 2021-01-15 11: 4 ctrl 52.202 69.202 \n", - "subject6 2021-01-15 11: 5 stim 69.611 86.611 \n", - "subject6 2021-01-15 11: 6 stim 87.03 104.03 \n", - "subject6 2021-01-15 11: 7 ctrl 104.165 121.165 \n", - "subject6 2021-01-15 11: 8 ctrl 121.502 138.502 \n", - "subject6 2021-01-15 11: 9 ctrl 138.612 155.612 \n", - "subject6 2021-01-15 11: 10 stim 155.741 172.741 \n", - " ...\n", - " (Total: 100)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trial.Trial & clustering_key" - ] - }, - { - "cell_type": "markdown", - "id": "a2947c6b-e58b-4dd8-b6ac-23717244634b", - "metadata": {}, - "source": [ - "And we can narrow our focus on `ctrl` trials." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "1851ad2b", - "metadata": {}, - "outputs": [], - "source": [ - "ctrl_trials = trial.Trial & clustering_key & 'trial_type = \"ctrl\"'" - ] - }, - { - "cell_type": "markdown", - "id": "be1e7935-7a12-4753-9132-e311f9c3fadd", - "metadata": {}, - "source": [ - "The `analysis` schema provides example tables to perform event-aligned spike-times analysis." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "937383de-b313-45ec-9239-8f6a8e604ac1", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.Float64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n", - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n", - "/Users/cb/miniforge3/envs/ele/lib/python3.9/inspect.py:351: FutureWarning: pandas.UInt64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", - " value = getattr(object, key)\n" - ] - }, - { - "data": { - "image/svg+xml": "\n\n\n\n\nanalysis.SpikesAlignmentCondition\n\n\nanalysis.SpikesAlignmentCondition\n\n\n\n\n\nanalysis.SpikesAlignment\n\n\nanalysis.SpikesAlignment\n\n\n\n\n\nanalysis.SpikesAlignmentCondition->analysis.SpikesAlignment\n\n\n\n\nanalysis.SpikesAlignmentCondition.Trial\n\n\nanalysis.SpikesAlignmentCondition.Trial\n\n\n\n\n\nanalysis.SpikesAlignmentCondition->analysis.SpikesAlignmentCondition.Trial\n\n\n\n\nanalysis.SpikesAlignment.UnitPSTH\n\n\nanalysis.SpikesAlignment.UnitPSTH\n\n\n\n\n\nanalysis.SpikesAlignment->analysis.SpikesAlignment.UnitPSTH\n\n\n\n\nanalysis.SpikesAlignment.AlignedTrialSpikes\n\n\nanalysis.SpikesAlignment.AlignedTrialSpikes\n\n\n\n\n\nanalysis.SpikesAlignment->analysis.SpikesAlignment.AlignedTrialSpikes\n\n\n\n\nephys.CuratedClustering.Unit\n\n\nephys.CuratedClustering.Unit\n\n\n\n\n\nephys.CuratedClustering.Unit->analysis.SpikesAlignment.UnitPSTH\n\n\n\n\nephys.CuratedClustering.Unit->analysis.SpikesAlignment.AlignedTrialSpikes\n\n\n\n\nevent.AlignmentEvent\n\n\nevent.AlignmentEvent\n\n\n\n\n\nevent.AlignmentEvent->analysis.SpikesAlignmentCondition\n\n\n\n\ntrial.Trial\n\n\ntrial.Trial\n\n\n\n\n\ntrial.Trial->analysis.SpikesAlignmentCondition.Trial\n\n\n\n\nanalysis.SpikesAlignmentCondition.Trial->analysis.SpikesAlignment.AlignedTrialSpikes\n\n\n\n\nephys.CuratedClustering\n\n\nephys.CuratedClustering\n\n\n\n\n\nephys.CuratedClustering->analysis.SpikesAlignmentCondition\n\n\n\n\nephys.CuratedClustering->ephys.CuratedClustering.Unit\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(\n", - " dj.Diagram(analysis)\n", - " + dj.Diagram(event.AlignmentEvent)\n", - " + dj.Diagram(trial.Trial)\n", - " + dj.Diagram(ephys.CuratedClustering)\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "0fdb3f63-6dda-4489-b2a1-8a9073ff290a", - "metadata": { - "title": "***SpikesAlignmentCondition*** - a manual table to specify the inputs and condition for the analysis" - }, - "source": [ - "Let's start by creating an analysis configuration - i.e. inserting into ***SpikesAlignmentCondition*** for the `center` event, called `center_button` in the `AlignmentEvent` table." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "f76cc104-4925-4e71-822e-81f3643e5625", - "metadata": { - "lines_to_next_cell": 0, - "title": "***SpikesAlignment*** - a computed table to extract event-aligned spikes and compute unit PSTH" - }, - "outputs": [], - "source": [ - "alignment_key = (event.AlignmentEvent & 'alignment_name = \"center_button\"').fetch1(\n", - " \"KEY\"\n", - ")\n", - "alignment_condition = {\n", - " **clustering_key,\n", - " **alignment_key,\n", - " \"trial_condition\": \"ctrl_center_button\",\n", - " \"bin_size\": 0.2,\n", - "}\n", - "analysis.SpikesAlignmentCondition.insert1(alignment_condition, skip_duplicates=True)\n", - "alignment_condition.pop(\"bin_size\")\n", - "analysis.SpikesAlignmentCondition.Trial.insert(\n", - " (analysis.SpikesAlignmentCondition * ctrl_trials & alignment_condition).proj(),\n", - " skip_duplicates=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "8d095e0a-207d-4641-86eb-bc25a0a09018", - "metadata": { - "title": "a CuratedClustering of interest for analysis" - }, - "source": [ - "With the steps above, we have created a new spike alignment condition for analysis, named `ctrl_center_button`, which retains all spiking information related to control trials during which the center button was pressed." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "5e2c96c5-9382-4d57-a1c9-0124611a3e08", - "metadata": { - "lines_to_next_cell": 0, - "title": "***SpikesAlignment*** - a computed table to extract event-aligned spikes and compute unit PSTH" - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Trials on which to compute event-aligned spikes and PSTH\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

alignment_name

\n", - " \n", - "
\n", - "

trial_condition

\n", - " user-friendly name of condition\n", - "
\n", - "

trial_id

\n", - " trial number (1-based indexing)\n", - "
subject62021-01-15 11:16:3800center_buttonctrl_center_button2
subject62021-01-15 11:16:3800center_buttonctrl_center_button3
subject62021-01-15 11:16:3800center_buttonctrl_center_button4
subject62021-01-15 11:16:3800center_buttonctrl_center_button7
subject62021-01-15 11:16:3800center_buttonctrl_center_button8
subject62021-01-15 11:16:3800center_buttonctrl_center_button9
subject62021-01-15 11:16:3800center_buttonctrl_center_button13
subject62021-01-15 11:16:3800center_buttonctrl_center_button14
subject62021-01-15 11:16:3800center_buttonctrl_center_button15
subject62021-01-15 11:16:3800center_buttonctrl_center_button16
\n", - "

...

\n", - "

Total: 50

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *alignment_nam *trial_conditi *trial_id \n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +------------+ +----------+\n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 2 \n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 3 \n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 4 \n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 7 \n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 8 \n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 9 \n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 13 \n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 14 \n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 15 \n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 16 \n", - " ...\n", - " (Total: 50)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analysis.SpikesAlignmentCondition.Trial()" - ] - }, - { - "cell_type": "markdown", - "id": "68d6a35b-41be-404c-b39d-7df813d2a9de", - "metadata": { - "lines_to_next_cell": 0, - "title": "a set of trials of interest to perform the analysis on - `ctrl` trials" - }, - "source": [ - "Now, let's create another set for the stimulus condition." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "1ea69400-75a0-4421-9310-8eec465b4775", - "metadata": { - "title": "a set of trials of interest to perform the analysis on - `stim` trials" - }, - "outputs": [], - "source": [ - "stim_trials = trial.Trial & clustering_key & 'trial_type = \"stim\"'\n", - "alignment_condition = {\n", - " **clustering_key,\n", - " **alignment_key,\n", - " \"trial_condition\": \"stim_center_button\",\n", - " \"bin_size\": 0.2,\n", - "}\n", - "analysis.SpikesAlignmentCondition.insert1(alignment_condition, skip_duplicates=True)\n", - "alignment_condition.pop(\"bin_size\")\n", - "analysis.SpikesAlignmentCondition.Trial.insert(\n", - " (analysis.SpikesAlignmentCondition * stim_trials & alignment_condition).proj(),\n", - " skip_duplicates=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "b77f92ae-d2ba-4894-a439-286efd5d13f6", - "metadata": { - "title": "a set of trials of interest to perform the analysis on - `stim` trials" - }, - "source": [ - "We can compare conditions in the `SpikesAlignmentCondition` table." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "10abfa77-a30c-4d4f-b905-51adaa6de54c", - "metadata": { - "title": "a set of trials of interest to perform the analysis on - `stim` trials" - }, - "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", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

alignment_name

\n", - " \n", - "
\n", - "

trial_condition

\n", - " user-friendly name of condition\n", - "
\n", - "

condition_description

\n", - " \n", - "
\n", - "

bin_size

\n", - " bin-size (in second) used to compute the PSTH\n", - "
subject62021-01-15 11:16:3800center_buttonctrl_center_button0.2
subject62021-01-15 11:16:3800center_buttonstim_center_button0.2
\n", - " \n", - "

Total: 2

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *alignment_nam *trial_conditi condition_desc bin_size \n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +----------+\n", - "subject6 2021-01-15 11: 0 0 center_button ctrl_center_bu 0.2 \n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 0.2 \n", - " (Total: 2)" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analysis.SpikesAlignmentCondition()" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "8125c8d8-006d-41af-9c87-5c13973cdc3f", - "metadata": { - "title": "a set of trials of interest to perform the analysis on - `stim` trials" - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Trials on which to compute event-aligned spikes and PSTH\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

alignment_name

\n", - " \n", - "
\n", - "

trial_condition

\n", - " user-friendly name of condition\n", - "
\n", - "

trial_id

\n", - " trial number (1-based indexing)\n", - "
subject62021-01-15 11:16:3800center_buttonstim_center_button1
subject62021-01-15 11:16:3800center_buttonstim_center_button5
subject62021-01-15 11:16:3800center_buttonstim_center_button6
subject62021-01-15 11:16:3800center_buttonstim_center_button10
subject62021-01-15 11:16:3800center_buttonstim_center_button11
subject62021-01-15 11:16:3800center_buttonstim_center_button12
subject62021-01-15 11:16:3800center_buttonstim_center_button17
subject62021-01-15 11:16:3800center_buttonstim_center_button18
subject62021-01-15 11:16:3800center_buttonstim_center_button19
subject62021-01-15 11:16:3800center_buttonstim_center_button21
\n", - "

...

\n", - "

Total: 50

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *paramset_idx *alignment_nam *trial_conditi *trial_id \n", - "+----------+ +------------+ +------------+ +------------+ +------------+ +------------+ +----------+\n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 1 \n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 5 \n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 6 \n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 10 \n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 11 \n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 12 \n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 17 \n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 18 \n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 19 \n", - "subject6 2021-01-15 11: 0 0 center_button stim_center_bu 21 \n", - " ...\n", - " (Total: 50)" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analysis.SpikesAlignmentCondition.Trial & 'trial_condition = \"stim_center_button\"'" - ] - }, - { - "cell_type": "markdown", - "id": "fa873de6-8e37-4616-996a-967682a896fb", - "metadata": { - "title": "a set of trials of interest to perform the analysis on - `stim` trials" - }, - "source": [ - "## Computation\n", - "\n", - "Now let's run the computation on these." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "623998dd-0c08-4c75-b5ad-2766f11bda6b", - "metadata": { - "title": "a set of trials of interest to perform the analysis on - `stim` trials" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "SpikesAlignment: 100%|██████████| 2/2 [00:16<00:00, 8.24s/it]\n" - ] - } - ], - "source": [ - "analysis.SpikesAlignment.populate(display_progress=True)" - ] - }, - { - "cell_type": "markdown", - "id": "e80e0b70-1b75-4645-87d3-519e7f1a5ff6", - "metadata": { - "title": "a set of trials of interest to perform the analysis on - `stim` trials" - }, - "source": [ - "## Visualize\n", - "\n", - "We can visualize the results with the `plot` function with our keys." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "b1f8bd26", - "metadata": {}, - "outputs": [], - "source": [ - "clustering_key = (\n", - " ephys.CuratedClustering\n", - " & {\n", - " \"subject\": \"subject6\",\n", - " \"session_datetime\": \"2021-01-15 11:16:38\",\n", - " \"insertion_number\": 0,\n", - " }\n", - ").fetch1(\"KEY\")\n", - "alignment_key = (event.AlignmentEvent & 'alignment_name = \"center_button\"').fetch1(\n", - " \"KEY\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "03132026-55e3-4522-9f58-ce86b94c7842", - "metadata": { - "title": "a set of trials of interest to perform the analysis on - `stim` trials" - }, - "outputs": [ - { - "data": { - "image/png": "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Uo888ojmzZuns2fPqk2bNjp06JC7wytQspJ0yw/t2yFDhuiFF17Q/fffr5deekmenp7q2rWrtm7d6u7QJOV8/zavyo6+F9wnveN0fpXeOrk7wZIVmYm9VatWunLlilq1apUzQeUzzsojr/anc1J657tuBbficSm9dcrNpFt+sHHjRm3cuNH+d04d57Zv364nn3xSRYsW1VNPPaXZs2fL399fAwYMUERERKr5e/furSeffFL33HNPlmIplNl/jIuLkySVLFky0x+eGzw9PeXp6enuMPI1Hx8ft3xuTEyMBg0apG7dumn16tXy8Ci4jyAsVKiQChXK9O5aYPn6+ro7hAKBejZrLBaLW7fVd955R4UKFVL37t0dpq9evTrVlURhYWEaPHiw3n33XQ0fPtw+feLEiapXr542btxor6uCgoI0Z84cPfroo/Y7uV544QW1aNHCoT7v3LmzWrdurZdfflmzZs2yT58zZ45ee+01eXl56a677tIff/yR5XXt0aOHoqKiVLhwYT3//PPZ0pgrVaqUTp8+rZCQEP3000+644470p2/UKFCeuCBB7L8uTYZWacVK1aodOnS8vDwUJ06dbLl8x9++GFNnjxZfn5+euSRR3Tw4ME05x05cqQKFSqkXbt2qVixYtny+c5O4FauXFkTJ07Uzp071aRJE0kp6x4VFaWtW7eqdu3aklISy8nJyXr77bf177//2hORwcHB6tSpk5YvX64HH3wwW+J0936enmvXrjkkKJ3x8vLKpWjgjCvfkStWr16tbdu2adWqVerXr58kqX///qpWrZoiIiKyNdGc0+Lj4+Xt7V0g+wd5tS6x2blzp95//30999xzmjhxoiRp0KBBqlOnjiZNmqRt27a5OUL39W+BvCguLk4BAQHuDqPAuv54ltfr99yUkfLIy+3s3JRd7cVbAfVa/uDt7Z0rn1O7dm0dOnTI4UaBUaNGqUOHDnr22Wc1adIkp9tLSEiILl26lOnPzXQvxRgjSRm63XDhwoWqXbu2/P39VaRIETVq1Mihc5fW8yLSG5/43XffVfXq1eXr66uwsDB99913Du+n9ayhL7/8Ui1btlRAQIAKFy6sbt26ae/evamWv3//fvXv31/FixeXn5+fqlevrieffNIe1+OPPy4pZbxP2zBR6WXojxw5oiNHjqT5fnoOHTqkvn37KiQkRL6+vipTpowGDBig6OhoSemP25vW2P/nz59X//79FRQUpGLFiunRRx9NNZySszHvo6KiNG7cOJUtW1Y+Pj6qUqWKnn322VQVfHJysl566SXVrVtXvr6+Kl68uDp37mwfL9disSguLk5vvfWWvfxsn7Vy5UpFRkZq9uzZ8vDwUFxcXK4dQN5//32FhYWpcOHCCgoKUt26dfXSSy9lqgxutqyrV69qxowZqlq1qnx9fVWsWDG1aNHCYQgWZ/vAtWvX9PTTT6ty5cry8fFRhQoV9N///lcJCQkO89meNbJ161bdeeed8vX1VaVKlfT2229nuFwSEhI0fvx4FS9eXIULF1aPHj2c3nV47NgxjRo1StWrV5efn5+KFSumu+++22HfWL58ue6++25JUtu2be3f//VDJt1sPx0yZIheeeUVSXIYqs3mxu3eVo4HDx7UAw88IKvVquLFi2vq1KkyxujEiRPq2bOngoKCFBISov/7v/9zWgYRERGqUqWKfHx8VLZsWU2aNClVuTuTkf1/7969ateunfz8/FSmTBnNmjXL6fb/ySefqFu3bgoNDZWPj48qV66sp59+WklJSfZ52rRpoy+++ELHjh2zl9H1da0r65TevuqsnrVtd998840aNWokPz8/1a1b1/79rl271l4vhIWF2e+evt7+/fvVr18/FS1aVL6+vmrUqJE+/fRTl8ovKipKQ4YMkdVqVXBwsAYPHuz0LrXffvtNQ4YMUaVKleTr66uQkBA9+OCDunDhgn0eV+r6d955R2FhYfLz81PRokU1YMAAnThxwqXvwFndPWTIEAUGBur48eO66667FBgYqNKlS9u3999//13t2rVTQECAypcv7/REqat11Mcff6zGjRsrMDDQYbqzW/d79+4tSfrzzz/t0/bt26d9+/ZpxIgRDhcHjBo1SsYYh+c+tGrVKtUJ0latWqlo0aIOy5Sk0NDQbD/RX7RoURUuXDhbl+nj46OQkJAM/U9SUpJiYmKy5fMzsk5ly5bN9hPUJUuWlJ+f303n279/v7788ks9/vjjKlasmOLj43X16tVsjcXGtm9dv8/byvvGi8VKlSolDw+PVA3+jh07auvWrbp48WK2xJTefn7y5En16tVLgYGBKl68uCZOnOhQh0vZ1y6xxfH8889r/vz59jbEokWL7AnjoUOH2uspW7zO2uhxcXF67LHH7J9XvXp1Pf/88/Y+go3tOcwff/yx6tSpIx8fH9WuXVvr16/PVBk+//zzWrp0qT32O+64Q7t27XKYN63nA9y4Htcv85VXXrEPp9upUyedOHFCxhg9/fTTKlOmjPz8/NSzZ880t4mNGzeqQYMG8vX1Va1atbR27dpU82TlO9q3b5/Tz7169ar279/vdJjeG61evVolS5Z0eCxA8eLF1b9/f33yyScutWVcYWsD3KxMLl68qIkTJ6pu3boKDAxUUFCQunTpol9//dVhPtuQTO+//76eeuoplS5dWv7+/oqJicnwMj788EPNmDFDpUuXVuHChdWvXz9FR0crISFB48aNU4kSJRQYGKihQ4emKo+vvvpKLVq0UHBwsAIDA1W9enX997//dZgnq20qVzjr123dulV33HGHfH19VblyZb366qup/m/ZsmWyWCx68803HabPmTNHFotF69atS/dz9+/fr+PHj980vtWrV8vT01MjRoywT/P19dWwYcO0fft2h/ZRVnz//fe6++67Va5cOXtZjx8/3qXRQZz1b3/77Te1bt3aoe1tKzNnbdyb9a1s7eOtW7dq7Nix9uGMRo4cqcTEREVFRWnQoEEqUqSIihQpokmTJqWqP5OTkzV//nzVrl1bvr6+KlmypEaOHKl///031frcLCZX+l7psfWjDh8+rCFDhig4OFhWq1VDhw51GKZZStnW2rVrpxIlSsjHx0e1atXS4sWLnX4P7uovXL58Wfv373fpGffO3Ow8h83N+ghSyjGrTp062rdvn9q2bSt/f3+VLl1a8+bNs8/zzTffpHuclqQdO3aoc+fOslqt8vf3V+vWrVM9r9n2Pe7bt0/33XefihQpohYtWmRo3ZOSkvTf//5XISEhCggIUI8ePVKtU1rPTbz++JzeOt2s/3r27FkNGzZMJUuWlK+vr+rXr6+33nrL4bMy0m7ITunFnt7xzNkzzLJSz7kivfOdNrt371aXLl0UFBSkwMBAtW/fXj/++KPDPLb67ocfftCECRPsQ1j37t071YgWxhjNmjXLPtx727ZtnZ6LvbE8MtqflqSvv/7afj4pODhYPXv2TNXnzEjd5kxWzvFKKftt165dVaRIEQUEBKhevXr2Nn5657sy2l50RXx8vKZPn65q1arJ19dXpUqVUp8+fRzWL7ePS66cu7f1qY4cOaKuXbuqcOHCuv/++zO07pcvX9bIkSNVrFgxBQUFadCgQanWKa3z6tfXd+mtU4UKFbR37159++239unX91f++usv3X333fbHJjRp0kRffPGFw2dd356dPXu2ypQpI19fX7Vv316HDx/O0DpnlCvrL2WsPnD1mJCW06dPa//+/Tc9r1CxYsVUI3NZLBb16tVLCQkJ+uuvv5z+X1bPnWT61hlb59DVAF577TWNHTtW/fr1syd2fvvtN+3YsUP33XdfpmL49ttv9cEHH2js2LH2EwadO3fWzp07072Ce8WKFRo8eLDCw8P17LPP6vLly1q8eLFatGih3bt32yvu3377TS1btpSXl5dGjBihChUq6MiRI/rss880e/Zs9enTRwcPHtR7772nF198UbfddpuklM5rWtq3by9JGb51NjExUeHh4UpISNCYMWMUEhKikydP6vPPP1dUVJSsVmuGlmfTv39/VahQQXPnztWPP/6oBQsW6N9//003IXP58mW1bt1aJ0+e1MiRI1WuXDlt27ZNU6ZM0enTpx1u9x42bJiWL1+uLl26aPjw4bp27Zq+//57/fjjj2rUqJFWrFih4cOH684777R3zCpXrixJ2rRpk4KCguwnow4ePKiAgAANHDhQL774Yo5dyfLVV1/p3nvvVfv27fXss89KSjnB/MMPP+jRRx/NUBm4sqzp06dr7ty59nKIiYnRTz/9pF9++UUdO3ZMM87hw4frrbfeUr9+/fTYY49px44dmjt3rv7880999NFHDvMePnxY/fr107BhwzR48GC9+eabGjJkiMLCwuxX/Lti+PDheuedd3TfffepWbNm+vrrr9WtW7dU8+3atUvbtm2zPzvn77//1uLFi9WmTRvt27dP/v7+atWqlcaOHasFCxbov//9r31YNNtPV/bTkSNH6tSpU/rqq6+0YsUKl9fjnnvuUc2aNfXMM8/oiy++0KxZs1S0aFG9+uqrateunZ599lm9++67mjhxou644w77kAbJycnq0aOHtm7dqhEjRqhmzZr6/fff9eKLL+rgwYM3HSbI1f3/zJkzatu2ra5du6YnnnhCAQEBWrp0qdMT28uXL1dgYKAmTJigwMBAff3115o2bZpiYmLsQ9Y9+eSTio6O1j///KMXX3xRkuwJFlfXKb19NS2HDx/Wfffdp5EjR+qBBx7Q888/r+7du2vJkiX673//q1GjRkmS5s6dq/79++vAgQP2Y8revXvVvHlzlS5d2l4GH374oXr16qU1a9bYkz/OGGPUs2dPbd26VQ899JBq1qypjz76SIMHD04171dffaW//vpLQ4cOVUhIiPbu3aulS5dq7969+vHHH2WxWG5a18+ePVtTp05V//797UPlLVy4UK1atdLu3bsVHByc7neQlqSkJHXp0kWtWrXSvHnz9O677+qRRx5RQECAnnzySd1///3q06ePlixZokGDBqlp06aqWLGiJNfrqKtXr2rXrl16+OGH043FxjYEpK0MpP8NN92oUSOHeUNDQ1WmTBmnJ0iuFxsbq9jYWIdl3souX76soKAgXb58WUWKFNG9996rZ5999qbbQ363adMmSSlJr/bt2+vrr7+Wp6enOnbsqMWLF2fpmX3Xrl1TVFSUEhMT9ccff+ipp55S4cKFdeedd9rnadOmjZ599lkNGzZMM2bMULFixbRt2zYtXrxYY8eOTXVlW1hYmIwx2rZtm+66665Mx3YzSUlJCg8PV+PGjfX8889r06ZN+r//+z9VrlzZvl9mZ7vEZtmyZYqPj9eIESPk4+Oj3r1769KlS5o2bZpGjBihli1bSpKaNWvmNG5jjHr06KEtW7Zo2LBhatCggTZs2KDHH39cJ0+etNdzNlu3btXatWs1atQoFS5cWAsWLFDfvn11/PjxDN/1uHLlSl26dEkjR46UxWLRvHnz1KdPH/3111+ZTtS/++67SkxM1JgxY3Tx4kXNmzdP/fv3V7t27fTNN99o8uTJOnz4sBYuXKiJEyemSlocOnRI99xzjx566CENHjxYy5Yt0913363169fb23JZ/Y6KFi3q9OKbkydPqmbNmho8ePBNh6vZvXu3br/99lT9tzvvvFNLly7VwYMHVbdu3YwXoBOulMlff/2ljz/+WHfffbcqVqyoyMhIvfrqq2rdurX27duXamjhp59+Wt7e3po4caISEhLk7e2tffv2ZWgZc+fOlZ+fn5544gn7d+rl5SUPDw/9+++/mj59un788UctX75cFStW1LRp0ySltEvuuusu1atXTzNnzpSPj48OHz7scEI7J9tU6fn999/VqVMnFS9eXNOnT9e1a9cUERGR6iKDoUOHau3atZowYYI6duyosmXL6vfff9eMGTM0bNgwde3aNd3PqVmzplq3bn3TJM3u3btVrVo1BQUFOUy31cl79uxR2bJlM76iN1i1apUuX76shx9+WMWKFdPOnTu1cOFC/fPPP1q1alWGlnXy5En7ybEpU6YoICBAr7/+epp3xGWkb2Xru8+YMUM//vijli5dquDgYG3btk3lypXTnDlztG7dOj333HOqU6eOBg0aZP/fkSNHavny5Ro6dKjGjh2ro0eP6uWXX9bu3bv1ww8/ONR5N4vpZn0vV/Xv318VK1bU3Llz9csvv+j1119XiRIl7McnKWU469q1a6tHjx4qVKiQPvvsM40aNUrJyckaPXp0qrJ0R39h586datu2rSIiIjL1vKSbneeQXOsj2Pz777/q3Lmz+vTpo/79+2v16tWaPHmy6tatqy5duqhmzZqaOXNmmsfpr7/+Wl26dFFYWJgiIiLk4eFhT35+//33Dm0iSbr77rtVtWpVzZkzJ1Wy92Zmz54ti8WiyZMn6+zZs5o/f746dOigPXv2uHQhlk1661S6dOk0+05XrlxRmzZtdPjwYT3yyCOqWLGiVq1apSFDhigqKsreNrLJiXZDelzp9zk7njmTnfXcjW52vlNK2cdatmypoKAgTZo0SV5eXnr11VfVpk0bffvtt2rcuLHDMseMGaMiRYooIiJCf//9t+bPn69HHnnE4blJ06ZN06xZs9S1a1d17dpVv/zyizp16qTExMR0481of3rTpk3q0qWLKlWqpOnTp+vKlStauHChmjdvrl9++SVV38OVus2ZzJ7jlVLa+HfddZdKlSqlRx99VCEhIfrzzz/1+eef69FHH3XpfJer7cWbSUpK0l133aXNmzdrwIABevTRR3Xp0iV99dVX+uOPP+ztlNw8Lrl67l5K6Q+Gh4erRYsWev755+Xv75+h9X/kkUcUHBys6dOn68CBA1q8eLGOHTtmT3K5Kr11mj9/vsaMGaPAwEB7ctvWVouMjFSzZs10+fJljR07VsWKFdNbb72lHj16aPXq1amOZ88884w8PDw0ceJERUdHa968ebr//vu1Y8eODK13TnKlPrjezY5zzkyZMkVvvfWWjh49mqnzCc7Ob13P9t0nJydnLgFnMunpp582ksyRI0dcmr9nz56mdu3a6c4zePBgU758+VTTIyIizI2hSjKSzE8//WSfduzYMePr62t69+5tn7Zs2TIjyRw9etQYY8ylS5dMcHCw+c9//uOwvDNnzhir1eowvVWrVqZw4cLm2LFj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2J9draNsrt9Hnfn+++81bNgwhYeH24cbsbHV1c6eBRQfH59mh3L//v3q3bu36tSpo9dffz3dz7+VjR8/XlOnTtWmTZs0YMAAd4eTY2zbQf/+/R2GZrj77rs1cOBAbdu2zSHJnBFBQUHq0KGDJKlnz55auXKlevbsqV9++UX169eXlPJMtBEjRujgwYMqU6aMJKlPnz5KTk7W5MmTde+99zoMc2jbJ7JyoZUrnO3nNx6fs7NdYuPqRXNpOXbsmEJDQ1M9T9A2hEpOtEPSWpbtRFpmlpXWMl09XtlUqVIl1bZSrVo1SSknY0JCQnL9O3LGz88vzbra9n52caVMbM9EWrRokY4ePepw0aSzYUedlUlGl5GR7zo5OVnR0dEqVqyY7rnnHr3++usaPny4nnjiCbVv3159+vRRv3797HVabrUTr3fu3DlduXLFaTukevXqTk8WDRgwQO+8846++OILjRgxwj40VnbJre3s+PHjmjZtmj799NNU+6QrbbjrHTt2zCHxY3NjX8smI3VaRra5G9ty0dHRKlGihNMYbtyesrOeTU96dbCtj/bDDz8oIiJC27dvT3WCKjo62uH8hbv6C1nhynmOjPYRnLXvixQpot9+++2m8dj6zs6G0reJjo52SDxl5Rhz4zpZLBZVqVIlU4mHzDh27JiqVq2aaqgvV9sg2dFuyCpXyz8767nruXK+89y5c7p8+bLTPnTNmjWVnJysEydOOAype7Oytn03N25DxYsXd+kiUFfZPiet2Dds2KC4uDiH4eVdqduyk+05aVk955xd7cUjR46oevXqDheb3Sg3j0sZPSdYqFAhex8vM27cJgMDA1WqVKlcrdecnQO8vl67flvJi/XajfJyjGPGjNH69ev19ttv288XOBMWFqb58+dr/PjxWr58eYaHpM5w0u3tt9/WH3/8oWnTpmnw4MH65ZdfXDohUbNmTR04cECff/651q9frzVr1mjRokWaNm2aZsyYISntExtp3bWWGbYrfFasWOE0KZdeBeNu//d//6chQ4bok08+0caNGzV27Fj7s9icNdJsMlJ+rnyXycnJ6tixoyZNmuT0fVuHOqtCQ0O1d+/eVM8jsFXwObWjlihRQnv27NGGDRv05Zdf6ssvv9SyZcs0aNAg+8N5XS0DV5bVqlUrHTlyxP69vv7663rxxRe1ZMmSm56AdPVkoKen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P+/0mbY3K4uMevvttx3atKtXr9bp06cdjv2VK1fWjz/+qMTERPu0zz//XCdOnHBYVnrbZFp9p65du+rMmTP64IMP7NOuXbumhQsXKjAwUK1bt870umWX7Oj3ZXc9dz1Xznd6enqqU6dO+uSTTxyG2IuMjNTKlSvVokWLDA+72KFDB3l5eWnhwoUO6+Ws/+2Mq+VaqlQpNWjQQG+99ZbDtvXHH39o48aNDomUrMrsOd7bb79dFStW1Pz581Nt/1k555xZffv21fnz550+69oWT24elzJyTjA7LF261OFzFi9erGvXrqWq1248337jORDp5vWas+ldu3bVzp07tX37dvu0uLg4LV26VBUqVFCtWrUys1rZytX1z4qMbu+nT5/W/v37nW4jN/rggw80duxY3X///WmOSnEj2yN8Mtt2zfQYbbYrSly9LbBTp04KCQlR8+bNVbJkSf355596+eWX1a1bN/sVsgMGDNDkyZPVu3dvjR07VpcvX9bixYtVrVo1pw/CrlOnjsLDwzV27Fj5+PjYTzQ7a/zYBAUFafHixRo4cKBuv/12DRgwQMWLF9fx48f1xRdfqHnz5vZKZsGCBWrRooVuv/12jRgxQhUrVtTff/+tL774wt4gt125/eSTT2rAgAHy8vJS9+7d07xqwjZmfkbHhf3666/1yCOP6O6771a1atV07do1rVixQp6enurbt699vuHDh+uZZ57R8OHD1ahRI3333XfpdqKOHj2qHj16qHPnztq+fbveeecd3XfffemOafr444/r008/1V133aUhQ4YoLCxMcXFx+v3337V69Wr9/fffuu2229S2bVsNHDhQCxYs0KFDh+zDtX3//fdq27atHnnkEXsZbtq0SS+88IJCQ0NVsWJFNW7cWA0bNtSDDz6oN998U9euXVPr1q31zTffaNWqVZoyZcpNhyaxXUWb0bIePny4Ll68qHbt2qlMmTI6duyYFi5cqAYNGtiveHe1DFxZVq1atdSmTRuFhYWpaNGi+umnn7R69Wp7+ThTv359DR48WEuXLrUPMbhz50699dZb6tWrl8MVGtmlQYMGuvfee7Vo0SJFR0erWbNm2rx5s9MrQO+66y6tWLFCVqtVtWrV0vbt27Vp06ZUz9Zo0KCBPD099eyzzyo6Olo+Pj5q166dSpQo4fJ+atsHx44dq/DwcHl6eubYc5EG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QPEMGDCg2BEAAACgV1C6AQDAAWrgwIFpbm4udgwAAADoFdxeEgAAAAAAAAqkdAMAAAAAAIACKd0AAOAAtX379pxxxhk544wzsn379mLHAQAAgB7NZ7oBAMABqq2tLffdd1/nYwAAAGDPudINAAAAAAAACqR0AwAAAAAAgAIp3QB6qSVLlmT06NHp169fqqqqsmbNml3O/8d//MeMHz8+/fr1y/HHH995u7G3dXR0ZP78+RkxYkT69++f6urqPPXUU/vyEAAAAAAAegylG0AvtHz58tTV1WXBggVZt25dJk2alJqamrzyyis7nP/ggw/m/PPPz+c+97k8/PDDmT17dmbPnp1HH320c86iRYty2223ZenSpVm9enUGDhyYmpqabN++fX8dFgAAAABAt6V0A+iFbr311lx88cWpra3NhAkTsnTp0gwYMCB33XXXDud/97vfzcyZM3PllVfmgx/8YK6//vqceOKJ+d73vpfkT1e5LV68OFdffXXOOuusTJw4McuWLctLL72UFStW7McjAwAAAADonvoUOwAAe1dra2vWrl2befPmdY6Vlpamuro6q1at2uE+q1atSl1dXZexmpqazkLt2WefTWNjY6qrqztfHzJkSKqqqrJq1aqcd955O1y3paUlLS0tnc9ff/31JMlvf/vbDBw4sMvc0tLStLe3v2ONHY3vztwnn3zyT1kan057639elffmay8mSdauXZutW7fulyx7a3x3j6kYX3Nn6xTj+7W7490pS0/I2J2yHOgZ9+TPaWtra+fj3/72t+nXr1+3+r7sbLy3ZdmXf1ftdO1NL+ze+F76e3Nn493lv+luf7928/vi71NZekLG7pSlO2XcnfPDvj5n7u54d/pvV6yMkydPzuDBg1NSUvKO1wBgbyrp6OjoKHYIAPael156KYcffngefPDBTJ8+vXP8qquuyq9//eusXr36Hfv07ds399xzT84///zOsdtvvz3XXXddmpqa8uCDD+bP/uzP8tJLL2XEiBGdcz7zmc+kpKQky5cv32GWa6+9Ntddd91ePDoAAADYfa+//noOPvjgYscAoJdzpRsA+8y8efO6XEHX3t6e1157Le973/sO+N8w3LJlS0aNGpUXXnjBD37sMe8j9gbvI/YG7yP2Fu8l9gbvI3Zk8ODBxY4AwAFA6QbQywwdOjRlZWVpamrqMt7U1JTK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U1M+85nP7PRrPPLII3n99dczderUzrGHHnooX/rSl/LNb34zTz75ZFauXJmPfOQjXfabNm1a1qxZk5aWln1z8AAAAL2Y0g0AAGA/mjRpUq6++uocddRRmTdvXvr165ehQ4fm4osvzlFHHZX58+dn06ZNeeSRR5Ik3/ve93LCCSfk29/+dsaPH58TTjghd911Vx544IH8x3/8xw6/xvPPP5+ysrIMHz68c2zDhg0ZOHBgPvGJT+SII47ICSeckC996Utd9hs5cmRaW1u73DoTAACA90bpBgAAsB9NnDix83FZWVne97735fjjj+8cq6ioSJK88sorSZJ/+7d/ywMPPND5GXGDBg3K+PHjkyTPPPPMDr/GG2+8kfLy8pSUlHSOffzjH88RRxyRsWPH5oILLsgPfvCDzqvp3ta/f/8kecc4AAAA707pBgAAsB8ddNBBXZ6XlJR0GXu7KGtvb0+SbN26NWeeeWbWr1/fZXvqqafecXvItw0dOjTbtm1La2tr59jgwYOzbt26/OhHP8qIESMyf/78TJo0KZs3b+6c89prryVJhg0btleOFQAA4ECidAMAAOjGTjzxxDz22GMZPXp0xo0b12UbOHDgDveZPHlykuTxxx/vMt6nT59UV1dn0aJFeeSRR/Lcc8/l//yf/9P5+qOPPpr3v//9GTp06D47HgAAgN5K6QYAANCNXXrppXnttddy/vnn53e/+12eeeaZ3H///amtrU1bW9sO9xk2bFhOPPHE/OY3v+kc+9nPfpbbbrst69evz/PPP59ly5alvb09xxxzTOec//t//29mzJixz48JAACgN1K6AQAAdGMjR47Mb3/727S1tWXGjBk5/vjjc/nll+eQQw5JaenOf6T7/Oc/nx/84Aedzw855JD89Kc/zcc+9rF88IMfzNKlS/OjH/0oxx57bJJk+/btWbFiRS6++OJ9fkwAAAC9UUlHR0dHsUMAAACwd73xxhs55phjsnz58kyfPv1d599xxx35p3/6p/ziF7/YD+kAAAB6H1e6AQAA9EL9+/fPsmXLsnHjxvc0/6CDDspf//Vf7+NUAAAAvZcr3QAAAAAAAKBArnQDAAAAAACAAindAAAAAAAAoEBKNwAAAAAAACiQ0g0AAAAAAAAKpHQDAAAAAACAAindAAAAAAAAoEBKNwAAAAAAACiQ0g0AAAAAAAAKpHQDAAAAAACAAv3/ARvBo+z1CB0MAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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Uo888ojmzZuns2fPqk2bNjp06JC7wytQspJ0yw/t2yFDhuiFF17Q/fffr5deekmenp7q2rWrtm7d6u7QJOV8/zavyo6+F9wnveN0fpXeOrk7wZIVmYm9VatWunLlilq1apUzQeUzzsojr/anc1J657tuBbficSm9dcrNpFt+sHHjRm3cuNH+d04d57Zv364nn3xSRYsW1VNPPaXZs2fL399fAwYMUERERKr5e/furSeffFL33HNPlmIplNl/jIuLkySVLFky0x+eGzw9PeXp6enuMPI1Hx8ft3xuTEyMBg0apG7dumn16tXy8Ci4jyAsVKiQChXK9O5aYPn6+ro7hAKBejZrLBaLW7fVd955R4UKFVL37t0dpq9evTrVlURhYWEaPHiw3n33XQ0fPtw+feLEiapXr542btxor6uCgoI0Z84cPfroo/Y7uV544QW1aNHCoT7v3LmzWrdurZdfflmzZs2yT58zZ45ee+01eXl56a677tIff/yR5XXt0aOHoqKiVLhwYT3//PPZ0pgrVaqUTp8+rZCQEP3000+644470p2/UKFCeuCBB7L8uTYZWacVK1aodOnS8vDwUJ06dbLl8x9++GFNnjxZfn5+euSRR3Tw4ME05x05cqQKFSqkXbt2qVixYtny+c5O4FauXFkTJ07Uzp071aRJE0kp6x4VFaWtW7eqdu3aklISy8nJyXr77bf177//2hORwcHB6tSpk5YvX64HH3wwW+J0936enmvXrjkkKJ3x8vLKpWjgjCvfkStWr16tbdu2adWqVerXr58kqX///qpWrZoiIiKyNdGc0+Lj4+Xt7V0g+wd5tS6x2blzp95//30999xzmjhxoiRp0KBBqlOnjiZNmqRt27a5OUL39W+BvCguLk4BAQHuDqPAuv54ltfr99yUkfLIy+3s3JRd7cVbAfVa/uDt7Z0rn1O7dm0dOnTI4UaBUaNGqUOHDnr22Wc1adIkp9tLSEiILl26lOnPzXQvxRgjSRm63XDhwoWqXbu2/P39VaRIETVq1Mihc5fW8yLSG5/43XffVfXq1eXr66uwsDB99913Du+n9ayhL7/8Ui1btlRAQIAKFy6sbt26ae/evamWv3//fvXv31/FixeXn5+fqlevrieffNIe1+OPPy4pZbxP2zBR6WXojxw5oiNHjqT5fnoOHTqkvn37KiQkRL6+vipTpowGDBig6OhoSemP25vW2P/nz59X//79FRQUpGLFiunRRx9NNZySszHvo6KiNG7cOJUtW1Y+Pj6qUqWKnn322VQVfHJysl566SXVrVtXvr6+Kl68uDp37mwfL9disSguLk5vvfWWvfxsn7Vy5UpFRkZq9uzZ8vDwUFxcXK4dQN5//32FhYWpcOHCCgoKUt26dfXSSy9lqgxutqyrV69qxowZqlq1qnx9fVWsWDG1aNHCYQgWZ/vAtWvX9PTTT6ty5cry8fFRhQoV9N///lcJCQkO89meNbJ161bdeeed8vX1VaVKlfT2229nuFwSEhI0fvx4FS9eXIULF1aPHj2c3nV47NgxjRo1StWrV5efn5+KFSumu+++22HfWL58ue6++25JUtu2be3f//VDJt1sPx0yZIheeeUVSXIYqs3mxu3eVo4HDx7UAw88IKvVquLFi2vq1KkyxujEiRPq2bOngoKCFBISov/7v/9zWgYRERGqUqWKfHx8VLZsWU2aNClVuTuTkf1/7969ateunfz8/FSmTBnNmjXL6fb/ySefqFu3bgoNDZWPj48qV66sp59+WklJSfZ52rRpoy+++ELHjh2zl9H1da0r65TevuqsnrVtd998840aNWokPz8/1a1b1/79rl271l4vhIWF2e+evt7+/fvVr18/FS1aVL6+vmrUqJE+/fRTl8ovKipKQ4YMkdVqVXBwsAYPHuz0LrXffvtNQ4YMUaVKleTr66uQkBA9+OCDunDhgn0eV+r6d955R2FhYfLz81PRokU1YMAAnThxwqXvwFndPWTIEAUGBur48eO66667FBgYqNKlS9u3999//13t2rVTQECAypcv7/REqat11Mcff6zGjRsrMDDQYbqzW/d79+4tSfrzzz/t0/bt26d9+/ZpxIgRDhcHjBo1SsYYh+c+tGrVKtUJ0latWqlo0aIOy5Sk0NDQbD/RX7RoURUuXDhbl+nj46OQkJAM/U9SUpJiYmKy5fMzsk5ly5bN9hPUJUuWlJ+f303n279/v7788ks9/vjjKlasmOLj43X16tVsjcXGtm9dv8/byvvGi8VKlSolDw+PVA3+jh07auvWrbp48WK2xJTefn7y5En16tVLgYGBKl68uCZOnOhQh0vZ1y6xxfH8889r/vz59jbEokWL7AnjoUOH2uspW7zO2uhxcXF67LHH7J9XvXp1Pf/88/Y+go3tOcwff/yx6tSpIx8fH9WuXVvr16/PVBk+//zzWrp0qT32O+64Q7t27XKYN63nA9y4Htcv85VXXrEPp9upUyedOHFCxhg9/fTTKlOmjPz8/NSzZ880t4mNGzeqQYMG8vX1Va1atbR27dpU82TlO9q3b5/Tz7169ar279/vdJjeG61evVolS5Z0eCxA8eLF1b9/f33yyScutWVcYWsD3KxMLl68qIkTJ6pu3boKDAxUUFCQunTpol9//dVhPtuQTO+//76eeuoplS5dWv7+/oqJicnwMj788EPNmDFDpUuXVuHChdWvXz9FR0crISFB48aNU4kSJRQYGKihQ4emKo+vvvpKLVq0UHBwsAIDA1W9enX997//dZgnq20qVzjr123dulV33HGHfH19VblyZb366qup/m/ZsmWyWCx68803HabPmTNHFotF69atS/dz9+/fr+PHj980vtWrV8vT01MjRoywT/P19dWwYcO0fft2h/ZRVnz//fe6++67Va5cOXtZjx8/3qXRQZz1b3/77Te1bt3aoe1tKzNnbdyb9a1s7eOtW7dq7Nix9uGMRo4cqcTEREVFRWnQoEEqUqSIihQpokmTJqWqP5OTkzV//nzVrl1bvr6+KlmypEaOHKl///031frcLCZX+l7psfWjDh8+rCFDhig4OFhWq1VDhw51GKZZStnW2rVrpxIlSsjHx0e1atXS4sWLnX4P7uovXL58Wfv373fpGffO3Ow8h83N+ghSyjGrTp062rdvn9q2bSt/f3+VLl1a8+bNs8/zzTffpHuclqQdO3aoc+fOslqt8vf3V+vWrVM9r9n2Pe7bt0/33XefihQpohYtWmRo3ZOSkvTf//5XISEhCggIUI8ePVKtU1rPTbz++JzeOt2s/3r27FkNGzZMJUuWlK+vr+rXr6+33nrL4bMy0m7ITunFnt7xzNkzzLJSz7kivfOdNrt371aXLl0UFBSkwMBAtW/fXj/++KPDPLb67ocfftCECRPsQ1j37t071YgWxhjNmjXLPtx727ZtnZ6LvbE8MtqflqSvv/7afj4pODhYPXv2TNXnzEjd5kxWzvFKKftt165dVaRIEQUEBKhevXr2Nn5657sy2l50RXx8vKZPn65q1arJ19dXpUqVUp8+fRzWL7ePS66cu7f1qY4cOaKuXbuqcOHCuv/++zO07pcvX9bIkSNVrFgxBQUFadCgQanWKa3z6tfXd+mtU4UKFbR37159++239unX91f++usv3X333fbHJjRp0kRffPGFw2dd356dPXu2ypQpI19fX7Vv316HDx/O0DpnlCvrL2WsPnD1mJCW06dPa//+/Tc9r1CxYsVUI3NZLBb16tVLCQkJ+uuvv5z+X1bPnWT61hlb59DVAF577TWNHTtW/fr1syd2fvvtN+3YsUP33XdfpmL49ttv9cEHH2js2LH2EwadO3fWzp07072Ce8WKFRo8eLDCw8P17LPP6vLly1q8eLFatGih3bt32yvu3377TS1btpSXl5dGjBihChUq6MiRI/rss880e/Zs9enTRwcPHtR7772nF198UbfddpuklM5rWtq3by9JGb51NjExUeHh4UpISNCYMWMUEhKikydP6vPPP1dUVJSsVmuGlmfTv39/VahQQXPnztWPP/6oBQsW6N9//003IXP58mW1bt1aJ0+e1MiRI1WuXDlt27ZNU6ZM0enTpx1u9x42bJiWL1+uLl26aPjw4bp27Zq+//57/fjjj2rUqJFWrFih4cOH684777R3zCpXrixJ2rRpk4KCguwnow4ePKiAgAANHDhQL774Yo5dyfLVV1/p3nvvVfv27fXss89KSjnB/MMPP+jRRx/NUBm4sqzp06dr7ty59nKIiYnRTz/9pF9++UUdO3ZMM87hw4frrbfeUr9+/fTYY49px44dmjt3rv7880999NFHDvMePnxY/fr107BhwzR48GC9+eabGjJkiMLCwuxX/Lti+PDheuedd3TfffepWbNm+vrrr9WtW7dU8+3atUvbtm2zPzvn77//1uLFi9WmTRvt27dP/v7+atWqlcaOHasFCxbov//9r31YNNtPV/bTkSNH6tSpU/rqq6+0YsUKl9fjnnvuUc2aNfXMM8/oiy++0KxZs1S0aFG9+uqrateunZ599lm9++67mjhxou644w77kAbJycnq0aOHtm7dqhEjRqhmzZr6/fff9eKLL+rgwYM3HSbI1f3/zJkzatu2ra5du6YnnnhCAQEBWrp0qdMT28uXL1dgYKAmTJigwMBAff3115o2bZpiYmLsQ9Y9+eSTio6O1j///KMXX3xRkuwJFlfXKb19NS2HDx/Wfffdp5EjR+qBBx7Q888/r+7du2vJkiX673//q1GjRkmS5s6dq/79++vAgQP2Y8revXvVvHlzlS5d2l4GH374oXr16qU1a9bYkz/OGGPUs2dPbd26VQ899JBq1qypjz76SIMHD04171dffaW//vpLQ4cOVUhIiPbu3aulS5dq7969+vHHH2WxWG5a18+ePVtTp05V//797UPlLVy4UK1atdLu3bsVHByc7neQlqSkJHXp0kWtWrXSvHnz9O677+qRRx5RQECAnnzySd1///3q06ePlixZokGDBqlp06aqWLGiJNfrqKtXr2rXrl16+OGH043FxjYEpK0MpP8NN92oUSOHeUNDQ1WmTBmnJ0iuFxsbq9jYWIdl3souX76soKAgXb58WUWKFNG9996rZ5999qbbQ363adMmSSlJr/bt2+vrr7+Wp6enOnbsqMWLF2fpmX3Xrl1TVFSUEhMT9ccff+ipp55S4cKFdeedd9rnadOmjZ599lkNGzZMM2bMULFixbRt2zYtXrxYY8eOTXVlW1hYmIwx2rZtm+66665Mx3YzSUlJCg8PV+PGjfX8889r06ZN+r//+z9VrlzZvl9mZ7vEZtmyZYqPj9eIESPk4+Oj3r1769KlS5o2bZpGjBihli1bSpKaNWvmNG5jjHr06KEtW7Zo2LBhatCggTZs2KDHH39cJ0+etNdzNlu3btXatWs1atQoFS5cWAsWLFDfvn11/PjxDN/1uHLlSl26dEkjR46UxWLRvHnz1KdPH/3111+ZTtS/++67SkxM1JgxY3Tx4kXNmzdP/fv3V7t27fTNN99o8uTJOnz4sBYuXKiJEyemSlocOnRI99xzjx566CENHjxYy5Yt0913363169fb23JZ/Y6KFi3q9OKbkydPqmbNmho8ePBNh6vZvXu3br/99lT9tzvvvFNLly7VwYMHVbdu3YwXoBOulMlff/2ljz/+WHfffbcqVqyoyMhIvfrqq2rdurX27duXamjhp59+Wt7e3po4caISEhLk7e2tffv2ZWgZc+fOlZ+fn5544gn7d+rl5SUPDw/9+++/mj59un788UctX75cFStW1LRp0ySltEvuuusu1atXTzNnzpSPj48OHz7scEI7J9tU6fn999/VqVMnFS9eXNOnT9e1a9cUERGR6iKDoUOHau3atZowYYI6duyosmXL6vfff9eMGTM0bNgwde3aNd3PqVmzplq3bn3TJM3u3btVrVo1BQUFOUy31cl79uxR2bJlM76iN1i1apUuX76shx9+WMWKFdPOnTu1cOFC/fPPP1q1alWGlnXy5En7ybEpU6YoICBAr7/+epp3xGWkb2Xru8+YMUM//vijli5dquDgYG3btk3lypXTnDlztG7dOj333HOqU6eOBg0aZP/fkSNHavny5Ro6dKjGjh2ro0eP6uWXX9bu3bv1ww8/ONR5N4vpZn0vV/Xv318VK1bU3Llz9csvv+j1119XiRIl7McnKWU469q1a6tHjx4qVKiQPvvsM40aNUrJyckaPXp0qrJ0R39h586datu2rSIiIjL1vKSbneeQXOsj2Pz777/q3Lmz+vTpo/79+2v16tWaPHmy6tatqy5duqhmzZqaOXNmmsfpr7/+Wl26dFFYWJgiIiLk4eFhT35+//33Dm0iSbr77rtVtWpVzZkzJ1Wy92Zmz54ti8WiyZMn6+zZs5o/f746dOigPXv2uHQhlk1661S6dOk0+05XrlxRmzZtdPjwYT3yyCOqWLGiVq1apSFDhigqKsreNrLJiXZDelzp9zk7njmTnfXcjW52vlNK2cdatmypoKAgTZo0SV5eXnr11VfVpk0bffvtt2rcuLHDMseMGaMiRYooIiJCf//9t+bPn69HHnnE4blJ06ZN06xZs9S1a1d17dpVv/zyizp16qTExMR0481of3rTpk3q0qWLKlWqpOnTp+vKlStauHChmjdvrl9++SVV38OVus2ZzJ7jlVLa+HfddZdKlSqlRx99VCEhIfrzzz/1+eef69FHH3XpfJer7cWbSUpK0l133aXNmzdrwIABevTRR3Xp0iV99dVX+uOPP+ztlNw8Lrl67l5K6Q+Gh4erRYsWev755+Xv75+h9X/kkUcUHBys6dOn68CBA1q8eLGOHTtmT3K5Kr11mj9/vsaMGaPAwEB7ctvWVouMjFSzZs10+fJljR07VsWKFdNbb72lHj16aPXq1amOZ88884w8PDw0ceJERUdHa968ebr//vu1Y8eODK13TnKlPrjezY5zzkyZMkVvvfWWjh49mqnzCc7Ob13P9t0nJydnLgFnMunpp582ksyRI0dcmr9nz56mdu3a6c4zePBgU758+VTTIyIizI2hSjKSzE8//WSfduzYMePr62t69+5tn7Zs2TIjyRw9etQYY8ylS5dMcHCw+c9//uOwvDNnzhir1eowvVWrVqZw4cLm2LFj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2J9draNsrt9Hnfn+++81bNgwhYeH24cbsbHV1c6eBRQfH59mh3L//v3q3bu36tSpo9dffz3dz7+VjR8/XlOnTtWmTZs0YMAAd4eTY2zbQf/+/R2GZrj77rs1cOBAbdu2zSHJnBFBQUHq0KGDJKlnz55auXKlevbsqV9++UX169eXlPJMtBEjRujgwYMqU6aMJKlPnz5KTk7W5MmTde+99zoMc2jbJ7JyoZUrnO3nNx6fs7NdYuPqRXNpOXbsmEJDQ1M9T9A2hEpOtEPSWpbtRFpmlpXWMl09XtlUqVIl1bZSrVo1SSknY0JCQnL9O3LGz88vzbra9n52caVMbM9EWrRokY4ePepw0aSzYUedlUlGl5GR7zo5OVnR0dEqVqyY7rnnHr3++usaPny4nnjiCbVv3159+vRRv3797HVabrUTr3fu3DlduXLFaTukevXqTk8WDRgwQO+8846++OILjRgxwj40VnbJre3s+PHjmjZtmj799NNU+6QrbbjrHTt2zCHxY3NjX8smI3VaRra5G9ty0dHRKlGihNMYbtyesrOeTU96dbCtj/bDDz8oIiJC27dvT3WCKjo62uH8hbv6C1nhynmOjPYRnLXvixQpot9+++2m8dj6zs6G0reJjo52SDxl5Rhz4zpZLBZVqVIlU4mHzDh27JiqVq2aaqgvV9sg2dFuyCpXyz8767nruXK+89y5c7p8+bLTPnTNmjWVnJysEydOOAype7Oytn03N25DxYsXd+kiUFfZPiet2Dds2KC4uDiH4eVdqduyk+05aVk955xd7cUjR46oevXqDheb3Sg3j0sZPSdYqFAhex8vM27cJgMDA1WqVKlcrdecnQO8vl67flvJi/XajfJyjGPGjNH69ev19ttv288XOBMWFqb58+dr/PjxWr58eYaHpM5w0u3tt9/WH3/8oWnTpmnw4MH65ZdfXDohUbNmTR04cECff/651q9frzVr1mjRokWaNm2aZsyYISntExtp3bWWGbYrfFasWOE0KZdeBeNu//d//6chQ4bok08+0caNGzV27Fj7s9icNdJsMlJ+rnyXycnJ6tixoyZNmuT0fVuHOqtCQ0O1d+/eVM8jsFXwObWjlihRQnv27NGGDRv05Zdf6ssvv9SyZcs0aNAg+8N5XS0DV5bVqlUrHTlyxP69vv7663rxxRe1ZMmSm56AdPVkoKen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P+/0mbY3K4uMevvttx3atKtXr9bp06cdjv2VK1fWjz/+qMTERPu0zz//XCdOnHBYVnrbZFp9p65du+rMmTP64IMP7NOuXbumhQsXKjAwUK1bt870umWX7Oj3ZXc9dz1Xznd6enqqU6dO+uSTTxyG2IuMjNTKlSvVokWLDA+72KFDB3l5eWnhwoUO6+Ws/+2Mq+VaqlQpNWjQQG+99ZbDtvXHH39o48aNDomUrMrsOd7bb79dFStW1Pz581Nt/1k555xZffv21fnz550+69oWT24elzJyTjA7LF261OFzFi9erGvXrqWq1248337jORDp5vWas+ldu3bVzp07tX37dvu0uLg4LV26VBUqVFCtWrUys1rZytX1z4qMbu+nT5/W/v37nW4jN/rggw80duxY3X///WmOSnEj2yN8Mtt2zfQYbbYrSly9LbBTp04KCQlR8+bNVbJkSf355596+eWX1a1bN/sVsgMGDNDkyZPVu3dvjR07VpcvX9bixYtVrVo1pw/CrlOnjsLDwzV27Fj5+PjYTzQ7a/zYBAUFafHixRo4cKBuv/12DRgwQMWLF9fx48f1xRdfqHnz5vZKZsGCBWrRooVuv/12jRgxQhUrVtTff/+tL774wt4gt125/eSTT2rAgAHy8vJS9+7d07xqwjZmfkbHhf3666/1yCOP6O6771a1atV07do1rVixQp6enurbt699vuHDh+uZZ57R8OHD1ahRI3333XfpdqKOHj2qHj16qHPnztq+fbveeecd3XfffemOafr444/r008/1V133aUhQ4YoLCxMcXFx+v3337V69Wr9/fffuu2229S2bVsNHDhQCxYs0KFDh+zDtX3//fdq27atHnnkEXsZbtq0SS+88IJCQ0NVsWJFNW7cWA0bNtSDDz6oN998U9euXVPr1q31zTffaNWqVZoyZcpNhyaxXUWb0bIePny4Ll68qHbt2qlMmTI6duyYFi5cqAYNGtiveHe1DFxZVq1atdSmTRuFhYWpaNGi+umnn7R69Wp7+ThTv359DR48WEuXLrUPMbhz50699dZb6tWrl8MVGtmlQYMGuvfee7Vo0SJFR0erWbNm2rx5s9MrQO+66y6tWLFCVqtVtWrV0vbt27Vp06ZUz9Zo0KCBPD099eyzzyo6Olo+Pj5q166dSpQo4fJ+atsHx44dq/DwcHl6eubYc5EG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QPEMGDCg2BEAAACgV1C6AQDAAWrgwIFpbm4udgwAAADoFdxeEgAAAAAAAAqkdAMAAAAAAIACKd0AAOAAtX379pxxxhk544wzsn379mLHAQAAgB7NZ7oBAMABqq2tLffdd1/nYwAAAGDPudINAAAAAAAACqR0AwAAAAAAgAIp3QB6qSVLlmT06NHp169fqqqqsmbNml3O/8d//MeMHz8+/fr1y/HHH995u7G3dXR0ZP78+RkxYkT69++f6urqPPXUU/vyEAAAAAAAegylG0AvtHz58tTV1WXBggVZt25dJk2alJqamrzyyis7nP/ggw/m/PPPz+c+97k8/PDDmT17dmbPnp1HH320c86iRYty2223ZenSpVm9enUGDhyYmpqabN++fX8dFgAAAABAt6V0A+iFbr311lx88cWpra3NhAkTsnTp0gwYMCB33XXXDud/97vfzcyZM3PllVfmgx/8YK6//vqceOKJ+d73vpfkT1e5LV68OFdffXXOOuusTJw4McuWLctLL72UFStW7McjAwAAAADonvoUOwAAe1dra2vWrl2befPmdY6Vlpamuro6q1at2uE+q1atSl1dXZexmpqazkLt2WefTWNjY6qrqztfHzJkSKqqqrJq1aqcd955O1y3paUlLS0tnc9ff/31JMlvf/vbDBw4sMvc0tLStLe3v2ONHY3vztwnn3zyT1kan057639elffmay8mSdauXZutW7fulyx7a3x3j6kYX3Nn6xTj+7W7490pS0/I2J2yHOgZ9+TPaWtra+fj3/72t+nXr1+3+r7sbLy3ZdmXf1ftdO1NL+ze+F76e3Nn493lv+luf7928/vi71NZekLG7pSlO2XcnfPDvj5n7u54d/pvV6yMkydPzuDBg1NSUvKO1wBgbyrp6OjoKHYIAPael156KYcffngefPDBTJ8+vXP8qquuyq9//eusXr36Hfv07ds399xzT84///zOsdtvvz3XXXddmpqa8uCDD+bP/uzP8tJLL2XEiBGdcz7zmc+kpKQky5cv32GWa6+9Ntddd91ePDoAAADYfa+//noOPvjgYscAoJdzpRsA+8y8efO6XEHX3t6e1157Le973/sO+N8w3LJlS0aNGpUXXnjBD37sMe8j9gbvI/YG7yP2Fu8l9gbvI3Zk8ODBxY4AwAFA6QbQywwdOjRlZWVpamrqMt7U1JTK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U1M+85nP7PRrPPLII3n99dczderUzrGHHnooX/rSl/LNb34zTz75ZFauXJmPfOQjXfabNm1a1qxZk5aWln1z8AAAAL2Y0g0AAGA/mjRpUq6++uocddRRmTdvXvr165ehQ4fm4osvzlFHHZX58+dn06ZNeeSRR5Ik3/ve93LCCSfk29/+dsaPH58TTjghd911Vx544IH8x3/8xw6/xvPPP5+ysrIMHz68c2zDhg0ZOHBgPvGJT+SII47ICSeckC996Utd9hs5cmRaW1u73DoTAACA90bpBgAAsB9NnDix83FZWVne97735fjjj+8cq6ioSJK88sorSZJ/+7d/ywMPPND5GXGDBg3K+PHjkyTPPPPMDr/GG2+8kfLy8pSUlHSOffzjH88RRxyRsWPH5oILLsgPfvCDzqvp3ta/f/8kecc4AAAA707pBgAAsB8ddNBBXZ6XlJR0GXu7KGtvb0+SbN26NWeeeWbWr1/fZXvqqafecXvItw0dOjTbtm1La2tr59jgwYOzbt26/OhHP8qIESMyf/78TJo0KZs3b+6c89prryVJhg0btleOFQAA4ECidAMAAOjGTjzxxDz22GMZPXp0xo0b12UbOHDgDveZPHlykuTxxx/vMt6nT59UV1dn0aJFeeSRR/Lcc8/l//yf/9P5+qOPPpr3v//9GTp06D47HgAAgN5K6QYAANCNXXrppXnttddy/vnn53e/+12eeeaZ3H///amtrU1bW9sO9xk2bFhOPPHE/OY3v+kc+9nPfpbbbrst69evz/PPP59ly5alvb09xxxzTOec//t//29mzJixz48JAACgN1K6AQAAdGMjR47Mb3/727S1tWXGjBk5/vjjc/nll+eQQw5JaenOf6T7/Oc/nx/84Aedzw855JD89Kc/zcc+9rF88IMfzNKlS/OjH/0oxx57bJJk+/btWbFiRS6++OJ9fkwAAAC9UUlHR0dHsUMAAACwd73xxhs55phjsnz58kyfPv1d599xxx35p3/6p/ziF7/YD+kAAAB6H1e6AQAA9EL9+/fPsmXLsnHjxvc0/6CDDspf//Vf7+NUAAAAvZcr3QAAAAAAAKBArnQDAAAAAACAAindAAAAAAAAoEBKNwAAAAAAACiQ0g0AAAAAAAAKpHQDAAAAAACAAindAAAAAAAAoEBKNwAAAAAAACiQ0g0AAAAAAAAKpHQDAAAAAACAAv3/ARvBo+z1CB0MAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "alignment_condition = {\n", - " **clustering_key,\n", - " **alignment_key,\n", - " \"trial_condition\": \"ctrl_center_button\",\n", - "}\n", - "analysis.SpikesAlignment().plot(alignment_condition, unit=2)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "e144df4c-87c1-4646-9d4b-b0009216bca1", - "metadata": { - "title": "a set of trials of interest to perform the analysis on - `stim` trials" - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABuYAAAK9CAYAAADYCdrlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC4gUlEQVR4nOzdZ3gU1f/38c+mN5LQA0hHejUqIF2QUBQhFLFRhD8oTUUUsYWggII/RFRALIAoFiB2pIoFQUBBRZAqTUpokpBAEkjO/SD3rizZhE3bTXm/rmuvJLOT2e+cnTlzypwzFmOMEQAAAAAAAAAAAIB85eHuAAAAAAAAAAAAAIDigI45AAAAAAAAAAAAwAXomAMAAAAAAAAAAABcgI45AAAAAAAAAAAAwAXomAMAAAAAAAAAAABcgI45AAAAAAAAAAAAwAXomAMAAAAAAAAAAABcgI45AAAAAAAAAAAAwAXomAMAAAAAAAAAAABcIFcdc6+99prq1KkjX19fTZw4MY9Cco7FYtGoUaOuud6CBQtksVh08ODB/A+qEJk4caIsFotOnz59zXWrVaumQYMG5X9QyJT1+yqoLBaLy/MAZxTUuHKqoOZnBTWuqx08eFAWi0ULFixwdyh2CkJcR44ckZ+fn3766Se3xQAUBJcuXVLlypU1e/bsPN1uQTjPc2PQoEGqVq2au8MokKpVq6bbb7/d3WGgGHG2fFvQ6w+u4igdqN8C2ffdd9/JYrFo6dKl7g6lSLKm73fffZft/y0K+f3V+XJ20qOwl7NzorC0wRQF1rT+5Zdf3B1KsdS+fXu1b9/e3WFkUL16dQUHB6tdu3b6448/crydHHfM7d+/X2PGjJGfn59mzpypyMhIu/fbt29fLAq7GzZs0MSJE3Xu3LkM71WrVi3HnQLWi1BxyGSnTJmizz77LNP3t27dqh49eqhUqVIKCAhQw4YNNWvWLLt1cpPWgwYNKpAneXGwc+dOTZw4MVfH+fLlywtk51tujsn8sHjxYs2cOTNX27jWuVqUZZXXOysvvoP8MmnSJDVv3lytWrWyLYuJidFdd92lGjVqKCAgQHXq1NFjjz2WaRp88cUXuuGGG+Tn56cqVaooKipKly9ftltn7dq1euCBB1S7dm0FBASoRo0aGjp0qI4fP55he6tWrdKQIUPUsGFDeXp65kmnwO7du/Xoo4/qlltukZ+fX55cZxMSEhQVFaUuXbqoVKlSWVYKBw0aJIvFkuFVt27dHH9+dvbp448/1n333afrr79eFoslT659mzdv1ogRIxQeHi5vb+9rNgrExsZq+PDhqlSpkvz8/FStWjUNGTIkx5//6KOP6oYbbrCVEerVq6eJEycqISEhw7p79+5V//79dd111ykgIEB169bVpEmTdOHCBds63t7eGjt2rCZPnqykpKQcx1UYy8HHjh3TxIkT9dtvv7k7FGTC2vCUk0Y7q3PnzmnYsGEqW7asAgMD1aFDB23dujXH27M2ViB7CnqZKrcNnMnJyRo/frwqVqwof39/NW/eXKtXr87x9opT3Tg/5UXdqzDK7fFTUNoLiuJ1Oqt9cmXdaeLEiTmuazg6vgpyva8wc3e6uqONt6CXF1yhKF67stqn2bNnu6yTOTfXN3fVAbK6buRmf86cOaPp06erbdu2Klu2rEJDQ9WiRQt9/PHHDtefMWOGxo8fr99++82pgWOZyXHH3LZt2yRJkydP1kMPPaTGjRvnOIj8dP/99+vixYuqWrVqvmx/w4YNio6OzlVjbUG3e/duvfXWW/m2/awuNKtWrVLLli118uRJPfvss3r11Vd1++23659//sm3eAqiZ555RhcvXnR3GHlu586dio6OznXHXHR0tMP3Ll68qGeeeSbH2y5K8rNjLr/z2YIgL/L6zL6DqlWr6uLFi7r//vtzHmAunDp1SgsXLtSDDz5ot3zYsGH666+/dN9992nWrFnq0qWLXn/9dbVs2TJDfvTNN9+oZ8+eCg0N1WuvvaaePXvqhRde0OjRo+3WGz9+vL777jv16tVLs2bNUv/+/fXJJ5+oWbNmOnHihN26ixcv1uLFixUSEqKKFSvmyb5u3LhRs2bN0vnz51WvXr082ebp06c1adIk/fXXX2rSpMk11/f19dWiRYvsXtOnT8/x52dnn+bMmaPPP/9clStXVsmSJXP8mVdavny53n77bVksFtWoUSPLdY8cOaKbbrpJ33zzjR588EHNnj1bQ4cO1alTp3L8+Vu2bFGbNm0UHR2tV199VR06dNCLL76oLl26KC0tze6zb775Zv38888aNWqUZs6cqZYtWyoqKkp333233TYHDx6s06dPa/HixTmO62ruPs+dcezYMUVHRzus5Lz11lvavXu364NCnkpLS1P37t21ePFijRo1StOmTdPJkyfVvn177d27193hFSu5aWgrDOXbQYMGacaMGbr33nv16quvytPTU926ddP69evdHZqk/K/fFlR5UfeC+2R1nS6sstond3fC5EZOYm/btq0uXryotm3b5k9QhYyj9Cio9en8VJzbYKyK4rUrq31yZcdcYbBq1SqtWrXK9nd+XQs3btyop59+WqVKldIzzzyjyZMnKyAgQP3791dUVFSG9Xv16qWnn35ad911V65i8crpPyYmJkqSypcvn+MPdwVPT095enq6O4xCzdfX1y2fGx8frwEDBqh79+5aunSpPDyK7yMRvby85OWV49O12PLz83N3CMUC+WzuWCwWtx6r77//vry8vHTHHXfYLV+6dGmGu43Cw8M1cOBAffDBBxo6dKht+bhx49S4cWOtWrXKllcFBwdrypQpevjhh20jwmbMmKHWrVvb5eddunRRu3bt9Prrr+uFF16wLZ8yZYreeusteXt76/bbb9eff/6Z633t0aOHzp07pxIlSujll1/Ok8JchQoVdPz4cYWFhemXX37RTTfdlOX6Xl5euu+++3L9uVbZ2adFixapUqVK8vDwUMOGDfPk8x966CGNHz9e/v7+GjVqlPbs2ZPpusOHD5eXl5e2bNmi0qVL58nnO2rkrVmzpsaNG6fNmzerRYsWktL3/dy5c1q/fr0aNGggKb3zOS0tTe+9957+/fdfW2dlaGioOnfurAULFuiBBx7IkzjdfZ5n5fLly3admI54e3u7KBo44sx35IylS5dqw4YNWrJkifr06SNJ6tevn2rXrq2oqKg87YzOb0lJSfLx8SmW9YOCmpdYbd68WR999JGmT5+ucePGSZIGDBighg0b6oknntCGDRvcHKH76rdAQZSYmKjAwEB3h1FsXXk9K+j5uytlJz0Kcjk7v9AGk3vkfYWDj4+PSz6nQYMG2rt3r11n94gRI9SpUye99NJLeuKJJxweL2FhYTp//nyOPzfHNRljjCRla9jia6+9pgYNGiggIEAlS5bUjTfeaFcBzOz5FVnNl/zBBx+oTp068vPzU3h4uH744Qe79zObd/ebb75RmzZtFBgYqBIlSqh79+7asWNHhu3v2rVL/fr1U9myZeXv7686dero6aeftsX1+OOPS0qfW9Q6JVVWvfj79+/X/v37M30/K3v37lXv3r0VFhYmPz8/XXfdderfv7/i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r8wTs9qnatWqaceOHfr+++9ty6+s0/z999/q27ev7TEOLVq00Ndff233WVeWeSdPnqzrrrtOfn5+6tixo/bt25etfc4uZ/Zfyl6e4ex1IzPHjx/Xrl27rtn2UL169QwjUC0Wi3r27Knk5GT9/fffDv8vt+0rOR6CY61AOhvAW2+9pTFjxqhPnz62zp8//vhDmzZt0j333JOjGL7//nt9/PHHGjNmjK1RoUuXLtq8eXOWd4IvWrRIAwcOVEREhF566SVduHBBc+bMUevWrbVt2zZb5v7HH3+oTZs28vb21rBhw1StWjXt379fX375pSZPnqzIyEjt2bNHH374oV555RWVKVNGUnoFNzMdO3aUpGwPwU1JSVFERISSk5M1evRohYWF6ejRo/rqq6907tw5hYSEZGt7Vv369VO1atU0depU/fzzz5o1a5b+/fffLDttLly4oHbt2uno0aMaPny4qlSpog0bNmjChAk6fvy43dDyIUOGaMGCBeratauGDh2qy5cv68cff9TPP/+sG2+8UYsWLdLQoUN188032ypvNWvWlCStWbNGwcHBtgarPXv2KDAwUPfff79eeeWVfLsjZvXq1br77rvVsWNHvfTSS5LSG6F/+uknPfzww9lKA2e2NXHiRE2dOtWWDvHx8frll1+0detW3XbbbZnGOXToUC1cuFB9+vTRY489pk2bNmnq1Kn666+/9Omnn9qtu2/fPvXp00dDhgzRwIED9e6772rQoEEKDw+3jRxwxtChQ/X+++/rnnvu0S233KJvv/1W3bt3z7Deli1btGHDBtuzfA4ePKg5c+aoffv22rlzpwICAtS2bVuNGTNGs2bN0lNPPWWbgs3605nzdPjw4Tp27JhWr16tRYsWOb0fd911l+rVq6cXX3xRX3/9tV544QWVKlVKb775pm699Va99NJL+uCDDzRu3DjddNNNtukT0tLS1KNHD61fv17Dhg1TvXr1tH37dr3yyivas2fPNackcvb8P3HihDp06KDLly/rySefVGBgoObNm+ew8XvBggUKCgrS2LFjFRQUpG+//VbPPfec4uPjbdPjPf3004qLi9M///yjV155RZJsnTDO7lNW52pm9u3bp3vuuUfDhw/Xfffdp5dffll33HGH5s6dq6eeekojRoyQJE2dOlX9+vXT7t27bdeUHTt2qFWrVqpUqZItDT75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7NYbMWKEkWR+//13u5gHDhxo+/v55583gYGBZs+ePXb/++STTxpPT09z+PBhY4wx3377rZFkxowZkyGeK9MwMDDQbvtWjRs3NgEBASYgIMCMHj3aLFu2zIwePdpIMv379880HXLr4YcfNsHBweby5cuZruNsGjizrSZNmpju3btnGdPV58Bvv/1mJJmhQ4farTdu3DgjyXz77be2ZVWrVjWSzA8//GBbdvLkSePr62see+yxLD/3StbPHDFihN3ye+65J8PxdeHChQz/v3HjRiPJvPfee7ZlS5YsMZLMunXr7NbNznk6cuTIDPmDVWbH/bBhw2zLLl++bK677jpjsVjMiy++aFv+77//Gn9/f7tjc9GiRcbDw8P8+OOPdp8zd+5cI8n89NNPDuOwcvb8f+SRR4wks2nTJtuykydPmpCQkAz5jaO0Hj58uAkICDBJSUm2Zd27d3f42dnZp8zO1avzWeu+SjIbNmywLVu5cqWRZPz9/e3y1TfffDPDcdCxY0fTqFEju31IS0szt9xyi7n++uszxHClzz77zEgy06ZNsy27fPmyadOmTYY80lH6ffjhhxnOmczy+oMHDxpPT08zefJku+Xbt283Xl5edssz+w4c5d0DBw40ksyUKVNsy6zHpMViMR999JFt+a5duzIc687mUfv27TOSzGuvvZYhLkeGDBliPD097bZrTRvrNq900003mRYtWmS5TWt5Yu3atZmuk1na5UZ2r9/O2LJlS6bXYWPS03/8+PHm448/Nh9++KHte27VqpW5dOlSrj8/O/vUoEED065du1x/5pWyyo/HjBljJJnSpUubLl26mI8//thMnz7dBAUFmZo1a5rExMQcf671+mJ91alTJ8N1xZj0Y83f399u3aefftrhNo8dO2YkmZdeeinHcV0pq/N80qRJdus2a9bMhIeH2/7Oy3KJNY7g4GBz8uRJu3WzOn6vLqNb89kXXnjBbr0+ffoYi8Vi9u3bZ1smyfj4+Ngt+/3337OV91wZe+nSpc3Zs2dtyz///HMjyXz55Ze2Ze3atXN4fF+9H9Ztli1b1pw7d862fMKECUaSadKkid25effddxsfHx+7a5P1erds2TLbsri4OFOhQgXTrFkz27K8+I6yShdH1+erBQYGmgceeCDD8q+//tpIMitWrLjmNpzhbJokJSWZ1NRUu/89cOCA8fX1tTsv1q1bZySZGjVqZLhuZ3cbDRs2NCkpKbbld999t7FYLKZr165222jZsqXdsfLKK68YSebUqVOZ7ndelKmccfU1v2fPnsbPz8+ubLVz507j6emZIU8+fvy4KVWqlLnttttMcnKyadasmalSpYqJi4tz6nOduW40aNDA3HrrrRmW79ixw0gyc+fOveY2nOGoDDd16lRjsVjs0sJRW8LV9dvRo0cbi8Vitm3bZlt25swZU6pUqUzLuNeqW1nLxxEREXZ135YtWxqLxWIefPBB2zJrfeTK9P3xxx+NJPPBBx/Yxb5ixYoMy52NKbO6lzOs6Xh1HtKrVy9TunRpu2WOvpuIiAhTo0YNu2XurC9Y84QrzyVnOdPOkZ06Qrt27TLUk5OTk01YWJjp3bu3bVlm1+m0tDRz/fXXZzjWLly4YKpXr25uu+022zLr93j33Xdne7+taVapUiUTHx9vW/7JJ58YSebVV1+1Lbv6HLtyX688zrMqe2RW/p85c6aRZN5//33bspSUFNOyZUsTFBRkiy075Ya8llnsWV3PrO9deYznJp+7FmfaO3v27Gl8fHzs2n2PHTtmSpQoYdq2bWtbZs3vOnXqZPf/jz76qPH09LSVsU6ePGl8fHxM9+7d7dZ76qmnMpRlHKVHdurTTZs2NeXKlTNnzpyxLfv999+Nh4eHGTBggG1ZdvI2R/KzjdcY17bBXMu7775rJJkZM2ZkeM/6fbry2pWddkNrvevJJ590en+trGkdHh5uV4acNm2akWQ+//xz27LMritX54lZXY8zq6db2wmvLGeeP3/eVK9e3VSrVs1WHraeO/Xq1TPJycm2dV999VUjyWzfvj0be589zu6/s3mGMdm7bjhi/e5z0u5z5swZU65cOdOmTZtM17HWEf75559sb98YY7LdlXf69Gn9+OOPevvtt1WjRg3b3fnXEhoaqn/++SdPh4y3bNlS4eHhtr+rVKmiO++8UytXrswwBZDV6tWrde7cOd199906ffq07eXp6anmzZtr3bp1kqRTp07phx9+0AMPPKAqVarYbSM7PeFXO3jwYI4eWGkdEbdy5UqnhlM76+o71kaPHi1JWU5lsmTJErVp00YlS5a0S8NOnTopNTXVNp3osmXLZLFYHD4k0Zk0TEhI0IULFzRgwADNmjVLkZGRmjVrloYPH66PPvoo3x5SHxoaqsTERLupJK/mbBo4s63Q0FDt2LEjW/tj/X7Gjh1rt/yxxx6TpAxDmevXr2+7k0BKH+lTp06dTIfiZvWZY8aMsVv+yCOPZFj3yjvlLl26pDNnzqhWrVoKDQ3V1q1br/lZzp6nOXXls7E8PT114403yhijIUOG2JaHhoZmSKMlS5aoXr16qlu3rl1ct956qyRdMy5nz//ly5erRYsWdnc2li1b1uFQ+yvT+vz58zp9+rTatGljm57lWnK7T1mpX7++WrZsafvbekfdrbfeapevWpdb0/rs2bP69ttv1a9fP9s+nT59WmfOnFFERIT27t2ro0ePZvq5y5cvl5eXl90oME9PT1v+dqUr0y8pKUmnT5+2PZPKmWM1JiZGaWlp6tevn136hYWF6frrr8/TY9V6TAYGBqpfv3625XXq1FFoaGiGY9WZPMo6Zaf12VpZWbx4sd555x099thjuv76623LrVOpOLqr3M/PL8upVn744QdFR0fbRqYUdVOnTtWLL76ofv36qX///lqwYIEmT56sn376yW7Kz6IoISFBUvoc7F9//bX69euncePG6a233tL+/ftz9Wyr+vXra/Xq1frss89sc79bP+9K1apVU9u2bTVv3jwtW7ZMDzzwgKZMmaLXX389w7rWcyKnU1xlx4MPPmj3d5s2bezO57wsl1j17t07yxkermX58uXy9PTMUCZ47LHHZIzRN998Y7e8U6dOdnf4Nm7cWMHBwdkqh1jddddddnmWtXyTk21Z9e3b1272Cet16b777rObord58+ZKSUnJcA2qWLGi3V2q1ulttm3bZrvLMr++o2rVqskY49RD4i9evJhpXm19P684kya+vr62O0tTU1N15swZ2xSRjq7BAwcOzDAaI7vbGDBggN2d2s2bN5cxJsPzJJs3b64jR47o8uXLkmQb2fL5559nOrV+fpapMpOamqqVK1eqZ8+edmWrevXqKSIiIsP6YWFheuONN7R69Wq1adNGv/32m959990Mo9scMcY4Ne2hq46zK4+FxMREnT59WrfccouMMdmenmvFihVq2bKlmjZtaltWqlSpTKe5yk7dasiQIXZ1X+sxd2W9w1ofubosFxISottuu83ueAoPD1dQUFCG4ykv6nvOcHTNOnPmjN0U3Vd+N3FxcTp9+rTatWunv//+2zZF25Vxu6O+0L59exljcjRazpl2juzWEYKCguyeQezj46Obb77Zqe/vt99+0969e3XPPffozJkzts9KTExUx44d9cMPP2TIt67+HrNjwIABdtOo9+nTRxUqVLjmdLh5Zfny5QoLC9Pdd99tW+bt7a0xY8YoISFB33//vd36+VFuyC1H1zNH8jKfu5Iz7Z2pqalatWqVevbsqRo1atjer1Chgu655x6tX78+w9T8w4YNs8vv2rRpo9TUVB06dEhS+ig26wwFV67nqE0pN44fP67ffvtNgwYNUqlSpWzLGzdurNtuu83hsepM3uZIQWvjzWme6oxly5apTJkyDttVrN+nK69dOWk3dHamIEeGDRtmV4Z86KGH5OXl5dK87+abb7abfjgoKEjDhg3TwYMHM0x7P3jwYLvRuAUh77vatfKMvLBgwQIZY7I9Wi4tLU333nuvzp07p9deey3T9dq0aSOLxaJnnnlGe/fuzfb5nO2pLG+88UYdOnRIFSpU0IoVK5zupBo/frzWrFmjm2++WbVq1VLnzp11zz33qFWrVtkNwebKhkGr2rVr68KFCzp16pTDZ75YOz8yawC0VkqsB2pWU2K6UvXq1TV27FjNmDFDH3zwgdq0aaMePXrYnpOVU1enYc2aNeXh4ZHlhWXv3r36448/Mm0sOHnypKT0uZYrVqxodyHMDmsh5MoClyTdc889evPNN7Vx40aHx0BujRgxQp988om6du2qSpUqqXPnzurXr5+6dOliW8fZNHBmW5MmTdKdd96p2rVrq2HDhurSpYvuv/9+NW7cONMYDx06JA8PD9WqVctueVhYmEJDQzNkYlcXtqT0Rser50POivUzrx46X6dOnQzrXrx4UVOnTtX8+fN19OhRu+kxrq6MOeLseZpTV6dHSEiI/Pz8MgxNDgkJsXvW2N69e/XXX39d83vPrUOHDmWYFkJynNY7duzQM888o2+//TZDodHZtM6vfXKUzpIyTF9kXW49Hvft2ydjjJ599lk9++yzmcZVqVIlh+9Zr1FXT23hKP3Onj2r6OhoffTRRxn21dn0M8ZkmhflZnoU6/MqrhQSEqLrrrsuw7U3JCTE7nx2No+yuvIcdeTHH3/UkCFDFBERYZvaxMqaVzt6NlFSUlKmlc5du3apV69eatiwod5+++0sP78oe/TRR/Xss89qzZo16t+/v7vDyTfW46Bfv352Uzz07dtX999/vzZs2GDX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goODVaZMmQzPqJg9e3am233jjTfs/rbOm9q1a9dM/6dfv37auHGjVq5cmeG9c+fO2eLs3bu3jDG2EZFXujoNHaWf9RlKV1e03377bXl5eal9+/aZxpgbVx+rHh4etkKmNa2dTQNntnX1OkFBQapVq5bDKWCsrBn/zJkz7ZZb79Dt3r175juYQ9ZjYtasWXbLr45BSr/r4eo7HF577bUMd0lkdv44e55mtY380K9fPx09elRvvfVWhvcuXryoxMTELP/f2fO/W7du+vnnn7V582bbslOnTmW468iaz12Z1ikpKQ7P+cDAQIfTXWRnnzI7V/NauXLl1L59e7355psOL+BXfv+XLl3Srl277Nbr1q2bLl++rDlz5tiWpaamZpgX2lH6SY6P6cyOs8jISHl6eio6OjrDdowxdud3Zt9BfnA2j/L29taNN95ou3P+SidOnFDnzp3l4eGhlStXZtpx0qBBA9WtW1fz5s2zO8fnzJkji8WiPn362JYlJiaqW7duOnr0qJYvX54v0xEXVElJSTp//nyG5c8//7yMMXbTEhZF7du3t909aZ3OTEqf8916R3B2nTt3zuE1wjo16o033mhbVrt2bW3bts3WMWD14Ycf2l2brX799VdZLBaHU5u5Wl6WS7KSnetpt27dlJqamuH5fK+88oosFkuW5UhXqFmzpnbt2mV3vfj999/1008/5cvnHTt2zK6+Eh8fr/fee09Nmza13cGbF9+RI46ug5np06ePYmNjFRMTY1t2+vRpLVmyRHfccYfD54LllDNp4qi8uGTJkiyfC3W1vNiGMxyNarZ2MF15Hrq6TOXp6amIiAh99tlndnXWv/76y+GxtnTpUn388cd68cUX9eSTT6p///565plnMuSNjuzatStDvdiRPn36KDU1VfPmzbMtS05O1vz589W8efM8GTnoqAxnjNGrr76ao+1FRERo48aN+u2332zLzp49m+kd/67Qr18/paam6vnnn8/w3uXLl3N0/Lii3uTou4mLi9P8+fPz9HOyU19wxPo87pw8S9aZdo7s1BGcldn3Fx4erpo1a+rll192+Izda6VFdr333nt2ZdqlS5fq+PHjdtf+mjVr6ueff1ZKSopt2VdffaUjR47YbSurYzKzulO3bt104sQJffzxx7Zlly9f1muvvaagoCC1a9cux/uWV/Ki3pfX+dyVnGnv9PT0VOfOnfX555/bTdUXGxurxYsXq3Xr1tme4rFTp07y9vbWa6+9ZrdfjurfjjibrhUqVFDTpk21cOFCu2Przz//1KpVq+w6UnIrP9t4Jde1wTijd+/eOn36tMPnc1u/T1deu7LTbpgX5s2bZ/c5c+bM0eXLlzPkfVe3yV/dTiJdO+9ztLxbt27avHmzNm7caFuWmJioefPmqVq1aqpfv35OditPObv/uZHdsszx48e1a9cuh8fI1T7++GONGTNG9957b6YzYFzN+kihnJZvczwfnPXOFGeHF3bu3FlhYWFq1aqVypcvr7/++kuvv/66unfvbrvTtn///ho/frx69eqlMWPG6MKFC5ozZ45q167t8OHdDRs2VEREhMaMGSNfX19bY7SjApJVcHCw5syZo/vvv1833HCD+vfvr7Jly+rw4cP6+uuv1apVK1smM2vWLLVu3Vo33HCDhg0bpurVq+vgwYP6+uuvbYV26x3gTz/9tPr37y9vb2/dcccdmd59YZ3DP7tz0H777bcaNWqU+vbtq9q1a+vy5ctatGiRPD091bt3b9t6Q4cO1YsvvqihQ4fqxhtv1A8//JBlRevAgQPq0aOHunTpoo0bN+r999/XPffck+X8qY8//ri++OIL3X777Ro0aJDCw8OVmJio7du3a+nSpTp48KDKlCmjDh066P7779esWbO0d+9e29RwP/74ozp06KBRo0bZ0nDNmjWaMWOGKlasqOrVq6t58+Zq1qyZHnjgAb377ru6fPmy2rVrp++++05LlizRhAkTrjkNivVu3Oym9dChQ3X27Fndeuutuu6663To0CG99tpratq0qe3OeWfTwJlt1a9fX+3bt1d4eLhKlSqlX375RUuXLrWljyNNmjTRwIEDNW/ePNt0hps3b9bChQvVs2dPu7s48krTpk119913a/bs2YqLi9Mtt9yitWvXOryT9Pbbb9eiRYsUEhKi+vXra+PGjVqzZk2GZ300bdpUnp6eeumllxQXFydfX1/deuutKleunNPnqfUcHDNmjCIiIuTp6Zlvz2m6//779cknn+jBBx/UunXr1KpVK6WmpmrXrl365JNPtHLlSruG4Ks5e/4/8cQTWrRokbp06aKHH35YgYGBmjdvnu3uQKtbbrlFJUuW1MCBAzVmzBhZLBYtWrTIYb4cHh6ujz/+WGPHjtVNN92koKAg3XHHHdnap8zO1fzwxhtvqHXr1mrUqJH+7//+TzVq1FBsbKw2btyof/75R7///ruk9NE39erV08CBA7VgwQJJ0h133KFWrVrpySef1MGDB1W/fn3FxMRkKMQHBwerbdu2mjZtmi5duqRKlSpp1apVDkePZZbX16xZUy+88IImTJiggwcPqmfPnipRooQOHDigTz/9VMOGDdO4ceOy/A7yg7N5lJT+TK6nn346w53tXbp00d9//60nnnhC69ev1/r1623vlS9f3q4jZfr06erRo4c6d+6s/v37688//9Trr7+uoUOH2o04uvfee7V582Y98MAD+uuvv/TXX3/Z3gsKClLPnj1tf//xxx/64osvJKXfsR4XF2e7c7BJkyZ2aedsfh8XF2froLU20L/++usKDQ1VaGioXb47aNAgLVy4UAcOHLjmg4Jff/11nTt3zjai+8svv9Q///wjKX1q35CQEJ04cULNmjXT3Xffrbp160pKf9j38uXL1aVLF915551228yPffrhhx9sBeVTp04pMTHRlqbWGRGsLBaL7bqblUOHDmnRokWSZOvgtW6zatWqtqkffH19NX36dA0cOFBt27bV/fffr8OHD+vVV19VmzZtFBkZadvmd999pw4dOlxzfvbvvvtOY8aMUZ8+fXT99dcrJSVFP/74o2JiYnTjjTfqvvvus637+OOP65tvvlGbNm00atQolS5dWl999ZW++eYbDR06NEOZYvXq1WrVqlWG65az6ZKX8rJckpWaNWsqNDRUc+fOVYkSJRQYGKjmzZs7fA7KHXfcoQ4dOujpp5/WwYMH1aRJE61atUqff/65HnnkEadn08gvDzzwgGbMmKGIiAgNGTJEJ0+e1Ny5c9WgQYMMz2PNC7Vr19aQIUO0ZcsWlS9fXu+++65iY2PtGqLz4jtyxNF1MDN9+vRRixYtNHjwYO3cuVNlypTR7NmzlZqamqH+lJ080BFn0uT222/XpEmTNHjwYN1yyy3avn27PvjgA7u76K8lL7bhjEmTJumHH35Q9+7dVbVqVZ08eVKzZ8/Wddddp9atW0vKXjkxL8tU0dHRWrFihdq0aaMRI0bYGqgbNGhgV248efKkHnroIbt62Ouvv65169Zp0KBBWr9+fZZTPNWrV8+p/K958+bq27evJkyYoJMnT6pWrVpauHChDh48mOGGy4kTJyo6Olrr1q3L1k2XdevWVc2aNTVu3DgdPXpUwcHBWrZsWY6nRX7iiSf0/vvv67bbbtPo0aMVGBiot99+W1WqVNHZs2fdMmKhXbt2Gj58uKZOnarffvtNnTt3lre3t/bu3aslS5bo1Vdftbv5yRlZ1b3ySufOnW2jvIcPH66EhAS99dZbKleuXJ7eMS85X19wZPPmzU6VNRxxpp0jO3UEZ2V1nX777bfVtWtXNWjQQIMHD1alSpV09OhRrVu3TsHBwfryyy+z9VlZKVWqlFq3bq3BgwcrNjZWM2fOVK1atfR///d/tnWGDh2qpUuXqkuXLurXr5/279+v999/P0P5IKt9yqzuNGzYML355psaNGiQfv31V1WrVk1Lly7VTz/9pJkzZ+bZFPk5zZ+kvKn35XU+dzVn2jtfeOEFrV69Wq1bt9aIESPk5eWlN998U8nJyZo2bVq2P7Ns2bIaN26cpk6dqttvv13dunXTtm3b9M033zhVBspOuk6fPl1du3ZVy5YtNWTIEF28eFGvvfaaQkJCsn3OZyW/23hd2QZzLQMGDNB7772nsWPHavPmzWrTpo0SExO1Zs0ajRgxQnfeeafLr13OthvmhZSUFHXs2FH9+vXT7t27NXv2bLVu3Vo9evSwrTN06FA9+OCD6t27t2677Tb9/vvvWrlyZYbjO6t9Cg8P15w5c/TCCy+oVq1aKleunG699VY9+eST+vDDD9W1a1eNGTNGpUqVspXVly1blmfTdOamDuDs/udGduqskjRhwgSn9mfz5s0aMGCASpcurY4dO2a4OeuWW25xWL+wtr/mOP1NDr333ntGkvnxxx+dWv/NN980bdu2NaVLlza+vr6mZs2a5vHHHzdxcXF2661atco0bNjQ+Pj4mDp16pj333/fREVFmatDlWRGjhxp3n//fXP99dcbX19f06xZM7Nu3Tq79ebPn28kmQMHDtgtX7dunYmIiDAhISHGz8/P1KxZ0wwaNMj88ssvduv9+eefplevXiY0NNT4+fmZOnXqmGeffdZuneeff95UqlTJeHh4OPysK1WtWtVUrVrVqTS70t9//20eeOABU7NmTePn52dKlSplOnToYNasWWO33oULF8yQIUNMSEiIKVGihOnXr585efKkkWSioqJs61nTdOfOnaZPnz6mRIkSpmTJkmbUqFHm4sWLGWIeOHCg3bLz58+bCRMmmFq1ahkfHx9TpkwZc8stt5iXX37ZpKSk2Na7fPmymT59uqlbt67x8fExZcuWNV27djW//vqrbZ1du3aZtm3bGn9/fyPJ7rNSUlLMxIkTTdWqVY23t7epVauWeeWVV5xKszJlypgWLVo4te6Vli5dajp37mzKlStnfHx8TJUqVczw4cPN8ePHs50GzmzrhRdeMDfffLMJDQ01/v7+pm7dumby5Ml26ejoHLh06ZKJjo421atXN97e3qZy5cpmwoQJJikpyW69qlWrmu7du2fYz3bt2pl27dplK20uXrxoxowZY0qXLm0CAwPNHXfcYY4cOZLh+Pr333/N4MGDTZkyZUxQUJCJiIgwu3btcngsvfXWW6ZGjRrG09PTSLI7h505Ty9fvmxGjx5typYtaywWi106ZXbcnzp1yi6GgQMHmsDAQIdp1KBBA7tlKSkp5qWXXjINGjQwvr6+pmTJkiY8PNxER0dnyM+ulp3z/48//jDt2rUzfn5+plKlSub5558377zzToY85qeffjItWrQw/v7+pmLFiuaJJ54wK1euzJCWCQkJ5p577jGhoaFGkl0czu5TZueqo3w2s+POmndf6cCBA0aSmT59ut3y/fv3mwEDBpiwsDDj7e1tKlWqZG6//XazdOnSDP979XF15swZc//995vg4GATEhJi7r//frNt2zYjycyfP9+23j///GPL40NCQkzfvn3NsWPHMhw7xmSd1y9btsy0bt3aBAYGmsDAQFO3bl0zcuRIs3v37mt+B9Z9uDKu7ByTxjhOb2fz6djYWOPl5WUWLVpk9/+SMn05yjs+/fRT07RpU+Pr62uuu+4688wzz9h9jjXOzLZ59blhPa4cva7+vp3N761p7czn9+7d2/j7+5t///33mtvNar+sx8m///5r7rvvPlOrVi0TEBBgfH19TYMGDcyUKVMypFN+7ZM1D3T0uvJ4P3/+vJFk+vfvf83PX7duXbaOkw8//NA0adLE+Pr6mvLly5tRo0aZ+Ph4u3W+/PJLI8nMnTs3y8/et2+fGTBggKlRo4bx9/c3fn5+pkGDBiYqKsokJCRkWH/Tpk2ma9eutjyldu3aZvLkyebSpUt26507d874+PiYt99+2255dtLlatk5z6++5udluSSz/Nbq888/N/Xr1zdeXl528Q4cODDD8XT+/Hnz6KOPmooVKxpvb29z/fXXm+nTp5u0tDS79Rzl+8Y4Ll9mJavYHeXZ77//vqlRo4bx8fExTZs2NStXrsywH5lt03pcL1myxG65NV/asmWL3X50797drFy50jRu3Nj4+vqaunXrZvhfY/LmO8osXZxNy7Nnz5ohQ4aY0qVLm4CAANOuXTu7/bHKTh54NWfTJCkpyTz22GOmQoUKxt/f37Rq1cps3LgxQxk1s+8jL7bh6Ds1JmOZce3atebOO+80FStWND4+PqZixYrm7rvvNnv27LH7v9yWqZzh6Hj//vvvTXh4uPHx8TE1atQwc+fOzZCXREZGmhIlSpiDBw/a/e/nn39uJJmXXnrpmp/rbN3h4sWLZty4cSYsLMz4+vqam266yaxYsSLDeo899pixWCzmr7/+cmq7V9q5c6fp1KmTCQoKMmXKlDH/93//Z37//fcMea2jepSj/Gfbtm2mTZs2tnLM1KlTzaxZs4wkc+LECbv/daZu5eyxZZXZNWHevHkmPDzc+Pv7mxIlSphGjRqZJ554whw7dizbMRmTdd0rK5nF7age8MUXX5jGjRsbPz8/U61aNfPSSy+Zd9991231BUesecLV55KznGnnMMa5OkJm5XtH197MrtPGpB/DkZGRtja3qlWrmn79+pm1a9fa1snse3SGNc0+/PBDM2HCBFOuXDnj7+9vunfvbg4dOpRh/f/973+mUqVKxtfX17Rq1cr88ssvDo/JzPYpq/prbGysrb3Bx8fHNGrUyC4tjMl+ueFqucmfMos9q+uZ9b0rz8nc5HPOcKa9c+vWrSYiIsIEBQWZgIAA06FDB7Nhwwa7dTLL7xztU2pqqomOjrZdt9u3b2/+/PPPDPmyo//NTn3aGGPWrFljWrVqZfz9/U1wcLC54447zM6dO+3WyU7e5kh+t/G6ug3mWi5cuGCefvppWztkWFiY6dOnj9m/f7/deq68djnTbpjZNdYZ1rT+/vvvzbBhw0zJkiVNUFCQuffee82ZM2fs1k1NTTXjx483ZcqUMQEBASYiIsLs27cvW22hJ06cMN27dzclSpTIUPbav3+/6dOnj+2cvfnmm81XX31lt93M8pnMzpOr5aYO4Oz+ZyfPyM51w5GBAwc6dS5n1f6U1Wc88cQTxtPTM8ttZ8ViTM6eqPftt9+qY8eOGjZsmJ566inb/MMFzTvvvKOhQ4fqyJEjOX54ZnFXuXJlRURE2KaGKgx27typBg0a6KuvvsqXaR0BoCgZMmSI9uzZox9//NHdoWRbfuX35cuX14ABAzR9+vQ826az3H0NW758uW6//Xb9/vvvatSokcs//4knntCHH36offv25enUes6aOXOmpk2bpv3799s9G8Hd6QK4Um7ywGrVqqlhw4b66quv8iEyFCU333yzqlatqiVLlrg7FIceeeQRvfnmm0pISMj0URkAiqaCnj8BQH5wZztIYXL27FkdPXpU9913n86dO5fjZ5nneJxjmzZt1KpVK9tcpjkZxuwKx48fl8ViyfShvMjapUuXdObMmTx/eHp+W7dunVq2bEmnHAA4ISoqSlu2bMm35y/lp/zI73fs2KGLFy869bDf/ODua9i6devUv39/t3U+rVu3Ts8++6xbOuUuXbqkGTNm6JlnnsnwwHJ3pwvgKu7OA1E8xMfH6/fff9ekSZPcHYqk9OcAXunMmTNatGiRWrduTaccUMwUtPwJAFyBOoDzbrjhBjVu3Fg7duzQ448/nuPt5HjEnNW+fft09OhRVa5cOc/n8s+N2NhYLV26VFOnTlXVqlULZWOju61cuVIfffSRFixYoFWrVtk9TwhFy4kTJ7J839/fXyEhIS6KBgAAFBepqanXfDh7UFCQgoKCXBQRcosRc9nHeeB+TZs2Vfv27VWvXj3FxsbqnXfe0bFjx7R27Vq7Z7AWNQkJCUpISMhynbJly9I5WYSlpKTo7NmzWa4TEhKS4YYlFExxcXEZbjS4WlhYmIuiQWFQXPOAixcvKi4uLst1SpUqJR8fHxdFhMJkw4YNslgsqlu3rkqWLJnj7XjlNpBatWqpVq1aud1Mnvvrr7/0+OOP6+abb9Zbb73l7nAKpRdffFH79u3T5MmT6ZQr4ipUqJDl+wMHDtSCBQtcEwwAACg2jhw5kunDuq2ioqI0ceJE1wQEuAHngft169ZNS5cu1bx582SxWHTDDTfonXfeKdKdcpL08ssvKzo6Ost1Dhw4oGrVqrkmILjchg0b1KFDhyzXmT9/vgYNGuSagJArDz/8sBYuXJjlOrkcn4EiprjmAR9//LEGDx6c5Trr1q1T+/btXRMQCpVbbrklT7aT6xFzAAq/NWvWZPl+xYoVVb9+fRdFAwAAioukpCStX78+y3Vq1KhRoGbmAPIa5wHc5e+//9bff/+d5TqtW7eWn5+fiyKCq/3777/69ddfs1ynQYMG17yZFwXDzp07dezYsSzX6dSpk4uiQWFQXPOA48ePa8eOHVmuEx4enqvRUMC10DEHAAAAAAAAAAAAuICHuwMAAAAAAAAAAAAAioNcP2MOAICcSktL07Fjx1SiRAlZLBZ3hwMAAAAAKOKMMTp//rwqVqwoDw/GLAAAXI+OOQCA2xw7dkyVK1d2dxgAAAAAgGLmyJEjuu6669wdBgCgGKJjDgDgNiVKlJCUXiEKDg52czQAUPAlJiaqYsWKktJvbggMDHRzRAAAAIVLfHy8KleubKuPAgDganTMAQDcxjp9ZXBwMB1zAOAET09P2+/BwcF0zAEAAOQQj1MAALgLHXMAAABAIRIQEODuEAAAAAAAQA7RMQcAAAAUEoGBgUpMTHR3GAAAAAAAIIc83B0AAAAAAAAAAAAAUBzQMQcAAAAAAAAAAAC4AB1zAAAAQCGRlJSk7t27q3v37kpKSnJ3OAAAAAAAIJt4xhwAAABQSKSmpmr58uW23wEAAAAAQOHCiDkAALIrJkZq0kTy90//GRPj7ogAAACA4omyOQAAKGTomAMAIDtiYqTevaXt26WkpPSfvXvTAAAAAAC4GmVzAABQCNExBwBAdkRHSxaLZEz638ak/z1pknvjAgAAAIobyuYAAKAQomMOAOBQtWrVZLFYMrxGjhwpSUpKStLIkSNVunRpBQUFqXfv3oqNjXVz1C6wZ89/FX8rY6Tdu90TDwAAAFBcUTYHAACFEB1zAACHtmzZouPHj9teq1evliT17dtXkvToo4/qyy+/1JIlS/T999/r2LFjioyMdGfIrlG7dvpduFeyWKQ6ddwTDwAAAFBcUTYHAACFEB1zAACHypYtq7CwMNvrq6++Us2aNdWuXTvFxcXpnXfe0YwZM3TrrbcqPDxc8+fP14YNG/Tzzz+7O/T8FRX13xQ50n9T50RFuTcuAAAAoLihbA4AAAohOuYAANeUkpKi999/Xw888IAsFot+/fVXXbp0SZ06dbKtU7duXVWpUkUbN27MdDvJycmKj4+3exU6kZHSsmVS48aSn1/6z5gYqVcvd0cGoBgIDAyUMUbGGAUGBro7HAAA3IuyOQAAKIS83B0AAKDg++yzz3Tu3DkNGjRIknTixAn5+PgoNDTUbr3y5cvrxIkTmW5n6tSpio6OzsdIXSQyMv0FAAAAwL0omwMAgEKGEXMAgGt655131LVrV1WsWDFX25kwYYLi4uJsryNHjuRRhAAAAAAAAABQ8DFiDgCQpUOHDmnNmjWKiYmxLQsLC1NKSorOnTtnN2ouNjZWYWFhmW7L19dXvr6++RkuABRpSUlJuv/++yVJixYtkp+fn5sjAgAAAAAA2cGIOQBAlubPn69y5cqpe/futmXh4eHy9vbW2rVrbct2796tw4cPq2XLlu4IEwCKhdTUVC1dulRLly5Vamqqu8MBAAAAAADZxIg5AECm0tLSNH/+fA0cOFBeXv9dMkJCQjRkyBCNHTtWpUqVUnBwsEaPHq2WLVuqRYsWbowYAAAAAAAAAAouOuYAAJlas2aNDh8+rAceeCDDe6+88oo8PDzUu3dvJScnKyIiQrNnz3ZDlAAAAAAAAABQOFiMMcbdQQAAiqf4+HiFhIQoLi5OwcHB7g4HAAq8xMREBQUFSZISEhIUGBjo5ogAAAAKF+qhAAB34xlzAAAAAAAAAAAAgAvQMQcAAAAAAAAAAAC4AB1zAAAAAAAAAAAAgAt4uTsAAAAAAM4JCAhQQkKC7XcAAAAAAFC40DEHAAAAFBIWi0WBgYHuDgMAAAAAAOQQU1kCAAAAAAAAAAAALkDHHAAAAFBIJCcna9CgQRo0aJCSk5PdHQ4AAAAAAMgmizHGuDsIAEDxFB8fr5CQEMXFxSk4ONjd4QBAgZeYmKigoCBJUkJCAtNaAgAAZBP1UACAuzFiDgAAAAAAAAAAAHABOuYAAAAAAAAAAAAAF6BjDgAAAAAAAAAAAHABOuYAAAAAAAAAAAAAF6BjDgAAAAAAAAAAAHABOuYAAAAAAAAAAAAAF/BydwAAAAAAnBMQEKCTJ0/afgcAAAAAAIULHXMAAABAIWGxWFS2bFl3hwEAAAAAAHKIqSwBAAAAAAAAAAAAF6BjDgAAACgkkpOTNXLkSI0cOVLJycnuDgcAAAAAAGSTxRhj3B0EAKB4io+PV0hIiOLi4hQcHOzucACgwEtMTFRQUJAkKSEhQYGBgW6OCAAAoHChHgoAcDdGzAEAAAAAAAAAAAAuQMccAAAAAAAAAAAA4AJ0zAEAAAAAAAAAAAAuQMccAAAAAAAAAAAA4AJ0zAEAAAAAAAAAAAAuQMccAAAAAAAAAAAA4AJe7g4AAAAAgHP8/f114MAB2+8AAAAAAKBwYcQcACBTR48e1X333afSpUvL399fjRo10i+//GJ73xij5557ThUqVJC/v786deqkvXv3ujFiACjaPDw8VK1aNVWrVk0eHhTlAQAAAAAobKjNAwAc+vfff9WqVSt5e3vrm2++0c6dO/W///1PJUuWtK0zbdo0zZo1S3PnztWmTZsUGBioiIgIJSUluTFyAAAAAAAAACiYLMYY4+4gAAAFz5NPPqmffvpJP/74o8P3jTGqWLGiHnvsMY0bN06SFBcXp/Lly2vBggXq379/hv9JTk5WcnKy7e/4+HhVrlxZcXFxCg4Ozp8dAYAiJCUlRU8//bQkafLkyfLx8XFzRAAAAIVLfHy8QkJCqIcCANyGEXMAAIe++OIL3Xjjjerbt6/KlSunZs2a6a233rK9f+DAAZ04cUKdOnWyLQsJCVHz5s21ceNGh9ucOnWqQkJCbK/KlSvn+34AQFFy6dIlvfzyy3r55Zd16dIld4cDAAAAAACyiY45AIBDf//9t+bMmaPrr79eK1eu1EMPPaQxY8Zo4cKFkqQTJ05IksqXL2/3f+XLl7e9d7UJEyYoLi7O9jpy5Ej+7gQAAAAAAAAAFCBe7g4AAFAwpaWl6cYbb9SUKVMkSc2aNdOff/6puXPnauDAgTnapq+vr3x9ffMyTAAAAAAAAAAoNBgxBwBwqEKFCqpfv77dsnr16unw4cOSpLCwMElSbGys3TqxsbG29wAAAAAAAAAA/6FjDgDgUKtWrbR79267ZXv27FHVqlUlSdWrV1dYWJjWrl1rez8+Pl6bNm1Sy5YtXRorAAAAAAAAABQGTGUJAHDo0Ucf1S233KIpU6aoX79+2rx5s+bNm6d58+ZJkiwWix555BG98MILuv7661W9enU9++yzqlixonr27One4AEAAAAAAACgAKJjDgDg0E033aRPP/1UEyZM0KRJk1S9enXNnDlT9957r22dJ554QomJiRo2bJjOnTun1q1ba8WKFfLz83Nj5AAAAAAAAABQMFmMMcbdQQAAiqf4+HiFhIQoLi5OwcHB7g4HAAq8tLQ0/fXXX5LSn/vp4cHM9AAAANlBPRQA4G6MmAMAAAAKCQ8PDzVo0MDdYQAAAAAAgBziFlsAAAAAAAAAAADABRgxBwAAABQSKSkpmjJliiTpqaeeko+Pj5sjAgAAAAAA2cEz5gAAbsPc/gCQPYmJiQoKCpIkJSQkKDAw0M0RAQAAFC7UQwEA7sZUlgAAAAAAAAAAAIAL0DEHAAAAAAAAAAAAuAAdcwAAAAAAAAAAAIAL0DEHAAAAAAAAAAAAuAAdcwAAAAAAAAAAAIAL0DEHAAAAAAAAAAAAuICXuwMAAAAA4Bw/Pz9t3rzZ9jsAAAAAAChc6JgDAAAACglPT0/ddNNN7g4DAAAAAADkEFNZAgAAAAAAAAAAAC7AiDkAAACgkEhJSdGrr74qSXr44Yfl4+Pj5ogAAAAAAEB2WIwxxt1BAACKp/j4eIWEhCguLk7BwcHuDgcACrzExEQFBQVJkhISEhQYGOjmiAAAAAoX6qEAAHdjKksAAAAAAAAAAADABeiYAwAAAAAAAAAAAFyAjjkAAAAAAAAAAADABeiYAwAAAAAAAAAAAFyAjjkAAAAAAAAAAADABeiYAwAAAAAAAAAAAFzAy90BAAAAAHCOn5+f1q1bZ/sdAAAAAAAULnTMAQAAAIWEp6en2rdv7+4wAAAAAABADjGVJQAAAAAAAAAAAOACjJgDAAAAColLly5p3rx5kqRhw4bJ29vbzREBAAAAAIDsYMQcAMChiRMnymKx2L3q1q1rez8pKUkjR45U6dKlFRQUpN69eys2NtaNEQNA0ZeSkqJRo0Zp1KhRSklJcXc4AAAAAAAgm+iYAwBkqkGDBjp+/LjttX79ett7jz76qL788kstWbJE33//vY4dO6bIyEg3RgsAAAAAAAAABRtTWQIAMuXl5aWwsLAMy+Pi4vTOO+9o8eLFuvXWWyVJ8+fPV7169fTzzz+rRYsWrg4VAAAAAAAAAAo8RswBADK1d+9eVaxYUTVq1NC9996rw4cPS5J+/fVXXbp0SZ06dbKtW7duXVWpUkUbN27MdHvJycmKj4+3ewEAAAAAAABAcUHHHADAoebNm2vBggVasWKF5syZowMHDqhNmzY6f/68Tpw4IR8fH4WGhtr9T/ny5XXixIlMtzl16lSFhITYXpUrV87nvQAAAAAAAACAgoOpLAEADnXt2tX2e+PGjdW8eXNVrVpVn3zyifz9/XO0zQkTJmjs2LG2v+Pj4+mcAwAAAAAAAFBsMGIOAOCU0NBQ1a5dW/v27VNYWJhSUlJ07tw5u3ViY2MdPpPOytfXV8HBwXYvAAAAAAAAACgu6JgDADglISFB+/fvV4UKFRQeHi5vb2+tXbvW9v7u3bt1+PBhtWzZ0o1RAkDR5uvrq6+++kpfffWVfH193R0OAAAAAADIJqayBAA4NG7cON1xxx2qWrWqjh07pqioKHl6euruu+9WSEiIhgwZorFjx6pUqVIKDg7W6NGj1bJlS7Vo0cLdoQNAkeXl5aXu3bu7OwwAAAAAAJBDdMwBABz6559/dPfdd+vMmTMqW7asWrdurZ9//llly5aVJL3yyivy8PBQ7969lZycrIiICM2ePdvNUQMAAAAAAABAwWUxxhh3BwEAKJ7i4+MVEhKiuLg4njcHAE64dOmSPvjgA0nSvffeK29vbzdHBAAAULhQDwUAuBsdcwAAt6FCBADZk5iYqKCgIEnpz/4MDAx0c0QAAACFC/VQAIC7ebg7AAAAAAAAAAAAAKA4oGMOAAAAAAAAAAAAcAE65gAAAAAAAAAAAAAXoGMOAAAAAAAAAAAAcAE65gAAAAAAAAAAAAAXoGMOAAAAAAAAAAAAcAEvdwcAAAAAwDm+vr765JNPbL8DAAAAAIDChRFzAAAAcI+YGKlJE8nfP/1nTIy7IyrwvLy81LdvX/Xt21deXtxjBwAAAABAYUPHHAAAAFwvJkbq3Vvavl1KSkr/2bs3nXMAAAAAAKBIo2MOAAAArhcdLVkskjHpfxuT/vekSe6Nq4C7fPmylixZoiVLlujy5cvuDgcAAAAAAGQT898AAADA9fbs+a9TzsoYafdu98RTSCQnJ6tfv36SpISEBKazBAAAAACgkGHEHAAAAFyvdu30EXJXslikOnXcEw8AAAAAAIAL0DEHAAAA14uK+m/6Sum/aS2jotwbFwAAAAAAQD6iYw4AAACuFxkpLVsmNW4s+fml/4yJkXr1cndkAAAAAAAA+YaHUgAAAMA9IiPTXwAAAAAAAMUEI+YAAAAAAAAAAAAAF6BjDgAAAAAAAAAAAHABprIEgCImOTlZmzZt0qFDh3ThwgWVLVtWzZo1U/Xq1d0dGgAgl3x8fDR//nzb7wAAAAAAoHChYw4AioiffvpJr776qr788ktdunRJISEh8vf319mzZ5WcnKwaNWpo2LBhevDBB1WiRAl3hwsAyAFvb28NGjTI3WEAAAAAAIAcYipLACgCevToobvuukvVqlXTqlWrdP78eZ05c0b//POPLly4oL179+qZZ57R2rVrVbt2ba1evdrdIQMAAAAAAABAscOIOQAoArp3765ly5bJ29vb4fs1atRQjRo1NHDgQO3cuVPHjx93cYQAgLxw+fJlrVy5UpIUEREhLy+K8wAAAAAAFCYWY4xxdxAAgOIpPj5eISEhiouLU3BwsLvDAYACLzExUUFBQZKkhIQEBQYGujkiAACAwoV6KADA3ZjKEgCKoH/++UdpaWnuDgMAAAAAAAAAcAU65gCgCGrcuLH++ecfSdKHH36oxMREN0cEAAAAAAAAAKBjDgCKiKFDh2rBggXas2ePjDGyWCySpOHDhys2NjbX23/xxRdlsVj0yCOP2JYlJSVp5MiRKl26tIKCgtS7d+88+SwAAAAAAAAAKIromAOAIqJmzZr65JNP1Lx5c8XHx+vRRx/V4sWLlZaWZuuky6ktW7bozTffVOPGje2WP/roo/ryyy+1ZMkSff/99zp27JgiIyNz9VkAAAAAAAAAUFTRMQcARcSECRO0fPlynTlzRiVKlFCdOnW0YMECXbx4UV27dtVDDz2kDz/8MNvbTUhI0L333qu33npLJUuWtC2Pi4vTO++8oxkzZujWW29VeHi45s+frw0bNujnn3/Oy10DAAAAAAAAgCKBjjkAKCKeeeYZrVixQufPn5fFYtHw4cO1atUqBQQE6Omnn1bFihX17rvvZnu7I0eOVPfu3dWpUye75b/++qsuXbpkt7xu3bqqUqWKNm7c6HBbycnJio+Pt3sBAAAAAAAAQHHh5e4AAAB549y5c3r66af1559/6vLly5o8ebL69esnSWrdurXuv//+bG/zo48+0tatW7Vly5YM7504cUI+Pj4KDQ21W16+fHmdOHHC4famTp2q6OjobMcBAEjn4+Oj119/3fY7AAAAAAAoXOiYA4AiwtpQm5iYqIoVKyotLU1jxozRhQsXNGDAAHXq1Ent2rVT+/btndrekSNH9PDDD2v16tXy8/PLkxgnTJigsWPH2v6Oj49X5cqV82TbAFAceHt7a+TIke4OAwAAAAAA5BBTWQJAERMYGCgPDw89++yz2rFjhwICAtSrVy+dOHFCI0aMcHo7v/76q06ePKkbbrhBXl5e8vLy0vfff69Zs2bJy8tL5cuXV0pKis6dO2f3f7GxsQoLC3O4TV9fXwUHB9u9AAAAAAAAAKC4YMQcABRB99xzj4KCgmx/9+zZUzVq1MjWNjp27Kjt27fbLRs8eLDq1q2r8ePHq3LlyvL29tbatWvVu3dvSdLu3bt1+PBhtWzZMvc7AQDIIDU1VT/++KMkqU2bNvL09HRzRAAAAAAAIDvomAOAIuiNN96w/f7mm2+qfPny2d5GiRIl1LBhQ7tlgYGBKl26tG35kCFDNHbsWJUqVUrBwcEaPXq0WrZsqRYtWuRuBwAADiUlJalDhw6SpISEBAUGBro5IgAAAAAAkB10zAFAEXfPPffk27ZfeeUVeXh4qHfv3kpOTlZERIRmz56db58HAAAAAAAAAIWZxRhj3B0EACB3Dh8+rCpVqji9/tGjR1WpUqV8jMg58fHxCgkJUVxcHM+bAwAnJCYm2qYqZsQcAABA9lEPBQC4m4e7AwAA5N5NN92k4cOHa8uWLZmuExcXp7feeksNGzbUsmXLXBgdAAAAAAAAAEBiKksAKBJ27typyZMn67bbbpOfn5/Cw8NVsWJF+fn56d9//9XOnTu1Y8cO3XDDDZo2bZq6devm7pABAAAAAAAAoNhhKksAKEIuXryor7/+WuvXr9ehQ4d08eJFlSlTRs2aNVNERIQaNmzo7hDtMIUIAGQPU1kCAADkDvVQAIC70TEHAHAbKkQAkD10zAEAAOQO9VAAgLsxlSUAAABQSHh7e2vatGm23wEAAAAAQOHCiDkAgNtwpyIAAAAAwJWohwIA3M3D3QEAAAAAAAAAAAAAxQFTWQIAAACFRGpqqrZu3SpJuuGGG+Tp6enmiAAAAAAAQHbQMQcAAAAUEklJSbr55pslSQkJCQoMDHRzRAAAAAAAIDvomAOAIuCLL75wet0ePXrkYyQAAAAAAAAAgMzQMQcARUDPnj2dWs9isSg1NTV/gwEAAAAAAAAAOETHHAAUAWlpae4OAQAAAAAAAABwDR7uDgAAAAAAAAAAAAAoDhgxBwBFUGJior7//nsdPnxYKSkpdu+NGTPGTVEBAAAAAAAAQPFGxxwAFDHbtm1Tt27ddOHCBSUmJqpUqVI6ffq0AgICVK5cOTrmAAAAAAAAAMBN6JgDgCLm0Ucf1R133KG5c+cqJCREP//8s7y9vXXffffp4Ycfdnd4AIBc8Pb2VlRUlO13AAAAAABQuFiMMcbdQQAA8k5oaKg2bdqkOnXqKDQ0VBs3blS9evW0adMmDRw4ULt27XJ3iDbx8fEKCQlRXFycgoOD3R0OAAAAAKCIox4KAHA3D3cHAADIW97e3vLwSM/ey5Urp8OHD0uSQkJCdOTIEXeGBgAAAAAAAADFGlNZAkAR06xZM23ZskXXX3+92rVrp+eee06nT5/WokWL1LBhQ3eHBwDIhbS0NP3111+SpHr16tluxAAAAAAAAIUDNXkAKGKmTJmiChUqSJImT56skiVL6qGHHtKpU6c0b948N0cHoMiKiZGaNJH8/dN/xsS4O6Ii6eLFi2rYsKEaNmyoixcvujscAAAAAACQTTxjDgDgNsztDxQRMTFS796SxSIZ89/PZcukyEh3R1ekJCYmKigoSJKUkJCgwMBAN0cEAABQuFAPBQC4GyPmAAAAkDvR0f91xkn/dc5NmuTeuAAAAAAAAAoYnjEHAEXADTfcoLVr16pkyZJq1qyZLBZLputu3brVhZEBKBb27PmvU87KGGn3bvfEAwAAAAAAUEDRMQcARcCdd94pX19fSVLPnj3dGwyA4qd2bWn7dvvOOYtFqlPHfTEBAAAAAAAUQHTMAUAREBUVJUlKTU1Vhw4d1LhxY4WGhro3KADFR1SU42fM/f+8CQAAAAAAAOl4xhwAFCGenp7q3Lmz/v33X3eHAqA4iYyUli2TGjeW/PzSf8bESL16uTsyAAAAAACAAoWOOQAoYho2bKi///4719uZM2eOGjdurODgYAUHB6tly5b65ptvbO8nJSVp5MiRKl26tIKCgtS7d2/Fxsbm+nMBFFKRkdJvv0kXL6b/pFMuX3h7e2vcuHEaN26cvL293R0OAAAAAADIJosxVz4MBABQ2K1YsUITJkzQ888/r/DwcAUGBtq9Hxwc7NR2vvzyS3l6eur666+XMUYLFy7U9OnTtW3bNjVo0EAPPfSQvv76ay1YsEAhISEaNWqUPDw89NNPPzkda3x8vEJCQhQXF+d0XAAAAAAA5BT1UACAu9ExBwBFxKRJk/TYY4+pRIkStmUWi8X2uzFGFotFqampOf6MUqVKafr06erTp4/Kli2rxYsXq0+fPpKkXbt2qV69etq4caNatGjh1PaoEAEAAAAAXIl6KADA3bzcHQAAIG9ER0frwQcf1Lp16/J826mpqVqyZIkSExPVsmVL/frrr7p06ZI6depkW6du3bqqUqVKlh1zycnJSk5Otv0dHx+f57ECQFGWlpamw4cPS5KqVKkiDw9mpgcAAAAAoDChYw4AigjrAOh27drl2Ta3b9+uli1bKikpSUFBQfr0009Vv359/fbbb/Lx8VFoaKjd+uXLl9eJEycy3d7UqVMVHR2dZ/EBQHFz8eJFVa9eXZKUkJCQYbpiAAAAAABQsHGLLQAUIVdOXZkX6tSpo99++02bNm3SQw89pIEDB2rnzp053t6ECRMUFxdnex05ciQPowUAAAAAAACAgo0RcwBQhNSuXfuanXNnz551ens+Pj6qVauWJCk8PFxbtmzRq6++qrvuukspKSk6d+6c3ai52NhYhYWFZbo9X19f+fr6Ov35AAAAAAAAAFCU0DEHAEVIdHS0QkJC8m37aWlpSk5OVnh4uLy9vbV27Vr17t1bkrR7924dPnxYLVu2zLfPBwAAAAAAAIDCjI45AChC+vfvr3LlyuXJtiZMmKCuXbuqSpUqOn/+vBYvXqzvvvtOK1euVEhIiIYMGaKxY8eqVKlSCg4O1ujRo9WyZUu1aNEiTz4fAAAAAAAAAIoaOuYAoIjI6+fLnTx5UgMGDNDx48cVEhKixo0ba+XKlbrtttskSa+88oo8PDzUu3dvJScnKyIiQrNnz87TGAAAAAAAAACgKLEYY4y7gwAA5J6Hh4dOnDiRZyPmXCE+Pl4hISGKi4tTcHCwu8MBgAIvMTFRQUFBkqSEhAQFBga6OSIAAIDChXooAMDdGDEHAEVEWlqau0MAAOQzLy8vjRgxwvY7AAAAAAAoXKjNAwAAAIWEr6+v3njjDXeHAQAAAAAAcsjD3QEAAAAAAAAAAAAAxQEj5gAAAIBCwhij06dPS5LKlCkji8Xi5ogAAAAAAEB2MGIOAFB8xMRITZpI/v7pP2Ni3B0R4H6cF4XKhQsXVK5cOZUrV04XLlxwdzgAAAAAACCb6JgDABQPMTFS797S9u1SUlL6z9696YRA8cZ5AQAAAAAA4FJ0zAEAiofoaMlikYxJ/9uY9L8nTXJvXIA7cV4AAAAAAAC4FB1zAIDiYc+e/zofrIyRdu92TzxAQcB5AQAAAAAA4FJ0zAEAiofatdNHAl3JYpHq1HFPPEBBwHkBAAAAAADgUnTMAQCKh6io/6bpk/6bvi8qyr1xAe7EeQEAAAAAAOBSdMwBAIqHyEhp2TKpcWPJzy/9Z0yM1KuXuyMD3IfzAgAAAAAAwKW83B0AAAD64gvpvvvy/3MiI9NfAP7DeVGoeHl5aeDAgbbfAaDAiomRoqPTn2dau3b6aGyuNwAAAIAsxhjj7iAAAMVTfHy8QkJCFCcpeNkyGmsAAACKgpgYqXfv/6ZItv6kvAegALDVQ+PiFBwc7O5wAADFEFNZAgAKhkmT3B0BAAAA8kJ09H+dcdJ/nXOU9wAAAACmsgQAFBC7d7s7AgAo8IwxunDhgiQpICBAFovFzREBgAN79vzXKWdlDOU9AAAAQIyYAwAUFHXquDsCAIVZTIzUpInk75/+MybG3RHliwsXLigoKEhBQUG2DjoAKHBq104fIXcli4XyHoCcKyZlPQBA8UDHHACgYIiKcncEAAor67OMtm+XkpLSf/buTYMNALhLVNR/01dK/01rSXkPQE5Q1gMAFDF0zAEA3O/996VevdwdBYDCimcZAUDBEhkpLVsmNW4s+fml/4yJobwHIGco6wEAihiLMVdP/A4AgGvEx8crJCREcXFxCg4Odnc4AAorf//0u6ev5ucnXbzo+njyUWJiooKCgiRJCQkJCgwMdHNEAAAA+SyPy3rUQwEA7saIOQAAABRuPMsIAACg6KKsBwAoYuiYAwAAQOHGs4wAAACKLsp6AIAiho45AAAAFG48ywgAAKDooqwHAChivNwdAAAAAJBrkZHpryLO09NTffr0sf0OAABQLBSTsh4AoHigYw4AAAAoJPz8/LRkyRJ3hwEAAAAAAHKIqSwBAAAAAAAAAAAAF6BjDgDg0NSpU3XTTTepRIkSKleunHr27Kndu3fbrZOUlKSRI0eqdOnSCgoKUu/evRUbG+umiAEAAAAAAACgYKNjDgDg0Pfff6+RI0fq559/1urVq3Xp0iV17txZiYmJtnUeffRRffnll1qyZIm+//57HTt2TJHM+w8A+SYxMVEWi0UWi8UuPwYAAAAAAIWDxRhj3B0EAKDgO3XqlMqVK6fvv/9ebdu2VVxcnMqWLavFixerT58+kqRdu3apXr162rhxo1q0aHHNbcbHxyskJERxcXEKDg7O710AgEIvMTFRQUFBkqSEhAQFBga6OSIAAIDChXooAMDdGDEHAHBKXFycJKlUqVKSpF9//VWXLl1Sp06dbOvUrVtXVapU0caNGx1uIzk5WfHx8XYvAAAAAAAAACgu6JgDAFxTWlqaHnnkEbVq1UoNGzaUJJ04cUI+Pj4KDQ21W7d8+fI6ceKEw+1MnTpVISEhtlflypXzO3QAAAAAAAAAKDDomAMAXNPIkSP1559/6qOPPsrVdiZMmKC4uDjb68iRI3kUoZvExEhNmkj+/uk/Y2LcHREAAAAAAACAAszL3QEAAAq2UaNG6auvvtIPP/yg6667zrY8LCxMKSkpOnfunN2oudjYWIWFhTnclq+vr3x9ffM7ZNeIiZF695YsFskYafv29L+XLZMiI90dHQAAAAAAAIACiBFzAACHjDEaNWqUPv30U3377beqXr263fvh4eHy9vbW2rVrbct2796tw4cPq2XLlq4O1/Wio//rlJPSf1os0qRJ7o0LAAAAAAAAQIHFiDkAgEMjR47U4sWL9fnnn6tEiRK258aFhITI399fISEhGjJkiMaOHatSpUopODhYo0ePVsuWLdWiRQs3R+8Ce/b81ylnZYy0e7d74gFQLHh6eqpbt2623wHkk5iY9Jtw9uyRateWoqIYEQ8AAAAgT1iMubpVEQAAyWKxOFw+f/58DRo0SJKUlJSkxx57TB9++KGSk5MVERGh2bNnZzqV5dXi4+MVEhKiuLg4BQcH51XortGkSfr0lVdeRi0WqXFj6bff3BYWAADIpaunq7b+ZLpqACgSCnU9FABQJNAxBwBwm0JdIcqs0S4mRurVy93RAQCAnOLmGwAo0gp1PRQAUCTwjDkAAHIiMjL9zvnGjSU/v/SfdMoBAFD4MV01AAAAgHzEM+YAAMipyEimtALgUomJiSpXrpwk6eTJkwoMDHRzREARVLu24xFzdeq4LyYAAAAARQYj5gAAAIBC5MKFC7pw4YK7wwCKrqio/6aplv6brjoqyr1xAQAAACgS6JgDAAAAAMCK6aoBAAAA5COmsgQAAAAA4EpMVw0AAAAgnzBiDgAAAAAAAAAAAHABOuYAAAAAAAAAAAAAF6BjDgAAAAAAAAAAAHABnjEHAAAAFBIeHh5q166d7XcAAAAAAFC40DEHAAAAFBL+/v767rvv3B0GAAAAAADIIW6zBQAAAAAAAAAAAFyAjjkAAAAAAAAAAADABeiYAwAAAAqJxMRElS1bVmXLllViYqK7wwEAAAAAANnEM+YAAACAQuT06dPuDgEAAAAAAOQQI+YAAAAAAAAAAAAAF6BjDgAAAAAAAAAAAHABOuYAAAAAAAAAAAAAF6BjDgAAAAAAAAAAAHABOuYAAAAAAAAAAAAAF/BydwAAAAAAnOPh4aEbb7zR9jsAAAAAAChc6JgDAAAACgl/f39t2bLF3WEAAAAAAIAc4jZbAAAAAAAAAAAAwAXomAMAAAAAAAAAAABcgI45AAAAoJC4cOGCqlWrpmrVqunChQvuDgcAAAAAAGQTz5gDAAAACgljjA4dOmT7HQAAAAAAFC6MmAMAZOqHH37QHXfcoYoVK8piseizzz6ze98Yo+eee04VKlSQv7+/OnXqpL1797onWAAAAAAAAAAo4OiYAwBkKjExUU2aNNEbb7zh8P1p06Zp1qxZmjt3rjZt2qTAwEBFREQoKSkp/4KKiZGaNJH8/dN/xsTk32cBAIofrjMAULxxHQAAAPnMYpgDBwDgBIvFok8//VQ9e/aUlD5armLFinrsscc0btw4SVJcXJzKly+vBQsWqH///tfcZnx8vEJCQhQXF6fg4OBrBxETI/XuLVkskjH//Vy2TIqMzM3uAUChkJiYqKCgIElSQkKCAgMD3RxREcN1BgCKN64DxUK266EAAOQxRswBAHLkwIEDOnHihDp16mRbFhISoubNm2vjxo0O/yc5OVnx8fF2r2yJjv6vciz9V1meNCmnuwEAwH+4zgBA8cZ1AAAAuAAdcwCAHDlx4oQkqXz58nbLy5cvb3vvalOnTlVISIjtVbly5ex96J49/1WSrYyRdu/O3nYAAHCE6wwAFG9cBwAAgAvQMQcAcJkJEyYoLi7O9jpy5Ej2NlC7dvodq1eyWKQ6dfIuSAAowCwWi+rXr6/69evLcnV+iNzjOgMAxRvXAQAA4AJ0zAEAciQsLEySFBsba7c8NjbW9t7VfH19FRwcbPfKlqio/6aTkf6bZiYqKtvxA0BhFBAQoB07dmjHjh0KCAhwdzhFD9cZACjeuA4AAAAXoGMOAJAj1atXV1hYmNauXWtbFh8fr02bNqlly5b586GRkekPXm/cWPLzS/8ZEyP16pU/nwcAKF64zgBA8cZ1AAAAuIDFmKsnzwYAIF1CQoL27dsnSWrWrJlmzJihDh06qFSpUqpSpYpeeuklvfjii1q4cKGqV6+uZ599Vn/88Yd27twpPz+/a24/Pj5eISEhiouLy/7oOQAAAAAAsol6KADA3bzcHQAAoOD65Zdf1KFDB9vfY8eOlSQNHDhQCxYs0BNPPKHExEQNGzZM586dU+vWrbVixQqnOuUAANl34cIF3XTTTZKkLVu2MJ0lAAAAAACFDCPmAABuw52KAJA9iYmJCgoKkpQ+qjkwMNDNEQEAABQu1EMBAO7GM+YAAAAAAAAAAAAAF6BjDgAAAAAAAAAAAHABOuYAAAAAAAAAAAAAF6BjDgAAAAAAAAAAAHABOuYAAAAAAAAAAAAAF/BydwAAAAAAnGOxWFS1alXb7wAAAAAAoHChYw4AAAAoJAICAnTw4EF3hwEAAAAAAHKIqSwBAAAAAAAAAAAAF6BjDgAAAAAAAAAAAHABOuYAAACAQuLixYu66aabdNNNN+nixYvuDgcAAAAAAGQTz5gDAAAACom0tDT98ssvtt8BAAAAAEDhwog5AAAAAAAAAAAAwAXomAMAAAAAAAAAAABcgI45AAAAAAAAAAAAwAXomAMAAAAAAAAAAABcgI45AAAAAAAAAAAAwAW83B0AAAAAAOeVKVPG3SEAAAAAAIAcomMOAAAAKCQCAwN16tQpd4cBAAAAAAByiKksAQAAAAAAAAAAABegYw4AAAAAAAAAAABwATrmAAAAgELi4sWLat++vdq3b6+LFy+6OxwAAAAAAJBNPGMOAAAAKCTS0tL0/fff234HAAAAAACFCyPmAAAAAAAAAAAAABegYw4AAAAAAACFT0yM1KSJ5O+f/jMmxt0RFX6kKQAA+Y6OOQAAAAAAABQuMTFS797S9u1SUlL6z9696UjKDdIUAACXoGMOAAAAAAAAhUt0tGSxSMak/21M+t+TJrk3rsKMNAUAwCXomAMA5Nobb7yhatWqyc/PT82bN9fmzZvdHRIAAACAomzPnv86kKyMkXbvdk88RQFpCgCAS9AxBwDIlY8//lhjx45VVFSUtm7dqiZNmigiIkInT550d2gAUCQFBAQoICDA3WEAAOBetWunj+a6ksUi1anjnniKAtIUAACXoGMOAJArM2bM0P/93/9p8ODBql+/vubOnauAgAC9++677g4NAIqcwMBAJSYmKjExUYGBge4OBwAA94mK+m+qRem/KRijotwbV2FGmgIA4BJ0zAEAciwlJUW//vqrOnXqZFvm4eGhTp06aePGjRnWT05OVnx8vN0LAAAAALItMlJatkxq3Fjy80v/GRMj9erl7sgKL9IUAACX8HJ3AACAwuv06dNKTU1V+fLl7ZaXL19eu3btyrD+1KlTFR0d7arwAAAAABRlkZHpL+Qd0hQAgHzHiDkAgMtMmDBBcXFxtteRI0fcHRIAFCpJSUnq3r27unfvrqSkJHeHAwAAAAAAsokRcwCAHCtTpow8PT0VGxtrtzw2NlZhYWEZ1vf19ZWvr6+rwgOAIic1NVXLly+3/Q4AAAAAAAoXRswBAHLMx8dH4eHhWrt2rW1ZWlqa1q5dq5YtW7oxMgAAAAAAAAAoeBgxBwDIlbFjx2rgwIG68cYbdfPNN2vmzJlKTEzU4MGD3R0aAAAAAAAAABQodMwBAHLlrrvu0qlTp/Tcc8/pxIkTatq0qVasWKHy5cu7OzQAAAAAAAAAKFAsxhjj7iAAAMVTfHy8QkJCFBcXp+DgYHeHAwAFXmJiooKCgiRJCQkJCgwMdHNEAAAAhQv1UACAu/GMOQAAAAAAAAAAAMAFmMoSAOA21kHb8fHxbo4EAAqHxMRE2+/x8fFKTU11YzQAAACFj7X+ySRiAAB3oWMOAOA258+flyRVrlzZzZEAQOFTsWJFd4cAAABQaJ0/f14hISHuDgMAUAzxjDkAgNukpaXp2LFjKlGihCwWi1tiiI+PV+XKlXXkyBGeL4A8xbGF/MKxhfzCsYX8wrGF/MKxhZwwxuj8+fOqWLGiPDx4yg8AwPUYMQcAcBsPDw9dd9117g5DkhQcHExlHvmCYwv5hWML+YVjC/mFYwv5hWML2cVIOQCAO3FbCAAAAAAAAAAAAOACdMwBAAAAAAAAAAAALkDHHACgWPP19VVUVJR8fX3dHQqKGI4t5BeOLeQXji3kF44t5BeOLQAAUBhZjDHG3UEAAAAAAAAAAAAARR0j5gAAAAAAAAAAAAAXoGMOAAAAAAAAAAAAcAE65gAAAAAAAAAAAAAXoGMOAAAAAAAAAAAAcAE65gAAxdbkyZN1yy23KCAgQKGhoQ7XOXz4sLp3766AgACVK1dOjz/+uC5fvuzaQFHoVatWTRaLxe714osvujssFEJvvPGGqlWrJj8/PzVv3lybN292d0goAiZOnJghj6pbt667w0Ih9MMPP+iOO+5QxYoVZbFY9Nlnn9m9b4zRc889pwoVKsjf31+dOnXS3r173RMsCpVrHVuDBg3KkI916dLFPcECAABcAx1zAIBiKyUlRX379tVDDz3k8P3U1FR1795dKSkp2rBhgxYuXKgFCxboueeec3GkKAomTZqk48eP216jR492d0goZD7++GONHTtWUVFR2rp1q5o0aaKIiAidPHnS3aGhCGjQoIFdHrV+/Xp3h4RCKDExUU2aNNEbb7zh8P1p06Zp1qxZmjt3rjZt2qTAwEBFREQoKSnJxZGisLnWsSVJXbp0scvHPvzwQxdGCAAA4DwvdwcAAIC7REdHS5IWLFjg8P1Vq1Zp586dWrNmjcqXL6+mTZvq+eef1/jx4zVx4kT5+Pi4MFoUdiVKlFBYWJi7w0AhNmPGDP3f//2fBg8eLEmaO3euvv76a7377rt68skn3RwdCjsvLy/yKORa165d1bVrV4fvGWM0c+ZMPfPMM7rzzjslSe+9957Kly+vzz77TP3793dlqChksjq2rHx9fcnHAABAocCIOQAAMrFx40Y1atRI5cuXty2LiIhQfHy8duzY4cbIUBi9+OKLKl26tJo1a6bp06czJSqyJSUlRb/++qs6depkW+bh4aFOnTpp48aNbowMRcXevXtVsWJF1ahRQ/fee68OHz7s7pBQxBw4cEAnTpywy8dCQkLUvHlz8jHkie+++07lypVTnTp19NBDD+nMmTPuDgkAAMAhRswBAJCJEydO2HXKSbL9feLECXeEhEJqzJgxuuGGG1SqVClt2LBBEyZM0PHjxzVjxgx3h4ZC4vTp00pNTXWYJ+3atctNUaGoaN68uRYsWKA6dero+PHjio6OVps2bfTnn3+qRIkS7g4PRYS17OQoH6Nchdzq0qWLIiMjVb16de3fv19PPfWUunbtqo0bN8rT09Pd4QEAANihYw4AUKQ8+eSTeumll7Jc56+//lLdunVdFBGKquwca2PHjrUta9y4sXx8fDR8+HBNnTpVvr6++R0qAGTpyunhGjdurObNm6tq1ar65JNPNGTIEDdGBgDOuXIq1EaNGqlx48aqWbOmvvvuO3Xs2NGNkQEAAGRExxwAoEh57LHHNGjQoCzXqVGjhlPbCgsL0+bNm+2WxcbG2t5D8ZabY6158+a6fPmyDh48qDp16uRDdChqypQpI09PT1seZBUbG0t+hDwXGhqq2rVra9++/9fevUdJWR9o4n+6G+i2AfECdnshoqIiXgBBEFejRgbiGFdjNOpJEHoju0cliXbUCRMDoqM4eFnjirJxx1EzSWQmJ3F3YwZ1emWyKkciSBKvEx0FktgguEJooBu6+/eHP2vSAxpAqKLg8zmnznnrW+/lqeLtOvR5+vu+b5Q6CruRD7+rli9fngMPPLAwvnz58gwdOrREqdhdHX744enbt2/eeOMNxRwAsMtRzAGwW+nXr1/69eu3Q/Y1evTo3HLLLVmxYkUOOOCAJMlTTz2VvffeO4MHD94hx6B8fZJzbfHixamsrCycV/Cn9OjRI8OHD09TU1POP//8JElHR0eampoyefLk0oZjt7N27dq8+eabGT9+fKmjsBs57LDDUl9fn6ampkIRt2bNmjz//PO54oorShuO3c5vf/vbrFq1qksJDACwq1DMAbDHWrp0ad57770sXbo07e3tWbx4cZJk4MCB6dWrV8aOHZvBgwdn/PjxmTlzZpqbm3PDDTfkqquucvlBttr8+fPz/PPP58wzz0zv3r0zf/78XHPNNfnyl7+cfffdt9TxKCONjY2ZMGFCRowYkZEjR+buu+9OS0tLGhoaSh2NMnfttdfm3HPPzaGHHprf//73mTZtWqqqqnLppZeWOhplZu3atV1mWr711ltZvHhx9ttvv3zqU5/K1Vdfnb/6q7/KkUcemcMOOyzf/va3c9BBBxX+4AA+ysedW/vtt1+mT5+eL3zhC6mvr8+bb76Z66+/PgMHDsy4ceNKmBoAYMsqOjs7O0sdAgBKYeLEiXn44Yc3G3/66adzxhlnJEmWLFmSK664IvPmzUvPnj0zYcKE3HbbbenWzd+2sHUWLVqUK6+8Mq+99lpaW1tz2GGHZfz48WlsbFTwss3uvffe3H777Wlubs7QoUNzzz33ZNSoUaWORZm75JJL8vOf/zyrVq1Kv379cuqpp+aWW27JEUccUepolJl58+blzDPP3Gx8woQJeeihh9LZ2Zlp06blu9/9bt5///2ceuqpue+++3LUUUeVIC3l5OPOrfvvvz/nn39+Xnzxxbz//vs56KCDMnbs2Nx8882pq6srQVoAgI+nmAMAAAAAAIAiqCx1AAAAAAAAANgTKOYAAAAAAACgCBRzAAAAAAAAUASKOQAAAAAAACgCxRwAAAAAAAAUgWIOAAAAAAAAikAxBwAAAAAAAEWgmAMAAAAAAIAiUMwBAAAAAABAESjmAAAAAAAAoAgUcwAAAAAAAFAEijkAAAAAAAAoAsUcAAAAAAAAFIFiDgAAAAAAAIpAMQcAAAAAAABFoJgDAAAAAACAIlDMAQAAAAAAQBEo5gAAAAAAAKAIFHMAAAAAAABQBIo5AAAAAAAAKALFHAAAAAAAABSBYg4AAAAAAACKQDEHAAAAAAAARaCYAwAAAAAAgCJQzAEAAAAAAEARKOYAAAAAAACgCBRzAAAAAAAAUASKOQAAAAAAACgCxRwAAAAAAAAUgWIOAAAAAAAAikAxBwAAAAAAAEWgmAMAAAAAAIAiUMwBAAAAAABAESjmACiZzs7OrFmzJp2dnaWOAgAAAACw0ynmACiZP/zhD+nTp0/+8Ic/lDoKQFloaWlJRUVFKioq0tLSUuo4AAAAwDZSzAEAAAAAAEARKOYAAAAAAACgCLqVOgAAALD1amtrSx0BAAAA2E6KOQAAKBM9e/Z0bzkAAAAoYy5lCQAAAAAAAEWgmAMAAAAAAIAiUMwBAECZ2LBhQ84555ycc8452bBhQ6njAAAAANvIPeYAAKBMtLe352c/+1lhGQAAACgvZswB0MWsWbMyYMCA1NTUZNSoUVmwYMFHrvvQQw+loqKiy6OmpqaIaQEAAAAAyodiDoCCOXPmpLGxMdOmTcuiRYsyZMiQjBs3LitWrPjIbfbee++88847hceSJUuKmBgAAAAAoHwo5gAouOuuuzJp0qQ0NDRk8ODBmT17dmpra/Pggw9+5DYVFRWpr68vPOrq6oqYGAAAAACgfLjHHABJkra2tixcuDBTpkwpjFVWVmbMmDGZP3/+R263du3aHHrooeno6MiJJ56YW2+9Nccee+wW121tbU1ra2vh+Zo1a3bcGwAAAPZoS5cuzcqVKzcb79u3bz71qU+VIBEAwOYUcwAkSVauXJn29vbNZrzV1dXltdde2+I2Rx99dB588MGccMIJWb16de64446ccsopefnll3PIIYdstv6MGTMyffr0nZIfAADYcy1dujRHDzomG9av2+y1mr1q8/prryrnAIBdgmIOgO02evTojB49uvD8lFNOyTHHHJP//t//e26++ebN1p8yZUoaGxsLz9esWZP+/fsXJSsAALD7WrlyZTasX5f9P/eNdN//337H2LhqWVb99M6sXLlSMQcA7BIUcwAk+eDyLlVVVVm+fHmX8eXLl6e+vn6r9tG9e/cMGzYsb7zxxhZfr66uTnV19SfOCrCn6tmzZzo7O0sdAwB2Wd3375/q+oGljgEA8JEqSx0AgF1Djx49Mnz48DQ1NRXGOjo60tTU1GVW3Mdpb2/Pr3/96xx44IE7KyYAAAAAQNkyYw6AgsbGxkyYMCEjRozIyJEjc/fdd6elpSUNDQ1JkssuuywHH3xwZsyYkSS56aabcvLJJ2fgwIF5//33c/vtt2fJkiW5/PLLS/k2AAAAAAB2SYo5AAouvvjivPvuu5k6dWqam5szdOjQzJ07N3V1dUk+uKF6ZeW/Tbb+f//v/2XSpElpbm7Ovvvum+HDh+e5557L4MGDS/UWAHZrGzZsyPjx45Mk3/ve91JTU1PiRAAAAMC2qOh0kwoASmTNmjXp06dPVq9enb333rvUcQB2eS0tLenVq1eSZO3atenZs2eJEwHArmHRokUZPnx46ifc3eUec63Nb6T54auzcOHCnHjiiSVMCADwAfeYAwAAAAAAgCJQzAEAAAAAAEARKOYAAAAAAACgCBRzAAAAAAAAUASKOQAAAAAAACgCxRwAAAAAAAAUQbdSBwAAALZObW1t1q5dW1gGAAAAyotiDgAAykRFRUV69uxZ6hgAAADAdnIpSwAAAAAAACgCxRwAAJSJ1tbWTJw4MRMnTkxra2up4wAAAADbSDEHAABlYtOmTXn44Yfz8MMPZ9OmTaWOAwAAAGwjxRwAAAAAAAAUgWIOAAAAAAAAikAxBwAAAAAAAEWgmAMAAAAAAIAiUMwBAAAAAABAESjmAAAAAAAAoAi6lToAAACwdWpra7NixYrCMgAAAFBeFHMAAFAmKioq0q9fv1LHAAAAALaTS1kCAAAAAABAESjmAACgTLS2tuaqq67KVVddldbW1lLHAQAAALaRYg4AAMrEpk2bct999+W+++7Lpk2bSh0HAAAA2EaKOQAAAAAAACgCxRwAAAAAAAAUgWIOAAAAAAAAikAxBwAAAAAAAEWgmAMAAAAAAIAiUMwBAAAAAABAEXQrdQAAAGDr7LXXXnnrrbcKywAAAEB5UcwBAECZqKyszIABA0odAwAAANhOLmUJAAAAAAAARaCYAwCAMtHW1pbrrrsu1113Xdra2kodBwAAANhGijkAACgTGzduzB133JE77rgjGzduLHUcAAAAYBsp5gAAAAAAAKAIFHMAAAAAAABQBIo5AAAAAAAAKALFHAAAAAAAABSBYg4AAAAAAACKQDEHAAAAAAAARdCt1AEAAICts9dee+Wll14qLAMAAADlRTEHAABlorKyMscee2ypYwAAAADbyaUsAQAAAAAAoAgUcwB0MWvWrAwYMCA1NTUZNWpUFixYsFXbPfroo6moqMj555+/cwMC7MHa2tpy44035sYbb0xbW1up4wAAAADbSDEHQMGcOXPS2NiYadOmZdGiRRkyZEjGjRuXFStWfOx2b7/9dq699tqcdtppRUoKsGfauHFjpk+fnunTp2fjxo2ljgMAAABsI8UcAAV33XVXJk2alIaGhgwePDizZ89ObW1tHnzwwY/cpr29PV/60pcyffr0HH744UVMCwAAAABQXhRzACT54PJoCxcuzJgxYwpjlZWVGTNmTObPn/+R291000054IAD8pWvfOVPHqO1tTVr1qzp8gAAAAAA2FMo5gBIkqxcuTLt7e2pq6vrMl5XV5fm5uYtbvPMM8/kb/7mb/LAAw9s1TFmzJiRPn36FB79+/f/xLkBAAAAAMqFYg6A7fKHP/wh48ePzwMPPJC+fftu1TZTpkzJ6tWrC49ly5bt5JQAAAAAALuObqUOAMCuoW/fvqmqqsry5cu7jC9fvjz19fWbrf/mm2/m7bffzrnnnlsY6+joSJJ069Ytr7/+eo444ogu21RXV6e6unonpAcAAAAA2PWZMQdAkqRHjx4ZPnx4mpqaCmMdHR1pamrK6NGjN1t/0KBB+fWvf53FixcXHv/xP/7HnHnmmVm8eLHLVAIAAAAA/DtmzAFQ0NjYmAkTJmTEiBEZOXJk7r777rS0tKShoSFJctlll+Xggw/OjBkzUlNTk+OOO67L9vvss0+SbDYOwI5RU1OTBQsWFJYBAACA8qKYA6Dg4osvzrvvvpupU6emubk5Q4cOzdy5c1NXV5ckWbp0aSorTbYGKJWqqqqcdNJJpY4BAAAAbCfFHABdTJ48OZMnT97ia/PmzfvYbR966KEdHwgAAAAAYDehmAMAgDLR1taW73znO0mSr3/96+nRo0eJEwEAAADbQjEHAABlYuPGjbn++uuTJFdeeaViDgAAAMqMGwUBAAAAAABAESjmAAAAAAAAoAgUcwAAAAAAAFAEijkAAAAAAAAoAsUcAAAAAAAAFIFiDgAAAAAAAIqgW6kDAAAAW6empiZPP/10YRkAAAAoL4o5AAAoE1VVVTnjjDNKHQMAAADYTi5lCQAAAAAAAEVgxhwAAJSJjRs35rvf/W6S5D//5/+c7t27lzgRAAAAsC0UcwAAUCba2toyefLkJMnEiRMVcwAAAFBmXMoSAAAAAAAAikAxBwAAAAAAAEWgmAMAAAAAAIAiUMwBAAAAAABAESjmAAAAAAAAoAgUcwAAAAAAAFAE3UodAAAA2DrV1dX56U9/WlgGAAAAyotiDgAAykS3bt1yzjnnlDoGAAAAsJ1cyhIAAAAAAACKwIw5AAAoExs3bsz3v//9JMmXvvSldO/evcSJAAAAgG2hmAMAgDLR1taWhoaGJMlFF12kmAMAAIAy41KWAAAAAAAAUASKOQAAAAAAACgCxRwAAAAAAAAUgWIOAAAAAAAAikAxBwAAAAAAAEWgmAMAAAAAAIAi6FbqAAAAwNaprq7O3//93xeWAQAAgPKimAMAgDLRrVu3XHTRRaWOAQAAAGwnl7IEAAAAAACAIjBjDgAAysSmTZvyk5/8JEny+c9/Pt26+e88AAAAlBO/yQMAQJlobW3NF7/4xSTJ2rVrFXMAAABQZlzKEgAAAAAAAIpAMQcAAAAAAABFoJgDAAAAAACAIlDMAQAAAAAAQBEo5gAAAAAAAKAIFHMAAAAAAABQBN1KHQAAANg6PXr0yN/+7d8WlgEAAIDyopgD2M20t7fn17/+dQ499NDsu+++pY4DwA7UvXv3TJw4sdQxAAAAgO3kUpYAZe7qq6/O3/zN3yT5oJQ7/fTTc+KJJ6Z///6ZN2/eNu9v1qxZGTBgQGpqajJq1KgsWLDgI9f98Y9/nBEjRmSfffZJz549M3To0Hzve9/b3rcCAAAAALBbU8wBlLkf/ehHGTJkSJLkf//v/5233norr732Wq655pp861vf2qZ9zZkzJ42NjZk2bVoWLVqUIUOGZNy4cVmxYsUW199vv/3yrW99K/Pnz8+vfvWrNDQ0pKGhIU888cQnfl8AbG7Tpk15/PHH8/jjj2fTpk2ljgMAAABsI8UcQJlbuXJl6uvrkyQ/+9nPctFFF+Woo47Kf/pP/ym//vWvt2lfd911VyZNmpSGhoYMHjw4s2fPTm1tbR588MEtrn/GGWfk85//fI455pgcccQR+frXv54TTjghzzzzzCd+XwBsrrW1NZ/73Ofyuc99Lq2traWOAwAAAGwjxRxAmaurq8srr7yS9vb2zJ07N3/2Z3+WJFm3bl2qqqq2ej9tbW1ZuHBhxowZUxirrKzMmDFjMn/+/D+5fWdnZ5qamvL666/n05/+9BbXaW1tzZo1a7o8AAAAAAD2FN1KHQCAT6ahoSFf/OIXc+CBB6aioqJQrD3//PMZNGjQVu9n5cqVaW9vT11dXZfxurq6vPbaax+53erVq3PwwQentbU1VVVVue+++wrl4L83Y8aMTJ8+faszAQAAAADsThRzAGXuxhtvzHHHHZdly5bloosuSnV1dZKkqqoq3/zmN3f68Xv37p3Fixdn7dq1aWpqSmNjYw4//PCcccYZm607ZcqUNDY2Fp6vWbMm/fv33+kZAQAAAAB2BYo5gDJ12WWX5bzzzsu4ceNy4YUXbvb6hAkTtml/ffv2TVVVVZYvX95lfPny5YV72G1JZWVlBg4cmCQZOnRoXn311cyYMWOLxVx1dXWhOAQAAAAA2NO4xxxAmRo4cGBuvfXW9OvXL2effXbuv//+/O53v9vu/fXo0SPDhw9PU1NTYayjoyNNTU0ZPXr0Vu+no6Mjra2t250DAAAAAGB3pZgDKFNTp07NwoUL85vf/CbnnntuHnvssRxxxBEZPnx4brrppixevHib99nY2JgHHnggDz/8cF599dVcccUVaWlpSUNDQ5IPZulNmTKlsP6MGTPy1FNP5V//9V/z6quv5s4778z3vve9fPnLX95RbxMAAAAAYLfhUpYAZe6QQw7JlVdemSuvvDJ/+MMf8o//+I/5n//zf+Yzn/lMevfunXPPPTdXXHFFjj322D+5r4svvjjvvvtupk6dmubm5gwdOjRz585NXV1dkmTp0qWprPy3v+loaWnJlVdemd/+9rfZa6+9MmjQoPzd3/1dLr744p32fgH2ZD169Mi9995bWAYAAADKS0VnZ2dnqUMAsOO1t7dn3rx5+V//63/l+OOPz+WXX17qSJtZs2ZN+vTpk9WrV2fvvfcudRwAAKBMLVq0KMOHD0/9hLtTXT+wMN7a/EaaH746CxcuzIknnljChAAAHzBjDqDMrV+/Pp2dnamtrU2SLFmyJD/5yU8yePDgjB07NmeddVaJEwIAAAAAkLjHHEDZO++88/LII48kSd5///2MHDkyd955Z84777zcf//9JU4HwI704WzoefPmpb29vdRxAAAAgG2kmAMoc4sWLcppp52WJPnRj36U+vr6LFmyJI888kjuueeeEqcDYEfasGFDzjzzzJx55pnZsGFDqeMAAAAA20gxB1Dm1q1bl969eydJnnzyyVxwwQWprKzMySefnCVLlpQ4HQAAAAAAH1LMAZS5gQMH5rHHHsuyZcvyxBNPZOzYsUmSFStWZO+99y5xOgAAAAAAPqSYAyhzU6dOzbXXXpsBAwZk5MiRGT16dJIPZs8NGzasxOkAAAAAAPhQt1IHAOCTufDCC3PqqafmnXfeyZAhQwrjZ511Vj7/+c+XMBkAAAAAAH/MjDmA3UB9fX169+6dp556KuvXr0+SnHTSSRk0aFCJkwEAAAAA8CHFHECZW7VqVc4666wcddRR+fM///O88847SZKvfOUr+cY3vlHidAAAAAAAfEgxB1DmrrnmmnTv3j1Lly5NbW1tYfziiy/O3LlzS5gMgB2te/fumTlzZmbOnJnu3buXOg4AAACwjdxjDqDMPfnkk3niiSdyyCGHdBk/8sgjs2TJkhKlAmBn6NGjR6677rpSxwAAAAC2kxlzAGWupaWly0y5D7333nuprq4uQSIAAAAAALZEMQdQ5k477bQ88sgjhecVFRXp6OjIzJkzc+aZZ5YwGQA7Wnt7e37xi1/kF7/4Rdrb20sdBwAAANhGLmUJUOZmzpyZs846Ky+88ELa2tpy/fXX5+WXX857772XZ599ttTxANiBNmzYkJEjRyZJ1q5dm549e5Y4EQAAALAtzJgDKHPHHXdc/uVf/iWnnnpqzjvvvLS0tOSCCy7Iiy++mCOOOKLU8QAAAAAA+P+ZMQdQ5p5++umceeaZ+da3vrXZa7NmzcpVV11VglQAAAAAAPx7ZswBlLkLLrggCxcu3Gz8O9/5TqZMmVKCRAAAAAAAbIliDqDM3X777Tn77LPz2muvFcbuvPPOTJ06NY8//ngJkwEAAAAA8MdcyhKgzF1++eV57733MmbMmDzzzDOZM2dObr311vzsZz/Lf/gP/6HU8bbK4sWL06tXry5jffv2zac+9amt3sfSpUuzcuXKzcY/bj/bs8227Ke1tTXV1dWfeP9QbDv7Z+Oj9lOq48LWcm7tufzb71g+T8qB8/QD5fI5lEtOAEgUcwC7heuvvz6rVq3KiBEj0t7enieeeCInn3xyqWNttdNPP32zsZq9avP6a69u1S9RS5cuzdGDjsmG9eu2ej/bs822HjsVlUlnxyfaPxRbMX42trSfUh0XtpZza8/l337H8nlSDpynHyiXz6FccgLAhxRzAGXonnvu2Wzs4IMPTm1tbT796U9nwYIFWbBgQZLka1/7WrHjbbN9x01Odf3AwvONq5Zl1U/vzMqVK7fqF6iVK1dmw/p12f9z30j3/ftv1X62Z5ttOfb6f30hq//v333i/UOx7eyfjY/aT6mOW266d++eadOmFZYpnt393OKj+bffsXyelAPn6QfK5XMol5wA8CHFHEAZ+q//9b9ucbyqqirPPvtsnn322SRJRUVFWRRz3fc7pEsxt9372b//Nu9ne7bZmv1sXLVsh+4fim1n/WzsqsctFz169MiNN95Y6hh7tN313OJP82+/Y/k8KQfO0w+Uy+dQLjkBQDEHUIbeeuutUkcAAAAAAGAbKeYAAKBMdHR05NVXX02SHHPMMamsrCxxIgAAAGBbKOYAylBjY2Nuvvnm9OzZM42NjR+77l133VWkVADsbOvXr89xxx2XJFm7dm169uxZ4kQAAADAtlDMAZShF198MRs3biwsf5SKiopiRQIAAAAA4E9QzAGUoaeffnqLywAAAAAA7LrclAJgN7Js2bIsW7as1DEAAAAAANgCxRxAmdu0aVO+/e1vp0+fPhkwYEAGDBiQPn365IYbbihc7hIAAAAAgNJzKUuAMvfVr341P/7xjzNz5syMHj06STJ//vzceOONWbVqVe6///4SJwQAAAAAIFHMAZS9H/zgB3n00Udz9tlnF8ZOOOGE9O/fP5deeqliDgAAAABgF6GYAyhz1dXVGTBgwGbjhx12WHr06FH8QADsNN27d8+1115bWAYAAADKi2IOoMxNnjw5N998c/72b/821dXVSZLW1tbccsstmTx5conTAbAj9ejRI7fffnupYwAAAADbSTEHUOZefPHFNDU15ZBDDsmQIUOSJL/85S/T1taWs846KxdccEFh3R//+MeligkAAAAAsMdTzAGUuX322Sdf+MIXuoz179+/RGkA2Jk6OjqydOnSJMmnPvWpVFZWljgRAAAAsC0UcwBl7r777ktHR0d69uyZJHn77bfz2GOP5Zhjjsm4ceNKnA6AHWn9+vU57LDDkiRr164tfPcDAAAA5cGf2AKUufPOOy/f+973kiTvv/9+Tj755Nx55505//zzc//995c4HQAAAAAAH1LMAZS5RYsW5bTTTkuS/OhHP0pdXV2WLFmSRx55JPfcc0+J0wEAAAAA8CHFHECZW7duXXr37p0kefLJJ3PBBReksrIyJ598cpYsWVLidAAAAAAAfEgxB1DmBg4cmMceeyzLli3LE088kbFjxyZJVqxYkb333rvE6QAAAAAA+JBiDqDMTZ06Nddee20GDBiQUaNGZfTo0Uk+mD03bNiwEqcDAAAAAOBD3UodAIBP5sILL8ypp56ad955J0OGDCmMn3XWWfn85z9fwmQAAAAAAPwxM+YAdgP19fUZNmxYKiv/7Wt95MiRGTRo0Dbva9asWRkwYEBqamoyatSoLFiw4CPXfeCBB3Laaadl3333zb777psxY8Z87PoAfDLdunXLlVdemSuvvDLduvkbOwAAACg3ijkACubMmZPGxsZMmzYtixYtypAhQzJu3LisWLFii+vPmzcvl156aZ5++unMnz8//fv3z9ixY/O73/2uyMkB9gzV1dWZNWtWZs2alerq6lLHAQAAALaRYg6AgrvuuiuTJk1KQ0NDBg8enNmzZ6e2tjYPPvjgFtf//ve/nyuvvDJDhw7NoEGD8j/+x/9IR0dHmpqaipwcAAAAAGDXp5gDIEnS1taWhQsXZsyYMYWxysrKjBkzJvPnz9+qfaxbty4bN27Mfvvtt8XXW1tbs2bNmi4PALZeZ2dn3n333bz77rvp7OwsdRwAAABgGynmAEiSrFy5Mu3t7amrq+syXldXl+bm5q3ax1/8xV/koIMO6lLu/bEZM2akT58+hUf//v0/cW6APcm6detywAEH5IADDsi6detKHQcAAADYRoo5AHaI2267LY8++mh+8pOfpKamZovrTJkyJatXry48li1bVuSUAAAAAACl063UAQDYNfTt2zdVVVVZvnx5l/Hly5envr7+Y7e94447ctttt+Wf/umfcsIJJ3zketXV1amurt4heQEAAAAAyo0ZcwAkSXr06JHhw4enqampMNbR0ZGmpqaMHj36I7ebOXNmbr755sydOzcjRowoRlQAAAAAgLJkxhwABY2NjZkwYUJGjBiRkSNH5u67705LS0saGhqSJJdddlkOPvjgzJgxI0ny13/915k6dWp+8IMfZMCAAYV70fXq1Su9evUq2fsAAAAAANgVKeYAKLj44ovz7rvvZurUqWlubs7QoUMzd+7c1NXVJUmWLl2aysp/m2x9//33p62tLRdeeGGX/UybNi033nhjMaMDAAAAAOzyFHMAdDF58uRMnjx5i6/Nmzevy/O333575wcCAAAAANhNKOYAAKBMdOvWLRMmTCgsAwAAAOXFb/MAAFAmqqur89BD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6jgAAADANnKPOQAAKBPt7e352c9+VlgGAAAAyosZcwAAAAAAAFAEijkAAAAAAAAoAsUcAF3MmjUrAwYMSE1NTUaNGpUFCxZ87Pr/8A//kEGDBqWmpibHH3984RJrAAAAAAB0pZgDoGDOnDlpbGzMtGnTsmjRogwZMiTjxo3LihUrtrj+c889l0svvTRf+cpX8uKLL+b888/P+eefn5deeqnIyQEAAAAAdn2KOQAK7rrrrkyaNCkNDQ0ZPHhwZs+endra2jz44INbXP873/lOPvvZz+a6667LMccck5tvvjknnnhi7r333iInBwAAAADY9XUrdQAAdg1tbW1ZuHBhpkyZUhirrKzMmDFjMn/+/C1uM3/+/DQ2NnYZGzduXB577LEtrt/a2prW1tbC89WrV39w7BX/2mW9je/9NkmycOHCrF27tstrlZWV6ejo6DL2+uuvf7D/5jfS0bZhq/azPdts07FXLdsh+ze++4zvipl21M/TjthPqY77UfvZVcfXrVtXeP7ss8+mpqam7M+5chnf3c+t3fH7bEeN+7ffsePb83nuau/B+K45viN/Vv3cf6BcPoftyTl06ND07t07FRUVmx0DAHa2is7Ozs5ShwCg9H7/+9/n4IMPznPPPZfRo0cXxq+//vr88z//c55//vnNtunRo0cefvjhXHrppYWx++67L9OnT8/y5cs3W//GG2/M9OnTd84bAAAAgK20evXq7L333qWOAcAeyIw5AIpmypQpXWbYdXR05L333sv+++9fsr9UXLNmTfr3759ly5b5pYwdyrnFzuLcYmdxbrGzOLfYWZxbfBK9e/cudQQA9lCKOQCSJH379k1VVdVmM92WL1+e+vr6LW5TX1+/TetXV1enurq6y9g+++yz/aF3oL333tsv8+wUzi12FucWO4tzi53FucXO4twCAMpJZakDALBr6NGjR4YPH56mpqbCWEdHR5qamrpc2vKPjR49usv6SfLUU0995PoAAAAAAHsyM+YAKGhsbMyECRMyYsSIjBw5MnfffXdaWlrS0NCQJLnsssty8MEHZ8aMGUmSr3/96zn99NNz55135pxzzsmjjz6aF154Id/97ndL+TYAAAAAAHZJijkACi6++OK8++67mTp1apqbmzN06NDMnTs3dXV1SZKlS5emsvLfJlufcsop+cEPfpAbbrghf/mXf5kjjzwyjz32WI477rhSvYVtVl1dnWnTpm12iU34pJxb7CzOLXYW5xY7i3OLncW5BQCUo4rOzs7OUocAAAAAAACA3Z17zAEAAAAAAEARKOYAAAAAAACgCBRzAAAAAAAAUASKOQAAAAAAACgCxRwAe6xbbrklp5xySmpra7PPPvtscZ2lS5fmnHPOSW1tbQ444IBcd9112bRpU3GDUvYGDBiQioqKLo/bbrut1LEoQ7NmzcqAAQNSU1OTUaNGZcGCBaWOxG7gxhtv3Ow7atCgQaWORRn6+c9/nnPPPTcHHXRQKioq8thjj3V5vbOzM1OnTs2BBx6YvfbaK2PGjMlvfvOb0oSlrPypc2vixImbfY999rOfLU1YAIA/QTEHwB6rra0tF110Ua644ootvt7e3p5zzjknbW1tee655/Lwww/noYceytSpU4uclN3BTTfdlHfeeafw+OpXv1rqSJSZOXPmpLGxMdOmTcuiRYsyZMiQjBs3LitWrCh1NHYDxx57bJfvqGeeeabUkShDLS0tGTJkSGbNmrXF12fOnJl77rkns2fPzvPPP5+ePXtm3Lhx2bBhQ5GTUm7+1LmVJJ/97Ge7fI/98Ic/LGJCAICt163UAQCgVKZPn54keeihh7b4+pNPPplXXnkl//RP/5S6uroMHTo0N998c/7iL/4iN954Y3r06FHEtJS73r17p76+vtQxKGN33XVXJk2alIaGhiTJ7Nmz8/jjj+fBBx/MN7/5zRKno9x169bNdxSf2Nlnn52zzz57i691dnbm7rvvzg033JDzzjsvSfLII4+krq4ujz32WC655JJiRqXMfNy59aHq6mrfYwBAWTBjDgA+wvz583P88cenrq6uMDZu3LisWbMmL7/8cgmTUY5uu+227L///hk2bFhuv/12l0Rlm7S1tWXhwoUZM2ZMYayysjJjxozJ/PnzS5iM3cVvfvObHHTQQTn88MPzpS99KUuXLi11JHYzb731Vpqbm7t8j/Xp0yejRo3yPcYOMW/evBxwwAE5+uijc8UVV2TVqlWljgQAsEVmzAHAR2hubu5SyiUpPG9ubi5FJMrU1772tZx44onZb7/98txzz2XKlCl55513ctddd5U6GmVi5cqVaW9v3+J30muvvVaiVOwuRo0alYceeihHH3103nnnnUyfPj2nnXZaXnrppfTu3bvU8dhNfPh/py19j/l/FZ/UZz/72VxwwQU57LDD8uabb+Yv//Ivc/bZZ2f+/PmpqqoqdTwAgC4UcwDsVr75zW/mr//6rz92nVdffTWDBg0qUiJ2V9tyrjU2NhbGTjjhhPTo0SP/5b/8l8yYMSPV1dU7OyrAx/rjy8OdcMIJGTVqVA499ND8/d//fb7yla+UMBnA1vnjS6Eef/zxOeGEE3LEEUdk3rx5Oeuss0qYDABgc4o5AHYr3/jGNzJx4sSPXefwww/fqn3V19dnwYIFXcaWL19eeI092yc510aNGpVNmzbl7bffztFHH70T0rG76du3b6qqqgrfQR9avny57yN2uH322SdHHXVU3njjjVJHYTfy4XfV8uXLc+CBBxbGly9fnqFDh5YoFburww8/PH379s0bb7yhmAMAdjmKOQB2K/369Uu/fv12yL5Gjx6dW265JStWrMgBBxyQJHnqqaey9957Z/DgwTvkGJSvT3KuLV68OJWVlYXzCv6UHj16ZPjw4Wlqasr555+fJOno6EhTU1MmT55c2nDsdtauXZs333wz48ePL3UUdiOHHXZY6uvr09TUVCji1qxZk+effz5XXHFFacOx2/ntb3+bVatWdSmBAQB2FYo5APZYS5cuzXvvvZelS5emvb09ixcvTpIMHDgwvXr1ytixYzN48OCMHz8+M2fOTHNzc2644YZcddVVLj/IVps/f36ef/75nHnmmendu3fmz5+fa665Jl/+8pez7777ljoeZaSxsTETJkzIiBEjMnLkyNx9991paWlJQ0NDqaNR5q699tqce+65OfTQQ/P73/8+06ZNS1VVVS699NJSR6PMrF27tstMy7feeiuLFy/Ofvvtl0996lO5+uqr81d/9Vc58sgjc9hhh+Xb3/52DjrooMIfHMBH+bhza7/99sv06dPzhS98IfX19XnzzTdz/fXXZ+DAgRk3blwJUwMAbFlFZ2dnZ6lDAEApTJw4MQ8//PBm408//XTOOOOMJMmSJUtyxRVXZN68eenZs2cmTJiQ2267Ld26+dsWts6iRYty5ZVX5rXXXktra2sOO+ywjB8/Po2NjQpettm9996b22+/Pc3NzRk6dGjuueeejBo1qtSxKHOXXHJJfv7zn2fVqlXp169fTj311Nxyyy054ogjSh2NMjNv3ryceeaZm41PmDAhDz30UDo7OzNt2rR897vfzfvvv59TTz019913X4466qgSpKWcfNy5df/99+f888/Piy++mPfffz8HHXRQxo4dm5tvvjl1dXUlSAsA8PEUcwAAAAAAAFAElaUOAAAAAAAAAHsCxRwAAAAAAAAUgWIOAAAAAAAAikAxBwAAAAAAAEWgmAMAAAAAAIAiUMwBAAAAAABAESjmAAAAAAAAoAgUcwAAAAAAAFAEijkAAIAimThxYs4///ySHX/8+PG59dZbt2rdSy65JHfeeedOTgQAALBnqejs7OwsdQgAAIByV1FR8bGvT5s2Lddcc006Ozuzzz77FCfUH/nlL3+Zz3zmM1myZEl69er1J9d/6aWX8ulPfzpvvfVW+vTpU4SEAAAAuz/FHAAAwA7Q3NxcWJ4zZ06mTp2a119/vTDWq1evrSrEdpbLL7883bp1y+zZs7d6m5NOOikTJ07MVVddtROTAQAA7DlcyhIAAGAHqK+vLzz69OmTioqKLmO9evXa7FKWZ5xxRr761a/m6quvzr777pu6uro88MADaWlpSUNDQ3r37p2BAwfmH//xH7sc66WXXsrZZ5+dXr16pa6uLuPHj8/KlSs/Mlt7e3t+9KMf5dxzz+0yft999+XII49MTU1N6urqcuGFF3Z5/dxzz82jjz76yT8cAAAAkijmAAAASurhhx9O3759s2DBgnz1q1/NFVdckYsuuiinnHJKFi1alLFjx2b8+PFZt25dkuT999/PZz7zmQwbNiwvvPBC5s6dm+XLl+eLX/ziRx7jV7/6VVavXp0RI0YUxl544YV87Wtfy0033ZTXX389c+fOzac//eku240cOTILFixIa2vrznnzAAAAexjFHAAAQAkNGTIkN9xwQ4488shMmTIlNTU16du3byZNmpQjjzwyU6dOzapVq/KrX/0qSXLvvfdm2LBhufXWWzNo0KAMGzYsDz74YJ5++un8y7/8yxaPsWTJklRVVeWAAw4ojC1dujQ9e/bM5z73uRx66KEZNmxYvva1r3XZ7qCDDkpbW1uXy3QCAACw/RRzAAAAJXTCCScUlquqqrL//vvn+OOPL4zV1dUlSVasWJEk+eUvf5mnn366cM+6Xr16ZdCgQUmSN998c4vHWL9+faqrq1NRUVEY+7M/+7MceuihOfzwwzN+/Ph8//vfL8zK+9Bee+2VJJuNAwAAsH0UcwAAACXUvXv3Ls8rKiq6jH1YpnV0dCRJ1q5dm3PPPTeLFy/u8vjNb36z2aUoP9S3b9+sW7cubW1thbHevXtn0aJF+eEPf5gDDzwwU6dOzZAhQ/L+++8X1nnvvfeSJP369dsh7xUAAGBPp5gDAAAoIyeeeGJefvnlDBgwIAMHDuzy6Nmz5xa3GTp0aJLklVde6TLerVu3jBkzJjNnzsyvfvWrvP322/k//+f/FF5/6aWXcsghh6Rv37477f0AAADsSRRzAAAAZeSqq67Ke++9l0svvTS/+MUv8uabb+aJJ55IQ0ND2tvbt7hNv379cuKJJ+aZZ54pjP30pz/NPffck8WLF2fJkiV55JFH0tHRkaOPPrqwzv/9v/83Y8eO3envCQAAYE+hmAMAACgjBx10UJ599tm0t7dn7NixOf7443P11Vdnn332SWXlR/+Kd/nll+f73/9+4fk+++yTH//4x/nMZz6TY445JrNnz84Pf/jDHHvssUmSDRs25LHHHsukSZN2+nsCAADYU1R0dnZ2ljoEAAAAO9f69etz9NFHZ86cORk9evSfXP/+++/PT37ykzz55JNFSAcAALBnMGMOAABgD7DXXnvlkUceycqVK7dq/e7du+e//bf/tpNTAQAA7FnMmAMAAAAAAIAiMGMOAAAAAAAAikAxBwAAAAAAAEWgmAMAAAAAAIAiUMwBAAAAAABAESjmAAAAAAAAoAgUcwAAAAAAAFAEijkAAAAAAAAoAsUcAAAAAAAAFIFiDgAAAAAAAIrg/wMASDKjgykK1QAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABuYAAAK9CAYAAADYCdrlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC4gUlEQVR4nOzdZ3gU1f/38c+mN5LQA0hHejUqIF2QUBQhFLFRhD8oTUUUsYWggII/RFRALIAoFiB2pIoFQUBBRZAqTUpokpBAEkjO/SD3rizZhE3bTXm/rmuvJLOT2e+cnTlzypwzFmOMEQAAAAAAAAAAAIB85eHuAAAAAAAAAAAAAIDigI45AAAAAAAAAAAAwAXomAMAAAAAAAAAAABcgI45AAAAAAAAAAAAwAXomAMAAAAAAAAAAABcgI45AAAAAAAAAAAAwAXomAMAAAAAAAAAAABcgI45AAAAAAAAAAAAwAXomAMAAAAAAAAAAABcIFcdc6+99prq1KkjX19fTZw4MY9Cco7FYtGoUaOuud6CBQtksVh08ODB/A+qEJk4caIsFotOnz59zXWrVaumQYMG5X9QyJT1+yqoLBaLy/MAZxTUuHKqoOZnBTWuqx08eFAWi0ULFixwdyh2CkJcR44ckZ+fn3766Se3xQAUBJcuXVLlypU1e/bsPN1uQTjPc2PQoEGqVq2au8MokKpVq6bbb7/d3WGgGHG2fFvQ6w+u4igdqN8C2ffdd9/JYrFo6dKl7g6lSLKm73fffZft/y0K+f3V+XJ20qOwl7NzorC0wRQF1rT+5Zdf3B1KsdS+fXu1b9/e3WFkUL16dQUHB6tdu3b6448/crydHHfM7d+/X2PGjJGfn59mzpypyMhIu/fbt29fLAq7GzZs0MSJE3Xu3LkM71WrVi3HnQLWi1BxyGSnTJmizz77LNP3t27dqh49eqhUqVIKCAhQw4YNNWvWLLt1cpPWgwYNKpAneXGwc+dOTZw4MVfH+fLlywtk51tujsn8sHjxYs2cOTNX27jWuVqUZZXXOysvvoP8MmnSJDVv3lytWrWyLYuJidFdd92lGjVqKCAgQHXq1NFjjz2WaRp88cUXuuGGG+Tn56cqVaooKipKly9ftltn7dq1euCBB1S7dm0FBASoRo0aGjp0qI4fP55he6tWrdKQIUPUsGFDeXp65kmnwO7du/Xoo4/qlltukZ+fX55cZxMSEhQVFaUuXbqoVKlSWVYKBw0aJIvFkuFVt27dHH9+dvbp448/1n333afrr79eFoslT659mzdv1ogRIxQeHi5vb+9rNgrExsZq+PDhqlSpkvz8/FStWjUNGTIkx5//6KOP6oYbbrCVEerVq6eJEycqISEhw7p79+5V//79dd111ykgIEB169bVpEmTdOHCBds63t7eGjt2rCZPnqykpKQcx1UYy8HHjh3TxIkT9dtvv7k7FGTC2vCUk0Y7q3PnzmnYsGEqW7asAgMD1aFDB23dujXH27M2ViB7CnqZKrcNnMnJyRo/frwqVqwof39/NW/eXKtXr87x9opT3Tg/5UXdqzDK7fFTUNoLiuJ1Oqt9cmXdaeLEiTmuazg6vgpyva8wc3e6uqONt6CXF1yhKF67stqn2bNnu6yTOTfXN3fVAbK6buRmf86cOaPp06erbdu2Klu2rEJDQ9WiRQt9/PHHDtefMWOGxo8fr99++82pgWOZyXHH3LZt2yRJkydP1kMPPaTGjRvnOIj8dP/99+vixYuqWrVqvmx/w4YNio6OzlVjbUG3e/duvfXWW/m2/awuNKtWrVLLli118uRJPfvss3r11Vd1++23659//sm3eAqiZ555RhcvXnR3GHlu586dio6OznXHXHR0tMP3Ll68qGeeeSbH2y5K8rNjLr/z2YIgL/L6zL6DqlWr6uLFi7r//vtzHmAunDp1SgsXLtSDDz5ot3zYsGH666+/dN9992nWrFnq0qWLXn/9dbVs2TJDfvTNN9+oZ8+eCg0N1WuvvaaePXvqhRde0OjRo+3WGz9+vL777jv16tVLs2bNUv/+/fXJJ5+oWbNmOnHihN26ixcv1uLFixUSEqKKFSvmyb5u3LhRs2bN0vnz51WvXr082ebp06c1adIk/fXXX2rSpMk11/f19dWiRYvsXtOnT8/x52dnn+bMmaPPP/9clStXVsmSJXP8mVdavny53n77bVksFtWoUSPLdY8cOaKbbrpJ33zzjR588EHNnj1bQ4cO1alTp3L8+Vu2bFGbNm0UHR2tV199VR06dNCLL76oLl26KC0tze6zb775Zv38888aNWqUZs6cqZYtWyoqKkp333233TYHDx6s06dPa/HixTmO62ruPs+dcezYMUVHRzus5Lz11lvavXu364NCnkpLS1P37t21ePFijRo1StOmTdPJkyfVvn177d27193hFSu5aWgrDOXbQYMGacaMGbr33nv16quvytPTU926ddP69evdHZqk/K/fFlR5UfeC+2R1nS6sstond3fC5EZOYm/btq0uXryotm3b5k9QhYyj9Cio9en8VJzbYKyK4rUrq31yZcdcYbBq1SqtWrXK9nd+XQs3btyop59+WqVKldIzzzyjyZMnKyAgQP3791dUVFSG9Xv16qWnn35ad911V65i8crpPyYmJkqSypcvn+MPdwVPT095enq6O4xCzdfX1y2fGx8frwEDBqh79+5aunSpPDyK7yMRvby85OWV49O12PLz83N3CMUC+WzuWCwWtx6r77//vry8vHTHHXfYLV+6dGmGu43Cw8M1cOBAffDBBxo6dKht+bhx49S4cWOtWrXKllcFBwdrypQpevjhh20jwmbMmKHWrVvb5eddunRRu3bt9Prrr+uFF16wLZ8yZYreeusteXt76/bbb9eff/6Z633t0aOHzp07pxIlSujll1/Ok8JchQoVdPz4cYWFhemXX37RTTfdlOX6Xl5euu+++3L9uVbZ2adFixapUqVK8vDwUMOGDfPk8x966CGNHz9e/v7+GjVqlPbs2ZPpusOHD5eXl5e2bNmi0qVL58nnO2rkrVmzpsaNG6fNmzerRYsWktL3/dy5c1q/fr0aNGggKb3zOS0tTe+9957+/fdfW2dlaGioOnfurAULFuiBBx7IkzjdfZ5n5fLly3admI54e3u7KBo44sx35IylS5dqw4YNWrJkifr06SNJ6tevn2rXrq2oqKg87YzOb0lJSfLx8SmW9YOCmpdYbd68WR999JGmT5+ucePGSZIGDBighg0b6oknntCGDRvcHKH76rdAQZSYmKjAwEB3h1FsXXk9K+j5uytlJz0Kcjk7v9AGk3vkfYWDj4+PSz6nQYMG2rt3r11n94gRI9SpUye99NJLeuKJJxweL2FhYTp//nyOPzfHNRljjCRla9jia6+9pgYNGiggIEAlS5bUjTfeaFcBzOz5FVnNl/zBBx+oTp068vPzU3h4uH744Qe79zObd/ebb75RmzZtFBgYqBIlSqh79+7asWNHhu3v2rVL/fr1U9myZeXv7686dero6aeftsX1+OOPS0qfW9Q6JVVWvfj79+/X/v37M30/K3v37lXv3r0VFhYmPz8/XXfdderfv7/i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r8wTs9qnatWqaceOHfr+++9ty6+s0/z999/q27ev7TEOLVq00Ndff233WVeWeSdPnqzrrrtOfn5+6tixo/bt25etfc4uZ/Zfyl6e4ex1IzPHjx/Xrl27rtn2UL169QwjUC0Wi3r27Knk5GT9/fffDv8vt+0rOR6CY61AOhvAW2+9pTFjxqhPnz62zp8//vhDmzZt0j333JOjGL7//nt9/PHHGjNmjK1RoUuXLtq8eXOWd4IvWrRIAwcOVEREhF566SVduHBBc+bMUevWrbVt2zZb5v7HH3+oTZs28vb21rBhw1StWjXt379fX375pSZPnqzIyEjt2bNHH374oV555RWVKVNGUnoFNzMdO3aUpGwPwU1JSVFERISSk5M1evRohYWF6ejRo/rqq6907tw5hYSEZGt7Vv369VO1atU0depU/fzzz5o1a5b+/fffLDttLly4oHbt2uno0aMaPny4qlSpog0bNmjChAk6fvy43dDyIUOGaMGCBeratauGDh2qy5cv68cff9TPP/+sG2+8UYsWLdLQoUN188032ypvNWvWlCStWbNGwcHBtgarPXv2KDAwUPfff79eeeWVfLsjZvXq1br77rvVsWNHvfTSS5LSG6F/+uknPfzww9lKA2e2NXHiRE2dOtWWDvHx8frll1+0detW3XbbbZnGOXToUC1cuFB9+vTRY489pk2bNmnq1Kn666+/9Omnn9qtu2/fPvXp00dDhgzRwIED9e6772rQoEEKDw+3jRxwxtChQ/X+++/rnnvu0S233KJvv/1W3bt3z7Deli1btGHDBtuzfA4ePKg5c+aoffv22rlzpwICAtS2bVuNGTNGs2bN0lNPPWWbgs3605nzdPjw4Tp27JhWr16tRYsWOb0fd911l+rVq6cXX3xRX3/9tV544QWVKlVKb775pm699Va99NJL+uCDDzRu3DjddNNNtukT0tLS1KNHD61fv17Dhg1TvXr1tH37dr3yyivas2fPNackcvb8P3HihDp06KDLly/rySefVGBgoObNm+ew8XvBggUKCgrS2LFjFRQUpG+//VbPPfec4uPjbdPjPf3004qLi9M///yjV155RZJsnTDO7lNW52pm9u3bp3vuuUfDhw/Xfffdp5dffll33HGH5s6dq6eeekojRoyQJE2dOlX9+vXT7t27bdeUHTt2qFWrVqpUqZItDT75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7NYbMWKEkWR+//13u5gHDhxo+/v55583gYGBZs+ePXb/++STTxpPT09z+PBhY4wx3377rZFkxowZkyGeK9MwMDDQbvtWjRs3NgEBASYgIMCMHj3aLFu2zIwePdpIMv379880HXLr4YcfNsHBweby5cuZruNsGjizrSZNmpju3btnGdPV58Bvv/1mJJmhQ4farTdu3DgjyXz77be2ZVWrVjWSzA8//GBbdvLkSePr62see+yxLD/3StbPHDFihN3ye+65J8PxdeHChQz/v3HjRiPJvPfee7ZlS5YsMZLMunXr7NbNznk6cuTIDPmDVWbH/bBhw2zLLl++bK677jpjsVjMiy++aFv+77//Gn9/f7tjc9GiRcbDw8P8+OOPdp8zd+5cI8n89NNPDuOwcvb8f+SRR4wks2nTJtuykydPmpCQkAz5jaO0Hj58uAkICDBJSUm2Zd27d3f42dnZp8zO1avzWeu+SjIbNmywLVu5cqWRZPz9/e3y1TfffDPDcdCxY0fTqFEju31IS0szt9xyi7n++uszxHClzz77zEgy06ZNsy27fPmyadOmTYY80lH6ffjhhxnOmczy+oMHDxpPT08zefJku+Xbt283Xl5edssz+w4c5d0DBw40ksyUKVNsy6zHpMViMR999JFt+a5duzIc687mUfv27TOSzGuvvZYhLkeGDBliPD097bZrTRvrNq900003mRYtWmS5TWt5Yu3atZmuk1na5UZ2r9/O2LJlS6bXYWPS03/8+PHm448/Nh9++KHte27VqpW5dOlSrj8/O/vUoEED065du1x/5pWyyo/HjBljJJnSpUubLl26mI8//thMnz7dBAUFmZo1a5rExMQcf671+mJ91alTJ8N1xZj0Y83f399u3aefftrhNo8dO2YkmZdeeinHcV0pq/N80qRJdus2a9bMhIeH2/7Oy3KJNY7g4GBz8uRJu3WzOn6vLqNb89kXXnjBbr0+ffoYi8Vi9u3bZ1smyfj4+Ngt+/3337OV91wZe+nSpc3Zs2dtyz///HMjyXz55Ze2Ze3atXN4fF+9H9Ztli1b1pw7d862fMKECUaSadKkid25effddxsfHx+7a5P1erds2TLbsri4OFOhQgXTrFkz27K8+I6yShdH1+erBQYGmgceeCDD8q+//tpIMitWrLjmNpzhbJokJSWZ1NRUu/89cOCA8fX1tTsv1q1bZySZGjVqZLhuZ3cbDRs2NCkpKbbld999t7FYLKZr165222jZsqXdsfLKK68YSebUqVOZ7ndelKmccfU1v2fPnsbPz8+ubLVz507j6emZIU8+fvy4KVWqlLnttttMcnKyadasmalSpYqJi4tz6nOduW40aNDA3HrrrRmW79ixw0gyc+fOveY2nOGoDDd16lRjsVjs0sJRW8LV9dvRo0cbi8Vitm3bZlt25swZU6pUqUzLuNeqW1nLxxEREXZ135YtWxqLxWIefPBB2zJrfeTK9P3xxx+NJPPBBx/Yxb5ixYoMy52NKbO6lzOs6Xh1HtKrVy9TunRpu2WOvpuIiAhTo0YNu2XurC9Y84QrzyVnOdPOkZ06Qrt27TLUk5OTk01YWJjp3bu3bVlm1+m0tDRz/fXXZzjWLly4YKpXr25uu+022zLr93j33Xdne7+taVapUiUTHx9vW/7JJ58YSebVV1+1Lbv6HLtyX688zrMqe2RW/p85c6aRZN5//33bspSUFNOyZUsTFBRkiy075Ya8llnsWV3PrO9deYznJp+7FmfaO3v27Gl8fHzs2n2PHTtmSpQoYdq2bWtbZs3vOnXqZPf/jz76qPH09LSVsU6ePGl8fHxM9+7d7dZ76qmnMpRlHKVHdurTTZs2NeXKlTNnzpyxLfv999+Nh4eHGTBggG1ZdvI2R/KzjdcY17bBXMu7775rJJkZM2ZkeM/6fbry2pWddkNrvevJJ590en+trGkdHh5uV4acNm2akWQ+//xz27LMritX54lZXY8zq6db2wmvLGeeP3/eVK9e3VSrVs1WHraeO/Xq1TPJycm2dV999VUjyWzfvj0be589zu6/s3mGMdm7bjhi/e5z0u5z5swZU65cOdOmTZtM17HWEf75559sb98YY7LdlXf69Gn9+OOPevvtt1WjRg3b3fnXEhoaqn/++SdPh4y3bNlS4eHhtr+rVKmiO++8UytXrswwBZDV6tWrde7cOd199906ffq07eXp6anmzZtr3bp1kqRTp07phx9+0AMPPKAqVarYbSM7PeFXO3jwYI4eWGkdEbdy5UqnhlM76+o71kaPHi1JWU5lsmTJErVp00YlS5a0S8NOnTopNTXVNp3osmXLZLFYHD4k0Zk0TEhI0IULFzRgwADNmjVLkZGRmjVrloYPH66PPvoo3x5SHxoaqsTERLupJK/mbBo4s63Q0FDt2LEjW/tj/X7Gjh1rt/yxxx6TpAxDmevXr2+7k0BKH+lTp06dTIfiZvWZY8aMsVv+yCOPZFj3yjvlLl26pDNnzqhWrVoKDQ3V1q1br/lZzp6nOXXls7E8PT114403yhijIUOG2JaHhoZmSKMlS5aoXr16qlu3rl1ct956qyRdMy5nz//ly5erRYsWdnc2li1b1uFQ+yvT+vz58zp9+rTatGljm57lWnK7T1mpX7++WrZsafvbekfdrbfeapevWpdb0/rs2bP69ttv1a9fP9s+nT59WmfOnFFERIT27t2ro0ePZvq5y5cvl5eXl90oME9PT1v+dqUr0y8pKUmnT5+2PZPKmWM1JiZGaWlp6tevn136hYWF6frrr8/TY9V6TAYGBqpfv3625XXq1FFoaGiGY9WZPMo6Zaf12VpZWbx4sd555x099thjuv76623LrVOpOLqr3M/PL8upVn744QdFR0fbRqYUdVOnTtWLL76ofv36qX///lqwYIEmT56sn376yW7Kz6IoISFBUvoc7F9//bX69euncePG6a233tL+/ftz9Wyr+vXra/Xq1frss89sc79bP+9K1apVU9u2bTVv3jwtW7ZMDzzwgKZMmaLXX389w7rWcyKnU1xlx4MPPmj3d5s2bezO57wsl1j17t07yxkermX58uXy9PTMUCZ47LHHZIzRN998Y7e8U6dOdnf4Nm7cWMHBwdkqh1jddddddnmWtXyTk21Z9e3b1272Cet16b777rObord58+ZKSUnJcA2qWLGi3V2q1ulttm3bZrvLMr++o2rVqskY49RD4i9evJhpXm19P684kya+vr62O0tTU1N15swZ2xSRjq7BAwcOzDAaI7vbGDBggN2d2s2bN5cxJsPzJJs3b64jR47o8uXLkmQb2fL5559nOrV+fpapMpOamqqVK1eqZ8+edmWrevXqKSIiIsP6YWFheuONN7R69Wq1adNGv/32m959990Mo9scMcY4Ne2hq46zK4+FxMREnT59WrfccouMMdmenmvFihVq2bKlmjZtaltWqlSpTKe5yk7dasiQIXZ1X+sxd2W9w1ofubosFxISottuu83ueAoPD1dQUFCG4ykv6nvOcHTNOnPmjN0U3Vd+N3FxcTp9+rTatWunv//+2zZF25Vxu6O+0L59exljcjRazpl2juzWEYKCguyeQezj46Obb77Zqe/vt99+0969e3XPPffozJkzts9KTExUx44d9cMPP2TIt67+HrNjwIABdtOo9+nTRxUqVLjmdLh5Zfny5QoLC9Pdd99tW+bt7a0xY8YoISFB33//vd36+VFuyC1H1zNH8jKfu5Iz7Z2pqalatWqVevbsqRo1atjer1Chgu655x6tX78+w9T8w4YNs8vv2rRpo9TUVB06dEhS+ig26wwFV67nqE0pN44fP67ffvtNgwYNUqlSpWzLGzdurNtuu83hsepM3uZIQWvjzWme6oxly5apTJkyDttVrN+nK69dOWk3dHamIEeGDRtmV4Z86KGH5OXl5dK87+abb7abfjgoKEjDhg3TwYMHM0x7P3jwYLvRuAUh77vatfKMvLBgwQIZY7I9Wi4tLU333nuvzp07p9deey3T9dq0aSOLxaJnnnlGe/fuzfb5nO2pLG+88UYdOnRIFSpU0IoVK5zupBo/frzWrFmjm2++WbVq1VLnzp11zz33qFWrVtkNwebKhkGr2rVr68KFCzp16pTDZ75YOz8yawC0VkqsB2pWU2K6UvXq1TV27FjNmDFDH3zwgdq0aaMePXrYnpOVU1enYc2aNeXh4ZHlhWXv3r36448/Mm0sOHnypKT0uZYrVqxodyHMDmsh5MoClyTdc889evPNN7Vx40aHx0BujRgxQp988om6du2qSpUqqXPnzurXr5+6dOliW8fZNHBmW5MmTdKdd96p2rVrq2HDhurSpYvuv/9+NW7cONMYDx06JA8PD9WqVctueVhYmEJDQzNkYlcXtqT0Rser50POivUzrx46X6dOnQzrXrx4UVOnTtX8+fN19OhRu+kxrq6MOeLseZpTV6dHSEiI/Pz8MgxNDgkJsXvW2N69e/XXX39d83vPrUOHDmWYFkJynNY7duzQM888o2+//TZDodHZtM6vfXKUzpIyTF9kXW49Hvft2ydjjJ599lk9++yzmcZVqVIlh+9Zr1FXT23hKP3Onj2r6OhoffTRRxn21dn0M8ZkmhflZnoU6/MqrhQSEqLrrrsuw7U3JCTE7nx2No+yuvIcdeTHH3/UkCFDFBERYZvaxMqaVzt6NlFSUlKmlc5du3apV69eatiwod5+++0sP78oe/TRR/Xss89qzZo16t+/v7vDyTfW46Bfv352Uzz07dtX999/vzZs2GDX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goODVaZMmQzPqJg9e3am233jjTfs/rbOm9q1a9dM/6dfv37auHGjVq5cmeG9c+fO2eLs3bu3jDG2EZFXujoNHaWf9RlKV1e03377bXl5eal9+/aZxpgbVx+rHh4etkKmNa2dTQNntnX1OkFBQapVq5bDKWCsrBn/zJkz7ZZb79Dt3r175juYQ9ZjYtasWXbLr45BSr/r4eo7HF577bUMd0lkdv44e55mtY380K9fPx09elRvvfVWhvcuXryoxMTELP/f2fO/W7du+vnnn7V582bbslOnTmW468iaz12Z1ikpKQ7P+cDAQIfTXWRnnzI7V/NauXLl1L59e7355psOL+BXfv+XLl3Srl277Nbr1q2bLl++rDlz5tiWpaamZpgX2lH6SY6P6cyOs8jISHl6eio6OjrDdowxdud3Zt9BfnA2j/L29taNN95ou3P+SidOnFDnzp3l4eGhlStXZtpx0qBBA9WtW1fz5s2zO8fnzJkji8WiPn362JYlJiaqW7duOnr0qJYvX54v0xEXVElJSTp//nyG5c8//7yMMXbTEhZF7du3t909aZ3OTEqf8916R3B2nTt3zuE1wjo16o033mhbVrt2bW3bts3WMWD14Ycf2l2brX799VdZLBaHU5u5Wl6WS7KSnetpt27dlJqamuH5fK+88oosFkuW5UhXqFmzpnbt2mV3vfj999/1008/5cvnHTt2zK6+Eh8fr/fee09Nmza13cGbF9+RI46ug5np06ePYmNjFRMTY1t2+vRpLVmyRHfccYfD54LllDNp4qi8uGTJkiyfC3W1vNiGMxyNarZ2MF15Hrq6TOXp6amIiAh99tlndnXWv/76y+GxtnTpUn388cd68cUX9eSTT6p///565plnMuSNjuzatStDvdiRPn36KDU1VfPmzbMtS05O1vz589W8efM8GTnoqAxnjNGrr76ao+1FRERo48aN+u2332zLzp49m+kd/67Qr18/paam6vnnn8/w3uXLl3N0/Lii3uTou4mLi9P8+fPz9HOyU19wxPo87pw8S9aZdo7s1BGcldn3Fx4erpo1a+rll192+Izda6VFdr333nt2ZdqlS5fq+PHjdtf+mjVr6ueff1ZKSopt2VdffaUjR47YbSurYzKzulO3bt104sQJffzxx7Zlly9f1muvvaagoCC1a9cux/uWV/Ki3pfX+dyVnGnv9PT0VOfOnfX555/bTdUXGxurxYsXq3Xr1tme4rFTp07y9vbWa6+9ZrdfjurfjjibrhUqVFDTpk21cOFCu2Przz//1KpVq+w6UnIrP9t4Jde1wTijd+/eOn36tMPnc1u/T1deu7LTbpgX5s2bZ/c5c+bM0eXLlzPkfVe3yV/dTiJdO+9ztLxbt27avHmzNm7caFuWmJioefPmqVq1aqpfv35OditPObv/uZHdsszx48e1a9cuh8fI1T7++GONGTNG9957b6YzYFzN+kihnJZvczwfnPXOFGeHF3bu3FlhYWFq1aqVypcvr7/++kuvv/66unfvbrvTtn///ho/frx69eqlMWPG6MKFC5ozZ45q167t8OHdDRs2VEREhMaMGSNfX19bY7SjApJVcHCw5syZo/vvv1833HCD+vfvr7Jly+rw4cP6+uuv1apVK1smM2vWLLVu3Vo33HCDhg0bpurVq+vgwYP6+uuvbYV26x3gTz/9tPr37y9vb2/dcccdmd59YZ3DP7tz0H777bcaNWqU+vbtq9q1a+vy5ctatGiRPD091bt3b9t6Q4cO1YsvvqihQ4fqxhtv1A8//JBlRevAgQPq0aOHunTpoo0bN+r999/XPffck+X8qY8//ri++OIL3X777Ro0aJDCw8OVmJio7du3a+nSpTp48KDKlCmjDh066P7779esWbO0d+9e29RwP/74ozp06KBRo0bZ0nDNmjWaMWOGKlasqOrVq6t58+Zq1qyZHnjgAb377ru6fPmy2rVrp++++05LlizRhAkTrjkNivVu3Oym9dChQ3X27Fndeuutuu6663To0CG99tpratq0qe3OeWfTwJlt1a9fX+3bt1d4eLhKlSqlX375RUuXLrWljyNNmjTRwIEDNW/ePNt0hps3b9bChQvVs2dPu7s48krTpk119913a/bs2YqLi9Mtt9yitWvXOryT9Pbbb9eiRYsUEhKi+vXra+PGjVqzZk2GZ300bdpUnp6eeumllxQXFydfX1/deuutKleunNPnqfUcHDNmjCIiIuTp6Zlvz2m6//779cknn+jBBx/UunXr1KpVK6WmpmrXrl365JNPtHLlSruG4Ks5e/4/8cQTWrRokbp06aKHH35YgYGBmjdvnu3uQKtbbrlFJUuW1MCBAzVmzBhZLBYtWrTIYb4cHh6ujz/+WGPHjtVNN92koKAg3XHHHdnap8zO1fzwxhtvqHXr1mrUqJH+7//+TzVq1FBsbKw2btyof/75R7///ruk9NE39erV08CBA7VgwQJJ0h133KFWrVrpySef1MGDB1W/fn3FxMRkKMQHBwerbdu2mjZtmi5duqRKlSpp1apVDkePZZbX16xZUy+88IImTJiggwcPqmfPnipRooQOHDigTz/9VMOGDdO4ceOy/A7yg7N5lJT+TK6nn346w53tXbp00d9//60nnnhC69ev1/r1623vlS9f3q4jZfr06erRo4c6d+6s/v37688//9Trr7+uoUOH2o04uvfee7V582Y98MAD+uuvv/TXX3/Z3gsKClLPnj1tf//xxx/64osvJKXfsR4XF2e7c7BJkyZ2aedsfh8XF2froLU20L/++usKDQ1VaGioXb47aNAgLVy4UAcOHLjmg4Jff/11nTt3zjai+8svv9Q///wjKX1q35CQEJ04cULNmjXT3Xffrbp160pKf9j38uXL1aVLF915551228yPffrhhx9sBeVTp04pMTHRlqbWGRGsLBaL7bqblUOHDmnRokWSZOvgtW6zatWqtqkffH19NX36dA0cOFBt27bV/fffr8OHD+vVV19VmzZtFBkZadvmd999pw4dOlxzfvbvvvtOY8aMUZ8+fXT99dcrJSVFP/74o2JiYnTjjTfqvvvus637+OOP65tvvlGbNm00atQolS5dWl999ZW++eYbDR06NEOZYvXq1WrVqlWG65az6ZKX8rJckpWaNWsqNDRUc+fOVYkSJRQYGKjmzZs7fA7KHXfcoQ4dOujpp5/WwYMH1aRJE61atUqff/65HnnkEadn08gvDzzwgGbMmKGIiAgNGTJEJ0+e1Ny5c9WgQYMMz2PNC7Vr19aQIUO0ZcsWlS9fXu+++65iY2PtGqLz4jtyxNF1MDN9+vRRixYtNHjwYO3cuVNlypTR7NmzlZqamqH+lJ080BFn0uT222/XpEmTNHjwYN1yyy3avn27PvjgA7u76K8lL7bhjEmTJumHH35Q9+7dVbVqVZ08eVKzZ8/Wddddp9atW0vKXjkxL8tU0dHRWrFihdq0aaMRI0bYGqgbNGhgV248efKkHnroIbt62Ouvv65169Zp0KBBWr9+fZZTPNWrV8+p/K958+bq27evJkyYoJMnT6pWrVpauHChDh48mOGGy4kTJyo6Olrr1q3L1k2XdevWVc2aNTVu3DgdPXpUwcHBWrZsWY6nRX7iiSf0/vvv67bbbtPo0aMVGBiot99+W1WqVNHZs2fdMmKhXbt2Gj58uKZOnarffvtNnTt3lre3t/bu3aslS5bo1Vdftbv5yRlZ1b3ySufOnW2jvIcPH66EhAS99dZbKleuXJ7eMS85X19wZPPmzU6VNRxxpp0jO3UEZ2V1nX777bfVtWtXNWjQQIMHD1alSpV09OhRrVu3TsHBwfryyy+z9VlZKVWqlFq3bq3BgwcrNjZWM2fOVK1atfR///d/tnWGDh2qpUuXqkuXLurXr5/279+v999/P0P5IKt9yqzuNGzYML355psaNGiQfv31V1WrVk1Lly7VTz/9pJkzZ+bZFPk5zZ+kvKn35XU+dzVn2jtfeOEFrV69Wq1bt9aIESPk5eWlN998U8nJyZo2bVq2P7Ns2bIaN26cpk6dqttvv13dunXTtm3b9M033zhVBspOuk6fPl1du3ZVy5YtNWTIEF28eFGvvfaaQkJCsn3OZyW/23hd2QZzLQMGDNB7772nsWPHavPmzWrTpo0SExO1Zs0ajRgxQnfeeafLr13OthvmhZSUFHXs2FH9+vXT7t27NXv2bLVu3Vo9evSwrTN06FA9+OCD6t27t2677Tb9/vvvWrlyZYbjO6t9Cg8P15w5c/TCCy+oVq1aKleunG699VY9+eST+vDDD9W1a1eNGTNGpUqVspXVly1blmfTdOamDuDs/udGduqskjRhwgSn9mfz5s0aMGCASpcurY4dO2a4OeuWW25xWL+wtr/mOP1NDr333ntGkvnxxx+dWv/NN980bdu2NaVLlza+vr6mZs2a5vHHHzdxcXF2661atco0bNjQ+Pj4mDp16pj333/fREVFmatDlWRGjhxp3n//fXP99dcbX19f06xZM7Nu3Tq79ebPn28kmQMHDtgtX7dunYmIiDAhISHGz8/P1KxZ0wwaNMj88ssvduv9+eefplevXiY0NNT4+fmZOnXqmGeffdZuneeff95UqlTJeHh4OPysK1WtWtVUrVrVqTS70t9//20eeOABU7NmTePn52dKlSplOnToYNasWWO33oULF8yQIUNMSEiIKVGihOnXr585efKkkWSioqJs61nTdOfOnaZPnz6mRIkSpmTJkmbUqFHm4sWLGWIeOHCg3bLz58+bCRMmmFq1ahkfHx9TpkwZc8stt5iXX37ZpKSk2Na7fPmymT59uqlbt67x8fExZcuWNV27djW//vqrbZ1du3aZtm3bGn9/fyPJ7rNSUlLMxIkTTdWqVY23t7epVauWeeWVV5xKszJlypgWLVo4te6Vli5dajp37mzKlStnfHx8TJUqVczw4cPN8ePHs50GzmzrhRdeMDfffLMJDQ01/v7+pm7dumby5Ml26ejoHLh06ZKJjo421atXN97e3qZy5cpmwoQJJikpyW69qlWrmu7du2fYz3bt2pl27dplK20uXrxoxowZY0qXLm0CAwPNHXfcYY4cOZLh+Pr333/N4MGDTZkyZUxQUJCJiIgwu3btcngsvfXWW6ZGjRrG09PTSLI7h505Ty9fvmxGjx5typYtaywWi106ZXbcnzp1yi6GgQMHmsDAQIdp1KBBA7tlKSkp5qWXXjINGjQwvr6+pmTJkiY8PNxER0dnyM+ulp3z/48//jDt2rUzfn5+plKlSub5558377zzToY85qeffjItWrQw/v7+pmLFiuaJJ54wK1euzJCWCQkJ5p577jGhoaFGkl0czu5TZueqo3w2s+POmndf6cCBA0aSmT59ut3y/fv3mwEDBpiwsDDj7e1tKlWqZG6//XazdOnSDP979XF15swZc//995vg4GATEhJi7r//frNt2zYjycyfP9+23j///GPL40NCQkzfvn3NsWPHMhw7xmSd1y9btsy0bt3aBAYGmsDAQFO3bl0zcuRIs3v37mt+B9Z9uDKu7ByTxjhOb2fz6djYWOPl5WUWLVpk9/+SMn05yjs+/fRT07RpU+Pr62uuu+4688wzz9h9jjXOzLZ59blhPa4cva7+vp3N761p7czn9+7d2/j7+5t///33mtvNar+sx8m///5r7rvvPlOrVi0TEBBgfH19TYMGDcyUKVMypFN+7ZM1D3T0uvJ4P3/+vJFk+vfvf83PX7duXbaOkw8//NA0adLE+Pr6mvLly5tRo0aZ+Ph4u3W+/PJLI8nMnTs3y8/et2+fGTBggKlRo4bx9/c3fn5+pkGDBiYqKsokJCRkWH/Tpk2ma9eutjyldu3aZvLkyebSpUt26507d874+PiYt99+2255dtLlatk5z6++5udluSSz/Nbq888/N/Xr1zdeXl528Q4cODDD8XT+/Hnz6KOPmooVKxpvb29z/fXX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B6aioqJQrD3//PMZNGjQVu9n5cqVaW9vT11dXZfxurq6vPbaax+53erVq3PwwQentbU1VVVVue+++wrl4L83Y8aMTJ8+faszAQAAAADsThRzAGXuxhtvzHHHHZdly5bloosuSnV1dZKkqqoq3/zmN3f68Xv37p3Fixdn7dq1aWpqSmNjYw4//PCcccYZm607ZcqUNDY2Fp6vWbMm/fv33+kZAQAAAAB2BYo5gDJ12WWX5bzzzsu4ceNy4YUXbvb6hAkTtml/ffv2TVVVVZYvX95lfPny5YV72G1JZWVlBg4cmCQZOnRoXn311cyYMWOLxVx1dXWhOAQAAAAA2NO4xxxAmRo4cGBuvfXW9OvXL2effXbuv//+/O53v9vu/fXo0SPDhw9PU1NTYayjoyNNTU0ZPXr0Vu+no6Mjra2t250DAAAAAGB3pZgDKFNTp07NwoUL85vf/CbnnntuHnvssRxxxBEZPnx4brrppixevHib99nY2JgHHnggDz/8cF599dVcccUVaWlpSUNDQ5IPZulNmTKlsP6MGTPy1FNP5V//9V/z6quv5s4778z3vve9fPnLX95RbxMAAAAAYLfhUpYAZe6QQw7JlVdemSuvvDJ/+MMf8o//+I/5n//zf+Yzn/lMevfunXPPPTdXXHFFjj322D+5r4svvjjvvvtupk6dmubm5gwdOjRz585NXV1dkmTp0qWprPy3v+loaWnJlVdemd/+9rfZa6+9MmjQoPzd3/1dLr744p32fgH2ZD169Mi9995bWAYAAADKS0VnZ2dnqUMAsOO1t7dn3rx5+V//63/l+OOPz+WXX17qSJtZs2ZN+vTpk9WrV2fvvfcudRwAAKBMLVq0KMOHD0/9hLtTXT+wMN7a/EaaH746CxcuzIknnljChAAAHzBjDqDMrV+/Pp2dnamtrU2SLFmyJD/5yU8yePDgjB07NmeddVaJEwIAAAAAkLjHHEDZO++88/LII48kSd5///2MHDkyd955Z84777zcf//9JU4HwI704WzoefPmpb29vdRxAAAAgG2kmAMoc4sWLcppp52WJPnRj36U+vr6LFmyJI888kjuueeeEqcDYEfasGFDzjzzzJx55pnZsGFDqeMAAAAA20gxB1Dm1q1bl969eydJnnzyyVxwwQWprKzMySefnCVLlpQ4HQAAAAAAH1LMAZS5gQMH5rHHHsuyZcvyxBNPZOzYsUmSFStWZO+99y5xOgAAAAAAPqSYAyhzU6dOzbXXXpsBAwZk5MiRGT16dJIPZs8NGzasxOkAAAAAAPhQt1IHAOCTufDCC3PqqafmnXfeyZAhQwrjZ511Vj7/+c+XMBkAAAAAAH/MjDmA3UB9fX169+6dp556KuvXr0+SnHTSSRk0aFCJkwEAAAAA8CHFHECZW7VqVc4666wcddRR+fM///O88847SZKvfOUr+cY3vlHidAAAAAAAfEgxB1DmrrnmmnTv3j1Lly5NbW1tYfziiy/O3LlzS5gMgB2te/fumTlzZmbOnJnu3buXOg4AAACwjdxjDqDMPfnkk3niiSdyyCGHdBk/8sgjs2TJkhKlAmBn6NGjR6677rpSxwAAAAC2kxlzAGWupaWly0y5D7333nuprq4uQSIAAAAAALZEMQdQ5k477bQ88sgjhecVFRXp6OjIzJkzc+aZZ5YwGQA7Wnt7e37xi1/kF7/4Rdrb20sdBwAAANhGLmUJUOZmzpyZs846Ky+88ELa2tpy/fXX5+WXX857772XZ599ttTxANiBNmzYkJEjRyZJ1q5dm549e5Y4EQAAALAtzJgDKHPHHXdc/uVf/iWnnnpqzjvvvLS0tOSCCy7Iiy++mCOOOKLU8QAAAAAA+P+ZMQdQ5p5++umceeaZ+da3vrXZa7NmzcpVV11VglQAAAAAAPx7ZswBlLkLLrggCxcu3Gz8O9/5TqZMmVKCRAAAAAAAbIliDqDM3X777Tn77LPz2muvFcbuvPPOTJ06NY8//ngJkwEAAAAA8MdcyhKgzF1++eV57733MmbMmDzzzDOZM2dObr311vzsZz/Lf/gP/6HU8bbK4sWL06tXry5jffv2zac+9amt3sfSpUuzcuXKzcY/bj/bs8227Ke1tTXV1dWfeP9QbDv7Z+Oj9lOq48LWcm7tufzb71g+T8qB8/QD5fI5lEtOAEgUcwC7heuvvz6rVq3KiBEj0t7enieeeCInn3xyqWNttdNPP32zsZq9avP6a69u1S9RS5cuzdGDjsmG9eu2ej/bs822HjsVlUlnxyfaPxRbMX42trSfUh0XtpZza8/l337H8nlSDpynHyiXz6FccgLAhxRzAGXonnvu2Wzs4IMPTm1tbT796U9nwYIFWbBgQZLka1/7WrHjbbN9x01Odf3AwvONq5Zl1U/vzMqVK7fqF6iVK1dmw/p12f9z30j3/ftv1X62Z5ttOfb6f30hq//v333i/UOx7eyfjY/aT6mOW266d++eadOmFZYpnt393OKj+bffsXyelAPn6QfK5XMol5wA8CHFHEAZ+q//9b9ucbyqqirPPvtsnn322SRJRUVFWRRz3fc7pEsxt9372b//Nu9ne7bZmv1sXLVsh+4fim1n/WzsqsctFz169MiNN95Y6hh7tN313OJP82+/Y/k8KQfO0w+Uy+dQLjkBQDEHUIbeeuutUkcAAAAAAGAbKeYAAKBMdHR05NVXX02SHHPMMamsrCxxIgAAAGBbKOYAylBjY2Nuvvnm9OzZM42NjR+77l133VWkVADsbOvXr89xxx2XJFm7dm169uxZ4kQAAADAtlDMAZShF198MRs3biwsf5SKiopiRQIAAAAA4E9QzAGUoaeffnqLywAAAAAA7LrclAJgN7Js2bIsW7as1DEAAAAAANgCxRxAmdu0aVO+/e1vp0+fPhkwYEAGDBiQPn365IYbbihc7hIAAAAAgNJzKUuAMvfVr341P/7xjzNz5syMHj06STJ//vzceOONWbVqVe6///4SJwQAAAAAIFHMAZS9H/zgB3n00Udz9tlnF8ZOOOGE9O/fP5deeqliDgAAAABgF6GYAyhz1dXVGTBgwGbjhx12WHr06FH8QADsNN27d8+1115bWAYAAADKi2IOoMxNnjw5N998c/72b/821dXVSZLW1tbccsstmTx5conTAbAj9ejRI7fffnupYwAAAADbSTEHUOZefPHFNDU15ZBDDsmQIUOSJL/85S/T1taWs846KxdccEFh3R//+MeligkAAAAAsMdTzAGUuX322Sdf+MIXuoz179+/RGkA2Jk6OjqydOnSJMmnPvWpVFZWljgRAAAAsC0UcwBl7r777ktHR0d69uyZJHn77bfz2GOP5Zhjjsm4ceNKnA6AHWn9+vU57LDDkiRr164tfPcDAAAA5cGf2AKUufPOOy/f+973kiTvv/9+Tj755Nx55505//zzc//995c4HQAAAAAAH1LMAZS5RYsW5bTTTkuS/OhHP0pdXV2WLFmSRx55JPfcc0+J0wEAAAAA8CHFHECZW7duXXr37p0kefLJJ3PBBReksrIyJ598cpYsWVLidAAAAAAAfEgxB1DmBg4cmMceeyzLli3LE088kbFjxyZJVqxYkb333rvE6QAAAAAA+JBiDqDMTZ06Nddee20GDBiQUaNGZfTo0Uk+mD03bNiwEqcDAAAAAOBD3UodAIBP5sILL8ypp56ad955J0OGDCmMn3XWWfn85z9fwmQAAAAAAPwxM+YAdgP19fUZNmxYKiv/7Wt95MiRGTRo0Dbva9asWRkwYEBqamoyatSoLFiw4CPXfeCBB3Laaadl3333zb777psxY8Z87PoAfDLdunXLlVdemSuvvDLduvkbOwAAACg3ijkACubMmZPGxsZMmzYtixYtypAhQzJu3LisWLFii+vPmzcvl156aZ5++unMnz8//fv3z9ixY/O73/2uyMkB9gzV1dWZNWtWZs2alerq6lLHAQAAALaRYg6AgrvuuiuTJk1KQ0NDBg8enNmzZ6e2tjYPPvjgFtf//ve/nyuvvDJDhw7NoEGD8j/+x/9IR0dHmpqaipwcAAAAAGDXp5gDIEnS1taWhQsXZsyYMYWxysrKjBkzJvPnz9+qfaxbty4bN27Mfvvtt8XXW1tbs2bNmi4PALZeZ2dn3n333bz77rvp7OwsdRwAAABgGynmAEiSrFy5Mu3t7amrq+syXldXl+bm5q3ax1/8xV/koIMO6lLu/bEZM2akT58+hUf//v0/cW6APcm6detywAEH5IADDsi6detKHQcAAADYRoo5AHaI2267LY8++mh+8pOfpKamZovrTJkyJatXry48li1bVuSUAAAAAACl063UAQDYNfTt2zdVVVVZvnx5l/Hly5envr7+Y7e94447ctttt+Wf/umfcsIJJ3zketXV1amurt4heQEAAAAAyo0ZcwAkSXr06JHhw4enqampMNbR0ZGmpqaMHj36I7ebOXNmbr755sydOzcjRowoRlQAAAAAgLJkxhwABY2NjZkwYUJGjBiRkSNH5u67705LS0saGhqSJJdddlkOPvjgzJgxI0ny13/915k6dWp+8IMfZMCAAYV70fXq1Su9evUq2fsAAAAAANgVKeYAKLj44ovz7rvvZurUqWlubs7QoUMzd+7c1NXVJUmWLl2aysp/m2x9//33p62tLRdeeGGX/UybNi033nhjMaMDAAAAAOzyFHMAdDF58uRMnjx5i6/Nmzevy/O333575wcCAAAAANhNKOYAAKBMdOvWLRMmTCgsAwAAAOXFb/MAAFAmqqur89BD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6jgAAADANnKPOQAAKBPt7e352c9+VlgGAAAAyosZcwAAAAAAAFAEijkAAAAAAAAoAsUcAF3MmjUrAwYMSE1NTUaNGpUFCxZ87Pr/8A//kEGDBqWmpibHH3984RJrAAAAAAB0pZgDoGDOnDlpbGzMtGnTsmjRogwZMiTjxo3LihUrtrj+c889l0svvTRf+cpX8uKLL+b888/P+eefn5deeqnIyQEAAAAAdn2KOQAK7rrrrkyaNCkNDQ0ZPHhwZs+endra2jz44INbXP873/lOPvvZz+a6667LMccck5tvvjknnnhi7r333iInBwAAAADY9XUrdQAAdg1tbW1ZuHBhpkyZUhirrKzMmDFjMn/+/C1uM3/+/DQ2NnYZGzduXB577LEtrt/a2prW1tbC89WrV39w7BX/2mW9je/9NkmycOHCrF27tstrlZWV6ejo6DL2+uuvf7D/5jfS0bZhq/azPdts07FXLdsh+ze++4zvipl21M/TjthPqY77UfvZVcfXrVtXeP7ss8+mpqam7M+5chnf3c+t3fH7bEeN+7ffsePb83nuau/B+K45viN/Vv3cf6BcPoftyTl06ND07t07FRUVmx0DAHa2is7Ozs5ShwCg9H7/+9/n4IMPznPPPZfRo0cXxq+//vr88z//c55//vnNtunRo0cefvjhXHrppYWx++67L9OnT8/y5cs3W//GG2/M9OnTd84bAAAAgK20evXq7L333qWOAcAeyIw5AIpmypQpXWbYdXR05L333sv+++9fsr9UXLNmTfr3759ly5b5pYwdyrnFzuLcYmdxbrGzOLfYWZxbfBK9e/cudQQA9lCKOQCSJH379k1VVdVmM92WL1+e+vr6LW5TX1+/TetXV1enurq6y9g+++yz/aF3oL333tsv8+wUzi12FucWO4tzi53FucXO4twCAMpJZakDALBr6NGjR4YPH56mpqbCWEdHR5qamrpc2vKPjR49usv6SfLUU0995PoAAAAAAHsyM+YAKGhsbMyECRMyYsSIjBw5MnfffXdaWlrS0NCQJLnsssty8MEHZ8aMGUmSr3/96zn99NNz55135pxzzsmjjz6aF154Id/97ndL+TYAAAAAAHZJijkACi6++OK8++67mTp1apqbmzN06NDMnTs3dXV1SZKlS5emsvLfJlufcsop+cEPfpAbbrghf/mXf5kjjzwyjz32WI477rhSvYVtVl1dnWnTpm12iU34pJxb7CzOLXYW5xY7i3OLncW5BQCUo4rOzs7OUocAAAAAAACA3Z17zAEAAAAAAEARKOYAAAAAAACgCBRzAAAAAAAAUASKOQAAAAAAACgCxRwAe6xbbrklp5xySmpra7PPPvtscZ2lS5fmnHPOSW1tbQ444IBcd9112bRpU3GDUvYGDBiQioqKLo/bbrut1LEoQ7NmzcqAAQNSU1OTUaNGZcGCBaWOxG7gxhtv3Ow7atCgQaWORRn6+c9/nnPPPTcHHXRQKioq8thjj3V5vbOzM1OnTs2BBx6YvfbaK2PGjMlvfvOb0oSlrPypc2vixImbfY999rOfLU1YAIA/QTEHwB6rra0tF110Ua644ootvt7e3p5zzjknbW1tee655/Lwww/noYceytSpU4uclN3BTTfdlHfeeafw+OpXv1rqSJSZOXPmpLGxMdOmTcuiRYsyZMiQjBs3LitWrCh1NHYDxx57bJfvqGeeeabUkShDLS0tGTJkSGbNmrXF12fOnJl77rkns2fPzvPPP5+ePXtm3Lhx2bBhQ5GTUm7+1LmVJJ/97Ge7fI/98Ic/LGJCAICt163UAQCgVKZPn54keeihh7b4+pNPPplXXnkl//RP/5S6uroMHTo0N998c/7iL/4iN954Y3r06FHEtJS73r17p76+vtQxKGN33XVXJk2alIaGhiTJ7Nmz8/jjj+fBBx/MN7/5zRKno9x169bNdxSf2Nlnn52zzz57i691dnbm7rvvzg033JDzzjsvSfLII4+krq4ujz32WC655JJiRqXMfNy59aHq6mrfYwBAWTBjDgA+wvz583P88cenrq6uMDZu3LisWbMmL7/8cgmTUY5uu+227L///hk2bFhuv/12l0Rlm7S1tWXhwoUZM2ZMYayysjJjxozJ/PnzS5iM3cVvfvObHHTQQTn88MPzpS99KUuXLi11JHYzb731Vpqbm7t8j/Xp0yejRo3yPcYOMW/evBxwwAE5+uijc8UVV2TVqlWljgQAsEVmzAHAR2hubu5SyiUpPG9ubi5FJMrU1772tZx44onZb7/98txzz2XKlCl55513ctddd5U6GmVi5cqVaW9v3+J30muvvVaiVOwuRo0alYceeihHH3103nnnnUyfPj2nnXZaXnrppfTu3bvU8dhNfPh/py19j/l/FZ/UZz/72VxwwQU57LDD8uabb+Yv//Ivc/bZZ2f+/PmpqqoqdTwAgC4UcwDsVr75zW/mr//6rz92nVdffTWDBg0qUiJ2V9tyrjU2NhbGTjjhhPTo0SP/5b/8l8yYMSPV1dU7OyrAx/rjy8OdcMIJGTVqVA499ND8/d//fb7yla+UMBnA1vnjS6Eef/zxOeGEE3LEEUdk3rx5Oeuss0qYDABgc4o5AHYr3/jGNzJx4sSPXefwww/fqn3V19dnwYIFXcaWL19eeI092yc510aNGpVNmzbl7bffztFHH70T0rG76du3b6qqqgrfQR9avny57yN2uH322SdHHXVU3njjjVJHYTfy4XfV8uXLc+CBBxbGly9fnqFDh5YoFburww8/PH379s0bb7yhmAMAdjmKOQB2K/369Uu/fv12yL5Gjx6dW265JStWrMgBBxyQJHnqqaey9957Z/DgwTvkGJSvT3KuLV68OJWVlYXzCv6UHj16ZPjw4Wlqasr555+fJOno6EhTU1MmT55c2nDsdtauXZs333wz48ePL3UUdiOHHXZY6uvr09TUVCji1qxZk+effz5XXHFFacOx2/ntb3+bVatWdSmBAQB2FYo5APZYS5cuzXvvvZelS5emvb09ixcvTpIMHDgwvXr1ytixYzN48OCMHz8+M2fOTHNzc2644YZcddVVLj/IVps/f36ef/75nHnmmendu3fmz5+fa665Jl/+8pez7777ljoeZaSxsTETJkzIiBEjMnLkyNx9991paWlJQ0NDqaNR5q699tqce+65OfTQQ/P73/8+06ZNS1VVVS699NJSR6PMrF27tstMy7feeiuLFy/Ofvvtl0996lO5+uqr81d/9Vc58sgjc9hhh+Xb3/52DjrooMIfHMBH+bhza7/99sv06dPzhS98IfX19XnzzTdz/fXXZ+DAgRk3blwJUwMAbFlFZ2dnZ6lDAEApTJw4MQ8//PBm408//XTOOOOMJMmSJUtyxRVXZN68eenZs2cmTJiQ2267Ld26+dsWts6iRYty5ZVX5rXXXktra2sOO+ywjB8/Po2NjQpettm9996b22+/Pc3NzRk6dGjuueeejBo1qtSxKHOXXHJJfv7zn2fVqlXp169fTj311Nxyyy054ogjSh2NMjNv3ryceeaZm41PmDAhDz30UDo7OzNt2rR897vfzfvvv59TTz019913X4466qgSpKWcfNy5df/99+f888/Piy++mPfffz8HHXRQxo4dm5tvvjl1dXUlSAsA8PEUcwAAAAAAAFAElaUOAAAAAAAAAHsCxRwAAAAAAAAUgWIOAAAAAAAAikAxBwAAAAAAAEWgmAMAAAAAAIAiUMwBAAAAAABAESjmAAAAAAAAoAgUcwAAAAAAAFAEijkAAIAimThxYs4///ySHX/8+PG59dZbt2rdSy65JHfeeedOTgQAALBnqejs7OwsdQgAAIByV1FR8bGvT5s2Lddcc006Ozuzzz77FCfUH/nlL3+Zz3zmM1myZEl69er1J9d/6aWX8ulPfzpvvfVW+vTpU4SEAAAAuz/FHAAAwA7Q3NxcWJ4zZ06mTp2a119/vTDWq1evrSrEdpbLL7883bp1y+zZs7d6m5NOOikTJ07MVVddtROTAQAA7DlcyhIAAGAHqK+vLzz69OmTioqKLmO9evXa7FKWZ5xxRr761a/m6quvzr777pu6uro88MADaWlpSUNDQ3r37p2BAwfmH//xH7sc66WXXsrZZ5+dXr16pa6uLuPHj8/KlSs/Mlt7e3t+9KMf5dxzz+0yft999+XII49MTU1N6urqcuGFF3Z5/dxzz82jjz76yT8cAAAAkijmAAAASurhhx9O3759s2DBgnz1q1/NFVdckYsuuiinnHJKFi1alLFjx2b8+PFZt25dkuT999/PZz7zmQwbNiwvvPBC5s6dm+XLl+eLX/ziRx7jV7/6VVavXp0RI0YUxl544YV87Wtfy0033ZTXX389c+fOzac//eku240cOTILFixIa2vrznnzAAAAexjFHAAAQAkNGTIkN9xwQ4488shMmTIlNTU16du3byZNmpQjjzwyU6dOzapVq/KrX/0qSXLvvfdm2LBhufXWWzNo0KAMGzYsDz74YJ5++un8y7/8yxaPsWTJklRVVeWAAw4ojC1dujQ9e/bM5z73uRx66KEZNmxYvva1r3XZ7qCDDkpbW1uXy3QCAACw/RRzAAAAJXTCCScUlquqqrL//vvn+OOPL4zV1dUlSVasWJEk+eUvf5mnn366cM+6Xr16ZdCgQUmSN998c4vHWL9+faqrq1NRUVEY+7M/+7MceuihOfzwwzN+/Ph8//vfL8zK+9Bee+2VJJuNAwAAsH0UcwAAACXUvXv3Ls8rKiq6jH1YpnV0dCRJ1q5dm3PPPTeLFy/u8vjNb36z2aUoP9S3b9+sW7cubW1thbHevXtn0aJF+eEPf5gDDzwwU6dOzZAhQ/L+++8X1nnvvfeSJP369dsh7xUAAGBPp5gDAAAoIyeeeGJefvnlDBgwIAMHDuzy6Nmz5xa3GTp0aJLklVde6TLerVu3jBkzJjNnzsyvfvWrvP322/k//+f/FF5/6aWXcsghh6Rv37477f0AAADsSRRzAAAAZeSqq67Ke++9l0svvTS/+MUv8uabb+aJJ55IQ0ND2tvbt7hNv379cuKJJ+aZZ54pjP30pz/NPffck8WLF2fJkiV55JFH0tHRkaOPPrqwzv/9v/83Y8eO3envCQAAYE+hmAMAACgjBx10UJ599tm0t7dn7NixOf7443P11Vdnn332SWXlR/+Kd/nll+f73/9+4fk+++yTH//4x/nMZz6TY445JrNnz84Pf/jDHHvssUmSDRs25LHHHsukSZN2+nsCAADYU1R0dnZ2ljoEAAAAO9f69etz9NFHZ86cORk9evSfXP/+++/PT37ykzz55JNFSAcAALBnMGMOAABgD7DXXnvlkUceycqVK7dq/e7du+e//bf/tpNTAQAA7FnMmAMAAAAAAIAiMGMOAAAAAAAAikAxBwAAAAAAAEWgmAMAAAAAAIAiUMwBAAAAAABAESjmAAAAAAAAoAgUcwAAAAAAAFAEijkAAAAAAAAoAsUcAAAAAAAAFIFiDgAAAAAAAIrg/wMASDKjgykK1QAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "alignment_condition = {\n", - " **clustering_key,\n", - " **alignment_key,\n", - " \"trial_condition\": \"stim_center_button\",\n", - "}\n", - "analysis.SpikesAlignment().plot(alignment_condition, unit=2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10198d2b", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "jupytext": { - "formats": "ipynb,py_scripts//py" - }, - "kernelspec": { - "display_name": "Python 3.9.13 ('ele')", - "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.9.13" - }, - "vscode": { - "interpreter": { - "hash": "d00c4ad21a7027bf1726d6ae3a9a6ef39c8838928eca5a3d5f51f3eb68720410" - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/notebooks/08-electrode-localization.ipynb b/notebooks/08-electrode-localization.ipynb deleted file mode 100644 index 3931a9b..0000000 --- a/notebooks/08-electrode-localization.ipynb +++ /dev/null @@ -1,982 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Electrode Localization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Change into the parent directory to find the `dj_local_conf.json` file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# change to the upper level folder to detect dj_local_conf.json\n", - "import os\n", - "if os.path.basename(os.getcwd()) == \"notebooks\":\n", - " os.chdir(\"..\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# We'll be working with long tables, so we'll make visualization easier with a limit\n", - "import datajoint as dj\n", - "dj.config[\"display.limit\"] = 10" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "incorrectly_encoded_metadata": "tags=[] jp-MarkdownHeadingCollapsed=true jp-MarkdownHeadingCollapsed=true", - "tags": [] - }, - "source": [ - "## Coordinate Framework" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The Allen Institute hosts [brain atlases](http://download.alleninstitute.org/informatics-archive/current-release/mouse_ccf/annotation/ccf_2017) and [ontology trees](https://community.brain-map.org/t/allen-mouse-ccf-accessing-and-using-related-data-and-tools/359) that we'll use in the next section. The `localization.py` script assumes this is your first atlas, and that you'll use the 100μm resolution. For finer resolutions, edit `voxel_resolution` in `localization.py`. Higher resolution `nrrd` files are quite large when loaded. Depending on the python environment, the terminal may be killed when loading so much information into memory. To load multiple atlases, increment `ccf_id` for each unique atlas.\n", - "\n", - "To run this pipeline ...\n", - "1. Download the 100μm `nrrd` and `csv` files from the links above.\n", - "2. Move these files to your ephys root directory." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, we'll populate the coordinate framework schema simply by loading it. Because we are loading the whole brain volume, this may take 25 minutes or more." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting cbroz@dss-db.datajoint.io:3306\n" - ] - } - ], - "source": [ - "from workflow_array_ephys.localization import coordinate_framework as ccf" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\n3\n\n3\n\n\n\nccf.ParentBrainRegion\n\n\nccf.ParentBrainRegion\n\n\n\n\n\n3->ccf.ParentBrainRegion\n\n\n\n\nccf.BrainRegionAnnotation.BrainRegion\n\n\nccf.BrainRegionAnnotation.BrainRegion\n\n\n\n\n\nccf.BrainRegionAnnotation.BrainRegion->3\n\n\n\n\nccf.BrainRegionAnnotation.BrainRegion->ccf.ParentBrainRegion\n\n\n\n\nccf.BrainRegionAnnotation.Voxel\n\n\nccf.BrainRegionAnnotation.Voxel\n\n\n\n\n\nccf.BrainRegionAnnotation.BrainRegion->ccf.BrainRegionAnnotation.Voxel\n\n\n\n\nccf.CCF.Voxel\n\n\nccf.CCF.Voxel\n\n\n\n\n\nccf.CCF.Voxel->ccf.BrainRegionAnnotation.Voxel\n\n\n\n\nccf.CCF\n\n\nccf.CCF\n\n\n\n\n\nccf.CCF->ccf.CCF.Voxel\n\n\n\n\nccf.BrainRegionAnnotation\n\n\nccf.BrainRegionAnnotation\n\n\n\n\n\nccf.CCF->ccf.BrainRegionAnnotation\n\n\n\n\nccf.BrainRegionAnnotation->ccf.BrainRegionAnnotation.BrainRegion\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dj.Diagram(ccf)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, to explore the data we just loaded." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "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", - "

ccf_id

\n", - " CCF ID, a.k.a atlas ID\n", - "
\n", - "

acronym

\n", - " CHARACTER SET utf8 COLLATE utf8_bin\n", - "
\n", - "

region_name

\n", - " \n", - "
\n", - "

region_id

\n", - " \n", - "
\n", - "

color_code

\n", - " hexcode of the color code of this region\n", - "
06bLayer 6b isocortex168ADA87
0a_a_aAnterior amygdalar area2380C0E2
0a_c_aAnterior cingulate area3140A666
0a_c_a1Anterior cingulate area layer 157240A666
0a_c_a2/3Anterior cingulate area layer 2/3105340A666
0a_c_a5Anterior cingulate area layer 573940A666
0a_c_a6aAnterior cingulate area layer 6a17940A666
0a_c_a6bAnterior cingulate area layer 6b22740A666
0a_c_adAnterior cingulate area dorsal part3940A666
0a_c_ad1Anterior cingulate area dorsal part layer 193540A666
\n", - "

...

\n", - "

Total: 1327

\n", - " " - ], - "text/plain": [ - "*ccf_id *acronym region_name region_id color_code \n", - "+--------+ +----------+ +------------+ +-----------+ +------------+\n", - "0 6b Layer 6b isoco 16 8ADA87 \n", - "0 a_a_a Anterior amygd 23 80C0E2 \n", - "0 a_c_a Anterior cingu 31 40A666 \n", - "0 a_c_a1 Anterior cingu 572 40A666 \n", - "0 a_c_a2/3 Anterior cingu 1053 40A666 \n", - "0 a_c_a5 Anterior cingu 739 40A666 \n", - "0 a_c_a6a Anterior cingu 179 40A666 \n", - "0 a_c_a6b Anterior cingu 227 40A666 \n", - "0 a_c_ad Anterior cingu 39 40A666 \n", - "0 a_c_ad1 Anterior cingu 935 40A666 \n", - " ...\n", - " (Total: 1327)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ccf.BrainRegionAnnotation.BrainRegion()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The acronyms listed in the DataJoint table differ slightly from the CCF standard by substituting case-sensitive differences with [snake case](https://en.wikipedia.org/wiki/Snake_case). To lookup the snake case equivalent, use the `retrieve_acronym` function." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CM: c_m\n", - "cm: cm\n" - ] - } - ], - "source": [ - "central_thalamus = ccf.BrainRegionAnnotation.retrieve_acronym(\"CM\")\n", - "cranial_nerves = ccf.BrainRegionAnnotation.retrieve_acronym(\"cm\")\n", - "print(f\"CM: {central_thalamus}\\ncm: {cranial_nerves}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If your work requires the case-sensitive columns please get in touch with the DataJoint team via [StackOverflow](https://stackoverflow.com/questions/tagged/datajoint).\n", - "\n", - "For this demo, let's look at the dimensions of the central thalamus. To look at other regions, open the CSV you downloaded and search for your desired region." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "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", - "

ccf_id

\n", - " CCF ID, a.k.a atlas ID\n", - "
\n", - "

acronym

\n", - " CHARACTER SET utf8 COLLATE utf8_bin\n", - "
\n", - "

x

\n", - " (um) Anterior-to-Posterior (AP axis)\n", - "
\n", - "

y

\n", - " (um) Superior-to-Inferior (DV axis)\n", - "
\n", - "

z

\n", - " (um) Left-to-Right (ML axis)\n", - "
0c_m10033004900
0c_m10033005000
0c_m10033005100
0c_m10033005200
0c_m10033005300
0c_m10033006100
0c_m10033006200
0c_m10033006300
0c_m10033006400
0c_m10033006500
\n", - "

...

\n", - "

Total: 4911

\n", - " " - ], - "text/plain": [ - "*ccf_id *acronym *x *y *z \n", - "+--------+ +---------+ +-----+ +------+ +------+\n", - "0 c_m 100 3300 4900 \n", - "0 c_m 100 3300 5000 \n", - "0 c_m 100 3300 5100 \n", - "0 c_m 100 3300 5200 \n", - "0 c_m 100 3300 5300 \n", - "0 c_m 100 3300 6100 \n", - "0 c_m 100 3300 6200 \n", - "0 c_m 100 3300 6300 \n", - "0 c_m 100 3300 6400 \n", - "0 c_m 100 3300 6500 \n", - " ...\n", - " (Total: 4911)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cm_voxels = ccf.BrainRegionAnnotation.Voxel() & f'acronym=\"{central_thalamus}\"'\n", - "cm_voxels" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The central thalamus extends from \n", - "\tx = 100 to x = 8400\n", - "\ty = 2600 to y = 7500\n", - "\tz = 1700 to z = 9700\n" - ] - } - ], - "source": [ - "cm_x, cm_y, cm_z = cm_voxels.fetch(\"x\", \"y\", \"z\")\n", - "print(\n", - " f\"The central thalamus extends from \\n\\tx = {min(cm_x)} to x = {max(cm_x)}\\n\\t\"\n", - " + f\"y = {min(cm_y)} to y = {max(cm_y)}\\n\\tz = {min(cm_z)} to z = {max(cm_z)}\"\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Electrode Localization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you have `channel_location` json files for your data, you can look at the position and regions associated with each electrode. Here, we've added an example file to our pre-existing `subject6` for demonstration purposes." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from workflow_array_ephys.localization import coordinate_framework as ccf\n", - "from workflow_array_ephys.localization import electrode_localization as eloc" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\n35\n\n35\n\n\n\nccf.ParentBrainRegion\n\n\nccf.ParentBrainRegion\n\n\n\n\n\n35->ccf.ParentBrainRegion\n\n\n\n\nccf.BrainRegionAnnotation.BrainRegion\n\n\nccf.BrainRegionAnnotation.BrainRegion\n\n\n\n\n\nccf.BrainRegionAnnotation.BrainRegion->35\n\n\n\n\nccf.BrainRegionAnnotation.BrainRegion->ccf.ParentBrainRegion\n\n\n\n\nccf.BrainRegionAnnotation.Voxel\n\n\nccf.BrainRegionAnnotation.Voxel\n\n\n\n\n\nccf.BrainRegionAnnotation.BrainRegion->ccf.BrainRegionAnnotation.Voxel\n\n\n\n\neloc.probe.ProbeType.Electrode\n\n\neloc.probe.ProbeType.Electrode\n\n\n\n\n\neloc.ElectrodePosition.Electrode\n\n\neloc.ElectrodePosition.Electrode\n\n\n\n\n\neloc.probe.ProbeType.Electrode->eloc.ElectrodePosition.Electrode\n\n\n\n\nccf.CCF.Voxel\n\n\nccf.CCF.Voxel\n\n\n\n\n\nccf.CCF.Voxel->eloc.ElectrodePosition.Electrode\n\n\n\n\nccf.CCF.Voxel->ccf.BrainRegionAnnotation.Voxel\n\n\n\n\neloc.ProbeInsertion\n\n\neloc.ProbeInsertion\n\n\n\n\n\neloc.ElectrodePosition\n\n\neloc.ElectrodePosition\n\n\n\n\n\neloc.ProbeInsertion->eloc.ElectrodePosition\n\n\n\n\nccf.CCF\n\n\nccf.CCF\n\n\n\n\n\nccf.CCF->ccf.CCF.Voxel\n\n\n\n\nccf.BrainRegionAnnotation\n\n\nccf.BrainRegionAnnotation\n\n\n\n\n\nccf.CCF->ccf.BrainRegionAnnotation\n\n\n\n\nccf.CCF->eloc.ElectrodePosition\n\n\n\n\nccf.BrainRegionAnnotation->ccf.BrainRegionAnnotation.BrainRegion\n\n\n\n\neloc.ElectrodePosition->eloc.ElectrodePosition.Electrode\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(dj.Diagram(eloc) + dj.Diagram(ccf) - 1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Because the probe may not be fully inserted, there will be some electrode positions that occur outside the brain. We register these instances with an `IntegrityError` warning because we're trying to register a coordinate position with no corresponding location in the `ccf.CCF.Voxel` table. We can silence these warnings by setting the log level before running `populate()` on the `ElectrodePosition` table." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "81ee78b7", - "metadata": {}, - "outputs": [], - "source": [ - "import logging" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "logging.getLogger().setLevel(logging.ERROR) # or logging.INFO" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eloc.ElectrodePosition.populate()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "By calling the `ElectrodePosition` table, we can see the keys the `populate()` method has already processed." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

ccf_id

\n", - " CCF ID, a.k.a atlas ID\n", - "
subject52018-07-03 20:32:2810
subject52018-07-03 20:32:2820
subject62021-01-15 11:16:3800
\n", - " \n", - "

Total: 3

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *ccf_id \n", - "+----------+ +------------+ +------------+ +--------+\n", - "subject5 2018-07-03 20: 1 0 \n", - "subject5 2018-07-03 20: 2 0 \n", - "subject6 2021-01-15 11: 0 0 \n", - " (Total: 3)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "eloc.ElectrodePosition()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's focus on `subject5`, insertion `1`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9a36c3c9", - "metadata": {}, - "outputs": [], - "source": [ - "from workflow_array_ephys.pipeline import ephys" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "373" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "key = (ephys.EphysRecording & 'subject=\"subject5\"' & \"insertion_number=1\").fetch1(\"KEY\")\n", - "len(eloc.ElectrodePosition.Electrode & key)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "With a resolution of 100μm, adjacent electrodes will very likely be in the same region. Let's look at every 38th electrode to sample 10 across the probe.\n", - "\n", - "If you're interested in more electrodes, decrease the number next to the `%` modulo operator." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Electrode 0 (x=11900, y=6300, z=6900) is in Primary auditory area\n", - "Electrode 38 (x=11900, y=6300, z=6500) is in Primary auditory area\n", - "Electrode 76 (x=11800, y=6300, z=6100) is in Declive (VI) Purkinje layer\n", - "Electrode 114 (x=11700, y=6400, z=5600) is in Lobules IV-V molecular layer\n", - "Electrode 152 (x=11700, y=6400, z=5200) is in Declive (VI) Purkinje layer\n", - "Electrode 190 (x=11600, y=6500, z=4700) is in Primary auditory area\n", - "Electrode 228 (x=11600, y=6500, z=4300) is in Granular lamina of the cochlear nuclei\n", - "Electrode 266 (x=11600, y=6600, z=3900) is in Cuneiform nucleus\n", - "Electrode 304 (x=11600, y=6600, z=3500) is in Lateral hypothalamic area\n", - "Electrode 342 (x=11600, y=6700, z=3100) is in root\n", - "Electrode 380 (x=11600, y=6700, z=2800) is in root\n" - ] - } - ], - "source": [ - "electrode_coordinates = (\n", - " eloc.ElectrodePosition.Electrode & \"electrode%38=0\" & key\n", - ").fetch(\"electrode\", \"x\", \"y\", \"z\", as_dict=True)\n", - "for e in electrode_coordinates:\n", - " x, y, z = [e[k] for k in (\"x\", \"y\", \"z\")]\n", - " acronym = (ccf.BrainRegionAnnotation.Voxel & f\"x={x}\" & f\"y={y}\" & f\"z={z}\").fetch1(\n", - " \"acronym\"\n", - " )\n", - " e[\"region\"] = (\n", - " ccf.BrainRegionAnnotation.BrainRegion & f'acronym=\"{acronym}\"'\n", - " ).fetch1(\"region_name\")\n", - " print(\"Electrode {electrode} (x={x}, y={y}, z={z}) is in {region}\".format(**e))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "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", - "

subject

\n", - " \n", - "
\n", - "

session_datetime

\n", - " \n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

ccf_id

\n", - " CCF ID, a.k.a atlas ID\n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

x

\n", - " (um) Anterior-to-Posterior (AP axis)\n", - "
\n", - "

y

\n", - " (um) Superior-to-Inferior (DV axis)\n", - "
\n", - "

z

\n", - " (um) Left-to-Right (ML axis)\n", - "
subject52018-07-03 20:32:2820neuropixels 1.0 - 3A2061100046004600
subject52018-07-03 20:32:2820neuropixels 1.0 - 3A2071100046004600
subject62021-01-15 11:16:3800neuropixels 1.0 - 3B2061100046004600
subject62021-01-15 11:16:3800neuropixels 1.0 - 3B2071100046004600
subject52018-07-03 20:32:2820neuropixels 1.0 - 3A1961100046004700
subject52018-07-03 20:32:2820neuropixels 1.0 - 3A1971100046004700
subject52018-07-03 20:32:2820neuropixels 1.0 - 3A1981100046004700
subject52018-07-03 20:32:2820neuropixels 1.0 - 3A1991100046004700
subject52018-07-03 20:32:2820neuropixels 1.0 - 3A2001100046004700
subject52018-07-03 20:32:2820neuropixels 1.0 - 3A2011100046004700
\n", - "

...

\n", - "

Total: 1113

\n", - " " - ], - "text/plain": [ - "*subject *session_datet *insertion_num *ccf_id *probe_type *electrode x y z \n", - "+----------+ +------------+ +------------+ +--------+ +------------+ +-----------+ +-------+ +------+ +------+\n", - "subject5 2018-07-03 20: 2 0 neuropixels 1. 206 11000 4600 4600 \n", - "subject5 2018-07-03 20: 2 0 neuropixels 1. 207 11000 4600 4600 \n", - "subject6 2021-01-15 11: 0 0 neuropixels 1. 206 11000 4600 4600 \n", - "subject6 2021-01-15 11: 0 0 neuropixels 1. 207 11000 4600 4600 \n", - "subject5 2018-07-03 20: 2 0 neuropixels 1. 196 11000 4600 4700 \n", - "subject5 2018-07-03 20: 2 0 neuropixels 1. 197 11000 4600 4700 \n", - "subject5 2018-07-03 20: 2 0 neuropixels 1. 198 11000 4600 4700 \n", - "subject5 2018-07-03 20: 2 0 neuropixels 1. 199 11000 4600 4700 \n", - "subject5 2018-07-03 20: 2 0 neuropixels 1. 200 11000 4600 4700 \n", - "subject5 2018-07-03 20: 2 0 neuropixels 1. 201 11000 4600 4700 \n", - " ...\n", - " (Total: 1113)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "eloc.ElectrodePosition.Electrode()" - ] - } - ], - "metadata": { - "jupytext": { - "formats": "ipynb,py_scripts//py" - }, - "kernelspec": { - "display_name": "Python 3.9.12 ('ele')", - "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.9.12" - }, - "vscode": { - "interpreter": { - "hash": "61456c693db5d9aa6731701ec9a9b08ab88a172bee0780139a3679beb166da16" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/09-NWB-export.ipynb b/notebooks/09-NWB-export.ipynb deleted file mode 100644 index a900774..0000000 --- a/notebooks/09-NWB-export.ipynb +++ /dev/null @@ -1,525 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "15bdef0d-bd52-49e6-87a0-d569006149a0", - "metadata": { - "tags": [] - }, - "source": [ - "# Export workflow to Neurodata Without Borders file and upload to DANDI" - ] - }, - { - "cell_type": "markdown", - "id": "4ad5b737", - "metadata": {}, - "source": [ - "## Setup\n", - "\n", - "First, let's change directories to find the `dj_local_conf` file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "39f49466", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "# change to the upper level folder to detect dj_local_conf.json\n", - "if os.path.basename(os.getcwd())=='notebooks': os.chdir('..')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bd47ac8d", - "metadata": {}, - "outputs": [], - "source": [ - "# We'll be working with long tables, so we'll make visualization easier with a limit\n", - "import datajoint as dj\n", - "dj.config['display.limit']=10" - ] - }, - { - "cell_type": "markdown", - "id": "f2161a4e", - "metadata": {}, - "source": [ - "CodeBook users should also set a couple additional config parameters." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f9c423ab", - "metadata": {}, - "outputs": [], - "source": [ - "username_as_prefix = dj.config[\"database.user\"] + \"_\"\n", - "if not dj.config['custom']:\n", - " dj.config['custom'] = {}\n", - "dj.config['custom'].update({\n", - " \"ephys_mode\": \"no-curation\",\n", - " \"database.prefix\": username_as_prefix,\n", - " })" - ] - }, - { - "cell_type": "markdown", - "id": "84b2c6ae-b8cd-47b8-af38-812f65032933", - "metadata": {}, - "source": [ - "If you haven't already populated the `lab`, `subject`, `session`, `probe`, and `ephys` schemas, please do so now with [04-automate](./04-automate-optional.ipynb). Note: exporting `ephys` data is currently only supported on the `no_curation` schema. " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "79cef246", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting cbroz@dss-db.datajoint.io:3306\n" - ] - } - ], - "source": [ - "from workflow_array_ephys.pipeline import lab, subject, session, probe, ephys\n", - "from workflow_array_ephys.export import (element_lab_to_nwb_dict, subject_to_nwb, \n", - " session_to_nwb, ecephys_session_to_nwb, \n", - " write_nwb)\n", - "from element_interface.dandi import upload_to_dandi" - ] - }, - { - "cell_type": "markdown", - "id": "bafd4a7c", - "metadata": {}, - "source": [ - "## Export to NWB\n", - "\n", - "We'll use the following keys to demonstrate export functions." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "e6cebd98", - "metadata": {}, - "outputs": [], - "source": [ - "lab_key={\"lab\": \"LabA\"}\n", - "protocol_key={\"protocol\": \"ProtA\"}\n", - "project_key={\"project\": \"ProjA\"}\n", - "session_key={\"subject\": \"subject5\",\n", - " \"session_datetime\": \"2018-07-03 20:32:28\"}" - ] - }, - { - "cell_type": "markdown", - "id": "fc2d028a", - "metadata": {}, - "source": [ - "### Upstream Elements\n", - "\n", - "If you plan to use all upstream Elements, you can skip to the following section. To combine with other schemas, the following functions may be helpful.\n", - "\n", - "- **Element Lab** `element_lab_to_nwb_dict` exports NWB-relevant items to `dict` format.\n", - "- **Element Animal** `subject_to_nwb` returns an NWB file with subject information.\n", - "- **Element Session** `session_to_nwb` returns an NWB file with subject and session information.\n", - "\n", - "Note: `pynwb` will display a warning regarding timezone information - datetime fields are assumed to be in local time, and will be converted to UTC.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f55d526a", - "metadata": {}, - "outputs": [], - "source": [ - "## If you don't already have data in the Element Lab\n", - "lab.Lab.insert1(\n", - " {\n", - " **lab_key,\n", - " \"lab_name\": \"LabA\",\n", - " \"institution\": \"\",\n", - " \"address\": \"\",\n", - " \"time_zone\": \"UTC+0\",\n", - " },\n", - " skip_duplicates=True,\n", - ")\n", - "lab.ProtocolType.insert1({\"protocol_type\": \"A\"})\n", - "lab.Protocol.insert1({**protocol_key, \"protocol_type\": \"A\"}, skip_duplicates=True)\n", - "lab.Project.insert1(project_key, skip_duplicates=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "61ba0714", - "metadata": {}, - "outputs": [], - "source": [ - "print('Lab:\\n')\n", - "print(element_lab_to_nwb_dict(lab_key=lab_key, protocol_key=protocol_key, \n", - " project_key=project_key))\n", - "print('\\nAnimal:\\n')\n", - "print(subject_to_nwb(session_key=session_key))\n", - "print('\\nSession:\\n')\n", - "print(session_to_nwb(session_key=session_key))" - ] - }, - { - "cell_type": "markdown", - "id": "bb5fba81", - "metadata": {}, - "source": [ - "### Element Array Electrophysiology\n", - "\n", - "`ecephys_session_to_nwb` provides a full export mechanism, returning an NWB file with raw data, spikes, and LFP. Optional arguments determine which pieces are exported. For demonstration purposes, we recommend limiting `end_frame`.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "7c2f913c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on function ecephys_session_to_nwb in module element_array_ephys.export.nwb.nwb:\n", - "\n", - "ecephys_session_to_nwb(session_key, raw=True, spikes=True, lfp='source', end_frame=None, lab_key=None, project_key=None, protocol_key=None, nwbfile_kwargs=None)\n", - " Main function for converting ephys data to NWB\n", - " \n", - " Parameters\n", - " ----------\n", - " session_key: dict\n", - " raw: bool\n", - " Whether to include the raw data from source. SpikeGLX and OpenEphys are supported\n", - " spikes: bool\n", - " Whether to include CuratedClustering\n", - " lfp:\n", - " \"dj\" - read LFP data from ephys.LFP\n", - " \"source\" - read LFP data from source (SpikeGLX supported)\n", - " False - do not convert LFP\n", - " end_frame: int, optional\n", - " Used to create small test conversions where large datasets are truncated.\n", - " lab_key, project_key, and protocol_key: dictionaries used to look up optional additional metadata\n", - " nwbfile_kwargs: dict, optional\n", - " - If element-session is not being used, this argument is required and must be a dictionary containing\n", - " 'session_description' (str), 'identifier' (str), and 'session_start_time' (datetime),\n", - " the minimal data for instantiating an NWBFile object.\n", - " \n", - " - If element-session is being used, this argument can optionally be used to add over overwrite NWBFile fields.\n", - "\n" - ] - } - ], - "source": [ - "help(ecephys_session_to_nwb)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "5edf9615", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/cb/miniconda3/envs/ele/lib/python3.8/site-packages/pynwb/file.py:1037: UserWarning: Date is missing timezone information. Updating to local timezone.\n", - " warn(\"Date is missing timezone information. Updating to local timezone.\")\n", - "creating units table for paramset 0: 100%|██████████| 499/499 [00:41<00:00, 12.11it/s]\n" - ] - } - ], - "source": [ - "nwbfile = ecephys_session_to_nwb(session_key=session_key,\n", - " raw=True,\n", - " spikes=True,\n", - " lfp=\"dj\",\n", - " end_frame=100,\n", - " lab_key=lab_key,\n", - " project_key=project_key,\n", - " protocol_key=protocol_key,\n", - " nwbfile_kwargs=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "1131e149", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "root pynwb.file.NWBFile at 0x140297891486016\n", - "Fields:\n", - " acquisition: {\n", - " ElectricalSeries1 ,\n", - " ElectricalSeries2 \n", - " }\n", - " devices: {\n", - " 262716621 ,\n", - " 714000838 \n", - " }\n", - " electrode_groups: {\n", - " probe262716621_shank0 ,\n", - " probe714000838_shank0 \n", - " }\n", - " electrodes: electrodes \n", - " experiment_description: Example project to populate element-lab\n", - " experimenter: ['User1']\n", - " file_create_date: [datetime.datetime(2022, 5, 31, 15, 47, 41, 270996, tzinfo=tzlocal())]\n", - " identifier: 172f2d3b-44c1-4ae1-8785-2d20d3df3db1\n", - " institution: Example Uni\n", - " keywords: ['Example' 'Study']\n", - " lab: The Example Lab\n", - " notes: Protocol for managing data ingestion\n", - " processing: {\n", - " ecephys \n", - " }\n", - " protocol: ProtA\n", - " related_publications: ['arXiv:1807.11104' 'arXiv:1807.11104v1']\n", - " session_description: Successful data collection\n", - " session_id: subject5_2018-07-03T20:32:28\n", - " session_start_time: 2018-07-04 01:32:28+00:00\n", - " subject: subject pynwb.file.Subject at 0x140297891485200\n", - "Fields:\n", - " date_of_birth: 2020-01-01 00:00:00-06:00\n", - " description: {\"subject\": \"subject5\", \"sex\": \"F\", \"subject_birth_date\": \"2020-01-01\", \"subject_description\": \"rich\", \"line\": null, \"strain\": null, \"source\": null}\n", - " sex: F\n", - " subject_id: subject5\n", - "\n", - " timestamps_reference_time: 2018-07-04 01:32:28+00:00\n", - " units: units " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "nwbfile" - ] - }, - { - "cell_type": "markdown", - "id": "2d6393fc", - "metadata": {}, - "source": [ - "`write_nwb` can then be used to write this file to disk. The following cell will include a timestamp in the filename." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eb3f1030", - "metadata": {}, - "outputs": [], - "source": [ - "import time\n", - "my_path = \"./\"\n", - "my_path = f\"/home/{dj.config['database.user']}/\" # for codebook users\n", - "write_nwb(nwbfile, my_path+time.strftime(\"_test_%Y%m%d-%H%M%S.nwb\"))" - ] - }, - { - "cell_type": "markdown", - "id": "f717baf8", - "metadata": {}, - "source": [ - "## DANDI Upload\n", - "\n", - "`element-interface.dandi` includes the `upload_to_dandi` utility to support direct uploads. For more information, see [DANDI documentation](https://www.dandiarchive.org/handbook/10_using_dandi/).\n", - "\n", - "In order to upload, you'll need...\n", - "1. A DANDI account\n", - "2. A `DANDI_API_KEY`\n", - "3. A `dandiset_id`\n", - "\n", - "These values can be added to your `dj.config` as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3a75d1e4", - "metadata": {}, - "outputs": [], - "source": [ - "dj.config['custom']['dandiset_id']=\"\" \n", - "dj.config['custom']['dandi.api']=\"<40-character alphanumeric string>\"" - ] - }, - { - "cell_type": "markdown", - "id": "26f65d15", - "metadata": {}, - "source": [ - "This would facilitate routine updating of your dandiset." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "84dbce9f-825e-49a4-b49f-58b406873430", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "PATH SIZE DONE DONE% CHECKSUM STATUS MESSAGE \n", - "dandiset.yaml done updated \n", - "test1.nwb 109.8 MB 109.8 MB 100% ok done \n", - "Summary: 109.8 MB 109.8 MB 2 done 1 updated \n", - " 100.00% \n", - "Usage: dandi [OPTIONS] COMMAND [ARGS]...\n", - "\n", - " A client to support interactions with DANDI archive\n", - " (http://dandiarchive.org).\n", - "\n", - " To see help for a specific command, run\n", - "\n", - " dandi COMMAND --help\n", - "\n", - " e.g. dandi upload --help\n", - "\n", - "Options:\n", - " --version\n", - " -l, --log-level [DEBUG|INFO|WARNING|ERROR|CRITICAL]\n", - " Log level (case insensitive). May be\n", - " specified as an integer. [default: INFO]\n", - " --pdb Fall into pdb if errors out\n", - " --help Show this message and exit.\n", - "\n", - "Commands:\n", - " delete Delete dandisets and assets from the server.\n", - " digest Calculate file digests\n", - " download Download a file or entire folder from DANDI.\n", - " instances List known Dandi Archive instances that the CLI can...\n", - " ls List .nwb files and dandisets metadata.\n", - " organize (Re)organize files according to the metadata.\n", - " shell-completion Emit shell script for enabling command completion.\n", - " upload Upload Dandiset files to DANDI Archive.\n", - " validate Validate files for NWB and DANDI compliance.\n", - " validate-bids Validate BIDS paths.\n", - "Usage: dandi [OPTIONS] COMMAND [ARGS]...\n", - "\n", - " A client to support interactions with DANDI archive\n", - " (http://dandiarchive.org).\n", - "\n", - " To see help for a specific command, run\n", - "\n", - " dandi COMMAND --help\n", - "\n", - " e.g. dandi upload --help\n", - "\n", - "Options:\n", - " --version\n", - " -l, --log-level [DEBUG|INFO|WARNING|ERROR|CRITICAL]\n", - " Log level (case insensitive). May be\n", - " specified as an integer. [default: INFO]\n", - " --pdb Fall into pdb if errors out\n", - " --help Show this message and exit.\n", - "\n", - "Commands:\n", - " delete Delete dandisets and assets from the server.\n", - " digest Calculate file digests\n", - " download Download a file or entire folder from DANDI.\n", - " instances List known Dandi Archive instances that the CLI can...\n", - " ls List .nwb files and dandisets metadata.\n", - " organize (Re)organize files according to the metadata.\n", - " shell-completion Emit shell script for enabling command completion.\n", - " upload Upload Dandiset files to DANDI Archive.\n", - " validate Validate files for NWB and DANDI compliance.\n", - " validate-bids Validate BIDS paths.\n", - "work_dir: ./temp_nwb/\n", - "data_dir: ./temp_nwb/\n", - "dand_dir: ./temp_nwb/200178\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "pynwb validation errors for /Users/cb/Documents/dev/workflow-array-ephys/temp_nwb/200178/test1.nwb: []\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "PATH SIZE ERRORS UPLOAD STATUS MESSAGE \n", - "test1.nwb 109.8 MB 0 skipped file exists \n", - "dandiset.yaml 2.0 kB skipped should be edited online \n", - "Summary: 109.8 MB 2 skipped 1 file exists \n", - " 1 should be edited online\n" - ] - } - ], - "source": [ - "upload_to_dandi(\n", - " data_directory=\"./temp_nwb/\",\n", - " dandiset_id=dj.config['custom']['dandiset_id'],\n", - " staging=True,\n", - " working_directory=\"./temp_nwb/\",\n", - " api_key=dj.config['custom']['dandi.api'],\n", - " sync=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c0dd56de-ecf3-469b-8aed-e2484402bcdc", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "jupytext": { - "formats": "ipynb,py_scripts//py" - }, - "kernelspec": { - "display_name": "Python 3.9.13 ('ele')", - "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.9.13" - }, - "vscode": { - "interpreter": { - "hash": "d00c4ad21a7027bf1726d6ae3a9a6ef39c8838928eca5a3d5f51f3eb68720410" - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/notebooks/tutorial.ipynb b/notebooks/tutorial.ipynb index ddf6738..376843d 100644 --- a/notebooks/tutorial.ipynb +++ b/notebooks/tutorial.ipynb @@ -1,11 +1,2164 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ - "Coming soon!" + "# Process NeuroPixels Electrophysiology data with DataJoint Elements\n", + "\n", + "This notebook will walk through processing NeuroPixels array electrophysiology\n", + "data acquired with spikeGLX and processed with kilosort. While anyone can work\n", + "through this notebook to process electrophysiology data through DataJoint's\n", + "`element-array-ephys` pipeline, for a detailed tutorial about the fundamentals of\n", + "DataJoint including table types, make functions, and querying, please see the [DataJoint Tutorial](https://github.com/datajoint/datajoint-tutorials).\n", + "\n", + "The DataJoint Python API and Element Array Electrophysiology offer a lot of features to support collaboration, automation, reproducibility, and visualizations.\n", + "\n", + "For more information on these topics, please visit our documentation: \n", + " \n", + "- [DataJoint Core](https://datajoint.com/docs/core/): General principles\n", + "\n", + "- DataJoint [Python](https://datajoint.com/docs/core/datajoint-python/) and\n", + " [MATLAB](https://datajoint.com/docs/core/datajoint-matlab/) APIs: in-depth reviews of\n", + " specifics\n", + "\n", + "- [DataJoint Element Array Ephys](https://datajoint.com/docs/elements/element-array-ephys/):\n", + " A modular pipeline for electrophysiology analysis\n", + "\n", + "\n", + "Let's start by importing the packages necessary to run this tutorial." ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "if os.path.basename(os.getcwd()) == \"notebooks\":\n", + " os.chdir(\"..\")\n", + "\n", + "import datajoint as dj\n", + "import datetime\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Basics:\n", + "\n", + "Any DataJoint workflow can be broken down into basic 3 parts:\n", + "\n", + "- `Insert`\n", + "- `Populate` (or process)\n", + "- `Query`\n", + "\n", + "In this demo we will:\n", + "- `Insert` metadata about an animal subject, recording session, and \n", + " parameters related to processing electrophysiology data.\n", + "- `Populate` tables with outputs of ephys recording data including LFPs, and spike\n", + " sorted waveforms and units.\n", + "- `Query` the processed data from the database and plot waveform traces.\n", + "\n", + "Each of these topics will be explained thoroughly in this notebook." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Workflow diagram\n", + "\n", + "This workflow is assembled from 4 DataJoint elements:\n", + "+ [element-lab](https://github.com/datajoint/element-lab)\n", + "+ [element-animal](https://github.com/datajoint/element-animal)\n", + "+ [element-session](https://github.com/datajoint/element-session)\n", + "+ [element-array-ephys](https://github.com/datajoint/element-array-ephys)\n", + "\n", + "Each element declares its own schema in the database. These schemas can be imported like\n", + "any other Python package. This workflow is composed of schemas from each of the Elements\n", + "above and correspond to a module within `workflow_array_ephys.pipeline`.\n", + "\n", + "The schema diagram is a good reference for understanding the order of the tables\n", + "within the workflow, as well as the corresponding table type.\n", + "Let's activate the elements and view the schema diagram." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2023-03-20 21:44:02,597][WARNING]: lab.Project and related tables will be removed in a future version of Element Lab. Please use the project schema.\n", + "[2023-03-20 21:44:02,607][INFO]: Connecting root@fakeservices.datajoint.io:3306\n", + "[2023-03-20 21:44:02,614][INFO]: Connected root@fakeservices.datajoint.io:3306\n" + ] + } + ], + "source": [ + "from workflow_array_ephys.pipeline import subject, session, probe, ephys" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.9/inspect.py:351: FutureWarning: pandas.Float64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", + " value = getattr(object, key)\n", + "/usr/local/lib/python3.9/inspect.py:351: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", + " value = getattr(object, key)\n", + "/usr/local/lib/python3.9/inspect.py:351: FutureWarning: pandas.UInt64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n", + " value = getattr(object, key)\n" + ] + }, + { + "data": { + "image/svg+xml": "\n\n%3\n\n\n\nephys.ClusteringMethod\n\n\nephys.ClusteringMethod\n\n\n\n\n\nephys.ClusteringParamSet\n\n\nephys.ClusteringParamSet\n\n\n\n\n\nephys.ClusteringMethod->ephys.ClusteringParamSet\n\n\n\n\nephys.ClusteringTask\n\n\nephys.ClusteringTask\n\n\n\n\n\nephys.Clustering\n\n\nephys.Clustering\n\n\n\n\n\nephys.ClusteringTask->ephys.Clustering\n\n\n\n\nephys.EphysRecording.EphysFile\n\n\nephys.EphysRecording.EphysFile\n\n\n\n\n\nprobe.ElectrodeConfig\n\n\nprobe.ElectrodeConfig\n\n\n\n\n\nephys.EphysRecording\n\n\nephys.EphysRecording\n\n\n\n\n\nprobe.ElectrodeConfig->ephys.EphysRecording\n\n\n\n\nprobe.ElectrodeConfig.Electrode\n\n\nprobe.ElectrodeConfig.Electrode\n\n\n\n\n\nprobe.ElectrodeConfig->probe.ElectrodeConfig.Electrode\n\n\n\n\nephys.EphysRecording->ephys.ClusteringTask\n\n\n\n\nephys.EphysRecording->ephys.EphysRecording.EphysFile\n\n\n\n\nephys.LFP\n\n\nephys.LFP\n\n\n\n\n\nephys.EphysRecording->ephys.LFP\n\n\n\n\nsession.Session\n\n\nsession.Session\n\n\n\n\n\nephys.ProbeInsertion\n\n\nephys.ProbeInsertion\n\n\n\n\n\nsession.Session->ephys.ProbeInsertion\n\n\n\n\nephys.Curation\n\n\nephys.Curation\n\n\n\n\n\nephys.CuratedClustering\n\n\nephys.CuratedClustering\n\n\n\n\n\nephys.Curation->ephys.CuratedClustering\n\n\n\n\nephys.InsertionLocation\n\n\nephys.InsertionLocation\n\n\n\n\n\nprobe.ProbeType\n\n\nprobe.ProbeType\n\n\n\n\n\nprobe.ProbeType->probe.ElectrodeConfig\n\n\n\n\nprobe.Probe\n\n\nprobe.Probe\n\n\n\n\n\nprobe.ProbeType->probe.Probe\n\n\n\n\nprobe.ProbeType.Electrode\n\n\nprobe.ProbeType.Electrode\n\n\n\n\n\nprobe.ProbeType->probe.ProbeType.Electrode\n\n\n\n\nephys.CuratedClustering.Unit\n\n\nephys.CuratedClustering.Unit\n\n\n\n\n\nephys.WaveformSet.PeakWaveform\n\n\nephys.WaveformSet.PeakWaveform\n\n\n\n\n\nephys.CuratedClustering.Unit->ephys.WaveformSet.PeakWaveform\n\n\n\n\nephys.QualityMetrics.Waveform\n\n\nephys.QualityMetrics.Waveform\n\n\n\n\n\nephys.CuratedClustering.Unit->ephys.QualityMetrics.Waveform\n\n\n\n\nephys.QualityMetrics.Cluster\n\n\nephys.QualityMetrics.Cluster\n\n\n\n\n\nephys.CuratedClustering.Unit->ephys.QualityMetrics.Cluster\n\n\n\n\nephys.WaveformSet.Waveform\n\n\nephys.WaveformSet.Waveform\n\n\n\n\n\nephys.CuratedClustering.Unit->ephys.WaveformSet.Waveform\n\n\n\n\nprobe.Probe->ephys.ProbeInsertion\n\n\n\n\nephys.AcquisitionSoftware\n\n\nephys.AcquisitionSoftware\n\n\n\n\n\nephys.AcquisitionSoftware->ephys.EphysRecording\n\n\n\n\nephys.QualityMetrics\n\n\nephys.QualityMetrics\n\n\n\n\n\nephys.QualityMetrics->ephys.QualityMetrics.Waveform\n\n\n\n\nephys.QualityMetrics->ephys.QualityMetrics.Cluster\n\n\n\n\nprobe.ElectrodeConfig.Electrode->ephys.CuratedClustering.Unit\n\n\n\n\nephys.LFP.Electrode\n\n\nephys.LFP.Electrode\n\n\n\n\n\nprobe.ElectrodeConfig.Electrode->ephys.LFP.Electrode\n\n\n\n\nprobe.ElectrodeConfig.Electrode->ephys.WaveformSet.Waveform\n\n\n\n\nephys.ProbeInsertion->ephys.EphysRecording\n\n\n\n\nephys.ProbeInsertion->ephys.InsertionLocation\n\n\n\n\nephys.LFP->ephys.LFP.Electrode\n\n\n\n\nephys.CuratedClustering->ephys.CuratedClustering.Unit\n\n\n\n\nephys.CuratedClustering->ephys.QualityMetrics\n\n\n\n\nephys.WaveformSet\n\n\nephys.WaveformSet\n\n\n\n\n\nephys.CuratedClustering->ephys.WaveformSet\n\n\n\n\nephys.WaveformSet->ephys.WaveformSet.PeakWaveform\n\n\n\n\nephys.WaveformSet->ephys.WaveformSet.Waveform\n\n\n\n\nephys.ClusteringParamSet->ephys.ClusteringTask\n\n\n\n\nsubject.Subject\n\n\nsubject.Subject\n\n\n\n\n\nsubject.Subject->session.Session\n\n\n\n\nephys.Clustering->ephys.Curation\n\n\n\n\nephys.ClusterQualityLabel\n\n\nephys.ClusterQualityLabel\n\n\n\n\n\nephys.ClusterQualityLabel->ephys.CuratedClustering.Unit\n\n\n\n\nprobe.ProbeType.Electrode->probe.ElectrodeConfig.Electrode\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(\n", + " dj.Diagram(subject.Subject)\n", + " + dj.Diagram(session.Session)\n", + " + dj.Diagram(probe)\n", + " + dj.Diagram(ephys)\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Diagram Breakdown\n", + "\n", + "While the diagram above seems complex at first, it becomes more clear when it's\n", + "approached as a hierarchy of tables that **define the order** in which the\n", + "workflow **expects to receive data** in each of its tables. \n", + "\n", + "- Tables with a green, or rectangular shape expect to receive data manually\n", + " using the `insert()` function. The tables higher up in the diagram such as\n", + " `subject.Subject()` should be the first to receive data. This ensures data\n", + " integrity by preventing orphaned data within DataJoint schemas. \n", + "- Tables with a purple oval or red circle can be automatically filled with relevant data\n", + " by calling `populate()`. For example `ephys.EphysRecording` and its part-table\n", + " `ephys.EphysRecording.EphysFile` are both populated with\n", + " `ephys.EphysRecording.populate()`.\n", + "- Tables connected by a solid line depend on attributes (entries) in the table\n", + " above it.\n", + "\n", + "#### Table Types\n", + "\n", + "There are 5 table types in DataJoint. Each of these appear in the diagram above.\n", + "\n", + "- **Manual table**: green box, manually inserted table, expect new entries daily, e.g. `Subject`, `ProbeInsertion`. \n", + "- **Lookup table**: gray box, pre inserted table, commonly used for general facts or parameters. e.g. `Strain`, `ClusteringMethod`, `ClusteringParamSet`. \n", + "- **Imported table**: blue oval, auto-processing table, the processing depends on the importing of external files. e.g. process of `Clustering` requires output files from kilosort2. \n", + "- **Computed table**: red circle, auto-processing table, the processing does not\n", + " depend on files external to the database. \n", + "- **Part table**: plain text, as an appendix to the master table, all the part\n", + " entries of a given master entry represent a intact set of the master entry.\n", + " e.g. `Unit` of a `CuratedClustering`.\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Starting the workflow: Insert\n", + "\n", + "### Insert entries into manual tables\n", + "\n", + "To view details about a table's dependencies and attributes, use functions `.describe()`\n", + "and `.heading`, respectively.\n", + "\n", + "Let's start with the first table in the schema diagram (the `subject` table) and view\n", + "the table attributes we need to insert. There are two ways you can do this: *run each\n", + "of the two cells below*" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'subject : varchar(8) \\n---\\nsubject_nickname=\"\" : varchar(64) \\nsex : enum(\\'M\\',\\'F\\',\\'U\\') \\nsubject_birth_date : date \\nsubject_description=\"\" : varchar(1024) \\n'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "subject.Subject.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "# \n", + "subject : varchar(8) # \n", + "---\n", + "subject_nickname=\"\" : varchar(64) # \n", + "sex : enum('M','F','U') # \n", + "subject_birth_date : date # \n", + "subject_description=\"\" : varchar(1024) # " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "subject.Subject.heading" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The cells above show all attributes of the subject table. These are particularly useful functions if you are new to\n", + "DataJoint Elements and are unsure of the attributes required for each table. We will insert data into the\n", + "`subject.Subject` table." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

subject

\n", + " \n", + "
\n", + "

subject_nickname

\n", + " \n", + "
\n", + "

sex

\n", + " \n", + "
\n", + "

subject_birth_date

\n", + " \n", + "
\n", + "

subject_description

\n", + " \n", + "
subject5U2023-01-01
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*subject subject_nickna sex subject_birth_ subject_descri\n", + "+----------+ +------------+ +-----+ +------------+ +------------+\n", + "subject5 U 2023-01-01 \n", + " (Total: 1)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "subject.Subject.insert1(\n", + " dict(\n", + " subject='subject5',\n", + " subject_birth_date='2023-01-01',\n", + " sex='U'\n", + " )\n", + ")\n", + "subject.Subject()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's repeat the steps above for the `Session` table and see how the output varies between\n", + "`.describe` and `.heading`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'-> subject.Subject\\nsession_datetime : datetime \\n'" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "session.Session.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "# \n", + "subject : varchar(8) # \n", + "session_datetime : datetime # " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "session.Session.heading" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The cells above show the dependencies and attributes for the `session.Session` table.\n", + "Notice that `describe` shows the dependencies of the table on upstream tables. The\n", + "`Session` table depends on the upstream `Subject` table. \n", + "\n", + "Whereas `heading` lists all the attributes of the `Session` table, regardless of\n", + "whether they are declared in an upstream table. \n", + "\n", + "Here we will demonstrate a very useful way of inserting data by assigning the dictionary\n", + "to a variable `session_key`. This variable can be used to insert entries into tables that\n", + "contain the `Session` table as one of its attributes." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "
\n", + "

subject

\n", + " \n", + "
\n", + "

session_datetime

\n", + " \n", + "
subject52023-03-20 21:44:09
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*subject *session_datet\n", + "+----------+ +------------+\n", + "subject5 2023-03-20 21:\n", + " (Total: 1)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "session_key = dict(subject='subject5', \n", + " session_datetime=datetime.datetime.now())\n", + "\n", + "session.Session.insert1(session_key)\n", + "session.Session()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `SessionDirectory` table locates the relevant data files in a directory path\n", + "relative to the root directory defined in your `dj.config[\"custom\"]`. More\n", + "information about `dj.config` is provided at the end of this tutorial and is\n", + "particularly useful for local deployments of this workflow." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'-> session.Session\\n---\\nsession_dir : varchar(256) # Path to the data directory for a session\\n'" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "session.SessionDirectory.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "# \n", + "subject : varchar(8) # \n", + "session_datetime : datetime # \n", + "---\n", + "session_dir : varchar(256) # Path to the data directory for a session" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "session.SessionDirectory.heading" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "
\n", + "

subject

\n", + " \n", + "
\n", + "

session_datetime

\n", + " \n", + "
\n", + "

session_dir

\n", + " Path to the data directory for a session\n", + "
subject52023-03-20 21:44:09subject5/session1
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*subject *session_datet session_dir \n", + "+----------+ +------------+ +------------+\n", + "subject5 2023-03-20 21: subject5/sessi\n", + " (Total: 1)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "session.SessionDirectory.insert1(\n", + " dict(\n", + " session_key, \n", + " session_dir='subject5/session1'\n", + " )\n", + ")\n", + "session.SessionDirectory()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As the workflow diagram indicates, the tables in the `probe` schemas need to\n", + "contain data before the tables in the `ephys` schema accept any data. Let's\n", + "start by inserting into `probe.Probe`, a table containing metadata about a\n", + "multielectrode probe. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'# Represent a physical probe with unique identification\\nprobe : varchar(32) # unique identifier for this model of probe (e.g. serial number)\\n---\\n-> probe.ProbeType\\nprobe_comment=\"\" : varchar(1000) \\n'" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "probe.Probe.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "# Represent a physical probe with unique identification\n", + "probe : varchar(32) # unique identifier for this model of probe (e.g. serial number)\n", + "---\n", + "probe_type : varchar(32) # e.g. neuropixels_1.0\n", + "probe_comment=\"\" : varchar(1000) # " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "probe.Probe.heading" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Represent a physical probe with unique identification\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "
\n", + "

probe

\n", + " unique identifier for this model of probe (e.g. serial number)\n", + "
\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", + "
\n", + "

probe_comment

\n", + " \n", + "
714000838neuropixels 1.0 - 3B
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*probe probe_type probe_comment \n", + "+-----------+ +------------+ +------------+\n", + "714000838 neuropixels 1. \n", + " (Total: 1)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "probe.Probe.insert1(\n", + " dict(probe=\"714000838\", \n", + " probe_type=\"neuropixels 1.0 - 3B\")\n", + ") # this info could be achieve from neuropixels meta file.\n", + "probe.Probe()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The probe metadata is used by the downstream `ProbeInsertion` table which we\n", + "insert data into in the cells below:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'# Probe insertion implanted into an animal for a given session.\\n-> session.Session\\ninsertion_number : tinyint unsigned \\n---\\n-> probe.Probe\\n'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.ProbeInsertion.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "# Probe insertion implanted into an animal for a given session.\n", + "subject : varchar(8) # \n", + "session_datetime : datetime # \n", + "insertion_number : tinyint unsigned # \n", + "---\n", + "probe : varchar(32) # unique identifier for this model of probe (e.g. serial number)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.ProbeInsertion.heading" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Probe insertion implanted into an animal for a given session.\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "
\n", + "

subject

\n", + " \n", + "
\n", + "

session_datetime

\n", + " \n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

probe

\n", + " unique identifier for this model of probe (e.g. serial number)\n", + "
subject52023-03-20 21:44:091714000838
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*subject *session_datet *insertion_num probe \n", + "+----------+ +------------+ +------------+ +-----------+\n", + "subject5 2023-03-20 21: 1 714000838 \n", + " (Total: 1)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.ProbeInsertion.insert1(\n", + " dict(\n", + " session_key,\n", + " insertion_number=1,\n", + " probe=\"714000838\",\n", + " )\n", + ") # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", + "ephys.ProbeInsertion()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Populate\n", + "\n", + "### Automatically populate tables\n", + "\n", + "`ephys.EphysRecording` is the first table in the pipeline that can be populated automatically.\n", + "If a table contains a part table, this part table is also populated during the\n", + "`populate()` call. `populate()` takes several arguments including the a session\n", + "key. This key restricts `populate()` to performing the operation on the session\n", + "of interest rather than all possible sessions which could be a time-intensive\n", + "process for databases with lots of entries.\n", + "\n", + "Let's view the `ephys.EphysRecording` and its part table\n", + "`ephys.EphysRecording.EphysFile` and populate both through a single `populate()`\n", + "call." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "# Ephys recording from a probe insertion for a given session.\n", + "subject : varchar(8) # \n", + "session_datetime : datetime # \n", + "insertion_number : tinyint unsigned # \n", + "---\n", + "electrode_config_hash : uuid # \n", + "acq_software : varchar(24) # \n", + "sampling_rate : float # (Hz)\n", + "recording_datetime : datetime # datetime of the recording from this probe\n", + "recording_duration : float # (seconds) duration of the recording from this probe" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.EphysRecording.heading" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "# Paths of files of a given EphysRecording round.\n", + "subject : varchar(8) # \n", + "session_datetime : datetime # \n", + "insertion_number : tinyint unsigned # \n", + "file_path : varchar(255) # filepath relative to root data directory" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.EphysRecording.EphysFile.heading" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Ephys recording from a probe insertion for a given session.\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "

subject

\n", + " \n", + "
\n", + "

session_datetime

\n", + " \n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

electrode_config_hash

\n", + " \n", + "
\n", + "

acq_software

\n", + " \n", + "
\n", + "

sampling_rate

\n", + " (Hz)\n", + "
\n", + "

recording_datetime

\n", + " datetime of the recording from this probe\n", + "
\n", + "

recording_duration

\n", + " (seconds) duration of the recording from this probe\n", + "
\n", + " \n", + "

Total: 0

\n", + " " + ], + "text/plain": [ + "*subject *session_datet *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", + "+---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", + "\n", + " (Total: 0)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.EphysRecording()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Paths of files of a given EphysRecording round.\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "

subject

\n", + " \n", + "
\n", + "

session_datetime

\n", + " \n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

file_path

\n", + " filepath relative to root data directory\n", + "
\n", + " \n", + "

Total: 0

\n", + " " + ], + "text/plain": [ + "*subject *session_datet *insertion_num *file_path \n", + "+---------+ +------------+ +------------+ +-----------+\n", + "\n", + " (Total: 0)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.EphysRecording.EphysFile()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 100%|██████████| 1/1 [00:00<00:00, 13.35it/s]\n" + ] + } + ], + "source": [ + "ephys.EphysRecording.populate(session_key, display_progress=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's view the information was entered into each of these tables:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Ephys recording from a probe insertion for a given session.\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

subject

\n", + " \n", + "
\n", + "

session_datetime

\n", + " \n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

electrode_config_hash

\n", + " \n", + "
\n", + "

acq_software

\n", + " \n", + "
\n", + "

sampling_rate

\n", + " (Hz)\n", + "
\n", + "

recording_datetime

\n", + " datetime of the recording from this probe\n", + "
\n", + "

recording_duration

\n", + " (seconds) duration of the recording from this probe\n", + "
subject52023-03-20 21:44:0918d4cc6d8-a02d-42c8-bf27-7459c39ea0eeSpikeGLX30000.02018-07-03 20:32:28338.666
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*subject *session_datet *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", + "+----------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", + "subject5 2023-03-20 21: 1 8d4cc6d8-a02d- SpikeGLX 30000.0 2018-07-03 20: 338.666 \n", + " (Total: 1)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.EphysRecording()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Paths of files of a given EphysRecording round.\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "
\n", + "

subject

\n", + " \n", + "
\n", + "

session_datetime

\n", + " \n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

file_path

\n", + " filepath relative to root data directory\n", + "
subject52023-03-20 21:44:091subject5/session1/probe_1/npx_g0_t0.imec.ap.meta
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*subject *session_datet *insertion_num *file_path \n", + "+----------+ +------------+ +------------+ +------------+\n", + "subject5 2023-03-20 21: 1 subject5/sessi\n", + " (Total: 1)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.EphysRecording.EphysFile()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We're almost ready to spike sort the data with `kilosort`. An important step before\n", + "processing is managing the parameters which will be used in that step. To do so, we will\n", + "define the kilosort parameters in a dictionary and insert them into a DataJoint table\n", + "`ClusteringParamSet`. This table keeps track of all combinations of your spike sorting\n", + "parameters. You can choose which parameters are used during processing in a later step.\n", + "\n", + "Let's view the attributes and insert data into `ephys.ClusteringParamSet`." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "# Parameter set to be used in a clustering procedure\n", + "paramset_idx : smallint # \n", + "---\n", + "clustering_method : varchar(16) # \n", + "paramset_desc : varchar(128) # \n", + "param_set_hash : uuid # \n", + "params : longblob # dictionary of all applicable parameters" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.ClusteringParamSet.heading" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Parameter set to be used in a clustering procedure\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

clustering_method

\n", + " \n", + "
\n", + "

paramset_desc

\n", + " \n", + "
\n", + "

param_set_hash

\n", + " \n", + "
\n", + "

params

\n", + " dictionary of all applicable parameters\n", + "
0kilosort2Spike sorting using Kilosort2de78cee1-526f-319e-b6d5-8a2ba04963d8=BLOB=
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*paramset_idx clustering_met paramset_desc param_set_hash params \n", + "+------------+ +------------+ +------------+ +------------+ +--------+\n", + "0 kilosort2 Spike sorting de78cee1-526f- =BLOB= \n", + " (Total: 1)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# insert clustering task manually\n", + "params_ks = {\n", + " \"fs\": 30000,\n", + " \"fshigh\": 150,\n", + " \"minfr_goodchannels\": 0.1,\n", + " \"Th\": [10, 4],\n", + " \"lam\": 10,\n", + " \"AUCsplit\": 0.9,\n", + " \"minFR\": 0.02,\n", + " \"momentum\": [20, 400],\n", + " \"sigmaMask\": 30,\n", + " \"ThPr\": 8,\n", + " \"spkTh\": -6,\n", + " \"reorder\": 1,\n", + " \"nskip\": 25,\n", + " \"GPU\": 1,\n", + " \"Nfilt\": 1024,\n", + " \"nfilt_factor\": 4,\n", + " \"ntbuff\": 64,\n", + " \"whiteningRange\": 32,\n", + " \"nSkipCov\": 25,\n", + " \"scaleproc\": 200,\n", + " \"nPCs\": 3,\n", + " \"useRAM\": 0,\n", + "}\n", + "ephys.ClusteringParamSet.insert_new_params(\n", + " clustering_method=\"kilosort2\",\n", + " paramset_idx=0,\n", + " params=params_ks,\n", + " paramset_desc=\"Spike sorting using Kilosort2\",\n", + ")\n", + "ephys.ClusteringParamSet()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we've inserted kilosort parameters into the `ClusteringParamSet` table,\n", + "we're almost ready to sort our data. DataJoint uses a `ClusteringTask` table to\n", + "manage which `EphysRecording` and `ClusteringParamSet` should be used during processing. \n", + "\n", + "This table is important for defining several important aspects of\n", + "downstream processing. Let's view the attributes to get a better understanding. " + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'# Manual table for defining a clustering task ready to be run\\n-> ephys.EphysRecording\\n-> ephys.ClusteringParamSet\\n---\\nclustering_output_dir=\"\" : varchar(255) # clustering output directory relative to the clustering root data directory\\ntask_mode=\"load\" : enum(\\'load\\',\\'trigger\\') # \\'load\\': load computed analysis results, \\'trigger\\': trigger computation\\n'" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.ClusteringTask.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "# Manual table for defining a clustering task ready to be run\n", + "subject : varchar(8) # \n", + "session_datetime : datetime # \n", + "insertion_number : tinyint unsigned # \n", + "paramset_idx : smallint # \n", + "---\n", + "clustering_output_dir=\"\" : varchar(255) # clustering output directory relative to the clustering root data directory\n", + "task_mode=\"load\" : enum('load','trigger') # 'load': load computed analysis results, 'trigger': trigger computation" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.ClusteringTask.heading" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `ClusteringTask` table contains two important attributes: \n", + "+ `paramset_idx` \n", + "+ `task_mode` \n", + "\n", + "The `paramset_idx` attribute is tracks\n", + "your kilosort parameter sets. You can choose the parameter set using which \n", + "you want spike sort ephys data. For example, `paramset_idx=0` may contain\n", + "default parameters for kilosort processing whereas `paramset_idx=1` contains your custom parameters for sorting. This\n", + "attribute tells the `Processing` table which set of parameters you are processing in a given `populate()`.\n", + "\n", + "The `task_mode` attribute can be set to either `load` or `trigger`. When set to `load`,\n", + "running the processing step initiates a search for exisiting kilosort output files. When set to `trigger`, the\n", + "processing step will run kilosort on the raw data. " + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "ephys.ClusteringTask.insert1(\n", + " dict(\n", + " session_key,\n", + " insertion_number=1,\n", + " paramset_idx=0,\n", + " task_mode='load', # load or trigger\n", + " clustering_output_dir=\"subject5/session1/probe_1/ks2.1_01\"\n", + " )\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice we set the `task_mode` to `load`. Let's call populate on the `Clustering`\n", + "table in the pipeline." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Clustering: 100%|██████████| 1/1 [00:00<00:00, 15.88it/s]\n" + ] + } + ], + "source": [ + "ephys.Clustering.populate(session_key, display_progress=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "While spike sorting is completed in the above step, you can optionally curate\n", + "the output of image processing using the `Curation` table. For this demo, we\n", + "will simply use the results of the spike sorting output from the `Clustering` task." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "# Manual curation procedure\n", + "subject : varchar(8) # \n", + "session_datetime : datetime # \n", + "insertion_number : tinyint unsigned # \n", + "paramset_idx : smallint # \n", + "curation_id : int # \n", + "---\n", + "curation_time : datetime # time of generation of this set of curated clustering results\n", + "curation_output_dir : varchar(255) # output directory of the curated results, relative to root data directory\n", + "quality_control : tinyint # has this clustering result undergone quality control?\n", + "manual_curation : tinyint # has manual curation been performed on this clustering result?\n", + "curation_note=\"\" : varchar(2000) # " + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.Curation.heading" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "clustering_key = (ephys.ClusteringTask & session_key).fetch1('KEY')\n", + "ephys.Curation().create1_from_clustering_task(clustering_key)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once the `Curation` table receives an entry, we can populate the remaining\n", + "tables in the workflow including `CuratedClustering`, `WaveformSet`, and `LFP`. " + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [00:02<00:00, 2.22s/it]\n", + "LFP: 100%|██████████| 1/1 [00:20<00:00, 20.91s/it]\n", + "WaveformSet: 100%|██████████| 1/1 [05:47<00:00, 347.33s/it]\n" + ] + } + ], + "source": [ + "ephys.CuratedClustering.populate(session_key, display_progress=True)\n", + "ephys.LFP.populate(session_key, display_progress=True)\n", + "ephys.WaveformSet.populate(session_key, display_progress=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we've populated the tables in this workflow, there are one of\n", + "several next steps. If you have an existing workflow for\n", + "aligning waveforms to behavior data or other stimuli, you can easily\n", + "invoke `element-event` or define your custom DataJoint tables to extend the\n", + "pipeline.\n", + "\n", + "In this tutorial, we will do some exploratory analysis by fetching the data from the database and creating a few plots.\n", + "\n", + "## Query\n", + "\n", + "This section focuses on working with data that is already in the\n", + "database. \n", + "\n", + "DataJoint queries allow you to view and import data from the database into a python\n", + "variable using the `fetch()` method. \n", + "\n", + "There are several important features supported by `fetch()`:\n", + "- By default, an empty `fetch()` imports a list of dictionaries containing all\n", + " attributes of all entries in the table that is queried.\n", + "- **`fetch1()`**, on the other hand, imports a dictionary containing all attributes of\n", + " one of the entries in the table. By default, if a table has multiple entries,\n", + " `fetch1()` imports the first entry in the table.\n", + "- Both `fetch()` and `fetch1()` accept table attributes as an argument to query\n", + " that particular attribute. For example `fetch1('fps')` will fetch the first\n", + " value of the `fps` attribute if it exists in the table.\n", + "- Recommended best practice is to **restrict** queries by primary key attributes of the\n", + " table to ensure the accuracy of imported data.\n", + " - The most common restriction for entries in DataJoint tables is performed\n", + " using the `&` operator. For example to fetch all session start times belonging to\n", + " `subject1`, a possible query could be `subject1_sessions =\n", + " (session.Session & \"subject = 'subject1'\").fetch(\"session_datetime\")`. \n", + "- `fetch()` can also be used to obtain the primary keys of a table. To fetch the primary\n", + " keys of a table use `.fetch(\"KEY\")` syntax.\n", + "\n", + "Let's walk through these concepts of querying by moving from simple to more\n", + "complex queries." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "lfp_average = (ephys.LFP & \"insertion_number = '1'\").fetch1(\"lfp_mean\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the query above, we fetch a single `lfp_mean` attribute from the `LFP` table.\n", + "We also restrict the query to insertion number 1.\n", + "\n", + "Let's go ahead and plot the LFP mean." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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m2kMypUrV+Bxcofkz5s3r9BzFqR8+fICAJWxd+3aVQAgfPbZZwrb09PThfHjxwuenp6ClZWV0KxZMyEyMlJo1aqVwlQLuVJTUwUrKyulqQbySktLEyZPnixUrVpVsLCwEFxcXITg4GDhxx9/FDIzM+Xl1E0DkZiYKAwePFhwcXERLCwshDp16girVq1SKFPQa5b7mXj8+LHCdnXvharpAlRRVy4tLU0YO3asUL58ecHc3Fzw8/MT5s2bpzAEXxAK/mxrej51x/D29pZPxZCRkSFMmDBBqFevnmBrayuUK1dOqFevnrBkyRKlx124cEF47733BGdnZ0EqlQre3t7C+++/L4SHh8vLqHs9BeHN9BBffPGF4OrqKkgkEoW/ReSbxkAQBOH8+fNCaGioYGNjI1hbWwtt2rQRTpw4oVAmdxqDM2fOKGw/fPiwxlMSqPu75GXacEkEgb3biAxRVFQUAgICsG7dOoVO1EREpH/sA0VkAF6/fq20beHChTAxMVE72zQREekP+0ARGYC5c+fi3LlzaNOmDczMzLB3717s3bsXw4YN40gfIiIDxCY8IgMQFhaG6dOn4+rVq3jx4gUqVaqEAQMG4Ouvv4aZGX/nEBEZGiZQRERERCKxDxQRERGRSEygiIiIiERi5wodkMlkePToEWxtbYu8DAgRERGVLEEQkJaWhvLlyystEJ4fEygdePToEUdOERERGan79++jYsWKBZZhAqUDuUs33L9/n2slERERGYnU1FR4eXlptAQTEygdyG22s7OzYwJFRERkZDTpfsNO5EREREQiMYEiIiIiEokJFBEREZFITKCIiIiIRGICRURERCQSEygiIiIikZhAEREREYnEBIqIiIhIJCZQRERERCIxgSIiIiISiQkUERERkUhMoIiIiIhEYgJlZF5n5ug7BCIiojKPCZQROR37DDW+3YdZe67pOxQiIqIyjQmUEZm1903itOzfO3qOhIiIqGxjAmVELtxL1ncIREREBCZQRivldZa+QyAiIiqzmEARERERicQEykjdfvxC3yEQERGVWUygjNTUnVf0HQIREVGZxQTKSEkk+o6AiIio7GICZaSYPxEREekPEygiIiIikZhAEREREYnEBMpICfoOgIiIqAxjAmWkLj1I0XcIREREZRYTKCIiIiKRSlUCNWvWLDRq1Ai2trZwc3ND9+7dERMT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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(lfp_average)\n", + "plt.title(\"Average LFP Waveform for Insertion 1\")\n", + "plt.xlabel(\"Samples\")\n", + "plt.ylabel(\"microvolts (uV)\");" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "DataJoint queries are a highly flexible tool to manipulate and visualize your data.\n", + "After all, visualizing traces or generating rasters is likely just the start of\n", + "your analysis workflow. This can also make the queries seem more complex at\n", + "first. However, we'll walk through them slowly to simplify their content in this notebook. \n", + "\n", + "The examples below perform several operations using DataJoint queries:\n", + "- Fetch the primary key attributes of all units that are in `insertion_number=1`.\n", + "- Use **multiple restrictions** to fetch timestamps and create a raster plot.\n", + "- Use a **join** operation and **multiple restrictions** to fetch a waveform\n", + " trace, along with unit data to create a single waveform plot" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "insert_key = (ephys.ProbeInsertion & \"insertion_number = '1'\").fetch1(\"KEY\")\n", + "units, unit_spiketimes = (ephys.CuratedClustering.Unit & insert_key & 'unit IN (\"6\",\"7\",\"9\",\"14\",\"15\",\"17\",\"19\")').fetch(\"unit\", \"spike_times\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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f/31AazWf2pqapSVlaXFixd7Xf/kk0/queee09KlS5WXl6fevXtrypQpqqurc29zyy236KuvvtJHH32klStXauPGjZo7d253TcFvztYLSZo6darHdfLaa695rDdDLzZs2KB58+bps88+00cffaSTJ09q8uTJqqmpcW9ztsdEQ0ODrrnmGtXX1+vTTz/VSy+9pGXLlmnRokWBmFKH+NIHSZozZ47HNfHkk0+615mhD5I0YMAAPf7449q2bZu2bt2qq666SjNmzNBXX30l6dy4HlzO1gupm64JA+126aWXGvPmzXPfb2hoMFJSUozc3NwAVtW1HnnkESMrK8vrusrKSiM8PNz4xz/+4V729ddfG5KMzZs3d1OF3UOSsXz5cvf9xsZGo1+/fsYf/vAH97LKykrDarUar732mmEYhrF7925DkvH555+7t1m1apVhsViMQ4cOdVvt/ta8F4ZhGLNnzzZmzJjR6j5m7UV5ebkhydiwYYNhGL49Jt5//30jJCTEKC0tdW+zZMkSIzY21nA6nd07AT9p3gfDMIwrr7zSuPfee1vdx4x9cOnTp4/xwgsvnLPXQ1OuXhhG910TvIPTTvX19dq2bZsmTZrkXhYSEqJJkyZp8+bNAays6xUWFiolJUWDBw/WLbfcopKSEknStm3bdPLkSY+enH/++UpLSzN9T4qLi1VaWuoxd5vNppycHPfcN2/erLi4OF188cXubSZNmqSQkBDl5eV1e81dbf369UpKStKwYcN055136vjx4+51Zu2F3W6XJMXHx0vy7TGxefNmjRo1SsnJye5tpkyZIofD4fF/uj1J8z64vPLKK0pMTNTIkSO1cOFC1dbWuteZsQ8NDQ16/fXXVVNTo7Fjx56z14PUshcu3XFNmP4f2/S3Y8eOqaGhwaPxkpScnKx//etfAaqq6+Xk5GjZsmUaNmyYjhw5ot/85je64oortGvXLpWWlioiIkJxcXEe+yQnJ6u0tDQwBXcT1/y8XQ+udaWlpUpKSvJYHxYWpvj4eNP1Z+rUqbr++uuVnp6uvXv36sEHH9S0adO0efNmhYaGmrIXjY2Nmj9/vi6//HKNHDlSknx6TJSWlnq9blzrehpvfZCkn/zkJxo4cKBSUlK0c+dO/fKXv9SePXv09ttvSzJXH7788kuNHTtWdXV1io6O1vLlyzV8+HDl5+efc9dDa72Q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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x = np.hstack(unit_spiketimes)\n", + "y = np.hstack([np.full_like(s, u) for u, s in zip(units, unit_spiketimes)])\n", + "plt.plot(x, y, \"|\")\n", + "plt.xlabel(\"Time (s)\")\n", + "plt.ylabel(\"Unit\");" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "unit_key = (ephys.CuratedClustering.Unit & insert_key & \"unit = '15'\").fetch1(\"KEY\")\n", + "unit_data = (ephys.CuratedClustering.Unit * ephys.WaveformSet.PeakWaveform & unit_key).fetch1()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'subject': 'subject5',\n", + " 'session_datetime': datetime.datetime(2023, 3, 20, 21, 44, 9),\n", + " 'insertion_number': 1,\n", + " 'paramset_idx': 0,\n", + " 'curation_id': 1,\n", + " 'unit': 15,\n", + " 'electrode_config_hash': UUID('8d4cc6d8-a02d-42c8-bf27-7459c39ea0ee'),\n", + " 'probe_type': 'neuropixels 1.0 - 3A',\n", + " 'electrode': 186,\n", + " 'cluster_quality_label': 'good',\n", + " 'spike_count': 18,\n", + " 'spike_times': array([ 48.74336667, 67.63773333, 69.05666667, 83.11203333,\n", + " 94.1978 , 108.0454 , 110.36893333, 122.16836667,\n", + " 149.41143333, 152.55593333, 182.84816667, 236.8929 ,\n", + " 270.40613333, 292.4432 , 299.99216667, 321.74016667,\n", + " 326.5434 , 329.26373333]),\n", + " 'spike_sites': array([186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,\n", + " 186, 186, 186, 186, 186]),\n", + " 'spike_depths': array([2144.38644037, 2240.44959257, 2286.37081289, 2177.07452433,\n", + " 2227.42382471, 2143.86346649, 2235.74014979, 2236.04354982,\n", + " 2236.06676094, 2299.53408387, 2222.6567435 , 2165.88562393,\n", + " 2165.55087743, 2254.93847903, 2241.71132163, 2057.9714868 ,\n", + " 2272.82484323, 2229.42266297]),\n", + " 'peak_electrode_waveform': array([-343.61979167, -345.703125 , -344.79166667, -341.53645833,\n", + " -339.0625 , -340.88541667, -342.1875 , -339.97395833,\n", + " -338.02083333, -336.97916667, -338.41145833, -341.53645833,\n", + " -343.48958333, -344.53125 , -341.796875 , -337.36979167,\n", + " -339.32291667, -336.58854167, -338.80208333, -337.63020833,\n", + " -336.97916667, -338.02083333, -338.02083333, -333.984375 ,\n", + " -324.86979167, -317.05729167, -313.93229167, -309.765625 ,\n", + " -304.296875 , -300.13020833, -300.65104167, -301.43229167,\n", + " -306.11979167, -311.58854167, -316.40625 , -320.57291667,\n", + " -333.203125 , -339.58333333, -340.625 , -337.63020833,\n", + " -344.140625 , -350.91145833, -356.11979167, -363.80208333,\n", + " -375. , -379.42708333, -382.68229167, -389.97395833,\n", + " -391.796875 , -393.61979167, -390.625 , -395.96354167,\n", + " -400.52083333, -399.73958333, -395.18229167, -392.96875 ,\n", + " -395.05208333, -391.796875 , -392.31770833, -387.36979167,\n", + " -387.23958333, -387.890625 , -384.375 , -383.33333333])}" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unit_data" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sampling_rate = (ephys.EphysRecording & insert_key).fetch1(\n", + " \"sampling_rate\"\n", + ") / 1000 # in kHz\n", + "plt.plot(\n", + " np.r_[: unit_data[\"peak_electrode_waveform\"].size] * 1 / sampling_rate,\n", + " unit_data[\"peak_electrode_waveform\"],\n", + ")\n", + "plt.xlabel(\"Time (ms)\")\n", + "plt.ylabel(r\"Voltage ($\\mu$V)\");" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this tutorial notebook on your own data, please use the following steps:\n", + "- Download the mysql-docker image for DataJoint and run the container according to the\n", + " instructions provide in the repository.\n", + "- Create a fork of this repository to your GitHub account.\n", + "- Clone the repository and open the files using your IDE.\n", + "- Add a code cell immediately after the first code cell in the notebook - we will setup\n", + " the local connection using this cell. In this cell, type in the following code. \n", + "\n", + "```python\n", + "import datajoint as dj\n", + "dj.config[\"database.host\"] = \"localhost\"\n", + "dj.config[\"database.user\"] = \"\"\n", + "dj.config[\"database.password\"] = \"\"\n", + "dj.config[\"custom\"] = {\"imaging_root_data_dir\": \"path/to/your/data/dir\",\n", + "\"database_prefix\": \"\"}\n", + "dj.config.save_local()\n", + "dj.conn()\n", + "```\n", + "\n", + "- Run this code cell and proceed with the rest of the notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] } ], "metadata": { @@ -15,8 +2168,16 @@ "name": "python3" }, "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", "name": "python", - "version": "3.10.4 (main, Mar 31 2022, 03:38:35) [Clang 12.0.0 ]" + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" }, "orig_nbformat": 4, "vscode": {