def test_cache_extractor(self): cache_rec = se.CacheRecordingExtractor(self.RX) check_recording_return_types(cache_rec) check_recordings_equal(self.RX, cache_rec) cache_rec.move_to('cache_rec') assert cache_rec.filename == 'cache_rec.dat' check_dumping(cache_rec) cache_rec = se.CacheRecordingExtractor(self.RX, save_path='cache_rec2') check_recording_return_types(cache_rec) check_recordings_equal(self.RX, cache_rec) assert cache_rec.filename == 'cache_rec2.dat' check_dumping(cache_rec) # test saving to file del cache_rec assert Path('cache_rec2.dat').is_file() # test tmp cache_rec = se.CacheRecordingExtractor(self.RX) tmp_file = cache_rec.filename del cache_rec assert not Path(tmp_file).is_file() cache_sort = se.CacheSortingExtractor(self.SX) check_sorting_return_types(cache_sort) check_sortings_equal(self.SX, cache_sort) cache_sort.move_to('cache_sort') assert cache_sort.filename == 'cache_sort.npz' check_dumping(cache_sort) # test saving to file del cache_sort assert Path('cache_sort.npz').is_file() cache_sort = se.CacheSortingExtractor(self.SX, save_path='cache_sort2') check_sorting_return_types(cache_sort) check_sortings_equal(self.SX, cache_sort) assert cache_sort.filename == 'cache_sort2.npz' check_dumping(cache_sort) # test saving to file del cache_sort assert Path('cache_sort2.npz').is_file() # test tmp cache_sort = se.CacheSortingExtractor(self.SX) tmp_file = cache_sort.filename del cache_sort assert not Path(tmp_file).is_file() # cleanup os.remove('cache_rec.dat') os.remove('cache_rec2.dat') os.remove('cache_sort.npz') os.remove('cache_sort2.npz')
def save_si_object(object_name: str, si_object, output_folder, cache_raw=False, include_properties=True, include_features=False): """ Save an arbitrary SI object to a temprary location for NWB conversion. Parameters ---------- object_name: str The unique name of the SpikeInterface object. si_object: RecordingExtractor or SortingExtractor The extractor to be saved. output_folder: str or Path The folder where the object is saved. cache_raw: bool If True, the Extractor is cached to a binary file (not recommended for RecordingExtractor objects) (default False). include_properties: bool If True, properties (channel or unit) are saved (default True). include_features: bool If True, spike features are saved (default False) """ Path(output_folder).mkdir(parents=True, exist_ok=True) if isinstance(si_object, se.RecordingExtractor): if not si_object.is_dumpable: cache = se.CacheRecordingExtractor(si_object, save_path=output_folder / "raw.dat") elif cache_raw: # save to json before caching to keep history (in case it's needed) json_file = output_folder / f"{object_name}.json" si_object.dump_to_json(output_folder / json_file) cache = se.CacheRecordingExtractor(si_object, save_path=output_folder / "raw.dat") else: cache = si_object elif isinstance(si_object, se.SortingExtractor): if not si_object.is_dumpable: cache = se.CacheSortingExtractor(si_object, save_path=output_folder / "sorting.npz") elif cache_raw: # save to json before caching to keep history (in case it's needed) json_file = output_folder / f"{object_name}.json" si_object.dump_to_json(output_folder / json_file) cache = se.CacheSortingExtractor(si_object, save_path=output_folder / "sorting.npz") else: cache = si_object else: raise ValueError("The 'si_object' argument shoulde be a SpikeInterface Extractor!") pkl_file = output_folder / f"{object_name}.pkl" cache.dump_to_pickle( output_folder / pkl_file, include_properties=include_properties, include_features=include_features )
def test_convert_sorting_extractor_to_nwb(self, se_class, dataset_path, se_kwargs): print(f"\n\n\n TESTING {se_class.extractor_name}...") dataset_stem = Path(dataset_path).stem self.dataset.get(dataset_path) sorting = se_class(**se_kwargs) sf = sorting.get_sampling_frequency() if sf is None: # need to set dummy sampling frequency since no associated acquisition in file sf = 30000 sorting.set_sampling_frequency(sf) if test_nwb: nwb_save_path = self.savedir / f"{se_class.__name__}_test_{dataset_stem}.nwb" se.NwbSortingExtractor.write_sorting(sorting, nwb_save_path) nwb_sorting = se.NwbSortingExtractor(nwb_save_path, sampling_frequency=sf) check_sortings_equal(sorting, nwb_sorting) if test_caching: sort_cache = se.CacheSortingExtractor(sorting) check_sortings_equal(sorting, sort_cache)