Skip to content

Commit 7ee7d70

Browse files
committed
diataxis
1 parent 72e1ce8 commit 7ee7d70

26 files changed

Lines changed: 479 additions & 177 deletions

_quarto.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ project:
77
resources:
88
- robots.txt
99
# Shared single-cell/spatial flow widget, loaded by index.qmd and
10-
# concepts/architecture.qmd via <script src>.
10+
# workflows/index.qmd via <script src>.
1111
- flow.js
1212
# NOTE: team/ is a hand-curated static page for now (sections + roles the flat
1313
# author registry can't express). scripts/generate_team.py is kept for the
@@ -39,7 +39,7 @@ website:
3939
# "Workflows" = the curated available-workflows overview. Page still lives
4040
# under concepts/ (kept there to avoid breaking cross-links). The advanced
4141
# developer deep-dive stays in the Concepts hub, not here.
42-
- href: concepts/architecture.qmd
42+
- href: workflows/index.qmd
4343
text: Workflows
4444
# "Documentation" groups the practical, do-it materials. Get started is
4545
# also the primary landing-page CTA, so it stays reachable from the hero.

concepts/data-state.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ order: 70
55
---
66

77
There are two ways to read the pipeline. The [available
8-
workflows](architecture.qmd) page walks it **by stage**, the way an analyst
8+
workflows](../workflows/index.qmd) page walks it **by stage**, the way an analyst
99
thinks. This page reads it the way the workflows are **actually built**, the view
1010
you need if you are writing or wiring components. It covers how the data object is
1111
organized along **two axes** (samples and modalities), what gets **written into

concepts/ecosystem.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ dependency and adds to it rather than forking it.
2222

2323
## How the packages relate
2424

25-
Every package plugs into the same [pipeline architecture](architecture.qmd):
25+
Every package plugs into the same [pipeline architecture](../workflows/index.qmd):
2626

2727
- **`openpipeline`** defines all stages, ingestion, QC, processing, integration,
2828
and downstream, for the RNA, protein, ATAC, VDJ, and GDO modalities.

concepts/index.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ object.
1010

1111
The pages below explain the design choices behind it. Read top to bottom for the
1212
full picture, or jump to whichever answers your question. For how these ideas play
13-
out across the actual pipeline, see [Available workflows](architecture.qmd).
13+
out across the actual pipeline, see [Available workflows](../workflows/index.qmd).
1414

1515
```{=html}
1616
<div class="concept-list">

flow.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Single-cell / spatial pipeline flow widget.
2-
// Shared by the landing page and the architecture concept page.
2+
// Shared by the landing page and the workflows overview page.
33
// Injects itself into #op-flow. Set window.FLOW_BASE to the site-root-relative
44
// prefix (e.g. '../') on pages below the site root so the 'all →' links resolve.
55
(function () {
@@ -75,7 +75,7 @@
7575
'</div>';
7676
}
7777

78-
// Detailed variant (architecture page): surface the two optional stages that
78+
// Detailed variant (workflows page): surface the two optional stages that
7979
// the landing overview intentionally leaves out.
8080
if (detailed) {
8181
var demux = {

get-started/index.qmd

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,24 @@ This walkthrough uses **local Nextflow**. The exact same workflows run on Seqera
1313
(`tw launch`) or through the Viash Hub web form, see the
1414
[execution guides](../guides/index.qmd) for those routes.
1515

16-
## 1 · Set up Nextflow and Docker
16+
::: {.callout-note appearance="simple"}
17+
**Before you start**
18+
19+
- **Prerequisites:** a Unix-like shell (macOS, Linux, or WSL2 on Windows). No
20+
prior Nextflow or single-cell experience needed, every command is here.
21+
- **Hardware:** Cell Ranger (step 3) is the heavy step. Budget **~32 GB RAM**,
22+
**~8 CPU cores**, and **~50 GB free disk** for the downloads plus Cell Ranger's
23+
intermediate files.
24+
- **Time:** roughly **2–4 hours** end to end on a laptop, almost all of it in Cell
25+
Ranger mapping. The processing, integration, and read-output steps are minutes each.
26+
- **What you'll have at the end:** one batch-corrected, Leiden-clustered `.h5mu`
27+
object with a UMAP, built from two public PBMC samples.
28+
29+
Just want to see the shape of a run first? The [Quickstart](quickstart.qmd) skips
30+
Cell Ranger and takes about 10 minutes on pre-computed counts.
31+
:::
32+
33+
## 1 · Set up Nextflow and Docker {#sec-setup-nextflow-and-docker}
1734

1835
Everything else ships inside containers, so this is all you install: a Java
1936
runtime (Nextflow needs it), Nextflow, and Docker.
@@ -91,35 +108,33 @@ EOM
91108

92109
## 2 · Get the data
93110

94-
The run uses two public 10x Genomics PBMC datasets (5' gene expression + VDJ +
95-
antibody capture). Each 10x dataset page lists ready-made `curl` commands; the
96-
loops below fetch both datasets' libraries and unpack them into a local `data/`
97-
folder:
111+
The run uses two public 10x Genomics PBMC datasets, each with 5' gene expression
112+
and VDJ (T- and B-cell) libraries. Each 10x dataset page lists ready-made `curl`
113+
commands; the loops below fetch both datasets' libraries and unpack them into a
114+
local `data/` folder:
98115

99116
```bash
100117
mkdir -p data && cd data
101118

102119
# Dataset 1 — Human PBMC, 10k cells, 5' v2
103120
base1="https://cf.10xgenomics.com/samples/cell-vdj/5.0.0/sc5p_v2_hs_PBMC_10k"
104-
for lib in 5gex t b 5fb; do
121+
for lib in 5gex t b; do
105122
curl -O "${base1}/sc5p_v2_hs_PBMC_10k_${lib}_fastqs.tar"
106123
tar -xf "sc5p_v2_hs_PBMC_10k_${lib}_fastqs.tar"
107124
done
108125

109-
# Dataset 2 — Human PBMC, 10k cells, TotalSeq-C, 5' GEM-X
110-
# (confirm the download URL on the dataset page)
126+
# Dataset 2 — Human PBMC, 10k cells, 5' GEM-X
111127
base2="https://cf.10xgenomics.com/samples/cell-exp/9.0.0/10k_Human_PBMC_TotalSeqC_5p_gemx"
112-
for lib in gex tcr ig ab; do
128+
for lib in gex tcr ig; do
113129
curl -O "${base2}/10k_Human_PBMC_TotalSeqC_5p_gemx_${lib}_fastqs.tar"
114130
tar -xf "10k_Human_PBMC_TotalSeqC_5p_gemx_${lib}_fastqs.tar"
115131
done
116132

117133
cd ..
118134
```
119135

120-
The transcriptome, VDJ, and antibody **feature reference** (TotalSeq-C panel) are
121-
all fetched automatically from URLs in the `param_list` below, so FASTQs are the
122-
only thing you download by hand.
136+
The transcriptome and VDJ **references** are fetched automatically from URLs in the
137+
`param_list` below, so FASTQs are the only thing you download by hand.
123138

124139
After both downloads, `data/` holds one folder per library:
125140

@@ -128,11 +143,9 @@ data/
128143
├── sc5p_v2_hs_PBMC_10k_5gex_fastqs/ # sample 1 · Gene Expression
129144
├── sc5p_v2_hs_PBMC_10k_t_fastqs/ # sample 1 · VDJ-T
130145
├── sc5p_v2_hs_PBMC_10k_b_fastqs/ # sample 1 · VDJ-B
131-
├── sc5p_v2_hs_PBMC_10k_5fb_fastqs/ # sample 1 · Antibody Capture
132146
├── 10k_Human_PBMC_TotalSeqC_5p_gemx_gex_fastqs/ # sample 2 · Gene Expression
133147
├── 10k_Human_PBMC_TotalSeqC_5p_gemx_tcr_fastqs/ # sample 2 · VDJ-T
134-
├── 10k_Human_PBMC_TotalSeqC_5p_gemx_ig_fastqs/ # sample 2 · VDJ-B
135-
└── 10k_Human_PBMC_TotalSeqC_5p_gemx_ab_fastqs/ # sample 2 · Antibody Capture
148+
└── 10k_Human_PBMC_TotalSeqC_5p_gemx_ig_fastqs/ # sample 2 · VDJ-B
136149
```
137150

138151
Each folder holds that library's `*_R1_*.fastq.gz` / `*_R2_*.fastq.gz` files.
@@ -141,8 +154,8 @@ Each folder holds that library's `*_R1_*.fastq.gz` / `*_R2_*.fastq.gz` files.
141154

142155
`ingestion/cellranger_multi` aligns each library and writes one `.h5mu` per
143156
sample; under the hood OpenPipeline 4.2.0 runs
144-
[Cell Ranger `multi`](https://www.10xgenomics.com/support/software/cell-ranger/latest/analysis/running-pipelines/cr-5p-multi)
145-
10. Describe the samples and their libraries in a `param_list`
157+
[Cell Ranger `multi`](https://www.10xgenomics.com/support/software/cell-ranger/latest/analysis/running-pipelines/cr-5p-multi).
158+
Describe the samples and their libraries in a `param_list`
146159
(`params_cellranger.yaml`):
147160

148161
```yaml
@@ -153,18 +166,15 @@ param_list:
153166
- data/sc5p_v2_hs_PBMC_10k_5gex_fastqs/*_R*.fastq.gz
154167
- data/sc5p_v2_hs_PBMC_10k_t_fastqs/*_R*.fastq.gz
155168
- data/sc5p_v2_hs_PBMC_10k_b_fastqs/*_R*.fastq.gz
156-
- data/sc5p_v2_hs_PBMC_10k_5fb_fastqs/*_R*.fastq.gz
157-
library_id: [PBMC_10k_5gex, PBMC_10k_t, PBMC_10k_b, PBMC_10k_5fb]
158-
library_type: [Gene Expression, VDJ-T, VDJ-B, Antibody Capture]
169+
library_id: [PBMC_10k_5gex, PBMC_10k_t, PBMC_10k_b]
170+
library_type: [Gene Expression, VDJ-T, VDJ-B]
159171
- id: 10k_Human_PBMC_TotalSeqC_5p_gemx
160172
input:
161173
- data/10k_Human_PBMC_TotalSeqC_5p_gemx_gex_fastqs/*_R*.fastq.gz
162174
- data/10k_Human_PBMC_TotalSeqC_5p_gemx_tcr_fastqs/*_R*.fastq.gz
163175
- data/10k_Human_PBMC_TotalSeqC_5p_gemx_ig_fastqs/*_R*.fastq.gz
164-
- data/10k_Human_PBMC_TotalSeqC_5p_gemx_ab_fastqs/*_R*.fastq.gz
165-
library_id: [TotalSeqC_gex, TotalSeqC_tcr, TotalSeqC_ig, TotalSeqC_ab]
166-
library_type: [Gene Expression, VDJ-T, VDJ-B, Antibody Capture]
167-
feature_reference: "<TotalSeq-C feature-reference CSV URL, from the dataset page>"
176+
library_id: [TotalSeqC_gex, TotalSeqC_tcr, TotalSeqC_ig]
177+
library_type: [Gene Expression, VDJ-T, VDJ-B]
168178
gex_reference: https://cf.10xgenomics.com/supp/cell-exp/refdata-gex-GRCh38-2020-A.tar.gz
169179
vdj_reference: https://cf.10xgenomics.com/supp/cell-vdj/refdata-cellranger-vdj-GRCh38-alts-ensembl-7.0.0.tar.gz
170180
publish_dir: results/ingestion

get-started/quickstart.qmd

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
---
2+
title: "Quickstart"
3+
description: "See a full run in ~10 minutes, starting from pre-computed counts."
4+
order: 1
5+
---
6+
7+
The fastest way to see OpenPipeline work end to end. This skips the heavy
8+
alignment step (Cell Ranger) and starts from a **pre-computed count matrix** for a
9+
small, single PBMC sample: convert it to MuData, process it, cluster it, and read
10+
the result. It runs in about **10 minutes** on a laptop.
11+
12+
When you're ready for a real run, from raw FASTQ files, two samples, and batch
13+
correction, do the full [Run your first pipeline](index.qmd) walkthrough. This
14+
Quickstart is the express lane; that page is the real thing.
15+
16+
::: {.callout-note appearance="simple"}
17+
**You need Nextflow and Docker.** If you don't have them yet, follow
18+
[step 1 of the full walkthrough](index.qmd#sec-setup-nextflow-and-docker) to
19+
install them and point Nextflow at the Viash Hub package registry. The version
20+
pin (`export NXF_VER=25.10.2`) and one-time `~/.nextflow/scm` setup are the same.
21+
:::
22+
23+
## 1 · Get the data
24+
25+
One small file: the filtered count matrix for 10x Genomics' public **1k PBMC**
26+
dataset (~1,000 cells, a few MB).
27+
28+
```bash
29+
mkdir -p data
30+
curl -o data/pbmc_1k_v3.h5 \
31+
https://cf.10xgenomics.com/samples/cell-exp/3.0.0/pbmc_1k_v3/pbmc_1k_v3_filtered_feature_bc_matrix.h5
32+
```
33+
34+
This is the Cell Ranger output you would otherwise generate yourself. Starting
35+
from it lets you skip alignment and reference downloads entirely.
36+
37+
## 2 · Convert to MuData
38+
39+
Every OpenPipeline workflow speaks [MuData](../concepts/mudata.qmd). Convert the
40+
10x HDF5 file to a `.h5mu` with `convert/from_10xh5_to_h5mu`:
41+
42+
```bash
43+
nextflow run https://packages.viash-hub.com/vsh/openpipeline.git \
44+
-r 4.2.0 -latest -profile docker \
45+
-main-script target/nextflow/convert/from_10xh5_to_h5mu/main.nf \
46+
--id pbmc_1k \
47+
--input data/pbmc_1k_v3.h5 \
48+
--output pbmc_1k.h5mu \
49+
--publish_dir results/
50+
```
51+
52+
## 3 · Process the sample
53+
54+
`multiomics/process_samples` filters low-quality cells, normalizes, selects
55+
highly variable genes, and computes a PCA embedding, all in one command:
56+
57+
```bash
58+
nextflow run https://packages.viash-hub.com/vsh/openpipeline.git \
59+
-r 4.2.0 -latest -profile docker \
60+
-main-script target/nextflow/workflows/multiomics/process_samples/main.nf \
61+
--id pbmc_1k \
62+
--input results/pbmc_1k.h5mu \
63+
--output pbmc_1k_processed.h5mu \
64+
--publish_dir results/
65+
```
66+
67+
## 4 · Cluster and embed
68+
69+
With one sample there's no batch effect to correct, so you can skip integration
70+
and cluster directly on the PCA embedding. `multiomics/neighbors_leiden_umap`
71+
builds the neighbor graph, runs Leiden clustering, and computes a UMAP:
72+
73+
```bash
74+
nextflow run https://packages.viash-hub.com/vsh/openpipeline.git \
75+
-r 4.2.0 -latest -profile docker \
76+
-main-script target/nextflow/workflows/multiomics/neighbors_leiden_umap/main.nf \
77+
--id pbmc_1k \
78+
--input results/pbmc_1k_processed.h5mu \
79+
--obsm_input X_pca \
80+
--uns_neighbors neighbors \
81+
--obs_cluster leiden \
82+
--leiden_resolution 1.0 \
83+
--obsm_umap X_umap \
84+
--output pbmc_1k_clustered.h5mu \
85+
--publish_dir results/
86+
```
87+
88+
## 5 · Read the output
89+
90+
`results/pbmc_1k_clustered.h5mu` holds the whole result for the `rna` modality:
91+
92+
```
93+
MuData
94+
└─ .mod
95+
└─ rna
96+
├─ .layers["log_normalized"] # normalized, log1p counts
97+
├─ .obsm["X_pca"] # PCA from process_samples
98+
├─ .obs["leiden_1.0"] # cluster labels (one column per resolution)
99+
└─ .obsm["X_umap"] # UMAP for plotting
100+
```
101+
102+
The clusters are just numbers so far. Assigning biological identities to them is
103+
[cell type annotation](../guides/annotate.qmd), a separate step.
104+
105+
## Where to go next
106+
107+
- **The real run:** [Run your first pipeline](index.qmd), raw FASTQ → Cell Ranger
108+
→ two samples → batch-corrected, integrated object.
109+
- **Pick individual tasks:** the [task guides](../guides/index.qmd).
110+
- **Understand the design:** [How it works](../concepts/index.qmd).

guides/annotate.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: "Cell type annotation"
2+
title: "Annotate cell types"
33
description: "Assign biological cell-type labels to clusters or cells."
44
categories: [openpipeline]
55
order: 45

guides/cell-cell-communication.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: "Cell-cell communication"
2+
title: "Infer cell-cell communication"
33
description: "Ligand-receptor interaction inference between cell types (LIANA)."
44
categories: [openpipeline]
55
order: 60

guides/differential-expression.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: "Differential expression"
2+
title: "Run differential expression"
33
description: "Pseudobulk differential expression across conditions with DESeq2."
44
categories: [openpipeline]
55
order: 50

0 commit comments

Comments
 (0)