From ec5aa0cf17f5fc25f32384dce24bb89f7f23c9d5 Mon Sep 17 00:00:00 2001 From: ch99l Date: Thu, 11 Jun 2026 10:43:13 +0800 Subject: [PATCH 1/2] add metro diagram --- .gitattributes | 2 + README.md | 2 + figures/logo.png | Bin 0 -> 34461 bytes figures/metro.mmd | 99 ++++++++++++++++++++++++ figures/metro.svg | 192 ++++++++++++++++++++++++++++++++++++++++++++++ figures/render.sh | 7 ++ 6 files changed, 302 insertions(+) create mode 100644 figures/logo.png create mode 100644 figures/metro.mmd create mode 100644 figures/metro.svg create mode 100755 figures/render.sh diff --git a/.gitattributes b/.gitattributes index 7b3f21e..28095a9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,4 +4,6 @@ *.groovy linguist-detectable=false *.py linguist-detectable=false *.bash linguist-detectable=false +*.sh linguist-detectable=false Dockerfile linguist-detectable=false +*.mmd linguist-detectable=false diff --git a/README.md b/README.md index 5967f02..2849b8f 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ ### **Overview** + +![Pipeline Overview](figures/metro.svg) This pipeline performs context-aware transcript discovery and quantification from long-read single-cell and spatial transcriptomics data. The workflow is divided into three stages: **Preprocessing** diff --git a/figures/logo.png b/figures/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0e98d05198812ce3befbaf4b8a447759d4b611d1 GIT binary patch literal 34461 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 F0RXUmyyO4? literal 0 HcmV?d00001 diff --git a/figures/metro.mmd b/figures/metro.mmd new file mode 100644 index 0000000..cb946ea --- /dev/null +++ b/figures/metro.mmd @@ -0,0 +1,99 @@ +%%metro title: Bambu-Pipe +%%metro style: light +%%metro file: samplesheet_in | CSV | Samplesheet +%%metro file: ref_genome | FASTA | Reference Genome +%%metro file: ref_annotation | GTF | Reference Annotation +%%metro files: in_fastq | FASTQ +%%metro files: in_bam | BAM +%%metro file: bam_out | BAM | Output BAM +%%metro file: se_gene_counts | SE | Gene Counts +%%metro file: se_unique_counts | SE | Unique Counts +%%metro file: ext_annotation | GTF | ExtendedAnnotations +%%metro file: transcript_counts | SE | Transcript Counts +%%metro line: fastq | FASTQ samples | #f5a623 +%%metro line: bam | Pre-aligned BAM | #0570b0 +%%metro line: em_single | Pseudobulk quantification (single sample) | #9b59b6 | dashed +%%metro line: em_multi | Pseudobulk quantification (multi-sample) | #6c3483 | dashed +%%metro line: sc | Single cell quantification | #ff0000 | dashed +%%metro legend: bl +%%metro grid: inputs | 0,1 +%%metro grid: preprocessing | 1,1 +%%metro grid: alignment | 2,1 +%%metro grid: bambu | 3,1 +%%metro grid: quantification | 4,1 + +graph LR + subgraph inputs [Inputs] + %%metro exit: right | fastq, bam + samplesheet_in[ ] + ref_genome[ ] + ref_annotation[ ] + in_fastq[ ] + in_bam[ ] + end + + subgraph preprocessing [FASTQ Preprocessing] + %%metro entry: left | fastq + %%metro exit: right | fastq + chopper_filter[Chopper] + flexiplex[Flexiplex] + cutadapt[Cutadapt] + chopper_filter -->|fastq| flexiplex + flexiplex -->|fastq| cutadapt + end + + subgraph alignment [Alignment] + %%metro entry: left | fastq + %%metro exit: right | fastq + minimap_align[Minimap2] + bam_out[ ] + minimap_align -->|fastq| bam_out + end + + subgraph bambu [Transcript Discovery] + %%metro entry: left | fastq, bam + %%metro exit: right | sc, em_single, em_multi + transcript_discovery[Bambu] + se_gene_counts[ ] + se_unique_counts[ ] + ext_annotation[ ] + transcript_discovery -->|fastq,bam| ext_annotation + ext_annotation -->|fastq,bam| se_unique_counts + se_unique_counts -->|fastq,bam| se_gene_counts + end + + subgraph quantification [Transcript Quantification] + %%metro entry: left | sc, em_single, em_multi + seurat_single[Seurat] + seurat_multi[Seurat + Harmony] + _cluster_out[ ] + bambu_em[Bambu] + transcript_counts[ ] + seurat_single -->|em_single| _cluster_out + seurat_multi -->|em_multi| _cluster_out + _cluster_out -->|em_single,em_multi| bambu_em + bambu_em -->|sc,em_single,em_multi| transcript_counts + end + + %% Inter-section edges + samplesheet_in -->|fastq| chopper_filter + samplesheet_in -->|bam| transcript_discovery + + ref_genome -->|fastq| chopper_filter + ref_genome -->|bam| transcript_discovery + + ref_annotation -->|fastq| chopper_filter + ref_annotation -->|bam| transcript_discovery + + in_fastq -->|fastq| chopper_filter + in_bam -->|bam| transcript_discovery + + cutadapt -->|fastq| minimap_align + + %% Alignment to Bambu + bam_out -->|fastq| transcript_discovery + + %% Bambu TD to quantification + transcript_discovery -->|em_single| seurat_single + transcript_discovery -->|em_multi| seurat_multi + transcript_discovery -->|sc| bambu_em diff --git a/figures/metro.svg b/figures/metro.svg new file mode 100644 index 0000000..1ab79a3 --- /dev/null +++ b/figures/metro.svg @@ -0,0 +1,192 @@ + + + + + + + +1 + + + +2 + + + +3 + + + +4 + + + +5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +CSV +Samplesheet + + + + + + +FASTA +Reference Genome + + + + + + +GTF +Reference Annotation + + + + + + + + + + +FASTQ + + + + + + + + + + +BAM + + + + + + + + + + +BAM +Output BAM + + + + + + + +SE +Gene Counts + + + + + + +SE +Unique Counts + + + + + + +GTF +ExtendedAnnotations + + + + + + + + + +SE +Transcript Counts + +Chopper +Minimap2 +Bambu +Seurat +Seurat + Harmony +Flexiplex +Cutadapt +Bambu + + + +FASTQ samples + +Pre-aligned BAM + +Pseudobulk quantification (single sample) + +Pseudobulk quantification (multi-sample) + +Single cell quantification +created with nf-metro v0.7.2 + diff --git a/figures/render.sh b/figures/render.sh new file mode 100755 index 0000000..9930777 --- /dev/null +++ b/figures/render.sh @@ -0,0 +1,7 @@ +#!/bin/bash +nf-metro render metro.mmd \ + --format svg \ + --theme light \ + -o metro.svg \ + --x-spacing 70 \ + --logo logo.png \ No newline at end of file From d6b236bbce334ef82d38220f926d9b2fe4c9c51a Mon Sep 17 00:00:00 2001 From: ch99l Date: Thu, 11 Jun 2026 10:45:21 +0800 Subject: [PATCH 2/2] fix metro diagram --- figures/metro.svg | 322 +++++++++++++++++++++++----------------------- figures/render.sh | 2 +- 2 files changed, 162 insertions(+), 162 deletions(-) diff --git a/figures/metro.svg b/figures/metro.svg index 1ab79a3..af42d23 100644 --- a/figures/metro.svg +++ b/figures/metro.svg @@ -1,6 +1,6 @@ + width="1766" height="593" viewBox="0 0 1766 593"> - - -1 - - - -2 - - - -3 - - - -4 - - - -5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +1 + + + +2 + + + +3 + + + +4 + + + +5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - -CSV -Samplesheet + + + +CSV +Samplesheet - + - - - -FASTA -Reference Genome + + + +FASTA +Reference Genome - + - - - -GTF -Reference Annotation + + + +GTF +Reference Annotation - + - - - - - - - -FASTQ + + + + + + + +FASTQ - + - - - - - - - -BAM + + + + + + + +BAM - - - - - + + + + + - - - -BAM -Output BAM + + + +BAM +Output BAM - - + + - - - -SE -Gene Counts + + + +SE +Gene Counts - + - - - -SE -Unique Counts + + + +SE +Unique Counts - + - - - -GTF -ExtendedAnnotations + + + +GTF +ExtendedAnnotations - - - - + + + + - - - -SE -Transcript Counts + + + +SE +Transcript Counts -Chopper -Minimap2 -Bambu -Seurat -Seurat + Harmony -Flexiplex -Cutadapt -Bambu - - - -FASTQ samples - -Pre-aligned BAM - -Pseudobulk quantification (single sample) - -Pseudobulk quantification (multi-sample) - -Single cell quantification -created with nf-metro v0.7.2 +Chopper +Minimap2 +Bambu +Seurat +Seurat + Harmony +Flexiplex +Cutadapt +Bambu + + + +FASTQ samples + +Pre-aligned BAM + +Pseudobulk quantification (single sample) + +Pseudobulk quantification (multi-sample) + +Single cell quantification +created with nf-metro v0.7.2 diff --git a/figures/render.sh b/figures/render.sh index 9930777..f93a877 100755 --- a/figures/render.sh +++ b/figures/render.sh @@ -3,5 +3,5 @@ nf-metro render metro.mmd \ --format svg \ --theme light \ -o metro.svg \ - --x-spacing 70 \ + --x-spacing 80 \ --logo logo.png \ No newline at end of file