Skip to content

Instantly share code, notes, and snippets.

@miketrumpis
Created March 19, 2022 01:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miketrumpis/1779483dd9fa43e06cc86bc43952611c to your computer and use it in GitHub Desktop.
Save miketrumpis/1779483dd9fa43e06cc86bc43952611c to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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