Build branch openpipeline_spatial/niche-compass with version niche-compass to openpipeline_spatial on branch niche-compass (ad19aba)

Build pipeline: openpipelines-bio.openpipeline-spatial.niche-compass-d9hs2

Source commit: ad19aba349

Source message: update split h5mu
This commit is contained in:
CI
2026-02-17 12:05:06 +00:00
parent 7deb42403b
commit f057217658
83 changed files with 2421 additions and 219 deletions

View File

@@ -0,0 +1,73 @@
name: split_h5mu
namespace: "dataflow"
scope: "public"
description: |
Split the samples of a single modality from a .h5mu (multimodal) sample into seperate .h5mu files based on the values of an .obs column of this modality.
authors:
- __merge__: /src/authors/dorien_roosen.yaml
roles: [ author, maintainer ]
argument_groups:
- name: Input & specifications
arguments:
- name: "--input"
type: file
description: Path to a single .h5mu file.
required: true
- name: "--modality"
description: |
Which modality from the input MuData file to process.
type: string
default: "rna"
required: false
- name: "--obs_feature"
type: string
required: true
description: The .obs column to split the mudata on.
example: "celltype"
- name: "--drop_obs_nan"
type: boolean_true
description: Whether to drop all .obs columns that contain only nan values after splitting.
- name: "--ensure_unique_filenames"
type: boolean_true
description: Append number suffixes to ensure unique filenames after sanitizing obs feature values.
- name: Outputs
arguments:
- name: "--output"
type: file
required: true
direction: output
example: "/path/to/output"
description: Output directory containing multiple h5mu files.
- name: "--output_files"
type: file
required: true
direction: output
example: sample_files.csv
description: A csv containing the base filename and obs feature by which it was split.
__merge__: [., /src/base/h5_compression_argument.yaml]
resources:
- type: python_script
path: script.py
- path: /src/utils/setup_logger.py
test_resources:
- type: python_script
path: test.py
engines:
- type: docker
image: python:3.12-slim
setup:
- type: apt
packages:
- procps
- type: python
__merge__: /src/base/requirements/anndata_mudata.yaml
__merge__: [ /src/base/requirements/python_test_setup.yaml, .]
runners:
- type: executable
- type: nextflow
directives:
label: [ lowcpu, highmem, highdisk]

View File

@@ -0,0 +1,119 @@
import sys
import mudata as mu
import pandas as pd
import re
import gc
from pathlib import Path
from collections import defaultdict
### VIASH START
par = {
"input": "cart_atomx_process_samples.h5mu",
"modality": "rna",
"obs_feature": "sample_id",
"output": "reference_download/sample_split",
"drop_obs_nan": "true",
"output_compression": None,
"output_files": "reference_download/sample_files.csv",
"ensure_unique_filenames": True,
}
meta = {
"resources_dir": "src/utils",
}
# import anndata as ad
# df = pd.DataFrame(
# [[1, 2, 3], [4, 5, 6]], index=["obs1", "obs2"], columns=["var1", "var2", "var3"]
# )
# var3 = pd.DataFrame(["d", "e", "g"], index=df.columns, columns=["Feat"])
# obs3 = pd.DataFrame(["C C", "C_C"], index=df.index, columns=["Obs"])
# ad3 = ad.AnnData(df, obs=obs3, var=var3)
# mdata = mu.MuData({"rna": ad3})
# mdata.write_h5mu("test_san.h5mu")
# par["input"] = "test_san.h5mu"
# par["obs_feature"] = "Obs"
### VIASH END
sys.path.append(meta["resources_dir"])
from setup_logger import setup_logger
logger = setup_logger()
def main():
logger.info(f"Reading {par['input']}")
input_file = Path(par["input"].strip())
mdata = mu.read_h5mu(input_file)
adata = mdata.mod[par["modality"]]
logger.info(f"Reading unique features from {par['obs_feature']}")
obs_features = adata.obs[par["obs_feature"]].unique().tolist()
# sanitize --obs_feature values
obs_features_s = [re.sub(r"[-\s]", "_", str(s).strip()) for s in obs_features]
obs_features_s = [re.sub(r"[^A-Za-z0-9_]", "", s) for s in obs_features_s]
# ensure that names are unique, if not raise or append number as suffix
if not len(obs_features_s) == len(set(obs_features_s)):
if not par["ensure_unique_filenames"]:
raise ValueError(
f"File names are not unique after sanitizing the --obs_feature {par['obs_feature']} values"
)
logger.info("Ensuring unique names for par['obs_feature']")
counts = defaultdict(lambda: -1)
for i, feature in enumerate(obs_features_s):
counts[feature] += 1
if (curr_counts := counts[feature]) > 0:
obs_features_s[i] += f"_{curr_counts}"
# generate output dir
output_dir = Path(par["output"])
if not output_dir.is_dir():
output_dir.mkdir(parents=True)
# split modality of mdata file base on obs_feature
logger.info(f"Splitting file based on {par['obs_feature']} values {obs_features}")
obs_files = []
for obs_name, file_name in zip(obs_features, obs_features_s):
logger.info(
f"Filtering modality '{par['modality']}' observations by .obs['{par['obs_feature']}'] == {obs_name}"
)
mdata_obs = mdata.copy()
adata_full = mdata_obs.mod[par["modality"]]
# split the samples
mask = adata_full.obs[par["obs_feature"]] == obs_name
adata_obs = adata_full[mask].copy()
# Dropping columns that only have nan values after splitting
if par["drop_obs_nan"]:
logger.info("Dropping all .obs columns with NaN values")
adata_obs.obs = adata_obs.obs.dropna(axis=1, how="all")
mdata_obs.mod[par["modality"]] = adata_obs
mdata_obs_name = f"{input_file.stem}_{file_name}.h5mu"
out_path = output_dir / mdata_obs_name
# replace mdata file with modality adata contianing split samples
logger.info(
f"Writing h5mu filtered for {par['obs_feature']} {obs_name} to file {out_path}"
)
mdata_obs.write_h5mu(out_path, compression=par["output_compression"])
# avoid keeping files in memory
obs_files.append(mdata_obs_name)
del mdata_obs, adata_obs
gc.collect()
logger.info(f"Writing output_files CSV file to {par['output_files']}")
df = pd.DataFrame({"name": obs_features_s, "filename": obs_files})
df.to_csv(par["output_files"], index=False)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,288 @@
import sys
from textwrap import dedent
import pytest
import mudata as mu
import anndata as ad
import numpy as np
import pandas as pd
import subprocess
import re
@pytest.fixture
def input_modality_1():
df = pd.DataFrame(
[[1, 2, 3], [4, 5, 6]], index=["obs1", "obs2"], columns=["var1", "var2", "var3"]
)
obs = pd.DataFrame({"Obs": ["A", "B"], "Obs_nan": [np.nan, np.nan]}, index=df.index)
var = pd.DataFrame([["a"], ["b"], ["c"]], index=df.columns, columns=["Feat"])
ad1 = ad.AnnData(df, obs=obs, var=var)
return ad1
@pytest.fixture
def input_modality_2():
df = pd.DataFrame(
[[1, 2, 3], [4, 5, 6]], index=["obs1", "obs2"], columns=["var1", "var2", "var3"]
)
var2 = pd.DataFrame(["d", "e", "g"], index=df.columns, columns=["Feat"])
obs2 = pd.DataFrame(["C", "D"], index=df.index, columns=["Obs"])
ad2 = ad.AnnData(df, obs=obs2, var=var2)
return ad2
@pytest.fixture
def input_modality_3():
df = pd.DataFrame(
[[1, 2, 3], [4, 5, 6]], index=["obs1", "obs2"], columns=["var1", "var2", "var3"]
)
var3 = pd.DataFrame(["d", "e", "g"], index=df.columns, columns=["Feat"])
obs3 = pd.DataFrame(["C C", "C_C"], index=df.index, columns=["Obs"])
ad3 = ad.AnnData(df, obs=obs3, var=var3)
return ad3
@pytest.fixture
def input_h5mu(input_modality_1, input_modality_2):
tmp_mudata = mu.MuData({"mod1": input_modality_1, "mod2": input_modality_2})
return tmp_mudata
@pytest.fixture
def input_h5mu_path(write_mudata_to_file, input_h5mu):
return write_mudata_to_file(input_h5mu)
@pytest.fixture
def input_h5mu_non_unique_filenames(input_modality_3):
tmp_mudata = mu.MuData({"mod3": input_modality_3})
return tmp_mudata
@pytest.fixture
def input_h5mu_path_non_unique_filenames(
write_mudata_to_file, input_h5mu_non_unique_filenames
):
return write_mudata_to_file(input_h5mu_non_unique_filenames)
def test_sample_split(run_component, random_path, input_h5mu, input_h5mu_path):
output_dir = random_path()
output_files = random_path(extension="csv")
args = [
"--input",
input_h5mu_path,
"--output",
str(output_dir),
"--modality",
"mod1",
"--obs_feature",
"Obs",
"--output_files",
str(output_files),
]
run_component(args)
assert output_files.is_file()
assert output_dir.is_dir()
# check output dir and file names
dir_content = [
h5mu_file
for h5mu_file in output_dir.iterdir()
if h5mu_file.suffix == ".h5mu" and h5mu_file != input_h5mu_path
]
s1_file = output_dir / f"{input_h5mu_path.stem}_A.h5mu"
s2_file = output_dir / f"{input_h5mu_path.stem}_B.h5mu"
assert set(dir_content) == set([s1_file, s2_file])
# check that number of modalities, variables and observations
s1 = mu.read_h5mu(s1_file)
s2 = mu.read_h5mu(s2_file)
assert s1.n_mod == 2
assert s2.n_mod == 2
assert s1.n_obs == input_h5mu.n_obs, (
"number of observations of split file does not match input file"
)
assert s2.n_obs == input_h5mu.n_obs, (
"number of observations of split file does not match input file"
)
assert s1.mod["mod1"].n_obs == 1, (
"number of observations of split file s1 modality mod1 should equal 1"
)
assert s1.mod["mod2"].n_obs == input_h5mu.n_obs, (
"number of observations of split file s1 modality mod2 should equal input file"
)
assert len(s1.mod["mod1"].obs.keys()) == 2, (
"number of observation keys split file s1 modality mod1 should equal 2"
)
assert len(s1.mod["mod2"].obs.keys()) == 1, (
"number of observation keys split file s1 modality mod2 should equal 1"
)
assert s2.mod["mod1"].n_obs == 1, (
"number of observations of split file s2 modality mod1 should equal 1"
)
assert s2.mod["mod2"].n_obs == input_h5mu.n_obs, (
"number of observations of split file s2 modality mod2 should equal input file"
)
assert s1.n_vars == input_h5mu.n_vars, (
"number of variables of split file s1 should equal input file"
)
assert s2.n_vars == input_h5mu.n_vars, (
"number of variables of split file s1 should equal input file"
)
assert s1.mod["mod1"].n_vars == input_h5mu.mod["mod1"].n_vars, (
"number of variables of split file s1 modalitty mod1 should equal input file"
)
assert s1.mod["mod2"].n_vars == input_h5mu.mod["mod1"].n_vars, (
"number of variables of split file s1 modalitty mod2 should equal input file"
)
assert s2.mod["mod1"].n_vars == input_h5mu.mod["mod1"].n_vars, (
"number of variables of split file s2 modalitty mod1 should equal input file"
)
assert s2.mod["mod2"].n_vars == input_h5mu.mod["mod1"].n_vars, (
"number of variables of split file s2 modalitty mod2 should equal input file"
)
# check correct sample splitting
assert np.all(s1.mod["mod1"].obs["Obs"] == "A"), (
"observation of .obs Obs in s1 should equal A"
)
assert np.all(s2.mod["mod1"].obs["Obs"] == "B"), (
"observation of .obs Obs in s2 should equal B"
)
# Check contents of csv file
expected_csv_output = dedent(
f"""\
name,filename
A,{s1_file.name}
B,{s2_file.name}
"""
)
with open(output_files, "r") as open_csv_file:
result = open_csv_file.read()
assert result == expected_csv_output
def test_sample_split_dropna(run_component, random_path, input_h5mu, input_h5mu_path):
output_dir = random_path()
output_files = random_path(extension="csv")
args = [
"--input",
input_h5mu_path,
"--output",
str(output_dir),
"--modality",
"mod1",
"--obs_feature",
"Obs",
"--drop_obs_nan",
"true",
"--output_files",
str(output_files),
]
run_component(args)
# check output dir and file names
s1_file = output_dir / f"{input_h5mu_path.stem}_A.h5mu"
s2_file = output_dir / f"{input_h5mu_path.stem}_B.h5mu"
# check that .obs columns with only nan values are dropped correctly
s1 = mu.read_h5mu(s1_file)
s2 = mu.read_h5mu(s2_file)
assert s1.n_obs == input_h5mu.n_obs, (
"number of observations of split file does not match input file"
)
assert s2.n_obs == input_h5mu.n_obs, (
"number of observations of split file does not match input file"
)
assert s1.mod["mod1"].n_obs == 1, (
"number of observations of split file s1 modality mod1 should equal 1"
)
assert s1.mod["mod2"].n_obs == input_h5mu.n_obs, (
"number of observations of split file s1 modality mod2 should equal input file"
)
assert len(s1.mod["mod1"].obs.keys()) == 1, (
"number of observation keys split file s1 modality mod1 should equal 1"
)
assert len(s1.mod["mod2"].obs.keys()) == 1, (
"number of observation keys split file s1 modality mod2 should equal 1"
)
def test_sanitizing(run_component, random_path, input_h5mu_path_non_unique_filenames):
output_dir = random_path()
output_files = random_path(extension="csv")
args = [
"--input",
input_h5mu_path_non_unique_filenames,
"--output",
str(output_dir),
"--modality",
"mod3",
"--obs_feature",
"Obs",
"--drop_obs_nan",
"true",
"--output_files",
str(output_files),
]
with pytest.raises(subprocess.CalledProcessError) as err:
run_component(args)
assert re.search(
r"ValueError: File names are not unique after sanitizing the --obs_feature Obs values",
err.value.stdout.decode("utf-8"),
)
args_san = [
"--input",
input_h5mu_path_non_unique_filenames,
"--output",
str(output_dir),
"--modality",
"mod3",
"--obs_feature",
"Obs",
"--drop_obs_nan",
"true",
"--output_files",
str(output_files),
"--ensure_unique_filenames",
"true",
]
run_component(args_san)
# check output dir and file names
dir_content = [
h5mu_file
for h5mu_file in output_dir.iterdir()
if h5mu_file.suffix == ".h5mu"
and h5mu_file != input_h5mu_path_non_unique_filenames
]
s1_file = output_dir / f"{input_h5mu_path_non_unique_filenames.stem}_C_C.h5mu"
s2_file = output_dir / f"{input_h5mu_path_non_unique_filenames.stem}_C_C_1.h5mu"
assert s1_file.is_file(), f"{s1_file} does not exist"
assert s2_file.is_file(), f"{s2_file} does not exist"
assert set(dir_content) == set([s1_file, s2_file]), (
"Output files do not match file names in csv"
)
if __name__ == "__main__":
sys.exit(pytest.main([__file__]))

View File

@@ -357,7 +357,6 @@ dependencies:
- name: neighbors/spatial_neighborhood_graph
- name: nichecompass/nichecompass
- name: dataflow/split_h5mu
repository: openpipeline
- name: workflows/multiomics/neighbors_leiden_umap
repository: openpipeline

View File

@@ -227,7 +227,7 @@ build_info:
output: "target/_private/executable/filter/subset_cosmx"
executable: "target/_private/executable/filter/subset_cosmx/subset_cosmx"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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="2026-02-16T13:09:08Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:57Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -227,7 +227,7 @@ build_info:
output: "target/_private/nextflow/filter/subset_cosmx"
executable: "target/_private/nextflow/filter/subset_cosmx/main.nf"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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/_private/nextflow/filter/subset_cosmx",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -157,7 +157,7 @@ build_info:
output: "target/_test/executable/test_workflows/ingestion/spaceranger_mapping_test"
executable: "target/_test/executable/test_workflows/ingestion/spaceranger_mapping_test/spaceranger_mapping_test"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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"
LABEL org.opencontainers.image.description="Companion container for running component test_workflows/ingestion spaceranger_mapping_test"
LABEL org.opencontainers.image.created="2026-02-16T13:09:07Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:59Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -156,7 +156,7 @@ build_info:
output: "target/_test/executable/test_workflows/niche/nichecompass_leiden_test"
executable: "target/_test/executable/test_workflows/niche/nichecompass_leiden_test/nichecompass_leiden_test"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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"
LABEL org.opencontainers.image.description="Companion container for running component test_workflows/niche nichecompass_leiden_test"
LABEL org.opencontainers.image.created="2026-02-16T13:09:07Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:59Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -157,7 +157,7 @@ build_info:
output: "target/_test/nextflow/test_workflows/ingestion/spaceranger_mapping_test"
executable: "target/_test/nextflow/test_workflows/ingestion/spaceranger_mapping_test/main.nf"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3235,7 +3235,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/_test/nextflow/test_workflows/ingestion/spaceranger_mapping_test",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -156,7 +156,7 @@ build_info:
output: "target/_test/nextflow/test_workflows/niche/nichecompass_leiden_test"
executable: "target/_test/nextflow/test_workflows/niche/nichecompass_leiden_test/main.nf"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3235,7 +3235,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/_test/nextflow/test_workflows/niche/nichecompass_leiden_test",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -1,48 +0,0 @@
process {
// Default resources for components that hardly do any processing
memory = { 2.GB * task.attempt }
cpus = 1
// Retry for exit codes that have something to do with memory issues
errorStrategy = { task.exitStatus in 137..140 ? 'retry' : 'terminate' }
maxRetries = 3
// The memory a task is assinged increases with each attempt
// uncomment the line below and adjust the value to set a global upper limit on the memory.
// resourceLimits = [ memory: 240.Gb ]
// CPU resources
withLabel: singlecpu { cpus = 1 }
withLabel: lowcpu { cpus = 4 }
withLabel: midcpu { cpus = 10 }
withLabel: highcpu { cpus = 20 }
// Memory resources
withLabel: lowmem { memory = { task?.resourceLimits?.memory && task?.maxRetries && task.attempt >= task.maxRetries ? task.resourceLimits.memory : 4.GB * task.attempt } }
withLabel: midmem { memory = { task?.resourceLimits?.memory && task?.maxRetries && task.attempt >= task.maxRetries ? task.resourceLimits.memory : 25.GB * task.attempt } }
withLabel: highmem { memory = { task?.resourceLimits?.memory && task?.maxRetries && task.attempt >= task.maxRetries ? task.resourceLimits.memory : 50.GB * task.attempt } }
withLabel: veryhighmem { memory = { task?.resourceLimits?.memory && task?.maxRetries && task.attempt >= task.maxRetries ? task.resourceLimits.memory : 75.GB * task.attempt } }
// Disk space
withLabel: lowdisk {
disk = {process.disk ? process.disk : null}
}
withLabel: middisk {
disk = {process.disk ? process.disk : null}
}
withLabel: highdisk {
disk = {process.disk ? process.disk : null}
}
withLabel: veryhighdisk {
disk = {process.disk ? process.disk : null}
}
// NOTE: The above labels intentionally do not have an effect by default.
// The user should set the disk space requirements by adding the following
// to the compute environment:
//
// withLabel: lowdisk { disk = { 20.GB * task.attempt } }
// withLabel: middisk { disk = { 100.GB * task.attempt } }
// withLabel: highdisk { disk = { 200.GB * task.attempt } }
// withLabel: veryhighdisk { disk = { 500.GB * task.attempt } }
}

View File

@@ -303,7 +303,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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"
LABEL org.opencontainers.image.description="Companion container for running component convert from_cells2stats_to_h5mu"
LABEL org.opencontainers.image.created="2026-02-16T13:09:08Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:58Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -239,7 +239,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -460,9 +460,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="2026-02-16T13:09:06Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:58Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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="2026-02-16T13:09:07Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:57Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -227,7 +227,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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="2026-02-16T13:09:08Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:57Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -265,7 +265,7 @@ build_info:
output: "target/executable/convert/from_spaceranger_to_h5mu"
executable: "target/executable/convert/from_spaceranger_to_h5mu/from_spaceranger_to_h5mu"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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_spaceranger_to_h5mu"
LABEL org.opencontainers.image.created="2026-02-16T13:09:07Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:59Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -223,7 +223,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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="2026-02-16T13:09:08Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:57Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -246,7 +246,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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"
LABEL org.opencontainers.image.description="Companion container for running component convert from_xenium_to_h5mu"
LABEL org.opencontainers.image.created="2026-02-16T13:09:07Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:59Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -326,7 +326,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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_xenium_to_spatialdata"
LABEL org.opencontainers.image.created="2026-02-16T13:09:07Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:59Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -238,7 +238,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -462,9 +462,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="2026-02-16T13:09:08Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:58Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -0,0 +1,279 @@
name: "split_h5mu"
namespace: "dataflow"
version: "niche-compass"
authors:
- name: "Dorien Roosen"
roles:
- "author"
- "maintainer"
info:
role: "Core Team Member"
links:
email: "dorien@data-intuitive.com"
github: "dorien-er"
linkedin: "dorien-roosen"
organizations:
- name: "Data Intuitive"
href: "https://www.data-intuitive.com"
role: "Data Scientist"
argument_groups:
- name: "Input & specifications"
arguments:
- type: "file"
name: "--input"
description: "Path to a single .h5mu file."
info: null
must_exist: true
create_parent: true
required: true
direction: "input"
multiple: false
multiple_sep: ";"
- type: "string"
name: "--modality"
description: "Which modality from the input MuData file to process.\n"
info: null
default:
- "rna"
required: false
direction: "input"
multiple: false
multiple_sep: ";"
- type: "string"
name: "--obs_feature"
description: "The .obs column to split the mudata on."
info: null
example:
- "celltype"
required: true
direction: "input"
multiple: false
multiple_sep: ";"
- type: "boolean_true"
name: "--drop_obs_nan"
description: "Whether to drop all .obs columns that contain only nan values after\
\ splitting."
info: null
direction: "input"
- type: "boolean_true"
name: "--ensure_unique_filenames"
description: "Append number suffixes to ensure unique filenames after sanitizing\
\ obs feature values."
info: null
direction: "input"
- name: "Outputs"
arguments:
- type: "file"
name: "--output"
description: "Output directory containing multiple h5mu files."
info: null
example:
- "/path/to/output"
must_exist: true
create_parent: true
required: true
direction: "output"
multiple: false
multiple_sep: ";"
- type: "file"
name: "--output_files"
description: "A csv containing the base filename and obs feature by which it was\
\ split."
info: null
example:
- "sample_files.csv"
must_exist: true
create_parent: true
required: true
direction: "output"
multiple: false
multiple_sep: ";"
- type: "string"
name: "--output_compression"
description: "Compression format to use for the output AnnData and/or Mudata objects.\n\
By default no compression is applied.\n"
info: null
example:
- "gzip"
required: false
choices:
- "gzip"
- "lzf"
direction: "input"
multiple: false
multiple_sep: ";"
resources:
- type: "python_script"
path: "script.py"
is_executable: true
- type: "file"
path: "setup_logger.py"
- type: "file"
path: "nextflow_labels.config"
dest: "nextflow_labels.config"
description: "Split the samples of a single modality from a .h5mu (multimodal) sample\
\ into seperate .h5mu files based on the values of an .obs column of this modality.\
\ \n"
test_resources:
- type: "python_script"
path: "test.py"
is_executable: true
info: null
status: "enabled"
scope:
image: "public"
target: "public"
repositories:
- type: "vsh"
name: "openpipeline"
repo: "openpipeline"
tag: "v4.0.2"
links:
repository: "https://github.com/openpipelines-bio/openpipeline_spatial"
docker_registry: "ghcr.io"
runners:
- type: "executable"
id: "executable"
docker_setup_strategy: "ifneedbepullelsecachedbuild"
- type: "nextflow"
id: "nextflow"
directives:
label:
- "lowcpu"
- "highmem"
- "highdisk"
tag: "$id"
auto:
simplifyInput: true
simplifyOutput: false
transcript: false
publish: false
config:
labels:
mem1gb: "memory = 1000000000.B"
mem2gb: "memory = 2000000000.B"
mem5gb: "memory = 5000000000.B"
mem10gb: "memory = 10000000000.B"
mem20gb: "memory = 20000000000.B"
mem50gb: "memory = 50000000000.B"
mem100gb: "memory = 100000000000.B"
mem200gb: "memory = 200000000000.B"
mem500gb: "memory = 500000000000.B"
mem1tb: "memory = 1000000000000.B"
mem2tb: "memory = 2000000000000.B"
mem5tb: "memory = 5000000000000.B"
mem10tb: "memory = 10000000000000.B"
mem20tb: "memory = 20000000000000.B"
mem50tb: "memory = 50000000000000.B"
mem100tb: "memory = 100000000000000.B"
mem200tb: "memory = 200000000000000.B"
mem500tb: "memory = 500000000000000.B"
mem1gib: "memory = 1073741824.B"
mem2gib: "memory = 2147483648.B"
mem4gib: "memory = 4294967296.B"
mem8gib: "memory = 8589934592.B"
mem16gib: "memory = 17179869184.B"
mem32gib: "memory = 34359738368.B"
mem64gib: "memory = 68719476736.B"
mem128gib: "memory = 137438953472.B"
mem256gib: "memory = 274877906944.B"
mem512gib: "memory = 549755813888.B"
mem1tib: "memory = 1099511627776.B"
mem2tib: "memory = 2199023255552.B"
mem4tib: "memory = 4398046511104.B"
mem8tib: "memory = 8796093022208.B"
mem16tib: "memory = 17592186044416.B"
mem32tib: "memory = 35184372088832.B"
mem64tib: "memory = 70368744177664.B"
mem128tib: "memory = 140737488355328.B"
mem256tib: "memory = 281474976710656.B"
mem512tib: "memory = 562949953421312.B"
cpu1: "cpus = 1"
cpu2: "cpus = 2"
cpu5: "cpus = 5"
cpu10: "cpus = 10"
cpu20: "cpus = 20"
cpu50: "cpus = 50"
cpu100: "cpus = 100"
cpu200: "cpus = 200"
cpu500: "cpus = 500"
cpu1000: "cpus = 1000"
script:
- "includeConfig(\"nextflow_labels.config\")"
debug: false
container: "docker"
engines:
- type: "docker"
id: "docker"
image: "python:3.12-slim"
target_registry: "images.viash-hub.com"
target_tag: "niche-compass"
namespace_separator: "/"
setup:
- type: "apt"
packages:
- "procps"
interactive: false
- type: "python"
user: false
packages:
- "anndata~=0.12.7"
- "awkward"
- "mudata~=0.3.2"
script:
- "exec(\"try:\\n import zarr; from importlib.metadata import version\\nexcept\
\ ModuleNotFoundError:\\n exit(0)\\nelse: assert int(version(\\\"zarr\\\"\
).partition(\\\".\\\")[0]) > 2\")"
upgrade: true
test_setup:
- type: "apt"
packages:
- "git"
interactive: false
- type: "python"
user: false
packages:
- "viashpy==0.9.0"
github:
- "openpipelines-bio/core#subdirectory=packages/python/openpipeline_testutils"
upgrade: true
entrypoint: []
cmd: null
- type: "native"
id: "native"
build_info:
config: "src/dataflow/split_h5mu/config.vsh.yaml"
runner: "executable"
engine: "docker|native"
output: "target/executable/dataflow/split_h5mu"
executable: "target/executable/dataflow/split_h5mu/split_h5mu"
viash_version: "0.9.4"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"
version: "niche-compass"
info:
test_resources:
- type: "s3"
path: "s3://openpipelines-bio/openpipeline_spatial/resources_test"
dest: "resources_test"
repositories:
- type: "vsh"
name: "openpipeline"
repo: "openpipeline"
tag: "v4.0.2"
viash_version: "0.9.4"
source: "src"
target: "target"
config_mods:
- ".resources += {path: '/src/workflows/utils/labels.config', dest: 'nextflow_labels.config'}\n\
.runners[.type == 'nextflow'].config.script := 'includeConfig(\"nextflow_labels.config\"\
)'"
- ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'niche-compass'"
organization: "vsh"
links:
repository: "https://github.com/openpipelines-bio/openpipeline_spatial"
docker_registry: "ghcr.io"

View File

@@ -0,0 +1,68 @@
process {
// Default resources for components that hardly do any processing
memory = { 2.GB * task.attempt }
cpus = 1
// Retry for exit codes that have something to do with memory issues
errorStrategy = { task.exitStatus in 137..140 ? 'retry' : 'terminate' }
maxRetries = 3
maxMemory = null
// CPU resources
withLabel: singlecpu { cpus = 1 }
withLabel: lowcpu { cpus = 4 }
withLabel: midcpu { cpus = 10 }
withLabel: highcpu { cpus = 20 }
// Memory resources
withLabel: lowmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: midmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: highmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: veryhighmem { memory = { get_memory( 75.GB * task.attempt ) } }
// Disk space
// Nextflow apparently can't handle empty directives, i.e.
// withLabel: lowdisk {}
// so for that reason we have to add a dummy directive
withLabel: lowdisk {
dummyDirective = "dummyValue"
}
withLabel: middisk {
dummyDirective = "dummyValue"
}
withLabel: highdisk {
dummyDirective = "dummyValue"
}
withLabel: veryhighdisk {
dummyDirective = "dummyValue"
}
// NOTE: The above labels intentionally do not have an effect by default.
// The user should set the disk space requirements by adding the following
// to the compute environment:
//
// withLabel: lowdisk { disk = { 20.GB * task.attempt } }
// withLabel: middisk { disk = { 100.GB * task.attempt } }
// withLabel: highdisk { disk = { 200.GB * task.attempt } }
// withLabel: veryhighdisk { disk = { 500.GB * task.attempt } }
}
def get_memory(to_compare) {
if (!process.containsKey("maxMemory") || !process.maxMemory) {
return to_compare
}
try {
if (process.containsKey("maxRetries") && process.maxRetries && task.attempt == (process.maxRetries as int)) {
return process.maxMemory
}
else if (to_compare.compareTo(process.maxMemory as nextflow.util.MemoryUnit) == 1) {
return max_memory as nextflow.util.MemoryUnit
}
else {
return to_compare
}
} catch (all) {
println "Error processing memory resources. Please check that process.maxMemory '${process.maxMemory}' and process.maxRetries '${process.maxRetries}' are valid!"
System.exit(1)
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -439,7 +439,7 @@ build_info:
output: "target/executable/mapping/spaceranger_count"
executable: "target/executable/mapping/spaceranger_count/spaceranger_count"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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="2026-02-16T13:09:06Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:57Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -270,7 +270,7 @@ build_info:
output: "target/executable/neighbors/spatial_neighborhood_graph"
executable: "target/executable/neighbors/spatial_neighborhood_graph/spatial_neighborhood_graph"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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 neighbors spatial_neighborhood_graph"
LABEL org.opencontainers.image.created="2026-02-16T13:09:08Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:57Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -998,7 +998,7 @@ build_info:
output: "target/executable/nichecompass/nichecompass"
executable: "target/executable/nichecompass/nichecompass/nichecompass"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -460,9 +460,9 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dorien Roosen"
LABEL org.opencontainers.image.description="Companion container for running component nichecompass nichecompass"
LABEL org.opencontainers.image.created="2026-02-16T13:09:08Z"
LABEL org.opencontainers.image.created="2026-02-17T11:00:58Z"
LABEL org.opencontainers.image.source="https://github.com/openpipelines-bio/openpipeline_spatial"
LABEL org.opencontainers.image.revision="86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
LABEL org.opencontainers.image.revision="ad19aba349736848d99a9646870d8e7868eb6515"
LABEL org.opencontainers.image.version="niche-compass"
VIASHDOCKER

View File

@@ -303,7 +303,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3400,7 +3400,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_cells2stats_to_h5mu",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -239,7 +239,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3350,7 +3350,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_cosmx_to_h5mu",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -227,7 +227,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

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

View File

@@ -265,7 +265,7 @@ build_info:
output: "target/nextflow/convert/from_spaceranger_to_h5mu"
executable: "target/nextflow/convert/from_spaceranger_to_h5mu/main.nf"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3368,7 +3368,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_spaceranger_to_h5mu",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -223,7 +223,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
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_spatialdata_to_h5mu",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -246,7 +246,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3349,7 +3349,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_xenium_to_h5mu",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -326,7 +326,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3443,7 +3443,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_xenium_to_spatialdata",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -238,7 +238,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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3337,7 +3337,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/convert/from_xenium_to_spatialexperiment",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -1,6 +1,6 @@
name: "split_h5mu"
namespace: "dataflow"
version: "v4.0.2"
version: "niche-compass"
authors:
- name: "Dorien Roosen"
roles:
@@ -123,9 +123,13 @@ status: "enabled"
scope:
image: "public"
target: "public"
license: "MIT"
repositories:
- type: "vsh"
name: "openpipeline"
repo: "openpipeline"
tag: "v4.0.2"
links:
repository: "https://github.com/openpipelines-bio/openpipeline"
repository: "https://github.com/openpipelines-bio/openpipeline_spatial"
docker_registry: "ghcr.io"
runners:
- type: "executable"
@@ -203,7 +207,7 @@ engines:
id: "docker"
image: "python:3.12-slim"
target_registry: "images.viash-hub.com"
target_tag: "v4.0.2"
target_tag: "niche-compass"
namespace_separator: "/"
setup:
- type: "apt"
@@ -229,7 +233,7 @@ engines:
- type: "python"
user: false
packages:
- "viashpy==0.8.0"
- "viashpy==0.9.0"
github:
- "openpipelines-bio/core#subdirectory=packages/python/openpipeline_testutils"
upgrade: true
@@ -244,31 +248,21 @@ build_info:
output: "target/nextflow/dataflow/split_h5mu"
executable: "target/nextflow/dataflow/split_h5mu/main.nf"
viash_version: "0.9.4"
git_commit: "cd7beddfa85b60b543399a9e2554b8e7b8eaaf62"
git_remote: "https://github.com/openpipelines-bio/openpipeline"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline"
version: "v4.0.2"
summary: "Best-practice workflows for single-cell multi-omics analyses.\n"
description: "OpenPipelines are extensible single cell analysis pipelines for reproducible\
\ and large-scale single cell processing using [Viash](https://viash.io) and [Nextflow](https://www.nextflow.io/).\n\
\nIn terms of workflows, the following has been made available, but keep in mind\
\ that\nindividual tools and functionality can be executed as standalone components\
\ as well.\n\n * Demultiplexing: conversion of raw sequencing data to FASTQ objects.\n\
\ * Ingestion: Read mapping and generating a count matrix.\n * Single sample\
\ processing: cell filtering and doublet detection.\n * Multisample processing:\
\ Count transformation, normalization, QC metric calulations.\n * Integration:\
\ Clustering, integration and batch correction using single and multimodal methods.\n\
\ * Downstream analysis workflows\n"
name: "openpipeline_spatial"
version: "niche-compass"
info:
test_resources:
- type: "s3"
path: "s3://openpipelines-data"
path: "s3://openpipelines-bio/openpipeline_spatial/resources_test"
dest: "resources_test"
nextflow_labels_ci:
- path: "src/workflows/utils/labels_ci.config"
description: "Adds the correct memory and CPU labels when running on the Viash\
\ Hub CI."
repositories:
- type: "vsh"
name: "openpipeline"
repo: "openpipeline"
tag: "v4.0.2"
viash_version: "0.9.4"
source: "src"
target: "target"
@@ -278,15 +272,8 @@ package_config:
)'"
- ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v4.0.2'"
keywords:
- "single-cell"
- "multimodal"
license: "MIT"
- ".engines[.type == 'docker'].target_tag := 'niche-compass'"
organization: "vsh"
links:
repository: "https://github.com/openpipelines-bio/openpipeline"
repository: "https://github.com/openpipelines-bio/openpipeline_spatial"
docker_registry: "ghcr.io"
homepage: "https://openpipelines.bio"
documentation: "https://openpipelines.bio/fundamentals"
issue_tracker: "https://github.com/openpipelines-bio/openpipeline/issues"

View File

@@ -1,4 +1,4 @@
// split_h5mu v4.0.2
// split_h5mu niche-compass
//
// This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative
// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
@@ -3035,7 +3035,7 @@ meta = [
"config": processConfig(readJsonBlob('''{
"name" : "split_h5mu",
"namespace" : "dataflow",
"version" : "v4.0.2",
"version" : "niche-compass",
"authors" : [
{
"name" : "Dorien Roosen",
@@ -3192,9 +3192,16 @@ meta = [
"image" : "public",
"target" : "public"
},
"license" : "MIT",
"repositories" : [
{
"type" : "vsh",
"name" : "openpipeline",
"repo" : "openpipeline",
"tag" : "v4.0.2"
}
],
"links" : {
"repository" : "https://github.com/openpipelines-bio/openpipeline",
"repository" : "https://github.com/openpipelines-bio/openpipeline_spatial",
"docker_registry" : "ghcr.io"
},
"runners" : [
@@ -3285,7 +3292,7 @@ meta = [
"id" : "docker",
"image" : "python:3.12-slim",
"target_registry" : "images.viash-hub.com",
"target_tag" : "v4.0.2",
"target_tag" : "niche-compass",
"namespace_separator" : "/",
"setup" : [
{
@@ -3321,7 +3328,7 @@ meta = [
"type" : "python",
"user" : false,
"packages" : [
"viashpy==0.8.0"
"viashpy==0.9.0"
],
"github" : [
"openpipelines-bio/core#subdirectory=packages/python/openpipeline_testutils"
@@ -3341,29 +3348,29 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/dataflow/split_h5mu",
"viash_version" : "0.9.4",
"git_commit" : "cd7beddfa85b60b543399a9e2554b8e7b8eaaf62",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline"
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {
"name" : "openpipeline",
"version" : "v4.0.2",
"summary" : "Best-practice workflows for single-cell multi-omics analyses.\n",
"description" : "OpenPipelines are extensible single cell analysis pipelines for reproducible and large-scale single cell processing using [Viash](https://viash.io) and [Nextflow](https://www.nextflow.io/).\n\nIn terms of workflows, the following has been made available, but keep in mind that\nindividual tools and functionality can be executed as standalone components as well.\n\n * Demultiplexing: conversion of raw sequencing data to FASTQ objects.\n * Ingestion: Read mapping and generating a count matrix.\n * Single sample processing: cell filtering and doublet detection.\n * Multisample processing: Count transformation, normalization, QC metric calulations.\n * Integration: Clustering, integration and batch correction using single and multimodal methods.\n * Downstream analysis workflows\n",
"name" : "openpipeline_spatial",
"version" : "niche-compass",
"info" : {
"test_resources" : [
{
"type" : "s3",
"path" : "s3://openpipelines-data",
"path" : "s3://openpipelines-bio/openpipeline_spatial/resources_test",
"dest" : "resources_test"
}
],
"nextflow_labels_ci" : [
{
"path" : "src/workflows/utils/labels_ci.config",
"description" : "Adds the correct memory and CPU labels when running on the Viash Hub CI."
}
]
},
"repositories" : [
{
"type" : "vsh",
"name" : "openpipeline",
"repo" : "openpipeline",
"tag" : "v4.0.2"
}
],
"viash_version" : "0.9.4",
"source" : "/workdir/root/repo/src",
"target" : "/workdir/root/repo/target",
@@ -3371,20 +3378,12 @@ meta = [
".resources += {path: '/src/workflows/utils/labels.config', dest: 'nextflow_labels.config'}\n.runners[.type == 'nextflow'].config.script := 'includeConfig(\\"nextflow_labels.config\\")'",
".engines += { type: \\"native\\" }",
".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'",
".engines[.type == 'docker'].target_tag := 'v4.0.2'"
".engines[.type == 'docker'].target_tag := 'niche-compass'"
],
"keywords" : [
"single-cell",
"multimodal"
],
"license" : "MIT",
"organization" : "vsh",
"links" : {
"repository" : "https://github.com/openpipelines-bio/openpipeline",
"docker_registry" : "ghcr.io",
"homepage" : "https://openpipelines.bio",
"documentation" : "https://openpipelines.bio/fundamentals",
"issue_tracker" : "https://github.com/openpipelines-bio/openpipeline/issues"
"repository" : "https://github.com/openpipelines-bio/openpipeline_spatial",
"docker_registry" : "ghcr.io"
}
}
}'''))
@@ -3493,30 +3492,32 @@ def main():
f"Filtering modality '{par['modality']}' observations by .obs['{par['obs_feature']}'] == {obs_name}"
)
mdata_obs = mdata.copy()
adata_obs = mdata_obs.mod[par["modality"]]
adata_full = mdata_obs.mod[par["modality"]]
# split the samples
adata_obs = adata_obs[adata_obs.obs[par["obs_feature"]] == obs_name]
mdata_obs_name = f"{input_file.stem}_{file_name}.h5mu"
obs_files.append(mdata_obs_name)
mask = adata_full.obs[par["obs_feature"]] == obs_name
adata_obs = adata_full[mask].copy()
# Dropping columns that only have nan values after splitting
if par["drop_obs_nan"]:
logger.info("Dropping all .obs columns with NaN values")
adata_obs.obs.dropna(axis=1, how="all", inplace=True)
adata_obs.obs = adata_obs.obs.dropna(axis=1, how="all")
mdata_obs.mod[par["modality"]] = adata_obs
mdata_obs_name = f"{input_file.stem}_{file_name}.h5mu"
out_path = output_dir / mdata_obs_name
# replace mdata file with modality adata contianing split samples
logger.info(
f"Writing h5mu filtered for {par['obs_feature']} {obs_name} to file {output_dir / mdata_obs_name}"
)
mdata_obs.mod[par["modality"]] = adata_obs
mdata_obs.write_h5mu(
output_dir / mdata_obs_name, compression=par["output_compression"]
f"Writing h5mu filtered for {par['obs_feature']} {obs_name} to file {out_path}"
)
mdata_obs.write_h5mu(out_path, compression=par["output_compression"])
# avoid keeping files in memory
del mdata_obs
del adata_obs
obs_files.append(mdata_obs_name)
del mdata_obs, adata_obs
gc.collect()
logger.info(f"Writing output_files CSV file to {par['output_files']}")
@@ -3907,8 +3908,8 @@ meta["defaults"] = [
directives: readJsonBlob('''{
"container" : {
"registry" : "images.viash-hub.com",
"image" : "vsh/openpipeline/dataflow/split_h5mu",
"tag" : "v4.0.2"
"image" : "vsh/openpipeline_spatial/dataflow/split_h5mu",
"tag" : "niche-compass"
},
"label" : [
"lowcpu",

View File

@@ -2,7 +2,7 @@ manifest {
name = 'dataflow/split_h5mu'
mainScript = 'main.nf'
nextflowVersion = '!>=20.12.1-edge'
version = 'v4.0.2'
version = 'niche-compass'
description = 'Split the samples of a single modality from a .h5mu (multimodal) sample into seperate .h5mu files based on the values of an .obs column of this modality. \n'
author = 'Dorien Roosen'
}

View File

@@ -0,0 +1,68 @@
process {
// Default resources for components that hardly do any processing
memory = { 2.GB * task.attempt }
cpus = 1
// Retry for exit codes that have something to do with memory issues
errorStrategy = { task.exitStatus in 137..140 ? 'retry' : 'terminate' }
maxRetries = 3
maxMemory = null
// CPU resources
withLabel: singlecpu { cpus = 1 }
withLabel: lowcpu { cpus = 4 }
withLabel: midcpu { cpus = 10 }
withLabel: highcpu { cpus = 20 }
// Memory resources
withLabel: lowmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: midmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: highmem { memory = { get_memory( 50.GB * task.attempt ) } }
withLabel: veryhighmem { memory = { get_memory( 75.GB * task.attempt ) } }
// Disk space
// Nextflow apparently can't handle empty directives, i.e.
// withLabel: lowdisk {}
// so for that reason we have to add a dummy directive
withLabel: lowdisk {
dummyDirective = "dummyValue"
}
withLabel: middisk {
dummyDirective = "dummyValue"
}
withLabel: highdisk {
dummyDirective = "dummyValue"
}
withLabel: veryhighdisk {
dummyDirective = "dummyValue"
}
// NOTE: The above labels intentionally do not have an effect by default.
// The user should set the disk space requirements by adding the following
// to the compute environment:
//
// withLabel: lowdisk { disk = { 20.GB * task.attempt } }
// withLabel: middisk { disk = { 100.GB * task.attempt } }
// withLabel: highdisk { disk = { 200.GB * task.attempt } }
// withLabel: veryhighdisk { disk = { 500.GB * task.attempt } }
}
def get_memory(to_compare) {
if (!process.containsKey("maxMemory") || !process.maxMemory) {
return to_compare
}
try {
if (process.containsKey("maxRetries") && process.maxRetries && task.attempt == (process.maxRetries as int)) {
return process.maxMemory
}
else if (to_compare.compareTo(process.maxMemory as nextflow.util.MemoryUnit) == 1) {
return max_memory as nextflow.util.MemoryUnit
}
else {
return to_compare
}
} catch (all) {
println "Error processing memory resources. Please check that process.maxMemory '${process.maxMemory}' and process.maxRetries '${process.maxRetries}' are valid!"
System.exit(1)
}
}

View File

@@ -0,0 +1,12 @@
def setup_logger():
import logging
from sys import stdout
logger = logging.getLogger()
logger.setLevel(logging.INFO)
console_handler = logging.StreamHandler(stdout)
logFormatter = logging.Formatter("%(asctime)s %(levelname)-8s %(message)s")
console_handler.setFormatter(logFormatter)
logger.addHandler(console_handler)
return logger

View File

@@ -439,7 +439,7 @@ build_info:
output: "target/nextflow/mapping/spaceranger_count"
executable: "target/nextflow/mapping/spaceranger_count/main.nf"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

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

View File

@@ -270,7 +270,7 @@ build_info:
output: "target/nextflow/neighbors/spatial_neighborhood_graph"
executable: "target/nextflow/neighbors/spatial_neighborhood_graph/main.nf"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -3373,7 +3373,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/neighbors/spatial_neighborhood_graph",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -998,7 +998,7 @@ build_info:
output: "target/nextflow/nichecompass/nichecompass"
executable: "target/nextflow/nichecompass/nichecompass/main.nf"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
package_config:
name: "openpipeline_spatial"

View File

@@ -4129,7 +4129,7 @@ meta = [
"engine" : "docker|native",
"output" : "/workdir/root/repo/target/nextflow/nichecompass/nichecompass",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -477,7 +477,7 @@ build_info:
output: "target/nextflow/workflows/ingestion/spaceranger_mapping"
executable: "target/nextflow/workflows/ingestion/spaceranger_mapping/main.nf"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
dependencies:
- "target/nextflow/mapping/spaceranger_count"

View File

@@ -3623,7 +3623,7 @@ meta = [
"engine" : "native",
"output" : "/workdir/root/repo/target/nextflow/workflows/ingestion/spaceranger_mapping",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
dependencies:
- "target/dependencies/vsh/vsh/openpipeline/v4.0.2/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" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {

View File

@@ -707,9 +707,7 @@ dependencies:
type: "local"
- name: "dataflow/split_h5mu"
repository:
type: "vsh"
repo: "openpipeline"
tag: "v4.0.2"
type: "local"
- name: "workflows/multiomics/neighbors_leiden_umap"
repository:
type: "vsh"
@@ -797,13 +795,13 @@ build_info:
output: "target/nextflow/workflows/niche/nichecompass_leiden"
executable: "target/nextflow/workflows/niche/nichecompass_leiden/main.nf"
viash_version: "0.9.4"
git_commit: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
dependencies:
- "target/dependencies/vsh/vsh/openpipeline/v4.0.2/nextflow/dataflow/concatenate_h5mu"
- "target/nextflow/neighbors/spatial_neighborhood_graph"
- "target/nextflow/nichecompass/nichecompass"
- "target/dependencies/vsh/vsh/openpipeline/v4.0.2/nextflow/dataflow/split_h5mu"
- "target/nextflow/dataflow/split_h5mu"
- "target/dependencies/vsh/vsh/openpipeline/v4.0.2/nextflow/workflows/multiomics/neighbors_leiden_umap"
package_config:
name: "openpipeline_spatial"

View File

@@ -3840,9 +3840,7 @@ meta = [
{
"name" : "dataflow/split_h5mu",
"repository" : {
"type" : "vsh",
"repo" : "openpipeline",
"tag" : "v4.0.2"
"type" : "local"
}
},
{
@@ -3950,7 +3948,7 @@ meta = [
"engine" : "native",
"output" : "/workdir/root/repo/target/nextflow/workflows/niche/nichecompass_leiden",
"viash_version" : "0.9.4",
"git_commit" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {
@@ -3996,7 +3994,7 @@ meta["root_dir"] = getRootDir()
include { concatenate_h5mu } from "${meta.root_dir}/dependencies/vsh/vsh/openpipeline/v4.0.2/nextflow/dataflow/concatenate_h5mu/main.nf"
include { spatial_neighborhood_graph } from "${meta.resources_dir}/../../../../nextflow/neighbors/spatial_neighborhood_graph/main.nf"
include { nichecompass } from "${meta.resources_dir}/../../../../nextflow/nichecompass/nichecompass/main.nf"
include { split_h5mu } from "${meta.root_dir}/dependencies/vsh/vsh/openpipeline/v4.0.2/nextflow/dataflow/split_h5mu/main.nf"
include { split_h5mu } from "${meta.resources_dir}/../../../../nextflow/dataflow/split_h5mu/main.nf"
include { neighbors_leiden_umap } from "${meta.root_dir}/dependencies/vsh/vsh/openpipeline/v4.0.2/nextflow/workflows/multiomics/neighbors_leiden_umap/main.nf"
// inner workflow

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: "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc"
git_commit: "ad19aba349736848d99a9646870d8e7868eb6515"
git_remote: "https://github.com/openpipelines-bio/openpipeline_spatial"
dependencies:
- "target/dependencies/vsh/vsh/openpipeline/v4.0.2/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" : "86d15c1b0d1bdc77c2adffaa09f98f28045fa5bc",
"git_commit" : "ad19aba349736848d99a9646870d8e7868eb6515",
"git_remote" : "https://github.com/openpipelines-bio/openpipeline_spatial"
},
"package_config" : {