catalystneuro / nwb-conversion-tools

Create NWB files by converting and combining neural data in proprietary formats and adding essential metadata.
https://nwb-conversion-tools.readthedocs.io/en/main/
BSD 3-Clause "New" or "Revised" License
25 stars 12 forks source link

Support non-int channel_ids #403

Closed alejoe91 closed 2 years ago

alejoe91 commented 2 years ago

Description

SpikeInterface allows channel_ids to be of any type, but currently the write_recording function expects int

Steps to Reproduce

import spikeinterface.full as si
from nwb_conversion_tools.utils.spike_interface import write_recording
from datetime import datetime

rec, sort = si.toy_example(num_segments=1)
rec_str = rec.channel_slice(channel_ids=rec.get_channel_ids(), 
                            renamed_channel_ids=[str(ch) for ch in rec.get_channel_ids()])
print(rec_str.get_channel_ids())

start_time = datetime.now()
metadata = {"NWBFile": {'session_start_time': start_time}}
write_recording(rec_str, save_path="test_nwb_str.nwb", metadata=metadata)

Error

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/var/folders/vl/0vmqjsjn0dg8ycnxdx_mqrdw0000gr/T/ipykernel_71428/3145529863.py in <module>
----> 1 write_recording(rec_str, save_path="test_nwb_str1.nwb", metadata=metadata)

~/Documents/Codes/catalyst/nwb-conversion-tools/nwb_conversion_tools/utils/spike_interface.py in write_recording(recording, save_path, overwrite, nwbfile, starting_time, use_times, metadata, write_as, es_key, write_electrical_series, write_scaled, compression, compression_opts, iterator_type, iterator_opts)
    977                 nwbfile = make_nwbfile_from_metadata(metadata=metadata)
    978 
--> 979             add_all_to_nwbfile(
    980                 recording=recording,
    981                 nwbfile=nwbfile,

~/Documents/Codes/catalyst/nwb-conversion-tools/nwb_conversion_tools/utils/spike_interface.py in add_all_to_nwbfile(recording, nwbfile, starting_time, use_times, metadata, write_as, es_key, write_electrical_series, write_scaled, compression, compression_opts, iterator_type, iterator_opts)
    825         assert isinstance(nwbfile, pynwb.NWBFile), "'nwbfile' should be of type pynwb.NWBFile"
    826 
--> 827     add_electrodes_info(recording=recording, nwbfile=nwbfile, metadata=metadata)
    828 
    829     if write_electrical_series:

~/Documents/Codes/catalyst/nwb-conversion-tools/nwb_conversion_tools/utils/spike_interface.py in add_electrodes_info(recording, nwbfile, metadata)
    753     add_devices(nwbfile=nwbfile, metadata=metadata)
    754     add_electrode_groups(recording=recording, nwbfile=nwbfile, metadata=metadata)
--> 755     add_electrodes(recording=recording, nwbfile=nwbfile, metadata=metadata)
    756 
    757 

~/Documents/Codes/catalyst/nwb-conversion-tools/nwb_conversion_tools/utils/spike_interface.py in add_electrodes(recording, nwbfile, metadata, exclude)
    438                 electrode_kwargs.update(dict(group=nwbfile.electrode_groups[str(group_id)], group_name=str(group_id)))
    439 
--> 440             nwbfile.add_electrode(**electrode_kwargs)
    441     # add columns for existing electrodes:
    442     for col_name, cols_args in elec_columns_append.items():

~/anaconda3/envs/nwb2/lib/python3.8/site-packages/hdmf/utils.py in func_call(*args, **kwargs)
    580         if is_method:
    581             def func_call(*args, **kwargs):
--> 582                 pargs = _check_args(args, kwargs)
    583                 return func(args[0], **pargs)
    584         else:

~/anaconda3/envs/nwb2/lib/python3.8/site-packages/hdmf/utils.py in _check_args(args, kwargs)
    573                 if parse_err:
    574                     msg = '%s: %s' % (func.__qualname__, ', '.join(parse_err))
--> 575                     raise ExceptionType(msg)
    576 
    577             return parsed['args']

TypeError: NWBFile.add_electrode: incorrect type for 'id' (got 'str_', expected 'int')

Environment

latest versions of NCT, hdmf, SI

Checklist

CodyCBakerPhD commented 2 years ago

Yep, we're aware of this. Supposed to be a part of https://github.com/catalystneuro/nwb-conversion-tools/pull/374 but that seems to be dragging a bit. Happy to take an isolated updated for this, then.