Skip to content
Snippets Groups Projects
Commit 9e20074d authored by Jean-Karim Heriche's avatar Jean-Karim Heriche
Browse files

Fix bug caused by the difference between aws.s3 and paws.storage (used by...

Fix bug caused by the difference between aws.s3 and paws.storage (used by Rarr), revert arbitrary dimensions order (it's fixed in NGFF specs).
parent 642fb14f
No related branches found
Tags v1.5.1
No related merge requests found
Pipeline #46562 passed
......@@ -34,28 +34,26 @@ explore_image_server <-function(input, output, session, rv, parent_input){
img.idx <- 1
if(class(rv$imgRoot)[1] == "s3_bucket") { # Images are in a S3 bucket
bucketName <- rv$imgRoot$Contents$Bucket
endPoint <- Sys.getenv("AWS_S3_ENDPOINT")
s3.client <- omeRarr::get_s3_client() # use AWS_S3 env variables
filePath1 <- file.path("https:/", endPoint, bucketName, rv$imgPath1[1])
# paws.storage requires protocol prefix to endpoint contrary to aws.s3
endPoint <- file.path("https:/", Sys.getenv("AWS_S3_ENDPOINT"))
s3.client <- omeRarr::get_s3_client(endPoint = endPoint,
accessKey = Sys.getenv("AWS_ACCESS_KEY_ID"),
secretKey = Sys.getenv("AWS_SECRET_ACCESS_KEY"),
region = Sys.getenv("AWS_DEFAULT_REGION"))
filePath1 <- file.path(endPoint, bucketName, rv$imgPath1[1])
} else if(!is.null(rv$imgRoot)) { # Images are on a filesystem
## Deal with eventual Windows-style paths
rootDir <- file.path(strsplit(rv$imgRoot,'\\\\'))
filePath1 <- file.path(rootDir, strsplit(rv$imgPath1[1], '\\\\'))
}
multiscale.info <- omeRarr::get_multiscale_info(rv$imgPath1[1], s3.client)
## If this is a multiresolution container, use the second level
if(length(multiscale.info$datasets[[1]]$path)>1) {
img.idx <- 2
}
if(!is.null(rv$roiFrame) && rv$roiFrame != "") {
## Figure out what the 3rd dimension is
## NGFF dimensions order is arbitrary and defined in metadata
size <- omeRarr::get_image_dims(dirname(filePath1), image.idx = img.idx, s3.client)
## NGFF dimensions order is t,c,z,y,x
size <- omeRarr::get_image_dims(filePath1, image.idx = img.idx, s3.client)
## Reorder as x,y,z,t,c
size <- as.list(size[c("x","y","z","t","c")])
size <- as.list(c(rev(size), rep(0, 5 - length(size))))
names(size) <- c("x","y","z","t","c")
size[is.na(size)] <- 0
slice <- size
slice <- slice <- rev(size)
slice$x <- 1:slice$x
slice$y <- 1:slice$y
if(size$z == 0 && size$t > 0 && size$c == 0) {
......@@ -80,6 +78,7 @@ explore_image_server <-function(input, output, session, rv, parent_input){
return(omeRarr::get_image(filePath1, image.idx = img.idx, slice = slice, s3.client = s3.client))
}
)
I <- aperm(I, length(dim(I)):1) # re-order as (x, y, z, t, c)
I <- EBImage::as.Image(I)
} else { # Other formats, use RBioFormats
if(class(rv$imgRoot)[1] == "s3_bucket"){ # Images are in a S3 bucket
......@@ -108,11 +107,17 @@ explore_image_server <-function(input, output, session, rv, parent_input){
if(!is.null(rv$roiFrame) && rv$roiFrame != "") {
## Figure out what the 3rd dimension is
if(metadata$sizeZ == 1 && metadata$sizeT > 1 && metadata$sizeC == 1) {
slice.def = list(T = unique(rv$selectedFrame))
if(unique(rv$selectedFrame) <= metadata$sizeT) {
slice.def = list(T = unique(rv$selectedFrame))
}
} else if(metadata$sizeZ > 1 && metadata$sizeT == 1 && metadata$sizeC == 1) {
slice.def = list(Z = unique(rv$selectedFrame))
if(unique(rv$selectedFrame) <= metadata$sizeZ) {
slice.def = list(Z = unique(rv$selectedFrame))
}
} else if(metadata$sizeZ == 1 && metadata$sizeT == 1 && metadata$sizeC > 1) {
slice.def = list(C = unique(rv$selectedFrame))
if(unique(rv$selectedFrame) <= metadata$sizeC) {
slice.def = list(C = unique(rv$selectedFrame))
}
}
}
}
......
......@@ -30,28 +30,26 @@ explore_image_server2 <-function(input, output, session, rv){
img.idx <- 1
if(class(rv$imgRoot)[1] == "s3_bucket") { # Images are in a S3 bucket
bucketName <- rv$imgRoot$Contents$Bucket
endPoint <- Sys.getenv("AWS_S3_ENDPOINT")
s3.client <- omeRarr::get_s3_client() # use AWS_S3 env variables
filePath2 <- file.path("https:/", endPoint, bucketName, rv$imgPath2[1])
# paws.storage requires protocol prefix to endpoint contrary to aws.s3
endPoint <- file.path("https:/", Sys.getenv("AWS_S3_ENDPOINT"))
s3.client <- omeRarr::get_s3_client(endPoint = endPoint,
accessKey = Sys.getenv("AWS_ACCESS_KEY_ID"),
secretKey = Sys.getenv("AWS_SECRET_ACCESS_KEY"),
region = Sys.getenv("AWS_DEFAULT_REGION"))
filePath2 <- file.path(endPoint, bucketName, rv$imgPath2[1])
} else if(!is.null(rv$imgRoot)) { # Images are on a filesystem
## Deal with eventual Windows-style paths
rootDir <- file.path(strsplit(rv$imgRoot,'\\\\'))
filePath2 <- file.path(rootDir, strsplit(rv$imgPath2[1], '\\\\'))
}
multiscale.info <- omeRarr::get_multiscale_info(rv$imgPath2[1], s3.client)
## If this is a multiresolution container, use the second level
if(length(metadata$datasets[[1]]$path)>1) {
img.idx <- 2
}
if(!is.null(rv$roiFrame) && rv$roiFrame != "") {
## Figure out what the 3rd dimension is
## NGFF dimensions order is arbitrary and defined in metadata
size <- omeRarr::get_image_dims(dirname(filePath2), image.idx = img.idx, s3.client)
## NGFF dimensions order is t,c,z,y,x
size <- omeRarr::get_image_dims(filePath2, image.idx = img.idx, s3.client)
## Reorder as x,y,z,t,c
size <- as.list(size[c("x","y","z","t","c")])
size <- as.list(c(rev(size), rep(0, 5 - length(size))))
names(size) <- c("x","y","z","t","c")
size[is.na(size)] <- 0
slice <- size
slice <- rev(size)
slice$x <- 1:slice$x
slice$y <- 1:slice$y
if(size$z == 0 && size$t > 0 && size$c == 0) {
......@@ -76,6 +74,7 @@ explore_image_server2 <-function(input, output, session, rv){
return(omeRarr::get_image(filePath2, image.idx = img.idx, slice = slice, s3.client = s3.client))
}
)
I <- aperm(I, length(dim(I)):1) # re-order as (x, y, z, t, c)
I <- EBImage::as.Image(I)
} else { # Other formats, use RBioFormats
if(class(rv$imgRoot)[1] == "s3_bucket"){ # Images are in a S3 bucket
......@@ -103,11 +102,17 @@ explore_image_server2 <-function(input, output, session, rv){
if(!is.null(rv$roiFrame) && rv$roiFrame != "") {
## Figure out what the 3rd dimension is
if(metadata2$sizeZ == 1 && metadata2$sizeT > 1 && metadata2$sizeC == 1) {
slice.def = list(T = unique(rv$selectedFrame))
if(unique(rv$selectedFrame) <= metadata2$sizeT) {
slice.def = list(T = unique(rv$selectedFrame))
}
} else if(metadata2$sizeZ > 1 && metadata2$sizeT == 1 && metadata2$sizeC == 1) {
slice.def = list(Z = unique(rv$selectedFrame))
if(unique(rv$selectedFrame) <= metadata2$sizeZ) {
slice.def = list(Z = unique(rv$selectedFrame))
}
} else if(metadata2$sizeZ == 1 && metadata2$sizeT == 1 && metadata2$sizeC > 1) {
slice.def = list(C = unique(rv$selectedFrame))
if(unique(rv$selectedFrame) <= metadata2$sizeC) {
slice.def = list(C = unique(rv$selectedFrame))
}
}
}
}
......@@ -125,7 +130,7 @@ explore_image_server2 <-function(input, output, session, rv){
image2 <- img2()
if(!is.null(image2)) {
if(!is.null(rv$pixelPosition) && !is.null(rv$roiX) && rv$roiX != "") { # input$roiX != "" => ROI selection enabled
if(!grepl("\\.ome\\.zarr$", rv$imgPath1[1])) { # Not NGFF
if(!grepl("\\.ome\\.zarr$", rv$imgPath2[1])) { # Not NGFF
res.level <- 1
if(seriesCount(rv$metadataImg2) > 3) {
# Image is likely a multi-resolution pyramid
......
......@@ -4,7 +4,7 @@
## Main application file ##
###########################
VERSION <- "v1.5.0" # Update this when creating a new version
VERSION <- "v1.5.1" # Update this when creating a new version
# Increase max upload size to 1 GB
options(shiny.maxRequestSize=1000*1024^2)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment