def write_sorting(sorting: SortingExtractor, save_path: PathType): assert save_path.suffixes == [ ".spikes", ".cellinfo", ".mat", ], "The save_path must correspond to the CellExplorer format of sorting_id.spikes.cellinfo.mat!" base_path = save_path.parent sorting_id = save_path.name.split(".")[0] session_info_save_path = base_path / f"{sorting_id}.sessionInfo.mat" spikes_save_path = save_path base_path.mkdir(parents=True, exist_ok=True) sampling_frequency = sorting.get_sampling_frequency() session_info_mat_dict = dict(sessionInfo=dict(rates=dict( wideband=sampling_frequency))) scipy.io.savemat(file_name=session_info_save_path, mdict=session_info_mat_dict) spikes_mat_dict = dict(spikes=dict( UID=sorting.get_unit_ids(), times=[[[y / sampling_frequency] for y in x] for x in sorting.get_units_spike_train()], )) # If, in the future, it is ever desired to allow this to write unit properties, they must conform # to the format here: https://cellexplorer.org/datastructure/data-structure-and-format/ scipy.io.savemat(file_name=spikes_save_path, mdict=spikes_mat_dict)
def _get_spike_train(*, sorting: se.SortingExtractor, unit_id): if type(unit_id) == list: x = sorting.get_units_spike_train(unit_ids=unit_id) return np.sort(np.concatenate(x)) else: return sorting.get_unit_spike_train(unit_id=unit_id)