hdmf-dev / hdmf

The Hierarchical Data Modeling Framework
http://hdmf.readthedocs.io
Other
47 stars 26 forks source link

[Bug]: Error reading nwb file in latest version of hdmf (3.3.1) #739

Closed lfrank closed 2 years ago

lfrank commented 2 years ago

What happened?

Reading our nwb files fails with the newest version of hdmf, but works with 3.2.1

@rly has access to our nwb files and may be the best person to look at this if the traceback below doesn't make the solution obvious.

Steps to Reproduce

try to read an existing nwb file (perhaps only one that has our extensions)

Traceback

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1248, in ObjectMapper.construct(self, **kwargs)
   1247 try:
-> 1248     obj = self.__new_container__(cls, builder.source, parent, builder.attributes.get(self.__spec.id_key()),
   1249                                  **kwargs)
   1250 except Exception as ex:

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1258, in ObjectMapper.__new_container__(self, cls, container_source, parent, object_id, **kwargs)
   1257 obj = cls.__new__(cls, container_source=container_source, parent=parent, object_id=object_id)
-> 1258 obj.__init__(**kwargs)
   1259 return obj

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:593, in docval.<locals>.dec.<locals>.func_call(*args, **kwargs)
    592 pargs = _check_args(args, kwargs)
--> 593 return func(args[0], **pargs)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/classgenerator.py:306, in CustomClassGenerator.set_init.<locals>.__init__(self, **kwargs)
    305     new_kwargs[f] = popargs(f, kwargs) if f in kwargs else None
--> 306 base.__init__(self, **kwargs)  # special case: need to pass self to __init__
    307 for f, arg_val in new_kwargs.items():

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:592, in docval.<locals>.dec.<locals>.func_call(*args, **kwargs)
    591 def func_call(*args, **kwargs):
--> 592     pargs = _check_args(args, kwargs)
    593     return func(args[0], **pargs)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:585, in docval.<locals>.dec.<locals>._check_args(args, kwargs)
    584         msg = '%s: %s' % (func.__qualname__, ', '.join(parse_err))
--> 585         raise ExceptionType(msg)
    587 return parsed['args']

TypeError: AbstractContainer.__init__: Expected at most 1 arguments ['name'], got 3: 0 positional and 3 keyword ['description', 'manufacturer', 'name']

The above exception was the direct cause of the following exception:

ConstructError                            Traceback (most recent call last)
Input In [3], in <cell line: 2>()
      1 nwbf = 'senor20201030_.nwb'
----> 2 (IntervalPositionInfo & {'nwb_file_name': nwbf}).fetch_nwb()

File ~/Src/NWB/spyglass/src/spyglass/common/common_position.py:308, in IntervalPositionInfo.fetch_nwb(self, *attrs, **kwargs)
    307 def fetch_nwb(self, *attrs, **kwargs):
--> 308     return fetch_nwb(self,
    309                      (AnalysisNwbfile,
    310                       'analysis_file_abs_path'),
    311                      *attrs, **kwargs)

File ~/Src/NWB/spyglass/src/spyglass/common/dj_helper_fn.py:82, in fetch_nwb(query_expression, nwb_master, *attrs, **kwargs)
     80 ret = []
     81 for rec_dict in rec_dicts:
---> 82     nwbf = get_nwb_file(rec_dict.pop('nwb2load_filepath'))
     83     # for each attr that contains substring 'object_id', store key-value: attr name to NWB object
     84     # remove '_object_id' from attr name
     85     nwb_objs = {
     86         id_attr.replace("_object_id", ""): _get_nwb_object(nwbf.objects, rec_dict[id_attr])
     87         for id_attr in attrs
     88         if 'object_id' in id_attr and rec_dict[id_attr] != ''}

File ~/Src/NWB/spyglass/src/spyglass/common/nwb_helper_fn.py:33, in get_nwb_file(nwb_file_path)
     30 if nwbfile is None:
     31     io = pynwb.NWBHDF5IO(path=nwb_file_path, mode='r',
     32                          load_namespaces=True)  # keep file open
---> 33     nwbfile = io.read()
     34     __open_nwb_files[nwb_file_path] = (io, nwbfile)
     35 return nwbfile

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/backends/hdf5/h5tools.py:447, in HDF5IO.read(self, **kwargs)
    444     raise UnsupportedOperation("Cannot read from file %s in mode '%s'. Please use mode 'r', 'r+', or 'a'."
    445                                % (self.source, self.__mode))
    446 try:
--> 447     return call_docval_func(super().read, kwargs)
    448 except UnsupportedOperation as e:
    449     if str(e) == 'Cannot build data. There are no values.':  # pragma: no cover

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:434, in call_docval_func(func, kwargs)
    432 def call_docval_func(func, kwargs):
    433     fargs, fkwargs = fmt_docval_args(func, kwargs)
--> 434     return func(*fargs, **fkwargs)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:593, in docval.<locals>.dec.<locals>.func_call(*args, **kwargs)
    591 def func_call(*args, **kwargs):
    592     pargs = _check_args(args, kwargs)
--> 593     return func(args[0], **pargs)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/backends/io.py:42, in HDMFIO.read(self, **kwargs)
     39 if all(len(v) == 0 for v in f_builder.values()):
     40     # TODO also check that the keys are appropriate. print a better error message
     41     raise UnsupportedOperation('Cannot build data. There are no values.')
---> 42 container = self.__manager.construct(f_builder)
     43 return container

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:593, in docval.<locals>.dec.<locals>.func_call(*args, **kwargs)
    591 def func_call(*args, **kwargs):
    592     pargs = _check_args(args, kwargs)
--> 593     return func(args[0], **pargs)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/manager.py:280, in BuildManager.construct(self, **kwargs)
    276     result = self.__type_map.construct(builder, self, parent)
    277 else:
    278     # we are at the top of the hierarchy,
    279     # so it must be time to resolve parents
--> 280     result = self.__type_map.construct(builder, self, None)
    281     self.__resolve_parents(result)
    282 self.prebuilt(result, builder)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:593, in docval.<locals>.dec.<locals>.func_call(*args, **kwargs)
    591 def func_call(*args, **kwargs):
    592     pargs = _check_args(args, kwargs)
--> 593     return func(args[0], **pargs)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/manager.py:794, in TypeMap.construct(self, **kwargs)
    792     raise ValueError('No ObjectMapper found for builder of type %s' % dt)
    793 else:
--> 794     return obj_mapper.construct(builder, build_manager, parent)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:593, in docval.<locals>.dec.<locals>.func_call(*args, **kwargs)
    591 def func_call(*args, **kwargs):
    592     pargs = _check_args(args, kwargs)
--> 593     return func(args[0], **pargs)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1218, in ObjectMapper.construct(self, **kwargs)
   1216 cls = manager.get_cls(builder)
   1217 # gather all subspecs
-> 1218 subspecs = self.__get_subspec_values(builder, self.spec, manager)
   1219 # get the constructor argument that each specification corresponds to
   1220 const_args = dict()

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1147, in ObjectMapper.__get_subspec_values(self, builder, spec, manager)
   1145                 ret[subspec] = self.__flatten(sub_builder, subspec, manager)
   1146     # now process groups and datasets
-> 1147     self.__get_sub_builders(groups, spec.groups, manager, ret)
   1148     self.__get_sub_builders(datasets, spec.datasets, manager, ret)
   1149 elif isinstance(spec, DatasetSpec):

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1198, in ObjectMapper.__get_sub_builders(self, sub_builders, subspecs, manager, ret)
   1195     continue
   1196 if dt is None:
   1197     # recurse
-> 1198     ret.update(self.__get_subspec_values(sub_builder, subspec, manager))
   1199 else:
   1200     ret[subspec] = manager.construct(sub_builder)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1147, in ObjectMapper.__get_subspec_values(self, builder, spec, manager)
   1145                 ret[subspec] = self.__flatten(sub_builder, subspec, manager)
   1146     # now process groups and datasets
-> 1147     self.__get_sub_builders(groups, spec.groups, manager, ret)
   1148     self.__get_sub_builders(datasets, spec.datasets, manager, ret)
   1149 elif isinstance(spec, DatasetSpec):

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1198, in ObjectMapper.__get_sub_builders(self, sub_builders, subspecs, manager, ret)
   1195     continue
   1196 if dt is None:
   1197     # recurse
-> 1198     ret.update(self.__get_subspec_values(sub_builder, subspec, manager))
   1199 else:
   1200     ret[subspec] = manager.construct(sub_builder)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1147, in ObjectMapper.__get_subspec_values(self, builder, spec, manager)
   1145                 ret[subspec] = self.__flatten(sub_builder, subspec, manager)
   1146     # now process groups and datasets
-> 1147     self.__get_sub_builders(groups, spec.groups, manager, ret)
   1148     self.__get_sub_builders(datasets, spec.datasets, manager, ret)
   1149 elif isinstance(spec, DatasetSpec):

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1190, in ObjectMapper.__get_sub_builders(self, sub_builders, subspecs, manager, ret)
   1188     sub_builder = builder_dt.get(dt)
   1189     if sub_builder is not None:
-> 1190         sub_builder = self.__flatten(sub_builder, subspec, manager)
   1191         ret[subspec] = sub_builder
   1192 else:

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1203, in ObjectMapper.__flatten(self, sub_builder, subspec, manager)
   1202 def __flatten(self, sub_builder, subspec, manager):
-> 1203     tmp = [manager.construct(b) for b in sub_builder]
   1204     if len(tmp) == 1 and not subspec.is_many():
   1205         tmp = tmp[0]

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1203, in <listcomp>(.0)
   1202 def __flatten(self, sub_builder, subspec, manager):
-> 1203     tmp = [manager.construct(b) for b in sub_builder]
   1204     if len(tmp) == 1 and not subspec.is_many():
   1205         tmp = tmp[0]

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:593, in docval.<locals>.dec.<locals>.func_call(*args, **kwargs)
    591 def func_call(*args, **kwargs):
    592     pargs = _check_args(args, kwargs)
--> 593     return func(args[0], **pargs)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/manager.py:276, in BuildManager.construct(self, **kwargs)
    274 if parent_builder is not None:
    275     parent = self._get_proxy_builder(parent_builder)
--> 276     result = self.__type_map.construct(builder, self, parent)
    277 else:
    278     # we are at the top of the hierarchy,
    279     # so it must be time to resolve parents
    280     result = self.__type_map.construct(builder, self, None)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:593, in docval.<locals>.dec.<locals>.func_call(*args, **kwargs)
    591 def func_call(*args, **kwargs):
    592     pargs = _check_args(args, kwargs)
--> 593     return func(args[0], **pargs)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/manager.py:794, in TypeMap.construct(self, **kwargs)
    792     raise ValueError('No ObjectMapper found for builder of type %s' % dt)
    793 else:
--> 794     return obj_mapper.construct(builder, build_manager, parent)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/utils.py:593, in docval.<locals>.dec.<locals>.func_call(*args, **kwargs)
    591 def func_call(*args, **kwargs):
    592     pargs = _check_args(args, kwargs)
--> 593     return func(args[0], **pargs)

File ~/anaconda3/envs/spyglass/lib/python3.8/site-packages/hdmf/build/objectmapper.py:1252, in ObjectMapper.construct(self, **kwargs)
   1250 except Exception as ex:
   1251     msg = 'Could not construct %s object due to: %s' % (cls.__name__, ex)
-> 1252     raise ConstructError(builder, msg) from ex
   1253 return obj

ConstructError: (root/general/devices/probe 0 GroupBuilder {'attributes': {'contact_side_numbering': True, 'contact_size': 15.0, 'id': 0, 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'Probe', 'object_id': '1dfc1de2-5f33-4633-a435-888cf8d2e45b', 'probe_description': '128 channel polyimide probe', 'probe_type': '128c-4s6mm6cm-15um-26um-sl', 'units': 'um'}, 'groups': {'0': root/general/devices/probe 0/0 GroupBuilder {'attributes': {'name': '0', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'Shank', 'object_id': 'b1199e77-70cd-4ebe-a7ba-782109909421'}, 'groups': {'0': root/general/devices/probe 0/0/0 GroupBuilder {'attributes': {'name': '0', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '7e7aef41-894c-4cff-9aff-df2c872d5703', 'rel_x': 0.0, 'rel_y': 0.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '1': root/general/devices/probe 0/0/1 GroupBuilder {'attributes': {'name': '1', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '8009d6b8-ab36-4948-a1fa-3c6f191f183b', 'rel_x': 0.0, 'rel_y': -26.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '10': root/general/devices/probe 0/0/10 GroupBuilder {'attributes': {'name': '10', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'c2d8a792-27ac-4e56-8254-074b65b0b58e', 'rel_x': 0.0, 'rel_y': -260.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '11': root/general/devices/probe 0/0/11 GroupBuilder {'attributes': {'name': '11', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '758a184a-a769-4d3f-a32a-c9c2e345a24b', 'rel_x': 0.0, 'rel_y': -286.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '12': root/general/devices/probe 0/0/12 GroupBuilder {'attributes': {'name': '12', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'c06826ea-8dfa-49fc-9e77-b25645ffae1e', 'rel_x': 0.0, 'rel_y': -312.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '13': root/general/devices/probe 0/0/13 GroupBuilder {'attributes': {'name': '13', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '53f6f0c9-c69b-43c6-9c5a-4a1fde03ae97', 'rel_x': 0.0, 'rel_y': -338.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '14': root/general/devices/probe 0/0/14 GroupBuilder {'attributes': {'name': '14', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '76c7d169-5b73-4f48-94b8-91185b0f2c3f', 'rel_x': 0.0, 'rel_y': -364.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '15': root/general/devices/probe 0/0/15 GroupBuilder {'attributes': {'name': '15', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'bc9f09a3-6f1a-47c2-9eda-41ec1cf021f4', 'rel_x': 0.0, 'rel_y': -390.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '16': root/general/devices/probe 0/0/16 GroupBuilder {'attributes': {'name': '16', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '3461a16d-ab9b-4b4b-9482-dc4ece92e75f', 'rel_x': 0.0, 'rel_y': -416.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '17': root/general/devices/probe 0/0/17 GroupBuilder {'attributes': {'name': '17', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'df93b8b5-850a-4888-ab1d-15dc31cf1942', 'rel_x': 0.0, 'rel_y': -442.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '18': root/general/devices/probe 0/0/18 GroupBuilder {'attributes': {'name': '18', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'cd3639e0-5a04-4055-a7bd-06bcf707cbba', 'rel_x': 0.0, 'rel_y': -468.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '19': root/general/devices/probe 0/0/19 GroupBuilder {'attributes': {'name': '19', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '717ecd4d-7338-4a6f-9343-e98e5ff68975', 'rel_x': 0.0, 'rel_y': -494.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '2': root/general/devices/probe 0/0/2 GroupBuilder {'attributes': {'name': '2', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '75eb2a45-d28f-49d2-b4eb-eef26fd28962', 'rel_x': 0.0, 'rel_y': -52.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '20': root/general/devices/probe 0/0/20 GroupBuilder {'attributes': {'name': '20', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'c4f0c88b-b39a-4c41-90a9-90fa2f315ea7', 'rel_x': 0.0, 'rel_y': -520.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '21': root/general/devices/probe 0/0/21 GroupBuilder {'attributes': {'name': '21', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '29017d2f-155d-4c29-82f1-d5c95e06df43', 'rel_x': 0.0, 'rel_y': -546.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '22': root/general/devices/probe 0/0/22 GroupBuilder {'attributes': {'name': '22', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '56207324-60cf-4c27-873d-bffad83b0f39', 'rel_x': 0.0, 'rel_y': -572.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '23': root/general/devices/probe 0/0/23 GroupBuilder {'attributes': {'name': '23', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '34da2563-b8e7-43c6-baf1-279c64d00f9f', 'rel_x': 0.0, 'rel_y': -598.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '24': root/general/devices/probe 0/0/24 GroupBuilder {'attributes': {'name': '24', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'd9be8e61-10b7-4171-a8a3-da79b47fa11f', 'rel_x': 0.0, 'rel_y': -624.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '25': root/general/devices/probe 0/0/25 GroupBuilder {'attributes': {'name': '25', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '8e83d25f-a2bd-4357-bccf-25e06bc27afa', 'rel_x': 0.0, 'rel_y': -650.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '26': root/general/devices/probe 0/0/26 GroupBuilder {'attributes': {'name': '26', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'c9780c82-1dd0-4851-88db-84f00d35357a', 'rel_x': 0.0, 'rel_y': -676.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '27': root/general/devices/probe 0/0/27 GroupBuilder {'attributes': {'name': '27', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '2c40c560-0883-424e-b826-c5f46acc4e92', 'rel_x': 0.0, 'rel_y': -702.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '28': root/general/devices/probe 0/0/28 GroupBuilder {'attributes': {'name': '28', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '2906b597-c149-40e2-907a-b4bd065811d5', 'rel_x': 0.0, 'rel_y': -728.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '29': root/general/devices/probe 0/0/29 GroupBuilder {'attributes': {'name': '29', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '6ee299bd-c7d0-49cb-8895-33808f0f6717', 'rel_x': 0.0, 'rel_y': -754.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '3': root/general/devices/probe 0/0/3 GroupBuilder {'attributes': {'name': '3', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'f23cd281-d591-4573-8d42-77fa0cd38da8', 'rel_x': 0.0, 'rel_y': -78.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '30': root/general/devices/probe 0/0/30 GroupBuilder {'attributes': {'name': '30', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '97a88e13-47d3-4ecc-8c66-f8f19c87b827', 'rel_x': 0.0, 'rel_y': -780.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '31': root/general/devices/probe 0/0/31 GroupBuilder {'attributes': {'name': '31', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '44405943-1d1e-447f-b085-653e418c21ac', 'rel_x': 0.0, 'rel_y': -806.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '4': root/general/devices/probe 0/0/4 GroupBuilder {'attributes': {'name': '4', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'db6fbb3b-efc5-46c8-8cc2-4e86d7c43552', 'rel_x': 0.0, 'rel_y': -104.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '5': root/general/devices/probe 0/0/5 GroupBuilder {'attributes': {'name': '5', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'ff1f701a-5cfc-4fc8-84bd-28efb6994efc', 'rel_x': 0.0, 'rel_y': -130.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '6': root/general/devices/probe 0/0/6 GroupBuilder {'attributes': {'name': '6', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'eb887e6d-0ff0-4979-9b17-53478ba26149', 'rel_x': 0.0, 'rel_y': -156.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '7': root/general/devices/probe 0/0/7 GroupBuilder {'attributes': {'name': '7', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'df4980a9-2fe4-4d80-81b5-4a27ee94b057', 'rel_x': 0.0, 'rel_y': -182.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '8': root/general/devices/probe 0/0/8 GroupBuilder {'attributes': {'name': '8', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '0a850e6f-c85f-4cb7-9efa-29421c953724', 'rel_x': 0.0, 'rel_y': -208.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '9': root/general/devices/probe 0/0/9 GroupBuilder {'attributes': {'name': '9', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '82984549-71d2-45ce-9d74-f3508bf2a291', 'rel_x': 0.0, 'rel_y': -234.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}}, 'datasets': {}, 'links': {}}, '1': root/general/devices/probe 0/1 GroupBuilder {'attributes': {'name': '1', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'Shank', 'object_id': '00502493-5a3d-4288-bc3a-6653bdae5f32'}, 'groups': {'32': root/general/devices/probe 0/1/32 GroupBuilder {'attributes': {'name': '32', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'a23e422d-2049-4436-97af-9e709a06043b', 'rel_x': 350.0, 'rel_y': 0.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '33': root/general/devices/probe 0/1/33 GroupBuilder {'attributes': {'name': '33', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'd8396d5d-9366-430a-a5d6-908603af4829', 'rel_x': 350.0, 'rel_y': -26.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '34': root/general/devices/probe 0/1/34 GroupBuilder {'attributes': {'name': '34', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'e3ed52bc-8cf2-4fcf-874e-f4d0f072a581', 'rel_x': 350.0, 'rel_y': -52.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '35': root/general/devices/probe 0/1/35 GroupBuilder {'attributes': {'name': '35', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '86d6e1ed-e0ec-4060-82f6-56abd717c0fd', 'rel_x': 350.0, 'rel_y': -78.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '36': root/general/devices/probe 0/1/36 GroupBuilder {'attributes': {'name': '36', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '55196b0b-106c-4a92-9d3b-908e6ff900ff', 'rel_x': 350.0, 'rel_y': -104.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '37': root/general/devices/probe 0/1/37 GroupBuilder {'attributes': {'name': '37', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '829716ca-1c66-4751-b31f-b42dce8006a3', 'rel_x': 350.0, 'rel_y': -130.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '38': root/general/devices/probe 0/1/38 GroupBuilder {'attributes': {'name': '38', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '200ec0a4-0e79-45ce-a9ff-1a12f6fdc37b', 'rel_x': 350.0, 'rel_y': -156.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '39': root/general/devices/probe 0/1/39 GroupBuilder {'attributes': {'name': '39', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '471df859-05ab-440b-acaf-5e71ac33bc14', 'rel_x': 350.0, 'rel_y': -182.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '40': root/general/devices/probe 0/1/40 GroupBuilder {'attributes': {'name': '40', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'a87392fe-859c-454c-b738-df906400c3dc', 'rel_x': 350.0, 'rel_y': -208.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '41': root/general/devices/probe 0/1/41 GroupBuilder {'attributes': {'name': '41', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'c17cfc3e-6188-4fb9-ad48-c9e0677cfd26', 'rel_x': 350.0, 'rel_y': -234.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '42': root/general/devices/probe 0/1/42 GroupBuilder {'attributes': {'name': '42', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '0e27875f-7b7b-4f77-95f6-c53cfad7e03f', 'rel_x': 350.0, 'rel_y': -260.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '43': root/general/devices/probe 0/1/43 GroupBuilder {'attributes': {'name': '43', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '9762a2da-be1e-494a-b86f-eae123af42ee', 'rel_x': 350.0, 'rel_y': -286.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '44': root/general/devices/probe 0/1/44 GroupBuilder {'attributes': {'name': '44', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '88f5df45-7e5f-4200-b391-46cc5b3ac603', 'rel_x': 350.0, 'rel_y': -312.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '45': root/general/devices/probe 0/1/45 GroupBuilder {'attributes': {'name': '45', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '6a62d1b5-aed1-478d-afac-e7a19aa8dc96', 'rel_x': 350.0, 'rel_y': -338.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '46': root/general/devices/probe 0/1/46 GroupBuilder {'attributes': {'name': '46', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '0b27f376-698b-43db-853c-c7e004ac8579', 'rel_x': 350.0, 'rel_y': -364.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '47': root/general/devices/probe 0/1/47 GroupBuilder {'attributes': {'name': '47', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '7780c9f3-1035-4d5b-894a-a44d028d595b', 'rel_x': 350.0, 'rel_y': -390.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '48': root/general/devices/probe 0/1/48 GroupBuilder {'attributes': {'name': '48', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '21bba8b8-14e1-406e-a52f-da67e35b68ae', 'rel_x': 350.0, 'rel_y': -416.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '49': root/general/devices/probe 0/1/49 GroupBuilder {'attributes': {'name': '49', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '04cd2f28-6c98-458b-8c6d-04870bf6c7be', 'rel_x': 350.0, 'rel_y': -442.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '50': root/general/devices/probe 0/1/50 GroupBuilder {'attributes': {'name': '50', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'a4423d5a-921c-49f7-a52c-e8f8bf83a3f0', 'rel_x': 350.0, 'rel_y': -468.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '51': root/general/devices/probe 0/1/51 GroupBuilder {'attributes': {'name': '51', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '96f595d3-99d6-4d7d-b0c7-8a3f2b51edc1', 'rel_x': 350.0, 'rel_y': -494.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '52': root/general/devices/probe 0/1/52 GroupBuilder {'attributes': {'name': '52', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '64fbb710-997a-4bd6-83a5-fc5285b765ad', 'rel_x': 350.0, 'rel_y': -520.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '53': root/general/devices/probe 0/1/53 GroupBuilder {'attributes': {'name': '53', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '9ff89843-1b66-4cbb-ad28-29fd7e287633', 'rel_x': 350.0, 'rel_y': -546.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '54': root/general/devices/probe 0/1/54 GroupBuilder {'attributes': {'name': '54', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'a3e6bf34-eed4-46b7-bf0e-6dd85219f1d4', 'rel_x': 350.0, 'rel_y': -572.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '55': root/general/devices/probe 0/1/55 GroupBuilder {'attributes': {'name': '55', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '16952a3c-b382-4138-bbad-53be00dac612', 'rel_x': 350.0, 'rel_y': -598.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '56': root/general/devices/probe 0/1/56 GroupBuilder {'attributes': {'name': '56', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '261f2145-5077-4d19-a633-8c7c32be6eae', 'rel_x': 350.0, 'rel_y': -624.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '57': root/general/devices/probe 0/1/57 GroupBuilder {'attributes': {'name': '57', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '9190f199-392f-4715-af95-7d10b5e87307', 'rel_x': 350.0, 'rel_y': -650.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '58': root/general/devices/probe 0/1/58 GroupBuilder {'attributes': {'name': '58', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '97050e9b-24e5-45cd-9193-e028401cd1df', 'rel_x': 350.0, 'rel_y': -676.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '59': root/general/devices/probe 0/1/59 GroupBuilder {'attributes': {'name': '59', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '7f9f9e0d-cf5b-4910-a85b-ec9a5dd9c432', 'rel_x': 350.0, 'rel_y': -702.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '60': root/general/devices/probe 0/1/60 GroupBuilder {'attributes': {'name': '60', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '872ea668-8a7c-45e5-bd05-85194a2ef131', 'rel_x': 350.0, 'rel_y': -728.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '61': root/general/devices/probe 0/1/61 GroupBuilder {'attributes': {'name': '61', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '7125b5d0-9009-4063-8cc2-71917bab9852', 'rel_x': 350.0, 'rel_y': -754.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '62': root/general/devices/probe 0/1/62 GroupBuilder {'attributes': {'name': '62', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'a02efedc-6019-48d6-92f2-015806fea706', 'rel_x': 350.0, 'rel_y': -780.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '63': root/general/devices/probe 0/1/63 GroupBuilder {'attributes': {'name': '63', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'a588a3c1-2f54-4c8a-b85e-d373c2e68fc0', 'rel_x': 350.0, 'rel_y': -806.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}}, 'datasets': {}, 'links': {}}, '2': root/general/devices/probe 0/2 GroupBuilder {'attributes': {'name': '2', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'Shank', 'object_id': 'c64a3ddc-6255-4f5d-9366-729a9a4653e0'}, 'groups': {'64': root/general/devices/probe 0/2/64 GroupBuilder {'attributes': {'name': '64', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '45693edb-fec6-4c77-87d9-56d4c3becaa5', 'rel_x': 774.0, 'rel_y': 0.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '65': root/general/devices/probe 0/2/65 GroupBuilder {'attributes': {'name': '65', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'e6af69ac-8257-44e1-a37b-ebc7e18953b2', 'rel_x': 774.0, 'rel_y': -26.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '66': root/general/devices/probe 0/2/66 GroupBuilder {'attributes': {'name': '66', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'b343f933-b084-4389-b5c7-f39c1350659c', 'rel_x': 774.0, 'rel_y': -52.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '67': root/general/devices/probe 0/2/67 GroupBuilder {'attributes': {'name': '67', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '7173f9e8-d560-4d22-9843-569591a47776', 'rel_x': 774.0, 'rel_y': -78.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '68': root/general/devices/probe 0/2/68 GroupBuilder {'attributes': {'name': '68', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '74178c2c-a159-4ccf-8d13-f4f73282067d', 'rel_x': 774.0, 'rel_y': -104.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '69': root/general/devices/probe 0/2/69 GroupBuilder {'attributes': {'name': '69', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'be24ffc1-eccb-4760-92dd-257be45f98b3', 'rel_x': 774.0, 'rel_y': -130.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '70': root/general/devices/probe 0/2/70 GroupBuilder {'attributes': {'name': '70', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'aa994673-50a8-46c4-a1e4-a3d019dccd08', 'rel_x': 774.0, 'rel_y': -156.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '71': root/general/devices/probe 0/2/71 GroupBuilder {'attributes': {'name': '71', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '101023f4-b49d-4054-bb36-4ebe25a4ff42', 'rel_x': 774.0, 'rel_y': -182.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '72': root/general/devices/probe 0/2/72 GroupBuilder {'attributes': {'name': '72', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '96d82b53-419a-4280-9658-4c92de08168f', 'rel_x': 774.0, 'rel_y': -208.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '73': root/general/devices/probe 0/2/73 GroupBuilder {'attributes': {'name': '73', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '2e08ba0d-66c6-45a1-a0fe-05b9d20cc7c5', 'rel_x': 774.0, 'rel_y': -234.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '74': root/general/devices/probe 0/2/74 GroupBuilder {'attributes': {'name': '74', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '881c8377-911b-4ab6-b8c3-5ce70ff52df7', 'rel_x': 774.0, 'rel_y': -260.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '75': root/general/devices/probe 0/2/75 GroupBuilder {'attributes': {'name': '75', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'e59788d1-1878-47a3-aead-39acc898b0e4', 'rel_x': 774.0, 'rel_y': -286.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '76': root/general/devices/probe 0/2/76 GroupBuilder {'attributes': {'name': '76', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '4475959b-6a0e-432a-b169-4ea41a0e35c5', 'rel_x': 774.0, 'rel_y': -312.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '77': root/general/devices/probe 0/2/77 GroupBuilder {'attributes': {'name': '77', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'ac5bec70-d237-4adb-bf9c-67fd60641d3c', 'rel_x': 774.0, 'rel_y': -338.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '78': root/general/devices/probe 0/2/78 GroupBuilder {'attributes': {'name': '78', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '98dfaa2a-a138-4ff3-a3ca-bc7ca8d45eda', 'rel_x': 774.0, 'rel_y': -364.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '79': root/general/devices/probe 0/2/79 GroupBuilder {'attributes': {'name': '79', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'd4eeaf06-a152-48f0-b67d-6b393ed93b0a', 'rel_x': 774.0, 'rel_y': -390.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '80': root/general/devices/probe 0/2/80 GroupBuilder {'attributes': {'name': '80', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '5b3da876-e498-4b12-8a80-30716814ec56', 'rel_x': 774.0, 'rel_y': -416.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '81': root/general/devices/probe 0/2/81 GroupBuilder {'attributes': {'name': '81', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '897aa2e2-7deb-420f-a545-9d4c86798eba', 'rel_x': 774.0, 'rel_y': -442.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '82': root/general/devices/probe 0/2/82 GroupBuilder {'attributes': {'name': '82', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '54e05d42-91b7-471f-bf20-7b306cd59903', 'rel_x': 774.0, 'rel_y': -468.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '83': root/general/devices/probe 0/2/83 GroupBuilder {'attributes': {'name': '83', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '9198fdcd-d929-425d-b035-27f925c0f015', 'rel_x': 774.0, 'rel_y': -494.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '84': root/general/devices/probe 0/2/84 GroupBuilder {'attributes': {'name': '84', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '10925411-48e7-4cb0-9f84-6441ec74da8f', 'rel_x': 774.0, 'rel_y': -520.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '85': root/general/devices/probe 0/2/85 GroupBuilder {'attributes': {'name': '85', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '813b8cff-5294-4f79-97a7-7f07fd2c5762', 'rel_x': 774.0, 'rel_y': -546.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '86': root/general/devices/probe 0/2/86 GroupBuilder {'attributes': {'name': '86', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '7530be0d-f2d6-4cf7-b44a-e7e92bf18bc1', 'rel_x': 774.0, 'rel_y': -572.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '87': root/general/devices/probe 0/2/87 GroupBuilder {'attributes': {'name': '87', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '7f35300c-af9c-4494-b302-bd9e09ecd1ec', 'rel_x': 774.0, 'rel_y': -598.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '88': root/general/devices/probe 0/2/88 GroupBuilder {'attributes': {'name': '88', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'f301e6e5-a2e8-460b-aefe-437e44eebf4d', 'rel_x': 774.0, 'rel_y': -624.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '89': root/general/devices/probe 0/2/89 GroupBuilder {'attributes': {'name': '89', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'f6e0a865-cf0c-4589-95c9-335d1ac8e32b', 'rel_x': 774.0, 'rel_y': -650.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '90': root/general/devices/probe 0/2/90 GroupBuilder {'attributes': {'name': '90', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'c7d98547-0e55-4406-b4b1-42469aad789e', 'rel_x': 774.0, 'rel_y': -676.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '91': root/general/devices/probe 0/2/91 GroupBuilder {'attributes': {'name': '91', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '7b396e2c-0dc6-4a01-9c00-8e2072199ea6', 'rel_x': 774.0, 'rel_y': -702.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '92': root/general/devices/probe 0/2/92 GroupBuilder {'attributes': {'name': '92', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '38034fd0-6a2d-4dee-b85a-07900093648e', 'rel_x': 774.0, 'rel_y': -728.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '93': root/general/devices/probe 0/2/93 GroupBuilder {'attributes': {'name': '93', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'cb9f442c-2ec2-473b-bcd4-d7a4d7658412', 'rel_x': 774.0, 'rel_y': -754.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '94': root/general/devices/probe 0/2/94 GroupBuilder {'attributes': {'name': '94', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '8b2c387f-6632-46ed-a77d-3fbdd3691f29', 'rel_x': 774.0, 'rel_y': -780.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '95': root/general/devices/probe 0/2/95 GroupBuilder {'attributes': {'name': '95', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'fa23bebe-dce2-451e-980d-33e0543f13d0', 'rel_x': 774.0, 'rel_y': -806.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}}, 'datasets': {}, 'links': {}}, '3': root/general/devices/probe 0/3 GroupBuilder {'attributes': {'name': '3', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'Shank', 'object_id': 'a768b9ef-abe1-4d01-8a6d-b49348d98945'}, 'groups': {'100': root/general/devices/probe 0/3/100 GroupBuilder {'attributes': {'name': '100', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '24717839-526a-4635-927f-c97127211af8', 'rel_x': 1124.0, 'rel_y': -104.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '101': root/general/devices/probe 0/3/101 GroupBuilder {'attributes': {'name': '101', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'ff33dbff-6e72-4267-98a9-8f7d99a33b1e', 'rel_x': 1124.0, 'rel_y': -130.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '102': root/general/devices/probe 0/3/102 GroupBuilder {'attributes': {'name': '102', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'd8392f58-f142-49ad-8b0d-5bb9ea393083', 'rel_x': 1124.0, 'rel_y': -156.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '103': root/general/devices/probe 0/3/103 GroupBuilder {'attributes': {'name': '103', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '6963217d-b060-41ab-baa1-2c0303ad05fb', 'rel_x': 1124.0, 'rel_y': -182.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '104': root/general/devices/probe 0/3/104 GroupBuilder {'attributes': {'name': '104', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '21880f42-b835-42e7-9b18-d909a369b142', 'rel_x': 1124.0, 'rel_y': -208.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '105': root/general/devices/probe 0/3/105 GroupBuilder {'attributes': {'name': '105', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '8ad4d5f4-c1e1-4fe9-9592-cdf3a1c250c7', 'rel_x': 1124.0, 'rel_y': -234.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '106': root/general/devices/probe 0/3/106 GroupBuilder {'attributes': {'name': '106', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '2d99dc8c-b3af-46d6-89ad-32687cbf6424', 'rel_x': 1124.0, 'rel_y': -260.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '107': root/general/devices/probe 0/3/107 GroupBuilder {'attributes': {'name': '107', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'f991b5d6-66fe-432d-87c8-4397262a546c', 'rel_x': 1124.0, 'rel_y': -286.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '108': root/general/devices/probe 0/3/108 GroupBuilder {'attributes': {'name': '108', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '02f6db33-03db-4dcc-88b8-bbf7d083d0a5', 'rel_x': 1124.0, 'rel_y': -312.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '109': root/general/devices/probe 0/3/109 GroupBuilder {'attributes': {'name': '109', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '2bba1086-be43-42e3-9123-e597e72979dd', 'rel_x': 1124.0, 'rel_y': -338.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '110': root/general/devices/probe 0/3/110 GroupBuilder {'attributes': {'name': '110', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '0d164443-4aa8-4f07-b392-74c755d53eb5', 'rel_x': 1124.0, 'rel_y': -364.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '111': root/general/devices/probe 0/3/111 GroupBuilder {'attributes': {'name': '111', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '66f321f8-90c0-492e-afa1-d2419a6f9dc8', 'rel_x': 1124.0, 'rel_y': -390.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '112': root/general/devices/probe 0/3/112 GroupBuilder {'attributes': {'name': '112', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'a95b22d1-3880-44e4-ad75-6bce2b6ceffa', 'rel_x': 1124.0, 'rel_y': -416.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '113': root/general/devices/probe 0/3/113 GroupBuilder {'attributes': {'name': '113', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '6a557630-6885-4f98-a479-4ab03d977819', 'rel_x': 1124.0, 'rel_y': -442.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '114': root/general/devices/probe 0/3/114 GroupBuilder {'attributes': {'name': '114', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'e0c6b1f6-97a0-49d6-9cbd-f33273736e48', 'rel_x': 1124.0, 'rel_y': -468.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '115': root/general/devices/probe 0/3/115 GroupBuilder {'attributes': {'name': '115', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '6ff9f63a-4322-4386-bd41-f947a52c992b', 'rel_x': 1124.0, 'rel_y': -494.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '116': root/general/devices/probe 0/3/116 GroupBuilder {'attributes': {'name': '116', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'd690f0ed-e05a-41f2-b54d-af2d1959b18a', 'rel_x': 1124.0, 'rel_y': -520.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '117': root/general/devices/probe 0/3/117 GroupBuilder {'attributes': {'name': '117', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '2c02ceb1-f222-445d-a1e8-905d3d66d633', 'rel_x': 1124.0, 'rel_y': -546.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '118': root/general/devices/probe 0/3/118 GroupBuilder {'attributes': {'name': '118', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '5d43fd95-dca4-4a08-b7de-6d49bc6e323b', 'rel_x': 1124.0, 'rel_y': -572.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '119': root/general/devices/probe 0/3/119 GroupBuilder {'attributes': {'name': '119', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'e13517c2-113b-4ede-b8aa-d376e2acfc54', 'rel_x': 1124.0, 'rel_y': -598.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '120': root/general/devices/probe 0/3/120 GroupBuilder {'attributes': {'name': '120', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'c8915905-e0c9-4a54-bbd8-b66d4d77729a', 'rel_x': 1124.0, 'rel_y': -624.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '121': root/general/devices/probe 0/3/121 GroupBuilder {'attributes': {'name': '121', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '6bfc4408-fc1b-4324-9395-9e45b36d134e', 'rel_x': 1124.0, 'rel_y': -650.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '122': root/general/devices/probe 0/3/122 GroupBuilder {'attributes': {'name': '122', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'cc5e6d03-e098-43d1-aa53-a47938664650', 'rel_x': 1124.0, 'rel_y': -676.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '123': root/general/devices/probe 0/3/123 GroupBuilder {'attributes': {'name': '123', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '6c4fd29b-be27-4252-819a-0e6c75ac82b6', 'rel_x': 1124.0, 'rel_y': -702.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '124': root/general/devices/probe 0/3/124 GroupBuilder {'attributes': {'name': '124', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '8e180207-6959-4444-af08-02204e7d23ab', 'rel_x': 1124.0, 'rel_y': -728.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '125': root/general/devices/probe 0/3/125 GroupBuilder {'attributes': {'name': '125', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '1a2e27aa-10cc-4836-ba78-e2e0ec720218', 'rel_x': 1124.0, 'rel_y': -754.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '126': root/general/devices/probe 0/3/126 GroupBuilder {'attributes': {'name': '126', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': '6d081670-af69-4860-a08c-d1677592b60c', 'rel_x': 1124.0, 'rel_y': -780.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '127': root/general/devices/probe 0/3/127 GroupBuilder {'attributes': {'name': '127', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'e6037cd1-45ba-4225-a0f0-d37aaee335a3', 'rel_x': 1124.0, 'rel_y': -806.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '96': root/general/devices/probe 0/3/96 GroupBuilder {'attributes': {'name': '96', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'a6741550-ae18-4436-9a31-63136ba92660', 'rel_x': 1124.0, 'rel_y': 0.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '97': root/general/devices/probe 0/3/97 GroupBuilder {'attributes': {'name': '97', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'f49ce718-391f-4c9f-b315-03669e91a1f5', 'rel_x': 1124.0, 'rel_y': -26.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '98': root/general/devices/probe 0/3/98 GroupBuilder {'attributes': {'name': '98', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'db3539b2-acfb-4279-8559-4487ea3448bd', 'rel_x': 1124.0, 'rel_y': -52.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}, '99': root/general/devices/probe 0/3/99 GroupBuilder {'attributes': {'name': '99', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'ShanksElectrode', 'object_id': 'bfee3a0a-5f91-4584-9273-4e8555fdf4f9', 'rel_x': 1124.0, 'rel_y': -78.0, 'rel_z': 0.0}, 'groups': {}, 'datasets': {}, 'links': {}}}, 'datasets': {}, 'links': {}}}, 'datasets': {}, 'links': {}}, "Could not construct Probe object due to: AbstractContainer.__init__: Expected at most 1 arguments ['name'], got 3: 0 positional and 3 keyword ['description', 'manufacturer', 'name']")

Operating System

Linux

Python Executable

Conda

Python Version

3.8

Package Versions

environment_for_issue.txt

Code of Conduct

oruebel commented 2 years ago

It looks like the error is somehow related to the Probe type as part of the ndx-franklab-novela extension. Somehow it seems to try and call AbstractContainer.__init__ with too many arguments. It's hard for me to tell right now what change exactly triggers this errors, but I think it may have to do with the changes to hdmf/container.py in https://github.com/hdmf-dev/hdmf/pull/730

CodyCBakerPhD commented 2 years ago

Another example of a file on DANDI failing to open that came up in the CI for the NWBInspector...

    with pynwb.NWBHDF5IO(
        path="https://dandiarchive.s3.amazonaws.com/blobs/da5/107/da510761-653e-4b81-a330-9cdae4838180",
        mode="r",
        load_namespaces=True,
        driver="ros3",
    ) as io:
        nwbfile = io.read()

Works fine with hdmf==3.2.1 but fails with hdmf==3.3.1, giving error

TypeError: AbstractContainer.__init__: Expected at most 1 arguments ['name'], got 18: 0 positional and 18 keyword ['bits_per_pixel', 'comments', 'control', 'control_description', 'conversion', 'data', 'description', 'device', 'dimension', 'external_file', 'format', 'name', 'rate', 'resolution', 'starting_frame', 'starting_time', 'timestamps', 'unit']

specifically traced down to

hdmf.build.errors.ConstructError: (root/processing/video_files/video/20170203_KIB_01_s1.1.h264 GroupBuilder {'attributes': {'comments': 'no comments', 'description': 'video of animal behavior from epoch', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'NwbImageSeries', 'object_id': 'b6a33b7f-68a6-41ab-a4eb-c9b06fc82f6b'}, 'groups': {}, 'datasets': {'external_file': root/processing/video_files/video/20170203_KIB_01_s1.1.h264/external_file DatasetBuilder {'attributes': {'starting_frame': array([0])}, 'data': <StrDataset for Closed HDF5 dataset>}, 'format': root/processing/video_files/video/20170203_KIB_01_s1.1.h264/format DatasetBuilder {'attributes': {}, 'data': 'external'}, 'timestamps': root/processing/video_files/video/20170203_KIB_01_s1.1.h264/timestamps DatasetBuilder {'attributes': {'interval': 1, 'unit': 'seconds'}, 'data': <Closed HDF5 dataset>}}, 'links': {'camera_device 0': root/processing/video_files/video/20170203_KIB_01_s1.1.h264/camera_device 0 LinkBuilder {'builder': root/general/devices/camera_device 0 GroupBuilder {'attributes': {'camera_name': 'sleep camera', 'lens': 'Unknown', 'manufacturer': 'Unknown', 'meters_per_pixel': 0.00055, 'model': 'Unknown', 'namespace': 'ndx-franklab-novela', 'neurodata_type': 'CameraDevice', 'object_id': '9e3fa905-100a-4905-9744-c39268747c74'}, 'groups': {}, 'datasets': {}, 'links': {}}}}}, "Could not construct NwbImageSeries object due to: AbstractContainer.__init__: Expected at most 1 arguments ['name'], got 18: 0 positional and 18 keyword ['bits_per_pixel', 'comments', 'control', 'control_description', 'conversion', 'data', 'description', 'device', 'dimension', 'external_file', 'format', 'name', 'rate', 'resolution', 'starting_frame', 'starting_time', 'timestamps', 'unit']")
rly commented 2 years ago

Update: I have found the problem and am looking into a solution.