Retrieves information about a registered backend or lists all registered backends.
Value
For a specific backend: a list with registration details. For all backends: a named list where each element contains registration details.
Examples
# List all registered backends
get_backend_registry()
#> $h5
#> $h5$name
#> [1] "h5"
#>
#> $h5$factory
#> function (source, mask_source, mask_dataset = "data/elements",
#> data_dataset = "data", preload = FALSE)
#> {
#> if (!requireNamespace("fmristore", quietly = TRUE)) {
#> stop_fmridataset(fmridataset_error_config, message = "Package 'fmristore' is required for H5 backend but is not available",
#> parameter = "backend_type")
#> }
#> if (is.character(source)) {
#> if (!all(file.exists(source))) {
#> missing_files <- source[!file.exists(source)]
#> stop_fmridataset(fmridataset_error_backend_io, message = sprintf("H5 source files not found: %s",
#> paste(missing_files, collapse = ", ")), file = missing_files,
#> operation = "open")
#> }
#> }
#> else if (is.list(source)) {
#> valid_types <- vapply(source, function(x) {
#> inherits(x, "H5NeuroVec")
#> }, logical(1))
#> if (!all(valid_types)) {
#> stop_fmridataset(fmridataset_error_config, message = "All source objects must be H5NeuroVec objects",
#> parameter = "source")
#> }
#> }
#> else {
#> stop_fmridataset(fmridataset_error_config, message = "source must be character vector (H5 file paths) or list (H5NeuroVec objects)",
#> parameter = "source", value = class(source))
#> }
#> if (is.character(mask_source)) {
#> if (!file.exists(mask_source)) {
#> stop_fmridataset(fmridataset_error_backend_io, message = sprintf("H5 mask file not found: %s",
#> mask_source), file = mask_source, operation = "open")
#> }
#> }
#> else if (!inherits(mask_source, "NeuroVol") && !inherits(mask_source,
#> "H5NeuroVol")) {
#> stop_fmridataset(fmridataset_error_config, message = "mask_source must be file path, NeuroVol, or H5NeuroVol object",
#> parameter = "mask_source", value = class(mask_source))
#> }
#> backend <- new.env(parent = emptyenv())
#> backend$source <- source
#> backend$mask_source <- mask_source
#> backend$mask_dataset <- mask_dataset
#> backend$data_dataset <- data_dataset
#> backend$preload <- preload
#> backend$h5_objects <- NULL
#> backend$mask <- NULL
#> backend$mask_vec <- NULL
#> backend$dims <- NULL
#> backend$metadata <- NULL
#> class(backend) <- c("h5_backend", "storage_backend")
#> backend
#> }
#> <bytecode: 0x55ae7c1d1de0>
#> <environment: namespace:fmridataset>
#>
#> $h5$description
#> [1] "HDF5 format backend using fmristore"
#>
#> $h5$validate_function
#> NULL
#>
#> $h5$registered_at
#> [1] "2026-08-13 17:16:30 UTC"
#>
#>
#> $latent
#> $latent$name
#> [1] "latent"
#>
#> $latent$factory
#> function (source, preload = FALSE)
#> {
#> .latent_backend_validate_source(source)
#> backend <- new.env(parent = emptyenv())
#> backend$source <- source
#> backend$preload <- preload
#> backend$data <- NULL
#> backend$dims <- NULL
#> backend$is_open <- FALSE
#> class(backend) <- c("latent_backend", "storage_backend")
#> backend
#> }
#> <bytecode: 0x55ae7c1b4b80>
#> <environment: namespace:fmridataset>
#>
#> $latent$description
#> [1] "Latent space backend for dimension-reduced data"
#>
#> $latent$validate_function
#> NULL
#>
#> $latent$registered_at
#> [1] "2026-08-13 17:16:30 UTC"
#>
#>
#> $matrix
#> $matrix$name
#> [1] "matrix"
#>
#> $matrix$factory
#> function (data_matrix, mask = NULL, spatial_dims = NULL, metadata = NULL)
#> {
#> if (!is.matrix(data_matrix)) {
#> stop_fmridataset(fmridataset_error_config, message = "data_matrix must be a matrix",
#> parameter = "data_matrix", value = class(data_matrix))
#> }
#> n_voxels <- ncol(data_matrix)
#> if (is.null(mask)) {
#> mask <- rep(TRUE, n_voxels)
#> }
#> if (!is.logical(mask)) {
#> stop_fmridataset(fmridataset_error_config, message = "mask must be a logical vector",
#> parameter = "mask", value = class(mask))
#> }
#> if (length(mask) != n_voxels) {
#> stop_fmridataset(fmridataset_error_config, message = sprintf("mask length (%d) must equal number of columns (%d)",
#> length(mask), n_voxels), parameter = "mask")
#> }
#> if (is.null(spatial_dims)) {
#> spatial_dims <- c(n_voxels, 1, 1)
#> }
#> if (length(spatial_dims) != 3 || !is.numeric(spatial_dims)) {
#> stop_fmridataset(fmridataset_error_config, message = "spatial_dims must be a numeric vector of length 3",
#> parameter = "spatial_dims", value = spatial_dims)
#> }
#> if (prod(spatial_dims) != n_voxels) {
#> stop_fmridataset(fmridataset_error_config, message = sprintf("Product of spatial_dims (%d) must equal number of voxels (%d)",
#> prod(spatial_dims), n_voxels), parameter = "spatial_dims")
#> }
#> backend <- list(data_matrix = data_matrix, mask = mask, spatial_dims = spatial_dims,
#> metadata = metadata %||% list())
#> class(backend) <- c("matrix_backend", "storage_backend")
#> backend
#> }
#> <bytecode: 0x55ae7c1ca128>
#> <environment: namespace:fmridataset>
#>
#> $matrix$description
#> [1] "In-memory matrix backend"
#>
#> $matrix$validate_function
#> NULL
#>
#> $matrix$registered_at
#> [1] "2026-08-13 17:16:30 UTC"
#>
#>
#> $nifti
#> $nifti$name
#> [1] "nifti"
#>
#> $nifti$factory
#> function (source, mask_source, preload = FALSE, mode = c("normal",
#> "bigvec", "mmap", "filebacked"), dummy_mode = FALSE)
#> {
#> mode <- match.arg(mode)
#> if (is.character(source)) {
#> if (!dummy_mode && !all(file.exists(source))) {
#> missing_files <- source[!file.exists(source)]
#> stop_fmridataset(fmridataset_error_backend_io, message = sprintf("Source files not found: %s",
#> paste(missing_files, collapse = ", ")), file = missing_files,
#> operation = "open")
#> }
#> }
#> else if (is.list(source)) {
#> valid_types <- vapply(source, function(x) {
#> inherits(x, "NeuroVec")
#> }, logical(1))
#> if (!all(valid_types)) {
#> stop_fmridataset(fmridataset_error_config, message = "All source objects must be NeuroVec objects",
#> parameter = "source")
#> }
#> }
#> else {
#> stop_fmridataset(fmridataset_error_config, message = "source must be character vector (file paths) or list (in-memory objects)",
#> parameter = "source", value = class(source))
#> }
#> if (is.character(mask_source)) {
#> if (!dummy_mode && !file.exists(mask_source)) {
#> stop_fmridataset(fmridataset_error_backend_io, message = sprintf("Mask file not found: %s",
#> mask_source), file = mask_source, operation = "open")
#> }
#> }
#> else if (!inherits(mask_source, "NeuroVol")) {
#> stop_fmridataset(fmridataset_error_config, message = "mask_source must be file path or NeuroVol object",
#> parameter = "mask_source", value = class(mask_source))
#> }
#> backend <- new.env(parent = emptyenv())
#> backend$source <- source
#> backend$mask_source <- mask_source
#> backend$preload <- preload
#> backend$mode <- mode
#> backend$dummy_mode <- dummy_mode
#> backend$data <- NULL
#> backend$mask <- NULL
#> backend$mask_vec <- NULL
#> backend$dims <- NULL
#> backend$metadata <- NULL
#> backend$run_length <- NULL
#> backend$cache <- cachem::cache_mem(max_size = 64 * 1024^2,
#> evict = "lru")
#> class(backend) <- c("nifti_backend", "storage_backend")
#> backend
#> }
#> <bytecode: 0x55ae7c1e8018>
#> <environment: namespace:fmridataset>
#>
#> $nifti$description
#> [1] "NIfTI format backend using neuroim2"
#>
#> $nifti$validate_function
#> NULL
#>
#> $nifti$registered_at
#> [1] "2026-08-13 17:16:30 UTC"
#>
#>
#> $study
#> $study$name
#> [1] "study"
#>
#> $study$factory
#> function (backends, subject_ids = NULL, strict = getOption("fmridataset.mask_check",
#> "identical"))
#> {
#> if (!is.list(backends) || length(backends) == 0) {
#> stop_fmridataset(fmridataset_error_config, message = "backends must be a non-empty list")
#> }
#> backends <- .study_backend_coerce_backends(backends)
#> .study_backend_validate_backends(backends)
#> subject_ids <- .study_backend_resolve_subject_ids(subject_ids,
#> backends)
#> dims_list <- lapply(backends, backend_get_dims)
#> spatial_dims <- lapply(dims_list, function(x) as.numeric(x$spatial))
#> time_dims <- vapply(dims_list, function(x) x$time, numeric(1))
#> ref_spatial <- .study_backend_validate_spatial(spatial_dims)
#> combined_mask <- .study_backend_combine_masks(backends, strict)
#> subject_boundaries <- c(0L, cumsum(as.integer(time_dims)))
#> backend <- list(backends = backends, subject_ids = subject_ids,
#> strict = strict, `_dims` = list(spatial = ref_spatial,
#> time = sum(time_dims)), `_mask` = combined_mask,
#> time_dims = as.integer(time_dims), subject_boundaries = as.integer(subject_boundaries))
#> class(backend) <- c("study_backend", "storage_backend")
#> backend
#> }
#> <bytecode: 0x55ae7c1b0a28>
#> <environment: namespace:fmridataset>
#>
#> $study$description
#> [1] "Multi-subject study backend"
#>
#> $study$validate_function
#> NULL
#>
#> $study$registered_at
#> [1] "2026-08-13 17:16:30 UTC"
#>
#>
#> $zarr
#> $zarr$name
#> [1] "zarr"
#>
#> $zarr$factory
#> function (source, preload = FALSE)
#> {
#> if (!is.character(source) || length(source) != 1) {
#> stop_fmridataset(fmridataset_error_config, "source must be a single character string",
#> parameter = "source", value = class(source))
#> }
#> if (!requireNamespace("zarr", quietly = TRUE)) {
#> stop_fmridataset(fmridataset_error_config, "The zarr package is required for zarr_backend but is not installed.",
#> details = "Install with: install.packages('zarr')")
#> }
#> backend <- new.env(parent = emptyenv())
#> backend$source <- source
#> backend$preload <- preload
#> backend$zarr_array <- NULL
#> backend$data_cache <- NULL
#> backend$dims <- NULL
#> backend$is_open <- FALSE
#> class(backend) <- c("zarr_backend", "storage_backend")
#> backend
#> }
#> <bytecode: 0x55ae7c1a0188>
#> <environment: namespace:fmridataset>
#>
#> $zarr$description
#> [1] "Zarr format backend"
#>
#> $zarr$validate_function
#> NULL
#>
#> $zarr$registered_at
#> [1] "2026-08-13 17:16:30 UTC"
#>
#>
# Get specific backend info
get_backend_registry("nifti")
#> $name
#> [1] "nifti"
#>
#> $factory
#> function (source, mask_source, preload = FALSE, mode = c("normal",
#> "bigvec", "mmap", "filebacked"), dummy_mode = FALSE)
#> {
#> mode <- match.arg(mode)
#> if (is.character(source)) {
#> if (!dummy_mode && !all(file.exists(source))) {
#> missing_files <- source[!file.exists(source)]
#> stop_fmridataset(fmridataset_error_backend_io, message = sprintf("Source files not found: %s",
#> paste(missing_files, collapse = ", ")), file = missing_files,
#> operation = "open")
#> }
#> }
#> else if (is.list(source)) {
#> valid_types <- vapply(source, function(x) {
#> inherits(x, "NeuroVec")
#> }, logical(1))
#> if (!all(valid_types)) {
#> stop_fmridataset(fmridataset_error_config, message = "All source objects must be NeuroVec objects",
#> parameter = "source")
#> }
#> }
#> else {
#> stop_fmridataset(fmridataset_error_config, message = "source must be character vector (file paths) or list (in-memory objects)",
#> parameter = "source", value = class(source))
#> }
#> if (is.character(mask_source)) {
#> if (!dummy_mode && !file.exists(mask_source)) {
#> stop_fmridataset(fmridataset_error_backend_io, message = sprintf("Mask file not found: %s",
#> mask_source), file = mask_source, operation = "open")
#> }
#> }
#> else if (!inherits(mask_source, "NeuroVol")) {
#> stop_fmridataset(fmridataset_error_config, message = "mask_source must be file path or NeuroVol object",
#> parameter = "mask_source", value = class(mask_source))
#> }
#> backend <- new.env(parent = emptyenv())
#> backend$source <- source
#> backend$mask_source <- mask_source
#> backend$preload <- preload
#> backend$mode <- mode
#> backend$dummy_mode <- dummy_mode
#> backend$data <- NULL
#> backend$mask <- NULL
#> backend$mask_vec <- NULL
#> backend$dims <- NULL
#> backend$metadata <- NULL
#> backend$run_length <- NULL
#> backend$cache <- cachem::cache_mem(max_size = 64 * 1024^2,
#> evict = "lru")
#> class(backend) <- c("nifti_backend", "storage_backend")
#> backend
#> }
#> <bytecode: 0x55ae7c1e8018>
#> <environment: namespace:fmridataset>
#>
#> $description
#> [1] "NIfTI format backend using neuroim2"
#>
#> $validate_function
#> NULL
#>
#> $registered_at
#> [1] "2026-08-13 17:16:30 UTC"
#>