Normalising_clustring_and_spatial_melanoma_without_scaling_xenium_workflow

single-cell-spatial-melanoma-SPICA/normalising-clustring-and-spatial-melanoma-without-scaling-xenium-workflow

Author(s)
Khaled Jum'ah
version Version
1
last_modification Last updated
Sep 1, 2026
license License
Artistic-2.0
galaxy-tags Tags
single-cell
spatial-transcriptomics
xenium
spatialdata

Features
Tutorial
hands_on Spatial transcriptomics analysis of a primary dermal melanoma section from Xenium
workflow Other workflows associated with this material
Workflow Testing
Tests: ✅
Results: Not yet automated
FAIRness purl PURL
https://gxy.io/GTN:
RO-Crate logo with flask Download Workflow RO-Crate
Launch in Tutorial Mode question
galaxy-download Download
flowchart TD
  0["ℹ️ Input Dataset\nFiltered AnnData table"];
  style 0 stroke:#2c3143,stroke-width:4px;
  1["ℹ️ Input Dataset\nmelanoma_roi.spatialdata.zip"];
  style 1 stroke:#2c3143,stroke-width:4px;
  2["Filtered AnnData with counts layer"];
  0 -->|output| 2;
  0 -->|output| 2;
  896e63f9-0302-45c1-858c-98ac0fe4b317["Output\nFiltered AnnData with counts layer"];
  2 --> 896e63f9-0302-45c1-858c-98ac0fe4b317;
  style 896e63f9-0302-45c1-858c-98ac0fe4b317 stroke:#2c3143,stroke-width:4px;
  3["Normalised AnnData"];
  0 -->|output| 3;
  85a4008b-7b4b-413e-b9c5-1be6ca079a5d["Output\nNormalised AnnData"];
  3 --> 85a4008b-7b4b-413e-b9c5-1be6ca079a5d;
  style 85a4008b-7b4b-413e-b9c5-1be6ca079a5d stroke:#2c3143,stroke-width:4px;
  4["Log-normalised AnnData"];
  3 -->|anndata_out| 4;
  3687cbcd-b5f7-4700-b60b-4b498f1139ae["Output\nLog-normalised AnnData"];
  4 --> 3687cbcd-b5f7-4700-b60b-4b498f1139ae;
  style 3687cbcd-b5f7-4700-b60b-4b498f1139ae stroke:#2c3143,stroke-width:4px;
  5["AnnData with HVGs"];
  4 -->|anndata_out| 5;
  46c333ea-f037-4581-bc48-2607fd0b3f40["Output\nAnnData with HVGs"];
  5 --> 46c333ea-f037-4581-bc48-2607fd0b3f40;
  style 46c333ea-f037-4581-bc48-2607fd0b3f40 stroke:#2c3143,stroke-width:4px;
  6["Plot HVGs"];
  5 -->|anndata_out| 6;
  1c93b4c7-ce8f-4b23-896e-6c5bb5c4ed83["Output\nPlot HVGs"];
  6 --> 1c93b4c7-ce8f-4b23-896e-6c5bb5c4ed83;
  style 1c93b4c7-ce8f-4b23-896e-6c5bb5c4ed83 stroke:#2c3143,stroke-width:4px;
  7["AnnData with PCA"];
  5 -->|anndata_out| 7;
  a1e03d97-abfe-4dba-bbc8-73c09f758aea["Output\nAnnData with PCA"];
  7 --> a1e03d97-abfe-4dba-bbc8-73c09f758aea;
  style a1e03d97-abfe-4dba-bbc8-73c09f758aea stroke:#2c3143,stroke-width:4px;
  8["Plot PCA"];
  7 -->|anndata_out| 8;
  8e21189e-a7b6-4b75-8bca-3f95bb87beb7["Output\nPlot PCA"];
  8 --> 8e21189e-a7b6-4b75-8bca-3f95bb87beb7;
  style 8e21189e-a7b6-4b75-8bca-3f95bb87beb7 stroke:#2c3143,stroke-width:4px;
  9["Compute a neighborhood graph of observations"];
  7 -->|anndata_out| 9;
  0b38fe1d-aa0a-4f69-a5d1-6b4429f28d53["Output\nCompute a neighborhood graph of observations"];
  9 --> 0b38fe1d-aa0a-4f69-a5d1-6b4429f28d53;
  style 0b38fe1d-aa0a-4f69-a5d1-6b4429f28d53 stroke:#2c3143,stroke-width:4px;
  10["AnnData with UMAP"];
  9 -->|anndata_out| 10;
  0522e651-8ed4-4ccb-8aac-9181c01c7dd7["Output\nAnnData with UMAP"];
  10 --> 0522e651-8ed4-4ccb-8aac-9181c01c7dd7;
  style 0522e651-8ed4-4ccb-8aac-9181c01c7dd7 stroke:#2c3143,stroke-width:4px;
  11["Plot  UMAP"];
  10 -->|anndata_out| 11;
  1192456b-eeb1-42af-826e-8810f6c0fc70["Output\nPlot UMAP"];
  11 --> 1192456b-eeb1-42af-826e-8810f6c0fc70;
  style 1192456b-eeb1-42af-826e-8810f6c0fc70 stroke:#2c3143,stroke-width:4px;
  12["Anndata with leiden_res_0.2"];
  10 -->|anndata_out| 12;
  ffa51c91-4cf9-485b-847b-939661288e77["Output\nAnndata with leiden_res_0.2"];
  12 --> ffa51c91-4cf9-485b-847b-939661288e77;
  style ffa51c91-4cf9-485b-847b-939661288e77 stroke:#2c3143,stroke-width:4px;
  13["AnnData with Leiden comparison 0.2 and 0.4"];
  12 -->|anndata_out| 13;
  7aff6b81-ef43-46ea-a6b4-4f8bc14b9255["Output\nAnnData with Leiden comparison 0.2 and 0.4"];
  13 --> 7aff6b81-ef43-46ea-a6b4-4f8bc14b9255;
  style 7aff6b81-ef43-46ea-a6b4-4f8bc14b9255 stroke:#2c3143,stroke-width:4px;
  14["AnnData with Leiden comparison 0.2 and 0.4 and 0.6"];
  13 -->|anndata_out| 14;
  023bc215-b02a-45d5-974f-1cb06edef0bc["Output\nAnnData with Leiden comparison 0.2 and 0.4 and 0.6"];
  14 --> 023bc215-b02a-45d5-974f-1cb06edef0bc;
  style 023bc215-b02a-45d5-974f-1cb06edef0bc stroke:#2c3143,stroke-width:4px;
  15["Plot Leiden comparison"];
  14 -->|anndata_out| 15;
  b807cbdf-bc5e-438e-8af7-98752ef2ad86["Output\nPlot Leiden comparison"];
  15 --> b807cbdf-bc5e-438e-8af7-98752ef2ad86;
  style b807cbdf-bc5e-438e-8af7-98752ef2ad86 stroke:#2c3143,stroke-width:4px;
  16["Rank genes for characterizing groups"];
  14 -->|anndata_out| 16;
  abb57524-2c86-45f4-85cd-f2fb932f2976["Output\nRank genes for characterizing groups"];
  16 --> abb57524-2c86-45f4-85cd-f2fb932f2976;
  style abb57524-2c86-45f4-85cd-f2fb932f2976 stroke:#2c3143,stroke-width:4px;
  61a640ca-598d-44ab-a8d5-b86fe7b65f85["Output\nAnnData with markers"];
  16 --> 61a640ca-598d-44ab-a8d5-b86fe7b65f85;
  style 61a640ca-598d-44ab-a8d5-b86fe7b65f85 stroke:#2c3143,stroke-width:4px;
  17["Plot ranking of genes"];
  16 -->|anndata_out| 17;
  0d51b081-2a29-4162-93df-d9b1a0f16827["Output\nPlot ranking of genes"];
  17 --> 0d51b081-2a29-4162-93df-d9b1a0f16827;
  style 0d51b081-2a29-4162-93df-d9b1a0f16827 stroke:#2c3143,stroke-width:4px;
  18["AnnData with spatial neighbours"];
  16 -->|anndata_out| 18;
  2737e8c2-dd94-4d93-8b10-9367b7e63822["Output\nAnnData with spatial neighbours"];
  18 --> 2737e8c2-dd94-4d93-8b10-9367b7e63822;
  style 2737e8c2-dd94-4d93-8b10-9367b7e63822 stroke:#2c3143,stroke-width:4px;
  19["Squidpy"];
  18 -->|spatialdata_output_h5ad| 19;
  20["Squidpy"];
  19 -->|spatialdata_output_h5ad| 20;
  21["Squidpy Plot"];
  19 -->|spatialdata_output_h5ad| 21;
  ddbab838-226c-48cc-9a8c-d3674d0aec9e["Output\nPlot Centrality Scores"];
  21 --> ddbab838-226c-48cc-9a8c-d3674d0aec9e;
  style ddbab838-226c-48cc-9a8c-d3674d0aec9e stroke:#2c3143,stroke-width:4px;
  22["Squidpy Plot"];
  20 -->|spatialdata_output_h5ad| 22;
  2989733b-f744-4bb4-87dd-ae2a32fb2aad["Output\nPlot Neighborhood Enrichment"];
  22 --> 2989733b-f744-4bb4-87dd-ae2a32fb2aad;
  style 2989733b-f744-4bb4-87dd-ae2a32fb2aad stroke:#2c3143,stroke-width:4px;
  23["AnnData with Squidpy results"];
  20 -->|spatialdata_output_h5ad| 23;
  d920c2c9-4094-4206-9170-8595e505ace6["Output\nAnnData with Squidpy results"];
  23 --> d920c2c9-4094-4206-9170-8595e505ace6;
  style d920c2c9-4094-4206-9170-8595e505ace6 stroke:#2c3143,stroke-width:4px;
  24["CellTypist-annotated AnnData"];
  23 -->|spatialdata_output_h5ad| 24;
  bee75103-051f-4393-bbee-4992e5f70aba["Output\nCellTypist-annotated AnnData"];
  24 --> bee75103-051f-4393-bbee-4992e5f70aba;
  style bee75103-051f-4393-bbee-4992e5f70aba stroke:#2c3143,stroke-width:4px;
  4473a4e8-a9ce-4087-9b60-754f39e7e0ad["Output\nPlot CellTypist"];
  24 --> 4473a4e8-a9ce-4087-9b60-754f39e7e0ad;
  style 4473a4e8-a9ce-4087-9b60-754f39e7e0ad stroke:#2c3143,stroke-width:4px;
  25["SpatialData with Squidpy results"];
  1 -->|output| 25;
  23 -->|spatialdata_output_h5ad| 25;
  26["Final Lana Anndata"];
  24 -->|anndata_out| 26;
  54eace5b-62b0-46a3-9a11-32ad263291e0["Output\nFinal Liana Anndata"];
  26 --> 54eace5b-62b0-46a3-9a11-32ad263291e0;
  style 54eace5b-62b0-46a3-9a11-32ad263291e0 stroke:#2c3143,stroke-width:4px;
  27["Spatial_Plot_on_VGF_morons_HVG"];
  25 -->|spatialdata_output| 27;
  c0cd1651-e840-4386-bedf-176334e0db04["Output\nSpatial_Plot_on_VGF_morons_HVG"];
  27 --> c0cd1651-e840-4386-bedf-176334e0db04;
  style c0cd1651-e840-4386-bedf-176334e0db04 stroke:#2c3143,stroke-width:4px;
  28["SpatialData with Final metrics"];
  1 -->|output| 28;
  26 -->|anndata_out| 28;
  29["SpatialData Plot"];
  28 -->|spatialdata_output| 29;
  bf087a7d-2bb5-47e3-a94c-667bbabe894f["Output\nPlot spatial clusters"];
  29 --> bf087a7d-2bb5-47e3-a94c-667bbabe894f;
  style bf087a7d-2bb5-47e3-a94c-667bbabe894f stroke:#2c3143,stroke-width:4px;

Inputs

Input Label
Input dataset Filtered AnnData table
Input dataset melanoma_roi.spatialdata.zip

Outputs

From Output Label
toolshed.g2.bx.psu.edu/repos/iuc/anndata_manipulate/anndata_manipulate/0.11.4+galaxy3 Manipulate AnnData Filtered AnnData with counts layer
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_normalize/scanpy_normalize/1.11.5+galaxy0 Scanpy normalize Normalised AnnData
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_inspect/scanpy_inspect/1.11.5+galaxy0 Scanpy Inspect and manipulate Log-normalised AnnData
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_filter/scanpy_filter/1.11.5+galaxy0 Scanpy filter AnnData with HVGs
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_plot/scanpy_plot/1.11.5+galaxy0 Scanpy plot Plot HVGs
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_cluster_reduce_dimension/scanpy_cluster_reduce_dimension/1.11.5+galaxy0 Scanpy cluster, embed AnnData with PCA
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_plot/scanpy_plot/1.11.5+galaxy0 Scanpy plot Plot PCA
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_inspect/scanpy_inspect/1.11.5+galaxy0 Scanpy Inspect and manipulate Compute a neighborhood graph of observations
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_cluster_reduce_dimension/scanpy_cluster_reduce_dimension/1.11.5+galaxy0 Scanpy cluster, embed AnnData with UMAP
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_plot/scanpy_plot/1.11.5+galaxy0 Scanpy plot Plot UMAP
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_cluster_reduce_dimension/scanpy_cluster_reduce_dimension/1.11.5+galaxy0 Scanpy cluster, embed Anndata with leiden_res_0.2
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_cluster_reduce_dimension/scanpy_cluster_reduce_dimension/1.11.5+galaxy0 Scanpy cluster, embed AnnData with Leiden comparison 0.2 and 0.4
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_cluster_reduce_dimension/scanpy_cluster_reduce_dimension/1.11.5+galaxy0 Scanpy cluster, embed AnnData with Leiden comparison 0.2 and 0.4 and 0.6
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_plot/scanpy_plot/1.11.5+galaxy0 Scanpy plot Plot Leiden comparison
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_inspect/scanpy_inspect/1.11.5+galaxy0 Scanpy Inspect and manipulate Rank genes for characterizing groups
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_plot/scanpy_plot/1.11.5+galaxy0 Scanpy plot Plot ranking of genes
toolshed.g2.bx.psu.edu/repos/iuc/squidpy_graph/squidpy_graph/1.8.1+galaxy0 Squidpy AnnData with spatial neighbours
toolshed.g2.bx.psu.edu/repos/iuc/squidpy_plot/squidpy_plot/1.8.1+galaxy0 Squidpy Plot
toolshed.g2.bx.psu.edu/repos/iuc/squidpy_plot/squidpy_plot/1.8.1+galaxy0 Squidpy Plot
toolshed.g2.bx.psu.edu/repos/iuc/squidpy_graph/squidpy_graph/1.8.1+galaxy0 Squidpy AnnData with Squidpy results
toolshed.g2.bx.psu.edu/repos/iuc/celltypist/celltypist/1.7.1+galaxy1 CellTypist CellTypist-annotated AnnData
toolshed.g2.bx.psu.edu/repos/iuc/liana_methods/liana_methods/1.7.3+galaxy0 Liana methods Final Lana Anndata
toolshed.g2.bx.psu.edu/repos/iuc/spatialdata_plot/spatialdata_plot/0.8.0+galaxy0 SpatialData Plot Spatial_Plot_on_VGF_morons_HVG
toolshed.g2.bx.psu.edu/repos/iuc/spatialdata_plot/spatialdata_plot/0.8.0+galaxy0 SpatialData Plot

Tools

Tool Links
toolshed.g2.bx.psu.edu/repos/iuc/anndata_manipulate/anndata_manipulate/0.11.4+galaxy3 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/celltypist/celltypist/1.7.1+galaxy1 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/liana_methods/liana_methods/1.7.3+galaxy0 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_cluster_reduce_dimension/scanpy_cluster_reduce_dimension/1.11.5+galaxy0 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_filter/scanpy_filter/1.11.5+galaxy0 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_inspect/scanpy_inspect/1.11.5+galaxy0 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_normalize/scanpy_normalize/1.11.5+galaxy0 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/scanpy_plot/scanpy_plot/1.11.5+galaxy0 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/spatialdata_operation/spatialdata_operation/0.8.0+galaxy0 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/spatialdata_plot/spatialdata_plot/0.8.0+galaxy0 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/squidpy_graph/squidpy_graph/1.8.1+galaxy0 View in ToolShed
toolshed.g2.bx.psu.edu/repos/iuc/squidpy_plot/squidpy_plot/1.8.1+galaxy0 View in ToolShed

To use these workflows in Galaxy you can either click the links to download the workflows, or you can right-click and copy the link to the workflow which can be used in the Galaxy form to import workflows.

Importing into Galaxy

Below are the instructions for importing these workflows directly into your Galaxy server of choice to start using them!
Hands On: Importing a workflow
  1. Click on galaxy-workflows-activity Workflows in the Galaxy activity bar (on the left side of the screen, or in the top menu bar of older Galaxy instances). You will see a list of all your workflows
  2. Click on galaxy-upload Import at the top-right of the screen
  3. Provide your workflow
    • Option 1: Paste the URL of the workflow into the box labelled “Archived Workflow URL”
    • Option 2: Upload the workflow file in the box labelled “Archived Workflow File”
  4. Click the Import workflow button

Below is a short video demonstrating how to import a workflow from GitHub using this procedure:

Video: Importing a workflow from URL

Version History

Version Commit Time Comments
3 a9c7f52f8 2026-09-01 14:20:58 fix normalize wf
2 7bee176ae 2026-09-01 14:16:46 update the tutirial to visualise HVG with Morans values and update the workflow to match the tutorial
1 5565e4cbc 2026-09-01 12:16:08 update tutorial adress most of the commnets

For Admins

Installing the workflow tools

wget https://training.galaxyproject.org/training-material/topics/single-cell/tutorials/spatial-melanoma-SPICA/workflows/Normalising-clustring-and-spatial-melanoma-without-scaling-xenium-workflow.ga -O workflow.ga
workflow-to-tools -w workflow.ga -o tools.yaml
shed-tools install -g GALAXY -a API_KEY -t tools.yaml
workflow-install -g GALAXY -a API_KEY -w workflow.ga --publish-workflows