## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>",
                      error = FALSE, warning = FALSE, message = FALSE)

## ----live-demo----------------------------------------------------------------
library(DuckDBGRanges)
library(GenomicRanges)
library(arrow)

set.seed(1L)
n <- 2000L
df <- data.frame(
    seqnames = sample(paste0("chr", 1:5), n, replace = TRUE),
    start = sample(1:1e6, n),
    strand = sample(c("+", "-", "*"), n, replace = TRUE),
    score = runif(n))
df$end <- df$start + sample(100:500, n, replace = TRUE)

gr <- makeGRangesFromDataFrame(df, keep.extra.columns = TRUE)
path <- tempfile(fileext = ".parquet"); write_parquet(df, path)
ddb <- DuckDBGRanges(path, seqnames = "seqnames", start = "start",
                     end = "end", strand = "strand", mcols = "score")

## same answer, one in memory and one queried from disk
system.time(r_gr  <- restrict(gr,  start = 1L, end = 500000L))
system.time(r_ddb <- restrict(ddb, start = 1L, end = 500000L))
length(r_gr) == length(r_ddb)

## ----results, echo=FALSE, results='asis'--------------------------------------
helper <- system.file("scripts", "make_timings_table.R", package = "DuckDBGRanges")
if (nzchar(helper)) {
    source(helper)
    res <- load_vignette_timings()
} else {
    res <- NULL
}
if (is.null(res)) {
    cat("_Precomputed benchmark results are not available in this build; ",
        "generate them with `inst/scripts/run_vignette_benchmarks.R`._\n", sep = "")
} else {
    cat("\n**Memory footprint**\n\n")
    print(make_memory_table(
        caption = "In-memory object size; DuckDBGRanges is constant regardless of N.",
        results = res))
    cat("\n\n**scATAC-seq scenario (1M peaks)**\n\n")
    print(make_timings_table("scATAC", results = res,
        caption = "Elapsed seconds. Speedup = GRanges / DuckDBGRanges (>1 favors DuckDB)."))
    cat("\n\n**Variant scenario (10M variants)**\n\n")
    print(make_timings_table("variant", results = res,
        caption = "Elapsed seconds. Speedup = GRanges / DuckDBGRanges (>1 favors DuckDB)."))
    cat("\n\n")
    timings_config_note(res)
}

## ----sessioninfo--------------------------------------------------------------
sessionInfo()

