From 5f756c36675e5191f2b19d2581dcf1a4b0991729 Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Wed, 25 Oct 2023 12:03:22 -0500 Subject: [PATCH 01/27] First commit for codespace compatability --- .devcontainer/Dockerfile | 48 +++++++++++++++++++++ .devcontainer/devcontainer.json | 30 +++++++++++++ .devcontainer/docker-compose.yaml | 25 +++++++++++ .gitignore | 2 - .markdownlint.yaml | 2 + .vscode/launch.json | 16 +++++++ .vscode/settings.json | 15 +++++++ CHANGELOG.md | 9 ++++ CONTRIBUTING.md | 2 +- Dockerfile | 15 ------- cspell.json | 70 +++++++++++++++++++++++++++---- docker-compose-build.yaml | 26 ------------ docker-compose-db.yaml | 15 +++++++ element_array_ephys/__init__.py | 23 +++++----- element_array_ephys/version.py | 2 +- notebooks/tutorial_pipeline.py | 32 ++++++++++++++ requirements.txt | 10 ----- requirements_dev.txt | 3 -- setup.py | 37 +++++++++++----- 19 files changed, 292 insertions(+), 90 deletions(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/docker-compose.yaml create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json delete mode 100644 Dockerfile delete mode 100644 docker-compose-build.yaml create mode 100644 docker-compose-db.yaml create mode 100644 notebooks/tutorial_pipeline.py delete mode 100644 requirements.txt delete mode 100644 requirements_dev.txt diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..1d10e278 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,48 @@ +FROM python:3.9-slim@sha256:5f0192a4f58a6ce99f732fe05e3b3d00f12ae62e183886bca3ebe3d202686c7f + +ENV PATH /usr/local/bin:$PATH +ENV PYTHON_VERSION 3.9.17 + +RUN \ + adduser --system --disabled-password --shell /bin/bash vscode && \ + # install docker + apt-get update && \ + apt-get install ca-certificates curl gnupg lsb-release -y && \ + mkdir -m 0755 -p /etc/apt/keyrings && \ + curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \ + apt-get update && \ + apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y && \ + usermod -aG docker vscode && \ + apt-get clean + +RUN \ + # dev setup + apt update && \ + apt-get install sudo git bash-completion graphviz default-mysql-client s3fs procps -y && \ + usermod -aG sudo vscode && \ + echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \ + pip install --no-cache-dir --upgrade black pip nbconvert && \ + echo '. /etc/bash_completion' >> /home/vscode/.bashrc && \ + echo 'export PS1="\[\e[32;1m\]\u\[\e[m\]@\[\e[34;1m\]\H\[\e[m\]:\[\e[33;1m\]\w\[\e[m\]$ "' >> /home/vscode/.bashrc && \ + apt-get clean + +COPY ./ /tmp/element-array-ephys/ + +RUN \ + # pipeline dependencies + apt-get install gcc g++ ffmpeg libsm6 libxext6 -y && \ + pip install --no-cache-dir -e /tmp/element-array-ephys[elements,tests] && \ + # clean up + rm -rf /tmp/element-array-ephys && \ + apt-get clean + +ENV DJ_HOST fakeservices.datajoint.io +ENV DJ_USER root +ENV DJ_PASS simple + +ENV IMAGING_ROOT_DATA_DIR /workspaces/element-array-ephys/example_data +ENV DATABASE_PREFIX neuro_ + +USER vscode +CMD bash -c "sudo rm /var/run/docker.pid; sudo dockerd" \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..bf939e88 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,30 @@ +{ + "name": "Environment + Data", + "dockerComposeFile": "docker-compose.yaml", + "service": "app", + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + "remoteEnv": { + "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" + }, + "onCreateCommand": "mkdir -p ${EPHYS_ROOT_DATA_DIR} && pip install -e .", + "postStartCommand": "docker volume prune -f && s3fs ${DJ_PUBLIC_S3_LOCATION} ${EPHYS_ROOT_DATA_DIR} -o nonempty,multipart_size=530,endpoint=us-east-1,url=http://s3.amazonaws.com,public_bucket=1", + "hostRequirements": { + "cpus": 4, + "memory": "8gb", + "storage": "32gb" + }, + "forwardPorts": [ + 3306 + ], + "customizations": { + "settings": { + "python.pythonPath": "/usr/local/bin/python" + }, + "vscode": { + "extensions": [ + "ms-python.python@2023.8.0", + "ms-toolsai.jupyter@2023.3.1201040234" + ] + } + } +} \ No newline at end of file diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml new file mode 100644 index 00000000..52b23ad4 --- /dev/null +++ b/.devcontainer/docker-compose.yaml @@ -0,0 +1,25 @@ +version: "3" +services: + app: + cpus: 4 + mem_limit: 8g + # build: + # context: .. + # dockerfile: ./.devcontainer/Dockerfile + image: datajoint/element_array_ephys:latest + extra_hosts: + - fakeservices.datajoint.io:127.0.0.1 + environment: + - DJ_PUBLIC_S3_LOCATION=djhub.vathes.datapub.elements:/workflow-array-ephys-benchmark/v2 + devices: + - /dev/fuse + cap_add: + - SYS_ADMIN + security_opt: + - apparmor:unconfined + volumes: + - ..:/workspaces/element-array-ephys:cached + - docker_data:/var/lib/docker # persist docker images + privileged: true # only because of dind +volumes: + docker_data: diff --git a/.gitignore b/.gitignore index e25ed045..8d8c0177 100644 --- a/.gitignore +++ b/.gitignore @@ -116,13 +116,11 @@ dj_local_conf_old.json **/#*# **/.#* -docker-compose.y*ml # include !docs/docker-compose.yaml # vscode settings -.vscode *.code-workspace # exports/notes diff --git a/.markdownlint.yaml b/.markdownlint.yaml index 7420359b..ac52a8aa 100644 --- a/.markdownlint.yaml +++ b/.markdownlint.yaml @@ -11,6 +11,8 @@ MD030: false # Number of spaces after a list MD033: # HTML elements allowed allowed_elements: - "br" + - "figure" + - "figcaption" MD034: false # Permit bare URLs MD031: false # Spacing w/code blocks. Conflicts with `??? Note` and code tab styling MD046: false # Spacing w/code blocks. Conflicts with `??? Note` and code tab styling diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..2b2502c6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Current File", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "justMyCode": false + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..e1160fae --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,15 @@ +{ + "editor.formatOnPaste": false, + "editor.formatOnSave": true, + "editor.rulers": [ + 88 + ], + "python.formatting.provider": "black", + "[python]": { + "editor.defaultFormatter": null + }, + "[markdown]": { + "editor.defaultFormatter": "disable" + }, + "files.autoSave": "off" +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 35f7120e..001e9e13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ Observes [Semantic Versioning](https://semver.org/spec/v2.0.0.html) standard and [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) convention. +## [0.3.0] - 2023-10-25 + ++ Add - DevContainer for codespaces ++ Add - `tutorial_pipeline.py` ++ Add - 60 min tutorial using Jupyter Notebooks, short demo notebook ++ Update - General improvements to increase consistency with other DataJoint Elements + ## [0.2.11] - 2023-06-29 + Update - Improve kilosort triggering routine - better logging, remove temporary files, robust resumable processing @@ -126,6 +133,8 @@ Observes [Semantic Versioning](https://semver.org/spec/v2.0.0.html) standard and + Add - Probe table supporting: Neuropixels probes 1.0 - 3A, 1.0 - 3B, 2.0 - SS, 2.0 - MS +[0.3.0]: https://github.com/datajoint/element-array-ephys/releases/tag/0.3.0 +[0.2.11]: https://github.com/datajoint/element-array-ephys/releases/tag/0.2.11 [0.2.10]: https://github.com/datajoint/element-array-ephys/releases/tag/0.2.10 [0.2.9]: https://github.com/datajoint/element-array-ephys/releases/tag/0.2.9 [0.2.8]: https://github.com/datajoint/element-array-ephys/releases/tag/0.2.8 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e04d1708..2bd0f498 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,5 @@ # Contribution Guidelines This project follows the -[DataJoint Contribution Guidelines](https://datajoint.com/docs/community/contribute/). +[DataJoint Contribution Guidelines](https://datajoint.com/docs/about/contribute/). Please reference the link for more full details. diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index c144a405..00000000 --- a/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -ARG PY_VER -ARG DISTRO -ARG IMAGE -ARG PKG_NAME -ARG PKG_VERSION - -FROM datajoint/${IMAGE}:py${PY_VER}-${DISTRO} -COPY --chown=anaconda:anaconda ./requirements.txt ./setup.py \ - /main/ -COPY --chown=anaconda:anaconda ./${PKG_NAME} /main/${PKG_NAME} -RUN \ - cd /main && \ - pip install . && \ - rm -R /main/* -WORKDIR /main diff --git a/cspell.json b/cspell.json index 524ca0da..cb07a240 100644 --- a/cspell.json +++ b/cspell.json @@ -4,7 +4,9 @@ "version": "0.2", // Version of the setting file. Always 0.2 "language": "en", // language - current active spelling language "enabledLanguageIds": [ - "markdown", "yaml", "python" + "markdown", + "yaml", + "python" ], // flagWords - list of words to be always considered incorrect // This is useful for offensive words and common spelling errors. @@ -22,6 +24,7 @@ "Andreas", "apmeta", "arange", + "arithmatex", "asarray", "astype", "autocorrelogram", @@ -29,79 +32,111 @@ "bbins", "bdist", "Binarize", + "bouton", "Brody", + "Bruker", + "bshift", "Buccino", "catgt", "cbar", "cbin", "cdat", - "Chans", "chans", + "Chans", "chns", "Clust", "clusterings", "cmap", + "cnmf", "correlogram", "correlograms", "curations", "DANDI", "decomp", + "deconvolution", "DISTRO", "djbase", "dtype", "ecephys", + "Eftychios", "electrophysiogical", "elif", "Ephys", + "fluo", + "fneu", + "Fneu", "gblcar", "gfix", + "Giovannucci", + "Hakan", "hdmf", "HHMI", "hstack", "ibllib", "ifnull", + "imax", "Imax", "IMAX", - "imax", "imec", "imread", "imro", "imrotbl", "imshow", + "Inan", "inlinehilite", + "iplane", "ipynb", "ipywidgets", + "iscell", + "Kavli", "kcoords", "Klusta", "Kwik", "lfmeta", "linenums", + "masky", + "mathjax", "mdict", "Mesoscale", + "mesoscope", "mkdocs", "mkdocstrings", "Moser", "mtscomp", - "Nchan", + "nblocks", "nchan", + "Nchan", + "nchannels", "ndarray", + "ndepths", "ndim", "ndimage", "Neuralynx", "NEURO", "neuroconv", "Neurodata", + "Neurolabware", + "neuropil", + "Neuropil", "Neuropix", "neuropixel", "NeuroPixels", + "nfields", + "nframes", + "npix", + "nplanes", + "nrois", + "NTNU", "nwbfile", "NWBHDF", "oebin", "openephys", - "openephys", "openpyxl", + "Pachitariu", + "paramsets", "phylog", "plotly", + "Pnevmatikakis", "PSTH", "pykilosort", "pymdownx", @@ -109,48 +144,67 @@ "pyopenephys", "pyplot", "pytest", + "quantile", "Reimer", "repolarization", "Roboto", + "roidetect", + "rois", + "ROIs", "RRID", "Rxiv", "Sasaki", + "sbxreader", "scipy", "sdist", - "Siegle", "sess", "SGLX", "Shen", + "Siegle", "Sitonic", "spikeglx", "spkcount", + "spks", "Stereotaxic", + "Sutter", "tcat", "tickvals", "tofile", "Tolias", "tqdm", + "usecs", + "usedb", + "Vidrio's", "vline", - "Vmax", "vmax", + "Vmax", + "voxel", "xanchor", "xaxes", "xaxis", + "xblock", "xcoords", "xcorr", "xlabel", "xlim", + "xoff", + "xpix", "XPOS", "xtick", + "yanchor", "Yatsenko", "yaxes", "yaxis", + "yblock", "ycoord", "ycoords", "ylabel", "ylim", + "yoff", + "ypix", "YPOS", "yref", - "yticks" + "yticks", + "zpix" ] } diff --git a/docker-compose-build.yaml b/docker-compose-build.yaml deleted file mode 100644 index 81984c7c..00000000 --- a/docker-compose-build.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# PY_VER=3.8 IMAGE=djbase DISTRO=alpine PKG_NAME=$(python -c "print([p for p in __import__('setuptools').find_packages() if '.' not in p][0])") PKG_VERSION=$(cat ${PKG_NAME}/version.py | awk -F\' '/__version__/ {print $2}') HOST_UID=$(id -u) docker-compose -f docker-compose-build.yaml up --exit-code-from element --build -# -# Intended for updating dependencies and docker image. -# Used to build release artifacts. -version: "2.4" -services: - element: - build: - context: . - args: - - PY_VER - - DISTRO - - IMAGE - - PKG_NAME - - PKG_VERSION - image: datajoint/${PKG_NAME}:${PKG_VERSION} - user: ${HOST_UID}:anaconda - volumes: - - .:/main - command: - - sh - - -lc - - | - set -e - rm -R build dist *.egg-info || echo "No prev build" - python setup.py bdist_wheel sdist diff --git a/docker-compose-db.yaml b/docker-compose-db.yaml new file mode 100644 index 00000000..1d453c89 --- /dev/null +++ b/docker-compose-db.yaml @@ -0,0 +1,15 @@ +# MYSQL_VER=8.0 docker compose -f docker-compose-db.yaml up --build +version: "3" +services: + db: + restart: always + image: datajoint/mysql:${MYSQL_VER} + environment: + - MYSQL_ROOT_PASSWORD=${DJ_PASS} + ports: + - "3306:3306" + healthcheck: + test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ] + timeout: 15s + retries: 10 + interval: 15s diff --git a/element_array_ephys/__init__.py b/element_array_ephys/__init__.py index 3a0e5af6..99acf32a 100644 --- a/element_array_ephys/__init__.py +++ b/element_array_ephys/__init__.py @@ -1,22 +1,19 @@ -""" -isort:skip_file -""" - -import logging import os - import datajoint as dj +if "custom" not in dj.config: + dj.config["custom"] = {} -__all__ = ["ephys", "get_logger"] - -dj.config["enable_python_native_blobs"] = True +# overwrite dj.config['custom'] values with environment variables if available +dj.config["custom"]["database.prefix"] = os.getenv( + "DATABASE_PREFIX", dj.config["custom"].get("database.prefix", "") +) -def get_logger(name): - log = logging.getLogger(name) - log.setLevel(os.getenv("LOGLEVEL", "INFO")) - return log +dj.config["custom"]["ephys_root_data_dir"] = os.getenv( + "EPHYS_ROOT_DATA_DIR", dj.config["custom"].get("ephys_root_data_dir", "") +) +db_prefix = dj.config["custom"].get("database.prefix", "") from . import ephys_acute as ephys diff --git a/element_array_ephys/version.py b/element_array_ephys/version.py index 122aedf1..6669fd89 100644 --- a/element_array_ephys/version.py +++ b/element_array_ephys/version.py @@ -1,2 +1,2 @@ """Package metadata.""" -__version__ = "0.2.11" +__version__ = "0.3.0" diff --git a/notebooks/tutorial_pipeline.py b/notebooks/tutorial_pipeline.py new file mode 100644 index 00000000..d5026bce --- /dev/null +++ b/notebooks/tutorial_pipeline.py @@ -0,0 +1,32 @@ +import datajoint as dj +from element_animal import subject +from element_animal.subject import Subject +from element_array_ephys import db_prefix, probe, ephys_acute as ephys +from element_lab import lab +from element_lab.lab import Lab, Location, Project, Protocol, Source, User +from element_lab.lab import Device as Equipment +from element_lab.lab import User as Experimenter +from element_session import session_with_id as session +from element_session.session_with_id import Session +import element_interface +import pathlib + + +# Declare functions for retrieving data +def get_ephys_root_data_dir(): + """Retrieve ephys root data directory.""" + ephys_root_dirs = dj.config.get("custom", {}).get("ephys_root_data_dir", None) + if not ephys_root_dirs: + return None + elif isinstance(ephys_root_dirs, (str, pathlib.Path)): + return [ephys_root_dirs] + elif isinstance(ephys_root_dirs, list): + return ephys_root_dirs + else: + raise TypeError("`ephys_root_data_dir` must be a string, pathlib, or list") + +# Activate schemas +lab.activate(db_prefix + "lab") +subject.activate(db_prefix + "subject", linking_module=__name__) +session.activate(db_prefix + "session", linking_module=__name__) +ephys.activate(db_prefix + "ephys", db_prefix + "probe", linking_module=__name__) diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 528f6349..00000000 --- a/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -datajoint>=0.13 -element-interface>=0.4.0 -ipywidgets -openpyxl -plotly -pyopenephys>=1.1.6 -seaborn -scikit-image -spikeinterface -nbformat>=4.2.0 \ No newline at end of file diff --git a/requirements_dev.txt b/requirements_dev.txt deleted file mode 100644 index 0652d0e2..00000000 --- a/requirements_dev.txt +++ /dev/null @@ -1,3 +0,0 @@ -pre-commit -pytest -pytest-cov diff --git a/setup.py b/setup.py index 31b9be61..abd3a92d 100644 --- a/setup.py +++ b/setup.py @@ -1,19 +1,13 @@ from os import path - from setuptools import find_packages, setup -pkg_name = next(p for p in find_packages() if "." not in p) + +pkg_name = "element_array_ephys" here = path.abspath(path.dirname(__file__)) with open(path.join(here, "README.md"), "r") as f: long_description = f.read() -with open(path.join(here, "requirements.txt")) as f: - requirements = f.read().splitlines() - -with open(path.join(here, "requirements_dev.txt")) as f: - requirements_dev = f.read().splitlines() - with open(path.join(here, "element_array_ephys/export/nwb/requirements.txt")) as f: requirements_nwb = f.read().splitlines() @@ -23,7 +17,7 @@ setup( name=pkg_name.replace("_", "-"), version=__version__, # noqa F821 - description="DataJoint Element for Extracellular Array Electrophysiology", + description="Extracellular Array Electrophysiology DataJoint Element", long_description=long_description, long_description_content_type="text/markdown", author="DataJoint", @@ -32,7 +26,28 @@ url=f'https://github.com/datajoint/{pkg_name.replace("_", "-")}', keywords="neuroscience electrophysiology science datajoint", packages=find_packages(exclude=["contrib", "docs", "tests*"]), - extras_require={"dev": requirements_dev, "nwb": requirements_nwb}, scripts=[], - install_requires=requirements, + install_requires=[ + "datajoint>=0.13.0", + "ipykernel>=6.0.1", + "ipywidgets", + "openpyxl", + "plotly", + "seaborn", + "spikeinterface", + "scikit-image", + "nbformat>=4.2.0", + "pyopenephys>=1.1.6", + ], + extras_require={ + "elements": [ + "element-animal>=0.1.8", + "element-event>=0.2.3", + "element-interface>=0.4.0", + "element-lab>=0.3.0", + "element-session>=0.1.5", + ], + "nwb": ["dandi", "neuroconv[ecephys]", "pynwb"], + "tests": ["pre-commit", "pytest", "pytest-cov"], + }, ) From 5e2d7bef950f70007dc418c9975c22b3488c95a1 Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Wed, 25 Oct 2023 12:10:11 -0500 Subject: [PATCH 02/27] Enable devcontainer builds in CICD --- .github/workflows/release.yaml | 18 +++++++++--------- .github/workflows/test.yaml | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 9ae4ef02..4a5f2cb5 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,12 +16,12 @@ jobs: uses: datajoint/.github/.github/workflows/mkdocs_release.yaml@main permissions: contents: write - # devcontainer-build: - # uses: datajoint/.github/.github/workflows/devcontainer-build.yaml@main - # devcontainer-publish: - # needs: - # - devcontainer-build - # uses: datajoint/.github/.github/workflows/devcontainer-publish.yaml@main - # secrets: - # DOCKERHUB_USERNAME: ${{secrets.DOCKERHUB_USERNAME}} - # DOCKERHUB_TOKEN: ${{secrets.DOCKERHUB_TOKEN_FOR_ELEMENTS}} \ No newline at end of file + devcontainer-build: + uses: datajoint/.github/.github/workflows/devcontainer-build.yaml@main + devcontainer-publish: + needs: + - devcontainer-build + uses: datajoint/.github/.github/workflows/devcontainer-publish.yaml@main + secrets: + DOCKERHUB_USERNAME: ${{secrets.DOCKERHUB_USERNAME}} + DOCKERHUB_TOKEN: ${{secrets.DOCKERHUB_TOKEN_FOR_ELEMENTS}} \ No newline at end of file diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index acaddca0..e5e6a07a 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -4,8 +4,8 @@ on: pull_request: workflow_dispatch: jobs: - # devcontainer-build: - # uses: datajoint/.github/.github/workflows/devcontainer-build.yaml@main + devcontainer-build: + uses: datajoint/.github/.github/workflows/devcontainer-build.yaml@main tests: runs-on: ubuntu-latest strategy: From 6c6afe4778466b26dbf846c84d1d77daf8672ca7 Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Wed, 25 Oct 2023 12:10:58 -0500 Subject: [PATCH 03/27] Black formatting --- element_array_ephys/probe.py | 8 +++++--- element_array_ephys/readers/spikeglx.py | 5 +---- notebooks/tutorial_pipeline.py | 1 + 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/element_array_ephys/probe.py b/element_array_ephys/probe.py index 1d517cf3..f0aa4ddd 100644 --- a/element_array_ephys/probe.py +++ b/element_array_ephys/probe.py @@ -107,10 +107,12 @@ def create_neuropixels_probe(probe_type: str = "neuropixels 1.0 - 3A"): npx_probes_config["neuropixels 2.0 - MS"] = npx_probes_config["NP2010"] probe_type = {"probe_type": probe_type} - probe_params = dict(zip( + probe_params = dict( + zip( probe_geometry.geom_param_names, - npx_probes_config[probe_type["probe_type"]] - )) + npx_probes_config[probe_type["probe_type"]], + ) + ) electrode_layouts = probe_geometry.build_npx_probe( **{**probe_params, **probe_type} ) diff --git a/element_array_ephys/readers/spikeglx.py b/element_array_ephys/readers/spikeglx.py index 819b7b1a..6d9ba4f6 100644 --- a/element_array_ephys/readers/spikeglx.py +++ b/element_array_ephys/readers/spikeglx.py @@ -451,10 +451,7 @@ def _transform_geom_to_shank(self): from . import probe_geometry probe_params = dict( - zip( - probe_geometry.geom_param_names, - probe_geometry.M[self.probe_PN] - ) + zip(probe_geometry.geom_param_names, probe_geometry.M[self.probe_PN]) ) probe_params["probe_type"] = self.probe_PN elec_pos_df = probe_geometry.build_npx_probe(**probe_params) diff --git a/notebooks/tutorial_pipeline.py b/notebooks/tutorial_pipeline.py index d5026bce..1e3d2f46 100644 --- a/notebooks/tutorial_pipeline.py +++ b/notebooks/tutorial_pipeline.py @@ -25,6 +25,7 @@ def get_ephys_root_data_dir(): else: raise TypeError("`ephys_root_data_dir` must be a string, pathlib, or list") + # Activate schemas lab.activate(db_prefix + "lab") subject.activate(db_prefix + "subject", linking_module=__name__) From dcd768a0e7bc799b9da968ed8831738d1facbee1 Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Wed, 25 Oct 2023 12:41:19 -0500 Subject: [PATCH 04/27] Allow build step in docker-compose --- .devcontainer/docker-compose.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml index 52b23ad4..7a8c2e14 100644 --- a/.devcontainer/docker-compose.yaml +++ b/.devcontainer/docker-compose.yaml @@ -3,10 +3,10 @@ services: app: cpus: 4 mem_limit: 8g - # build: - # context: .. - # dockerfile: ./.devcontainer/Dockerfile - image: datajoint/element_array_ephys:latest + build: + context: .. + dockerfile: ./.devcontainer/Dockerfile + # image: datajoint/element_array_ephys:latest extra_hosts: - fakeservices.datajoint.io:127.0.0.1 environment: From 1bea230d0789be6632c8dbb78139d9a2b8f92421 Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:53:40 +0000 Subject: [PATCH 05/27] Update root data dir env --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 1d10e278..2d0e9261 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -41,7 +41,7 @@ ENV DJ_HOST fakeservices.datajoint.io ENV DJ_USER root ENV DJ_PASS simple -ENV IMAGING_ROOT_DATA_DIR /workspaces/element-array-ephys/example_data +ENV EPHYS_ROOT_DATA_DIR /workspaces/element-array-ephys/example_data ENV DATABASE_PREFIX neuro_ USER vscode From f5ab71d8abfcfe973d9792e91307ed705d56f54b Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Wed, 25 Oct 2023 18:01:59 +0000 Subject: [PATCH 06/27] Update `.gitignore` to include Codespaces --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 8d8c0177..3f5c0d84 100644 --- a/.gitignore +++ b/.gitignore @@ -125,3 +125,6 @@ dj_local_conf_old.json # exports/notes temp* + +# Codespaces +example_data/ \ No newline at end of file From caf5c9109d43e373c262d3757c0bc3edd54d416f Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Wed, 25 Oct 2023 16:23:44 -0500 Subject: [PATCH 07/27] Add tutorial notebook --- notebooks/tutorial.ipynb | 2624 ++++++++++++++++++++++++++++++++ notebooks/tutorial_pipeline.py | 2 +- 2 files changed, 2625 insertions(+), 1 deletion(-) create mode 100644 notebooks/tutorial.ipynb diff --git a/notebooks/tutorial.ipynb b/notebooks/tutorial.ipynb new file mode 100644 index 00000000..9e7e40a9 --- /dev/null +++ b/notebooks/tutorial.ipynb @@ -0,0 +1,2624 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# DataJoint Element Tutorial: Array Electrophysiology\n", + "\n", + "Welcome to the DataJoint Element tutorial for Array Electrophysiology! Dive into the world of automated analyses and organization of extracellular array electrophysiology data.\n", + "\n", + "**In this tutorial, we will cover:**\n", + "- The basics:\n", + " - Differentiating between an Element and a pipeline.\n", + " - How to plot the pipeline with `dj.Diagram`.\n", + "- Hands-on interactions with the pipeline:\n", + " - Inserting data into tables.\n", + " - Querying table contents.\n", + " - Fetching table contents.\n", + " - Running the pipeline for your experiments.\n", + "- A walk-through:\n", + " - Processing NeuroPixels ephys data acquired with OpenEphys and sorted with Kilosort.\n", + "\n", + "**Additional Resources:**\n", + "- [Interactive Tutorials](https://github.com/datajoint/datajoint-tutorials) on `datajoint-python`: Dive deep into DataJoint's fundamentals.\n", + "- [*`datajoint-python`* Documentation](https://datajoint.com/docs/core/datajoint-python/): Comprehensive documentation on DataJoint for Python.\n", + "- [Element Array Electrophysiology Documentation](https://datajoint.com/docs/elements/element-array-ephys/): Detailed guide on the DataJoint Element for Array Electrophysiology.\n", + "\n", + "Before we jump into the core concepts, let's ensure we have all the necessary packages imported." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import datajoint as dj\n", + "import datetime\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Combine multiple Elements into a pipeline\n", + "\n", + "Each DataJoint Element is a modular set of tables that can be combined into a complete\n", + "pipeline. Here are the definitions for clarity:\n", + "\n", + "+ **Element**: A modular chunk of related tables.\n", + "+ **Module**: In Python, a module is a file containing definitions and statements. In the context of DataJoint, modules often define and structure related database tables.\n", + "+ **Schema**: Think of a schema as a container or namespace within the database where related tables are grouped together. It helps organize and manage the database structure.\n", + "+ **Table**: A structured set of data held within the database. It consists of rows and columns, much like an Excel spreadsheet.\n", + "\n", + "Each Element contains 1 or more modules, and each module declares its own schema in the database.\n", + "\n", + "This tutorial pipeline is assembled from four DataJoint Elements.\n", + "\n", + "| Element | Source Code | Documentation | Description |\n", + "| -- | -- | -- | -- |\n", + "| Element Lab | [Link](https://github.com/datajoint/element-lab) | [Link](https://datajoint.com/docs/elements/element-lab) | Lab management related information, such as Lab, User, Project, Protocol, Source. |\n", + "| Element Animal | [Link](https://github.com/datajoint/element-animal) | [Link](https://datajoint.com/docs/elements/element-animal) | General animal metadata and surgery information. |\n", + "| Element Session | [Link](https://github.com/datajoint/element-session) | [Link](https://datajoint.com/docs/elements/element-session) | General information of experimental sessions. |\n", + "| Element Array Ephys | [Link](https://github.com/datajoint/element-array-ephys) | [Link](https://datajoint.com/docs/elements/element-array-ephys) | NeuroPixels Array Electrophysiology analysis with Kilosort. |\n", + "\n", + "By importing the modules for the first time, the schemas and tables will be created in the database. Once created, importing modules will not create schemas and tables again, but the existing schemas/tables can be accessed.\n", + "\n", + "The Elements are imported and activated within the `tutorial_pipeline` script." + ] + }, + { + "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 tutorial_pipeline import (\n", + " lab,\n", + " subject,\n", + " session,\n", + " probe,\n", + " ephys,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each Python module (e.g. `subject`) contains a schema object that enables interaction with the schema in the database." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "subject.schema" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Python classes in the module correspond to a table in the database server." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "subject.Subject()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Diagram\n", + "\n", + "Let's plot the diagram of tables within multiple schemas and their dependencies using `dj.Diagram()`." + ] + }, + { + "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", + "\n", + "ephys.ClusteringMethod\n", + "\n", + "\n", + "ephys.ClusteringMethod\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.ClusteringParamSet\n", + "\n", + "\n", + "ephys.ClusteringParamSet\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.ClusteringMethod->ephys.ClusteringParamSet\n", + "\n", + "\n", + "\n", + "\n", + "ephys.ClusteringTask\n", + "\n", + "\n", + "ephys.ClusteringTask\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.Clustering\n", + "\n", + "\n", + "ephys.Clustering\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.ClusteringTask->ephys.Clustering\n", + "\n", + "\n", + "\n", + "\n", + "ephys.EphysRecording.EphysFile\n", + "\n", + "\n", + "ephys.EphysRecording.EphysFile\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "probe.ElectrodeConfig\n", + "\n", + "\n", + "probe.ElectrodeConfig\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.EphysRecording\n", + "\n", + "\n", + "ephys.EphysRecording\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "probe.ElectrodeConfig->ephys.EphysRecording\n", + "\n", + "\n", + "\n", + "\n", + "probe.ElectrodeConfig.Electrode\n", + "\n", + "\n", + "probe.ElectrodeConfig.Electrode\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "probe.ElectrodeConfig->probe.ElectrodeConfig.Electrode\n", + "\n", + "\n", + "\n", + "\n", + "ephys.EphysRecording->ephys.ClusteringTask\n", + "\n", + "\n", + "\n", + "\n", + "ephys.EphysRecording->ephys.EphysRecording.EphysFile\n", + "\n", + "\n", + "\n", + "\n", + "ephys.LFP\n", + "\n", + "\n", + "ephys.LFP\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.EphysRecording->ephys.LFP\n", + "\n", + "\n", + "\n", + "\n", + "session.Session\n", + "\n", + "\n", + "session.Session\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.ProbeInsertion\n", + "\n", + "\n", + "ephys.ProbeInsertion\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "session.Session->ephys.ProbeInsertion\n", + "\n", + "\n", + "\n", + "\n", + "ephys.Curation\n", + "\n", + "\n", + "ephys.Curation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.CuratedClustering\n", + "\n", + "\n", + "ephys.CuratedClustering\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.Curation->ephys.CuratedClustering\n", + "\n", + "\n", + "\n", + "\n", + "ephys.InsertionLocation\n", + "\n", + "\n", + "ephys.InsertionLocation\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "probe.ProbeType\n", + "\n", + "\n", + "probe.ProbeType\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "probe.ProbeType->probe.ElectrodeConfig\n", + "\n", + "\n", + "\n", + "\n", + "probe.Probe\n", + "\n", + "\n", + "probe.Probe\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "probe.ProbeType->probe.Probe\n", + "\n", + "\n", + "\n", + "\n", + "probe.ProbeType.Electrode\n", + "\n", + "\n", + "probe.ProbeType.Electrode\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "probe.ProbeType->probe.ProbeType.Electrode\n", + "\n", + "\n", + "\n", + "\n", + "ephys.CuratedClustering.Unit\n", + "\n", + "\n", + "ephys.CuratedClustering.Unit\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.WaveformSet.PeakWaveform\n", + "\n", + "\n", + "ephys.WaveformSet.PeakWaveform\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.CuratedClustering.Unit->ephys.WaveformSet.PeakWaveform\n", + "\n", + "\n", + "\n", + "\n", + "ephys.QualityMetrics.Waveform\n", + "\n", + "\n", + "ephys.QualityMetrics.Waveform\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.CuratedClustering.Unit->ephys.QualityMetrics.Waveform\n", + "\n", + "\n", + "\n", + "\n", + "ephys.QualityMetrics.Cluster\n", + "\n", + "\n", + "ephys.QualityMetrics.Cluster\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.CuratedClustering.Unit->ephys.QualityMetrics.Cluster\n", + "\n", + "\n", + "\n", + "\n", + "ephys.WaveformSet.Waveform\n", + "\n", + "\n", + "ephys.WaveformSet.Waveform\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.CuratedClustering.Unit->ephys.WaveformSet.Waveform\n", + "\n", + "\n", + "\n", + "\n", + "probe.Probe->ephys.ProbeInsertion\n", + "\n", + "\n", + "\n", + "\n", + "ephys.AcquisitionSoftware\n", + "\n", + "\n", + "ephys.AcquisitionSoftware\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.AcquisitionSoftware->ephys.EphysRecording\n", + "\n", + "\n", + "\n", + "\n", + "ephys.QualityMetrics\n", + "\n", + "\n", + "ephys.QualityMetrics\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.QualityMetrics->ephys.QualityMetrics.Waveform\n", + "\n", + "\n", + "\n", + "\n", + "ephys.QualityMetrics->ephys.QualityMetrics.Cluster\n", + "\n", + "\n", + "\n", + "\n", + "probe.ElectrodeConfig.Electrode->ephys.CuratedClustering.Unit\n", + "\n", + "\n", + "\n", + "\n", + "ephys.LFP.Electrode\n", + "\n", + "\n", + "ephys.LFP.Electrode\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "probe.ElectrodeConfig.Electrode->ephys.LFP.Electrode\n", + "\n", + "\n", + "\n", + "\n", + "probe.ElectrodeConfig.Electrode->ephys.WaveformSet.Waveform\n", + "\n", + "\n", + "\n", + "\n", + "ephys.ProbeInsertion->ephys.EphysRecording\n", + "\n", + "\n", + "\n", + "\n", + "ephys.ProbeInsertion->ephys.InsertionLocation\n", + "\n", + "\n", + "\n", + "\n", + "ephys.LFP->ephys.LFP.Electrode\n", + "\n", + "\n", + "\n", + "\n", + "ephys.CuratedClustering->ephys.CuratedClustering.Unit\n", + "\n", + "\n", + "\n", + "\n", + "ephys.CuratedClustering->ephys.QualityMetrics\n", + "\n", + "\n", + "\n", + "\n", + "ephys.WaveformSet\n", + "\n", + "\n", + "ephys.WaveformSet\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.CuratedClustering->ephys.WaveformSet\n", + "\n", + "\n", + "\n", + "\n", + "ephys.WaveformSet->ephys.WaveformSet.PeakWaveform\n", + "\n", + "\n", + "\n", + "\n", + "ephys.WaveformSet->ephys.WaveformSet.Waveform\n", + "\n", + "\n", + "\n", + "\n", + "ephys.ClusteringParamSet->ephys.ClusteringTask\n", + "\n", + "\n", + "\n", + "\n", + "subject.Subject\n", + "\n", + "\n", + "subject.Subject\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "subject.Subject->session.Session\n", + "\n", + "\n", + "\n", + "\n", + "ephys.Clustering->ephys.Curation\n", + "\n", + "\n", + "\n", + "\n", + "ephys.ClusterQualityLabel\n", + "\n", + "\n", + "ephys.ClusterQualityLabel\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.ClusterQualityLabel->ephys.CuratedClustering.Unit\n", + "\n", + "\n", + "\n", + "\n", + "probe.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": [ + "## Understanding Table Types in DataJoint\n", + "\n", + "In the previous section, we visualized the relationships between various tables in our pipeline using `dj.Diagram`. As you might have noticed, tables have different colors and shapes. This is because, in DataJoint, tables can be of different types, each serving a unique purpose.\n", + "\n", + "| Table tier | Color and shape | Description | Practical Example |\n", + "| -- | -- | -- | -- |\n", + "| **Manual table** | Green box | Data entered manually, either by hand or with external helper scripts. | A table containing data about individual subjects, like their birth date or sex. |\n", + "| **Lookup table** | Gray box | Small tables containing general, non-changing information or settings. | A table containing available experimental protocols or animal species. |\n", + "| **Imported table** | Blue oval | Data automatically ingested but requiring external data. | A table that pulls data from an external file or dataset. |\n", + "| **Computed table** | Red circle | Data computed entirely within the pipeline. | A table calculating metrics or statistics from previously stored data. |\n", + "| **Part table** | Plain text | Tables associated with a master table, sharing its tier. | A subtable containing specific measurements for each subject in a master subject table. |\n", + "\n", + "### Order matters!\n", + "\n", + "The arrangement of tables in the `dj.Diagram` is not arbitrary. It represents the flow of data and dependencies:\n", + "\n", + "- **Higher-up Tables**: These are typically your starting point. For instance, before you can insert data about an experimental session, you need to have data about the subject of that session.\n", + "- **Dependencies**: Tables connected by a line have dependencies. For example, before\n", + " you can populate data about an experiment's results, you need to insert data about the\n", + " experiment setup.\n", + "\n", + "**Quick Check**: Based on the diagram, which tables do you think we would insert data into first?\n", + "\n", + "---\n", + "\n", + "## Interacting with DataJoint Pipelines\n", + "\n", + "DataJoint offers a powerful set of commands that allow us to interact with the pipeline:\n", + "\n", + "- **Insert**: Manually add data to a table.\n", + "- **Populate**: Automatically compute and add data based on existing data.\n", + "- **Query**: Search and filter data.\n", + "- **Fetch**: Retrieve data for further analysis or visualization.\n", + "\n", + "In the upcoming sections, we'll get hands-on with these commands. Let's start by\n", + "understanding how to manually insert data into our pipeline!\n", + "\n", + "---" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Insert entries into manual tables\n", + "\n", + "Manual tables serve as the foundation upon which our pipeline builds. By entering data\n", + "here, we lay the groundwork for subsequent automated analyses.\n", + "\n", + "Let's start with the first table in the schema diagram (i.e. `subject.Subject` table).\n", + "\n", + "To know what data to insert into the table, we can view its dependencies and attributes using the `.describe()` and `.heading` functions." + ] + }, + { + "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.\n", + "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(subject=\"subject5\", subject_birth_date=\"2023-01-01\", sex=\"U\")\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": [ + "print(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": [ + "Notice that `describe`, displays the table's structure and highlights its dependencies, such as its reliance on the `Subject` table. These dependencies represent foreign key references, linking data across tables.\n", + "\n", + "On the other hand, `heading` provides an exhaustive list of the table's attributes. This\n", + "list includes both the attributes declared in this table and any inherited from upstream\n", + "tables.\n", + "\n", + "With this understanding, let's move on to insert a session associated with our subject.\n", + "\n", + "We will insert into the `session.Session` table by passing a dictionary to the `insert1` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "session_key = dict(subject=\"subject5\", session_datetime=datetime.datetime.now())" + ] + }, + { + "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.Session.insert1(session_key)\n", + "session.Session()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Introducing the `SessionDirectory` Table\n", + "\n", + "Every experimental session produces a set of data files. The `SessionDirectory` table's\n", + "purpose is to locate these files. It references a directory path relative to a root\n", + "directory, defined in `dj.config[\"custom\"]`. More\n", + "information about `dj.config` is provided in the [User\n", + "Guide](https://datajoint.com/docs/elements/user-guide/)." + ] + }, + { + "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(dict(**session_key, session_dir=\"subject5/session1\"))\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": [ + "print(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\", 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 = (\n", + " ephys.CuratedClustering.Unit\n", + " & insert_key\n", + " & 'unit IN (\"6\",\"7\",\"9\",\"14\",\"15\",\"17\",\"19\")'\n", + ").fetch(\"unit\", \"spike_times\")" + ] + }, + { + "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 = (\n", + " ephys.CuratedClustering.Unit * ephys.WaveformSet.PeakWaveform & unit_key\n", + ").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": { + "kernelspec": { + "display_name": "python3p10", + "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.16" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "ff52d424e56dd643d8b2ec122f40a2e279e94970100b4e6430cb9025a65ba4cf" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/tutorial_pipeline.py b/notebooks/tutorial_pipeline.py index 1e3d2f46..5a62f8df 100644 --- a/notebooks/tutorial_pipeline.py +++ b/notebooks/tutorial_pipeline.py @@ -7,7 +7,7 @@ from element_lab.lab import Device as Equipment from element_lab.lab import User as Experimenter from element_session import session_with_id as session -from element_session.session_with_id import Session +from element_session.session_with_datetime import Session import element_interface import pathlib From 41909257e34b37c9197943dc75d855c31f9cda89 Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Wed, 25 Oct 2023 17:05:16 -0500 Subject: [PATCH 08/27] Upsdate tutorial markdown --- notebooks/tutorial.ipynb | 210 +++++++++------------------------------ 1 file changed, 48 insertions(+), 162 deletions(-) diff --git a/notebooks/tutorial.ipynb b/notebooks/tutorial.ipynb index 9e7e40a9..a6060417 100644 --- a/notebooks/tutorial.ipynb +++ b/notebooks/tutorial.ipynb @@ -1125,50 +1125,6 @@ "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": [ - "print(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, @@ -1293,7 +1249,7 @@ } ], "source": [ - "ephys.ProbeInsertion.describe()" + "print(ephys.ProbeInsertion.describe())" ] }, { @@ -1428,7 +1384,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -1436,69 +1391,17 @@ "\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", + "In DataJoint, the `populate()` method is a powerful feature designed to fill tables based on the logic defined in the table's `make` method. Here's a breakdown of its functionality:\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" + "- **Automation**: Instead of manually inserting data into each table, which can be error-prone and time-consuming, `populate()` automates the insertion based on the dependencies and relationships already established in the schema.\n", + "\n", + "- **Dependency Resolution**: Before populating a table, `populate()` ensures all its dependencies are populated. This maintains the integrity and consistency of the data.\n", + "\n", + "- **Part Tables**: If a table has part tables associated with it, calling `populate()` on the main table will also populate its part tables. This is especially useful in cases like `ephys.EphysRecording` and its part table `ephys.EphysRecording.EphysFile`, as they are closely linked in terms of data lineage.\n", + "\n", + "- **Restriction**: The `populate()` method can be restricted to specific entries. For instance, by providing a `session_key`, we're ensuring the method only operates on the data relevant to that particular session. This is both efficient and avoids unnecessary operations on unrelated data.\n", + "\n", + "In the upcoming cells, we'll make use of the `populate()` method to fill the `ephys.EphysRecording` table and its part table. Remember, while this operation is automated, it's essential to understand the underlying logic to ensure accurate and consistent data entry.\n" ] }, { @@ -2131,26 +2034,6 @@ "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, @@ -2187,7 +2070,7 @@ "+ `paramset_idx` \n", "+ `task_mode` \n", "\n", - "The `paramset_idx` attribute is tracks\n", + "The `paramset_idx` attribute 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", @@ -2215,15 +2098,6 @@ ")" ] }, - { - "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, @@ -2335,34 +2209,46 @@ "\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", + "## Querying Data\n", + "\n", + "DataJoint provides a powerful querying system, allowing you to retrieve and work with data stored in your database seamlessly. In this section, we'll explore the fundamental querying concepts.\n", + "\n", + "#### What is a Query?\n", + "\n", + "- A query is essentially a request for data. With DataJoint, you can craft specific queries to fetch data that meets your criteria from the database.\n", + "\n", + "#### The `fetch()` Method\n", + "\n", + "- The primary method for retrieving data from a DataJoint table is `fetch()`.\n", + "- **Default Behavior**: Without any arguments, `fetch()` returns a list of dictionaries. Each dictionary corresponds to an entry in the table.\n", + " \n", + "#### The `fetch1()` Method\n", + "\n", + "- For tables with a single entry or when you're only interested in the first entry, use `fetch1()`.\n", + "- **Default Behavior**: It returns a dictionary of attributes for that one entry.\n", + "\n", + "#### Specific Attributes\n", + "\n", + "- Both `fetch()` and `fetch1()` can be made more specific by providing attributes.\n", + "- Example: `fetch1('fps')` will retrieve only the `fps` attribute from the first entry.\n", + "\n", + "#### Restricting Queries\n", + "\n", + "- Often, you don't want to fetch everything. Instead, you might want data related to a specific subject or session.\n", + "- DataJoint uses the `&` operator to restrict queries.\n", + "- Example: To get all session times for `subject5`, you might use:\n", + " ```python\n", + " subject1_times = (session.Session & \"subject = 'subject1'\").fetch(\"session_datetime\")\n", + " ```\n", "\n", - "This section focuses on working with data that is already in the\n", - "database. \n", + "#### Fetching Primary Keys\n", "\n", - "DataJoint queries allow you to view and import data from the database into a python\n", - "variable using the `fetch()` method. \n", + "- Sometimes, you just need the primary keys of entries.\n", + "- Use the `fetch(\"KEY\")` syntax for this. For instance, `(session.Session).fetch(\"KEY\")`.\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", + "#### Let's Dive In!\n", "\n", - "Let's walk through these concepts of querying by moving from simple to more\n", - "complex queries." + "Now that we've established the basics, let's delve deeper into querying with some practical examples." ] }, { From 38c50fbaad8cc2a3d3d717ed4c2d5a577fa908e9 Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Thu, 26 Oct 2023 14:57:07 -0500 Subject: [PATCH 09/27] Markdown improvements in tutorial --- notebooks/tutorial.ipynb | 57 ++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/notebooks/tutorial.ipynb b/notebooks/tutorial.ipynb index a6060417..a6c89e67 100644 --- a/notebooks/tutorial.ipynb +++ b/notebooks/tutorial.ipynb @@ -7,19 +7,21 @@ "source": [ "# DataJoint Element Tutorial: Array Electrophysiology\n", "\n", - "Welcome to the DataJoint Element tutorial for Array Electrophysiology! Dive into the world of automated analyses and organization of extracellular array electrophysiology data.\n", + "Welcome to the tutorial for DataJoint's open-source data pipeline for NeuroPixels Array\n", + "Electrophysiology. This tutorial aims to provide a comprehensive understanding of the\n", + "open-source data pipeline created using `element-array-ephys` for processing\n", + "and analyzing extracellular electrophysiology datasets. \n", "\n", "**In this tutorial, we will cover:**\n", "- The basics:\n", - " - Differentiating between an Element and a pipeline.\n", - " - How to plot the pipeline with `dj.Diagram`.\n", + " - Differentiating between an Element, module, schema, table, and pipeline.\n", + " - How to plot an overview of the pipeline with `dj.Diagram`.\n", "- Hands-on interactions with the pipeline:\n", - " - Inserting data into tables.\n", + " - Inserting real data into tables.\n", " - Querying table contents.\n", " - Fetching table contents.\n", - " - Running the pipeline for your experiments.\n", "- A walk-through:\n", - " - Processing NeuroPixels ephys data acquired with OpenEphys and sorted with Kilosort.\n", + " - Processing NeuroPixels ephys data acquired with OpenEphys and spike sorted with Kilosort.\n", "\n", "**Additional Resources:**\n", "- [Interactive Tutorials](https://github.com/datajoint/datajoint-tutorials) on `datajoint-python`: Dive deep into DataJoint's fundamentals.\n", @@ -51,10 +53,13 @@ "Each DataJoint Element is a modular set of tables that can be combined into a complete\n", "pipeline. Here are the definitions for clarity:\n", "\n", - "+ **Element**: A modular chunk of related tables.\n", "+ **Module**: In Python, a module is a file containing definitions and statements. In the context of DataJoint, modules often define and structure related database tables.\n", + "+ **Table**: A structured set of data held within the database. It consists of rows and\n", + " columns, much like an Excel spreadsheet.\n", "+ **Schema**: Think of a schema as a container or namespace within the database where related tables are grouped together. It helps organize and manage the database structure.\n", - "+ **Table**: A structured set of data held within the database. It consists of rows and columns, much like an Excel spreadsheet.\n", + "+ **Element**: A modular set of related tables. \n", + "\n", + "---\n", "\n", "Each Element contains 1 or more modules, and each module declares its own schema in the database.\n", "\n", @@ -67,7 +72,9 @@ "| Element Session | [Link](https://github.com/datajoint/element-session) | [Link](https://datajoint.com/docs/elements/element-session) | General information of experimental sessions. |\n", "| Element Array Ephys | [Link](https://github.com/datajoint/element-array-ephys) | [Link](https://datajoint.com/docs/elements/element-array-ephys) | NeuroPixels Array Electrophysiology analysis with Kilosort. |\n", "\n", - "By importing the modules for the first time, the schemas and tables will be created in the database. Once created, importing modules will not create schemas and tables again, but the existing schemas/tables can be accessed.\n", + "By importing the modules for the first time, the schemas and tables will be created in\n", + "the database. Once created, importing modules will not create schemas and tables\n", + "again, but will allow access to existing schemas/tables.\n", "\n", "The Elements are imported and activated within the `tutorial_pipeline` script." ] @@ -622,7 +629,7 @@ "source": [ "## Understanding Table Types in DataJoint\n", "\n", - "In the previous section, we visualized the relationships between various tables in our pipeline using `dj.Diagram`. As you might have noticed, tables have different colors and shapes. This is because, in DataJoint, tables can be of different types, each serving a unique purpose.\n", + "In the previous cell, we visualized the relationships between various tables in our pipeline using `dj.Diagram`. As you might have noticed, tables have different colors and shapes. This is because, in DataJoint, tables can be of different types, each serving a unique purpose.\n", "\n", "| Table tier | Color and shape | Description | Practical Example |\n", "| -- | -- | -- | -- |\n", @@ -650,7 +657,7 @@ "DataJoint offers a powerful set of commands that allow us to interact with the pipeline:\n", "\n", "- **Insert**: Manually add data to a table.\n", - "- **Populate**: Automatically compute and add data based on existing data.\n", + "- **Populate**: Automatically compute and insert data.\n", "- **Query**: Search and filter data.\n", "- **Fetch**: Retrieve data for further analysis or visualization.\n", "\n", @@ -692,7 +699,7 @@ } ], "source": [ - "subject.Subject.describe()" + "print(subject.Subject.describe())" ] }, { @@ -1399,7 +1406,7 @@ "\n", "- **Part Tables**: If a table has part tables associated with it, calling `populate()` on the main table will also populate its part tables. This is especially useful in cases like `ephys.EphysRecording` and its part table `ephys.EphysRecording.EphysFile`, as they are closely linked in terms of data lineage.\n", "\n", - "- **Restriction**: The `populate()` method can be restricted to specific entries. For instance, by providing a `session_key`, we're ensuring the method only operates on the data relevant to that particular session. This is both efficient and avoids unnecessary operations on unrelated data.\n", + "- **Restriction**: The `populate()` method can be restricted to specific entries. For instance, by providing a `session_key`, we're ensuring the method only operates on the data relevant to that particular session. This is both efficient and avoids unnecessary operations.\n", "\n", "In the upcoming cells, we'll make use of the `populate()` method to fill the `ephys.EphysRecording` table and its part table. Remember, while this operation is automated, it's essential to understand the underlying logic to ensure accurate and consistent data entry.\n" ] @@ -2448,10 +2455,20 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ + "## Conclusion\n", + "\n", + "Throughout this notebook, we've used DataJoint to work with database tables and keep\n", + "data organized and automate analyses to increase efficiency of data processing. We've\n", + "inserted data into tables, used queries to retrieve, manipulate, and visualize ephys data.\n", + "\n", + "Remember, this is just the beginning. As you grow familiar with DataJoint, you'll\n", + "uncover even more ways to harness its capabilities for your specific research needs. \n", + "\n", + "---\n", + "\n", "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", @@ -2471,12 +2488,18 @@ "dj.conn()\n", "```\n", "\n", - "- Run this code cell and proceed with the rest of the notebook." + "- Run this code block above and proceed with the rest of the notebook." ] }, { - "cell_type": "markdown", - "metadata": {}, + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], "source": [] } ], From b2180c457e86303ac816bd0acb94c99fb1097821 Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Thu, 26 Oct 2023 20:07:16 +0000 Subject: [PATCH 10/27] Update `get_logger` to `dj.logger` --- element_array_ephys/ephys_acute.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/element_array_ephys/ephys_acute.py b/element_array_ephys/ephys_acute.py index 9b7b5c8d..0a213db8 100644 --- a/element_array_ephys/ephys_acute.py +++ b/element_array_ephys/ephys_acute.py @@ -10,10 +10,10 @@ import pandas as pd from element_interface.utils import dict_to_uuid, find_full_path, find_root_directory -from . import ephys_report, get_logger, probe +from . import ephys_report, probe from .readers import kilosort, openephys, spikeglx -log = get_logger(__name__) +log = dj.logger schema = dj.schema() From ce6e3bf8ee3968f5b1d1b97e1d7d238272b6c073 Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Thu, 26 Oct 2023 20:22:04 +0000 Subject: [PATCH 11/27] Use `session_with_datetime` for tutorial --- notebooks/tutorial_pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebooks/tutorial_pipeline.py b/notebooks/tutorial_pipeline.py index 5a62f8df..eb166faa 100644 --- a/notebooks/tutorial_pipeline.py +++ b/notebooks/tutorial_pipeline.py @@ -6,7 +6,7 @@ from element_lab.lab import Lab, Location, Project, Protocol, Source, User from element_lab.lab import Device as Equipment from element_lab.lab import User as Experimenter -from element_session import session_with_id as session +from element_session import session_with_datetime as session from element_session.session_with_datetime import Session import element_interface import pathlib From 1717054c4eefb1176be2a54bc9e75b80508b62a0 Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Thu, 26 Oct 2023 20:46:00 +0000 Subject: [PATCH 12/27] Update Dockerfile and tutorial_pipeline to fix errors --- .devcontainer/Dockerfile | 2 +- notebooks/tutorial_pipeline.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2d0e9261..9d9e17c2 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -41,7 +41,7 @@ ENV DJ_HOST fakeservices.datajoint.io ENV DJ_USER root ENV DJ_PASS simple -ENV EPHYS_ROOT_DATA_DIR /workspaces/element-array-ephys/example_data +ENV EPHYS_ROOT_DATA_DIR /workspaces/element-array-ephys/example_data/processed ENV DATABASE_PREFIX neuro_ USER vscode diff --git a/notebooks/tutorial_pipeline.py b/notebooks/tutorial_pipeline.py index eb166faa..12e13a6b 100644 --- a/notebooks/tutorial_pipeline.py +++ b/notebooks/tutorial_pipeline.py @@ -30,4 +30,17 @@ def get_ephys_root_data_dir(): lab.activate(db_prefix + "lab") subject.activate(db_prefix + "subject", linking_module=__name__) session.activate(db_prefix + "session", linking_module=__name__) + +@lab.schema +class SkullReference(dj.Lookup): + definition = """ + skull_reference : varchar(60) + """ + contents = zip(["Bregma", "Lambda"]) + +def get_session_directory(session_key): + session_directory = (session.SessionDirectory & session_key).fetch1("session_dir") + return pathlib.Path(session_directory) + + ephys.activate(db_prefix + "ephys", db_prefix + "probe", linking_module=__name__) From d5430aa93b507baf4923acda3d3eb8663e480a23 Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Thu, 26 Oct 2023 21:22:19 +0000 Subject: [PATCH 13/27] Update root_data_dir in Dockerfile --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 9d9e17c2..2d0e9261 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -41,7 +41,7 @@ ENV DJ_HOST fakeservices.datajoint.io ENV DJ_USER root ENV DJ_PASS simple -ENV EPHYS_ROOT_DATA_DIR /workspaces/element-array-ephys/example_data/processed +ENV EPHYS_ROOT_DATA_DIR /workspaces/element-array-ephys/example_data ENV DATABASE_PREFIX neuro_ USER vscode From 7bf9f9f3cf80f32963ed421221a4cd405aef6dd8 Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Thu, 26 Oct 2023 21:42:15 +0000 Subject: [PATCH 14/27] Completed tutorial --- notebooks/tutorial.ipynb | 1134 +++++++++++++++++++++++--------------- 1 file changed, 702 insertions(+), 432 deletions(-) diff --git a/notebooks/tutorial.ipynb b/notebooks/tutorial.ipynb index a6c89e67..543ab984 100644 --- a/notebooks/tutorial.ipynb +++ b/notebooks/tutorial.ipynb @@ -88,9 +88,9 @@ "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" + "[2023-10-26 21:39:21,831][WARNING]: lab.Project and related tables will be removed in a future version of Element Lab. Please use the project schema.\n", + "[2023-10-26 21:39:21,833][INFO]: Connecting root@fakeservices.datajoint.io:3306\n", + "[2023-10-26 21:39:21,840][INFO]: Connected root@fakeservices.datajoint.io:3306\n" ] } ], @@ -113,9 +113,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Schema `neuro_subject`" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "subject.schema" ] @@ -129,9 +140,101 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\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", + "
\n", + " \n", + "

Total: 0

\n", + " " + ], + "text/plain": [ + "*subject subject_nickna sex subject_birth_ subject_descri\n", + "+---------+ +------------+ +-----+ +------------+ +------------+\n", + "\n", + " (Total: 0)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "subject.Subject()" ] @@ -147,277 +250,312 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "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", "\n", "%3\n", - "\n", + "\n", "\n", "\n", "ephys.ClusteringMethod\n", "\n", - "\n", - "ephys.ClusteringMethod\n", + "\n", + "ephys.ClusteringMethod\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "ephys.ClusteringParamSet\n", - "\n", - "\n", - "ephys.ClusteringParamSet\n", + "\n", + "\n", + "ephys.ClusteringParamSet\n", "\n", "\n", "\n", "\n", "\n", "ephys.ClusteringMethod->ephys.ClusteringParamSet\n", - "\n", + "\n", "\n", - "\n", + "\n", "\n", - "ephys.ClusteringTask\n", - "\n", - "\n", - "ephys.ClusteringTask\n", + "probe.ProbeType\n", + "\n", + "\n", + "probe.ProbeType\n", "\n", "\n", "\n", - "\n", - "\n", - "ephys.Clustering\n", - "\n", - "\n", - "ephys.Clustering\n", + "\n", + "\n", + "probe.ProbeType.Electrode\n", + "\n", + "\n", + "probe.ProbeType.Electrode\n", "\n", "\n", "\n", - "\n", + "\n", "\n", - "ephys.ClusteringTask->ephys.Clustering\n", - "\n", + "probe.ProbeType->probe.ProbeType.Electrode\n", + "\n", "\n", - "\n", - "\n", - "ephys.EphysRecording.EphysFile\n", - "\n", - "\n", - "ephys.EphysRecording.EphysFile\n", + "\n", + "\n", + "probe.Probe\n", + "\n", + "\n", + "probe.Probe\n", "\n", "\n", "\n", + "\n", + "\n", + "probe.ProbeType->probe.Probe\n", + "\n", + "\n", "\n", - "\n", + "\n", "probe.ElectrodeConfig\n", - "\n", - "\n", - "probe.ElectrodeConfig\n", + "\n", + "\n", + "probe.ElectrodeConfig\n", "\n", "\n", "\n", - "\n", - "\n", - "ephys.EphysRecording\n", - "\n", - "\n", - "ephys.EphysRecording\n", + "\n", + "\n", + "probe.ProbeType->probe.ElectrodeConfig\n", + "\n", + "\n", + "\n", + "\n", + "ephys.InsertionLocation\n", + "\n", + "\n", + "ephys.InsertionLocation\n", "\n", "\n", "\n", - "\n", - "\n", - "probe.ElectrodeConfig->ephys.EphysRecording\n", - "\n", + "\n", + "\n", + "ephys.QualityMetrics.Waveform\n", + "\n", + "\n", + "ephys.QualityMetrics.Waveform\n", + "\n", + "\n", "\n", "\n", - "\n", + "\n", "probe.ElectrodeConfig.Electrode\n", - "\n", - "\n", - "probe.ElectrodeConfig.Electrode\n", + "\n", + "\n", + "probe.ElectrodeConfig.Electrode\n", "\n", "\n", "\n", - "\n", - "\n", - "probe.ElectrodeConfig->probe.ElectrodeConfig.Electrode\n", - "\n", - "\n", - "\n", + "\n", "\n", - "ephys.EphysRecording->ephys.ClusteringTask\n", - "\n", - "\n", - "\n", - "\n", - "ephys.EphysRecording->ephys.EphysRecording.EphysFile\n", - "\n", - "\n", - "\n", - "\n", - "ephys.LFP\n", - "\n", - "\n", - "ephys.LFP\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.EphysRecording->ephys.LFP\n", - "\n", + "probe.ProbeType.Electrode->probe.ElectrodeConfig.Electrode\n", + "\n", "\n", "\n", "\n", "session.Session\n", "\n", - "\n", - "session.Session\n", + "\n", + "session.Session\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "ephys.ProbeInsertion\n", - "\n", - "\n", - "ephys.ProbeInsertion\n", + "\n", + "\n", + "ephys.ProbeInsertion\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "session.Session->ephys.ProbeInsertion\n", - "\n", + "\n", "\n", - "\n", - "\n", - "ephys.Curation\n", - "\n", - "\n", - "ephys.Curation\n", + "\n", + "\n", + "ephys.CuratedClustering.Unit\n", + "\n", + "\n", + "ephys.CuratedClustering.Unit\n", "\n", "\n", "\n", - "\n", - "\n", - "ephys.CuratedClustering\n", - "\n", - "\n", - "ephys.CuratedClustering\n", + "\n", + "\n", + "probe.ElectrodeConfig.Electrode->ephys.CuratedClustering.Unit\n", + "\n", + "\n", + "\n", + "\n", + "ephys.LFP.Electrode\n", + "\n", + "\n", + "ephys.LFP.Electrode\n", "\n", "\n", "\n", - "\n", + "\n", + "\n", + "probe.ElectrodeConfig.Electrode->ephys.LFP.Electrode\n", + "\n", + "\n", + "\n", + "\n", + "ephys.WaveformSet.Waveform\n", + "\n", + "\n", + "ephys.WaveformSet.Waveform\n", + "\n", + "\n", + "\n", + "\n", "\n", - "ephys.Curation->ephys.CuratedClustering\n", - "\n", + "probe.ElectrodeConfig.Electrode->ephys.WaveformSet.Waveform\n", + "\n", "\n", - "\n", + "\n", "\n", - "ephys.InsertionLocation\n", - "\n", - "\n", - "ephys.InsertionLocation\n", + "ephys.Curation\n", + "\n", + "\n", + "ephys.Curation\n", "\n", "\n", "\n", - "\n", - "\n", - "probe.ProbeType\n", - "\n", - "\n", - "probe.ProbeType\n", + "\n", + "\n", + "ephys.CuratedClustering\n", + "\n", + "\n", + "ephys.CuratedClustering\n", "\n", "\n", "\n", - "\n", + "\n", "\n", - "probe.ProbeType->probe.ElectrodeConfig\n", - "\n", + "ephys.Curation->ephys.CuratedClustering\n", + "\n", "\n", - "\n", - "\n", - "probe.Probe\n", - "\n", - "\n", - "probe.Probe\n", + "\n", + "\n", + "ephys.ClusteringTask\n", + "\n", + "\n", + "ephys.ClusteringTask\n", "\n", "\n", "\n", - "\n", + "\n", "\n", - "probe.ProbeType->probe.Probe\n", - "\n", + "ephys.ClusteringParamSet->ephys.ClusteringTask\n", + "\n", "\n", - "\n", - "\n", - "probe.ProbeType.Electrode\n", - "\n", - "\n", - "probe.ProbeType.Electrode\n", + "\n", + "\n", + "ephys.WaveformSet.PeakWaveform\n", + "\n", + "\n", + "ephys.WaveformSet.PeakWaveform\n", "\n", "\n", "\n", - "\n", + "\n", + "\n", + "ephys.WaveformSet\n", + "\n", + "\n", + "ephys.WaveformSet\n", + "\n", + "\n", + "\n", + "\n", "\n", - "probe.ProbeType->probe.ProbeType.Electrode\n", - "\n", + "ephys.WaveformSet->ephys.WaveformSet.PeakWaveform\n", + "\n", "\n", - "\n", - "\n", - "ephys.CuratedClustering.Unit\n", - "\n", - "\n", - "ephys.CuratedClustering.Unit\n", + "\n", + "\n", + "ephys.WaveformSet->ephys.WaveformSet.Waveform\n", + "\n", + "\n", + "\n", + "\n", + "subject.Subject\n", + "\n", + "\n", + "subject.Subject\n", "\n", "\n", "\n", - "\n", - "\n", - "ephys.WaveformSet.PeakWaveform\n", - "\n", - "\n", - "ephys.WaveformSet.PeakWaveform\n", + "\n", + "\n", + "subject.Subject->session.Session\n", + "\n", + "\n", + "\n", + "\n", + "ephys.AcquisitionSoftware\n", + "\n", + "\n", + "ephys.AcquisitionSoftware\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.EphysRecording\n", + "\n", + "\n", + "ephys.EphysRecording\n", "\n", "\n", "\n", - "\n", - "\n", - "ephys.CuratedClustering.Unit->ephys.WaveformSet.PeakWaveform\n", - "\n", + "\n", + "\n", + "ephys.AcquisitionSoftware->ephys.EphysRecording\n", + "\n", "\n", - "\n", - "\n", - "ephys.QualityMetrics.Waveform\n", - "\n", - "\n", - "ephys.QualityMetrics.Waveform\n", + "\n", + "\n", + "ephys.ClusterQualityLabel\n", + "\n", + "\n", + "ephys.ClusterQualityLabel\n", "\n", "\n", "\n", + "\n", + "\n", + "ephys.ClusterQualityLabel->ephys.CuratedClustering.Unit\n", + "\n", + "\n", "\n", - "\n", + "\n", "ephys.CuratedClustering.Unit->ephys.QualityMetrics.Waveform\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "ephys.CuratedClustering.Unit->ephys.WaveformSet.PeakWaveform\n", + "\n", "\n", "\n", "\n", @@ -429,186 +567,139 @@ "\n", "\n", "\n", - "\n", + "\n", "ephys.CuratedClustering.Unit->ephys.QualityMetrics.Cluster\n", - "\n", - "\n", - "\n", - "\n", - "ephys.WaveformSet.Waveform\n", - "\n", - "\n", - "ephys.WaveformSet.Waveform\n", - "\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "ephys.CuratedClustering.Unit->ephys.WaveformSet.Waveform\n", - "\n", - "\n", - "\n", - "\n", - "probe.Probe->ephys.ProbeInsertion\n", - "\n", - "\n", - "\n", - "\n", - "ephys.AcquisitionSoftware\n", - "\n", - "\n", - "ephys.AcquisitionSoftware\n", - "\n", + "\n", "\n", + "\n", + "\n", + "ephys.ProbeInsertion->ephys.InsertionLocation\n", + "\n", "\n", - "\n", - "\n", - "ephys.AcquisitionSoftware->ephys.EphysRecording\n", - "\n", + "\n", + "\n", + "ephys.ProbeInsertion->ephys.EphysRecording\n", + "\n", "\n", "\n", - "\n", + "\n", "ephys.QualityMetrics\n", - "\n", - "\n", - "ephys.QualityMetrics\n", + "\n", + "\n", + "ephys.QualityMetrics\n", "\n", "\n", "\n", "\n", - "\n", + "\n", "ephys.QualityMetrics->ephys.QualityMetrics.Waveform\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "ephys.QualityMetrics->ephys.QualityMetrics.Cluster\n", - "\n", - "\n", - "\n", - "\n", - "probe.ElectrodeConfig.Electrode->ephys.CuratedClustering.Unit\n", - "\n", + "\n", "\n", - "\n", - "\n", - "ephys.LFP.Electrode\n", - "\n", - "\n", - "ephys.LFP.Electrode\n", + "\n", + "\n", + "ephys.Clustering\n", + "\n", + "\n", + "ephys.Clustering\n", "\n", "\n", "\n", - "\n", - "\n", - "probe.ElectrodeConfig.Electrode->ephys.LFP.Electrode\n", - "\n", - "\n", - "\n", - "\n", - "probe.ElectrodeConfig.Electrode->ephys.WaveformSet.Waveform\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeInsertion->ephys.EphysRecording\n", - "\n", - "\n", - "\n", + "\n", "\n", - "ephys.ProbeInsertion->ephys.InsertionLocation\n", - "\n", + "ephys.ClusteringTask->ephys.Clustering\n", + "\n", "\n", - "\n", + "\n", "\n", - "ephys.LFP->ephys.LFP.Electrode\n", - "\n", + "ephys.CuratedClustering->ephys.WaveformSet\n", + "\n", "\n", "\n", "\n", "ephys.CuratedClustering->ephys.CuratedClustering.Unit\n", - "\n", + "\n", "\n", "\n", "\n", "ephys.CuratedClustering->ephys.QualityMetrics\n", - "\n", - "\n", - "\n", - "\n", - "ephys.WaveformSet\n", - "\n", - "\n", - "ephys.WaveformSet\n", - "\n", + "\n", "\n", - "\n", - "\n", + "\n", "\n", - "ephys.CuratedClustering->ephys.WaveformSet\n", - "\n", + "ephys.Clustering->ephys.Curation\n", + "\n", "\n", - "\n", + "\n", "\n", - "ephys.WaveformSet->ephys.WaveformSet.PeakWaveform\n", - "\n", + "probe.Probe->ephys.ProbeInsertion\n", + "\n", "\n", - "\n", + "\n", "\n", - "ephys.WaveformSet->ephys.WaveformSet.Waveform\n", - "\n", + "probe.ElectrodeConfig->probe.ElectrodeConfig.Electrode\n", + "\n", "\n", - "\n", + "\n", "\n", - "ephys.ClusteringParamSet->ephys.ClusteringTask\n", - "\n", + "probe.ElectrodeConfig->ephys.EphysRecording\n", + "\n", "\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", + "\n", + "\n", + "ephys.EphysRecording.EphysFile\n", + "\n", + "\n", + "ephys.EphysRecording.EphysFile\n", "\n", "\n", "\n", - "\n", - "\n", - "subject.Subject->session.Session\n", - "\n", + "\n", + "\n", + "ephys.LFP\n", + "\n", + "\n", + "ephys.LFP\n", + "\n", "\n", - "\n", - "\n", - "ephys.Clustering->ephys.Curation\n", - "\n", "\n", - "\n", - "\n", - "ephys.ClusterQualityLabel\n", - "\n", - "\n", - "ephys.ClusterQualityLabel\n", - "\n", + "\n", + "\n", + "ephys.LFP->ephys.LFP.Electrode\n", + "\n", "\n", + "\n", + "\n", + "ephys.EphysRecording->ephys.ClusteringTask\n", + "\n", "\n", - "\n", + "\n", "\n", - "ephys.ClusterQualityLabel->ephys.CuratedClustering.Unit\n", - "\n", + "ephys.EphysRecording->ephys.EphysRecording.EphysFile\n", + "\n", "\n", - "\n", + "\n", "\n", - "probe.ProbeType.Electrode->probe.ElectrodeConfig.Electrode\n", - "\n", + "ephys.EphysRecording->ephys.LFP\n", + "\n", "\n", "\n", "" ], "text/plain": [ - "" + "" ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -684,18 +775,21 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "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" + "name": "stdout", + "output_type": "stream", + "text": [ + "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) \n", + "\n" + ] } ], "source": [ @@ -704,7 +798,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -719,7 +813,7 @@ "subject_description=\"\" : varchar(1024) # " ] }, - "execution_count": 5, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -740,7 +834,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -761,9 +855,11 @@ " }\n", " .Table tr:nth-child(odd){\n", " background: #ffffff;\n", + " color: #000000;\n", " }\n", " .Table tr:nth-child(even){\n", " background: #f3f1ff;\n", + " color: #000000;\n", " }\n", " /* Tooltip container */\n", " .djtooltip {\n", @@ -832,7 +928,7 @@ " (Total: 1)" ] }, - "execution_count": 6, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -854,18 +950,17 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "'-> subject.Subject\\nsession_datetime : datetime \\n'" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "-> subject.Subject\n", + "session_datetime : datetime \n", + "\n" + ] } ], "source": [ @@ -874,7 +969,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -885,7 +980,7 @@ "session_datetime : datetime # " ] }, - "execution_count": 8, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -912,16 +1007,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ - "session_key = dict(subject=\"subject5\", session_datetime=datetime.datetime.now())" + "session_key = dict(subject=\"subject5\", session_datetime=\"2023-01-01 00:00:00\")" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -942,9 +1037,11 @@ " }\n", " .Table tr:nth-child(odd){\n", " background: #ffffff;\n", + " color: #000000;\n", " }\n", " .Table tr:nth-child(even){\n", " background: #f3f1ff;\n", + " color: #000000;\n", " }\n", " /* Tooltip container */\n", " .djtooltip {\n", @@ -988,7 +1085,7 @@ " \n", " \n", " subject5\n", - "2023-03-20 21:44:09 \n", + "2023-01-01 00:00:00 \n", " \n", " \n", "

Total: 1

\n", @@ -997,11 +1094,11 @@ "text/plain": [ "*subject *session_datet\n", "+----------+ +------------+\n", - "subject5 2023-03-20 21:\n", + "subject5 2023-01-01 00:\n", " (Total: 1)" ] }, - "execution_count": 9, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -1027,7 +1124,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -1048,9 +1145,11 @@ " }\n", " .Table tr:nth-child(odd){\n", " background: #ffffff;\n", + " color: #000000;\n", " }\n", " .Table tr:nth-child(even){\n", " background: #f3f1ff;\n", + " color: #000000;\n", " }\n", " /* Tooltip container */\n", " .djtooltip {\n", @@ -1097,8 +1196,8 @@ " Path to the data directory for a session\n", " \n", " subject5\n", - "2023-03-20 21:44:09\n", - "subject5/session1 \n", + "2023-01-01 00:00:00\n", + "raw/subject5/session1 \n", " \n", " \n", "

Total: 1

\n", @@ -1107,17 +1206,17 @@ "text/plain": [ "*subject *session_datet session_dir \n", "+----------+ +------------+ +------------+\n", - "subject5 2023-03-20 21: subject5/sessi\n", + "subject5 2023-01-01 00: raw/subject5/s\n", " (Total: 1)" ] }, - "execution_count": 12, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "session.SessionDirectory.insert1(dict(**session_key, session_dir=\"subject5/session1\"))\n", + "session.SessionDirectory.insert1(dict(**session_key, session_dir=\"raw/subject5/session1\"))\n", "session.SessionDirectory()" ] }, @@ -1134,7 +1233,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -1155,9 +1254,11 @@ " }\n", " .Table tr:nth-child(odd){\n", " background: #ffffff;\n", + " color: #000000;\n", " }\n", " .Table tr:nth-child(even){\n", " background: #f3f1ff;\n", + " color: #000000;\n", " }\n", " /* Tooltip container */\n", " .djtooltip {\n", @@ -1218,7 +1319,7 @@ " (Total: 1)" ] }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -1241,18 +1342,20 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "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" + "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" + ] } ], "source": [ @@ -1261,7 +1364,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -1275,7 +1378,7 @@ "probe : varchar(32) # unique identifier for this model of probe (e.g. serial number)" ] }, - "execution_count": 17, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -1286,7 +1389,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -1307,9 +1410,11 @@ " }\n", " .Table tr:nth-child(odd){\n", " background: #ffffff;\n", + " color: #000000;\n", " }\n", " .Table tr:nth-child(even){\n", " background: #f3f1ff;\n", + " color: #000000;\n", " }\n", " /* Tooltip container */\n", " .djtooltip {\n", @@ -1359,7 +1464,7 @@ " unique identifier for this model of probe (e.g. serial number)\n", " \n", " subject5\n", - "2023-03-20 21:44:09\n", + "2023-01-01 00:00:00\n", "1\n", "714000838 \n", " \n", @@ -1370,11 +1475,11 @@ "text/plain": [ "*subject *session_datet *insertion_num probe \n", "+----------+ +------------+ +------------+ +-----------+\n", - "subject5 2023-03-20 21: 1 714000838 \n", + "subject5 2023-01-01 00: 1 714000838 \n", " (Total: 1)" ] }, - "execution_count": 18, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -1413,7 +1518,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1434,9 +1539,11 @@ " }\n", " .Table tr:nth-child(odd){\n", " background: #ffffff;\n", + " color: #000000;\n", " }\n", " .Table tr:nth-child(even){\n", " background: #f3f1ff;\n", + " color: #000000;\n", " }\n", " /* Tooltip container */\n", " .djtooltip {\n", @@ -1510,7 +1617,7 @@ " (Total: 0)" ] }, - "execution_count": 21, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1521,7 +1628,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -1542,9 +1649,11 @@ " }\n", " .Table tr:nth-child(odd){\n", " background: #ffffff;\n", + " color: #000000;\n", " }\n", " .Table tr:nth-child(even){\n", " background: #f3f1ff;\n", + " color: #000000;\n", " }\n", " /* Tooltip container */\n", " .djtooltip {\n", @@ -1606,7 +1715,7 @@ " (Total: 0)" ] }, - "execution_count": 22, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1617,14 +1726,14 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "EphysRecording: 100%|██████████| 1/1 [00:00<00:00, 13.35it/s]\n" + "EphysRecording: 100%|██████████| 1/1 [00:01<00:00, 1.22s/it]\n" ] } ], @@ -1642,7 +1751,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -1663,9 +1772,11 @@ " }\n", " .Table tr:nth-child(odd){\n", " background: #ffffff;\n", + " color: #000000;\n", " }\n", " .Table tr:nth-child(even){\n", " background: #f3f1ff;\n", + " color: #000000;\n", " }\n", " /* Tooltip container */\n", " .djtooltip {\n", @@ -1727,7 +1838,7 @@ " (seconds) duration of the recording from this probe\n", " \n", " subject5\n", - "2023-03-20 21:44:09\n", + "2023-01-01 00:00:00\n", "1\n", "8d4cc6d8-a02d-42c8-bf27-7459c39ea0ee\n", "SpikeGLX\n", @@ -1742,11 +1853,11 @@ "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", + "subject5 2023-01-01 00: 1 8d4cc6d8-a02d- SpikeGLX 30000.0 2018-07-03 20: 338.666 \n", " (Total: 1)" ] }, - "execution_count": 24, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1757,7 +1868,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1778,9 +1889,11 @@ " }\n", " .Table tr:nth-child(odd){\n", " background: #ffffff;\n", + " color: #000000;\n", " }\n", " .Table tr:nth-child(even){\n", " background: #f3f1ff;\n", + " color: #000000;\n", " }\n", " /* Tooltip container */\n", " .djtooltip {\n", @@ -1830,9 +1943,9 @@ " filepath relative to root data directory\n", " \n", " subject5\n", - "2023-03-20 21:44:09\n", + "2023-01-01 00:00:00\n", "1\n", - "subject5/session1/probe_1/npx_g0_t0.imec.ap.meta \n", + "raw/subject5/session1/probe_1/npx_g0_t0.imec.ap.meta \n", " \n", " \n", "

Total: 1

\n", @@ -1841,11 +1954,11 @@ "text/plain": [ "*subject *session_datet *insertion_num *file_path \n", "+----------+ +------------+ +------------+ +------------+\n", - "subject5 2023-03-20 21: 1 subject5/sessi\n", + "subject5 2023-01-01 00: 1 raw/subject5/s\n", " (Total: 1)" ] }, - "execution_count": 25, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1870,7 +1983,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -1885,7 +1998,7 @@ "params : longblob # dictionary of all applicable parameters" ] }, - "execution_count": 26, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1896,7 +2009,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -1917,9 +2030,11 @@ " }\n", " .Table tr:nth-child(odd){\n", " background: #ffffff;\n", + " color: #000000;\n", " }\n", " .Table tr:nth-child(even){\n", " background: #f3f1ff;\n", + " color: #000000;\n", " }\n", " /* Tooltip container */\n", " .djtooltip {\n", @@ -1988,7 +2103,7 @@ " (Total: 1)" ] }, - "execution_count": 27, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -2043,7 +2158,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -2059,7 +2174,7 @@ "task_mode=\"load\" : enum('load','trigger') # 'load': load computed analysis results, 'trigger': trigger computation" ] }, - "execution_count": 29, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -2090,7 +2205,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -2100,21 +2215,21 @@ " 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", + " clustering_output_dir=\"processed/subject5/session1/probe_1/kilosort2-5_1\",\n", " )\n", ")" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Clustering: 100%|██████████| 1/1 [00:00<00:00, 15.88it/s]\n" + "Clustering: 100%|██████████| 1/1 [00:00<00:00, 3.46it/s]\n" ] } ], @@ -2134,7 +2249,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -2154,7 +2269,7 @@ "curation_note=\"\" : varchar(2000) # " ] }, - "execution_count": 32, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -2165,7 +2280,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -2184,16 +2299,18 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 30, "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" + "CuratedClustering: 0%| | 0/1 [00:00" ] @@ -2298,7 +2415,7 @@ "plt.plot(lfp_average)\n", "plt.title(\"Average LFP Waveform for Insertion 1\")\n", "plt.xlabel(\"Samples\")\n", - "plt.ylabel(\"microvolts (uV)\")" + "plt.ylabel(\"microvolts (uV)\");" ] }, { @@ -2320,7 +2437,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -2334,12 +2451,12 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 34, "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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", + "image/png": "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V++//77mzJnjdd6MGTO0ZcsWuVyunuk8gG5HgQMgJEydOlW//vWvlZ6erqVLl2rgwIGKj4/XzTffrPT0dC1btkyVlZXasWOHJOk///M/lZmZqYceekhnnHGGMjMz9b//+79at26d8vPz/bZx4MAB9e/fXwkJCea2kpISDR48WP/yL/+i1NRUZWZm6o477vA6LykpSU1NTV4fvwEIbRQ4AELClClTzJ/79++vuLg4TZ482dyWmJgoSaqoqJB08svC69atM7/TExkZqTPOOEOStG/fPr9tHDt2THa73euL0BdddJFSU1M1evRo3XDDDXr55ZfNd4ncIiIiJKnVdgChiwIHQEgYMGCA13Obzea1zV2UtLS0SJLq6uqUnZ2tvLw8r0dBQUGrj5jc4uPj1dDQoKamJnNbVFSUtm/frldffVXDhw/XsmXLNHXqVFVXV5vHVFVVSZKGDh3aLX0F0PMocAD0SWeeeaZ27dqlUaNGaezYsV6PwYMH+z1n2rRpkqTdu3d7bQ8LC9O8efP06KOPaseOHdq/f78++eQTc//OnTs1cuRIxcfH91h/AHQvChwAfdKtt96qqqoqXXPNNfryyy+1b98+ffDBB7rxxhvV3Nzs95yhQ4fqzDPP1MaNG81t7733np566inl5eXpwIEDevHFF9XS0qJx48aZx3z22WeaP39+j/cJQPehwAHQJyUlJWnTpk1qbm7W/PnzNXnyZC1ZskQxMTHq1y/wS9tNN92kl19+2XweExOjN998UxdccIHGjx+vZ599Vq+++qomTpwoSWpsbNRbb72lm2++ucf7BKD7cKM/AKeVY8eOady4cXr99dc1c+bMdo9/5plntHr1an344Ye9EB2A7sI7OABOKxEREXrxxRfbvCGgpwEDBujpp5/u4agAdDfewQEAAJbDOzgAAMByKHAAAIDlUOAAAADLocABAACWQ4EDAAAshwIHAABYDgUOAACwHAocAABgORQ4AADAcv4/4rIQegvxjTEAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -2353,12 +2470,12 @@ "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\")" + "plt.ylabel(\"Unit\");" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -2370,54 +2487,211 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'subject': 'subject5',\n", - " 'session_datetime': datetime.datetime(2023, 3, 20, 21, 44, 9),\n", + " 'session_datetime': datetime.datetime(2023, 1, 1, 0, 0),\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])}" + " 'electrode': 92,\n", + " 'cluster_quality_label': 'noise',\n", + " 'spike_count': 292,\n", + " 'spike_times': array([ 1.02606667, 1.19973333, 1.5044 , 1.52283333,\n", + " 1.86786667, 1.8688 , 1.8806 , 1.88553333,\n", + " 2.0581 , 2.76826667, 2.89186667, 2.9311 ,\n", + " 4.8753 , 5.2964 , 7.02266667, 9.65273333,\n", + " 9.81373333, 10.22443333, 11.96146667, 15.07173333,\n", + " 15.08983333, 15.78326667, 21.30936667, 22.7549 ,\n", + " 23.5582 , 23.6582 , 23.87043333, 24.16726667,\n", + " 24.25456667, 24.2671 , 25.0249 , 27.89116667,\n", + " 35.3036 , 36.0171 , 40.00396667, 40.0873 ,\n", + " 41.015 , 42.70086667, 45.8682 , 47.9291 ,\n", + " 48.90843333, 49.37996667, 49.39596667, 49.4058 ,\n", + " 49.65926667, 49.68203333, 49.74273333, 51.52213333,\n", + " 52.41486667, 55.27623333, 55.54576667, 55.81213333,\n", + " 56.0544 , 56.29426667, 56.36896667, 56.3743 ,\n", + " 56.47403333, 56.7147 , 56.71683333, 60.764 ,\n", + " 61.5317 , 61.54046667, 61.7721 , 62.10233333,\n", + " 62.10726667, 62.2118 , 62.81173333, 63.15896667,\n", + " 65.11126667, 65.495 , 67.18373333, 77.59256667,\n", + " 79.2709 , 80.46186667, 82.1178 , 85.6568 ,\n", + " 86.52613333, 89.12126667, 89.46963333, 89.64663333,\n", + " 90.19103333, 92.0923 , 92.99573333, 93.36923333,\n", + " 93.68086667, 95.2097 , 97.96296667, 98.1067 ,\n", + " 98.69713333, 99.26963333, 99.28013333, 101.04216667,\n", + " 101.2002 , 101.3843 , 101.3975 , 101.40656667,\n", + " 102.00996667, 102.07066667, 102.17033333, 103.5861 ,\n", + " 104.68523333, 104.71643333, 105.2595 , 105.5166 ,\n", + " 105.54723333, 107.0848 , 109.82746667, 110.14853333,\n", + " 110.92203333, 111.2481 , 112.26 , 113.09466667,\n", + " 113.09846667, 113.1005 , 113.33513333, 118.842 ,\n", + " 118.96803333, 119.32606667, 119.64796667, 119.96313333,\n", + " 119.97343333, 120.19573333, 120.19693333, 120.21163333,\n", + " 121.1879 , 121.233 , 121.9611 , 122.40203333,\n", + " 123.1745 , 124.6798 , 124.68196667, 124.97396667,\n", + " 125.2205 , 125.87786667, 125.957 , 125.95803333,\n", + " 127.7149 , 136.8558 , 136.86413333, 138.49966667,\n", + " 139.49553333, 139.93163333, 139.9819 , 142.57013333,\n", + " 142.70053333, 143.343 , 143.40796667, 148.46066667,\n", + " 148.47023333, 148.89893333, 152.79766667, 153.2198 ,\n", + " 153.39096667, 153.62456667, 153.82253333, 153.82693333,\n", + " 153.8364 , 153.98863333, 155.4047 , 157.52706667,\n", + " 157.53233333, 163.1177 , 163.12516667, 163.46916667,\n", + " 163.69406667, 163.7119 , 166.6946 , 166.7006 ,\n", + " 170.78053333, 170.7891 , 170.79653333, 180.36596667,\n", + " 180.43416667, 182.72556667, 182.73706667, 182.76576667,\n", + " 184.24713333, 185.5131 , 185.7329 , 186.4198 ,\n", + " 186.48443333, 186.72036667, 186.95926667, 187.1402 ,\n", + " 187.16683333, 189.4036 , 193.27583333, 195.40946667,\n", + " 200.2427 , 203.03376667, 203.04076667, 205.84043333,\n", + " 206.1151 , 207.3402 , 210.95773333, 217.73583333,\n", + " 220.35 , 221.1235 , 227.7719 , 227.946 ,\n", + " 228.02456667, 231.2108 , 231.80003333, 233.48253333,\n", + " 236.8342 , 241.78993333, 243.6285 , 245.61546667,\n", + " 245.95573333, 246.04586667, 246.06206667, 247.12933333,\n", + " 248.17143333, 249.16873333, 251.13613333, 252.4734 ,\n", + " 253.2007 , 254.50943333, 255.22563333, 255.2502 ,\n", + " 255.5314 , 255.53423333, 255.7684 , 256.81196667,\n", + " 256.99066667, 256.9928 , 257.0588 , 257.06206667,\n", + " 257.0801 , 257.15523333, 257.27496667, 257.291 ,\n", + " 257.99483333, 259.6955 , 259.7061 , 259.71746667,\n", + " 263.59203333, 266.7052 , 266.70576667, 267.0376 ,\n", + " 267.35913333, 267.87316667, 268.36156667, 268.94556667,\n", + " 269.01516667, 269.63623333, 269.88553333, 270.16176667,\n", + " 270.39123333, 273.41633333, 273.43763333, 274.2084 ,\n", + " 276.36113333, 278.68053333, 279.50626667, 281.0338 ,\n", + " 281.9869 , 283.69233333, 285.0663 , 287.0179 ,\n", + " 289.5541 , 291.78113333, 292.16493333, 292.85823333,\n", + " 292.8702 , 295.93823333, 295.9514 , 295.9679 ,\n", + " 296.00623333, 296.0391 , 296.04393333, 298.9717 ,\n", + " 299.01556667, 299.0859 , 299.7463 , 306.65153333,\n", + " 307.38243333, 307.7771 , 311.80163333, 311.83026667,\n", + " 313.37816667, 314.948 , 317.10726667, 317.98363333,\n", + " 319.25856667, 321.01533333, 321.16426667, 330.15466667,\n", + " 330.73633333, 330.91536667, 332.83243333, 332.86266667]),\n", + " 'spike_sites': array([92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,\n", + " 92, 92, 92]),\n", + " 'spike_depths': array([ 917.68931051, 1002.6141662 , 893.1431346 , 912.33104931,\n", + " 902.87693568, 872.31105976, 875.26191363, 922.47333477,\n", + " 949.16252597, 801.99946108, 858.01692677, 921.7837487 ,\n", + " 897.25087548, 874.42894267, 914.89717798, 861.55454858,\n", + " 904.22082978, 900.71556806, 848.89880207, 871.55857472,\n", + " 849.40502424, 887.21898509, 957.57407264, 857.52950094,\n", + " 941.13752662, 931.03217518, 898.99527832, 962.92735677,\n", + " 915.56550832, 922.14542481, 894.27941318, 874.31413165,\n", + " 847.78323382, 960.73651726, 902.09721294, 899.97936727,\n", + " 936.76767365, 908.68471877, 931.97562897, 892.8563381 ,\n", + " 940.49920044, 925.87119487, 915.55667036, 786.01763842,\n", + " 867.61268444, 1007.66794229, 867.43220284, 941.51843395,\n", + " 955.66765617, 970.36344663, 894.82624021, 915.00922015,\n", + " 889.99169864, 878.28545616, 850.33714087, 928.43421969,\n", + " 939.52352775, 962.60336897, 903.36858487, 896.37548128,\n", + " 963.73199174, 789.82843798, 920.43722936, 828.40065648,\n", + " 943.98810503, 835.85766882, 841.76946105, 937.36801859,\n", + " 896.49642885, 967.15672796, 918.39713395, 906.36795986,\n", + " 919.40916519, 875.89694182, 908.3418033 , 972.05674531,\n", + " 927.07275902, 940.77150366, 918.04680759, 981.59648505,\n", + " 940.32229921, 938.36235287, 849.04038544, 893.3058527 ,\n", + " 913.09883832, 912.35625832, 989.78190796, 879.34780591,\n", + " 928.81644221, 892.97322993, 898.70158737, 906.91746418,\n", + " 946.42526162, 914.08702993, 859.34034454, 907.18338275,\n", + " 989.30138781, 926.06769221, 838.08269605, 929.50654863,\n", + " 827.39586238, 927.36188021, 910.17661856, 935.41822322,\n", + " 885.63661049, 914.48018584, 895.93753147, 911.13864214,\n", + " 881.60996972, 938.20931097, 1015.75963624, 938.56188955,\n", + " 909.09481672, 867.81417174, 912.15092578, 907.0519042 ,\n", + " 913.43873474, 913.23570042, 983.89208176, 899.44708324,\n", + " 910.55603061, 950.67199374, 916.27718038, 886.16272254,\n", + " 975.57372749, 882.46972449, 908.99151954, 893.41760103,\n", + " 938.6441373 , 885.19738826, 947.44382361, 918.75218854,\n", + " 942.78614663, 968.52291541, 915.78656008, 989.00683215,\n", + " 855.88223229, 976.62553529, 919.25644927, 958.63970635,\n", + " 934.03540249, 926.45247121, 961.36373273, 926.55709697,\n", + " 896.6375551 , 897.47943897, 907.74803191, 954.04187795,\n", + " 882.10295293, 1004.09432843, 892.73726557, 846.13198111,\n", + " 929.42733278, 894.24531402, 921.97988827, 860.601478 ,\n", + " 912.55635483, 997.22339505, 985.88635074, 938.45775184,\n", + " 944.63766895, 942.18376197, 984.23087354, 922.40370934,\n", + " 965.34813049, 921.32552393, 969.81367405, 917.74503135,\n", + " 833.76599428, 894.97963584, 878.49090123, 864.91049261,\n", + " 985.04808527, 927.18133162, 844.64492657, 913.88047009,\n", + " 928.03561194, 930.79686847, 930.13055052, 839.5761256 ,\n", + " 943.37875897, 956.44476838, 931.39781252, 989.20932655,\n", + " 1006.29928459, 942.03146682, 901.72518137, 932.53880871,\n", + " 935.96943144, 925.53161728, 874.67439465, 951.48997974,\n", + " 960. , 874.14717137, 921.49562818, 927.26749515,\n", + " 926.41158172, 896.61260138, 938.6103718 , 959.64828575,\n", + " 935.22630845, 955.63103852, 950.8495808 , 888.45366602,\n", + " 912.06814044, 862.81354284, 875.05713562, 875.4100677 ,\n", + " 923.5426824 , 839.78562837, 889.74471045, 867.8332007 ,\n", + " 933.88736839, 868.07155277, 883.34738777, 913.12741673,\n", + " 915.77804797, 962.99775026, 932.9485248 , 930.37415413,\n", + " 944.21567324, 776.98228821, 936.37311401, 941.58975024,\n", + " 941.55965056, 864.51860126, 930.38329188, 912.78502395,\n", + " 947.32712079, 1011.13494089, 937.99624501, 916.59535343,\n", + " 873.82437868, 901.49630725, 846.11674006, 998.64016883,\n", + " 978.32805846, 876.27655411, 905.78089027, 827.25234516,\n", + " 1002.18813125, 898.65291068, 920.350764 , 874.17361952,\n", + " 938.70381451, 945.81921622, 874.98921047, 915.97985629,\n", + " 920.14460695, 965.25282342, 977.01542391, 863.18856888,\n", + " 907.62393082, 906.19584978, 851.37149337, 956.85804045,\n", + " 969.94521463, 912.02588788, 953.60047228, 819.53086148,\n", + " 911.99611929, 845.66361521, 962.24964999, 921.43338903,\n", + " 982.04267741, 931.1841306 , 896.56744607, 926.6958426 ,\n", + " 841.56778533, 961.77261899, 943.15601639, 786.18136435,\n", + " 864.98026608, 950.29718422, 930.39820918, 983.57154574,\n", + " 909.55498598, 925.76591071, 906.07808244, 964.41923255,\n", + " 911.17276099, 919.34859876, 906.11721418, 905.96844161,\n", + " 911.53683431, 958.97512493, 953.15452691, 889.09240389,\n", + " 957.98473324, 993.29170991, 928.99175736, 908.10563408]),\n", + " 'peak_electrode_waveform': array([-503.33636558, -502.734375 , -501.32973031, -500.34246575,\n", + " -499.73244863, -498.66491866, -494.41887842, -491.6015625 ,\n", + " -486.59300086, -481.55233305, -474.36055223, -466.79152397,\n", + " -458.98169949, -451.10766267, -442.41491866, -431.03328339,\n", + " -420.81549658, -410.91074486, -402.25010702, -395.59610445,\n", + " -389.25513699, -384.02985873, -381.67005565, -379.81592466,\n", + " -378.79655394, -380.26541096, -384.54355736, -392.41759418,\n", + " -401.11033818, -410.67797517, -420.13324058, -430.6640625 ,\n", + " -442.34267979, -452.71297089, -461.42979452, -469.67305223,\n", + " -478.64672517, -486.40036387, -493.83294092, -498.87360873,\n", + " -504.82127568, -509.58101455, -511.55554366, -514.19627568,\n", + " -515.77750428, -516.41160103, -517.3828125 , -518.16941353,\n", + " -517.26241438, -518.46639555, -517.76808647, -517.3828125 ,\n", + " -516.61226455, -514.32470034, -512.5187286 , -511.66791524,\n", + " -510.65657106, -507.74293664, -504.84535531, -503.02333048,\n", + " -501.93172089, -499.3552012 , -498.77729024, -495.78339041,\n", + " -495.42219606, -495.78339041, -494.30650685, -492.30789812,\n", + " -491.83433219, -492.14736729, -490.16481164, -489.69124572,\n", + " -488.84043236, -488.5354238 , -489.24175942, -487.68461045,\n", + " -486.48062928, -485.50941781, -484.23319777, -484.24925086,\n", + " -484.26530394, -483.3984375 ])}" ] }, - "execution_count": 40, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -2428,12 +2702,12 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 37, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAGwCAYAAAC5ACFFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABhOUlEQVR4nO3deViU5f4G8HtmGGbYF1lFQEABFQR3wV1RLCs5ZamVu5WdFi1zq1Oe06+Tx07laTettMVy31JPau4L7qCigrLIKiAgDLIMMPP+/kCmOAKyzPDOwP25rrmSmXf5vkwwN8/zvM8jEQRBABERERHVSSp2AURERETGjGGJiIiIqAEMS0REREQNYFgiIiIiagDDEhEREVEDGJaIiIiIGsCwRERERNQAM7ELMHVarRZZWVmwsbGBRCIRuxwiIiJqBEEQUFxcjI4dO0IqbbjtiGGphbKysuDp6Sl2GURERNQM6enp6NSpU4PbMCy1kI2NDYDqb7atra3I1RAREVFjqFQqeHp66j7HG8Kw1EI1XW+2trYMS0RERCamMUNoOMCbiIiIqAEMS0REREQNYFgiIiIiagDDEhEREVEDGJaIiIiIGsCwRERERNQAhiUiIiKiBjAsERERETWAYYmIiIioAQxLRERERA0w2bD02GOPwcvLC0qlEu7u7pgyZQqysrJqbXPp0iUMGTIESqUSnp6e+OCDD+47zqZNmxAYGAilUong4GDs2bOntS6BiIiITIDJhqURI0Zg48aNSEhIwJYtW5CUlIQJEyboXlepVBgzZgy8vb1x/vx5/Pvf/8bf//53rFq1SrfNyZMnMXnyZMyaNQsxMTGIiopCVFQU4uLixLgkIiIiMkISQRAEsYvQh507dyIqKgpqtRpyuRxfffUV3nrrLWRnZ8Pc3BwAsHjxYmzfvh3x8fEAgIkTJ6KkpAS7du3SHWfgwIEIDQ3FypUr6zyPWq2GWq3WfV2zanFRUREX0iUyEoIgoFhdBVulXOxSiMhIqVQq2NnZNerz22Rblv6soKAA69atQ3h4OOTy6l+O0dHRGDp0qC4oAUBkZCQSEhJw584d3TYRERG1jhUZGYno6Oh6z7Vs2TLY2dnpHp6enga4IiJqiQ/3JaDn3/dh0L8O4rUNsfjlTBqSbt9FG/nbkIhamUmHpUWLFsHKygodOnRAWloaduzYoXstOzsbrq6utbav+To7O7vBbWper8uSJUtQVFSke6Snp+vrcohIDzILy7D6aIru39tiMrFk62WM+ugI+v3zAF5adwE/RN9EdlG5yJUSkakwqrC0ePFiSCSSBh81XWgAsGDBAsTExGDfvn2QyWSYOnWqwf9yVCgUsLW1rfUgIuPx+cEbqNBo0d/HET/NGoBXR3ZBfx9HmJtJkXdXjd2Xb+GdHVcQ9q8DePab09hyPgMl6iqxyyYiI2YmdgF/Nn/+fEyfPr3BbXx9fXX/dnJygpOTE/z9/dGtWzd4enri1KlTCAsLg5ubG3JycmrtW/O1m5ub7r91bVPzOhGZlrT8Umw6lwEAWBAZgH6dHTG4qxMAoLxSg0sZRTidnI8j12/jXOodHE/Mw/HEPPxtexzGBrnh8d4eCPdzgkwqEfMyiMjIGFVYcnZ2hrOzc7P21Wq1AKAbfB0WFoa33noLlZWVunFM+/fvR0BAABwcHHTbHDhwAPPmzdMdZ//+/QgLC2vBVRCRWD45cANVWgFD/Z3Rr7NjrdeUchn6+ziiv48jXhnVFekFpdgWk4mtFzJwM7/639tiMuFqq8D7fwnGqG6u9ZyFiNobk7wb7vTp0zh79iwGDx4MBwcHJCUl4e2330ZOTg6uXLkChUKBoqIiBAQEYMyYMVi0aBHi4uIwc+ZMrFixAs8//zyA6qkDhg0bhn/9618YN24c1q9fj/fffx8XLlxAUFBQo2ppymh6IjKcxNy7GLPiCLQCsP2lQQj1tG/UfoIgICa9EFsvZODXi7dQVFaJDlbmOLF4JJRymWGLJiLRtPm74SwtLbF161aMGjUKAQEBmDVrFnr27IkjR45AoVAAAOzs7LBv3z6kpKSgT58+mD9/Pt555x1dUAKA8PBw/Pzzz1i1ahVCQkKwefNmbN++vdFBiYiMxycHbkArABHdXBodlABAIpGgt5cD3osKxuk3R8HD3gL5JRXYciHDcMUSkUkxyZYlY8KWJSLxxWerMPY/xwAAu18djB4d7Zp9rO+Op+DdXVfh42SF318fxvFLRG1Um29ZIiL6sxX7rwMAHg52a1FQAoCJ/TxhqzRDSl4Jfr+W8+AdiKjNY1giIpN2OaMIe6/kQCIBXovwb/HxrBRmeHagNwBg1dHkFh+PiEwfwxIRmbSP9ycAAMaHdERXVxu9HHN6eGeYy6Q4n3oH51ML9HJMIjJdDEtEZLLOp97BoYTbkEklmKuHVqUaLrZK/KWXBwDg6yNsXSJq7xiWiMhk1YxVeqK3B3ycrPR67OeG+gAA9l/LQfLtu3o9NhGZFoYlIjJJp5LzcTwxD3KZBK+M7Kr343dxscGoQBcIAvDN8RS9H5+ITAfDEhGZpE8P3AAAPNXXE56OlgY5x/NDq5dX2nw+A3l31QY5BxEZP4YlIjI5ybfv4mRSPqQS4K8juhjsPP19HBHiaY+KKi1+OHnTYOchIuPGsEREJmfjvcVyh/k7w8PewmDnkUgkeOFe69IPp1JRWlFlsHMRkfFiWCIik1Kp0WLz+eqwNLGfl8HPF9nDDV6OligsrdSdl4jaF4YlIjIpB+NzkXdXDSdrc4zq5mLw88mkEsweUn1n3DfHUqDRcoUoovaGYYmITMqGs+kAgCf6dIJc1jq/wp7s4wkHSznSCkrxW1x2q5yTiIwHwxIRmYxbRWU4nJALAJjY17PVzmthLsOUsM4AgNXHOEklUXvDsEREJmPTuQxoBWCAjyN8na1b9dxTw7whl0kQm16Iq1mqVj03EYmLYYmITIJWK+i64Cb1b71WpRpO1gqM6e4GANhwNq3Vz09E4mFYIiKTcCIpD5mFZbBRmuGhIHdRapjYrzqkbYvJRHmlRpQaiKj1MSwRkUlYf69V6S+9PKCUy0SpYXAXJ3jYW0BVXsWB3kTtCMMSERm9gpIK7LtSHU5qWnfEIJVK8NS9geXr2RVH1G4wLBGR0dt6IQOVGgHBHnbo0dFO1Fqe7NsJEglwKrkAKXklotZCRK2DYYmIjJogCLouODFblWp0tLfAMH9nAMDGc+kiV0NErYFhiYiM2oW0O0jMvQsLuQzjQzuKXQ4AYNK90Lb5fAYqNVqRqyEiQ2NYIiKjtv5MdevNuJ7usFHKRa6m2qhurnCyNsftYjUOxeeKXQ4RGRjDEhEZreLySuy6dAvAH605xkAuk+KJPp0A/LH8ChG1XQxLRGS0fr14C2WVGvg5W6GPt4PY5dRSs9zKoYRc3CoqE7kaIjIkhiUiMkrVA7urb8+f1M8LEolE5Ipq83W2Rn8fR2gFYPO5DLHLISIDYlgiIqN07EYeLmUUwdxMir/09hC7nDrVdA1uOJcOrVYQuRoiMhSGJSIyOoIg4KN9CQCAZwd4w8laIXJFdXsoyB02SjNk3CnDyaR8scshIgNhWCIio3PgWi4uZhTBQi7Di8P9xC6nXhbmMkSFVrd6cUZvoraLYYmIjIpWK+Dj/dcBANPCO8PZxjhblWrUTJS570oOCkoqRK6GiAyBYYmIjMpvV7Jx9ZYK1gozvDDUV+xyHijIww5BHrao0GixLSZT7HKIyAAYlojIaGi0Albca1WaOdgHDlbmIlfUOBP7eQEA1p9JgyBwoDdRW8OwRERG49eLWbiRexe2SjPMGuwjdjmNNj60IyzkMtzIvYvoZA70JmprGJaIyChUabT45MANAMDzQ31hZ2EcS5s0hq1Sjif6VA/0/vZYisjVEJG+MSwRkVHYGpOJlLwSOFqZY/og02lVqjHzXs0H4nORfPuuyNUQkT4xLBGR6CqqtPjk9+pWpTnDfGGtMBO5oqbzdbZGRDcXAMB3J9i6RNSWMCwRkeg2nktHZmEZnG0UmDKws9jlNNvMe+OsNp/PQGEppxEgaisYlohIVOWVGnx+MBEA8NJwP1iYy0SuqPnCfDugu7styiu1WHeak1QStRUMS0Qkqp9PpyFbVQ53OyUm9fcSu5wWkUgkmD2kunXp+5M3UVGlFbkiItIHhiUiEk1xeSW+PJwEAHh5ZBco5abbqlTjkZ4d4WKjQG6xGrsvZ4ldDhHpAcMSEYnm3V+vIu+uGt4dLPFkH0+xy9ELczMppoV3BgB8cyyFk1QStQEMS0Qkit+v5mDT+QxIJMC/J4TA3Kzt/Dp6ur8XlHIprmSpcDqlQOxyiKiF2s5vJyIyGQUlFVi89TIA4Lkhvujv4yhyRfrlYGWOJ3p3AlDdukREpo1hiYhalSAI+Nv2y8i7q4a/qzVeH+0vdkkGUTONwIH4HKTklYhcDRG1BMMSEbWqnRezsOdyNsykEnz8VGibGNRdFz9na4wMdIEgAGs4SSWRSWNYIqJWk11Ujre3xwEAXhnZFUEediJXZFiz77UubTrHSSqJTBnDEhG1CkEQsHDLJajKq9Czkx3+OsJP7JIMLsyvA7q526KsUoNfzqSLXQ4RNRPDEhG1inWn03D0+m0ozKT4+KkQyGVt/9ePRCLBrMGcpJLI1LX931ZEJLrU/BK8v+caAGDh2EB0cbERuaLW82iIO5xtFMhWlWPrhQyxyyGiZmBYIiKD0mgFzN94EaUVGgz0dcSMexM2thcKMxnmDKvucvz0wA2oqzQiV0RETcWwREQGdTghF+dS78BaYYZ/TwiBVCoRu6RW98wAL7jaKpBVVI4NZzl2icjUMCwRkUEdTrgNAIjq1RGejpYiVyMOpVyGl0d2BQB8fjAR5ZVsXSIyJQxLRGRQx25Uh6WhXZ1FrkRcE/t6wsPeArnFavx0KlXscoioCRiWiMhg0vJLcTO/FDKpBGF+HcQuR1TmZlLMHVXduvTV4SSUqKtEroiIGothiYgM5lhidatSby972CjlIlcjvsd7e6BzB0vkl1Rg7cmbYpdDRI3EsEREBnPseh4AYEg774KrYSaTYm5EdevSqqPJUJVXilwRETUGwxIRGUSVRosTSTVhyUnkaozHYyEe6OJijaKySnx3nGvGEZkCkw1Ljz32GLy8vKBUKuHu7o4pU6YgKytL9/rhw4cxfvx4uLu7w8rKCqGhoVi3bt19x9m0aRMCAwOhVCoRHByMPXv2tOZlELVZFzOKUFxeBTsLOXp2she7HKMhk0rwWoQ/AODbYylcM47IBJhsWBoxYgQ2btyIhIQEbNmyBUlJSZgwYYLu9ZMnT6Jnz57YsmULLl26hBkzZmDq1KnYtWtXrW0mT56MWbNmISYmBlFRUYiKikJcXJwYl0TUptTcBTe4ixNk7XBupYY8FOSGbu62KFZXYdXRZLHLIaIHkAiCIIhdhD7s3LkTUVFRUKvVkMvrHkg6btw4uLq64rvvvgMATJw4ESUlJbUC1MCBAxEaGoqVK1fWeQy1Wg21Wq37WqVSwdPTE0VFRbC1tdXjFRGZtie+OonzqXfwr8eDMam/l9jlGJ39V3Pw3A/nYCGX4diiEXCyVohdElG7olKpYGdn16jPb5NtWfqzgoICrFu3DuHh4fUGJQAoKiqCo6Oj7uvo6GhERETU2iYyMhLR0dH1HmPZsmWws7PTPTw9PVt+AURtTFFZJWLTCwEAgzleqU4R3VwQ0skOZZUarDycJHY5RNQAkw5LixYtgpWVFTp06IC0tDTs2LGj3m03btyIs2fPYsaMGbrnsrOz4erqWms7V1dXZGdn13ucJUuWoKioSPdIT+fSBUT/KzopHxqtAF9nK3RyaJ+zdj+IRCLB62MCAAA/nkpFjqpc5IqIqD5GFZYWL14MiUTS4CM+Pl63/YIFCxATE4N9+/ZBJpNh6tSpqKtX8dChQ5gxYwZWr16NHj16tKhGhUIBW1vbWg8iqo2zdjfO0K5OCPW0h7pKi31Xc8Quh4jqYSZ2AX82f/58TJ8+vcFtfH19df92cnKCk5MT/P390a1bN3h6euLUqVMICwvTbXPkyBE8+uijWLFiBaZOnVrrWG5ubsjJqf0LKicnB25ubi2/GKJ27NgNThnQGBKJBAN8HRGbXojr2cVil0NE9TCqsOTs7Axn5+b9JarVagGg1uDrw4cP45FHHsHy5cvx/PPP37dPWFgYDhw4gHnz5ume279/f62wRURNk5pfgrSCUshlEgz0bd9LnDSGv4sNAOB6DsMSkbEyqrDUWKdPn8bZs2cxePBgODg4ICkpCW+//Tb8/Px0QefQoUN45JFHMHfuXDzxxBO6cUjm5ua6Qd5z587FsGHD8NFHH2HcuHFYv349zp07h1WrVol2bUSm7ui9VqXeXg6wUpjkr5hWFeD2R1gSBAESCadZIDI2RjVmqbEsLS2xdetWjBo1CgEBAZg1axZ69uyJI0eOQKGovv32+++/R2lpKZYtWwZ3d3fd4/HHH9cdJzw8HD///DNWrVqFkJAQbN68Gdu3b0dQUJBYl0Zk8o5dvzdeyZ/jlRrDz9kaEglwp7QSeXc5QSWRMWoz8yyJpSnzNBC1dZUaLXq/ux/F6irsfHkQZ+5upGH/PoTU/FL8PHsAwrtwnBdRa2h38ywRkXG4mF6IYnUVHCzl6NHRTuxyTIa/K8ctERkzhiUi0pua8UqDuMRJk/i7WgMAEnLuilwJEdWFYYmI9IbzKzVPTcvSDbYsERklhiUi0oui0kpcvLfEyRB/jrtpij93w3EYKZHxYVgiIr04kZQHrQB0dbGGu52F2OWYFF9nK8ikEqjKq5CjUj94ByJqVQxLRKQXNV1wQ9gF12QKMxm8O1SvocdB3kTGh2GJiFpMEAQcvX5viRN2wTVLAO+IIzJaDEtE1GIpeSXILCyDuUyKAT6OYpdjkroyLBEZLYYlImqxE4nVrUp9vB1gac4lTpqjZvqA65w+gMjoMCwRUYudTikAAIT7ceHc5gr40/QBvCOOyLgwLBFRiwiCgLM3q8NS387sgmuuzk5WkMskKKnQILOwTOxyiOhPGJaIqEUy7pQhR6WGmVSCUE97scsxWXKZFD5OVgCAG+yKIzIqDEtE1CLnUqtblYI87GBhLhO5GtNWMzllAgd5ExkVhiUiapGzN+8AAPp1dhC5EtPHBXWJjBPDEhG1yDmOV9Kbmjvi2A1HZFwYloio2QpLK3S3uvf1ZstSS+kW1M0thlbLO+KIjAXDEhE12/nU6i44X2crdLBWiFyN6fPuYAVzMynKK7VIv1MqdjlEdA/DEhE1m268kje74PRBJpXAz5mTUxIZG4YlImq2P8YrsQtOXwJ0M3lzkDeRsWBYIqJmKa/U4FJGEQCgP9eD0xuuEUdkfBiWiKhZLmcWoUKjhbONAl6OlmKX02b8MX0Au+GIjAXDEhE1y5l768H16+wAiUQicjVtR80acUm5d1Gl0YpcDREBDEtE1Ey68Uoc3K1XnRwsYCGXoUKjRWoB74gjMgYMS0TUZFqtgHOpNTN3Myzpk1QqQReXmskpOW6JyBgwLBFRk13PLUZxeRUszWXo5m4jdjltjm6NuGyOWyIyBgxLRNRkNfMr9fZygJmMv0b0rWbZk+u5bFkiMgb8LUdETcb5lQxLt+wJu+GIjALDEhE12bmbHK9kSP5u1WEp+XYJKqp4RxyR2BiWiKhJMgvLkFlYBplUglBPe7HLaZM62ilhrTBDlVbAzfwSscshavcYloioSWq64Hp0tIWVwkzkatomieSPO+I4kzeR+BiWiKhJ2AXXOmomp7yezbBEJDaGJSJqkrM3/5i5mwynq25BXU4fQCQ2hiUiarSiskok3OsW6sOZuw3KnwvqEhkNhiUiarQLqXcgCICPkxWcbRRil9OmBdy7I+5mfgnKKzUiV0PUvjEsEVGjndWtB8cuOENzsVHAVmkGrVA9hQARiYdhiYgajYO7W49EImFXHJGRYFgiokZRV2kQm1EIgDN3t5aaySkvZRSJXAlR+8awRESNEpdZhIoqLTpYmcPHyUrsctqFoV2dAAB7r2RDEASRqyFqvxiWiKhRzqRUd8H17ewAiUQicjXtw/AAF1iay5BZWIbY9EKxyyFqtxiWiOiBKqq0+PlMKgAg3M9J5GraD6VchohurgCA3ZduiVwNUfvFsERED7ThbBrSC8rgZK3Ak307iV1OuzKupzsAYM/lW9Bq2RVHJAaGJSJqUGlFFT45kAgAmDuqCyzNuR5caxrm7wwrcxmyisoRw644IlEwLBFRg9acuIm8u2p4OVpiYj8vsctpd5RyGSK6V3fF7bnMrjgiMTAsEVG9CksrsPJIEgDg9dH+MDfjrwwxjAtmVxyRmPibj4jq9dWRJBSXVyHQzQaPhXQUu5x2a6i/M6wVZrhVVI6Y9Dtil0PU7jAsEVGdsovKsfbETQDAgsgASKWcLkAsSrkMo+91xe3iXXFErY5hiUhkFVVasUuo06cHb0BdpUVfbweMDHQRu5x2j11xROJhWCIS0TfHkhH89734z+/XxS6llpS8Emw4mw4AWPRQICehNAJD/J1gozBDjkqNC2nsiiNqTQxLZJRyVeV4f881zP7+HK5mqcQuxyCOXr+Nf+65BnWVFv/5/QY+P3ijxcfMLS7H+jNpmPPjeSzcfBEJ2c1bgPXj/deh0QoYEeDMRXONhMKMXXFEYuGEKWRUsgrLsPJIEtafTdd1Tx1OyMWro7rixeF+kMuMM98n376LG7l3Mbqba6PG9qQXlOLV9TEQBKC7uy2u3lLhw33XoTCT4bmhvo0+ryAISMgpxu9Xc/D7tdz7lsTYeC4DY3u44eWRXRDkYdeoY8ZlFuHXi1kAgAWRgY2uhQxvXE93bI3JxJ7Lt/DOI905joyolTAskVFIyy/FV0cSsfl8Bio11eMxenvZw8HSHAfic/Hx/uvYdzUbHz4ZgkA3W5Grra2sQoOnvj6FvLtqjA/tiH9PCGnwFvvySg3+uu4CCksr0bOTHTa+EIZVR5Px8f7r+Oeea1DIpZga1rnBc94uVmP1sWTsuXwLGXfKar0W4mmPUYEuuHZLhf/GZeO3K9WPUYEueHlkF/Tycmjw2B/uSwAAjA/tiO4djet73d4N7uoEG6UZcovVOJd6B/19mt7qJwgCfjmTDjsLuW52cCJqGMMSiSo1vwSfHkjE9thMaO4NWh3o64hXR3ZFmF8HAMDOi1l4Z8cVxGWq8OhnxzF3VFfMGeYHMyNpZVp/Ng15d9UAgB2xWSgsrcRXz/aud6brpTuu4HJmERws5fjq2T5QymV4ZWQXlFdq8OXhJLyz4woUZtI6J4AsrajC6qMpWHU0CSUVGgCAwkyKwV2cENHdFaMCXeBiq9Rtfz2nGF8cSsSvF7NwID4XB+JzMaSrEyb284TSTHbf8W8VleFwwm2YSSV4fbS/Pr49pEcKMxnGdHfDlgsZ2H0pq1lhafP5DLy57TKkEqC/TwScbRQGqJSobZEIgsDbKlpApVLBzs4ORUVFsLXlX+FNcSIxD8//cE73oT/U3xmvjOxS5xiZXFU53tx2Gb9fywUABHvY4cMnQxDgZtOqNf8vdZUGwz44jGxVOR7v7YE9l2+hvFKLUE97rJneDw5W5rW2X38mDYu3Vn9Q/TBzAAZ3/WNRWkEQ8N7ua/j2eAokEmDFU6GI6uUBAKjSaLHpfAY+3n8dt4urg1lIJzu8ONwPQ/2dH7gESUpeCb48lIhtMZmoasSdVM8O9MJ7UcFN/XZQKzgUn4sZa8/CxUaB6CWjIGtCV9zNvBI8/OkxlN77mfvnX4LwzABvQ5VKZNSa8vndorBUWVmJ7OxslJaWwtnZGY6O7W8gKMNS8+y+dAuvbYhFhUaLfp0d8Na47gj1tG9wH0EQsC0mE3/feQWq8iqYy6T4ZlpfDPV3bp2i6/DLmTQs2XoZrrYKHF04AnGZKsxcexZFZZXo4mKNH2b2R0d7CwDAxfRCPLkyGhUaLRZEBuClEV3uO54gCHh7Rxx+OpUGqQT4/OneMJdJ8a/f4pGYexcA4OVoiYVjAzAu2L3Jd6mlF5Ri9bFkXMooqnebDlbm+GBCT3SwZouDMaqo0qLve/uhKq/ChucHYoBvh0btV6nRYsLKaFxML4SFXIaySg0Gd3HCT7MHGLhiIuNk0LBUXFyMn376CevXr8eZM2dQUVEBQRAgkUjQqVMnjBkzBs8//zz69evXooswFQxLTffjqVS8syMOggA8HOyGFRNDoaijS6g+OapyLNh8CUev34aLjQL7XhsKe0vzB++oZ1UaLUZ8dBjpBWV455HumDnYB0B119fUb88gW1WOjnZK/DCrPxytFHj0s+PILCzD6O6u+PrZPvUOztVqBSzacgmbzmfUet7eUo5XR3bFMwO9mvT9orbnjU0Xsfl8BqaGeePd8UGN2ufDvQn4/FAibJVm+HpKX0xefQoyqQRn34qAo1Xr//wQia0pn99NGvTx8ccfo3PnzlizZg0iIiKwfft2xMbG4vr164iOjsbSpUtRVVWFMWPGYOzYsbhxo+W3QlPrOXr9NqZ9dwbHb+QZ5PiCIOCT32/g7e3VQenpAV74bHLvJn/wu9oqsWpKH/g5WyG3WI23d1wxSL0PsvNiFtILytDByhyT+/8xvsjf1QZb/hoOX2crZBWVY8LKaMz+/iwyC8vg42SFj54KafAuJqlUgn890RPjQ6uXFzE3k2LOMD8cWTACMwf7MCiRbmD2nsvZurF+DTmdnI8vDicCAJY93hNhfh3Qo6MtNFoB+69mG7RWoragSWHp7NmzOHr0KM6cOYO3334bkZGRCA4ORpcuXdC/f3/MnDkTa9asQXZ2NqKionDs2DFD1Y3HHnsMXl5eUCqVcHd3x5QpU5CVlVXntomJibCxsYG9vf19r23atAmBgYFQKpUIDg7Gnj17DFazMYtNL8TzP57Dkeu3MW3NGfx8Ok2vx9dqBSzdeQUr7k2++OqorvhnVFCTxlv8mVIuw8dPhUImleDXi1nYdanu995QtFoBXxyq/vCZNcQHFua1A4yHvQU2zwlHSCc7FJZW4kJaddfHymf7wFYpf+DxZVIJPnoyBN9O64vDbwzH4ocCYWfx4P2ofRjk5wQ7Czny7qpxJqWgwW2LSivx2oZYCALwZJ9OuqD1cPAfgYuIGtaksPTLL7+gR48eD9xOoVBgzpw5mDlzZrMLe5ARI0Zg48aNSEhIwJYtW5CUlIQJEybct11lZSUmT56MIUOG3PfayZMnMXnyZMyaNQsxMTGIiopCVFQU4uLiDFa3MUovKMXs78+ivFILJ2sFNFoBb267jH/uvtqov1ofRF2lwavrY/BDdCokEuAfj/XA66P9WzwrdIinPV4a7gcA+Nv2OOSqyltca2P9diUbSbdLYKs0w5SBdQ+QdbQyx8/PDcSIAGeYy6T4YELPJg1IN5NJMaqbq27ME1ENczMpIntUT1D5j1+v4FB8LuoaUSEIAt7cfhlZReXw7mCJpY/98fv7oSA3ANU3WhSVVrZO4UQmqsljluLi4hAU1Lg+8ta0c+dOREVFQa1WQy7/4y/wRYsWISsrC6NGjcK8efNQWFioe23ixIkoKSnBrl27dM8NHDgQoaGhWLlyZZ3nUavVUKvVuq9VKhU8PT1NdsxSUVklnvjqJBJz76Kbuy02vjAQ3x2/qWsBGt3dFZ9MCn3g3Vb1Ka/U4LkfzuHYjTzIZRJ89FSoXlevr6jS4i9fnsCVLBVGBrrg22l9Db40hyAIePjT47h2S4VXR3Vt1C32JeoqWCk4Uwfpz5WsIkz4KhplldV3tgV72OHlkV1qTYy6+XwG3th0EWZSCTa/GH7fTRRj/3MU8dnF+PDJEEzo06m1L4FIVAYbswQAPXv2xIABA7B69WoUFzdvKQV9KygowLp16xAeHl4rKB08eBCbNm3CF198Ued+0dHRiIiIqPVcZGQkoqOj6z3XsmXLYGdnp3t4enrq5yJEUFGlxYs/nUdi7l242irw3fS+sFHKMTeiKz6ZFApzmRT7r+bgqa+jkdOMVht1lQbP/3gex27kwdJchm+n9dNrUAKq/8JeMTEU5mZSHIzP1a1nZkiHEnJx7ZYKVuYyzAjv3Kh9GJRI33p0tMORhcPx/FBfWMhluJxZhBd+PI+HPz2GXy9mIfn2XSzdUd1K/tpo/zrvNn0oqLor7r+XuXwKUUOaHJaOHDmCHj16YP78+XB3d8e0adMMOjapIYsWLYKVlRU6dOiAtLQ07NixQ/dafn4+pk+fjrVr19abGLOzs+Hq6lrrOVdXV2Rn19+Hv2TJEhQVFeke6emG/3A2BEGo7mo7mZQPK3MZvpveD+52f3T3jA/1wM/PDYCjlTniMlUY//kJXMmq/3bz/1Wp0eKldTE4ev02LOQyrJ3R32C3+Pu72uCNMdWtO/+36yrSC0oNch6g+vv26YHqsUrPDvS+bx4lotbkYqPEmw93w4nFI/HSCD9YK8wQn12MV36JQeR/jqKkQoP+Po6YM8yvzv0fDq7uijt2Iw+qcnbFEdWnyWFpyJAh+O6773Dr1i189tlnuHnzJoYNGwZ/f38sX768waDxIIsXL4ZEImnwER8fr9t+wYIFiImJwb59+yCTyTB16lRdv/1zzz2Hp59+GkOHDm12PXVRKBSwtbWt9TBFnx2sXlpEJpXg82d6o0fH+9cN69vZEdv/Ogh+zlbIVpXjyZXR2BaTUefYiD+r0mgxb30sfr+WA3Oz6rmQmjPTcFPMGuyL/p0dUVKhwRubLkKrh7FWdTmZlI/Y9EIozKSYNcTHIOcgaipHK3MsiAzEiUUj8VqEP+ws5KjUCLBVmmHFxNB6b6To6mqDri7WqNBoceBaTitXTWQ69DKDd2JiItasWYMff/wR2dnZGDt2LHbu3Nnk49y+fRv5+fkNbuPr6wtz8/v/ms/IyICnpydOnjyJsLAw2Nvb4+7du7rXBUGAVquFTCbDqlWrMHPmTHh5eeH111/HvHnzdNstXboU27dvx8WLFxtVsynOs7Q9JhPzNsQCAN6LCsKz9QxQrlFUVom/rjuPE4nV702Ybwf8X1QPdHG5f7CyVivgjU0XsTUmE3KZBKum9sWIABe9X0Nd0vJLMfaToyit0OBv47ph9pDGL0jbWJNXnUJ0cj6mhXnjH42c34aotRWXV2LP5VsI9rB/4Pp+H++/jk8P3MDo7q5YPbVvK1VIJL5Wm8H7z0pKSrBu3TosWbIEhYWF0Gg0+jhso6WlpcHb2xuHDh3C8OHDce3atVo17NixA8uXL8fJkyfh4eEBBwcHTJw4EaWlpfj1119124WHh6Nnz571DvD+X6YWlk4n52PKt2dQodHi+aG+ePPhbo3ar1KjxddHkvDZwUSoq7SQyyR4bogvXhnZVXfbfE3X3i9n0iGTSvDlM70R2cPNkJdzn59Pp+HNbZdhbibFrlcGw99Vf8uhnLtZgAkroyGXSXB4wQh48C41agPis1UY+59jMDeT4sLbo2HN8XXUThh0gPf/Onr0KKZPnw43NzcsWLAAjz/+OE6cONHSwzbo9OnT+PzzzxEbG4vU1FQcPHgQkydPhp+fH8LCwgAA3bp1Q1BQkO7h4eEBqVSKoKAgODhUr7o+d+5c/Pbbb/joo48QHx+Pv//97zh37hxefvllg9YvlqKySry6PgYVGi0eCnLD4rGBjd5XLpPi5ZFd8fvrwzAq0AWVGgFfHk5CxMdHsP9qDgRBwD9+vYpfzqRDKgH+MzG01YMSAEzu74nhAc6oqNLi6dWnmzTOqiGCIOCzg9VjlZ7o3YlBidqMAFcb+DpZoaJKi4PxuWKXQ2SUmhWWsrKy8P7778Pf3x/Dhw9HYmIiPv30U2RlZWH16tUYOHCgvuusxdLSElu3bsWoUaMQEBCAWbNmoWfPnjhy5AgUisavZxUeHo6ff/4Zq1atQkhICDZv3ozt27cb5dQI+rBszzXkqNTo3MESHz8V2uAs0vXxdLTEt9P7YfXUvvCwt0BmYRme++Ecxqw4irUnb0IiAf49IQSP6vmut8aSSCT48MkQdHO3Rd5dNSZ9fQqnkhvu2m2M9WfTceT6bcikknoHyxKZIolEgofuDfTmXXFEdWtyN9xDDz2E33//HU5OTpg6dSpmzpyJgIAAQ9Vn9EylG+7YjduY8u0ZAMDGF8L0MuC6tKIKnx9MxOpjyajUVP9v9P5fgvH0AK8H7Gl4qvJKzP7+HM6kFMDcTIpPJ/XC2KDmtXQ1ZgFcIlMWl1mERz47DqW8uiuuufOqEZkSg3bDyeVybN68GRkZGVi+fHm7DkqmokRdhcVbLgMApoV56+3ONEtzMywcG4j/zh2KCX06YcXEEKMISgBgq5Tjh5n9Maa7KyqqtPjruvNYf6bpS7jk31XjxZ/Oo0KjxZjurvjrcLYqUdvTo6MtvBwtUV6pxeGE22KXQ2R0mhyWdu7cifHjx9e7DhsZnw9+i0dmYRk87C2wsAnjlBqri4s1PnwyBH/pZVwzACvlMnz5TG9M7OsJrQAs3noZXxxKfODUBzU0WgGvro9BVlE5fJys8OFTIQafHZxIDH/uitvDrjii+zR7gLe3tzecnJwwatQozJ8/Hz/++CMuX76M8+fPY9q0afqskVrgdHI+vo9OBQAsf6Jnu5tJ2kwmxb+eCMZLI6pbhP69NwH/t+tao+Zh+mhfAk4k5jdpAVwiU/Xwvdm8D8bnoryyde9mJjJ2zf7kTElJQUxMDGJjYxETE4ONGzfqWpuMeeyOqajSaPH6xosY08MVj/Rs3mDpsgoNFm25BKD6LrHBXZ30WaLJkEgkWBAZCEcrBf5v11V8dyIFV28VYV6EPwb6dqhzn71XsvHl4SQAwPImLoBLZIp6drLT3bRxOOF2s8f4EbVFzQ5L3t7e8Pb2RlRUlO656OhoTJs2De+++64+amvXNpxLx86LWdh1KQtVGgFRvTyafIyP9yfgZn4p3GyVWNLI+ZTaslmDfdDByhwLN1/CqeQCTFp1Cv07O+LlkV0wpKuTrost+fZdvLGxelLSmYN89L6eHZExkkgkeDjYDauPpeC/cbcYloj+pMXzLP1ZWFgYPvnkE3z44Yf6PGy7NKmfF57q2wlaAXhtYyw2nWvaGnQX0u7g2+MpAID3Hw9iF9I9Ub08cGD+MDw70AvmMinO3CzA1O/OIOrLkzhwLQcl6irM+ek8itVV6N/ZEUse1v8YLyJj9VBwdVfcgWvsiiP6s2aHpYqKijqf79q1K65cudLsgqiaTCrBvx7viWcGeEEQgAWbL+Hn0427m0tdpcHCzZegFYDHe3lgZKDrg3dqRzwdLfFeVDCOLhyBGYM6Q2EmxcX0Qsz6/hzC/3UQ13PuwsVGgc+f6QW5TK9/TxAZtdBO9nCzVeKuugonk/LELofIaDT7k8Da2hqhoaGYMWMGPvnkExw9ehSJiYn47LPPEBERoc8a2y2pVIL3ooIwPbwzAODNbZfx/cmbDe5zp6QCS3dcQWLuXThZK/DOo90NX6iJcrNTYumjPXB80Ui8MMwXluYyFJVVwkwqwRfP9IaLjVLsEolalVQqwZge1X9c7Y3jwrpENZq9Ntzx48dx8eJFXLx4EbGxsYiLi0N5eTkAYOzYsejbty+Cg4MRHByMwMC225XRGpNSCoKAZf+Nx6qjyQBQ5yKxV7NU+P7kTWyPzYS6SgsAWPlsb4y9d4cLPdidkgpsuZCBrq42GObvLHY5RKI4kZiHZ745jQ5W5jjzVgRkzZjpn8gUiLKQrlarRUJCAmJjYxEbG6sLUrm5ua2+qG5raq0ZvAVBwEf7ruPzQ9Xrky2IDMDzQ32x70oOvj95E2duFui27dHRFnOG+Ym25AgRma5KjRZ93/sdRWWV2PD8QAyo545RIlNnsLCUlpYGL6/Gz9CckZEBuVwOV9e2O2amtZc7+fTADXy8/zoAwNHKHAUl1WPHzKQSjA1yw/Twzujj7cDJE4mo2V7fGIutFzIxc5APu/KpzTLYcif9+vXDCy+8gLNnz9a7TVFREVavXo2goCBs3bq1TQclMbw6qisWjq1eYqagpAJO1uZ4dWQXHF80Ep8/3Rt9OzsyKBFRi0T2qJ42YO+V7EbPeE/UljVpnqWrV6/in//8J0aPHg2lUok+ffqgY8eOUCqVuHPnDq5evYorV66gd+/e+OCDD/Dwww8bqu527a/Du8DfxQZllRqM6eEKhZlM7JKIqA0Z2tUZSrkUmYVluJKlQpCHndglEYmqWWOWysrKsHv3bhw/fhypqakoKyuDk5MTevXqhcjISAQFBRmiVqPU2t1wRESt4YUfz2HvlRy8OqorXh/tL3Y5RHonygDv9ophiYjaoi3nMzB/00UEutngt3lDxS6HSO8MNmaJiIjah1HdXCCTShCfXYzU/BKxyyESFcMSERHdx97SHAN9HQFUD/Qmas8YloiIqE5/3BXH2bypfWNYIiKiOo3pXh2WLqTdQW5xucjVEImHYYmIiOrkZqdEiKc9BAHYf5WtS9R+tSgsHTt2DM8++yzCwsKQmZkJAPjxxx9x/PhxvRRHRETiiqxZWJddcdSONTssbdmyBZGRkbCwsEBMTAzUajWA6hm833//fb0VSERE4qnpiotOyoOqvFLkaojE0eyw9N5772HlypVYvXo15HK57vlBgwbhwoULeimOiIjE1cXFGn7OVqjUCDgUnyt2OUSiaHZYSkhIwNCh909UZmdnh8LCwpbURERERqTmrrh97IqjdqrZYcnNzQ2JiYn3PX/8+HH4+vq2qCgiIjIeNWHpcEIuyis1IldD1PqaHZaee+45zJ07F6dPn4ZEIkFWVhbWrVuHN954Ay+++KI+ayQiIhH17GQHdzslSio0OJGYJ3Y5RK3OrLk7Ll68GFqtFqNGjUJpaSmGDh0KhUKBN954A6+88oo+ayQiIhFJJBKM6e6K76NTsfdKNkZ1cxW7JKJW1eKFdCsqKpCYmIi7d++ie/fusLa21ldtJoEL6RJRe3AyMQ9Pf3MajlbmOPPmKJjJOE0fmbamfH43u2Wphrm5Obp3797SwxARkRHr5+MIOws5CkoqcCalAOFdnMQuiajVNDssvf7663U+L5FIoFQq0aVLF4wfPx6Ojo7NLo6IiIyDXCbFw8Hu+OVMGn45m86wRO1Ks7vhRowYgQsXLkCj0SAgIAAAcP36dchkMgQGBiIhIQESiQTHjx9v0y1P7IYjovYiLrMIj3x2HHKZBCcXj4KzjULskoiarSmf383udB4/fjwiIiKQlZWF8+fP4/z588jIyMDo0aMxefJkZGZmYujQoXjttdeaewoiIjIiQR52CPW0R6VGwMZz6WKXQ9Rqmt2y5OHhgf3799/XanTlyhWMGTMGmZmZuHDhAsaMGYO8vLZ7qylbloioPdl8PgNvbLoID3sLHF04AjKpROySiJqlVVqWioqKkJt7/9T3t2/fhkqlAgDY29ujoqKiuacgIiIj80hPd9hZyJFZWIbDCVz+hNqHFnXDzZw5E9u2bUNGRgYyMjKwbds2zJo1C1FRUQCAM2fOwN/fX1+1EhGRyJRyGZ7s0wkA8NOpVJGrIWodzQ5LX3/9NUaNGoVJkybB29sb3t7emDRpEkaNGoWvvvoKABAYGIhvvvlGb8USEZH4nhnoDQA4fP020gtKRa6GyPBaPCnl3bt3kZycDADw9fXlpJRERO3As9+cxvHEPLw43A+LxgaKXQ5Rk7XqpJRpaWnIyspCRUUFbt68qXv+sccea+mhiYjISD070AvHE/Ow8Ww65kV0hcJMJnZJRAbT7LCUnJyMv/zlL7h8+TIkEglqGqgkkuo7IzQarkxNRNRWRXRzhautAjkqNX6Ly8b4UA+xSyIymGaPWZo7dy58fHyQm5sLS0tLxMXF4ejRo+jbty8OHz6sxxKJiMjYmMmkmNTPCwCw7lSayNUQGVazw1J0dDTeffddODk5QSqVQiaTYfDgwVi2bBleffVVfdZIRERGaHJ/L8ikEpy5WYCE7GKxyyEymGaHJY1GAxsbGwCAk5MTsrKyAADe3t5ISEjQT3VERGS03OyUGN3NFQCnEaC2rdlhKSgoCBcvXgQADBgwAB988AFOnDiBd999F76+vnorkIiIjNez96YR2BaTiRJ1lcjVEBlGs8PS3/72N2i1WgDAu+++i5SUFAwZMgR79uzBp59+qrcCiYjIeIX7dYCPkxXuqquwPTZT7HKIDKLF8yz9WUFBARwcHHR3xLUHnGeJiNq7b44l473d19DN3RZ7Xh3crj4DyHS1ytpwaWlp+N+c5ejoCIlEgrQ03hlBRNReTOjTCQozKa7dUuFCWqHY5RDpXbPDko+PD27fvn3f8/n5+fDx8WlRUUREZDrsLc0xLtgdALDrUpbI1RDpX7PDkiAIdTa13r17F0qlskVFERGRaRndvfquuKPX7/8jmsjUNXkG79dffx1A9Uzdb7/9NiwtLXWvaTQanD59GqGhoXorkIiIjF94FyfIpBIk3S5Bxp1SdHKwfPBORCaiyWEpJiYGQHXL0uXLl2Fubq57zdzcHCEhIXjjjTf0VyERERk9Ows5Qj3tcT71Do5ez8PTA7zELolIb5oclg4dOgQAmDFjBj755BPeAUZERACAoV2d74Wl2wxL1KY0e8zSmjVrGJSIiEhnWIAzAOBEYh4qNVqRqyHSnya1LNWMV2qMjz/+uMnFEBGR6Qr2sIO9pRyFpZWITS9Ev86OYpdEpBdNCks145UehBOSERG1PzKpBIO7OGHXpVs4ev02wxK1GU0KSzXjlYiIiOoy1N9ZF5bmjwkQuxwivWjyAO8/KywsxLfffotr164BAHr06IGZM2fCzs5OL8UREZFpGeZfPW7pUmYRCkoq4Ghl/oA9iIxfswd4nzt3Dn5+flixYgUKCgpQUFCAjz/+GH5+frhw4YI+a6zTY489Bi8vLyiVSri7u2PKlCnIyqo9c6wgCPjwww/h7+8PhUIBDw8P/POf/6y1zeHDh9G7d28oFAp06dIFa9euNXjtRERtlautEoFuNhAE4NgNTlBJbUOzw9Jrr72Gxx57DDdv3sTWrVuxdetWpKSk4JFHHsG8efP0WGLdRowYgY0bNyIhIQFbtmxBUlISJkyYUGubuXPn4ptvvsGHH36I+Ph47Ny5E/3799e9npKSgnHjxmHEiBGIjY3FvHnzMHv2bOzdu9fg9RMRtVVD77UuHb2eJ3IlRPohEf53NdxGsrCwQExMDAIDA2s9f/XqVfTt2xelpaV6KbCxdu7ciaioKKjVasjlcly7dg09e/ZEXFwcAgLq7jdftGgRdu/ejbi4ON1zkyZNQmFhIX777bc691Gr1VCr1bqvVSoVPD09G7VqMRFRe3D8Rh6e/fY0XGwUOP3mKN70Q0ZJpVLBzs6uUZ/fzW5ZsrW1RVpa2n3Pp6enw8bGprmHbZaCggKsW7cO4eHhkMvlAIBff/0Vvr6+2LVrF3x8fNC5c2fMnj0bBQUFuv2io6MRERFR61iRkZGIjo6u91zLli2DnZ2d7uHp6WmYiyIiMlF9OzvAQi5DbrEa8dnFYpdD1GLNDksTJ07ErFmzsGHDBqSnpyM9PR3r16/H7NmzMXnyZH3WWK9FixbBysoKHTp0QFpaGnbs2KF7LTk5Gampqdi0aRN++OEHrF27FufPn6/VVZednQ1XV9dax3R1dYVKpUJZWVmd51yyZAmKiop0j/T0dMNcHBGRiVLKZRjoWz1twBEurEttQLPD0ocffojHH38cU6dORefOndG5c2dMnz4dEyZMwPLly5t1zMWLF0MikTT4iI+P122/YMECxMTEYN++fZDJZJg6dSpqehW1Wi3UajV++OEHDBkyBMOHD8e3336LQ4cOISEhobmXDYVCAVtb21oPIiKq7Y9xSwxLZPqaPHVAXFwcgoKCYG5ujk8++QTLli1DUlISAMDPzw+Wls1faXr+/PmYPn16g9v4+vrq/u3k5AQnJyf4+/ujW7du8PT0xKlTpxAWFgZ3d3eYmZnB399ft323bt0AAGlpaQgICICbmxtycnJqHT8nJwe2trawsLBo9nUQEbV3NWHp3M07KK2ogqV5i2aqIRJVk//v7dmzJ/r164fZs2dj0qRJsLGxQXBwsF6KcXZ2hrOzc7P21Wqr1yGqGXw9aNAgVFVVISkpCX5+fgCA69evAwC8vb0BAGFhYdizZ0+t4+zfvx9hYWHNqoGIiKr5Olmhk4MFMu6U4VRyPkYGuj54JyIj1eRuuCNHjqBHjx6YP38+3N3dMW3aNBw7dswQtdXr9OnT+PzzzxEbG4vU1FQcPHgQkydPhp+fny7oREREoHfv3pg5cyZiYmJw/vx5vPDCCxg9erSutWnOnDlITk7GwoULER8fjy+//BIbN27Ea6+91qrXQ0TU1kgkEl3r0pEEdsWRaWtyWBoyZAi+++473Lp1C5999hlu3ryJYcOGwd/fH8uXL0d2drYh6qzF0tISW7duxahRoxAQEIBZs2ahZ8+eOHLkCBQKBQBAKpXi119/hZOTE4YOHYpx48ahW7duWL9+ve44Pj4+2L17N/bv34+QkBB89NFH+OabbxAZGWnwayAiauuGdr03bukG51si09bseZb+LDExEWvWrMGPP/6I7OxsjB07Fjt37tRHfUavKfM0EBG1J6rySvR6dz80WgHHFo6Ap2Pzx7QS6VurzLP0Z126dMGbb76Jv/3tb7CxscHu3bv1cVgiIjJhtko5+ng5AOAUAmTaWhyWjh49iunTp8PNzQ0LFizA448/jhMnTuijNiIiMnFD/Z0AMCyRaWtWWMrKysL7778Pf39/DB8+HImJifj000+RlZWF1atXY+DAgfquk4iITFDNIO/opHxUarQiV0PUPE2eOuChhx7C77//DicnJ0ydOhUzZ86sd+01IiJq34I62sHRyhwFJRW4kHoHA3w7iF0SUZM1OSzJ5XJs3rwZjzzyCGQymSFqIiKiNkIqlWBIVyfsiM3C0Ru3GZbIJDU5LLWXu9yIiEg/wnw7YEdsFmLSCsUuhahZ9HI3HBERUX16dLQDAFzJUkEPs9UQtTqGJSIiMih/N2uYSSUoKqtEVlG52OUQNRnDEhERGZTCTIYuLtYAgCuZRSJXQ9R0DEtERGRwf+6KIzI1DEtERGRwPTpWLyfBsESmiGGJiIgMriYsXc1iNxyZHoYlIiIyuO73wlJWUTnulFSIXA1R0zAsERGRwdko5fDuYAmAXXFkehiWiIioVXR3rxm3xK44Mi0MS0RE1Co4yJtMFcMSERG1ij+mD2DLEpkWhiUiImoVNS1LyXklKK2oErkaosZjWCIiolbhYquEk7UCggDEZxeLXQ5RozEsERFRq+G4JTJFDEtERNRqODklmSKGJSIiajVcI45MEcMSERG1mpqWpfjsYlRqtCJXQ9Q4DEtERNRqvBwtYa0wQ0WVFkm374pdDlGjMCwREVGrkUol6OZuAwC4ksmuODINDEtERNSqOG6JTA3DEhERtaruNXfE3eIdcWQaGJaIiKhV/TF9gAqCIIhcDdGDMSwREVGr6upiA7lMAlV5FTLulIldDtEDMSwREVGrMjeTwt/13iBvTk5JJoBhiYiIWh2XPSFTwrBEREStrrs7wxKZDoYlIiJqdT08aqYPYDccGT+GJSIianXd3G0hkQA5KjXy7qrFLoeoQQxLRETU6qwVZujcwQoAu+LI+DEsERGRKLrrBnmzK46MG8MSERGJ4s+TUxIZM4YlIiISRc0acQxLZOwYloiISBQ10wek5JegRF0lcjVE9WNYIiIiUTjbKOBio4AgANdusXWJjBfDEhERiYYzeZMpYFgiIiLR1Ixb4h1xZMwYloiISDRB92byPn4jDxVVWpGrIaobwxIREYlmeIAznKwVyCoqx/bYTLHLIaoTwxIREYlGKZfh+aE+AIAvDyVCoxVErojofgxLREQkqmcGeMPeUo6b+aXYdSlL7HKI7sOwREREorJSmGHWoJrWpSRo2bpERoZhiYiIRDc1vDNsFGZIyCnG/ms5YpdDVAvDEhERic7OQo6p4d4AgM8PJkIQ2LpExoNhiYiIjMLMQT6wkMtwObMIR2/kiV0OkQ7DEhERGYUO1go8PcALAPD5wRsiV0P0B4YlIiIyGs8P9YW5TIqzN+/gdHK+2OUQAWBYIiIiI+Jqq8RT/ToBAD4/lChyNUTVGJaIiMiovDDUDzKpBMdu5CE2vVDscogYloiIyLh4OlriL708AFTfGUckNoYlIiIyOn8d7geJBPj9Wg6uZqnELofaOZMNS4899hi8vLygVCrh7u6OKVOmICur9jT5e/fuxcCBA2FjYwNnZ2c88cQTuHnzZq1tDh8+jN69e0OhUKBLly5Yu3Zt610EERHVydfZGuOC3QEAX3DsEonMZMPSiBEjsHHjRiQkJGDLli1ISkrChAkTdK+npKRg/PjxGDlyJGJjY7F3717k5eXh8ccfr7XNuHHjMGLECMTGxmLevHmYPXs29u7dK8YlERHRn7w8sgsAYPflWzh247bI1VB7JhHayDSpO3fuRFRUFNRqNeRyOTZv3ozJkydDrVZDKq3OhL/++ivGjx+v22bRokXYvXs34uLidMeZNGkSCgsL8dtvv9V5HrVaDbVarftapVLB09MTRUVFsLW1NexFEhG1M0t3xOH76FR42Ftg32tDYaUwE7skaiNUKhXs7Owa9fltsi1Lf1ZQUIB169YhPDwccrkcANCnTx9IpVKsWbMGGo0GRUVF+PHHHxEREaHbJjo6GhEREbWOFRkZiejo6HrPtWzZMtjZ2ekenp6ehrswIqJ2buHYQHjYWyCzsAwf/BYvdjnUTpl0WFq0aBGsrKzQoUMHpKWlYceOHbrXfHx8sG/fPrz55ptQKBSwt7dHRkYGNm7cqNsmOzsbrq6utY7p6uoKlUqFsrKyOs+5ZMkSFBUV6R7p6emGuTgiIoKVwgzLn+gJAPg+OpUTVZIojCosLV68GBKJpMFHfPwff1ksWLAAMTEx2LdvH2QyGaZOnapbfDE7OxvPPfccpk2bhrNnz+LIkSMwNzfHhAkTWrRAo0KhgK2tba0HEREZzuCuTpjcv7oVf9GWSyir0IhcEbU3RtX5O3/+fEyfPr3BbXx9fXX/dnJygpOTE/z9/dGtWzd4enri1KlTCAsLwxdffAE7Ozt88MEHuu1/+ukneHp64vTp0xg4cCDc3NyQk5NT6/g5OTmwtbWFhYWFXq+NiIiab8nD3XAo/jZu5pfi4/0JeGtcd7FLonbEqMKSs7MznJ2dm7WvVqsFAN3g69LSUt3A7hoymazWtmFhYdizZ0+tbfbv34+wsLBm1UBERIZhq5Tj/ceDMHPtOXx7PAUPBbujt5eD2GVRO2FU3XCNdfr0aXz++eeIjY1FamoqDh48iMmTJ8PPz08XdMaNG4ezZ8/i3XffxY0bN3DhwgXMmDED3t7e6NWrFwBgzpw5SE5OxsKFCxEfH48vv/wSGzduxGuvvSbm5RERUR1GBrri8V4e0ArAws2XUF7J7jhqHSYZliwtLbF161aMGjUKAQEBmDVrFnr27IkjR45AoVAAAEaOHImff/4Z27dvR69evTB27FgoFAr89ttvui42Hx8f7N69G/v370dISAg++ugjfPPNN4iMjBTz8oiIqB7vPNodTtYKJObexWcHb4hdDrUTbWaeJbE0ZZ4GIiJqud/ibmHOTxcgk0qw46VBCPKwE7skMkHtbp4lIiJqP8YGuWNcsDs0WgELNl+CRsu/+cmwGJaIiMjk/GN8D9gozHDtlgqx6XfELofaOIYlIiIyOU7WCgwLqL57+mB8rsjVkKEkZBfjlV9i8M2xZFHrYFgiIiKTNDLQBQBwMJ6L7LY1cZlFeOHHc4j8z1H8ejELXx9NRkWVVrR6jGqeJSIiosYa5u8MiQS4dkuFW0VlcLfjZMKm7kLaHXx24AYOJVQHYIkEeCjIDS+N6AJzM/HadxiWiIjIJHWwViDU0x4xaYU4FH8bTw/wErskaqbTyfn49OANnEisXvtPKgEeDemIl0d0QVdXG5GrY1giIiITNjLABTFphTgYn8OwZKI2nE3Doi2XAQBmUgn+0ssDfx3RBT5OViJX9geGJSIiMlkjAl3w0f7rOJGYj/JKDZRymdglURPcLlbjvd3XAAB/6eWB10f7w9PRUuSq7scB3kREZLJ6dLSFq60CZZUanErOF7scaqJl/72G4vIqBHnY4sMnQ4wyKAEMS0REZMIkEonurrhDnELApJxKzsfWC5mQSID3ooIhk0rELqleDEtERGTSRgTcm0IgIRdcwcs0VGq0eGdHHABgcn8vhHrai1vQAzAsERGRSRvUxQnmMinSC8qQdPuu2OVQI6w5kYLrOXfhaGWOhZEBYpfzQAxLRERk0qwUZhjg6wiAs3mbgqzCMvzn9xsAgCUPBcLe0lzkih6MYYmIiEzeH7N5MywZu//bdRWlFRr09XbAE707iV1OozAsERGRyasJS+du3oGqvFLkaqg+hxNy8d+4bMikEvxfVBCkRjyo+884zxIREZk87w5W8HW2QvLtEhy7nodxPd3FLqlNqqjSIjW/BKrySqjKq6Aqq0RxeVX112VVMJNKMKSrE/p4O8BMVrs9prxSg6U7rwAAZoR3Rjd3WzEuoVkYloiIqE0YGeCC5NspOBify7BkAFqtgMe/OoG4TFWD231+KBH2lnKMDHBBRHdXDPV3hrXCDCuPJCE1vxSutgrMG+3fSlXrB8MSERG1CSMDXfDN8RQcTsiFViuYTBePqThy/TbiMlUwk0rQ0d4CNkoz2Crl1f+1qP7vnZIKHL5+G4Wlldgak4mtMZkwl0kxwNcRp1MKAABvP9Id1grTih+mVS0REVE9+nZ2hLXCDPklFbiYUYheXg5il9SmfHciBQAwY1BnvDWue73bVWm0OJ96Bwfic7H/ag5S8kpw7EYeAGBIVyeMCza9Vj+GJSIiahPMzaQY0tUJ/43LxqH4XIYlPUrMLcaxG3mQSoCpYZ0b3NZMJsUA3w4Y4NsBbz7cDUm37+L3qzlIun0Xr432h0Riei1+DEtERNRmjAx0wX/jsnEwIRevjzH+yQ5NxdqTNwEAEd1cm7x+m5+zNfyGWRugqtbDqQOIiKjNGH5v6ZO4TBVyVeUiV9M2FJVWYsv5TADAjEE+IlcjDoYlIiJqM5xtFAjpZAcAOJTACSr1YcO5NJRVahDoZoOB92ZKb28YloiIqE0Zwdm89UajFfD9yVQA1QO7TXG8kT4wLBERUZtSM5v38Rt5UFdpRK7GtO2/moPMwjI4WMoxPtRD7HJEw7BERERtSlBHOzjbKFBSocEbmy6hvJKBqbnWnqyeLmByfy8o5TKRqxEPwxIREbUpUqkE7zzSHWZSCX69mIVnvjmN/LtqvRw7Lb+03YSva7dUOJVcAJlUgilh3mKXIyqGJSIianMeDemIH2b2h63SDOdT7yDqyxNIzC1u0TE3n8/A0H8fwsLNl/RUpXFbc28SyoeC3OBuZyFyNeJiWCIiojYpvIsTtv51ELwcLZFeUIa/fHkSJxLzmnWslLwSvLMjDgCw61IWsova9rQEBSUV2B6bBaB6YHd7x7BERERtVhcXa2x/aRD6ejuguLwK0747g/Vn0pp0jEqNFvPWx6C0orr7TSsAG86mG6Jco/HLmTRUVGnRs5MdenMmdIYlIiJq2xytzPHT7AEYH9oRVVoBi7dexrI916DVCo3af8X+67iYUQQ7CzkWjq2eFXzD2TRoGrm/MbqcUYRrt1R1fg8qNVr8GF09XcD08PY7XcCfcbkTIiJq85RyGf4zMRQ+Tlb4z+838PXRZNzML8F/JvaChXn9d3mdSs7HV0eSAADLHg/GyEAXrDqajKyichy5nouRga6tdQl6s/dKNl748TwAwM5Cjn6dHTHAxxEDfB3R3d0Wv8VlI1tVDidrBcb1NL1Fbw2BYYmIiNoFiUSCeRH+6NzBCgs3X8LeKzmYuCoa30ztCxdb5X3bF5VW4rUNsRAE4Km+nfBwcHVweKJ3J3x7PAU/n043ubBUWFqBv22vHnslk0pQVFaJ36/l4PdrOQAAK3MZzM2qO52eHegFhVn7nS7gz9gNR0RE7UpULw+se24AHCzluJRRhKgvTuBqlqrWNoIg4M1tl3GrqBw+TlZY+mgP3WuT+3sBAA7G5+BWUVmr1t5S/7frGm4Xq+HnbIVLS8dg+0uDsOShQIwKdIGN0gwlFRrcKa2EuUyKpwd4iV2u0ZAIgmC6na5GQKVSwc7ODkVFRbC1tRW7HCIiaqTU/BLMWHsWybdLYGUuw+dP99YtlbLxXDoWbr4EM6kEW14MR4infa19n/o6GmdSCvBahD/mRnQVoXqgtKIKp5LzEe7n1KgJIw8l5GLGmrOQSIDNc8LRx7v2wG2NVkB8tgrnU++gq4sNwvw6GKp0o9CUz2+2LBERUbvk3cEK214chDDfDiip0GDW92fx/cmbuJlXgr/vvAIAeG20/31BCQCeudfqItZA7+LySkxefRoz157Ds9+cRnF5ZYPbq8or8ebWywCAmYN87gtKQHW3XI+Odpga1rnNB6WmYlgiIqJ2y85Sju9n9sfEvp7QCsDSnVfw+FcnUVqhwQAfR8wZ5lfnfpE93OBgKdcN9G5NpRVVmLn2LC6mFwIAzqXewZRvz6CorP7AtGxPPG4VlcO7gyXeGBPQSpW2HQxLRETUrpmbSfGvJ4Kx+KFAANUTMtpZyLFiYihk0rpvm1fKZXiidycAwM+nmzZvU0uUV2ow+/tzOHvzDmyUZvjwyRDYW8oRm16IZ745hcLSivv2OZGYh1/uzS21/ImeDd79R3VjWCIionZPIpFgzjA/rHy2N/p1dsBnk3uho33DS3xM0g30zm2Vgd7qKg3m/HQeJ5PyYWUuw/cz+2NCn0745bmB6GBljrhMFSatOlVrHbwSdRUWb61enmXKQG8M9GX3WnMwLBEREd0zNsgdm+aEY6i/8wO37eJijQE+jq0yo3elRotXfo7B4YTbUMql+G56P93M2t3cbbH++YFwtlEgPrsYk1adQm5x9XIs/96bgPSCMnjYW2DRvZYzajqGJSIiomZ6WjfQO91gA701WgGvbYjFvqs5MDeT4pup/TDgf1qIurraYMPzA+Fmq8SN3LuY9PUp/HoxC2tP3gRQPaGmtYJTKzYXwxIREVEz1Qz0vlVUjsMJ+h/ordUKWLD5InZdugW5TIKvn+2DwV2d6tzW19kaG14YCA97CyTnleCVX2IAABP7ejaqpYzqx7BERETUTH8e6P1LExfobYyP9idg64VMyKQSfDb5j3mg6uPdwQobXhgIL0dLAICrrQJvjuum97raG4YlIiKiFpg84I+B3lmF+hvonXdXjW+OpQAAPniiJ8YGuTVqv04Oltj4QhheGOqL76b3g52FXG81tVcMS0RERC3g52yNgb7VA703ntPfQO/vT96EukqLkE52eLy3R5P2dbNTYsnD3dCjo53e6mnPGJaIiIhaqGa9uF/OpEFdpWnx8e6qq/D9vcHZLw73g0RS93xP1DoYloiIiFpobJAbXG0VyFGpsSMmq8XH+/l0KlTlVfB1tsKY7o3rfiPDYVgiIiJqIYWZDLMH+wIAVh5NatE0AuoqjW6s0pxhfpDWM4s4tR6GJSIiIj2YPMALdhZyJN8uwf6r2c0+zrYLmcgtVsPNVomo0KaNVSLDYFgiIiLSA2uFGaaFeQMAvjqcBEFoeuuSRivg66PJAIDZQ3xgbsaPaWPAd4GIiEhPpoV3hlIuxcWMIpxMym/y/nuvZCMlrwR2FnLdoHESH8MSERGRnnSwVmBSv+qQ89XhpCbtKwiCbp9p4Z1hxeVJjAbDEhERkR7NHuIDmVSC44l5uJRR2Oj9jifm4XJmESzkMkwP72yw+qjpGJaIiIj0qJODJcaHdAQArDzS+NalmlalSf094WhlbpDaqHkYloiIiPTshWF+AID/xmUj+fbdB24fm16Ik0n5MJNKMHuIr6HLoyZiWCIiItKzADcbRHRzgSAAq+7d3daQlfdalcaHesDD3sLQ5VETmXxYUqvVCA0NhUQiQWxsbK3XLl26hCFDhkCpVMLT0xMffPDBfftv2rQJgYGBUCqVCA4Oxp49e1qpciIiasteHF7durTlQgayi8rr3S4x9y723puXac4wtioZI5MPSwsXLkTHjh3ve16lUmHMmDHw9vbG+fPn8e9//xt///vfsWrVKt02J0+exOTJkzFr1izExMQgKioKUVFRiIuLa81LICKiNqiPtyP6d3ZEpUbAdydS7ntdEARczijC33degSAAo7u7oqurjQiV0oNIhObMmmUk/vvf/+L111/Hli1b0KNHD8TExCA0NBQA8NVXX+Gtt95CdnY2zM2rB8otXrwY27dvR3x8PABg4sSJKCkpwa5du3THHDhwIEJDQ7Fy5co6z6lWq6FWq3Vfq1QqeHp6oqioCLa2tga6UiIiMkWHEnIxY81ZWJnLcHLxKNhZypFVWIbtsZnYdiETN3KrxzNJJcCWF8PRy8tB5IrbD5VKBTs7u0Z9fpvsJA45OTl47rnnsH37dlhaWt73enR0NIYOHaoLSgAQGRmJ5cuX486dO3BwcEB0dDRef/31WvtFRkZi+/bt9Z532bJl+Mc//qG36yAiorZruL8zAt1sEJ9djCXbLqGwtBLRyfmoaaZQmEkxursrpgz0ZlAyYibZDScIAqZPn445c+agb9++dW6TnZ0NV1fXWs/VfJ2dnd3gNjWv12XJkiUoKirSPdLT01tyKURE1IZJJBLd2KU9l7NxMqk6KA3wccTyJ4Jx9m8R+Pzp3hjg20HkSqkhRtWytHjxYixfvrzBba5du4Z9+/ahuLgYS5YsaaXK/qBQKKBQKFr9vEREZJrGBbtjW0wmsgrL8GjPjojq5QFPx/t7RMh4GVVYmj9/PqZPn97gNr6+vjh48CCio6PvCy19+/bFM888g++//x5ubm7Iycmp9XrN125ubrr/1rVNzetEREQtZSaTYu2M/mKXQS1gVGHJ2dkZzs7OD9zu008/xXvvvaf7OisrC5GRkdiwYQMGDBgAAAgLC8Nbb72FyspKyOVyAMD+/fsREBAABwcH3TYHDhzAvHnzdMfav38/wsLC9HhVREREZMqMKiw1lpdX7ZWYra2tAQB+fn7o1KkTAODpp5/GP/7xD8yaNQuLFi1CXFwcPvnkE6xYsUK339y5czFs2DB89NFHGDduHNavX49z587Vml6AiIiI2jeTHODdGHZ2dti3bx9SUlLQp08fzJ8/H++88w6ef/553Tbh4eH4+eefsWrVKoSEhGDz5s3Yvn07goKCRKyciIiIjIlJz7NkDJoyTwMREREZh6Z8frfZliUiIiIifWBYIiIiImoAwxIRERFRAxiWiIiIiBrAsERERETUAIYlIiIiogYwLBERERE1gGGJiIiIqAEMS0REREQNYFgiIiIiaoBJLqRrTGpWi1GpVCJXQkRERI1V87ndmFXfGJZaqLi4GADg6ekpciVERETUVMXFxbCzs2twGy6k20JarRZZWVmwsbGBRCLR67FVKhU8PT2Rnp7ORXqNHN8r08L3y3TwvTIdpvZeCYKA4uJidOzYEVJpw6OS2LLUQlKpFJ06dTLoOWxtbU3ifzzie2Vq+H6ZDr5XpsOU3qsHtSjV4ABvIiIiogYwLBERERE1gGHJiCkUCixduhQKhULsUugB+F6ZFr5fpoPvleloy+8VB3gTERERNYAtS0REREQNYFgiIiIiagDDEhEREVEDGJaIiIiIGsCwJLIvvvgCnTt3hlKpxIABA3DmzJkGt9+0aRMCAwOhVCoRHByMPXv2tFKl1JT3au3atZBIJLUeSqWyFattv44ePYpHH30UHTt2hEQiwfbt2x+4z+HDh9G7d28oFAp06dIFa9euNXid1PT36vDhw/f9XEkkEmRnZ7dOwe3YsmXL0K9fP9jY2MDFxQVRUVFISEh44H5t5TOLYUlEGzZswOuvv46lS5fiwoULCAkJQWRkJHJzc+vc/uTJk5g8eTJmzZqFmJgYREVFISoqCnFxca1cefvT1PcKqJ7F9tatW7pHampqK1bcfpWUlCAkJARffPFFo7ZPSUnBuHHjMGLECMTGxmLevHmYPXs29u7da+BKqanvVY2EhIRaP1suLi4GqpBqHDlyBC+99BJOnTqF/fv3o7KyEmPGjEFJSUm9+7SpzyyBRNO/f3/hpZde0n2t0WiEjh07CsuWLatz+6eeekoYN25crecGDBggvPDCCwatk5r+Xq1Zs0aws7NrpeqoPgCEbdu2NbjNwoULhR49etR6buLEiUJkZKQBK6P/1Zj36tChQwIA4c6dO61SE9UvNzdXACAcOXKk3m3a0mcWW5ZEUlFRgfPnzyMiIkL3nFQqRUREBKKjo+vcJzo6utb2ABAZGVnv9qQfzXmvAODu3bvw9vaGp6cnxo8fjytXrrRGudRE/LkyPaGhoXB3d8fo0aNx4sQJsctpl4qKigAAjo6O9W7Tln62GJZEkpeXB41GA1dX11rPu7q61tv/np2d3aTtST+a814FBATgu+++w44dO/DTTz9Bq9UiPDwcGRkZrVEyNUF9P1cqlQplZWUiVUV1cXd3x8qVK7FlyxZs2bIFnp6eGD58OC5cuCB2ae2KVqvFvHnzMGjQIAQFBdW7XVv6zDITuwCitigsLAxhYWG6r8PDw9GtWzd8/fXX+L//+z8RKyMyXQEBAQgICNB9HR4ejqSkJKxYsQI//vijiJW1Ly+99BLi4uJw/PhxsUtpNWxZEomTkxNkMhlycnJqPZ+TkwM3N7c693Fzc2vS9qQfzXmv/pdcLkevXr2QmJhoiBKpBer7ubK1tYWFhYVIVVFj9e/fnz9Xrejll1/Grl27cOjQIXTq1KnBbdvSZxbDkkjMzc3Rp08fHDhwQPecVqvFgQMHarVI/FlYWFit7QFg//799W5P+tGc9+p/aTQaXL58Ge7u7oYqk5qJP1emLTY2lj9XrUAQBLz88svYtm0bDh48CB8fnwfu06Z+tsQeYd6erV+/XlAoFMLatWuFq1evCs8//7xgb28vZGdnC4IgCFOmTBEWL16s2/7EiROCmZmZ8OGHHwrXrl0Tli5dKsjlcuHy5ctiXUK70dT36h//+Iewd+9eISkpSTh//rwwadIkQalUCleuXBHrEtqN4uJiISYmRoiJiREACB9//LEQExMjpKamCoIgCIsXLxamTJmi2z45OVmwtLQUFixYIFy7dk344osvBJlMJvz2229iXUK70dT3asWKFcL27duFGzduCJcvXxbmzp0rSKVS4ffffxfrEtqNF198UbCzsxMOHz4s3Lp1S/coLS3VbdOWP7MYlkT22WefCV5eXoK5ubnQv39/4dSpU7rXhg0bJkybNq3W9hs3bhT8/f0Fc3NzoUePHsLu3btbueL2qynv1bx583Tburq6Cg8//LBw4cIFEapuf2puL//fR837M23aNGHYsGH37RMaGiqYm5sLvr6+wpo1a1q97vaoqe/V8uXLBT8/P0GpVAqOjo7C8OHDhYMHD4pTfDtT1/sEoNbPSlv+zJIIgiC0dmsWERERkangmCUiIiKiBjAsERERETWAYYmIiIioAQxLRERERA1gWCIiIiJqAMMSERERUQMYloiIiIgawLBERERE1ACGJSIySdOnT0dUVJRo558yZQref/99gx3/6tWr6NSpE0pKSgx2DiJqHM7gTURGRyKRNPj60qVL8dprr0EQBNjb27dOUX9y8eJFjBw5EqmpqbC2tjbYeSZMmICQkBC8/fbbBjsHET0YwxIRGZ3s7Gzdvzds2IB33nkHCQkJuuesra0NGlIeZPbs2TAzM8PKlSsNep7du3fjueeeQ1paGszMzAx6LiKqH7vhiMjouLm56R52dnaQSCS1nrO2tr6vG2748OF45ZVXMG/ePDg4OMDV1RWrV69GSUkJZsyYARsbG3Tp0gX//e9/a50rLi4ODz30EKytreHq6oopU6YgLy+v3to0Gg02b96MRx99tNbznTt3xnvvvYepU6fC2toa3t7e2LlzJ27fvo3x48fD2toaPXv2xLlz53T7pKam4tFHH4WDgwOsrKzQo0cP7NmzR/f66NGjUVBQgCNHjrTwO0pELcGwRERtxvfffw8nJyecOXMGr7zyCl588UU8+eSTCA8Px4ULFzBmzBhMmTIFpaWlAIDCwkKMHDkSvXr1wrlz5/Dbb78hJycHTz31VL3nuHTpEoqKitC3b9/7XluxYgUGDRqEmJgYjBs3DlOmTMHUqVPx7LPP4sKFC/Dz88PUqVNR06D/0ksvQa1W4+jRo7h8+TKWL19eq8XM3NwcoaGhOHbsmJ6/U0TUFAxLRNRmhISE4G9/+xu6du2KJUuWQKlUwsnJCc899xy6du2Kd955B/n5+bh06RIA4PPPP0evXr3w/vvvIzAwEL169cJ3332HQ4cO4fr163WeIzU1FTKZDC4uLve99vDDD+OFF17QnUulUqFfv3548skn4e/vj0WLFuHatWvIyckBAKSlpWHQoEEIDg6Gr68vHnnkEQwdOrTWMTt27IjU1FQ9f6eIqCkYloiozejZs6fu3zKZDB06dEBwcLDuOVdXVwBAbm4ugOqB2ocOHdKNgbK2tkZgYCAAICkpqc5zlJWVQaFQ1DkI/c/nrzlXQ+d/9dVX8d5772HQoEFYunSpLsT9mYWFha4ljIjEwbBERG2GXC6v9bVEIqn1XE3A0Wq1AIC7d+/i0UcfRWxsbK3HjRs37mvhqeHk5ITS0lJUVFQ0eP6aczV0/tmzZyM5ORlTpkzB5cuX0bdvX3z22We1jllQUABnZ+fGfQOIyCAYloio3erduzeuXLmCzp07o0uXLrUeVlZWde4TGhoKoHoeJH3w9PTEnDlzsHXrVsyfPx+rV6+u9XpcXBx69eqll3MRUfMwLBFRu/XSSy+hoKAAkydPxtmzZ5GUlIS9e/dixowZ0Gg0de7j7OyM3r174/jx4y0+/7x587B3716kpKTgwoULOHToELp166Z7/ebNm8jMzERERESLz0VEzcewRETtVseOHXHixAloNBqMGTMGwcHBmDdvHuzt7SGV1v/rcfbs2Vi3bl2Lz6/RaPDSSy+hW7duGDt2LPz9/fHll1/qXv/ll18wZswYeHt7t/hcRNR8nJSSiKiJysrKEBAQgA0bNiAsLMwg56ioqEDXrl3x888/Y9CgQQY5BxE1DluWiIiayMLCAj/88EODk1e2VFpaGt58800GJSIjwJYlIiIiogawZYmIiIioAQxLRERERA1gWCIiIiJqAMMSERERUQMYloiIiIgawLBERERE1ACGJSIiIqIGMCwRERERNYBhiYiIiKgB/w/eV4l7yWioMAAAAABJRU5ErkJggg==", + "image/png": "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", "text/plain": [ "
" ] @@ -2451,7 +2725,7 @@ " unit_data[\"peak_electrode_waveform\"],\n", ")\n", "plt.xlabel(\"Time (ms)\")\n", - "plt.ylabel(r\"Voltage ($\\mu$V)\")" + "plt.ylabel(r\"Voltage ($\\mu$V)\");" ] }, { @@ -2494,11 +2768,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, + "metadata": {}, "outputs": [], "source": [] } @@ -2519,7 +2789,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.9.17" }, "orig_nbformat": 4, "vscode": { From d02d8a585b575ea60b01caae953df4176a40de01 Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Thu, 26 Oct 2023 16:50:53 -0500 Subject: [PATCH 15/27] Add demo notebooks --- notebooks/demo_prepare.ipynb | 225 +++++++++++++++++++++++++++++++++++ notebooks/demo_run.ipynb | 136 +++++++++++++++++++++ 2 files changed, 361 insertions(+) create mode 100644 notebooks/demo_prepare.ipynb create mode 100644 notebooks/demo_run.ipynb diff --git a/notebooks/demo_prepare.ipynb b/notebooks/demo_prepare.ipynb new file mode 100644 index 00000000..3ed4d443 --- /dev/null +++ b/notebooks/demo_prepare.ipynb @@ -0,0 +1,225 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Demo Preparation Notebook\n", + "\n", + "**Please Note**: This notebook and demo are NOT intended to be used as learning materials. To gain\n", + "a thorough understanding of the DataJoint workflow for extracellular electrophysiology, please\n", + "see the [`tutorial`](./tutorial.ipynb) notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Runs in about 45s\n", + "import datajoint as dj\n", + "import datetime\n", + "from tutorial.pipeline import subject, session, probe, ephys\n", + "from element_array_ephys import ephys_report" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "subject.Subject.insert1(\n", + " dict(subject=\"subject5\", subject_birth_date=\"2023-01-01\", sex=\"U\")\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "session_key = dict(subject=\"subject5\", session_datetime=\"2023-01-01 00:00:00\")\n", + "\n", + "session.Session.insert1(session_key)\n", + "\n", + "session.SessionDirectory.insert1(dict(session_key, session_dir=\"raw/subject5/session1\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "probe.Probe.insert1(dict(probe=\"714000838\", probe_type=\"neuropixels 1.0 - 3B\"))\n", + "\n", + "ephys.ProbeInsertion.insert1(\n", + " dict(\n", + " session_key,\n", + " insertion_number=1,\n", + " probe=\"714000838\",\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "populate_settings = {\"display_progress\": True}\n", + "\n", + "ephys.EphysRecording.populate(**populate_settings)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "kilosort_params = {\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", + "\n", + "ephys.ClusteringParamSet.insert_new_params(\n", + " clustering_method=\"kilosort2\",\n", + " paramset_idx=1,\n", + " params=kilosort_params,\n", + " paramset_desc=\"Spike sorting using Kilosort2\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ephys.ClusteringTask.insert1(\n", + " dict(\n", + " session_key,\n", + " insertion_number=1,\n", + " paramset_idx=1,\n", + " task_mode=\"load\", # load or trigger\n", + " clustering_output_dir=\"processed/subject5/session1/probe_1/kilosort2-5_1\",\n", + " )\n", + ")\n", + "\n", + "ephys.Clustering.populate(**populate_settings)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "clustering_key = (ephys.ClusteringTask & session_key).fetch1(\"KEY\")\n", + "ephys.Curation().create1_from_clustering_task(clustering_key)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Runs in about 12m\n", + "ephys.CuratedClustering.populate(**populate_settings)\n", + "ephys.WaveformSet.populate(**populate_settings)\n", + "ephys_report.ProbeLevelReport.populate(**populate_settings)\n", + "ephys_report.UnitLevelReport.populate(**populate_settings)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Drop schemas\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": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def drop_databases(databases):\n", + " import pymysql.err\n", + "\n", + " conn = dj.conn()\n", + "\n", + " with dj.config(safemode=False):\n", + " for database in databases:\n", + " schema = dj.Schema(f'{dj.config[\"custom\"][\"database.prefix\"]}{database}')\n", + " while schema.list_tables():\n", + " for table in schema.list_tables():\n", + " try:\n", + " conn.query(f\"DROP TABLE `{schema.database}`.`{table}`\")\n", + " except pymysql.err.OperationalError:\n", + " print(f\"Can't drop `{schema.database}`.`{table}`. Retrying...\")\n", + " schema.drop()\n", + "\n", + "\n", + "# drop_databases(databases=['analysis', 'trial', 'event', 'ephys_report', 'ephys', 'probe', 'session', 'subject', 'project', 'lab'])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/demo_run.ipynb b/notebooks/demo_run.ipynb new file mode 100644 index 00000000..46292471 --- /dev/null +++ b/notebooks/demo_run.ipynb @@ -0,0 +1,136 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# DataJoint Workflow for Neuropixels Analysis\n", + "\n", + "+ This notebook demonstrates using the open-source DataJoint Element to build a workflow for extracellular electrophysiology.\n", + "+ For a detailed tutorial, please see the [tutorial notebook](./tutorial.ipynb)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import datajoint as dj\n", + "from tutorial.pipeline import subject, session, probe, ephys\n", + "from element_array_ephys.plotting.widget import main" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### View workflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dj.Diagram(subject.Subject) + dj.Diagram(session.Session) + dj.Diagram(probe) + dj.Diagram(ephys)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Insert an entry in a manual table by calling the `insert()` method\n", + "\n", + "```python\n", + "subject.Subject.insert1(\n", + " dict(subject='subject1',\n", + " subject_birth_date='2023-01-01',\n", + " sex='U',\n", + " )\n", + ")\n", + "```" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Automatically process data with the `populate()` method\n", + "\n", + "+ Once data is inserted into manual tables, the `populate()` function automatically runs the ingestion and processing routines. \n", + "\n", + "+ For example, to run Kilosort processing in the `Clustering` table:\n", + "\n", + " ```python\n", + " ephys.Clustering.populate()\n", + " ```" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visualize processed data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "main(ephys)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For an in-depth tutorial please see the [tutorial notebook](./tutorial.ipynb)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3p10", + "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.16" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "ff52d424e56dd643d8b2ec122f40a2e279e94970100b4e6430cb9025a65ba4cf" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 1da15dbd1bc9d759fc2c3cf1dd6e1388f5645fad Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Thu, 26 Oct 2023 16:51:15 -0500 Subject: [PATCH 16/27] Update demo presentation notebook --- notebooks/demo_run.ipynb | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/notebooks/demo_run.ipynb b/notebooks/demo_run.ipynb index 46292471..d500dc61 100644 --- a/notebooks/demo_run.ipynb +++ b/notebooks/demo_run.ipynb @@ -47,39 +47,6 @@ "dj.Diagram(subject.Subject) + dj.Diagram(session.Session) + dj.Diagram(probe) + dj.Diagram(ephys)" ] }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Insert an entry in a manual table by calling the `insert()` method\n", - "\n", - "```python\n", - "subject.Subject.insert1(\n", - " dict(subject='subject1',\n", - " subject_birth_date='2023-01-01',\n", - " sex='U',\n", - " )\n", - ")\n", - "```" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Automatically process data with the `populate()` method\n", - "\n", - "+ Once data is inserted into manual tables, the `populate()` function automatically runs the ingestion and processing routines. \n", - "\n", - "+ For example, to run Kilosort processing in the `Clustering` table:\n", - "\n", - " ```python\n", - " ephys.Clustering.populate()\n", - " ```" - ] - }, { "attachments": {}, "cell_type": "markdown", From 5d57ff2c1d12963391b3318d091a0ac1ca66db6d Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Thu, 26 Oct 2023 16:52:14 -0500 Subject: [PATCH 17/27] Black formatting --- notebooks/demo_run.ipynb | 7 ++++++- notebooks/tutorial.ipynb | 4 +++- notebooks/tutorial_pipeline.py | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/notebooks/demo_run.ipynb b/notebooks/demo_run.ipynb index d500dc61..1e831e0c 100644 --- a/notebooks/demo_run.ipynb +++ b/notebooks/demo_run.ipynb @@ -44,7 +44,12 @@ "metadata": {}, "outputs": [], "source": [ - "dj.Diagram(subject.Subject) + dj.Diagram(session.Session) + dj.Diagram(probe) + dj.Diagram(ephys)" + "(\n", + " dj.Diagram(subject.Subject)\n", + " + dj.Diagram(session.Session)\n", + " + dj.Diagram(probe)\n", + " + dj.Diagram(ephys)\n", + ")" ] }, { diff --git a/notebooks/tutorial.ipynb b/notebooks/tutorial.ipynb index 543ab984..31e95118 100644 --- a/notebooks/tutorial.ipynb +++ b/notebooks/tutorial.ipynb @@ -1216,7 +1216,9 @@ } ], "source": [ - "session.SessionDirectory.insert1(dict(**session_key, session_dir=\"raw/subject5/session1\"))\n", + "session.SessionDirectory.insert1(\n", + " dict(**session_key, session_dir=\"raw/subject5/session1\")\n", + ")\n", "session.SessionDirectory()" ] }, diff --git a/notebooks/tutorial_pipeline.py b/notebooks/tutorial_pipeline.py index 12e13a6b..2163d315 100644 --- a/notebooks/tutorial_pipeline.py +++ b/notebooks/tutorial_pipeline.py @@ -31,6 +31,7 @@ def get_ephys_root_data_dir(): subject.activate(db_prefix + "subject", linking_module=__name__) session.activate(db_prefix + "session", linking_module=__name__) + @lab.schema class SkullReference(dj.Lookup): definition = """ @@ -38,6 +39,7 @@ class SkullReference(dj.Lookup): """ contents = zip(["Bregma", "Lambda"]) + def get_session_directory(session_key): session_directory = (session.SessionDirectory & session_key).fetch1("session_dir") return pathlib.Path(session_directory) From 21fde1351084c6f73751dd47f0024c9b9e6487ad Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Thu, 26 Oct 2023 22:04:42 +0000 Subject: [PATCH 18/27] Complete demo notebooks --- notebooks/demo_prepare.ipynb | 6 +++--- notebooks/demo_run.ipynb | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/notebooks/demo_prepare.ipynb b/notebooks/demo_prepare.ipynb index 3ed4d443..74057ba4 100644 --- a/notebooks/demo_prepare.ipynb +++ b/notebooks/demo_prepare.ipynb @@ -6,7 +6,7 @@ "source": [ "### Demo Preparation Notebook\n", "\n", - "**Please Note**: This notebook and demo are NOT intended to be used as learning materials. To gain\n", + "**Please Note**: This notebook (`demo_prepare.ipynb`) and `demo_run.ipynb` are **NOT** intended to be used as learning materials. To gain\n", "a thorough understanding of the DataJoint workflow for extracellular electrophysiology, please\n", "see the [`tutorial`](./tutorial.ipynb) notebook." ] @@ -20,7 +20,7 @@ "# Runs in about 45s\n", "import datajoint as dj\n", "import datetime\n", - "from tutorial.pipeline import subject, session, probe, ephys\n", + "from tutorial_pipeline import subject, session, probe, ephys\n", "from element_array_ephys import ephys_report" ] }, @@ -211,7 +211,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.9.17" }, "orig_nbformat": 4, "vscode": { diff --git a/notebooks/demo_run.ipynb b/notebooks/demo_run.ipynb index 1e831e0c..348a3c43 100644 --- a/notebooks/demo_run.ipynb +++ b/notebooks/demo_run.ipynb @@ -26,7 +26,7 @@ "outputs": [], "source": [ "import datajoint as dj\n", - "from tutorial.pipeline import subject, session, probe, ephys\n", + "from tutorial_pipeline import subject, session, probe, ephys\n", "from element_array_ephys.plotting.widget import main" ] }, @@ -94,7 +94,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.9.17" }, "orig_nbformat": 4, "vscode": { From 632839825214c6c66baa29cd7136bc0bc46f0f3a Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Mon, 30 Oct 2023 16:10:35 -0500 Subject: [PATCH 19/27] Update diagram_flowchart.drawio --- images/diagram_flowchart.drawio | 79 ++++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/images/diagram_flowchart.drawio b/images/diagram_flowchart.drawio index 410a33b2..f94fb602 100644 --- a/images/diagram_flowchart.drawio +++ b/images/diagram_flowchart.drawio @@ -1 +1,78 @@ -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 \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From bb2f507704b7b15bbe0f887dffee0c98018828e3 Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Mon, 30 Oct 2023 16:14:10 -0500 Subject: [PATCH 20/27] Updated diagram_flowchart.svg --- images/diagram_flowchart.svg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/images/diagram_flowchart.svg b/images/diagram_flowchart.svg index 5840de98..3efdbb7b 100644 --- a/images/diagram_flowchart.svg +++ b/images/diagram_flowchart.svg @@ -1,3 +1,4 @@ + -
Generate quality
control metrics
Generate quality...
Optionally
curate units
Optionally...
Acquire Neuropixels data with OpenEphys
 or SpikeGLX
Acquire Neuropixels...
Enter metadata
into pipeline
Enter metadata...
Process with
Kilosort
Process with...
Visualize



 
Visualize...

 Export & publish

 
 
Export & publish...
Synchronize data modalities
& exploratory
analysis
Synchronize data mo...
Text is not SVG - cannot display
\ No newline at end of file +
Generate quality
control metrics
Generate quality...
Optionally
curate units
Optionally...
Acquire Neuropixels data with OpenEphys
 or SpikeGLX
Acquire Neuropixels...
Enter metadata
into pipeline
Enter metadata...
Process with
Kilosort
Process with...
Visualize



 
Visualize...

 Export & publish

 
 
Export & publish...
Synchronize data modalities
& exploratory
analysis
Synchronize data mo...
Text is not SVG - cannot display
\ No newline at end of file From f9fc3ec002160fb0bfe36c579019637bd6ab285e Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Mon, 30 Oct 2023 16:18:02 -0500 Subject: [PATCH 21/27] Update diagram_flowchart.svg --- images/diagram_flowchart.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/images/diagram_flowchart.svg b/images/diagram_flowchart.svg index 3efdbb7b..edd56e52 100644 --- a/images/diagram_flowchart.svg +++ b/images/diagram_flowchart.svg @@ -1,4 +1,4 @@ -
Generate quality
control metrics
Generate quality...
Optionally
curate units
Optionally...
Acquire Neuropixels data with OpenEphys
 or SpikeGLX
Acquire Neuropixels...
Enter metadata
into pipeline
Enter metadata...
Process with
Kilosort
Process with...
Visualize



 
Visualize...

 Export & publish

 
 
Export & publish...
Synchronize data modalities
& exploratory
analysis
Synchronize data mo...
Text is not SVG - cannot display
\ No newline at end of file +
Generate quality
control metrics
Generate quality...
Optionally
curate units
Optionally...
Acquire Neuropixels data with OpenEphys
 or SpikeGLX
Acquire Neuropixels...
Enter metadata
into pipeline
Enter metadata...
Process with
Kilosort
Process with...
Visualize



 
Visualize...

 Export & publish

 
 
Export & publish...
Synchronize data modalities
& exploratory
analysis
Synchronize data mo...
Text is not SVG - cannot display
\ No newline at end of file From a08736cd58b2c43bdeb6e9d0d35b69ce818174f8 Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Mon, 30 Oct 2023 16:18:23 -0500 Subject: [PATCH 22/27] Update diagram_flowchart.drawio --- images/diagram_flowchart.drawio | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/images/diagram_flowchart.drawio b/images/diagram_flowchart.drawio index f94fb602..b259ce3e 100644 --- a/images/diagram_flowchart.drawio +++ b/images/diagram_flowchart.drawio @@ -1,6 +1,6 @@ - + - + @@ -25,7 +25,7 @@ - + From b9fd4a35f19587ea6527d968bb6b42e5afa880b2 Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Mon, 30 Oct 2023 16:26:32 -0500 Subject: [PATCH 23/27] Update README + minor fixes --- README.md | 62 +++++++++++++++++++++--- element_array_ephys/ephys_chronic.py | 4 +- element_array_ephys/ephys_no_curation.py | 4 +- 3 files changed, 58 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 9324328f..61a42384 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -[![PyPI version](https://badge.fury.io/py/element-array-ephys.svg)](http://badge.fury.io/py/element-array-ephys) - # DataJoint Element for Extracellular Electrophysiology DataJoint Element for extracellular array electrophysiology that processes data @@ -12,7 +10,8 @@ Kilosort](https://github.com/MouseLand/pykilosort) spike sorting software. DataJ Elements collectively standardize and automate data collection and analysis for neuroscience experiments. Each Element is a modular pipeline for data storage and processing with corresponding database tables that can be combined with other Elements -to assemble a fully functional pipeline. +to assemble a fully functional pipeline. This repository also provides a tutorial +environment and notebooks to learn the pipeline. ## Experiment flowchart @@ -22,19 +21,66 @@ to assemble a fully functional pipeline. ![datajoint](https://raw.githubusercontent.com/datajoint/element-array-ephys/main/images/attached_array_ephys_element_acute.svg) ++ We have designed variations of the pipeline to handle different use cases. Displayed + above is the `ephys_acute` schema for acute electrophysiology recordings. Details on + all `ephys` schemas can be found in the documentation. ## Getting Started -+ Install from PyPI ++ Please fork this repository. ++ Clone the repository to your computer. +```bash + git clone https://github.com//element-array-ephys.git +``` + ++ Install with `pip`: ```bash - pip install element-array-ephys + pip install -e . ``` - -+ [Interactive tutorial on GitHub Codespaces](https://github.com/datajoint/workflow-array-ephys#interactive-tutorial) ++ [Interactive tutorial on GitHub + Codespaces](https://github.com/datajoint/element-array-ephys#interactive-tutorial) + [Documentation](https://datajoint.com/docs/elements/element-array-ephys) ## Support -+ If you need help getting started or run into any errors, please contact our team by email at support@datajoint.com. ++ If you need help getting started or run into any errors, please contact our team by + email at support@datajoint.com. + +## Interactive Tutorial + ++ The easiest way to learn about DataJoint Elements is to use the tutorial notebooks within the included interactive environment configured using [Dev Container](https://containers.dev/). + +### Launch Environment + +Here are some options that provide a great experience: + +- (*recommended*) Cloud-based Environment + - Launch using [GitHub Codespaces](https://github.com/features/codespaces) using the `+` option which will `Create codespace on main` in the codebase repository on your fork with default options. For more control, see the `...` where you may create `New with options...`. + - Build time for a codespace is a few minutes. This is done infrequently and cached for convenience. + - Start time for a codespace is less than 1 minute. This will pull the built codespace from cache when you need it. + - *Tip*: Each month, GitHub renews a [free-tier](https://docs.github.com/en/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts) quota of compute and storage. Typically we run into the storage limits before anything else since Codespaces consume storage while stopped. It is best to delete Codespaces when not actively in use and recreate when needed. We'll soon be creating prebuilds to avoid larger build times. Once any portion of your quota is reached, you will need to wait for it to be reset at the end of your cycle or add billing info to your GitHub account to handle overages. + - *Tip*: GitHub auto names the codespace but you can rename the codespace so that it is easier to identify later. + +- Local Environment + > *Note: Access to example data is currently limited to MacOS and Linux due to the s3fs utility. Windows users are recommended to use the above environment.* + - Install [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) + - Install [Docker](https://docs.docker.com/get-docker/) + - Install [VSCode](https://code.visualstudio.com/) + - Install the VSCode [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) + - `git clone` the codebase repository and open it in VSCode + - Use the `Dev Containers extension` to `Reopen in Container` (More info is in the `Getting started` included with the extension.) + +You will know your environment has finished loading once you either see a terminal open related to `Running postStartCommand` with a final message of `Done` or the `README.md` is opened in `Preview`. + +Once the environment has launched, please run the following command in the terminal: +``` +MYSQL_VER=8.0 docker compose -f docker-compose-db.yaml up --build -d +``` + +### Instructions + +1. We recommend you start by navigating to the `notebooks` directory on the left panel and go through the `tutorial.ipynb` Jupyter notebook. Execute the cells in the notebook to begin your walk through of the tutorial. + +1. Once you are done, see the options available to you in the menu in the bottom-left corner. For example, in Codespace you will have an option to `Stop Current Codespace` but when running Dev Container on your own machine the equivalent option is `Reopen folder locally`. By default, GitHub will also automatically stop the Codespace after 30 minutes of inactivity. Once the Codespace is no longer being used, we recommend deleting the Codespace. diff --git a/element_array_ephys/ephys_chronic.py b/element_array_ephys/ephys_chronic.py index 61c325a9..10a492fd 100644 --- a/element_array_ephys/ephys_chronic.py +++ b/element_array_ephys/ephys_chronic.py @@ -9,10 +9,10 @@ import pandas as pd from element_interface.utils import dict_to_uuid, find_full_path, find_root_directory -from . import ephys_report, get_logger, probe +from . import ephys_report, probe from .readers import kilosort, openephys, spikeglx -log = get_logger(__name__) +log = dj.logger schema = dj.schema() diff --git a/element_array_ephys/ephys_no_curation.py b/element_array_ephys/ephys_no_curation.py index bc297044..4d052169 100644 --- a/element_array_ephys/ephys_no_curation.py +++ b/element_array_ephys/ephys_no_curation.py @@ -10,10 +10,10 @@ import pandas as pd from element_interface.utils import dict_to_uuid, find_full_path, find_root_directory -from . import ephys_report, get_logger, probe +from . import ephys_report, probe from .readers import kilosort, openephys, spikeglx -log = get_logger(__name__) +log = dj.logger schema = dj.schema() From a376c90a6f495f84af9611b8e8293272892c3c29 Mon Sep 17 00:00:00 2001 From: Kushal Bakshi <52367253+kushalbakshi@users.noreply.github.com> Date: Mon, 30 Oct 2023 16:34:18 -0500 Subject: [PATCH 24/27] Updated diagram_flowchart.svg --- images/diagram_flowchart.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/images/diagram_flowchart.svg b/images/diagram_flowchart.svg index edd56e52..e8b1df4b 100644 --- a/images/diagram_flowchart.svg +++ b/images/diagram_flowchart.svg @@ -1,4 +1,4 @@ -
Generate quality
control metrics
Generate quality...
Optionally
curate units
Optionally...
Acquire Neuropixels data with OpenEphys
 or SpikeGLX
Acquire Neuropixels...
Enter metadata
into pipeline
Enter metadata...
Process with
Kilosort
Process with...
Visualize



 
Visualize...

 Export & publish

 
 
Export & publish...
Synchronize data modalities
& exploratory
analysis
Synchronize data mo...
Text is not SVG - cannot display
\ No newline at end of file +
Generate quality
control metrics
Generate quality...
Optionally
curate units
Optionally...
Acquire Neuropixels data with OpenEphys
 or SpikeGLX
Acquire Neuropixels...
Enter metadata
into pipeline
Enter metadata...
Process with
Kilosort
Process with...
Visualize



 
Visualize...

 Export & publish

 
 
Export & publish...
Synchronize data modalities
& exploratory
analysis
Synchronize data mo...
Text is not SVG - cannot display
\ No newline at end of file From d1657b2c57c1d8733cb88bce326511679a575fe3 Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Mon, 30 Oct 2023 16:39:44 -0500 Subject: [PATCH 25/27] Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 61a42384..b59fda94 100644 --- a/README.md +++ b/README.md @@ -83,4 +83,4 @@ MYSQL_VER=8.0 docker compose -f docker-compose-db.yaml up --build -d 1. We recommend you start by navigating to the `notebooks` directory on the left panel and go through the `tutorial.ipynb` Jupyter notebook. Execute the cells in the notebook to begin your walk through of the tutorial. -1. Once you are done, see the options available to you in the menu in the bottom-left corner. For example, in Codespace you will have an option to `Stop Current Codespace` but when running Dev Container on your own machine the equivalent option is `Reopen folder locally`. By default, GitHub will also automatically stop the Codespace after 30 minutes of inactivity. Once the Codespace is no longer being used, we recommend deleting the Codespace. +2. Once you are done, see the options available to you in the menu in the bottom-left corner. For example, in Codespace you will have an option to `Stop Current Codespace` but when running Dev Container on your own machine the equivalent option is `Reopen folder locally`. By default, GitHub will also automatically stop the Codespace after 30 minutes of inactivity. Once the Codespace is no longer being used, we recommend deleting the Codespace. From 820b282e29eab4793c56ab99ac29ac897f3bdd33 Mon Sep 17 00:00:00 2001 From: kushalbakshi Date: Fri, 3 Nov 2023 10:53:06 -0500 Subject: [PATCH 26/27] Fix typo in tutorial heading --- notebooks/tutorial.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebooks/tutorial.ipynb b/notebooks/tutorial.ipynb index 31e95118..9ca29593 100644 --- a/notebooks/tutorial.ipynb +++ b/notebooks/tutorial.ipynb @@ -5,7 +5,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# DataJoint Element Tutorial: Array Electrophysiology\n", + "# DataJoint Elements Tutorial: Array Electrophysiology\n", "\n", "Welcome to the tutorial for DataJoint's open-source data pipeline for NeuroPixels Array\n", "Electrophysiology. This tutorial aims to provide a comprehensive understanding of the\n", From 733d2b1ee9702a6d4e391b6ce62e373534ffdd0a Mon Sep 17 00:00:00 2001 From: MilagrosMarin Date: Thu, 9 Nov 2023 09:26:33 -0600 Subject: [PATCH 27/27] review PR tutorial --- notebooks/tutorial.ipynb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/notebooks/tutorial.ipynb b/notebooks/tutorial.ipynb index 9ca29593..5ccc0b4f 100644 --- a/notebooks/tutorial.ipynb +++ b/notebooks/tutorial.ipynb @@ -5,12 +5,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# DataJoint Elements Tutorial: Array Electrophysiology\n", + "# DataJoint Elements for NeuroPixels Array Electrophysiology\n", "\n", - "Welcome to the tutorial for DataJoint's open-source data pipeline for NeuroPixels Array\n", - "Electrophysiology. This tutorial aims to provide a comprehensive understanding of the\n", - "open-source data pipeline created using `element-array-ephys` for processing\n", - "and analyzing extracellular electrophysiology datasets. \n", + "This tutorial aims to provide a comprehensive understanding of the open-source data pipeline created using `element-array-ephys` for processing and analyzing extracellular electrophysiology datasets. \n", "\n", "**In this tutorial, we will cover:**\n", "- The basics:\n",