pub mod nwb_units;
pub mod phy;
pub mod sorting_zarr;
use std::path::Path;
use dspk_core::{DspError, DspResult};
use crate::io::{detect_sorting, SortingFormat};
use crate::core::SortingOutput;
pub use nwb_units::{load_nwb_units, save_nwb_units};
pub use phy::{fill_similarity, load_phy_folder, load_spikes, save_phy_folder};
pub use sorting_zarr::{load_sorting_zarr, save_sorting_zarr};
pub fn save_sorting(sorting: &SortingOutput, path: &Path, format: Option<SortingFormat>) -> DspResult<()> {
match format.unwrap_or_else(|| SortingFormat::from_path_name(path)) {
SortingFormat::Phy => save_phy_folder(sorting, path),
SortingFormat::SortingZarr => save_sorting_zarr(sorting, path),
SortingFormat::NwbUnits => save_nwb_units(sorting, path),
}
}
pub fn load_sorting(path: &Path) -> DspResult<SortingOutput> {
if !path.exists() {
return Err(DspError::Io(format!("Path {} does not exist", path.display())));
}
match detect_sorting(path) {
SortingFormat::Phy => load_phy_folder(path),
SortingFormat::SortingZarr => load_sorting_zarr(path),
SortingFormat::NwbUnits => load_nwb_units(path, None),
}
}