Skip to content

Commit

Permalink
Merge pull request #3150 from h-mayorquin/close_nwb
Browse files Browse the repository at this point in the history
Improved conditions for closing nwb when using hdf5 backend
  • Loading branch information
alejoe91 authored Jul 8, 2024
2 parents e08059f + 669a9c2 commit 52372a6
Showing 1 changed file with 35 additions and 28 deletions.
63 changes: 35 additions & 28 deletions src/spikeinterface/extractors/nwbextractors.py
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,40 @@ def _retrieve_electrodes_indices_from_electrical_series_backend(open_file, elect
return electrodes_indices


class NwbRecordingExtractor(BaseRecording):
class _BaseNWBExtractor:
"A class for common methods for NWB extractors."

def _close_hdf5_file(self):
has_hdf5_backend = hasattr(self, "_file")
if has_hdf5_backend:
import h5py

main_file_id = self._file.id
open_object_ids_main = h5py.h5f.get_obj_ids(main_file_id, types=h5py.h5f.OBJ_ALL)
for object_id in open_object_ids_main:
object_name = h5py.h5i.get_name(object_id).decode("utf-8")
try:
object_id.close()
except:
import warnings

warnings.warn(f"Error closing object {object_name}")

def __del__(self):
# backend mode
if hasattr(self, "_file"):
if hasattr(self._file, "store"):
self._file.store.close()
else:
self._close_hdf5_file()
# pynwb mode
elif hasattr(self, "_nwbfile"):
io = self._nwbfile.get_read_io()
if io is not None:
io.close()


class NwbRecordingExtractor(BaseRecording, _BaseNWBExtractor):
"""Load an NWBFile as a RecordingExtractor.
Parameters
Expand Down Expand Up @@ -623,19 +656,6 @@ def __init__(
"file": file,
}

def __del__(self):
# backend mode
if hasattr(self, "_file"):
if hasattr(self._file, "store"):
self._file.store.close()
else:
self._file.close()
# pynwb mode
elif hasattr(self, "_nwbfile"):
io = self._nwbfile.get_read_io()
if io is not None:
io.close()

def _fetch_recording_segment_info_pynwb(self, file, cache, load_time_vector, samples_for_rate_estimation):
self._nwbfile = read_nwbfile(
backend=self.backend,
Expand Down Expand Up @@ -949,7 +969,7 @@ def get_traces(self, start_frame, end_frame, channel_indices):
return traces


class NwbSortingExtractor(BaseSorting):
class NwbSortingExtractor(BaseSorting, _BaseNWBExtractor):
"""Load an NWBFile as a SortingExtractor.
Parameters
----------
Expand Down Expand Up @@ -1105,19 +1125,6 @@ def __init__(
"t_start": self.t_start,
}

def __del__(self):
# backend mode
if hasattr(self, "_file"):
if hasattr(self._file, "store"):
self._file.store.close()
else:
self._file.close()
# pynwb mode
elif hasattr(self, "_nwbfile"):
io = self._nwbfile.get_read_io()
if io is not None:
io.close()

def _fetch_sorting_segment_info_pynwb(
self, unit_table_path: str = None, samples_for_rate_estimation: int = 1000, cache: bool = False
):
Expand Down

0 comments on commit 52372a6

Please sign in to comment.