flowchart TD
A["Raw POD5 Reads
(Nanopore RNA004)"] --> B["WarpDemuX
Demultiplexing
(6-plex, WDX6_rna004_v1_0)"]
B --> C["Per-sample POD5"]
C --> D["Dorado Basecalling
(rna004_130bps_sup@v5.3.0)
+ Modification Detection"]
D --> E["Unaligned BAM
(with MM/ML tags)"]
E --> F["FASTQ Extraction"]
F --> G["minimap2 Alignment
(GENCODE v49 Transcriptome)"]
G --> H["Aligned BAM"]
E --> I["Transfer MM/ML Tags
(inject_ubam_tags)"]
H --> I
I --> J["Final BAM
(aligned + modifications)"]
J --> K["modkit pileup
Per-position Modification
Frequencies"]
J --> L["modkit extract
Per-read Modification
Calls"]
style A fill:#e1f5fe
style J fill:#e8f5e9
style K fill:#fff3e0
style L fill:#fff3e0
Pipeline Overview
Workflow
Modifications detected: m6A, m5C, inosine, pseudouridine, 2’-O-methylation (Am, Cm, Um, Gm)
Samples
Code
library(readr)
library(gt)
library(dplyr)
data_dir <- "../results/hotair/summary/website"
demux <- read_tsv(file.path(data_dir, "demux_summary.tsv"), show_col_types = FALSE)
sample_info <- tribble(
~sample, ~description,
"HOTAIR_WT", "Wild-type HOTAIR",
"HOTAIR_A783U", "A783U point mutant",
"HOTAIR_bc06", "Barcode 06 (low reads)",
"HOTAIR_AL", "AL variant",
)
demux |>
filter(!is.na(sample)) |>
left_join(sample_info, by = "sample") |>
select(Sample = sample, Barcode = predicted_barcode,
Description = description, `Read Count` = n_reads) |>
gt() |>
fmt_number(`Read Count`, decimals = 0) |>
tab_header(title = "Sample Summary")| Sample Summary | |||
| Sample | Barcode | Description | Read Count |
|---|---|---|---|
| HOTAIR_A783U | barcode05 | A783U point mutant | 178,765 |
| HOTAIR_WT | barcode04 | Wild-type HOTAIR | 166,416 |
| HOTAIR_AL | barcode07 | AL variant | 143,411 |
| HOTAIR_bc06 | barcode06 | Barcode 06 (low reads) | 141 |
Demultiplexing
Code
library(ggplot2)
demux |>
filter(!is.na(sample)) |>
mutate(sample = reorder(sample, -n_reads)) |>
ggplot(aes(x = sample, y = n_reads, fill = sample)) +
geom_col(show.legend = FALSE) +
scale_y_continuous(labels = scales::comma) +
labs(x = NULL, y = "Read Count", title = "Reads per Sample") +
theme_minimal(base_size = 14) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))