GLOWpipeline is the orchestration-and-summary layer of the GLOW software family. It scales the single-region GLOW variant-set test (GLOWr) up to a genome-wide scan: it splits a genome into chunks for a compute-cluster array, runs the GLOWr single-region test over each chunk’s regions under an output policy, and aggregates the per-chunk results into a genome-wide table with significance thresholding and overlapping-window locus merging.
GLOWpipeline is the STAARpipeline analog in the GLOWpipeline -> GLOWr -> GFisher stack. It is deliberately cohort- and cluster-agnostic (resolved objects in, tables out), so a workflow script binds it to a specific dataset and scheduler.
define_genome_chunks() splits a chromosome set into contiguous sliding-window chunks, one chunk per array task, with a no-duplicate / no-gap boundary rule.glow_scan_chunk() runs the GLOWr single-region test (GLOWr::glow_region_test()) over a chunk’s windows under a glow_output_policy(), returning a flat per-window results table.run_scan_unit() builds a unit’s regions and filters (build_scan_regions()), runs the per-window scan, and persists the results.prepare_scan_run() resolves the shared setup of a multi-region run (null model, weight inputs, output directories) once, so each chunk task reuses it.aggregate_scan_results() concatenates per-chunk window results into a genome-wide table, flags significant windows, and merges overlapping significant windows into loci; aggregate_coding_results() does the gene-centric coding-scan analog.summarize_qq_and_lambdas()), completeness checking (check_scan_completeness()), run-log parsing (parse_chr_log(), parse_chunk_log()), and error drill-downs (write_error_drilldowns()).
# install.packages("remotes")
remotes::install_github("ZWuLab/GLOWpipeline")GLOWpipeline depends on GLOWr (ZWuLab/GLOWr), which itself depends on GFisher (ZWuLab/GFisher). The GitHub install resolves this transitive chain automatically via the Remotes: field in DESCRIPTION; no separate step is needed. For a from-source install you may prefer to install the dependencies first, GFisher before GLOWr:
remotes::install_github("ZWuLab/GFisher")
remotes::install_github("ZWuLab/GLOWr")
remotes::install_github("ZWuLab/GLOWpipeline")Install the Bioconductor dependency with:
# install.packages("BiocManager")
BiocManager::install("SeqArray")A genome-wide GLOW scan has three phases: chunk the genome, scan each chunk (typically one cluster-array task per chunk), then aggregate. The snippet below shows the call shapes for the first and last phases; the per-chunk scan (glow_scan_chunk() / run_scan_unit()) needs a GDS file plus a fitted null model and weight inputs, which a workflow script supplies (see the vignette).
library(GLOWpipeline)
# 1. Chunk the genome into sliding-window array tasks. Each row is one chunk:
# a chromosome and a contiguous run of window start positions.
chrom_spans <- data.frame(
chr = c("21", "22"),
start = c(5010000L, 10510000L),
end = c(48120000L, 50810000L)
)
chunks <- define_genome_chunks(
chrom_spans,
window_size = 2000, step_size = 1000,
chunk_strategy = "fixed_mb", chunk_size_mb = 5
)
head(chunks)
# 2. Per chunk (one cluster-array task), run the scan over its windows.
# glow_scan_chunk() / run_scan_unit() take a GDS path plus the resolved
# null model + weight inputs from prepare_scan_run(); see the vignette.
# 3. Aggregate the per-chunk result files into a genome-wide table, flag
# significant windows, and merge overlapping windows into loci.
# agg <- aggregate_scan_results(chunk_files, primary_test = "GLOW_Omni",
# alpha = 0.05)
# agg$scan_results_all # genome-wide flat table
# agg$scan_sig_windows # significant windowsFor the full workflow (resolving the shared setup with prepare_scan_run(), running the scan, and aggregating), see the package vignette.
vignette("glowpipeline-overview", package = "GLOWpipeline") — the orchestration overview (chunk -> scan -> aggregate -> summarize).?define_genome_chunks, ?glow_scan_chunk, ?run_scan_unit, ?aggregate_scan_results, ?prepare_scan_run, etc.GLOWpipeline/
├── R/ # orchestration + summary functions
├── man/ # function help (Rd)
├── tests/testthat/ # unit tests
└── vignettes/ # the orchestration overview vignette
If you use GLOWpipeline, please cite the GLOW methodology paper:
Zhang, H., Liu, M., Landers, J. E., and Wu, Z. (2026). Integrated weighted association test with application to genetic association studies. The Annals of Applied Statistics, 20(3), 2074-2097. https://doi.org/10.1214/26-AOAS2223
See inst/CITATION (or run citation("GLOWpipeline")).
GLOWpipeline builds on and interoperates with:
genes_info. Li, X., Li, Z., Zhou, H., et al. (2020). Dynamic incorporation of multiple in silico functional annotations empowers rare variant association analysis of large whole-genome sequencing studies at scale. Nature Genetics, 52, 969-983. doi:10.1038/s41588-020-0676-4. Li, Z., Li, X., Zhou, H., et al. (2022). A framework for detecting noncoding rare-variant associations of large-scale whole-genome sequencing studies. Nature Methods, 19, 1599-1611. doi:10.1038/s41592-022-01640-x
Maintainer: Zheyang Wu (zheyangwu@wpi.edu). Please file bugs and questions at https://github.com/ZWuLab/GLOWpipeline/issues.
Developed with AI assistance; see AI-USE.md.