From c1814e7eac76f69549c1857a057dfb71dd834e0b Mon Sep 17 00:00:00 2001 From: ehennestad Date: Tue, 10 Mar 2026 13:46:34 +0100 Subject: [PATCH 01/59] Update TutorialTest.m --- +tests/+system/+tutorial/TutorialTest.m | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/+tests/+system/+tutorial/TutorialTest.m b/+tests/+system/+tutorial/TutorialTest.m index 8e2ff6cf..5f6302e8 100644 --- a/+tests/+system/+tutorial/TutorialTest.m +++ b/+tests/+system/+tutorial/TutorialTest.m @@ -153,7 +153,11 @@ function inspectTutorialFileWithNwbInspector(testCase) function resultsOut = filterNWBInspectorResults(resultsIn) CHECK_IGNORE = [... "check_image_series_external_file_valid", ... - "check_regular_timestamps" + "check_regular_timestamps", ... + "check_subject_exists", ... + "check_subject_id_exists", ... + "check_subject_sex", ... + "check_subject_age" ]; [resultsIn(:).ignore] = deal(false); for i = 1:numel(resultsIn) From ee7579bfd48ef810920cfb02f72595af832bf946 Mon Sep 17 00:00:00 2001 From: ehennestad Date: Tue, 10 Mar 2026 23:45:02 +0100 Subject: [PATCH 02/59] Support DataPipe in verifyContainerEqual Extend the test helper to treat types.untyped.DataPipe like DataStub by calling load() on actualValue before comparing. --- +tests/+util/verifyContainerEqual.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/+tests/+util/verifyContainerEqual.m b/+tests/+util/verifyContainerEqual.m index 0283ab54..2049ace0 100644 --- a/+tests/+util/verifyContainerEqual.m +++ b/+tests/+util/verifyContainerEqual.m @@ -15,7 +15,7 @@ function verifyContainerEqual(testCase, actual, expected, ignoreList) expectedValue = expected.(prop); failureMessage = ['Values for property ''' prop ''' are not equal']; - if isa(actualValue, 'types.untyped.DataStub') + if isa(actualValue, 'types.untyped.DataStub') || isa(actualValue, 'types.untyped.DataPipe') actualValue = actualValue.load(); end From b2df6b99d6b1183b86ae5e34ba610e560091c968 Mon Sep 17 00:00:00 2001 From: ehennestad Date: Wed, 11 Mar 2026 00:12:23 +0100 Subject: [PATCH 03/59] Rename SKIP_PYNWB var and update CI/tests Replace the old SKIP_PYNWB_COMPATIBILITY_TEST_FOR_TUTORIALS env var with SKIP_PYNWB_TESTS across tests and nwbtest.m, and update +tests/nwbtest.default.env. Update CI workflow matrix keys and usage in prepare_release.yml, run_tests.yml, and configurations/matlab_release_matrix_strategy.yml to use the new key (matrix.skip-pynwb-tests) and wire the MATLAB setenv accordingly. Move conditional installation of pynwb into the workflows (install pynwb only when skip-pynwb-tests == '0') and remove the direct git+ dependency from +tests/requirements.txt (update comment to reflect conditional installs). Also add TestTags = {'UsesPython'} to PyNWBIOTest. These changes centralize the CI control of pynwb installation and standardize the skip variable name. --- +tests/+system/+tutorial/TutorialTest.m | 2 +- +tests/+system/PyNWBIOTest.m | 2 +- +tests/nwbtest.default.env | 2 +- +tests/requirements.txt | 5 ++-- .../matlab_release_matrix_strategy.yml | 22 +++++++------- .github/workflows/prepare_release.yml | 29 ++++++++++--------- .github/workflows/run_tests.yml | 9 ++++-- nwbtest.m | 2 +- 8 files changed, 39 insertions(+), 34 deletions(-) diff --git a/+tests/+system/+tutorial/TutorialTest.m b/+tests/+system/+tutorial/TutorialTest.m index 8e2ff6cf..b85cdc77 100644 --- a/+tests/+system/+tutorial/TutorialTest.m +++ b/+tests/+system/+tutorial/TutorialTest.m @@ -72,7 +72,7 @@ function testTutorial(testCase, tutorialFile) %#ok % code which overloads display methods for nwb types/objects. C = evalc( 'run(tutorialFile)' ); %#ok - skipPynwbChecks = getenv("SKIP_PYNWB_COMPATIBILITY_TEST_FOR_TUTORIALS"); + skipPynwbChecks = getenv("SKIP_PYNWB_TESTS"); skipPynwbChecks = ~isempty(skipPynwbChecks) && logical(str2double(skipPynwbChecks)); skipNwbInspector = getenv("SKIP_NWBINSPECTOR_TEST"); diff --git a/+tests/+system/PyNWBIOTest.m b/+tests/+system/PyNWBIOTest.m index 76c3851c..ca37d7df 100644 --- a/+tests/+system/PyNWBIOTest.m +++ b/+tests/+system/PyNWBIOTest.m @@ -1,4 +1,4 @@ -classdef (SharedTestFixtures = {tests.fixtures.SetEnvironmentVariableFixture}) ... +classdef (TestTags = {'UsesPython'}, SharedTestFixtures = {tests.fixtures.SetEnvironmentVariableFixture}) ... PyNWBIOTest < tests.system.RoundTripTest % Assumes PyNWB and unittest2 has been installed on the system. % diff --git a/+tests/nwbtest.default.env b/+tests/nwbtest.default.env index a819d632..8503164c 100644 --- a/+tests/nwbtest.default.env +++ b/+tests/nwbtest.default.env @@ -17,4 +17,4 @@ NWBINSPECTOR_EXECUTABLE=nwbinspector PYTHON_EXECUTABLE=python NWB_TEST_DEBUG=0 GITHUB_TOKEN= -SKIP_PYNWB_COMPATIBILITY_TEST_FOR_TUTORIALS=0 +SKIP_PYNWB_TESTS=0 diff --git a/+tests/requirements.txt b/+tests/requirements.txt index 2061142c..3bd54f68 100644 --- a/+tests/requirements.txt +++ b/+tests/requirements.txt @@ -2,6 +2,5 @@ scipy matplotlib hdf5plugin dataframe_image -git+https://github.com/NeurodataWithoutBorders/pynwb.git@dev -# Note: nwbinspector is installed conditionally in run_tests.yml -# (only for Python 3.10+, as nwbinspector dropped Python 3.9 support) +# Note: pynwb and nwbinspector are installed conditionally in the workflow files +# (only for Python 3.10+, as both packages dropped Python 3.9 support) diff --git a/.github/workflows/configurations/matlab_release_matrix_strategy.yml b/.github/workflows/configurations/matlab_release_matrix_strategy.yml index 623688d7..625e3526 100644 --- a/.github/workflows/configurations/matlab_release_matrix_strategy.yml +++ b/.github/workflows/configurations/matlab_release_matrix_strategy.yml @@ -1,40 +1,40 @@ - matlab-version: R2021a python-version: '3.9' - skip-pynwb-compatibilty-test-for-tutorial: '1' + skip-pynwb-tests: '1' skip-nwbinspector-test: '1' - matlab-version: R2021b python-version: '3.9' - skip-pynwb-compatibilty-test-for-tutorial: '1' + skip-pynwb-tests: '1' skip-nwbinspector-test: '1' - matlab-version: R2022a python-version: '3.9' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '1' skip-nwbinspector-test: '1' - matlab-version: R2022b python-version: '3.9' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '1' skip-nwbinspector-test: '1' - matlab-version: R2023a python-version: '3.10' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' - matlab-version: R2023b python-version: '3.10' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' - matlab-version: R2024a python-version: '3.11' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' - matlab-version: R2024b python-version: '3.11' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' - matlab-version: R2025a python-version: '3.12' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' - matlab-version: R2025b python-version: '3.13' - skip-pynwb-compatibilty-test-for-tutorial: '0' - skip-nwbinspector-test: '0' \ No newline at end of file + skip-pynwb-tests: '0' + skip-nwbinspector-test: '0' diff --git a/.github/workflows/prepare_release.yml b/.github/workflows/prepare_release.yml index aacfaa97..543d3220 100644 --- a/.github/workflows/prepare_release.yml +++ b/.github/workflows/prepare_release.yml @@ -36,43 +36,43 @@ jobs: include: - matlab-version: R2021a python-version: '3.9' - skip-pynwb-compatibilty-test-for-tutorial: '1' + skip-pynwb-tests: '1' skip-nwbinspector-test: '1' - matlab-version: R2021b python-version: '3.9' - skip-pynwb-compatibilty-test-for-tutorial: '1' + skip-pynwb-tests: '1' skip-nwbinspector-test: '1' - matlab-version: R2022a python-version: '3.9' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '1' skip-nwbinspector-test: '1' - matlab-version: R2022b python-version: '3.9' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '1' skip-nwbinspector-test: '1' - matlab-version: R2023a python-version: '3.10' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' - matlab-version: R2023b python-version: '3.10' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' - matlab-version: R2024a python-version: '3.11' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' - matlab-version: R2024b python-version: '3.11' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' - matlab-version: R2025a python-version: '3.12' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' - matlab-version: R2025b python-version: '3.13' - skip-pynwb-compatibilty-test-for-tutorial: '0' + skip-pynwb-tests: '0' skip-nwbinspector-test: '0' steps: - name: Check out repository @@ -88,7 +88,10 @@ jobs: run: | python -m pip install -U pip pip install -r +tests/requirements.txt - # Install nwbinspector only for Python 3.10+ (nwbinspector dropped Python 3.9 support) + # Install pynwb and nwbinspector only for Python 3.10+ (both dropped Python 3.9 support) + if [[ "${{ matrix.skip-pynwb-tests }}" == "0" ]]; then + pip install "git+https://github.com/NeurodataWithoutBorders/pynwb.git@dev" + fi if [[ "${{ matrix.skip-nwbinspector-test }}" == "0" ]]; then pip install "git+https://github.com/NeurodataWithoutBorders/nwbinspector.git@dev" fi @@ -117,8 +120,8 @@ jobs: HDF5_PLUGIN_PATH: ${{ env.HDF5_PLUGIN_PATH }} with: command: | - setenv("SKIP_PYNWB_COMPATIBILITY_TEST_FOR_TUTORIALS", ... - num2str(${{ matrix.skip-pynwb-compatibilty-test-for-tutorial }})) + setenv("SKIP_PYNWB_TESTS", ... + num2str(${{ matrix.skip-pynwb-tests }})) setenv("SKIP_NWBINSPECTOR_TEST", ... num2str(${{ matrix.skip-nwbinspector-test }})) pyenv("ExecutionMode", "OutOfProcess"); diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index c1045527..fd3c53b9 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -94,7 +94,10 @@ jobs: run: | python -m pip install -U pip pip install -r +tests/requirements.txt - # Install nwbinspector only for Python 3.10+ (nwbinspector dropped Python 3.9 support) + # Install pynwb and nwbinspector only for Python 3.10+ (both dropped Python 3.9 support) + if [[ "${{ matrix.skip-pynwb-tests }}" == "0" ]]; then + pip install "git+https://github.com/NeurodataWithoutBorders/pynwb.git@dev" + fi if [[ "${{ matrix.skip-nwbinspector-test }}" == "0" ]]; then pip install "git+https://github.com/NeurodataWithoutBorders/nwbinspector.git@dev" fi @@ -112,8 +115,8 @@ jobs: uses: matlab-actions/run-command@v2 with: command: | - setenv("SKIP_PYNWB_COMPATIBILITY_TEST_FOR_TUTORIALS", ... - num2str(${{ matrix.skip-pynwb-compatibilty-test-for-tutorial }})) + setenv("SKIP_PYNWB_TESTS", ... + num2str(${{ matrix.skip-pynwb-tests }})) setenv("SKIP_NWBINSPECTOR_TEST", ... num2str(${{ matrix.skip-nwbinspector-test }})) pyenv("ExecutionMode", "OutOfProcess"); diff --git a/nwbtest.m b/nwbtest.m index a5a287ab..3d3040f2 100644 --- a/nwbtest.m +++ b/nwbtest.m @@ -140,7 +140,7 @@ function deleteFolderIfCanceled(folderPath, numReports) function suite = filterTestsByCompatibility(suite) import matlab.unittest.selectors.HasTag - skipPythonTests = getenv("SKIP_PYNWB_COMPATIBILITY_TEST_FOR_TUTORIALS"); + skipPythonTests = getenv("SKIP_PYNWB_TESTS"); skipPythonTests = ~isempty(skipPythonTests) && logical(str2double(skipPythonTests)); if skipPythonTests From 6a42eb64b37c144871fa66806bffe5b85b94768f Mon Sep 17 00:00:00 2001 From: ehennestad Date: Wed, 11 Mar 2026 16:07:17 +0100 Subject: [PATCH 04/59] debug readthedocs failed build checking if this class attribute trips up docs build --- +tests/+system/PyNWBIOTest.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/+tests/+system/PyNWBIOTest.m b/+tests/+system/PyNWBIOTest.m index ca37d7df..76c3851c 100644 --- a/+tests/+system/PyNWBIOTest.m +++ b/+tests/+system/PyNWBIOTest.m @@ -1,4 +1,4 @@ -classdef (TestTags = {'UsesPython'}, SharedTestFixtures = {tests.fixtures.SetEnvironmentVariableFixture}) ... +classdef (SharedTestFixtures = {tests.fixtures.SetEnvironmentVariableFixture}) ... PyNWBIOTest < tests.system.RoundTripTest % Assumes PyNWB and unittest2 has been installed on the system. % From 9d78ddd6bd311431db9b5bd77986c8e5d7e39ba1 Mon Sep 17 00:00:00 2001 From: ehennestad Date: Wed, 11 Mar 2026 17:13:11 +0100 Subject: [PATCH 05/59] Update PyNWBIOTest.m Move TestTags to methods blocks. Check if that fixes issue with sphinx build of docs --- +tests/+system/PyNWBIOTest.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/+tests/+system/PyNWBIOTest.m b/+tests/+system/PyNWBIOTest.m index 76c3851c..9523ab81 100644 --- a/+tests/+system/PyNWBIOTest.m +++ b/+tests/+system/PyNWBIOTest.m @@ -7,7 +7,7 @@ % % To install unittest2, execute: % $ pip install unittest2 - methods(Test) + methods(Test, TestTags={'UsesPython'}) function testOutToPyNWB(testCase) filename = ['MatNWB.' testCase.className() '.testOutToPyNWB.nwb']; nwbExport(testCase.file, filename); From 5693fa3404c20d779f407b2b14bf0f4d356fd381 Mon Sep 17 00:00:00 2001 From: ehennestad Date: Mon, 23 Mar 2026 21:11:14 +0100 Subject: [PATCH 06/59] Add subject section to domain tutorials --- tutorials/behavior.mlx | Bin 8415 -> 8635 bytes tutorials/ecephys.mlx | Bin 360850 -> 360994 bytes tutorials/icephys.mlx | Bin 708647 -> 708856 bytes tutorials/images.mlx | Bin 9476 -> 9678 bytes tutorials/ogen.mlx | Bin 5221 -> 5529 bytes tutorials/ophys.mlx | Bin 173719 -> 173888 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tutorials/behavior.mlx b/tutorials/behavior.mlx index e0ef01d05d595c1fca4f288568f527ed3739ea4a..ecd533512c888c01819775052d89a8ad0c88c002 100644 GIT binary patch delta 6881 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 ZW3&BN;D3eeY5r65g^m`(jrKpl{{Shg2ax~( delta 6700 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 diff --git a/tutorials/ecephys.mlx b/tutorials/ecephys.mlx index c1f454df849110c8a265f83ba193feac92c89ba5..a0f30aed55b0dd5f41b601181d9a6075e052714c 100644 GIT binary patch delta 22504 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 delta 22390 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 XYP03_M1mRf=wrb!DnJzYO60!)(arJ( diff --git a/tutorials/icephys.mlx b/tutorials/icephys.mlx index 0d79406c66b6f7f33981d99fa7b214e402050a82..1a7a43b5c7c2c9fe84e1d140ddd48032364f1c0a 100644 GIT binary patch delta 9224 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 ChLeT> delta 9020 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 Oeg;H_fH?{J*YZEqK_{jF diff --git a/tutorials/images.mlx b/tutorials/images.mlx index 80d7a65c9cc0ad3a24814eeb242624b7ea89e335..e9b6f7a95124b43646ab1c687718cfe32a57383d 100644 GIT binary patch delta 7989 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 delta 3469 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 delta 12350 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 From 6099a81a5be587b6bcec2d5924d669438ac4342b Mon Sep 17 00:00:00 2001 From: ehennestad Date: Mon, 23 Mar 2026 21:15:30 +0100 Subject: [PATCH 07/59] Update generated html- and m-files --- .../_static/html/tutorials/behavior.html | 59 +- .../_static/html/tutorials/ecephys.html | 1005 +---------------- .../_static/html/tutorials/icephys.html | 89 +- .../source/_static/html/tutorials/images.html | 77 +- docs/source/_static/html/tutorials/ogen.html | 119 +- docs/source/_static/html/tutorials/ophys.html | 69 +- tutorials/private/mcode/behavior.m | 14 + tutorials/private/mcode/ecephys.m | 13 + tutorials/private/mcode/icephys.m | 13 + tutorials/private/mcode/images.m | 13 + tutorials/private/mcode/ogen.m | 13 + tutorials/private/mcode/ophys.m | 13 + 12 files changed, 316 insertions(+), 1181 deletions(-) diff --git a/docs/source/_static/html/tutorials/behavior.html b/docs/source/_static/html/tutorials/behavior.html index 14c85489..5cf513a4 100644 --- a/docs/source/_static/html/tutorials/behavior.html +++ b/docs/source/_static/html/tutorials/behavior.html @@ -40,29 +40,29 @@ .inlineElement .textElement {} .embeddedOutputsTextElement.rightPaneElement,.embeddedOutputsVariableStringElement.rightPaneElement { min-height: 16px;} .rightPaneElement .textElement { padding-top: 2px; padding-left: 9px;} -.S7 { margin: 3px 10px 5px 4px; padding: 0px; line-height: 25px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; } -.S8 { border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 1px solid rgb(217, 217, 217); border-bottom: 1px solid rgb(217, 217, 217); border-radius: 4px; padding: 6px 45px 4px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, "Courier New", monospace, Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; } -.S9 { border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 1px solid rgb(217, 217, 217); border-radius: 0px 0px 4px 4px; padding: 0px 45px 4px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, "Courier New", monospace, Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; } -.S10 { margin: 15px 10px 5px 4px; padding: 0px; line-height: 18px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 17px; font-weight: 700; text-align: left; }

Behavior Data

This tutorial will guide you in writing behavioral data to NWB.

Creating an NWB File

Create an NWBFile object with the required fields (session_description, identifier, and session_start_time) and additional metadata.
nwb = NwbFile( ...
'session_description', 'mouse in open exploration',...
'identifier', 'Mouse5_Day3', ...
'session_start_time', datetime(2018, 4, 25, 2, 30, 3, 'TimeZone', 'local'), ...
'general_experimenter', 'My Name', ... % optional
'general_session_id', 'session_1234', ... % optional
'general_institution', 'University of My Institution', ... % optional
'general_related_publications', 'DOI:10.1016/j.neuron.2016.12.011'); % optional
nwb
nwb =
NwbFile with properties: +.S7 { margin: 15px 10px 5px 4px; padding: 0px; line-height: 18px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 17px; font-weight: 700; text-align: left; } +.S8 { border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 1px solid rgb(217, 217, 217); border-radius: 0px 0px 4px 4px; padding: 0px 45px 4px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, "Courier New", monospace, Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; } +.S9 { margin: 3px 10px 5px 4px; padding: 0px; line-height: 25px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; } +.S10 { border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 1px solid rgb(217, 217, 217); border-bottom: 1px solid rgb(217, 217, 217); border-radius: 4px; padding: 6px 45px 4px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, "Courier New", monospace, Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; } +.S11 { border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 1px solid rgb(217, 217, 217); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 6px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, "Courier New", monospace, Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; }

Behavior Data

This tutorial will guide you in writing behavioral data to NWB.

Creating an NWB File

Create an NWBFile object with the required fields (session_description, identifier, and session_start_time) and additional metadata.
nwb = NwbFile( ...
'session_description', 'mouse in open exploration',...
'identifier', 'Mouse5_Day3', ...
'session_start_time', datetime(2018, 4, 25, 2, 30, 3, 'TimeZone', 'local'), ...
'general_experimenter', 'My Name', ... % optional
'general_session_id', 'session_1234', ... % optional
'general_institution', 'University of My Institution', ... % optional
'general_related_publications', 'DOI:10.1016/j.neuron.2016.12.011'); % optional
nwb
nwb =
NwbFile with properties: - nwb_version: '2.9.0' + nwb_version: '2.6.0' file_create_date: [] identifier: 'Mouse5_Day3' session_description: 'mouse in open exploration' session_start_time: {[2018-04-25T02:30:03.000000+02:00]} timestamps_reference_time: [] - acquisition: [0×1 types.untyped.Set] - analysis: [0×1 types.untyped.Set] - general: [0×1 types.untyped.Set] + acquisition: [0×1 matnwb.types.untyped.Set] + analysis: [0×1 matnwb.types.untyped.Set] + general: [0×1 matnwb.types.untyped.Set] general_data_collection: '' - general_devices: [0×1 types.untyped.Set] - general_devices_models: [0×1 types.untyped.Set] + general_devices: [0×1 matnwb.types.untyped.Set] general_experiment_description: '' general_experimenter: 'My Name' - general_extracellular_ephys: [0×1 types.untyped.Set] + general_extracellular_ephys: [0×1 matnwb.types.untyped.Set] general_extracellular_ephys_electrodes: [] general_institution: 'University of My Institution' - general_intracellular_ephys: [0×1 types.untyped.Set] + general_intracellular_ephys: [0×1 matnwb.types.untyped.Set] general_intracellular_ephys_experimental_conditions: [] general_intracellular_ephys_filtering: '' general_intracellular_ephys_intracellular_recordings: [] @@ -73,8 +73,8 @@ general_keywords: '' general_lab: '' general_notes: '' - general_optogenetics: [0×1 types.untyped.Set] - general_optophysiology: [0×1 types.untyped.Set] + general_optogenetics: [0×1 matnwb.types.untyped.Set] + general_optophysiology: [0×1 matnwb.types.untyped.Set] general_pharmacology: '' general_protocol: '' general_related_publications: 'DOI:10.1016/j.neuron.2016.12.011' @@ -86,24 +86,22 @@ general_subject: [] general_surgery: '' general_virus: '' - general_was_generated_by: '' - intervals: [0×1 types.untyped.Set] + intervals: [0×1 matnwb.types.untyped.Set] intervals_epochs: [] intervals_invalid_times: [] intervals_trials: [] - processing: [0×1 types.untyped.Set] - scratch: [0×1 types.untyped.Set] - stimulus_presentation: [0×1 types.untyped.Set] - stimulus_templates: [0×1 types.untyped.Set] + processing: [0×1 matnwb.types.untyped.Set] + scratch: [0×1 matnwb.types.untyped.Set] + stimulus_presentation: [0×1 matnwb.types.untyped.Set] + stimulus_templates: [0×1 matnwb.types.untyped.Set] units: [] -

SpatialSeries: Storing continuous spatial data

SpatialSeries is a subclass of TimeSeries that represents data in space, such as the spatial direction e.g., of gaze or travel or position of an animal over time.
Create data that corresponds to x, y position over time.
position_data = [linspace(0, 10, 50); linspace(0, 8, 50)]; % 2 x nT array
In SpatialSeries data, the first dimension is always time (in seconds), the second dimension represents the x, y position. However, as described in the dimensionMapNoDataPipes tutorial, when a MATLAB array is exported to HDF5, the array is transposed. Therefore, in order to correctly export the data, in MATLAB the last dimension of an array should be time. SpatialSeries data should be stored as one continuous stream as it is acquired, not by trials as is often reshaped for analysis. Data can be trial-aligned on-the-fly using the trials table. See the trials tutorial for further information.
For position data reference_frame indicates the zero-position, e.g. the 0,0 point might be the bottom-left corner of an enclosure, as viewed from the tracking camera.
timestamps = linspace(0, 50, 50)/ 200;
position_spatial_series = types.core.SpatialSeries( ...
'description', 'Postion (x, y) in an open field.', ...
'data', position_data, ...
'timestamps', timestamps, ...
'reference_frame', '(0,0) is the bottom left corner.' ...
)
position_spatial_series =
SpatialSeries with properties: +

Subject Information

It is also recommended to store information about the experimental subject in the file. Create a Subject object to store metadata about the subject, then assign it to nwb.general_subject.
subject = types.core.Subject( ...
'subject_id', '001', ...
'age', 'P90D', ...
'description', 'mouse 5', ...
'species', 'Mus musculus', ...
'sex', 'M' ...
);
nwb.general_subject = subject;
 

SpatialSeries: Storing continuous spatial data

SpatialSeries is a subclass of TimeSeries that represents data in space, such as the spatial direction e.g., of gaze or travel or position of an animal over time.
Create data that corresponds to x, y position over time.
position_data = [linspace(0, 10, 50); linspace(0, 8, 50)]; % 2 x nT array
In SpatialSeries data, the first dimension is always time (in seconds), the second dimension represents the x, y position. However, as described in the dimensionMapNoDataPipes tutorial, when a MATLAB array is exported to HDF5, the array is transposed. Therefore, in order to correctly export the data, in MATLAB the last dimension of an array should be time. SpatialSeries data should be stored as one continuous stream as it is acquired, not by trials as is often reshaped for analysis. Data can be trial-aligned on-the-fly using the trials table. See the trials tutorial for further information.
For position data reference_frame indicates the zero-position, e.g. the 0,0 point might be the bottom-left corner of an enclosure, as viewed from the tracking camera.
timestamps = linspace(0, 50, 50)/ 200;
position_spatial_series = types.core.SpatialSeries( ...
'description', 'Postion (x, y) in an open field.', ...
'data', position_data, ...
'timestamps', timestamps, ...
'reference_frame', '(0,0) is the bottom left corner.' ...
)
position_spatial_series =
SpatialSeries with properties: reference_frame: '(0,0) is the bottom left corner.' starting_time_unit: 'seconds' timestamps_interval: 1 timestamps_unit: 'seconds' data: [2×50 double] - data_unit: 'meters' comments: 'no comments' control: [] control_description: '' @@ -111,11 +109,12 @@ data_conversion: 1 data_offset: 0 data_resolution: -1 + data_unit: 'meters' description: 'Postion (x, y) in an open field.' starting_time: [] starting_time_rate: [] timestamps: [0 0.0051 0.0102 0.0153 0.0204 0.0255 0.0306 0.0357 0.0408 0.0459 0.0510 0.0561 0.0612 0.0663 0.0714 0.0765 0.0816 0.0867 0.0918 0.0969 0.1020 0.1071 0.1122 0.1173 0.1224 0.1276 0.1327 0.1378 0.1429 0.1480 0.1531 … ] (1×50 double) -

Position: Storing position measured over time

To help data analysis and visualization tools know that this SpatialSeries object represents the position of the subject, store the SpatialSeries object inside a Position object, which can hold one or more SpatialSeries objects.
position = types.core.Position();
position.spatialseries.set('SpatialSeries', position_spatial_series);

Create a Behavior Processing Module

Create a processing module called "behavior" for storing behavioral data in the NWBFile, then add the Position object to the processing module.
behavior_processing_module = types.core.ProcessingModule('description', 'stores behavioral data.');
behavior_processing_module.nwbdatainterface.set("Position", position);
nwb.processing.set("behavior", behavior_processing_module);

CompassDirection: Storing view angle measured over time

Analogous to how position can be stored, we can create a SpatialSeries object for representing the view angle of the subject.
For direction data reference_frame indicates the zero direction, for instance in this case "straight ahead" is 0 radians.
view_angle_data = linspace(0, 4, 50);
direction_spatial_series = types.core.SpatialSeries( ...
'description', 'View angle of the subject measured in radians.', ...
'data', view_angle_data, ...
'timestamps', timestamps, ...
'reference_frame', 'straight ahead', ...
'data_unit', 'radians' ...
);
direction = types.core.CompassDirection();
direction.spatialseries.set('spatial_series', direction_spatial_series);
We can add a CompassDirection object to the behavior processing module the same way we have added the position data.
behavior_processing_module.nwbdatainterface.set('CompassDirection', direction);

BehaviorTimeSeries: Storing continuous behavior data

BehavioralTimeSeries is an interface for storing continuous behavior data, such as the speed of a subject.
speed_data = linspace(0, 0.4, 50);
 
speed_time_series = types.core.TimeSeries( ...
'data', speed_data, ...
'starting_time', 1.0, ... % NB: Important to set starting_time when using starting_time_rate
'starting_time_rate', 10.0, ... % Hz
'description', 'he speed of the subject measured over time.', ...
'data_unit', 'm/s' ...
);
 
behavioral_time_series = types.core.BehavioralTimeSeries();
behavioral_time_series.timeseries.set('speed', speed_time_series);
 
% Add behavioral_time_series to the processing module
behavior_processing_module.nwbdatainterface.set('BehavioralTimeSeries', behavioral_time_series);

BehavioralEvents: Storing behavioral events

BehavioralEvents is an interface for storing behavioral events. We can use it for storing the timing and amount of rewards (e.g. water amount) or lever press times.
reward_amount = [1.0, 1.5, 1.0, 1.5];
event_timestamps = [1.0, 2.0, 5.0, 6.0];
 
time_series = types.core.TimeSeries( ...
'data', reward_amount, ...
'timestamps', event_timestamps, ...
'description', 'The water amount the subject received as a reward.', ...
'data_unit', 'ml' ...
);
 
behavioral_events = types.core.BehavioralEvents();
behavioral_events.timeseries.set('lever_presses', time_series);
 
% Add behavioral_events to the processing module
behavior_processing_module.nwbdatainterface.set('BehavioralEvents', behavioral_events);
Storing only the timestamps of the events is possible with the ndx-events NWB extension. You can also add labels associated with the events with this extension. You can find information about installation and example usage here.

BehavioralEpochs: Storing intervals of behavior data

BehavioralEpochs is for storing intervals of behavior data. BehavioralEpochs uses IntervalSeries to represent the time intervals. Create an IntervalSeries object that represents the time intervals when the animal was running. IntervalSeries uses 1 to indicate the beginning of an interval and -1 to indicate the end.
run_intervals = types.core.IntervalSeries( ...
'description', 'Intervals when the animal was running.', ...
'data', [1, -1, 1, -1, 1, -1], ...
'timestamps', [0.5, 1.5, 3.5, 4.0, 7.0, 7.3] ...
);
 
behavioral_epochs = types.core.BehavioralEpochs();
behavioral_epochs.intervalseries.set('running', run_intervals);
You can add more than one IntervalSeries to a BehavioralEpochs object.
sleep_intervals = types.core.IntervalSeries( ...
'description', 'Intervals when the animal was sleeping', ...
'data', [1, -1, 1, -1], ...
'timestamps', [15.0, 30.0, 60.0, 95.0] ...
);
behavioral_epochs.intervalseries.set('sleeping', sleep_intervals);
 
% Add behavioral_epochs to the processing module
behavior_processing_module.nwbdatainterface.set('BehavioralEpochs', behavioral_epochs);

Another approach: TimeIntervals

Using TimeIntervals to represent time intervals is often preferred over BehavioralEpochs and IntervalSeries. TimeIntervals is a subclass of DynamicTable, which offers flexibility for tabular data by allowing the addition of optional columns which are not defined in the standard DynamicTable class.
sleep_intervals = types.core.TimeIntervals( ...
'description', 'Intervals when the animal was sleeping.', ...
'colnames', {'start_time', 'stop_time', 'stage'} ...
);
 
sleep_intervals.addRow('start_time', 0.3, 'stop_time', 0.35, 'stage', 1);
sleep_intervals.addRow('start_time', 0.7, 'stop_time', 0.9, 'stage', 2);
sleep_intervals.addRow('start_time', 1.3, 'stop_time', 3.0, 'stage', 3);
 
nwb.intervals.set('sleep_intervals', sleep_intervals);

EyeTracking: Storing continuous eye-tracking data of gaze direction

EyeTracking is for storing eye-tracking data which represents direction of gaze as measured by an eye tracking algorithm. An EyeTracking object holds one or more SpatialSeries objects that represent the gaze direction over time extracted from a video.
eye_position_data = [linspace(-20, 30, 50); linspace(30, -20, 50)];
 
right_eye_position = types.core.SpatialSeries( ...
'description', 'The position of the right eye measured in degrees.', ...
'data', eye_position_data, ...
'starting_time', 1.0, ... % NB: Important to set starting_time when using starting_time_rate
'starting_time_rate', 50.0, ... % Hz
'reference_frame', '(0,0) is middle', ...
'data_unit', 'degrees' ...
);
 
left_eye_position = types.core.SpatialSeries( ...
'description', 'The position of the right eye measured in degrees.', ...
'data', eye_position_data, ...
'starting_time', 1.0, ... % NB: Important to set starting_time when using starting_time_rate
'starting_time_rate', 50.0, ... % Hz
'reference_frame', '(0,0) is middle', ...
'data_unit', 'degrees' ...
);
 
eye_tracking = types.core.EyeTracking();
eye_tracking.spatialseries.set('right_eye_position', right_eye_position);
eye_tracking.spatialseries.set('left_eye_position', left_eye_position);
 
behavior_processing_module.nwbdatainterface.set('EyeTracking', eye_tracking);

PupilTracking: Storing continuous eye-tracking data of pupil size

PupilTracking is for storing eye-tracking data which represents pupil size. PupilTracking holds one or more TimeSeries objects that can represent different features such as the dilation of the pupil measured over time by a pupil tracking algorithm.
pupil_diameter = types.core.TimeSeries( ...
'description', 'Pupil diameter extracted from the video of the right eye.', ...
'data', linspace(0.001, 0.002, 50), ...
'starting_time', 1.0, ... % NB: Important to set starting_time when using starting_time_rate
'starting_time_rate', 20.0, ... % Hz
'data_unit', 'meters' ...
);
 
pupil_tracking = types.core.PupilTracking();
pupil_tracking.timeseries.set('pupil_diameter', pupil_diameter);
 
behavior_processing_module.nwbdatainterface.set('PupilTracking', pupil_tracking);

Writing the behavior data to an NWB file

All of the above commands build an NWBFile object in-memory. To write this file, use nwbExport.
% Save to tutorials/tutorial_nwb_files folder
nwbFilePath = misc.getTutorialNwbFilePath('behavior_tutorial.nwb');
nwbExport(nwb, nwbFilePath);
fprintf('Exported NWB file to "%s"\n', 'behavior_tutorial.nwb')
Exported NWB file to "behavior_tutorial.nwb"
+

Position: Storing position measured over time

To help data analysis and visualization tools know that this SpatialSeries object represents the position of the subject, store the SpatialSeries object inside a Position object, which can hold one or more SpatialSeries objects.
position = types.core.Position();
position.spatialseries.set('SpatialSeries', position_spatial_series);

Create a Behavior Processing Module

Create a processing module called "behavior" for storing behavioral data in the NWBFile, then add the Position object to the processing module.
behavior_processing_module = types.core.ProcessingModule('description', 'stores behavioral data.');
behavior_processing_module.nwbdatainterface.set("Position", position);
nwb.processing.set("behavior", behavior_processing_module);

CompassDirection: Storing view angle measured over time

Analogous to how position can be stored, we can create a SpatialSeries object for representing the view angle of the subject.
For direction data reference_frame indicates the zero direction, for instance in this case "straight ahead" is 0 radians.
view_angle_data = linspace(0, 4, 50);
direction_spatial_series = types.core.SpatialSeries( ...
'description', 'View angle of the subject measured in radians.', ...
'data', view_angle_data, ...
'timestamps', timestamps, ...
'reference_frame', 'straight ahead', ...
'data_unit', 'radians' ...
);
direction = types.core.CompassDirection();
direction.spatialseries.set('spatial_series', direction_spatial_series);
We can add a CompassDirection object to the behavior processing module the same way we have added the position data.
behavior_processing_module.nwbdatainterface.set('CompassDirection', direction);

BehaviorTimeSeries: Storing continuous behavior data

BehavioralTimeSeries is an interface for storing continuous behavior data, such as the speed of a subject.
speed_data = linspace(0, 0.4, 50);
 
speed_time_series = types.core.TimeSeries( ...
'data', speed_data, ...
'starting_time', 1.0, ... % NB: Important to set starting_time when using starting_time_rate
'starting_time_rate', 10.0, ... % Hz
'description', 'he speed of the subject measured over time.', ...
'data_unit', 'm/s' ...
);
 
behavioral_time_series = types.core.BehavioralTimeSeries();
behavioral_time_series.timeseries.set('speed', speed_time_series);
 
% Add behavioral_time_series to the processing module
behavior_processing_module.nwbdatainterface.set('BehavioralTimeSeries', behavioral_time_series);

BehavioralEvents: Storing behavioral events

BehavioralEvents is an interface for storing behavioral events. We can use it for storing the timing and amount of rewards (e.g. water amount) or lever press times.
reward_amount = [1.0, 1.5, 1.0, 1.5];
event_timestamps = [1.0, 2.0, 5.0, 6.0];
 
time_series = types.core.TimeSeries( ...
'data', reward_amount, ...
'timestamps', event_timestamps, ...
'description', 'The water amount the subject received as a reward.', ...
'data_unit', 'ml' ...
);
 
behavioral_events = types.core.BehavioralEvents();
behavioral_events.timeseries.set('lever_presses', time_series);
 
% Add behavioral_events to the processing module
behavior_processing_module.nwbdatainterface.set('BehavioralEvents', behavioral_events);
Storing only the timestamps of the events is possible with the ndx-events NWB extension. You can also add labels associated with the events with this extension. You can find information about installation and example usage here.

BehavioralEpochs: Storing intervals of behavior data

BehavioralEpochs is for storing intervals of behavior data. BehavioralEpochs uses IntervalSeries to represent the time intervals. Create an IntervalSeries object that represents the time intervals when the animal was running. IntervalSeries uses 1 to indicate the beginning of an interval and -1 to indicate the end.
run_intervals = types.core.IntervalSeries( ...
'description', 'Intervals when the animal was running.', ...
'data', [1, -1, 1, -1, 1, -1], ...
'timestamps', [0.5, 1.5, 3.5, 4.0, 7.0, 7.3] ...
);
 
behavioral_epochs = types.core.BehavioralEpochs();
behavioral_epochs.intervalseries.set('running', run_intervals);
You can add more than one IntervalSeries to a BehavioralEpochs object.
sleep_intervals = types.core.IntervalSeries( ...
'description', 'Intervals when the animal was sleeping', ...
'data', [1, -1, 1, -1], ...
'timestamps', [15.0, 30.0, 60.0, 95.0] ...
);
behavioral_epochs.intervalseries.set('sleeping', sleep_intervals);
 
% Add behavioral_epochs to the processing module
behavior_processing_module.nwbdatainterface.set('BehavioralEpochs', behavioral_epochs);

Another approach: TimeIntervals

Using TimeIntervals to represent time intervals is often preferred over BehavioralEpochs and IntervalSeries. TimeIntervals is a subclass of DynamicTable, which offers flexibility for tabular data by allowing the addition of optional columns which are not defined in the standard DynamicTable class.
sleep_intervals = types.core.TimeIntervals( ...
'description', 'Intervals when the animal was sleeping.', ...
'colnames', {'start_time', 'stop_time', 'stage'} ...
);
 
sleep_intervals.addRow('start_time', 0.3, 'stop_time', 0.35, 'stage', 1);
sleep_intervals.addRow('start_time', 0.7, 'stop_time', 0.9, 'stage', 2);
sleep_intervals.addRow('start_time', 1.3, 'stop_time', 3.0, 'stage', 3);
 
nwb.intervals.set('sleep_intervals', sleep_intervals);

EyeTracking: Storing continuous eye-tracking data of gaze direction

EyeTracking is for storing eye-tracking data which represents direction of gaze as measured by an eye tracking algorithm. An EyeTracking object holds one or more SpatialSeries objects that represent the gaze direction over time extracted from a video.
eye_position_data = [linspace(-20, 30, 50); linspace(30, -20, 50)];
 
right_eye_position = types.core.SpatialSeries( ...
'description', 'The position of the right eye measured in degrees.', ...
'data', eye_position_data, ...
'starting_time', 1.0, ... % NB: Important to set starting_time when using starting_time_rate
'starting_time_rate', 50.0, ... % Hz
'reference_frame', '(0,0) is middle', ...
'data_unit', 'degrees' ...
);
 
left_eye_position = types.core.SpatialSeries( ...
'description', 'The position of the right eye measured in degrees.', ...
'data', eye_position_data, ...
'starting_time', 1.0, ... % NB: Important to set starting_time when using starting_time_rate
'starting_time_rate', 50.0, ... % Hz
'reference_frame', '(0,0) is middle', ...
'data_unit', 'degrees' ...
);
 
eye_tracking = types.core.EyeTracking();
eye_tracking.spatialseries.set('right_eye_position', right_eye_position);
eye_tracking.spatialseries.set('left_eye_position', left_eye_position);
 
behavior_processing_module.nwbdatainterface.set('EyeTracking', eye_tracking);

PupilTracking: Storing continuous eye-tracking data of pupil size

PupilTracking is for storing eye-tracking data which represents pupil size. PupilTracking holds one or more TimeSeries objects that can represent different features such as the dilation of the pupil measured over time by a pupil tracking algorithm.
pupil_diameter = types.core.TimeSeries( ...
'description', 'Pupil diameter extracted from the video of the right eye.', ...
'data', linspace(0.001, 0.002, 50), ...
'starting_time', 1.0, ... % NB: Important to set starting_time when using starting_time_rate
'starting_time_rate', 20.0, ... % Hz
'data_unit', 'meters' ...
);
 
pupil_tracking = types.core.PupilTracking();
pupil_tracking.timeseries.set('pupil_diameter', pupil_diameter);
 
behavior_processing_module.nwbdatainterface.set('PupilTracking', pupil_tracking);

Writing the behavior data to an NWB file

All of the above commands build an NWBFile object in-memory. To write this file, use nwbExport.
% Save to tutorials/tutorial_nwb_files folder
nwbFilePath = misc.getTutorialNwbFilePath('behavior_tutorial.nwb');
Unable to resolve the name 'misc.getTutorialNwbFilePath'.
nwbExport(nwb, nwbFilePath);
fprintf('Exported NWB file to "%s"\n', 'behavior_tutorial.nwb')