Esempio n. 1
0
    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
    )
Esempio n. 3
0
        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)