Skip to content
Research
Skill

/spatial-integrate

Load when removing batch effects from multi-batch spatial AnnData with PCA using Harmony, BBKNN, or Scanorama. Skip physical coordinate alignment (use spatial-register) and single-batch data (use spatial-domains).

BOOST
From plugin
omicsclaw
16188 skills
Install
$ npx -y skills add tiangzlab/omicsclaw --skill spatial-integrate --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/spatial-integrate

Context preview

The summary Claude sees to decide when to auto-load this skill.

Load when removing batch effects from multi-batch spatial AnnData with PCA using Harmony, BBKNN, or Scanorama. Skip physical coordinate alignment (use spatial-register) and single-batch data (use spatial-domains).

SKILL.md

spatial-integrate.SKILL.md
name: spatial-integrate
description: Load when removing batch effects from multi-batch spatial AnnData with PCA using Harmony, BBKNN, or Scanorama. Skip physical coordinate alignment (use spatial-register) and single-batch data (use spatial-domains).
trigger: multi-sample integration, batch correction, Harmony, BBKNN, Scanorama
tags:
- spatial
- integration
- batch-correction

spatial-integrate

Use from a step

from skills._sdk.notebook import load_skill, read_input, write_output
library = load_skill("spatial-integrate")
adata = read_input("data/multi_sample.h5ad")
adata = library.integrate(adata, batch_key="sample")
write_output(adata, "intermediate/integrated.h5ad")

When to use

Correct expression-space batch effects after spatial-preprocess. Harmony and Scanorama add corrected PCA-based embeddings; BBKNN replaces the neighbor graph. None aligns tissue coordinates or changes the expression matrix.

Inputs & Outputs

Input: preprocessed AnnData with `obsm["X_pca"]` and at least two labels in `obs["batch"]` (or the chosen batch_key). Functions return AnnData, tables and figures without writing files; see API below.

CLI writes `processed.h5ad`, `report.md`, `result.json`, batch-size and integration tables, and the comparison gallery. The complete file inventory and generation conditions are in [references/output_contract.md](references/output_contract.md). Harmony adds `X_pca_harmony`; Scanorama adds `X_scanorama`; BBKNN changes `obsp["distances"]` and `obsp["connectivities"]`.

Key CLI

python skills/spatial/spatial-integrate/spatial_integrate.py \
  --input multi_sample.h5ad --output results/integration --method harmony --batch-key sample
python skills/spatial/spatial-integrate/spatial_integrate.py --demo --output /tmp/spatial_integrate

Use `examples/example_step.py` for load_skill, saved objects and replay. [references/parameters.md](references/parameters.md) lists the CLI method flags.

Gotchas

  • `X_pca` must exist before integration; no normalization is performed here.
  • `X_scanorama` is a corrected PCA-based embedding, not corrected gene expression.
  • `batch_entropy_after` measures local mixing, not biological preservation;

inspect condition and cell-type structure before choosing a correction.

  • The function's seed controls Harmony, neighbors, UMAP and Leiden.

BBKNN's default Annoy matching and Scanorama's wrapper expose no seed here; cross-version matching can vary. The installed versions passed repeat CLI checks.

  • `run_info(adata, keep=False)` removes only library diagnostics. The CLI keeps

its existing `uns["spatial_integration"]` summary.

  • `X_umap_before_integration` and `X_umap_after_integration` preserve both views.

API

<!-- api:begin generated from _api.py; regenerate with run.py api <skill dir> --write -->

`integrate(adata, *, method: str='harmony', batch_key: str='batch', random_state: int=0, **parameters)`

Integrate a multi-batch PCA representation in place, preserving expression.

:param adata: Preprocessed AnnData with X_pca and batch labels. :param method: harmony (default), bbknn (graph only), or scanorama. :param batch_key: Batch column in obs, default batch. :param random_state: Seed for Harmony, neighbors, UMAP and Leiden, default 0. BBKNN's default Annoy backend and Scanorama expose no seed here; their matching can vary across backend versions. :param parameters: Method keywords with original CLI defaults: Harmony theta=2, lamb=1, max_iter_harmony=10; BBKNN neighbors_within_batch=3, n_pcs=50, trim=None; Scanorama knn=20, sigma=15, alpha=0.1, batch_size=5000. :returns: The same AnnData with corrected embedding or graph, UMAP snapshots, per-spot batch entropy, and JSON run diagnostics. X is unchanged. :raises ValueError: Unknown method, missing batches/PCA, or invalid parameters. :raises ImportError: Missing backend; use install_skill_deps for that method.

`run_info(adata, *, keep: bool=True) -> dict`

Read the last integration summary.

:param adata: AnnData returned by integrate. :param keep: True retains diagnostics; False removes them for CLI serialization. :returns: Summary including seed and effective method parameters, or an empty dict.

`mixing_table(adata) -> pd.DataFrame`

Return per-spot entropy before and after correction.

:param adata: Integrated AnnData. :returns: observation, batch_entropy_before, batch_entropy_after and batch_entropy_delta. :raises KeyError: Integration entropy columns are absent.

`embedding_figure(adata, *, batch_key: str='batch')`

Compare the pre- and post-integration UMAP coordinates.

:param adata: Integrated AnnData with both UMAP snapshots. :param batch_key: Batch labels used for color, default batch. :returns: A matplotlib Figure; the caller saves and closes it. :raises KeyError: Batch labels or UMAP snapshots are absent.

<!-- api:end -->

Dependencies

`anndata`, `bbknn`, `harmonypy`, `matplotlib`, `numpy`, `pandas`, `scanorama`, `scanpy`, `scipy`, `seaborn`

Missing method packages raise ImportError with an install_skill_deps hint.

Read more
Ships withomicsclaw

Conversational & memory-enabled AI research partner for multi-omics analysis. CLI + Desktop App (installers in Releases). From biological idea to full research paper.

Get the whole plugin

Other skills on omicsclaw.