Created
March 19, 2022 01:02
-
-
Save miketrumpis/1779483dd9fa43e06cc86bc43952611c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "c9707b0b-51ed-45d7-88f6-03769a3fd42d", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import os\n", | |
"from datetime import datetime\n", | |
"from pynwb import NWBHDF5IO, NWBFile\n", | |
"from pynwb.ecephys import ElectricalSeries, FilteredEphys" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "71016ba0-633f-4996-80f3-00b414e2d64d", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"if os.path.exists('nwb-etl.nwb'):\n", | |
" os.unlink('nwb-etl.nwb')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "c2b65b25-5332-4abe-849f-fb385ce6ae52", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"if os.path.exists('nwb-raw.nwb'):\n", | |
" os.unlink('nwb-raw.nwb')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "1d43ebaa-87dd-4f1c-b73d-c89da855262f", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"nwb = NWBFile('demo', 'demo', datetime.now().astimezone())\n", | |
"dev = nwb.create_device(name='recorder')\n", | |
"grp = nwb.create_electrode_group('electrode', device=dev, location='brain', description='fake')\n", | |
"info = dict(x=np.nan, y=np.nan, z=np.nan, imp=np.nan, group=grp, location='brain', filtering='none')\n", | |
"for id in range(5):\n", | |
" nwb.add_electrode(id=id, **info)\n", | |
"electrode_region = nwb.create_electrode_table_region(list(range(5)), 'record electrodes')\n", | |
"ephys = ElectricalSeries('raw_acq', np.random.randn(1000, 5), electrode_region, starting_time=0.0, rate=100.0)\n", | |
"nwb.add_acquisition(ephys)\n", | |
"with NWBHDF5IO('nwb-raw.nwb', mode='w') as io:\n", | |
" io.write(nwb)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "f35399c6-8f94-42c9-a8d2-7d97f0a10c26", | |
"metadata": {}, | |
"source": [ | |
"## ETL 1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "3640a4f5-87b5-4129-828a-fe0e74e72610", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with NWBHDF5IO('nwb-raw.nwb', mode='r') as raw_io:\n", | |
" nwb_etl = raw_io.read().copy()\n", | |
" acq = nwb_etl.get_acquisition('raw_acq')\n", | |
" acq_data = acq.data[:]\n", | |
" lowpass_data = np.column_stack([np.convolve(col, np.ones(10) / 10.0, mode='same') for col in acq_data.T])\n", | |
" electrode_region = nwb_etl.create_electrode_table_region(list(range(5)), 'filter electrodes')\n", | |
" # electrode_region = acq.electrodes\n", | |
" filt_ephys = ElectricalSeries('lowpass', lowpass_data, electrode_region, \n", | |
" starting_time=acq.starting_time, rate=acq.rate, filtering='sums')\n", | |
" filter_container = FilteredEphys(name='filtered_datasets')\n", | |
" filter_container.add_electrical_series(filt_ephys)\n", | |
" module = nwb_etl.create_processing_module('filtered_ephys', 'post-proc filtering')\n", | |
" container = module.add_data_interface(filter_container)\n", | |
" with NWBHDF5IO('nwb-etl.nwb', mode='w', manager=raw_io.manager) as etl_io:\n", | |
" etl_io.write(nwb_etl)" | |
] | |
}, | |
{ | |
"cell_type": "raw", | |
"id": "dcbf04ca-9ed8-4c8a-a267-bcc9101a91ab", | |
"metadata": {}, | |
"source": [ | |
"! h5dump -n 1 nwb-etl.nwb" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "68f202b9-aa79-4762-80ea-909774647fa6", | |
"metadata": {}, | |
"source": [ | |
"## ETL 2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "e9d03487-1a87-48c3-86f8-40c5882fe5d6", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "RuntimeError", | |
"evalue": "Unable to create external link (name already exists)", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[1;31mRuntimeError\u001b[0m Traceback (most recent call last)", | |
"Input \u001b[1;32mIn [6]\u001b[0m, in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 12\u001b[0m filter_container \u001b[38;5;241m=\u001b[39m mod\u001b[38;5;241m.\u001b[39mdata_interfaces[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfiltered_datasets\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m 13\u001b[0m filter_container\u001b[38;5;241m.\u001b[39madd_electrical_series(filt_ephys)\n\u001b[1;32m---> 14\u001b[0m \u001b[43metl_io\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnwb_etl\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/utils.py:583\u001b[0m, in \u001b[0;36mdocval.<locals>.dec.<locals>.func_call\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 581\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfunc_call\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 582\u001b[0m pargs \u001b[38;5;241m=\u001b[39m _check_args(args, kwargs)\n\u001b[1;32m--> 583\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpargs\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/backends/hdf5/h5tools.py:407\u001b[0m, in \u001b[0;36mHDF5IO.write\u001b[1;34m(self, **kwargs)\u001b[0m\n\u001b[0;32m 402\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m UnsupportedOperation((\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCannot write to file \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m in mode \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 403\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPlease use mode \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr+\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mw\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mw-\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mx\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, or \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 404\u001b[0m \u001b[38;5;241m%\u001b[39m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msource, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__mode))\n\u001b[0;32m 406\u001b[0m cache_spec \u001b[38;5;241m=\u001b[39m popargs(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcache_spec\u001b[39m\u001b[38;5;124m'\u001b[39m, kwargs)\n\u001b[1;32m--> 407\u001b[0m \u001b[43mcall_docval_func\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 408\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cache_spec:\n\u001b[0;32m 409\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__cache_spec()\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/utils.py:424\u001b[0m, in \u001b[0;36mcall_docval_func\u001b[1;34m(func, kwargs)\u001b[0m\n\u001b[0;32m 422\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcall_docval_func\u001b[39m(func, kwargs):\n\u001b[0;32m 423\u001b[0m fargs, fkwargs \u001b[38;5;241m=\u001b[39m fmt_docval_args(func, kwargs)\n\u001b[1;32m--> 424\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfkwargs\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/utils.py:583\u001b[0m, in \u001b[0;36mdocval.<locals>.dec.<locals>.func_call\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 581\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfunc_call\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 582\u001b[0m pargs \u001b[38;5;241m=\u001b[39m _check_args(args, kwargs)\n\u001b[1;32m--> 583\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpargs\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/backends/io.py:50\u001b[0m, in \u001b[0;36mHDMFIO.write\u001b[1;34m(self, **kwargs)\u001b[0m\n\u001b[0;32m 48\u001b[0m container \u001b[38;5;241m=\u001b[39m popargs(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontainer\u001b[39m\u001b[38;5;124m'\u001b[39m, kwargs)\n\u001b[0;32m 49\u001b[0m f_builder \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__manager\u001b[38;5;241m.\u001b[39mbuild(container, source\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__source, root\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m---> 50\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite_builder\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf_builder\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/utils.py:583\u001b[0m, in \u001b[0;36mdocval.<locals>.dec.<locals>.func_call\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 581\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfunc_call\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 582\u001b[0m pargs \u001b[38;5;241m=\u001b[39m _check_args(args, kwargs)\n\u001b[1;32m--> 583\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpargs\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/backends/hdf5/h5tools.py:806\u001b[0m, in \u001b[0;36mHDF5IO.write_builder\u001b[1;34m(self, **kwargs)\u001b[0m\n\u001b[0;32m 803\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlogger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWriting GroupBuilder \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m to path \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m with kwargs=\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 804\u001b[0m \u001b[38;5;241m%\u001b[39m (f_builder\u001b[38;5;241m.\u001b[39mname, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msource, kwargs))\n\u001b[0;32m 805\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name, gbldr \u001b[38;5;129;01min\u001b[39;00m f_builder\u001b[38;5;241m.\u001b[39mgroups\u001b[38;5;241m.\u001b[39mitems():\n\u001b[1;32m--> 806\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite_group\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__file\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgbldr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 807\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name, dbldr \u001b[38;5;129;01min\u001b[39;00m f_builder\u001b[38;5;241m.\u001b[39mdatasets\u001b[38;5;241m.\u001b[39mitems():\n\u001b[0;32m 808\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwrite_dataset(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__file, dbldr, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/utils.py:583\u001b[0m, in \u001b[0;36mdocval.<locals>.dec.<locals>.func_call\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 581\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfunc_call\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 582\u001b[0m pargs \u001b[38;5;241m=\u001b[39m _check_args(args, kwargs)\n\u001b[1;32m--> 583\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpargs\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/backends/hdf5/h5tools.py:1005\u001b[0m, in \u001b[0;36mHDF5IO.write_group\u001b[1;34m(self, **kwargs)\u001b[0m\n\u001b[0;32m 1003\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m links:\n\u001b[0;32m 1004\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m link_name, sub_builder \u001b[38;5;129;01min\u001b[39;00m links\u001b[38;5;241m.\u001b[39mitems():\n\u001b[1;32m-> 1005\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite_link\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgroup\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msub_builder\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1006\u001b[0m attributes \u001b[38;5;241m=\u001b[39m builder\u001b[38;5;241m.\u001b[39mattributes\n\u001b[0;32m 1007\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mset_attributes(group, attributes)\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/utils.py:583\u001b[0m, in \u001b[0;36mdocval.<locals>.dec.<locals>.func_call\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 581\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfunc_call\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 582\u001b[0m pargs \u001b[38;5;241m=\u001b[39m _check_args(args, kwargs)\n\u001b[1;32m--> 583\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpargs\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/hdmf/backends/hdf5/h5tools.py:1054\u001b[0m, in \u001b[0;36mHDF5IO.write_link\u001b[1;34m(self, **kwargs)\u001b[0m\n\u001b[0;32m 1052\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcannot create external link to \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m path\n\u001b[0;32m 1053\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(msg)\n\u001b[1;32m-> 1054\u001b[0m parent[name] \u001b[38;5;241m=\u001b[39m link_obj\n\u001b[0;32m 1055\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__set_written(builder)\n\u001b[0;32m 1056\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m link_obj\n", | |
"File \u001b[1;32m~/.pyenv/versions/3.9.7/envs/pdtools/lib/python3.9/site-packages/h5py/_hl/group.py:424\u001b[0m, in \u001b[0;36mGroup.__setitem__\u001b[1;34m(self, name, obj)\u001b[0m\n\u001b[0;32m 422\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(obj, ExternalLink):\n\u001b[0;32m 423\u001b[0m fn \u001b[38;5;241m=\u001b[39m filename_encode(obj\u001b[38;5;241m.\u001b[39mfilename)\n\u001b[1;32m--> 424\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mid\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlinks\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_external\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_e\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 425\u001b[0m \u001b[43m \u001b[49m\u001b[43mlcpl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlcpl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlapl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_lapl\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 427\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(obj, numpy\u001b[38;5;241m.\u001b[39mdtype):\n\u001b[0;32m 428\u001b[0m htype \u001b[38;5;241m=\u001b[39m h5t\u001b[38;5;241m.\u001b[39mpy_create(obj, logical\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n", | |
"File \u001b[1;32mh5py/_objects.pyx:54\u001b[0m, in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[1;34m()\u001b[0m\n", | |
"File \u001b[1;32mh5py/_objects.pyx:55\u001b[0m, in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[1;34m()\u001b[0m\n", | |
"File \u001b[1;32mh5py/h5l.pyx:157\u001b[0m, in \u001b[0;36mh5py.h5l.LinkProxy.create_external\u001b[1;34m()\u001b[0m\n", | |
"\u001b[1;31mRuntimeError\u001b[0m: Unable to create external link (name already exists)" | |
] | |
} | |
], | |
"source": [ | |
"with NWBHDF5IO('nwb-etl.nwb', mode='r+') as etl_io:\n", | |
" nwb_etl = etl_io.read()\n", | |
" acq = nwb_etl.get_acquisition('raw_acq')\n", | |
" acq_data = acq.data[:]\n", | |
" lowpass_data = np.column_stack([np.convolve(col, np.ones(10) / 10.0, mode='same') for col in acq_data.T])\n", | |
" highpass_data = acq_data - lowpass_data\n", | |
" electrode_region = nwb_etl.create_electrode_table_region(list(range(5)), 'filter electrodes')\n", | |
" # electrode_region = acq.electrodes\n", | |
" filt_ephys = ElectricalSeries('highpass', highpass_data, electrode_region, \n", | |
" starting_time=acq.starting_time, rate=acq.rate, filtering='diffs')\n", | |
" mod = nwb_etl.processing['filtered_ephys']\n", | |
" filter_container = mod.data_interfaces['filtered_datasets']\n", | |
" filter_container.add_electrical_series(filt_ephys)\n", | |
" etl_io.write(nwb_etl)" | |
] | |
}, | |
{ | |
"cell_type": "raw", | |
"id": "9e928c95-27f3-4406-94c8-0ac4da58ed5e", | |
"metadata": {}, | |
"source": [ | |
"! h5dump -n 1 nwb-etl.nwb" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "2ac44d23-d42d-4840-bea1-07d2ad4f2ffc", | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"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.7" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment