cbib/SpaceBlocks

None

Overview

Latest release: v0.2.0, Last update: 2026-08-06

Share link: https://snakemake.github.io/snakemake-workflow-catalog?wf=cbib/SpaceBlocks

Quality control: linting: failed formatting: failed

Deployment

Step 1: Install Snakemake and Snakedeploy

Snakemake and Snakedeploy are best installed via the Conda package manager. It is recommended to install conda via Miniforge. Run

conda create -c conda-forge -c bioconda -c nodefaults --name snakemake snakemake snakedeploy

to install both Snakemake and Snakedeploy in an isolated environment. For all following commands ensure that this environment is activated via

conda activate snakemake

For other installation methods, refer to the Snakemake and Snakedeploy documentation.

Step 2: Deploy workflow

With Snakemake and Snakedeploy installed, the workflow can be deployed as follows. First, create an appropriate project working directory on your system and enter it:

mkdir -p path/to/project-workdir
cd path/to/project-workdir

In all following steps, we will assume that you are inside of that directory. Then run

snakedeploy deploy-workflow https://github.com/cbib/SpaceBlocks . --tag v0.2.0

Snakedeploy will create two folders, workflow and config. The former contains the deployment of the chosen workflow as a Snakemake module, the latter contains configuration files which will be modified in the next step in order to configure the workflow to your needs.

Step 3: Configure workflow

To configure the workflow, adapt config/config.yml to your needs following the instructions below.

Step 4: Run workflow

The deployment method is controlled using the --software-deployment-method (short --sdm) argument.

To run the workflow with automatic deployment of all required software via conda/mamba, use

snakemake --cores all --sdm conda

Snakemake will automatically detect the main Snakefile in the workflow subfolder and execute the workflow module that has been defined by the deployment in step 2.

For further options such as cluster and cloud execution, see the docs.

Step 5: Generate report

After finalizing your data analysis, you can automatically generate an interactive visual HTML report for inspection of results together with parameters and code inside of the browser using

snakemake --report report.zip

Configuration

The following section is imported from the workflow’s config/README.md.

This page explains how to fully set up the config files to run SpaceBlocks. Full documentation can be found at https://cbib.github.io/SpaceBlocks/configuration/.

SpaceBlocks is configured through config/config.yaml, which contains all the parameters needed for the run, plus one or two sample sheets.

The explanations on this page are divided by type (directory, parameter, color, and so on). In the config file, parameters are divided by Block and function.

Every key in config/config.yaml is validated against workflow/schemas/config.schema.yaml before the run starts, so a typo or a missing required field fails immediately with a clear message.

!!! note “Snakemake-catalog page” The full, always-updated table of every parameter (type, default, required) is generated automatically from the schema and shown on the workflow’s Snakemake-catalog page. This page covers the how and the why; the schema is the exhaustive reference.

1. Choose a mode

mode selects which Headblock builds the standardized contract h5ad (or none):

!!! warning “Space Ranger installation” The Visium HD HeadBlock additionally needs an external Space Ranger installation.

config["mode"]

Head that runs

Input

visiumhd

spaceranger_count_vhdgenerate_qupath_vhdprepare_input_vhd

10x Visium HD fastqs + Space Ranger

xenium5k

convert_zarr_x5kgenerate_qupath_x5kprepare_input_x5k

Xenium output bundle

atera

convert_zarr_ategenerate_qupath_ateprepare_input_ate

Atera output bundle; optional registered H&E inputs

merscope

generate_qupath_merprepare_input_mer

MERSCOPE region directory

decoupled

(none)

Pre-existing contract h5ad files you provide

The analysis CoreBlocks are identical in all five cases. Atera support is currently alpha because the public preview format may change before commercial release.

2. Paths, files and sample sheets

The SpaceBlocks config/config.yaml sets the input and output directories, and gets the sample information and metadata (for integration and plotting) from one or two TSV files, depending on the config["mode"] set.

Path / File

Key

Condition

Meaning

Path

spaceranger_processing_outdir

Head modes

Directory where the head writes heavy intermediates such as Space Ranger outputs or SpatialData Zarr stores.

File

spaceranger

mode: visiumhd

Path to the Space Ranger installation.

File

probe_set

mode: visiumhd

Probe set CSV needed to run Space Ranger.

File

transcriptome

mode: visiumhd

Reference transcriptome needed to run Space Ranger.

Path

post_processing_outdir

Mandatory

Output directory root; it will contain the result folders for the run.

Path

logdir

Mandatory

Directory for per-rule logs and benchmarks.

Path

geojson_path

Optional, recommended

Directory containing the GeoJSONs that annotate spatial regions for each sample (see the QuPath tutorial).

Path

contract_dir

mode: decoupled

Directory holding the pre-existing contract h5ads to analyse.

File

per_sample_qc

Optional (per-sample filters)

TSV of sample-specific QC filters. If empty, the same analysis.* thresholds apply to every sample (default).

File

snakemake_cell_markers

Optional (pre-annotation)

TSV of canonical marker genes drawn on the Leiden diagnostic plots (leiden_analysis) to guide manual annotation.

File

gene_exploration.queries (config/gene_queries.tsv)

Exploration Coreblock

Genes / gene sets to score (AUCell) and plot in the exploration block.

File

ingest_ref

Optional (auto-annotation)

Annotated scRNA-seq reference h5ad for ingest_ref.

Path

precomputed_metadata_dir

Optional (reproducibility)

Directory of precomputed per-sample metadata TSVs. The metadata can contain precomputed clusters and/or external annotations.

core_samples.tsv is the technology-agnostic sample sheet used by the CoreBlocks in every use case. Visium HD additionally uses visiumhd_samples.csv for fastq, slide, and capture-area information.

For xenium5k, atera, and merscope, per-sample input bundles are located through the corresponding {sample} path pattern in xenium5k.xenium_dir, atera.atera_dir, or merscope.merscope_dir; no second head-specific sample sheet is required.

!!! tip “Color customization for result visualization” You can customize the color scale for any sample metadata in core_samples.tsv as additional columns. See section 3 and section 4 for details.

Sample sheet

Condition

Role

config/core_samples.tsv

Mandatory

The technology-agnostic anchor: one row per sample. The first column is the sample name; any further columns are design metadata (e.g. patient, condition, type) that are stamped into obs and can be surfaced downstream.

config/visiumhd_samples.csv

mode: visiumhd

The Visium HD head sheet: fastq directories (plus any re-sequencing runs), slide, and area per sample.

3. Parameters

Parameters are settings that live exclusively in config/config.yaml and determine the details of the run.

Parameter

Condition

Role

mode

Mandatory

Which headblock builds the contract (see section 1).

random_seed

Reproducibility

Seed for stochastic steps (subsampling, sketching). Note that UMAP/Leiden are not fully deterministic across systems (see section 6).

use_precomputed_clusters

Optional (reproducibility)

If true, reuse Leiden clusters/metadata from precomputed_metadata_dir instead of recomputing them.

ingest_ref_label_key

ingest_ref reference set

Column in the ingest_ref reference that holds the reference cell-type labels.

integration.integrate_key

Mandatory

Variable Harmony corrects over during integration (e.g. sample).

extra_annotations.columns

Optional

core_samples.tsv columns to carry into obs and surface in downstream plots (e.g. [patient, batch]).

4. Color scale customization

In SpaceBlocks, color scales are fully customizable and consistent across analysis plots.

!!! warning “Undefined variable levels are colored in grey” When customizing color palettes, levels not explicitly listed fall back to grey, so a value that renders grey usually means a missing key. If you wish to customize visualization, list all levels in a variable and assign a color for each of them.

To set a given color scale, you just need to specify the HEX color code for each level in config/config.yaml. There are three palette families, each keyed by column → level → hex:

# Sample-metadata palettes — one block per column listed in extra_annotations.columns
sample_colors:
  patient:
    "Patient 1": "#000000"
    "Patient 2": "#E69F00"
  batch:
    "Batch 1": "#8E44AD"

# Cell-type palettes — one block per annotation column (tsv / external / …)
annotation_colors:
  cell_type_tsv:
    "Tcells": "#1f77b4"
    "Fibroblasts": "#2ca02c"
  cell_type_external:          # declare explicitly; not inherited from cell_type_tsv
    "Tcells": "#1f77b4"

# Region palette — lives under analysis, keyed by the region_levels
analysis:
  region_colors:
    "Tumor area": "#46337EFF"
    "Healthy area": "#FDE725FF"

Spatial niches are coloured automatically from a deterministic palette unless you add a spatial_niche block under annotation_colors.

5. Key sections

The rest of the configuration lives in nested blocks. Files and single parameters are covered in section 2 and section 3; colour palettes in section 4.

Section

Condition

What it configures

xenium5k

mode: xenium5k

Xenium head settings: xenium_dir, zarr_dir, pyramid levels, and pixel_size_um.

atera

mode: atera

Atera head settings: atera_dir, Zarr and pyramid options, plus optional registered H&E image, alignment, and keypoint patterns.

merscope

mode: merscope

MERSCOPE head settings: merscope_dir, selected z-plane, embedded-image resolution, and image channels.

contract

Mandatory

Semantic keys of the hand-off object: sample_key, spatial_key, require_region, require_raw_counts, mito_prefix.

analysis

Mandatory

The bulk of the run: QC filters (min_counts / min_genes / min_cells / max_counts / max_pct_mt), the Leiden resolution_scan_*, the pseudobulk analysis_levels + thresholds, the region_levels, and the run_* toggles. Per-sample QC overrides come from per_sample_qc.

resources

Mandatory

Per-rule mem_mb / runtime / threads (with a default). Memory scales with the retry attempt, so an OOM-killed job is resubmitted with more RAM.

external_annotation

optional

Overlay labels from an external tool: enabled, column, keep_unannotated (see section 6).

qc_sweep

optional

Candidate-threshold QC diagnostics (never filters).

spatial_niches

optional

BANKSY niche detection across concatenated samples.

subcompartments

optional

Named cell-type subsets to re-cluster in subcluster.

gene_exploration

Exploration CoreBlock

Genes / gene sets to score (AUCell) and plot in the exploration block, plus its niche_column and rank fraction.

!!! note A few one-key blocks are documented elsewhere for readability: integration (integrate_key) and extra_annotations (columns) are parameters in section 3; cluster_annotations is a file in section 2; and the colour blocks (sample_colors, annotation_colors, analysis.region_colors) are in section 4.

6. Advanced: Reproducibility and reusability

Even though we have ensured the highest reproducibility standards when creating SpaceBlocks, some steps are never 100% reproducible between systems (e.g. UMAP calculation, Leiden clustering).

We therefore provide features for minimal file sharing/storage that tighten the reproducibility gap.

SpaceBlocks allows you to input:

  • Externally assembled h5ad AnnData objects — run mode: decoupled and point contract_dir at the directory of pre-built contract h5ads. The heads are skipped; the core validates and analyses them directly.

  • Pre-computed clusters / annotations — set use_precomputed_clusters: true and precomputed_metadata_dir to reuse Leiden clusters and metadata; for niches, set spatial_niches.use_precomputed: true with spatial_niches.niche_dir.

  • Externally annotated data — set external_annotation.enabled: true with external_annotation.column, and choose whether to keep or discard unannotated barcodes downstream via external_annotation.keep_unannotated (see section 5).

These files are generated during the run, and can be shared with minimum effort to reproduce downstream results from raw data.

7. Example use case configurations

The commented config/config.yaml is the full template. The mode-specific keys that differ are:

Visium HD (mode: visiumhd)

mode: "visiumhd"
samples: "config/visiumhd_samples.csv"          # fastq dirs / slide / area per sample
spaceranger: "/path/to/spaceranger"
probe_set: "/path/to/probe_set.csv"
transcriptome: "/path/to/refdata-gex"
spaceranger_processing_outdir: "/path/to/sr_out"

Xenium 5K (mode: xenium5k)

mode: "xenium5k"
xenium5k:
  xenium_dir: "/path/to/xenium/{sample}"   # {sample} pattern to each bundle
  zarr_dir: ""                             # "" → spaceranger_processing_outdir
  qupath_pyramid_level: 3
  hires_pyramid_level: 3
  pixel_size_um: 0.2125

Atera (mode: atera, alpha)

mode: "atera"
atera:
  atera_dir: "/path/to/atera/{sample}/outs"
  zarr_dir: ""
  qupath_pyramid_level: 3
  hires_pyramid_level: 3
  pixel_size_um: 0.2125
  he_image: ""       # optional {sample} pattern; set with he_alignment
  he_alignment: ""   # optional {sample} pattern; set with he_image
  he_keypoints: ""   # optional {sample} pattern

MERSCOPE (mode: merscope)

mode: "merscope"
merscope:
  merscope_dir: "/path/to/merscope/{sample}"
  z_index: 3
  hires_pixel_size_um: 1.0
  channels: [DAPI, PolyT, Cellbound1, Cellbound2, Cellbound3]

Externally prepared data (mode: decoupled)

mode: "decoupled"
contract_dir: "/path/to/contract_h5ads"    # one <sample>.h5ad file per sample

All modes additionally set core_samples, post_processing_outdir, logdir, and the other required common keys in config/config.yaml; geojson_path is optional but strongly recommended.

8. Minimal example

mode: "visiumhd"
samples: "config/visiumhd_samples.csv"
core_samples: "config/core_samples.tsv"
geojson_path: "/path/to/geojson"
post_processing_outdir: "/path/to/results"
# ... see config/config.yaml for the full, commented template.

Start from the commented config/config.yaml shipped with the workflow and adjust the paths and sample sheets to your data.

You may next read the get started documentation and the public data end-to-end example runs.

Workflow parameters

The following table is automatically parsed from the workflow’s config.schema.y(a)ml file.

Parameter

Type

Description

Required

Default

samples

string

Path to the Visium HD head sample sheet (fastq dirs / slide / area per sample; mode visiumhd).

snakemake_cell_markers

string

TSV of canonical marker genes drawn on the Leiden diagnostic plots to guide manual annotation.

yes

probe_set

string

Path to the 10x probe-set CSV needed to run Space Ranger (mode visiumhd).

transcriptome

string

Path to the Space Ranger reference transcriptome (mode visiumhd).

spaceranger

string

Path to the locally installed spaceranger executable

xenium5k

[‘object’, ‘null’]

Xenium 5K head settings (used only when mode == “xenium5k”).

. xenium_dir

string

{sample} pattern to each Xenium output bundle.

. zarr_dir

string

Where {sample}.zarr stores are written (”” → spaceranger_processing_outdir).

. qupath_pyramid_level

integer

Pyramid level of the morphology image used for the QuPath composite TIFF.

3

. hires_pyramid_level

integer

Pyramid level embedded as the uns[‘spatial’] background image.

3

. pixel_size_um

number

Xenium pixel size in microns.

0.2125

atera

[‘object’, ‘null’]

Atera head settings (used only when mode == “atera”). ALPHA support — validated against the 10x WTA preview bundle, whose format is not final.

                                                                                                                                                                                                                                                                                                                |          |          |

| . atera_dir | string | {sample} pattern to each Atera outs/ bundle. | | | | . zarr_dir | string | Where {sample}.zarr stores are written (”” -> spaceranger_processing_outdir). | | | | . qupath_pyramid_level | integer | Pyramid level of the morphology image used for the QuPath composite TIFF. | | 3 | | . hires_pyramid_level | integer | Pyramid level embedded as the uns[“spatial”] background image. Also the grid the registered H&E background is resampled onto, when one is configured. | | 3 | | . pixel_size_um | number | Microns per full-resolution morphology pixel (experiment.xenium pixel_size). | | 0.2125 | | . he_image | string | OPTIONAL absolute {sample} pattern to the registered H&E OME-TIFF, which ships separately from the outs/ bundle. When set together with he_alignment, a second QuPath image is produced, region annotations may be drawn on either image, and the H&E becomes the embedded contract background. | | | | . he_alignment | string | OPTIONAL absolute {sample} pattern to the 10x 3x3 he_alignment.csv mapping full-resolution H&E pixels onto full-resolution morphology pixels. Required whenever he_image is set. | | | | . he_keypoints | string | OPTIONAL absolute {sample} pattern to the 10x keypoints.csv. Not required, but without it the H&E transform is applied unverified. | | | | . he_pyramid_level | integer | Pyramid level of the H&E read for the QuPath TIFF and the background warp. | | 4 | | . he_residual_warn_px | number | Warn when the largest keypoint residual exceeds this many morphology pixels — the tripwire for a changed alignment convention. | | 50 | | merscope | [‘object’, ‘null’] | MERSCOPE (Vizgen MERFISH) head settings (used only when mode == “merscope”). | | | | . merscope_dir | string | {sample} pattern to each MERSCOPE region directory (holds the two Vizgen CSVs and the images/ folder). | | | | . z_index | integer | Mosaic z-plane used for the QuPath composite and embedded background (DAPI/PolyT always present). | | 3 | | . hires_pixel_size_um | number | Target microns-per-pixel of the downsampled background embedded in uns[“spatial”] and annotated in QuPath. | | 1.0 | | . channels | array | Mosaic stains to composite, in order; channels absent on disk are skipped (default DAPI, PolyT, Cellbound1-3). | | | | cluster_annotations | string | Optional path to a TSV with cluster-to-cell-type annotations. Rows are cluster numbers, columns are sample names, values are cell-type labels. If missing or empty, DE and neighbourhood analyses are skipped. | | | | per_sample_qc | string | Optional path to a TSV of per-sample QC filtering thresholds for preprocess_umap. First column = sample name; remaining columns any of min_counts, min_genes, min_cells, max_counts, max_pct_mt. Present values override the analysis.* defaults per sample, key-by-key; missing samples/columns fall back to config. Empty string disables overrides. | | | | mode | string | A HEAD technology name (that head builds the contract h5ads in this run) or “decoupled” (the core consumes pre-existing contracts from contract_dir; head rules skipped; validation aborts if any core_samples sample is missing its contract). Extend the enum as new heads are added (e.g. xenium5k). “atera” is ALPHA support: the platform ships in H2 2026 and the public data is a preview whose output format 10x state will change at commercial release. | | visiumhd | | core_samples | string | Optional path to the CORE sample sheet (TSV; required column sample plus optional experimental-design columns). Authoritative sample list for the core; empty = derive from the head visiumhd_samples.csv. The sample value need not match obs[“sample”] in the h5ad (samples may be renamed during preparation). | | | | contract_dir | string | Directory the core reads contract h5ads from. Empty = the per-sample output tree. In decoupled mode, set to the head’s output location. | | | | sample_colors | [‘object’, ‘null’] | Optional colour palettes for core-sheet columns: column -> {value -> hex}. | | | | integration | [‘object’, ‘null’] | Integration settings for integrate_samples. | | | | . integrate_key | string | obs column Harmony corrects on (“sample” = per-sample). | | | | extra_annotations | [‘object’, ‘null’] | core_samples.tsv columns to surface downstream as UMAP colourings, pseudobulk QC panels, and DE heatmap annotation tracks. Annotation-only (no DESeq2 covariate). | | | | . columns | array | Columns to plot/annotate ([] = all non-sample columns). | | | | geojson_path | string | Directory of per-sample QuPath region-annotation GeoJSONs. | yes | | | spaceranger_processing_outdir | string | Directory where the head writes heavy intermediates (Space Ranger tree / SpatialData zarr). | yes | | | post_processing_outdir | string | Analysis output root; holds the result folders for the run. | yes | | | logdir | string | Directory for per-rule logs and benchmarks. | yes | | | analysis | | | | | | . min_counts | integer | Minimum total counts per cell (QC filter). | | 1 | | . min_cells | integer | Minimum number of cells a gene must be detected in (QC filter). | | 3 | | . min_genes | integer | Minimum number of genes per cell (QC filter). | | 100 | | . max_counts | integer | Optional upper bound on total counts per cell (omit to disable). | | | | . max_pct_mt | number | Optional upper bound on percent mitochondrial counts (omit to disable). | | | | . n_top_genes | integer | Number of highly variable genes to select. | | 5000 | | . n_neighbors | integer | Number of neighbours for the kNN graph. | | 10 | | . n_pcs | integer | Number of principal components used to build the neighbours graph. | | 30 | | . leiden_resolution | number | Single Leiden resolution used when not scanning a range. | | 0.6 | | . resolution_scan_min | number | Lowest Leiden resolution in the multi-resolution scan. | | 0.8 | | . resolution_scan_max | number | Highest Leiden resolution in the multi-resolution scan. | | 1.2 | | . resolution_scan_step | number | Step between Leiden resolutions in the scan. | | 0.2 | | . de_n_genes | integer | Number of top differential-expression marker genes reported per group. | | 10 | | . run_pseudobulk_de | boolean | Gate the optional R/DESeq2 pseudobulk_de step. | | false | | . run_leiden_analysis | boolean | Produce the per-resolution Leiden diagnostic plots. Optional (clustering itself happens in preprocess_umap); set false to skip, e.g. when overlaying external annotation. | | true | | . analysis_levels | array | Pseudobulk analysis levels (e.g. by_region, by_celltype_region). | | | | . region_levels | array | Ordered region names (must match region_annotation values in the data). | | | | . region_colors | | region name -> hex colour. | | | | . plot_dpi | integer | Default figure DPI. | | | | ingest_ref | string | Optional reference h5ad for scanpy label transfer (ingest_ref rule) and the qc_sweep cell-type overlay. Empty string disables ingest. | | | | ingest_ref_label_key | string | obs column in the ingest reference holding the cell-type label. | | | | annotation_types | array | Annotation types analysed downstream (neighbourhood, pseudobulk). Defaults to [“tsv_annotation”] when omitted. | | | | random_seed | integer | Global RNG seed. | | | | use_precomputed_clusters | boolean | Reuse precomputed cluster metadata when available. | | | | precomputed_metadata_dir | string | Directory of precomputed metadata_{sample}.tsv (with use_precomputed_clusters). | | | | external_annotation | [‘object’, ‘null’] | Optional external cell-type annotation source. | | | | . enabled | boolean | Enable overlaying external cell-type labels. | | false | | . column | string | obs/metadata column holding the external label. | | | | . keep_unannotated | boolean | false → keep only externally-annotated cells and skip pipeline QC (external labels drive QC); true → normal QC, labels overlaid at annotation. | | true | | contract | [‘object’, ‘null’] | Semantic HEAD->CORE contract keys. unfiltered_h5ad and outdir are injected by the Snakefile after validation and are intentionally not defined here. | | | | . sample_key | string | obs column holding the sample id. | | sample | | . spatial_key | string | obsm key holding the spatial coordinates. | | spatial | | . require_region | boolean | If true, a missing region_annotation is a hard validation failure. | | false | | . require_raw_counts | boolean | If true, validate that X holds non-negative integer raw counts. | | true | | . mito_prefix | array | Gene-name prefixes used to flag mitochondrial genes. | | | | qc_sweep | [‘object’, ‘null’] | OPTIONAL pre-filtering QC diagnostic (target qc_sweep_all). | | | | . ingest_enabled | boolean | Overlay ingest-reference cell types on the QC-sweep plots. | | false | | . dpi | integer | Figure resolution (DPI) for the QC-sweep plots. | | 300 | | . thresholds | | Candidate cut-off LISTS per feature (min_genes/min_counts/max_counts/max_pct_mt). | | | | . ingest_key | string | (Legacy; unused — qc_sweep reuses the top-level ingest_ref.) | | | | . cell_id_key | string | (Legacy; unused.) | | | | annotation_colors | [‘object’, ‘null’] | Cell-type colour palettes — annotation column -> {value -> hex}. | | | | gene_exploration | [‘object’, ‘null’] | Gene/signature exploration settings (target explore_genes). | | | | . queries | string | TSV of genes / gene sets to score (AUCell) and plot. | | | | . annot_key | string | Annotation column used to colour the exploration plots. | | | | . niche_column | string | obs column holding the spatial-niche label. | | | | . aucell_max_rank_fraction | number | AUCell max rank, as a fraction of the ranked genes. | | | | . dpi | integer | Figure resolution (DPI) for the exploration plots. | | 300 | | spatial_niches | [‘object’, ‘null’] | OPTIONAL cross-sample spatial-niche identification. | | | | . enabled | boolean | Enable BANKSY spatial-niche detection. | | false | | . use_precomputed | boolean | Reuse precomputed niche assignments from niche_dir instead of recomputing. | | | | . niche_dir | string | Directory of precomputed per-sample niche TSVs. | | | | subcompartments | [‘object’, ‘null’] | Subcompartment definitions for the subcluster rule (name -> settings). Keys are the subcompartment names; each needs a non-empty strings list of cell types. | | | | resources | | | yes | |

Linting and formatting

Linting results
  1Using workflow specific profile profiles/default for setting default command line arguments.
  2usage: snakemake [-h] [--dry-run] [--profile PROFILE]
  3                 [--workflow-profile WORKFLOW_PROFILE] [--cache [RULE ...]]
  4                 [--snakefile FILE] [--cores N] [--jobs N] [--local-cores N]
  5                 [--resources NAME=INT [NAME=INT ...]]
  6                 [--set-threads RULE=THREADS [RULE=THREADS ...]]
  7                 [--max-threads MAX_THREADS]
  8                 [--set-resources RULE:RESOURCE=VALUE [RULE:RESOURCE=VALUE ...]]
  9                 [--set-scatter NAME=SCATTERITEMS [NAME=SCATTERITEMS ...]]
 10                 [--set-resource-scopes RESOURCE=[global|local] [RESOURCE=[global|local] ...]]
 11                 [--default-resources [NAME=INT ...]]
 12                 [--preemptible-rules [PREEMPTIBLE_RULES ...]]
 13                 [--preemptible-retries PREEMPTIBLE_RETRIES]
 14                 [--configfile FILE [FILE ...]] [--config [KEY=VALUE ...]]
 15                 [--replace-workflow-config] [--envvars VARNAME [VARNAME ...]]
 16                 [--directory DIR] [--touch] [--keep-going]
 17                 [--rerun-triggers {code,input,mtime,params,software-env} [{code,input,mtime,params,software-env} ...]]
 18                 [--force] [--executor {local,dryrun,touch}] [--forceall]
 19                 [--forcerun [TARGET ...]]
 20                 [--consider-ancient RULE=INPUTITEMS [RULE=INPUTITEMS ...]]
 21                 [--prioritize TARGET [TARGET ...]]
 22                 [--batch RULE=BATCH/BATCHES] [--until TARGET [TARGET ...]]
 23                 [--omit-from TARGET [TARGET ...]] [--rerun-incomplete]
 24                 [--shadow-prefix DIR]
 25                 [--strict-dag-evaluation {cyclic-graph,functions,periodic-wildcards} [{cyclic-graph,functions,periodic-wildcards} ...]]
 26                 [--scheduler [{greedy,ilp}]]
 27                 [--conda-base-path CONDA_BASE_PATH] [--no-subworkflows]
 28                 [--precommand PRECOMMAND] [--groups GROUPS [GROUPS ...]]
 29                 [--group-components GROUP_COMPONENTS [GROUP_COMPONENTS ...]]
 30                 [--report [FILE]] [--report-after-run]
 31                 [--report-stylesheet CSSFILE] [--report-metadata FILE]
 32                 [--reporter PLUGIN] [--draft-notebook TARGET]
 33                 [--edit-notebook TARGET] [--notebook-listen IP:PORT]
 34                 [--lint [{text,json}]] [--generate-unit-tests [TESTPATH]]
 35                 [--containerize [{dockerfile,apptainer}]] [--export-cwl FILE]
 36                 [--list-rules] [--list-target-rules]
 37                 [--dag [{dot,mermaid-js}]] [--rulegraph [{dot,mermaid-js}]]
 38                 [--filegraph] [--d3dag] [--summary] [--detailed-summary]
 39                 [--archive FILE] [--cleanup-metadata FILE [FILE ...]]
 40                 [--cleanup-shadow] [--skip-script-cleanup] [--unlock]
 41                 [--list-changes {params,code,input}] [--list-input-changes]
 42                 [--list-params-changes] [--list-untracked]
 43                 [--delete-all-output | --delete-temp-output]
 44                 [--keep-incomplete] [--drop-metadata] [--version]
 45                 [--printshellcmds] [--debug-dag] [--nocolor]
 46                 [--quiet [{all,host,progress,reason,rules} ...]]
 47                 [--print-compilation] [--verbose] [--force-use-threads]
 48                 [--allow-ambiguity] [--nolock] [--ignore-incomplete]
 49                 [--max-inventory-time SECONDS] [--trust-io-cache]
 50                 [--max-checksum-file-size SIZE] [--latency-wait SECONDS]
 51                 [--wait-for-free-local-storage WAIT_FOR_FREE_LOCAL_STORAGE]
 52                 [--wait-for-files [FILE ...]] [--wait-for-files-file FILE]
 53                 [--runtime-source-cache-path PATH]
 54                 [--queue-input-wait-time SECONDS]
 55                 [--omit-flags OMIT_FLAGS [OMIT_FLAGS ...]] [--notemp]
 56                 [--all-temp] [--unneeded-temp-files FILE [FILE ...]]
 57                 [--keep-storage-local-copies] [--not-retrieve-storage]
 58                 [--target-files-omit-workdir-adjustment]
 59                 [--allowed-rules ALLOWED_RULES [ALLOWED_RULES ...]]
 60                 [--max-jobs-per-timespan MAX_JOBS_PER_TIMESPAN]
 61                 [--max-status-checks-per-second MAX_STATUS_CHECKS_PER_SECOND]
 62                 [--seconds-between-status-checks SECONDS_BETWEEN_STATUS_CHECKS]
 63                 [--retries RETRIES] [--wrapper-prefix WRAPPER_PREFIX]
 64                 [--default-storage-provider DEFAULT_STORAGE_PROVIDER]
 65                 [--default-storage-prefix DEFAULT_STORAGE_PREFIX]
 66                 [--local-storage-prefix LOCAL_STORAGE_PREFIX]
 67                 [--remote-job-local-storage-prefix REMOTE_JOB_LOCAL_STORAGE_PREFIX]
 68                 [--shared-fs-usage {input-output,persistence,software-deployment,software-deployment-cache,source-cache,sources,storage-local-copies,none} [{input-output,persistence,software-deployment,software-deployment-cache,source-cache,sources,storage-local-copies,none} ...]]
 69                 [--scheduler-greediness SCHEDULER_GREEDINESS]
 70                 [--scheduler-subsample SCHEDULER_SUBSAMPLE] [--no-hooks]
 71                 [--debug] [--runtime-profile FILE]
 72                 [--local-groupid LOCAL_GROUPID] [--attempt ATTEMPT]
 73                 [--show-failed-logs] [--logger {} [{} ...]]
 74                 [--job-deploy-sources] [--benchmark-extended]
 75                 [--persistence-backend {db,file}]
 76                 [--persistence-backend-db-url PERSISTENCE_BACKEND_DB_URL]
 77                 [--container-image IMAGE] [--immediate-submit]
 78                 [--jobscript SCRIPT] [--jobname NAME]
 79                 [--software-deployment-method {apptainer,conda,env-modules} [{apptainer,conda,env-modules} ...]]
 80                 [--container-cleanup-images] [--use-conda]
 81                 [--conda-not-block-search-path-envvars] [--list-conda-envs]
 82                 [--conda-prefix DIR] [--conda-cleanup-envs]
 83                 [--conda-cleanup-pkgs [{tarballs,cache}]]
 84                 [--conda-create-envs-only] [--conda-frontend {conda,mamba}]
 85                 [--use-apptainer] [--apptainer-prefix DIR]
 86                 [--apptainer-args ARGS] [--use-envmodules]
 87                 [--deploy-sources QUERY CHECKSUM]
 88                 [--target-jobs TARGET_JOBS [TARGET_JOBS ...]]
 89                 [--mode {subprocess,default,remote}]
 90                 [--scheduler-solver-path SCHEDULER_SOLVER_PATH]
 91                 [--max-jobs-per-second MAX_JOBS_PER_SECOND]
 92                 [--storage-azure-max-requests-per-second [TAG::]VALUE [[TAG::]VALUE ...]]
 93                 [--storage-azure-account-name [TAG::]VALUE [[TAG::]VALUE ...]]
 94                 [--storage-ftp-max-requests-per-second [TAG::]VALUE [[TAG::]VALUE ...]]
 95                 [--storage-ftp-username [TAG::]VALUE [[TAG::]VALUE ...]]
 96                 [--storage-ftp-password [TAG::]VALUE [[TAG::]VALUE ...]]
 97                 [--storage-ftp-active-mode]
 98                 [--storage-gcs-max-requests-per-second [TAG::]VALUE [[TAG::]VALUE ...]]
 99                 [--storage-gcs-project [TAG::]VALUE [[TAG::]VALUE ...]]
100                 [--storage-gcs-stay-on-remote [TAG::]VALUE [[TAG::]VALUE ...]]
101                 [--storage-gcs-retries [TAG::]VALUE [[TAG::]VALUE ...]]
102                 [--storage-http-max-requests-per-second [TAG::]VALUE [[TAG::]VALUE ...]]
103                 [--storage-http-auth [TAG::]AUTH_TYPE=ARG1,ARG2,... [[TAG::]AUTH_TYPE=ARG1,ARG2,... ...]]
104                 [--storage-http-allow-redirects [TAG::]VALUE [[TAG::]VALUE ...]]
105                 [--storage-http-supports-head [TAG::]VALUE [[TAG::]VALUE ...]]
106                 [--storage-irods-max-requests-per-second [TAG::]VALUE [[TAG::]VALUE ...]]
107                 [--storage-irods-host [TAG::]VALUE [[TAG::]VALUE ...]]
108                 [--storage-irods-port [TAG::]VALUE [[TAG::]VALUE ...]]
109                 [--storage-irods-username [TAG::]VALUE [[TAG::]VALUE ...]]
110                 [--storage-irods-password [TAG::]VALUE [[TAG::]VALUE ...]]
111                 [--storage-irods-zone [TAG::]VALUE [[TAG::]VALUE ...]]
112                 [--storage-irods-home [TAG::]VALUE [[TAG::]VALUE ...]]
113                 [--storage-irods-authentication-scheme [TAG::]VALUE [[TAG::]VALUE ...]]
114                 [--storage-irods-encryption-algorithm [TAG::]VALUE [[TAG::]VALUE ...]]
115                 [--storage-irods-encryption-key-size [TAG::]VALUE [[TAG::]VALUE ...]]
116                 [--storage-irods-encryption-num-hash-rounds [TAG::]VALUE [[TAG::]VALUE ...]]
117                 [--storage-irods-encryption-salt-size [TAG::]VALUE [[TAG::]VALUE ...]]
118                 [--storage-irods-client-server-negotiation [TAG::]VALUE [[TAG::]VALUE ...]]
119                 [--storage-irods-client-server-policy [TAG::]VALUE [[TAG::]VALUE ...]]
120                 [--storage-irods-ssl-verify-server [TAG::]VALUE [[TAG::]VALUE ...]]
121                 [--storage-irods-ssl-ca-certificate-file [TAG::]VALUE [[TAG::]VALUE ...]]
122                 [--storage-irods-use-ssl]
123                 [--storage-s3-max-requests-per-second [TAG::]VALUE [[TAG::]VALUE ...]]
124                 [--storage-s3-endpoint-url [TAG::]VALUE [[TAG::]VALUE ...]]
125                 [--storage-s3-region [TAG::]VALUE [[TAG::]VALUE ...]]
126                 [--storage-s3-access-key [TAG::]VALUE [[TAG::]VALUE ...]]
127                 [--storage-s3-secret-key [TAG::]VALUE [[TAG::]VALUE ...]]
128                 [--storage-s3-token [TAG::]VALUE [[TAG::]VALUE ...]]
129                 [--storage-s3-signature-version [TAG::]VALUE [[TAG::]VALUE ...]]
130                 [--storage-s3-retries [TAG::]VALUE [[TAG::]VALUE ...]]
131                 [--storage-xrootd-max-requests-per-second [TAG::]VALUE [[TAG::]VALUE ...]]
132                 [--storage-xrootd-host [TAG::]VALUE [[TAG::]VALUE ...]]
133                 [--storage-xrootd-port [TAG::]VALUE [[TAG::]VALUE ...]]
134                 [--storage-xrootd-username [TAG::]VALUE [[TAG::]VALUE ...]]
135                 [--storage-xrootd-password [TAG::]VALUE [[TAG::]VALUE ...]]
136                 [--storage-xrootd-protocol [TAG::]VALUE [[TAG::]VALUE ...]]
137                 [--storage-xrootd-url-decorator [TAG::]VALUE [[TAG::]VALUE ...]]
138                 [--storage-xrootd-glob-wildcards-max-depth [TAG::]VALUE [[TAG::]VALUE ...]]
139                 [--storage-zenodo-max-requests-per-second [TAG::]VALUE [[TAG::]VALUE ...]]
140                 [--storage-zenodo-access-token [TAG::]VALUE [[TAG::]VALUE ...]]
141                 [--storage-zenodo-restricted-access-token [TAG::]VALUE [[TAG::]VALUE ...]]
142                 [--storage-zenodo-sandbox] [--report-html-path VALUE]
143                 [--report-html-stylesheet-path VALUE]
144                 [--scheduler-greedy-greediness VALUE]
145                 [--scheduler-greedy-omit-prioritize-by-temp-and-input]
146                 [--scheduler-ilp-solver VALUE]
147                 [--scheduler-ilp-solver-path VALUE]
148                 [targets ...]
149snakemake: error: argument --executor/-e: invalid choice: 'slurm' (choose from 'local', 'dryrun', 'touch')
Formatting results
 1[DEBUG] 
 2[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/common.smk":  Formatted content is different from original
 3[DEBUG] 
 4[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/validate_input.smk":  Formatted content is different from original
 5[DEBUG] 
 6[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/Snakefile":  Formatted content is different from original
 7[DEBUG] 
 8[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/prepare_input_vhd.smk":  Formatted content is different from original
 9[DEBUG] 
10[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/explore_genes.smk":  Formatted content is different from original
11[DEBUG] 
12[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/generate_qupath_he_ate.smk":  Formatted content is different from original
13[DEBUG] 
14[DEBUG] 
15[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/spaceranger_count_vhd.smk":  Formatted content is different from original
16[DEBUG] 
17[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/prepare_input_ate.smk":  Formatted content is different from original
18[DEBUG] 
19[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/spatial_niches.smk":  Formatted content is different from original
20[DEBUG] 
21[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/annotate_cells.smk":  Formatted content is different from original
22[DEBUG] 
23[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/pseudobulk_aggregate.smk":  Formatted content is different from original
24[DEBUG] 
25[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/prepare_input_x5k.smk":  Formatted content is different from original
26[DEBUG] 
27[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/ingest_ref.smk":  Formatted content is different from original
28[DEBUG] 
29[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/subcluster.smk":  Formatted content is different from original
30[DEBUG] 
31[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/qc_sweep.smk":  Formatted content is different from original
32[DEBUG] 
33[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/generate_qupath_ate.smk":  Formatted content is different from original
34[DEBUG] 
35[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/neighbourhood_analysis.smk":  Formatted content is different from original
36[DEBUG] 
37[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/prepare_input_mer.smk":  Formatted content is different from original
38[DEBUG] 
39[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/leiden_analysis.smk":  Formatted content is different from original
40[DEBUG] 
41[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/generate_qupath_vhd.smk":  Formatted content is different from original
42[DEBUG] 
43[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/sample_report.smk":  Formatted content is different from original
44[DEBUG] 
45[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/generate_qupath_mer.smk":  Formatted content is different from original
46[DEBUG] 
47[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/preprocess_umap.smk":  Formatted content is different from original
48[DEBUG] 
49[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/convert_zarr_x5k.smk":  Formatted content is different from original
50[DEBUG] 
51[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/convert_zarr_ate.smk":  Formatted content is different from original
52[DEBUG] 
53[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/pseudobulk_de.smk":  Formatted content is different from original
54[DEBUG] 
55[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/generate_qupath_x5k.smk":  Formatted content is different from original
56[DEBUG] 
57[DEBUG] In file "/tmp/tmpz6rgqcu6/cbib-SpaceBlocks-196b97b/workflow/rules/integrate_samples.smk":  Formatted content is different from original
58[INFO] 28 file(s) would be changed 😬
59[INFO] 1 file(s) would be left unchanged 🎉
60
61snakefmt version: 0.11.5