Build branch openpipeline_spatial/allow-compressed-output-bundles with version allow-compressed-output-bundles to openpipeline_spatial on branch allow-compressed-output-bundles (6504133)

Build pipeline: vsh-ci-build-template-q2kf4

Source commit: 65041334be

Source message: trigger ci
This commit is contained in:
CI
2025-09-03 06:09:35 +00:00
parent b27f3f2210
commit 9e0a57fb2a
66 changed files with 383 additions and 321 deletions

View File

@@ -1,27 +1,22 @@
viash_version: 0.9.4
source: src
target: target
name: openpipeline_spatial
organization: openpipelines-bio
organization: vsh
links:
repository: https://github.com/openpipelines-bio/openpipeline_spatial
docker_registry: ghcr.io
repositories:
- name: openpipeline
repo: openpipeline
type: vsh
tag: v3.0.0
info:
test_resources:
- type: s3
path: s3://openpipelines-bio/openpipeline_spatial/resources_test
dest: resources_test
config_mods: |
config_mods: |-
.resources += {path: '/src/workflows/utils/labels.config', dest: 'nextflow_labels.config'}
.runners[.type == 'nextflow'].config.script := 'includeConfig("nextflow_labels.config")'
.runners[.type == 'nextflow'].config.script := 'includeConfig("nextflow_labels.config")'
version: allow-compressed-output-bundles

View File

@@ -173,27 +173,29 @@ def retrieve_input_data(cells2stats_output_bundle):
# │ └── RawCellStats.parquet
# └── Panel.json
required_files = ["Panel.json", "Cytoprofiling/Instrument/RawCellStats.parquet"]
required_file_patterns = {
"target_panel": "**/Panel.json",
"count_matrix": "**/Cytoprofiling/Instrument/RawCellStats.parquet",
}
if zipfile.is_zipfile(cells2stats_output_bundle):
cells2stats_output_bundle = extract_selected_files_from_zip(
cells2stats_output_bundle, members=required_files
cells2stats_output_bundle, members=required_file_patterns.values()
)
else:
cells2stats_output_bundle = Path(cells2stats_output_bundle)
assert os.path.isdir(cells2stats_output_bundle), (
"Input is expected to be a (compressed) directory."
)
input_dir = Path(cells2stats_output_bundle)
input_data = dict(
zip(
["target_panel", "count_matrix"],
[input_dir / file for file in required_files],
)
)
assert all([file.exists() for file in input_data.values()]), (
f"Not all required input files are found. Make sure that {par['input']} contains {input_data.values()}."
)
input_data = {}
for key, pattern in required_file_patterns.items():
file = list(cells2stats_output_bundle.glob(pattern))
assert len(file) == 1, (
f"Expected exactly one file matching pattern {pattern}, found {len(file)}."
)
input_data[key] = file[0]
return input_data

View File

@@ -56,7 +56,9 @@ def test_compressed_input(run_component, tmp_path):
output = tmp_path / "aviti.h5mu"
zipped_input = tmp_path / "aviti.zip"
subprocess.run(["zip", "-r", str(zipped_input), "."], cwd=input, check=True)
subprocess.run(
["zip", "-r", str(zipped_input), "aviti"], cwd=meta["resources_dir"], check=True
)
# run component
run_component(

View File

@@ -2,8 +2,8 @@ import sys
import os
import squidpy as sq
import mudata as mu
import glob
import zipfile
from pathlib import Path
## VIASH START
par = {
@@ -22,44 +22,33 @@ from unzip_archived_folder import extract_selected_files_from_zip
logger = setup_logger()
def find_cosmx_files(cosmx_output_bundle, suffix):
pattern = os.path.join(cosmx_output_bundle, f"*{suffix}")
files = glob.glob(pattern)
assert len(files) == 1, (
f"Only one file matching pattern {pattern} should be present"
)
return files[0]
def retrieve_input_data(cosmx_output_bundle):
# Expected folder structure (showing only relevant files):
# ├── *_exprMat_file.csv
# ├── *_fov_positions_file.csv
# └── *_metadata_file.csv
expected_file_patterns = [
"exprMat_file.csv",
"fov_positions_file.csv",
"metadata_file.csv",
]
required_file_patterns = {
"counts_file": "**/*exprMat_file.csv",
"fov_file": "**/*fov_positions_file.csv",
"meta_file": "**/*metadata_file.csv",
}
if zipfile.is_zipfile(cosmx_output_bundle):
cosmx_output_bundle = extract_selected_files_from_zip(
cosmx_output_bundle, members=["*" + file for file in expected_file_patterns]
cosmx_output_bundle, members=required_file_patterns.values()
)
else:
cosmx_output_bundle = Path(cosmx_output_bundle)
assert os.path.isdir(cosmx_output_bundle), (
"Input is expected to be a (compressed) directory."
)
input_data = dict(
zip(
["counts_file", "fov_file", "meta_file"],
[
find_cosmx_files(cosmx_output_bundle, glob_pattern)
for glob_pattern in expected_file_patterns
],
)
)
input_data = {}
for key, pattern in required_file_patterns.items():
file = list(cosmx_output_bundle.glob(pattern))
assert len(file) == 1, f"Expected one file for {key}, found {len(file)}."
input_data[key] = file[0]
return input_data

View File

@@ -56,10 +56,13 @@ def test_simple_execution(run_component, tmp_path):
def test_compressed_input(run_component, tmp_path):
output = tmp_path / "cosmx_tiny.h5mu"
zipped_input = tmp_path / "xenium_tiny.zip"
input = meta["resources_dir"] + "/Lung5_Rep2_tiny"
zipped_input = tmp_path / "Lung5_Rep2_tiny.zip"
subprocess.run(["zip", "-r", str(zipped_input), "."], cwd=input, check=True)
subprocess.run(
["zip", "-r", str(zipped_input), "Lung5_Rep2_tiny"],
cwd=meta["resources_dir"],
check=True,
)
run_component(
[

View File

@@ -18,25 +18,32 @@ meta <- list(
source(paste0(meta$resources_dir, "/unzip_archived_folder.R"))
cat("Reading input data...")
if (tools::file_ext(par$input) == "zip") {
expected_file_patterns <- c(
"*.csv",
"*.parquet"
)
tmp_dir <- extract_selected_files(
par$input,
members = expected_file_patterns
)
cosmx_output_bundle <- file.path(
tmp_dir,
tools::file_path_sans_ext(basename(par$input))
)
} else {
cosmx_output_bundle <- par$input
}
cat("Setting parameters...")
if (par$add_polygon_path == FALSE && par$add_tx_path == FALSE) {
add_parquet_paths <- FALSE
} else {
add_parquet_paths <- TRUE
}
cosmx_output_bundle <- par$input
if (grepl("\\.zip$", cosmx_output_bundle)) {
expected_file_patterns <- c(
"*.csv",
"*.parquet"
)
cosmx_output_bundle <- extract_selected_files(
cosmx_output_bundle,
members = expected_file_patterns
)
}
cat("Converting to SpatialExperiment...")
spe <- readCosmxSXE(
dirName = cosmx_output_bundle,
returnType = "SPE",
@@ -51,4 +58,5 @@ spe <- readCosmxSXE(
altExps = par$alternative_experiment_features
)
cat("Saving output...")
saveRDS(spe, file = par$output)

View File

@@ -74,12 +74,14 @@ cat("> Checking execution with compressed input\n")
spe <- paste0(meta[["resources_dir"]], "/Lung5_Rep2_tiny")
out_rds <- "output.rds"
create_folder_archive <- function(folder_path, archive = "temp_dir.zip") {
create_folder_archive <- function(
folder_path,
archive = "Lung5_Rep2_tiny.zip") {
old_wd <- getwd()
on.exit(setwd(old_wd))
setwd(folder_path)
system2("zip", c("-r", archive, "."))
paste0(folder_path, "/", archive)
setwd(meta$resources_dir)
system2("zip", c("-r", archive, "Lung5_Rep2_tiny"))
paste0(meta$resources_dir, "/", archive)
}
zipped_spe <- create_folder_archive(spe)

View File

@@ -33,33 +33,33 @@ def _retrieve_input_data(xenium_output_bundle):
# ├── experiment.xenium
# └── metrics_summary.csv
required_files = [
"cell_feature_matrix.h5",
"cells.parquet",
"experiment.xenium",
"metrics_summary.csv",
]
required_file_patterns = {
"count_matrix": "**/cell_feature_matrix.h5",
"cells_metadata": "**/cells.parquet",
"experiment": "**/experiment.xenium",
"metrics_summary": "**/metrics_summary.csv",
}
if zipfile.is_zipfile(xenium_output_bundle):
xenium_output_bundle = extract_selected_files_from_zip(
xenium_output_bundle, members=required_files
xenium_output_bundle,
members=[pattern for pattern in required_file_patterns.values()],
)
else:
xenium_output_bundle = Path(xenium_output_bundle)
assert os.path.isdir(xenium_output_bundle), (
"Input is expected to be a (compressed) directory."
)
input_dir = Path(xenium_output_bundle)
input_data = dict(
zip(
["count_matrix", "cells_metadata", "experiment", "metrics_summary"],
[input_dir / file for file in required_files],
input_data = {}
for key, pattern in required_file_patterns.items():
file = list(xenium_output_bundle.glob(pattern))
assert len(file) == 1, (
f"Expected exactly one file matching pattern {pattern}, found {len(file)}."
)
)
input_data[key] = file[0]
assert all([file.exists() for file in input_data.values()]), (
f"Not all required input files are found. Make sure that {par['input']} contains {input_data.values()}."
)
return input_data

View File

@@ -67,7 +67,11 @@ def test_compressed_input(run_component, tmp_path):
output = tmp_path / "xenium.h5mu"
zipped_input = tmp_path / "xenium_tiny.zip"
subprocess.run(["zip", "-r", str(zipped_input), "."], cwd=input, check=True)
subprocess.run(
["zip", "-r", str(zipped_input), "xenium_tiny"],
cwd=meta["resources_dir"],
check=True,
)
# run component
run_component(

View File

@@ -1,10 +1,11 @@
import sys
from spatialdata_io import xenium
import zipfile
from pathlib import Path
## VIASH START
par = {
"input": "./resources_test/xenium_tiny",
"input": "xenium_tiny.zip",
"output": "./test/xenium_tiny.zarr",
"cells_boundaries": True,
"nucleus_boundaries": True,
@@ -30,9 +31,20 @@ logger = setup_logger()
logger.info("Reading in Xenium data...")
if zipfile.is_zipfile(par["input"]):
required_file_patterns = [
"**/experiment.xenium",
"**/nucleus_boundaries.parquet",
"**/cell_boundaries.parquet",
"**/transcripts.parquet",
"**/cell_feature_matrix.h5",
"**/cells.parquet",
"**/morphology_mip.ome.tif",
"**/morphology_focus.ome.tif",
]
xenium_output_bundle = unzip_archived_folder(par["input"])
else:
xenium_output_bundle = par["input"]
xenium_output_bundle = Path(par["input"])
sdata = xenium(
xenium_output_bundle,
cells_boundaries=par["cells_boundaries"],

View File

@@ -34,10 +34,13 @@ def test_simple_execution(run_component, tmp_path):
def test_compressed_input(run_component, tmp_path):
output_sd_path = tmp_path / "sd"
input = meta["resources_dir"] + "/xenium_tiny"
zipped_input = tmp_path / "xenium_tiny.zip"
subprocess.run(["zip", "-r", str(zipped_input), "."], cwd=input, check=True)
subprocess.run(
["zip", "-r", str(zipped_input), "xenium_tiny"],
cwd=meta["resources_dir"],
check=True,
)
run_component(
[
"--input",

View File

@@ -2,7 +2,7 @@ library(SpatialExperimentIO)
### VIASH START
par <- list(
input = "resources_test/xenium/xenium_tiny",
input = "resources_test/xenium/temp_dir.zip",
add_experiment_xenium = TRUE,
add_parquet_paths = TRUE,
alternative_experiment_features = c(
@@ -18,20 +18,26 @@ meta <- list(
source(paste0(meta$resources_dir, "/unzip_archived_folder.R"))
xenium_output_bundle <- par$input
if (grepl("\\.zip$", xenium_output_bundle)) {
expected_file_patterns <- c(
"cell_feature_matrix.h5",
"*.parquet",
"experiment.xenium"
cat("Reading input data...")
if (tools::file_ext(par$input) == "zip") {
required_file_patterns <- c(
"**/cell_feature_matrix.h5",
"**/*.parquet",
"**/experiment.xenium"
)
xenium_output_bundle <- extract_selected_files(
xenium_output_bundle,
members = expected_file_patterns
tmp_dir <- extract_selected_files(
par$input,
members = required_file_patterns
)
xenium_output_bundle <- file.path(
tmp_dir,
tools::file_path_sans_ext(basename(par$input))
)
} else {
xenium_output_bundle <- par$input
}
cat("Converting to SpatialExperiment")
spe <- readXeniumSXE(
dirName = xenium_output_bundle,
returnType = "SPE",
@@ -43,4 +49,5 @@ spe <- readXeniumSXE(
altExps = par$alternative_experiment_features
)
cat("Saving output...")
saveRDS(spe, file = par$output)

View File

@@ -71,7 +71,6 @@ dim_input <- dim(input)
expect_equal(dim_rds, dim_input)
cat("> Checking execution with compressed input\n")
spe <- paste0(
@@ -80,12 +79,12 @@ spe <- paste0(
)
out_rds <- "output.rds"
create_folder_archive <- function(folder_path, archive = "temp_dir.zip") {
create_folder_archive <- function(folder_path, archive = "xenium_tiny.zip") {
old_wd <- getwd()
on.exit(setwd(old_wd))
setwd(folder_path)
system2("zip", c("-r", archive, "."))
paste0(folder_path, "/", archive)
setwd(meta$resources_dir)
system2("zip", c("-r", archive, "xenium_tiny"))
paste0(meta$resources_dir, "/", archive)
}
zipped_spe <- create_folder_archive(spe)

View File

@@ -20,7 +20,7 @@ def unzip_archived_folder(archived_folder: Union[str, Path]) -> Union[str, Path]
with zipfile.ZipFile(archived_folder, "r") as archive:
archive.extractall(temp_dir)
return temp_dir
return temp_dir / Path(archived_folder).stem
def extract_selected_files_from_zip(

View File

@@ -296,7 +296,7 @@ build_info:
output: "target/executable/convert/from_cells2stats_to_h5mu"
executable: "target/executable/convert/from_cells2stats_to_h5mu/from_cells2stats_to_h5mu"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -458,9 +458,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen"
LABEL org.opencontainers.image.description="Companion container for running component convert from_cells2stats_to_h5mu"
LABEL org.opencontainers.image.created="2025-08-28T07:09:08Z"
LABEL org.opencontainers.image.created="2025-09-03T05:47:11Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="56c413edcb8630cf4e6df89a39589c44dbb53d53"
LABEL org.opencontainers.image.revision="65041334be24bd2fa911a5ae85121c09aefeaec0"
LABEL org.opencontainers.image.version="allow-compressed-output-bundles"
VIASHDOCKER
@@ -1433,27 +1433,29 @@ def retrieve_input_data(cells2stats_output_bundle):
# │ └── RawCellStats.parquet
# └── Panel.json
required_files = ["Panel.json", "Cytoprofiling/Instrument/RawCellStats.parquet"]
required_file_patterns = {
"target_panel": "**/Panel.json",
"count_matrix": "**/Cytoprofiling/Instrument/RawCellStats.parquet",
}
if zipfile.is_zipfile(cells2stats_output_bundle):
cells2stats_output_bundle = extract_selected_files_from_zip(
cells2stats_output_bundle, members=required_files
cells2stats_output_bundle, members=required_file_patterns.values()
)
else:
cells2stats_output_bundle = Path(cells2stats_output_bundle)
assert os.path.isdir(cells2stats_output_bundle), (
"Input is expected to be a (compressed) directory."
)
input_dir = Path(cells2stats_output_bundle)
input_data = dict(
zip(
["target_panel", "count_matrix"],
[input_dir / file for file in required_files],
)
)
assert all([file.exists() for file in input_data.values()]), (
f"Not all required input files are found. Make sure that {par['input']} contains {input_data.values()}."
)
input_data = {}
for key, pattern in required_file_patterns.items():
file = list(cells2stats_output_bundle.glob(pattern))
assert len(file) == 1, (
f"Expected exactly one file matching pattern {pattern}, found {len(file)}."
)
input_data[key] = file[0]
return input_data

View File

@@ -20,7 +20,7 @@ def unzip_archived_folder(archived_folder: Union[str, Path]) -> Union[str, Path]
with zipfile.ZipFile(archived_folder, "r") as archive:
archive.extractall(temp_dir)
return temp_dir
return temp_dir / Path(archived_folder).stem
def extract_selected_files_from_zip(

View File

@@ -231,7 +231,7 @@ build_info:
output: "target/executable/convert/from_cosmx_to_h5mu"
executable: "target/executable/convert/from_cosmx_to_h5mu/from_cosmx_to_h5mu"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -459,9 +459,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz"
LABEL org.opencontainers.image.description="Companion container for running component convert from_cosmx_to_h5mu"
LABEL org.opencontainers.image.created="2025-08-28T07:09:09Z"
LABEL org.opencontainers.image.created="2025-09-03T05:47:11Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="56c413edcb8630cf4e6df89a39589c44dbb53d53"
LABEL org.opencontainers.image.revision="65041334be24bd2fa911a5ae85121c09aefeaec0"
LABEL org.opencontainers.image.version="allow-compressed-output-bundles"
VIASHDOCKER
@@ -1113,8 +1113,8 @@ import sys
import os
import squidpy as sq
import mudata as mu
import glob
import zipfile
from pathlib import Path
## VIASH START
# The following code has been auto-generated by Viash.
@@ -1157,44 +1157,33 @@ from unzip_archived_folder import extract_selected_files_from_zip
logger = setup_logger()
def find_cosmx_files(cosmx_output_bundle, suffix):
pattern = os.path.join(cosmx_output_bundle, f"*{suffix}")
files = glob.glob(pattern)
assert len(files) == 1, (
f"Only one file matching pattern {pattern} should be present"
)
return files[0]
def retrieve_input_data(cosmx_output_bundle):
# Expected folder structure (showing only relevant files):
# ├── *_exprMat_file.csv
# ├── *_fov_positions_file.csv
# └── *_metadata_file.csv
expected_file_patterns = [
"exprMat_file.csv",
"fov_positions_file.csv",
"metadata_file.csv",
]
required_file_patterns = {
"counts_file": "**/*exprMat_file.csv",
"fov_file": "**/*fov_positions_file.csv",
"meta_file": "**/*metadata_file.csv",
}
if zipfile.is_zipfile(cosmx_output_bundle):
cosmx_output_bundle = extract_selected_files_from_zip(
cosmx_output_bundle, members=["*" + file for file in expected_file_patterns]
cosmx_output_bundle, members=required_file_patterns.values()
)
else:
cosmx_output_bundle = Path(cosmx_output_bundle)
assert os.path.isdir(cosmx_output_bundle), (
"Input is expected to be a (compressed) directory."
)
input_data = dict(
zip(
["counts_file", "fov_file", "meta_file"],
[
find_cosmx_files(cosmx_output_bundle, glob_pattern)
for glob_pattern in expected_file_patterns
],
)
)
input_data = {}
for key, pattern in required_file_patterns.items():
file = list(cosmx_output_bundle.glob(pattern))
assert len(file) == 1, f"Expected one file for {key}, found {len(file)}."
input_data[key] = file[0]
return input_data

View File

@@ -20,7 +20,7 @@ def unzip_archived_folder(archived_folder: Union[str, Path]) -> Union[str, Path]
with zipfile.ZipFile(archived_folder, "r") as archive:
archive.extractall(temp_dir)
return temp_dir
return temp_dir / Path(archived_folder).stem
def extract_selected_files_from_zip(

View File

@@ -234,7 +234,7 @@ build_info:
output: "target/executable/convert/from_cosmx_to_spatialexperiment"
executable: "target/executable/convert/from_cosmx_to_spatialexperiment/from_cosmx_to_spatialexperiment"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -457,9 +457,9 @@ RUN Rscript -e 'options(warn = 2); if (!requireNamespace("BiocManager", quietly
LABEL org.opencontainers.image.authors="Dorien Roosen"
LABEL org.opencontainers.image.description="Companion container for running component convert from_cosmx_to_spatialexperiment"
LABEL org.opencontainers.image.created="2025-08-28T07:09:08Z"
LABEL org.opencontainers.image.created="2025-09-03T05:47:10Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="56c413edcb8630cf4e6df89a39589c44dbb53d53"
LABEL org.opencontainers.image.revision="65041334be24bd2fa911a5ae85121c09aefeaec0"
LABEL org.opencontainers.image.version="allow-compressed-output-bundles"
VIASHDOCKER
@@ -1223,25 +1223,32 @@ rm(.viash_orig_warn)
source(paste0(meta\$resources_dir, "/unzip_archived_folder.R"))
cat("Reading input data...")
if (tools::file_ext(par\$input) == "zip") {
expected_file_patterns <- c(
"*.csv",
"*.parquet"
)
tmp_dir <- extract_selected_files(
par\$input,
members = expected_file_patterns
)
cosmx_output_bundle <- file.path(
tmp_dir,
tools::file_path_sans_ext(basename(par\$input))
)
} else {
cosmx_output_bundle <- par\$input
}
cat("Setting parameters...")
if (par\$add_polygon_path == FALSE && par\$add_tx_path == FALSE) {
add_parquet_paths <- FALSE
} else {
add_parquet_paths <- TRUE
}
cosmx_output_bundle <- par\$input
if (grepl("\\\\.zip\$", cosmx_output_bundle)) {
expected_file_patterns <- c(
"*.csv",
"*.parquet"
)
cosmx_output_bundle <- extract_selected_files(
cosmx_output_bundle,
members = expected_file_patterns
)
}
cat("Converting to SpatialExperiment...")
spe <- readCosmxSXE(
dirName = cosmx_output_bundle,
returnType = "SPE",
@@ -1256,6 +1263,7 @@ spe <- readCosmxSXE(
altExps = par\$alternative_experiment_features
)
cat("Saving output...")
saveRDS(spe, file = par\$output)
VIASHMAIN
Rscript "\$tempscript" &

View File

@@ -224,7 +224,7 @@ build_info:
output: "target/executable/convert/from_h5mu_to_spatialexperiment"
executable: "target/executable/convert/from_h5mu_to_spatialexperiment/from_h5mu_to_spatialexperiment"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -458,9 +458,9 @@ RUN Rscript -e 'options(warn = 2); if (!requireNamespace("remotes", quietly = TR
LABEL org.opencontainers.image.authors="Dorien Roosen"
LABEL org.opencontainers.image.description="Companion container for running component convert from_h5mu_to_spatialexperiment"
LABEL org.opencontainers.image.created="2025-08-28T07:09:08Z"
LABEL org.opencontainers.image.created="2025-09-03T05:47:11Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="56c413edcb8630cf4e6df89a39589c44dbb53d53"
LABEL org.opencontainers.image.revision="65041334be24bd2fa911a5ae85121c09aefeaec0"
LABEL org.opencontainers.image.version="allow-compressed-output-bundles"
VIASHDOCKER

View File

@@ -220,7 +220,7 @@ build_info:
output: "target/executable/convert/from_spatialdata_to_h5mu"
executable: "target/executable/convert/from_spatialdata_to_h5mu/from_spatialdata_to_h5mu"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -459,9 +459,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz"
LABEL org.opencontainers.image.description="Companion container for running component convert from_spatialdata_to_h5mu"
LABEL org.opencontainers.image.created="2025-08-28T07:09:08Z"
LABEL org.opencontainers.image.created="2025-09-03T05:47:11Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="56c413edcb8630cf4e6df89a39589c44dbb53d53"
LABEL org.opencontainers.image.revision="65041334be24bd2fa911a5ae85121c09aefeaec0"
LABEL org.opencontainers.image.version="allow-compressed-output-bundles"
VIASHDOCKER

View File

@@ -239,7 +239,7 @@ build_info:
output: "target/executable/convert/from_xenium_to_h5mu"
executable: "target/executable/convert/from_xenium_to_h5mu/from_xenium_to_h5mu"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -458,9 +458,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen"
LABEL org.opencontainers.image.description="Companion container for running component convert from_xenium_to_h5mu"
LABEL org.opencontainers.image.created="2025-08-28T07:09:08Z"
LABEL org.opencontainers.image.created="2025-09-03T05:47:10Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="56c413edcb8630cf4e6df89a39589c44dbb53d53"
LABEL org.opencontainers.image.revision="65041334be24bd2fa911a5ae85121c09aefeaec0"
LABEL org.opencontainers.image.version="allow-compressed-output-bundles"
VIASHDOCKER
@@ -1208,33 +1208,33 @@ def _retrieve_input_data(xenium_output_bundle):
# ├── experiment.xenium
# └── metrics_summary.csv
required_files = [
"cell_feature_matrix.h5",
"cells.parquet",
"experiment.xenium",
"metrics_summary.csv",
]
required_file_patterns = {
"count_matrix": "**/cell_feature_matrix.h5",
"cells_metadata": "**/cells.parquet",
"experiment": "**/experiment.xenium",
"metrics_summary": "**/metrics_summary.csv",
}
if zipfile.is_zipfile(xenium_output_bundle):
xenium_output_bundle = extract_selected_files_from_zip(
xenium_output_bundle, members=required_files
xenium_output_bundle,
members=[pattern for pattern in required_file_patterns.values()],
)
else:
xenium_output_bundle = Path(xenium_output_bundle)
assert os.path.isdir(xenium_output_bundle), (
"Input is expected to be a (compressed) directory."
)
input_dir = Path(xenium_output_bundle)
input_data = dict(
zip(
["count_matrix", "cells_metadata", "experiment", "metrics_summary"],
[input_dir / file for file in required_files],
input_data = {}
for key, pattern in required_file_patterns.items():
file = list(xenium_output_bundle.glob(pattern))
assert len(file) == 1, (
f"Expected exactly one file matching pattern {pattern}, found {len(file)}."
)
)
input_data[key] = file[0]
assert all([file.exists() for file in input_data.values()]), (
f"Not all required input files are found. Make sure that {par['input']} contains {input_data.values()}."
)
return input_data

View File

@@ -20,7 +20,7 @@ def unzip_archived_folder(archived_folder: Union[str, Path]) -> Union[str, Path]
with zipfile.ZipFile(archived_folder, "r") as archive:
archive.extractall(temp_dir)
return temp_dir
return temp_dir / Path(archived_folder).stem
def extract_selected_files_from_zip(

View File

@@ -320,7 +320,7 @@ build_info:
output: "target/executable/convert/from_xenium_to_spatialdata"
executable: "target/executable/convert/from_xenium_to_spatialdata/from_xenium_to_spatialdata"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -458,9 +458,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz"
LABEL org.opencontainers.image.description="Companion container for running component convert from_xenium_to_spatialdata"
LABEL org.opencontainers.image.created="2025-08-28T07:09:08Z"
LABEL org.opencontainers.image.created="2025-09-03T05:47:11Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="56c413edcb8630cf4e6df89a39589c44dbb53d53"
LABEL org.opencontainers.image.revision="65041334be24bd2fa911a5ae85121c09aefeaec0"
LABEL org.opencontainers.image.version="allow-compressed-output-bundles"
VIASHDOCKER
@@ -1341,6 +1341,7 @@ cat > "\$tempscript" << 'VIASHMAIN'
import sys
from spatialdata_io import xenium
import zipfile
from pathlib import Path
## VIASH START
# The following code has been auto-generated by Viash.
@@ -1394,9 +1395,20 @@ logger = setup_logger()
logger.info("Reading in Xenium data...")
if zipfile.is_zipfile(par["input"]):
required_file_patterns = [
"**/experiment.xenium",
"**/nucleus_boundaries.parquet",
"**/cell_boundaries.parquet",
"**/transcripts.parquet",
"**/cell_feature_matrix.h5",
"**/cells.parquet",
"**/morphology_mip.ome.tif",
"**/morphology_focus.ome.tif",
]
xenium_output_bundle = unzip_archived_folder(par["input"])
else:
xenium_output_bundle = par["input"]
xenium_output_bundle = Path(par["input"])
sdata = xenium(
xenium_output_bundle,
cells_boundaries=par["cells_boundaries"],

View File

@@ -20,7 +20,7 @@ def unzip_archived_folder(archived_folder: Union[str, Path]) -> Union[str, Path]
with zipfile.ZipFile(archived_folder, "r") as archive:
archive.extractall(temp_dir)
return temp_dir
return temp_dir / Path(archived_folder).stem
def extract_selected_files_from_zip(

View File

@@ -224,7 +224,7 @@ build_info:
output: "target/executable/convert/from_xenium_to_spatialexperiment"
executable: "target/executable/convert/from_xenium_to_spatialexperiment/from_xenium_to_spatialexperiment"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -457,9 +457,9 @@ RUN Rscript -e 'options(warn = 2); if (!requireNamespace("BiocManager", quietly
LABEL org.opencontainers.image.authors="Dorien Roosen"
LABEL org.opencontainers.image.description="Companion container for running component convert from_xenium_to_spatialexperiment"
LABEL org.opencontainers.image.created="2025-08-28T07:09:07Z"
LABEL org.opencontainers.image.created="2025-09-03T05:47:10Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="56c413edcb8630cf4e6df89a39589c44dbb53d53"
LABEL org.opencontainers.image.revision="65041334be24bd2fa911a5ae85121c09aefeaec0"
LABEL org.opencontainers.image.version="allow-compressed-output-bundles"
VIASHDOCKER
@@ -1197,20 +1197,26 @@ rm(.viash_orig_warn)
source(paste0(meta\$resources_dir, "/unzip_archived_folder.R"))
xenium_output_bundle <- par\$input
if (grepl("\\\\.zip\$", xenium_output_bundle)) {
expected_file_patterns <- c(
"cell_feature_matrix.h5",
"*.parquet",
"experiment.xenium"
cat("Reading input data...")
if (tools::file_ext(par\$input) == "zip") {
required_file_patterns <- c(
"**/cell_feature_matrix.h5",
"**/*.parquet",
"**/experiment.xenium"
)
xenium_output_bundle <- extract_selected_files(
xenium_output_bundle,
members = expected_file_patterns
tmp_dir <- extract_selected_files(
par\$input,
members = required_file_patterns
)
xenium_output_bundle <- file.path(
tmp_dir,
tools::file_path_sans_ext(basename(par\$input))
)
} else {
xenium_output_bundle <- par\$input
}
cat("Converting to SpatialExperiment")
spe <- readXeniumSXE(
dirName = xenium_output_bundle,
returnType = "SPE",
@@ -1222,6 +1228,7 @@ spe <- readXeniumSXE(
altExps = par\$alternative_experiment_features
)
cat("Saving output...")
saveRDS(spe, file = par\$output)
VIASHMAIN
Rscript "\$tempscript" &

View File

@@ -227,7 +227,7 @@ build_info:
output: "target/executable/filter/subset_cosmx"
executable: "target/executable/filter/subset_cosmx/subset_cosmx"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -458,9 +458,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen, Weiwei Schultz"
LABEL org.opencontainers.image.description="Companion container for running component filter subset_cosmx"
LABEL org.opencontainers.image.created="2025-08-28T07:09:07Z"
LABEL org.opencontainers.image.created="2025-09-03T05:47:10Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="56c413edcb8630cf4e6df89a39589c44dbb53d53"
LABEL org.opencontainers.image.revision="65041334be24bd2fa911a5ae85121c09aefeaec0"
LABEL org.opencontainers.image.version="allow-compressed-output-bundles"
VIASHDOCKER

View File

@@ -426,7 +426,7 @@ build_info:
output: "target/executable/mapping/spaceranger_count"
executable: "target/executable/mapping/spaceranger_count/spaceranger_count"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -453,9 +453,9 @@ apt upgrade -y && apt install -y procps && rm -rf /var/lib/apt/lists/*
LABEL org.opencontainers.image.authors="Jakub Majercik"
LABEL org.opencontainers.image.description="Companion container for running component mapping spaceranger_count"
LABEL org.opencontainers.image.created="2025-08-28T07:09:07Z"
LABEL org.opencontainers.image.created="2025-09-03T05:47:10Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="56c413edcb8630cf4e6df89a39589c44dbb53d53"
LABEL org.opencontainers.image.revision="65041334be24bd2fa911a5ae85121c09aefeaec0"
LABEL org.opencontainers.image.version="allow-compressed-output-bundles"
VIASHDOCKER

View File

@@ -296,7 +296,7 @@ build_info:
output: "target/nextflow/convert/from_cells2stats_to_h5mu"
executable: "target/nextflow/convert/from_cells2stats_to_h5mu/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3393,7 +3393,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_cells2stats_to_h5mu",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {
@@ -3642,27 +3642,29 @@ def retrieve_input_data(cells2stats_output_bundle):
# │ └── RawCellStats.parquet
# └── Panel.json
required_files = ["Panel.json", "Cytoprofiling/Instrument/RawCellStats.parquet"]
required_file_patterns = {
"target_panel": "**/Panel.json",
"count_matrix": "**/Cytoprofiling/Instrument/RawCellStats.parquet",
}
if zipfile.is_zipfile(cells2stats_output_bundle):
cells2stats_output_bundle = extract_selected_files_from_zip(
cells2stats_output_bundle, members=required_files
cells2stats_output_bundle, members=required_file_patterns.values()
)
else:
cells2stats_output_bundle = Path(cells2stats_output_bundle)
assert os.path.isdir(cells2stats_output_bundle), (
"Input is expected to be a (compressed) directory."
)
input_dir = Path(cells2stats_output_bundle)
input_data = dict(
zip(
["target_panel", "count_matrix"],
[input_dir / file for file in required_files],
)
)
assert all([file.exists() for file in input_data.values()]), (
f"Not all required input files are found. Make sure that {par['input']} contains {input_data.values()}."
)
input_data = {}
for key, pattern in required_file_patterns.items():
file = list(cells2stats_output_bundle.glob(pattern))
assert len(file) == 1, (
f"Expected exactly one file matching pattern {pattern}, found {len(file)}."
)
input_data[key] = file[0]
return input_data

View File

@@ -20,7 +20,7 @@ def unzip_archived_folder(archived_folder: Union[str, Path]) -> Union[str, Path]
with zipfile.ZipFile(archived_folder, "r") as archive:
archive.extractall(temp_dir)
return temp_dir
return temp_dir / Path(archived_folder).stem
def extract_selected_files_from_zip(

View File

@@ -231,7 +231,7 @@ build_info:
output: "target/nextflow/convert/from_cosmx_to_h5mu"
executable: "target/nextflow/convert/from_cosmx_to_h5mu/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3342,7 +3342,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_cosmx_to_h5mu",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {
@@ -3396,8 +3396,8 @@ import sys
import os
import squidpy as sq
import mudata as mu
import glob
import zipfile
from pathlib import Path
## VIASH START
# The following code has been auto-generated by Viash.
@@ -3440,44 +3440,33 @@ from unzip_archived_folder import extract_selected_files_from_zip
logger = setup_logger()
def find_cosmx_files(cosmx_output_bundle, suffix):
pattern = os.path.join(cosmx_output_bundle, f"*{suffix}")
files = glob.glob(pattern)
assert len(files) == 1, (
f"Only one file matching pattern {pattern} should be present"
)
return files[0]
def retrieve_input_data(cosmx_output_bundle):
# Expected folder structure (showing only relevant files):
# ├── *_exprMat_file.csv
# ├── *_fov_positions_file.csv
# └── *_metadata_file.csv
expected_file_patterns = [
"exprMat_file.csv",
"fov_positions_file.csv",
"metadata_file.csv",
]
required_file_patterns = {
"counts_file": "**/*exprMat_file.csv",
"fov_file": "**/*fov_positions_file.csv",
"meta_file": "**/*metadata_file.csv",
}
if zipfile.is_zipfile(cosmx_output_bundle):
cosmx_output_bundle = extract_selected_files_from_zip(
cosmx_output_bundle, members=["*" + file for file in expected_file_patterns]
cosmx_output_bundle, members=required_file_patterns.values()
)
else:
cosmx_output_bundle = Path(cosmx_output_bundle)
assert os.path.isdir(cosmx_output_bundle), (
"Input is expected to be a (compressed) directory."
)
input_data = dict(
zip(
["counts_file", "fov_file", "meta_file"],
[
find_cosmx_files(cosmx_output_bundle, glob_pattern)
for glob_pattern in expected_file_patterns
],
)
)
input_data = {}
for key, pattern in required_file_patterns.items():
file = list(cosmx_output_bundle.glob(pattern))
assert len(file) == 1, f"Expected one file for {key}, found {len(file)}."
input_data[key] = file[0]
return input_data

View File

@@ -20,7 +20,7 @@ def unzip_archived_folder(archived_folder: Union[str, Path]) -> Union[str, Path]
with zipfile.ZipFile(archived_folder, "r") as archive:
archive.extractall(temp_dir)
return temp_dir
return temp_dir / Path(archived_folder).stem
def extract_selected_files_from_zip(

View File

@@ -234,7 +234,7 @@ build_info:
output: "target/nextflow/convert/from_cosmx_to_spatialexperiment"
executable: "target/nextflow/convert/from_cosmx_to_spatialexperiment/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3326,7 +3326,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_cosmx_to_spatialexperiment",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {
@@ -3424,25 +3424,32 @@ rm(.viash_orig_warn)
source(paste0(meta\\$resources_dir, "/unzip_archived_folder.R"))
cat("Reading input data...")
if (tools::file_ext(par\\$input) == "zip") {
expected_file_patterns <- c(
"*.csv",
"*.parquet"
)
tmp_dir <- extract_selected_files(
par\\$input,
members = expected_file_patterns
)
cosmx_output_bundle <- file.path(
tmp_dir,
tools::file_path_sans_ext(basename(par\\$input))
)
} else {
cosmx_output_bundle <- par\\$input
}
cat("Setting parameters...")
if (par\\$add_polygon_path == FALSE && par\\$add_tx_path == FALSE) {
add_parquet_paths <- FALSE
} else {
add_parquet_paths <- TRUE
}
cosmx_output_bundle <- par\\$input
if (grepl("\\\\\\\\.zip\\$", cosmx_output_bundle)) {
expected_file_patterns <- c(
"*.csv",
"*.parquet"
)
cosmx_output_bundle <- extract_selected_files(
cosmx_output_bundle,
members = expected_file_patterns
)
}
cat("Converting to SpatialExperiment...")
spe <- readCosmxSXE(
dirName = cosmx_output_bundle,
returnType = "SPE",
@@ -3457,6 +3464,7 @@ spe <- readCosmxSXE(
altExps = par\\$alternative_experiment_features
)
cat("Saving output...")
saveRDS(spe, file = par\\$output)
VIASHMAIN
Rscript "$tempscript"

View File

@@ -224,7 +224,7 @@ build_info:
output: "target/nextflow/convert/from_h5mu_to_spatialexperiment"
executable: "target/nextflow/convert/from_h5mu_to_spatialexperiment/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3332,7 +3332,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_h5mu_to_spatialexperiment",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -220,7 +220,7 @@ build_info:
output: "target/nextflow/convert/from_spatialdata_to_h5mu"
executable: "target/nextflow/convert/from_spatialdata_to_h5mu/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3330,7 +3330,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_spatialdata_to_h5mu",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -239,7 +239,7 @@ build_info:
output: "target/nextflow/convert/from_xenium_to_h5mu"
executable: "target/nextflow/convert/from_xenium_to_h5mu/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3342,7 +3342,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_xenium_to_h5mu",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {
@@ -3451,33 +3451,33 @@ def _retrieve_input_data(xenium_output_bundle):
# ├── experiment.xenium
# └── metrics_summary.csv
required_files = [
"cell_feature_matrix.h5",
"cells.parquet",
"experiment.xenium",
"metrics_summary.csv",
]
required_file_patterns = {
"count_matrix": "**/cell_feature_matrix.h5",
"cells_metadata": "**/cells.parquet",
"experiment": "**/experiment.xenium",
"metrics_summary": "**/metrics_summary.csv",
}
if zipfile.is_zipfile(xenium_output_bundle):
xenium_output_bundle = extract_selected_files_from_zip(
xenium_output_bundle, members=required_files
xenium_output_bundle,
members=[pattern for pattern in required_file_patterns.values()],
)
else:
xenium_output_bundle = Path(xenium_output_bundle)
assert os.path.isdir(xenium_output_bundle), (
"Input is expected to be a (compressed) directory."
)
input_dir = Path(xenium_output_bundle)
input_data = dict(
zip(
["count_matrix", "cells_metadata", "experiment", "metrics_summary"],
[input_dir / file for file in required_files],
input_data = {}
for key, pattern in required_file_patterns.items():
file = list(xenium_output_bundle.glob(pattern))
assert len(file) == 1, (
f"Expected exactly one file matching pattern {pattern}, found {len(file)}."
)
)
input_data[key] = file[0]
assert all([file.exists() for file in input_data.values()]), (
f"Not all required input files are found. Make sure that {par['input']} contains {input_data.values()}."
)
return input_data

View File

@@ -20,7 +20,7 @@ def unzip_archived_folder(archived_folder: Union[str, Path]) -> Union[str, Path]
with zipfile.ZipFile(archived_folder, "r") as archive:
archive.extractall(temp_dir)
return temp_dir
return temp_dir / Path(archived_folder).stem
def extract_selected_files_from_zip(

View File

@@ -320,7 +320,7 @@ build_info:
output: "target/nextflow/convert/from_xenium_to_spatialdata"
executable: "target/nextflow/convert/from_xenium_to_spatialdata/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3436,7 +3436,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_xenium_to_spatialdata",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {
@@ -3489,6 +3489,7 @@ cat > "$tempscript" << VIASHMAIN
import sys
from spatialdata_io import xenium
import zipfile
from pathlib import Path
## VIASH START
# The following code has been auto-generated by Viash.
@@ -3542,9 +3543,20 @@ logger = setup_logger()
logger.info("Reading in Xenium data...")
if zipfile.is_zipfile(par["input"]):
required_file_patterns = [
"**/experiment.xenium",
"**/nucleus_boundaries.parquet",
"**/cell_boundaries.parquet",
"**/transcripts.parquet",
"**/cell_feature_matrix.h5",
"**/cells.parquet",
"**/morphology_mip.ome.tif",
"**/morphology_focus.ome.tif",
]
xenium_output_bundle = unzip_archived_folder(par["input"])
else:
xenium_output_bundle = par["input"]
xenium_output_bundle = Path(par["input"])
sdata = xenium(
xenium_output_bundle,
cells_boundaries=par["cells_boundaries"],

View File

@@ -20,7 +20,7 @@ def unzip_archived_folder(archived_folder: Union[str, Path]) -> Union[str, Path]
with zipfile.ZipFile(archived_folder, "r") as archive:
archive.extractall(temp_dir)
return temp_dir
return temp_dir / Path(archived_folder).stem
def extract_selected_files_from_zip(

View File

@@ -224,7 +224,7 @@ build_info:
output: "target/nextflow/convert/from_xenium_to_spatialexperiment"
executable: "target/nextflow/convert/from_xenium_to_spatialexperiment/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3315,7 +3315,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_xenium_to_spatialexperiment",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {
@@ -3412,20 +3412,26 @@ rm(.viash_orig_warn)
source(paste0(meta\\$resources_dir, "/unzip_archived_folder.R"))
xenium_output_bundle <- par\\$input
if (grepl("\\\\\\\\.zip\\$", xenium_output_bundle)) {
expected_file_patterns <- c(
"cell_feature_matrix.h5",
"*.parquet",
"experiment.xenium"
cat("Reading input data...")
if (tools::file_ext(par\\$input) == "zip") {
required_file_patterns <- c(
"**/cell_feature_matrix.h5",
"**/*.parquet",
"**/experiment.xenium"
)
xenium_output_bundle <- extract_selected_files(
xenium_output_bundle,
members = expected_file_patterns
tmp_dir <- extract_selected_files(
par\\$input,
members = required_file_patterns
)
xenium_output_bundle <- file.path(
tmp_dir,
tools::file_path_sans_ext(basename(par\\$input))
)
} else {
xenium_output_bundle <- par\\$input
}
cat("Converting to SpatialExperiment")
spe <- readXeniumSXE(
dirName = xenium_output_bundle,
returnType = "SPE",
@@ -3437,6 +3443,7 @@ spe <- readXeniumSXE(
altExps = par\\$alternative_experiment_features
)
cat("Saving output...")
saveRDS(spe, file = par\\$output)
VIASHMAIN
Rscript "$tempscript"

View File

@@ -227,7 +227,7 @@ build_info:
output: "target/nextflow/filter/subset_cosmx"
executable: "target/nextflow/filter/subset_cosmx/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3333,7 +3333,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/filter/subset_cosmx",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -426,7 +426,7 @@ build_info:
output: "target/nextflow/mapping/spaceranger_count"
executable: "target/nextflow/mapping/spaceranger_count/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3548,7 +3548,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/mapping/spaceranger_count",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -640,7 +640,7 @@ build_info:
output: "target/nextflow/workflows/multiomics/spatial_process_samples"
executable: "target/nextflow/workflows/multiomics/spatial_process_samples/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
dependencies:
- "target/dependencies/vsh/vsh/openpipeline/v3.0.0/nextflow/workflows/multiomics/process_samples"

View File

@@ -3807,7 +3807,7 @@ meta = [
"engine" : "native",
"output" : "/workdir/root/repo/target/nextflow/workflows/multiomics/spatial_process_samples",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -387,7 +387,7 @@ build_info:
output: "target/nextflow/workflows/qc/spatial_qc"
executable: "target/nextflow/workflows/qc/spatial_qc/main.nf"
viash_version: "0.9.4"
git_commit: "56c413edcb8630cf4e6df89a39589c44dbb53d53"
git_commit: "65041334be24bd2fa911a5ae85121c09aefeaec0"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
dependencies:
- "target/dependencies/vsh/vsh/openpipeline/v3.0.0/nextflow/workflows/qc/qc"

View File

@@ -3505,7 +3505,7 @@ meta = [
"engine" : "native",
"output" : "/workdir/root/repo/target/nextflow/workflows/qc/spatial_qc",
"viash_version" : "0.9.4",
"git_commit" : "56c413edcb8630cf4e6df89a39589c44dbb53d53",
"git_commit" : "65041334be24bd2fa911a5ae85121c09aefeaec0",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {