Example #1
0
    def write_sorting(sorting: Union[MultiSortingExtractor, SortingExtractor],
                      save_path: PathType):
        save_path = Path(save_path)
        if save_path.suffix == '':
            sorting_name = save_path.name
        else:
            sorting_name = save_path.stem
        xml_name = sorting_name
        save_xml_filepath = save_path / (str(xml_name) + '.xml')

        assert not save_path.is_file(
        ), "Argument 'save_path' should be a folder!"
        save_path.mkdir(parents=True, exist_ok=True)

        if save_xml_filepath.is_file():
            raise FileExistsError(f"{save_xml_filepath} already exists!")

        xml_root = et.Element('xml')
        et.SubElement(xml_root, 'acquisitionSystem')
        et.SubElement(xml_root.find('acquisitionSystem'), 'samplingRate')
        xml_root.find('acquisitionSystem').find('samplingRate').text = str(
            sorting.get_sampling_frequency())
        et.ElementTree(xml_root).write(str(save_xml_filepath.absolute()),
                                       pretty_print=True)

        if isinstance(sorting, MultiSortingExtractor):
            counter = 1
            for sort in sorting.sortings:
                # Create and save .res.%i and .clu.%i files from the current sorting object
                save_res = save_path / f"{sorting_name}.res.{counter}"
                save_clu = save_path / f"{sorting_name}.clu.{counter}"
                counter += 1

                res, clu = _extract_res_clu_arrays(sort)

                np.savetxt(save_res, res, fmt="%i")
                np.savetxt(save_clu, clu, fmt="%i")

        elif isinstance(sorting, SortingExtractor):
            # assert units have group property
            assert 'group' in sorting.get_shared_unit_property_names()
            sortings, groups = get_sub_extractors_by_property(
                sorting, 'group', return_property_list=True)

            for (sort, group) in zip(sortings, groups):
                # Create and save .res.%i and .clu.%i files from the current sorting object
                save_res = save_path / f"{sorting_name}.res.{group}"
                save_clu = save_path / f"{sorting_name}.clu.{group}"

                res, clu = _extract_res_clu_arrays(sort)

                np.savetxt(save_res, res, fmt="%i")
                np.savetxt(save_clu, clu, fmt="%i")
    def write_sorting(sorting: Union[MultiSortingExtractor, SortingExtractor], save_path: PathType):
        save_path = Path(save_path)
        if save_path.suffix == '':
            sorting_name = save_path.name
        else:
            sorting_name = save_path.stem
        xml_name = sorting_name
        save_xml_filepath = save_path / (str(xml_name) + '.xml')

        assert not save_path.is_file(), "'save_path' should be a folder"
        if not save_path.is_dir():
            os.makedirs(save_path)

        if save_xml_filepath.is_file():
            raise FileExistsError(f'{save_xml_filepath} already exists!')

        soup = BeautifulSoup("", 'xml')

        new_tag = soup.new_tag('samplingrate')
        new_tag.string = str(sorting.get_sampling_frequency())
        soup.append(new_tag)

        # write parameters file
        with open(save_xml_filepath, "w") as f:
            f.write(str(soup))

        if isinstance(sorting, MultiSortingExtractor):
            counter = 1
            for sort in sorting.sortings:
                # Create and save .res.%i and .clu.%i files from the current sorting object
                save_res = save_path / f'{sorting_name}.res.{counter}'
                save_clu = save_path / f'{sorting_name}.clu.{counter}'
                counter += 1

                res, clu = _extract_res_clu_arrays(sort)

                np.savetxt(save_res, res, fmt='%i')
                np.savetxt(save_clu, clu, fmt='%i')

        elif isinstance(sorting, SortingExtractor):
            # assert units have group property
            assert 'group' in sorting.get_shared_unit_property_names()
            sortings, groups = get_sub_extractors_by_property(sorting, 'group', return_property_list=True)

            for (sort, group) in zip(sortings, groups):
                # Create and save .res.%i and .clu.%i files from the current sorting object
                save_res = save_path / f'{sorting_name}.res.{group}'
                save_clu = save_path / f'{sorting_name}.clu.{group}'

                res, clu = _extract_res_clu_arrays(sort)

                np.savetxt(save_res, res, fmt='%i')
                np.savetxt(save_clu, clu, fmt='%i')