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')