This file contains all notable changes to Bambu-Pipe.
--loupe_alignmentfor Visium Spatial Gene Expression samples, taking the manual alignment.jsonexported after fiducial alignment and tissue detection in Loupe Browser. Required forvisium-v*samples- Out-of-tissue barcodes are filtered from the BAM before transcript discovery and quantification
- Introduce the
VISIUM_BUILD_TISSUE_POSITIONSmodule, which builds the tissue positions file forvisium-v*samples; the spatial metadata in this file is attached to thecolDataof theSummarizedExperimentobjects - Loupe alignment example (
examples/loupe_alignment_visium_example.json), used by thetest_visiumsmoke test
CB/UBtags in aligned BAM files (minimap2-y), carrying the barcode and UMI from the FASTQ header comments
- The spatial metadata attached to Visium
SummarizedExperimentobjects now follows the Space Ranger tissue positions format (barcode,in_tissue,array_row,array_col,pxl_row_in_fullres,pxl_col_in_fullres), replacing thex_coordinate/y_coordinatecolumns FILTER_BARCODED_BAMmoved tomodules/prepare_input/shared/and is used by both the standard Visium and Visium HD workflows; it now fails when no reads remain after filtering- User-supplied BAM files must carry the barcode and UMI in the
CB/UBtags; barcodes encoded in the read name are no longer supported
- flexiplex-filter's knee detection could discard most in-tissue barcodes for Visium samples; the inflection search now covers the whole barcode rank curve (
-u 0) forvisium-v*chemistries
- Visium HD workflow (
--visium_hd), run as a single sample from a Spaceranger-aligned, barcode-tagged BAM- Transcript discovery and read-to-transcript assignment at the native 2 µm resolution, with counts aggregated to every bin listed in
--bins --barcode_mappingsfor the Spacerangerbarcode_mappings.parquet, used to assign 2 µm spots to bins- Out-of-tissue reads filtered from the BAM using the 2 µm
tissue_positions.parquet - Spatially aware clustering with Banksy (
--banksy,--banksy_lambda,--banksy_k_geom), or gene expression alone --clustering_binto select the resolution to cluster at; cluster labels are expanded back to 2 µm spots for quantification- Spot-level quantification at every resolution under
--quantification_mode EM test_visium_hdsmoke test profile with synthetic example data
- Transcript discovery and read-to-transcript assignment at the native 2 µm resolution, with counts aggregated to every bin listed in
--manual_clusteringto restart the pipeline from cluster assignments generated outside the pipeline, for both standard and Visium HD runstest_sc_quant_dataandtest_visium_hd_quant_datasmoke test profiles covering the manual clustering restart- Self-hosted
bambuandseuratcontainer images published toghcr.io/goekelab, built by thebuild_container.ymlGitHub Actions workflow - Shared R helpers in
bin/for transcript discovery, Seurat object creation, count saving, and cluster mapping
- Renamed
--resolutionto--seurat_resolution - Renamed the
--quantification_modeoptionEM_clusterstoclusteredEM, matching thebambu.singlecellAPI quant_data.rdsandextended_annotations.rdsare now always published tointermediate_R/, so a manual clustering run can restart from them- Seurat objects are built from the published count directories and Bambu's
colDatainstead of theSummarizedExperiment clusters.rdsis now a named vector ofid -> clusterlabel, replacing the per-sample list ofCompressedCharacterList- Cluster-level quantification moved into a single module shared by the standard and Visium HD workflows
- Restructured modules into
standard/,visium_hd/, andshared/directories - Smoke tests now run on pull request and manual dispatch only, with in-progress runs cancelled on a new push
- Harmony batch correction for multi-sample Seurat clustering
- Processing of CB/UB tagged custom BAM files
- GitHub Actions workflow to run smoke test on push and pull request to
mainanddevelbranches
- Upgraded pipeline to support Nextflow version
26.04.0and above
- Quality score filtering with Chopper
- Primer removal with Cutadapt
- Reverse complement FASTQ utility script (
bin/reverse_complement_fastq.py) to enable stranded alignment in minimap2 - Automatic extraction of 10x barcodes and spatial coordinates from the Spaceranger container
- Support for multiple sample analysis using Nextflow parallelisation
- Modularised codebase into discrete modules and subworkflows (
modules/bambu/,modules/alignment/,modules/prepare_input_standard/) - External 10x config asset files for barcode coordinates, adapter sequences, and flank sequences
paramsblock centralising all pipeline parameters (previously defined in main.nf)processblock with dynamic retry strategy- Resource labels for CPU, memory, and time
- HPC execution profile (
conf/) to support parallelisation on high performance computing systems - Minimal end-to-end smoke test (
conf/test.config) - Manifest block with author and version metadata
- Emit software versions in a .yml file
- Input validation via
lib/Validation.groovy quantification_modeparameter to control quantification strategy (no_quant,EM,EM_clusters)- Seurat clustering as a dedicated process (
SEURAT_CLUSTERING) for cluster-based EM quantification - Joint clustering across all samples on a combined gene counts matrix (previously per-sample)
- Cluster output restructured to an ordered list of
CompressedCharacterList, one per sample inquantDataorder (previously a flat single CCL mixing all samples) SEURAT_CLUSTERINGnow takes gene counts matrix and sample names as inputs instead of the fullquantDataobjectclusterCellshelper inlined into the process (previously sourced frombin/utilityFunctions.R)early_stop_stageparameter to terminate the pipeline after BAM or RDS generation
- Migration to Wave community containers (previously root-level
Dockerfile) - Removed deprecated parameters
- Removed hardcoded values and redundant code
- Simplified input logic using a single samplesheet
- Enhanced input validation check
- Initial pipeline release