# Remote OME-NGFF Demo

### Setup

We install the `blosc` package to be able to use Blosc as the decompression codec, since the image we want to load is Blosc-compressed.

    install.packages("blosc")

### Demo

    library(pizzarr)

    # The path to the root of the OME-NGFF Zarr store.
    root <- "https://uk1s3.embassy.ebi.ac.uk/idr/zarr/v0.4/idr0062A/6001240.zarr"

    # Open the OME-NGFF as an HttpStore.
    store <- HttpStore$new(root)
    g <- zarr_open_group(store)

    # Using the OME metadata, get the path to the first resolution of the image pyramid.
    attrs <- g$get_attrs()$to_list()
    resolution_paths <- attrs$multiscales[[1]]$datasets[[1]]$path
    first_resolution <- resolution_paths[[1]]

    # Load the 4-dimensional array of pixels (as a ZarrArray instance).
    zarr_arr <- g$get_item(first_resolution)

    print(zarr_arr$get_shape())
    # [1]   2 236 275 271

    z_index <- 118

    # Load a single Z-slice of pixels (as a NestedArray instance).
    nested_arr <- zarr_arr$get_item(list(slice(1, 2), slice(z_index, z_index), slice(NA, NA), slice(NA, NA)))

    print(nested_arr$shape)
    # [1]   2   1 275 271

    # Extract the NestedArray contents as a base R array.
    arr <- nested_arr$data

    # Convert to a pseudo-RGB array to make raster package happy.
    rg_arr <- aperm(arr, c(2, 4, 3, 1))[1,,,]
    rgb_arr <- array(dim=c(271, 275, 3))
    rgb_arr[,,1] <- rg_arr[,,1]
    rgb_arr[,,2] <- rg_arr[,,2]
    rgb_arr[,,3] <- 0

    # Plot the pseudo-RGB image using base R rasterImage().
    plot.new()
    plot.window(c(0, 271), c(0, 275), asp = 1)
    rasterImage(rgb_arr / max(rgb_arr), 0, 0, 271, 275)