FLAMES 2.3.1
Changqing Wang, Oliver Voogd, Yupei You
Source:vignettes/FLAMES_vignette.Rmd
FLAMES_vignette.Rmd
FLAMES
The overhauled FLAMES 2.3.1 pipeline provides convenient pipelines for performing single-cell and bulk long-read analysis of mutations and isoforms. The pipeline is designed to take various type of experiments, e.g. with or without known cell barcodes and custome cell barcode designs, to reduce the need of constantly re-inventing the wheel for every new sequencing protocol.

Creating a pipeline
To start your long-read RNA-seq analysis, simply create a pipeline
via either BulkPipeline()
,
SingleCellPipeline()
or
MultiSampleSCPipeline()
. Let’s try
SingleCellPipeline()
first:
outdir <- tempfile()
dir.create(outdir)
# some example data
# known cell barcodes, e.g. from coupled short-read sequencing
bc_allow <- file.path(outdir, "bc_allow.tsv")
R.utils::gunzip(
filename = system.file("extdata", "bc_allow.tsv.gz", package = "FLAMES"),
destname = bc_allow, remove = FALSE
)
# reference genome
genome_fa <- file.path(outdir, "rps24.fa")
R.utils::gunzip(
filename = system.file("extdata", "rps24.fa.gz", package = "FLAMES"),
destname = genome_fa, remove = FALSE
)
pipeline <- SingleCellPipeline(
# use the default configs
config_file = create_config(outdir),
outdir = outdir,
# the input fastq file
fastq = system.file("extdata", "fastq", "musc_rps24.fastq.gz", package = "FLAMES"),
# reference annotation file
annotation = system.file("extdata", "rps24.gtf.gz", package = "FLAMES"),
genome_fa = genome_fa,
barcodes_file = bc_allow
)
#> Writing configuration parameters to: /tmp/RtmpAbAQZG/file318cfdc628c/config_file_12684.json
#> Configured steps:
#> barcode_demultiplex: TRUE
#> genome_alignment: TRUE
#> gene_quantification: TRUE
#> isoform_identification: TRUE
#> read_realignment: TRUE
#> transcript_quantification: TRUE
#> samtools not found, will use Rsamtools package instead
pipeline
#> → A FLAMES.SingleCellPipeline outputting to /tmp/RtmpAbAQZG/file318cfdc628c
#>
#> ── Inputs
#> ✔ fastq: ...ibrary/FLAMES/extdata/fastq/musc_rps24.fastq.gz
#> ✔ annotation: /__w/_temp/Library/FLAMES/extdata/rps24.gtf.gz
#> ✔ genome_fa: /tmp/RtmpAbAQZG/file318cfdc628c/rps24.fa
#> ✔ barcodes_file: /tmp/RtmpAbAQZG/file318cfdc628c/bc_allow.tsv
#>
#> ── Outputs
#> ℹ demultiplexed_fastq: matched_reads.fastq
#> ℹ deduped_fastq: matched_reads_dedup.fastq
#> ℹ genome_bam: align2genome.bam
#> ℹ transcriptome_assembly: transcript_assembly.fa
#> ℹ transcriptome_bam: realign2transcript.bam
#>
#> ── Pipeline Steps
#> ℹ barcode_demultiplex (pending)
#> ℹ genome_alignment (pending)
#> ℹ gene_quantification (pending)
#> ℹ isoform_identification (pending)
#> ℹ read_realignment (pending)
#> ℹ transcript_quantification (pending)
Running the pipeline
To execute the pipeline, simply call
run_FLAMES(pipeline)
. This will run through all the steps
in the pipeline, returning a updated pipeline object:
pipeline <- run_FLAMES(pipeline)
#> Running step: barcode_demultiplex
#> FLEXIPLEX 0.96.2
#> Setting max barcode edit distance to 2
#> Setting max flanking sequence edit distance to 8
#> Setting read IDs to be replaced
#> Setting number of threads to 8
#> Search pattern:
#> primer: CTACACGACGCTCTTCCGATCT
#> BC: NNNNNNNNNNNNNNNN
#> UMI: NNNNNNNNNNNN
#> polyT: TTTTTTTTT
#> Setting known barcodes from /tmp/RtmpAbAQZG/file318cfdc628c/bc_allow.tsv
#> Number of known barcodes: 143
#> Processing file: /__w/_temp/Library/FLAMES/extdata/fastq/musc_rps24.fastq.gz
#> Searching for barcodes...
#> Number of reads processed: 393
#> Number of reads where at least one barcode was found: 368
#> Number of reads with exactly one barcode match: 364
#> Number of chimera reads: 1
#> All done!
#> Running step: genome_alignment
#> Creating junction bed file from GFF3 annotation.
#> Aligning sample /tmp/RtmpAbAQZG/file318cfdc628c/matched_reads.fastq -> /tmp/RtmpAbAQZG/file318cfdc628c/align2genome.bam
#> Your fastq file appears to have tags, but you did not provide the -y option to minimap2 to include the tags in the output.
#> Warning in minimap2_align(fq_in = fastqs[i], fa_file = pipeline@genome_fa, :
#> samtools not found, using Rsamtools instead, this could be slower and might
#> fail for large BAM files.
#> Sorting BAM files by genome coordinates with 8 threads...
#> Indexing bam files
#> Running step: gene_quantification
#> 03:24:04 AM Wed May 21 2025 quantify genes
#> Found genome alignment file(s): align2genome.bam
#> Assigning reads to genes...
#> Writing the gene count matrix ...
#> Plotting the saturation curve ...
#> Generating deduplicated fastq file ...
#> Running step: isoform_identification
#> #### Read gene annotations
#> Removed similar transcripts in gene annotation: Counter()
#> #### find isoforms
#> chr14
#> Import genomic features from the file as a GRanges object ...
#> OK
#> Prepare the 'metadata' data frame ... OK
#> Make the TxDb object ...
#> Warning in .makeTxDb_normarg_chrominfo(chrominfo): genome version information
#> is not available for this TxDb object
#> OK
#> Running step: read_realignment
#> Checking for fastq file(s) /__w/_temp/Library/FLAMES/extdata/fastq/musc_rps24.fastq.gz
#> files found
#> Checking for fastq file(s) /tmp/RtmpAbAQZG/file318cfdc628c/matched_reads.fastq
#> files found
#> Checking for fastq file(s) /tmp/RtmpAbAQZG/file318cfdc628c/matched_reads_dedup.fastq
#> files found
#> Realigning sample /tmp/RtmpAbAQZG/file318cfdc628c/matched_reads_dedup.fastq -> /tmp/RtmpAbAQZG/file318cfdc628c/realign2transcript.bam
#> Warning in minimap2_align(fq_in = fastqs[i], fa_file =
#> pipeline@transcriptome_assembly, : samtools not found, using Rsamtools instead,
#> this could be slower and might fail for large BAM files.
#> Sorting BAM files by 8 with CB threads...
#>
#> Running step: transcript_quantification
#> Import genomic features from the file as a GRanges object ... OK
#> Prepare the 'metadata' data frame ... OK
#> Make the TxDb object ...
#> Warning in .makeTxDb_normarg_chrominfo(chrominfo): genome version information
#> is not available for this TxDb object
#> OK
#> Import genomic features from the file as a GRanges object ... OK
#> Prepare the 'metadata' data frame ... OK
#> Make the TxDb object ...
#> Warning in .makeTxDb_normarg_chrominfo(chrominfo): genome version information
#> is not available for this TxDb object
#> OK
pipeline
#> ✔ A FLAMES.SingleCellPipeline outputting to /tmp/RtmpAbAQZG/file318cfdc628c
#>
#> ── Inputs
#> ✔ fastq: ...ibrary/FLAMES/extdata/fastq/musc_rps24.fastq.gz
#> ✔ annotation: /__w/_temp/Library/FLAMES/extdata/rps24.gtf.gz
#> ✔ genome_fa: /tmp/RtmpAbAQZG/file318cfdc628c/rps24.fa
#> ✔ barcodes_file: /tmp/RtmpAbAQZG/file318cfdc628c/bc_allow.tsv
#>
#> ── Outputs
#> ✔ demultiplexed_fastq: matched_reads.fastq [498.8 KB]
#> ✔ deduped_fastq: matched_reads_dedup.fastq [470.5 KB]
#> ✔ genome_bam: align2genome.bam [267.5 KB]
#> ✔ novel_isoform_annotation: isoform_annotated.gff3 [7.4 KB]
#> ✔ transcriptome_assembly: transcript_assembly.fa [8.4 KB]
#> ✔ transcriptome_bam: realign2transcript.bam [392.3 KB]
#>
#> ── Pipeline Steps
#> ✔ barcode_demultiplex (completed in 1.99 sec)
#> ✔ genome_alignment (completed in 0.34 sec)
#> ✔ gene_quantification (completed in 0.73 sec)
#> ✔ isoform_identification (completed in 0.89 sec)
#> ✔ read_realignment (completed in 0.25 sec)
#> ✔ transcript_quantification (completed in 1.31 sec)
If you run into any error, run_FLAMES()
will stop and
return the pipeline object with the error message. After resolving the
error, you can run resume_FLAMES(pipeline)
to continue the
pipeline from the last step. There is also
run_step(pipeline, step_name)
to run a specific step in the
pipeline. Let’s show this by deliberately causing an error via deleting
the input files:
# set up a new pipeline
outdir2 <- tempfile()
pipeline2 <- SingleCellPipeline(
config_file = create_config(outdir),
outdir = outdir2,
fastq = system.file("extdata", "fastq", "musc_rps24.fastq.gz", package = "FLAMES"),
annotation = system.file("extdata", "rps24.gtf.gz", package = "FLAMES"),
genome_fa = genome_fa,
barcodes_file = bc_allow
)
#> Output directory does not exists: one is being created
#> [1] "/tmp/RtmpAbAQZG/file318c563dca54"
#> Writing configuration parameters to: /tmp/RtmpAbAQZG/file318cfdc628c/config_file_12684.json
#> Configured steps:
#> barcode_demultiplex: TRUE
#> genome_alignment: TRUE
#> gene_quantification: TRUE
#> isoform_identification: TRUE
#> read_realignment: TRUE
#> transcript_quantification: TRUE
#> samtools not found, will use Rsamtools package instead
# delete the reference genome
unlink(genome_fa)
pipeline2 <- run_FLAMES(pipeline2)
#> Running step: barcode_demultiplex
#> FLEXIPLEX 0.96.2
#> Setting max barcode edit distance to 2
#> Setting max flanking sequence edit distance to 8
#> Setting read IDs to be replaced
#> Setting number of threads to 8
#> Search pattern:
#> primer: CTACACGACGCTCTTCCGATCT
#> BC: NNNNNNNNNNNNNNNN
#> UMI: NNNNNNNNNNNN
#> polyT: TTTTTTTTT
#> Setting known barcodes from /tmp/RtmpAbAQZG/file318cfdc628c/bc_allow.tsv
#> Number of known barcodes: 143
#> Processing file: /__w/_temp/Library/FLAMES/extdata/fastq/musc_rps24.fastq.gz
#> Searching for barcodes...
#> Number of reads processed: 393
#> Number of reads where at least one barcode was found: 368
#> Number of reads with exactly one barcode match: 364
#> Number of chimera reads: 1
#> All done!
#> Running step: genome_alignment
#> Creating junction bed file from GFF3 annotation.
#> Aligning sample /tmp/RtmpAbAQZG/file318c563dca54/matched_reads.fastq -> /tmp/RtmpAbAQZG/file318c563dca54/align2genome.bam
#> Your fastq file appears to have tags, but you did not provide the -y option to minimap2 to include the tags in the output.
#> Warning in minimap2_align(fq_in = fastqs[i], fa_file = pipeline@genome_fa, :
#> samtools not found, using Rsamtools instead, this could be slower and might
#> fail for large BAM files.
#> Warning in value[[3L]](cond): Error in step genome_alignment: error running minimap2:
#> 1, pipeline stopped.
pipeline2
#> ! A FLAMES.SingleCellPipeline outputting to /tmp/RtmpAbAQZG/file318c563dca54
#>
#> ── Inputs
#> ✔ fastq: ...ibrary/FLAMES/extdata/fastq/musc_rps24.fastq.gz
#> ✔ annotation: /__w/_temp/Library/FLAMES/extdata/rps24.gtf.gz
#> ! genome_fa: /tmp/RtmpAbAQZG/file318cfdc628c/rps24.fa [missing]
#> ✔ barcodes_file: /tmp/RtmpAbAQZG/file318cfdc628c/bc_allow.tsv
#>
#> ── Outputs
#> ✔ demultiplexed_fastq: matched_reads.fastq [498.8 KB]
#> ℹ deduped_fastq: matched_reads_dedup.fastq
#> ℹ genome_bam: align2genome.bam
#> ℹ transcriptome_assembly: transcript_assembly.fa
#> ℹ transcriptome_bam: realign2transcript.bam
#>
#> ── Pipeline Steps
#> ✔ barcode_demultiplex (completed in 0.14 sec)
#> ✖ genome_alignment (failed: Error in minimap2_align(fq_in = fastqs[i], fa_file = pipeline@genome_fa, : error running minimap2:
#> 1
#> )
#> ℹ gene_quantification (pending)
#> ℹ isoform_identification (pending)
#> ℹ read_realignment (pending)
#> ℹ transcript_quantification (pending)
Let’s then fix the error by re-creating the reference genome file and resume the pipeline:
R.utils::gunzip(
filename = system.file("extdata", "rps24.fa.gz", package = "FLAMES"),
destname = genome_fa, remove = FALSE
)
pipeline2 <- resume_FLAMES(pipeline2)
#> Resuming pipeline from step: genome_alignment
#> Running step: genome_alignment
#> Aligning sample /tmp/RtmpAbAQZG/file318c563dca54/matched_reads.fastq -> /tmp/RtmpAbAQZG/file318c563dca54/align2genome.bam
#> Your fastq file appears to have tags, but you did not provide the -y option to minimap2 to include the tags in the output.
#> Warning in minimap2_align(fq_in = fastqs[i], fa_file = pipeline@genome_fa, :
#> samtools not found, using Rsamtools instead, this could be slower and might
#> fail for large BAM files.
#> Sorting BAM files by genome coordinates with 8 threads...
#> Indexing bam files
#> Running step: gene_quantification
#> 03:24:08 AM Wed May 21 2025 quantify genes
#> Found genome alignment file(s): align2genome.bam
#> Assigning reads to genes...
#> Writing the gene count matrix ...
#> Plotting the saturation curve ...
#> Generating deduplicated fastq file ...
#> Running step: isoform_identification
#> #### Read gene annotations
#> Removed similar transcripts in gene annotation: Counter()
#> #### find isoforms
#> chr14
#> Import genomic features from the file as a GRanges object ...
#> OK
#> Prepare the 'metadata' data frame ... OK
#> Make the TxDb object ...
#> Warning in .makeTxDb_normarg_chrominfo(chrominfo): genome version information
#> is not available for this TxDb object
#> OK
#> Running step: read_realignment
#> Checking for fastq file(s) /__w/_temp/Library/FLAMES/extdata/fastq/musc_rps24.fastq.gz
#> files found
#> Checking for fastq file(s) /tmp/RtmpAbAQZG/file318c563dca54/matched_reads.fastq
#> files found
#> Checking for fastq file(s) /tmp/RtmpAbAQZG/file318c563dca54/matched_reads_dedup.fastq
#> files found
#> Realigning sample /tmp/RtmpAbAQZG/file318c563dca54/matched_reads_dedup.fastq -> /tmp/RtmpAbAQZG/file318c563dca54/realign2transcript.bam
#> Warning in minimap2_align(fq_in = fastqs[i], fa_file =
#> pipeline@transcriptome_assembly, : samtools not found, using Rsamtools instead,
#> this could be slower and might fail for large BAM files.
#> Sorting BAM files by 8 with CB threads...
#>
#> Running step: transcript_quantification
#> Import genomic features from the file as a GRanges object ... OK
#> Prepare the 'metadata' data frame ... OK
#> Make the TxDb object ...
#> Warning in .makeTxDb_normarg_chrominfo(chrominfo): genome version information
#> is not available for this TxDb object
#> OK
#> Import genomic features from the file as a GRanges object ... OK
#> Prepare the 'metadata' data frame ... OK
#> Make the TxDb object ...
#> Warning in .makeTxDb_normarg_chrominfo(chrominfo): genome version information
#> is not available for this TxDb object
#> OK
pipeline2
#> ✔ A FLAMES.SingleCellPipeline outputting to /tmp/RtmpAbAQZG/file318c563dca54
#>
#> ── Inputs
#> ✔ fastq: ...ibrary/FLAMES/extdata/fastq/musc_rps24.fastq.gz
#> ✔ annotation: /__w/_temp/Library/FLAMES/extdata/rps24.gtf.gz
#> ✔ genome_fa: /tmp/RtmpAbAQZG/file318cfdc628c/rps24.fa
#> ✔ barcodes_file: /tmp/RtmpAbAQZG/file318cfdc628c/bc_allow.tsv
#>
#> ── Outputs
#> ✔ demultiplexed_fastq: matched_reads.fastq [498.8 KB]
#> ✔ deduped_fastq: matched_reads_dedup.fastq [470.5 KB]
#> ✔ genome_bam: align2genome.bam [267.5 KB]
#> ✔ novel_isoform_annotation: isoform_annotated.gff3 [7.4 KB]
#> ✔ transcriptome_assembly: transcript_assembly.fa [8.4 KB]
#> ✔ transcriptome_bam: realign2transcript.bam [392.3 KB]
#>
#> ── Pipeline Steps
#> ✔ barcode_demultiplex (completed in 0.14 sec)
#> ✔ genome_alignment (completed in 0.22 sec)
#> ✔ gene_quantification (completed in 0.28 sec)
#> ✔ isoform_identification (completed in 0.58 sec)
#> ✔ read_realignment (completed in 0.24 sec)
#> ✔ transcript_quantification (completed in 1.12 sec)
After completing the pipeline, a SingleCellExperiment
object is created (or SummarizedExperiment
for bulk
pipeline and list of SingleCellExperiment
for multi-sample
pipeline). You can access the results via
experiment(pipeline)
:
experiment(pipeline)
#> class: SingleCellExperiment
#> dim: 10 137
#> metadata(0):
#> assays(1): counts
#> rownames(10): ENSMUST00000169826.2 ENSMUSG00000025290.17_19_5159_1 ...
#> ENSMUSG00000025290.17_19_5159_8 ENSMUST00000225023.1
#> rowData names(2): transcript_id gene_id
#> colnames(137): AACTCTTGTCACCTAA AACCATGAGTCGTTTG ... TTGTAGGTCAGTGTTG
#> TTTATGCAGACTAGAT
#> colData names(0):
#> reducedDimNames(0):
#> mainExpName: NULL
#> altExpNames(0):
Visualizations
QC plots
Quality metrics are collected throughout the pipeline, and FLAMES
provide visiualization functions to plot the metrics. For the first
demultiplexing step, we can use the plot_demultiplex
function to see how well many reads are retained after
demultiplexing:
# example_pipeline provides an example pipeline for each of the three types
# of pipelines: BulkPipeline, SingleCellPipeline and MultiSampleSCPipeline
mspipeline <- example_pipeline("MultiSampleSCPipeline")
#> Writing configuration parameters to: /tmp/RtmpAbAQZG/file318c4a45af09/config_file_12684.json
#> Configured steps:
#> barcode_demultiplex: TRUE
#> genome_alignment: TRUE
#> gene_quantification: TRUE
#> isoform_identification: TRUE
#> read_realignment: TRUE
#> transcript_quantification: TRUE
#> samtools not found, will use Rsamtools package instead
# don't have to run the entire pipeline for this
# let's just run the demultiplexing step
mspipeline <- run_step(mspipeline, "barcode_demultiplex")
#> Running step: barcode_demultiplex
#> FLEXIPLEX 0.96.2
#> Setting max barcode edit distance to 2
#> Setting max flanking sequence edit distance to 8
#> Setting read IDs to be replaced
#> Setting number of threads to 1
#> Search pattern:
#> primer: CTACACGACGCTCTTCCGATCT
#> BC: NNNNNNNNNNNNNNNN
#> UMI: NNNNNNNNNNNN
#> polyT: TTTTTTTTT
#> Setting known barcodes from /tmp/RtmpAbAQZG/file318c4a45af09/bc_allow.tsv
#> Number of known barcodes: 143
#> Processing file: /tmp/RtmpAbAQZG/file318c4a45af09/fastq/sample1.fq.gz
#> Searching for barcodes...
#> Processing file: /tmp/RtmpAbAQZG/file318c4a45af09/fastq/sample2.fq.gz
#> Searching for barcodes...
#> Processing file: /tmp/RtmpAbAQZG/file318c4a45af09/fastq/sample3.fq.gz
#> Searching for barcodes...
#> Number of reads processed: 393
#> Number of reads where at least one barcode was found: 368
#> Number of reads with exactly one barcode match: 364
#> Number of chimera reads: 1
#> All done!
#> FLEXIPLEX 0.96.2
#> Setting max barcode edit distance to 2
#> Setting max flanking sequence edit distance to 8
#> Setting read IDs to be replaced
#> Setting number of threads to 1
#> Search pattern:
#> primer: CTACACGACGCTCTTCCGATCT
#> BC: NNNNNNNNNNNNNNNN
#> UMI: NNNNNNNNNNNN
#> polyT: TTTTTTTTT
#> Setting known barcodes from /tmp/RtmpAbAQZG/file318c4a45af09/bc_allow.tsv
#> Number of known barcodes: 143
#> Processing file: /tmp/RtmpAbAQZG/file318c4a45af09/fastq/sample1.fq.gz
#> Searching for barcodes...
#> Number of reads processed: 100
#> Number of reads where at least one barcode was found: 92
#> Number of reads with exactly one barcode match: 91
#> Number of chimera reads: 1
#> All done!
#> FLEXIPLEX 0.96.2
#> Setting max barcode edit distance to 2
#> Setting max flanking sequence edit distance to 8
#> Setting read IDs to be replaced
#> Setting number of threads to 1
#> Search pattern:
#> primer: CTACACGACGCTCTTCCGATCT
#> BC: NNNNNNNNNNNNNNNN
#> UMI: NNNNNNNNNNNN
#> polyT: TTTTTTTTT
#> Setting known barcodes from /tmp/RtmpAbAQZG/file318c4a45af09/bc_allow.tsv
#> Number of known barcodes: 143
#> Processing file: /tmp/RtmpAbAQZG/file318c4a45af09/fastq/sample2.fq.gz
#> Searching for barcodes...
#> Number of reads processed: 100
#> Number of reads where at least one barcode was found: 95
#> Number of reads with exactly one barcode match: 94
#> Number of chimera reads: 0
#> All done!
#> FLEXIPLEX 0.96.2
#> Setting max barcode edit distance to 2
#> Setting max flanking sequence edit distance to 8
#> Setting read IDs to be replaced
#> Setting number of threads to 1
#> Search pattern:
#> primer: CTACACGACGCTCTTCCGATCT
#> BC: NNNNNNNNNNNNNNNN
#> UMI: NNNNNNNNNNNN
#> polyT: TTTTTTTTT
#> Setting known barcodes from /tmp/RtmpAbAQZG/file318c4a45af09/bc_allow.tsv
#> Number of known barcodes: 143
#> Processing file: /tmp/RtmpAbAQZG/file318c4a45af09/fastq/sample3.fq.gz
#> Searching for barcodes...
#> Number of reads processed: 193
#> Number of reads where at least one barcode was found: 181
#> Number of reads with exactly one barcode match: 179
#> Number of chimera reads: 0
#> All done!
plot_demultiplex(mspipeline)
#> $reads_count_plot
#>
#> $knee_plot
#> `geom_smooth()` using formula = 'y ~ x'
#>
#> $flank_editdistance_plot
#>
#> $barcode_editdistance_plot
#>
#> $cutadapt_plot
Session Info
#> R version 4.5.0 (2025-04-11)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.2 LTS
#>
#> Matrix products: default
#> BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
#>
#> locale:
#> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
#> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
#> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
#> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
#> [9] LC_ADDRESS=C LC_TELEPHONE=C
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
#>
#> time zone: UTC
#> tzcode source: system (glibc)
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] FLAMES_2.3.0 BiocStyle_2.36.0
#>
#> loaded via a namespace (and not attached):
#> [1] splines_4.5.0 BiocIO_1.18.0
#> [3] bitops_1.0-9 filelock_1.0.3
#> [5] tibble_3.2.1 R.oo_1.27.1
#> [7] polyclip_1.10-7 basilisk.utils_1.20.0
#> [9] bambu_3.10.0 XML_3.99-0.18
#> [11] httr2_1.1.2 lifecycle_1.0.4
#> [13] pwalign_1.4.0 edgeR_4.6.2
#> [15] doParallel_1.0.17 vroom_1.6.5
#> [17] MASS_7.3-65 globals_0.18.0
#> [19] lattice_0.22-7 magrittr_2.0.3
#> [21] limma_3.64.0 sass_0.4.10
#> [23] rmarkdown_2.29 jquerylib_0.1.4
#> [25] yaml_2.3.10 metapod_1.16.0
#> [27] reticulate_1.42.0 cowplot_1.1.3
#> [29] DBI_1.2.3 RColorBrewer_1.1-3
#> [31] abind_1.4-8 ShortRead_1.66.0
#> [33] GenomicRanges_1.60.0 purrr_1.0.4
#> [35] R.utils_2.13.0 BiocGenerics_0.54.0
#> [37] RCurl_1.98-1.17 yulab.utils_0.2.0
#> [39] rappdirs_0.3.3 tweenr_2.0.3
#> [41] circlize_0.4.16 GenomeInfoDbData_1.2.14
#> [43] IRanges_2.42.0 S4Vectors_0.46.0
#> [45] ggrepel_0.9.6 irlba_2.3.5.1
#> [47] listenv_0.9.1 dqrng_0.4.1
#> [49] parallelly_1.44.0 pkgdown_2.1.3.9000
#> [51] DelayedMatrixStats_1.30.0 codetools_0.2-20
#> [53] DropletUtils_1.28.0 DelayedArray_0.34.1
#> [55] xml2_1.3.8 ggforce_0.4.2
#> [57] scuttle_1.18.0 tidyselect_1.2.1
#> [59] shape_1.4.6.1 UCSC.utils_1.4.0
#> [61] farver_2.1.2 viridis_0.6.5
#> [63] ScaledMatrix_1.16.0 BiocFileCache_2.16.0
#> [65] matrixStats_1.5.0 stats4_4.5.0
#> [67] GenomicAlignments_1.44.0 jsonlite_2.0.0
#> [69] GetoptLong_1.0.5 BiocNeighbors_2.2.0
#> [71] scater_1.36.0 iterators_1.0.14
#> [73] systemfonts_1.2.3 foreach_1.5.2
#> [75] progress_1.2.3 tools_4.5.0
#> [77] ragg_1.4.0 Rcpp_1.0.14
#> [79] glue_1.8.0 gridExtra_2.3
#> [81] SparseArray_1.8.0 mgcv_1.9-3
#> [83] xfun_0.52 MatrixGenerics_1.20.0
#> [85] GenomeInfoDb_1.44.0 dplyr_1.1.4
#> [87] HDF5Array_1.36.0 withr_3.0.2
#> [89] BiocManager_1.30.25 fastmap_1.2.0
#> [91] basilisk_1.20.0 bluster_1.18.0
#> [93] latticeExtra_0.6-30 rhdf5filters_1.20.0
#> [95] digest_0.6.37 rsvd_1.0.5
#> [97] R6_2.6.1 textshaping_1.0.1
#> [99] colorspace_2.1-1 biomaRt_2.64.0
#> [101] jpeg_0.1-11 dichromat_2.0-0.1
#> [103] RSQLite_2.3.11 R.methodsS3_1.8.2
#> [105] h5mread_1.0.0 tidyr_1.3.1
#> [107] generics_0.1.4 data.table_1.17.2
#> [109] rtracklayer_1.68.0 prettyunits_1.2.0
#> [111] httr_1.4.7 htmlwidgets_1.6.4
#> [113] S4Arrays_1.8.0 scatterpie_0.2.4
#> [115] pkgconfig_2.0.3 gtable_0.3.6
#> [117] blob_1.2.4 ComplexHeatmap_2.24.0
#> [119] hwriter_1.3.2.1 SingleCellExperiment_1.30.1
#> [121] XVector_0.48.0 htmltools_0.5.8.1
#> [123] bookdown_0.43 clue_0.3-66
#> [125] scales_1.4.0 Biobase_2.68.0
#> [127] png_0.1-8 SpatialExperiment_1.18.1
#> [129] scran_1.36.0 ggfun_0.1.8
#> [131] knitr_1.50 tzdb_0.5.0
#> [133] rjson_0.2.23 nlme_3.1-168
#> [135] curl_6.2.2 cachem_1.1.0
#> [137] rhdf5_2.52.0 GlobalOptions_0.1.2
#> [139] stringr_1.5.1 parallel_4.5.0
#> [141] vipor_0.4.7 AnnotationDbi_1.70.0
#> [143] restfulr_0.0.15 desc_1.4.3
#> [145] pillar_1.10.2 grid_4.5.0
#> [147] vctrs_0.6.5 BiocSingular_1.24.0
#> [149] dbplyr_2.5.0 beachmat_2.24.0
#> [151] cluster_2.1.8.1 beeswarm_0.4.0
#> [153] evaluate_1.0.3 readr_2.1.5
#> [155] GenomicFeatures_1.60.0 magick_2.8.6
#> [157] cli_3.6.5 locfit_1.5-9.12
#> [159] compiler_4.5.0 Rsamtools_2.24.0
#> [161] rlang_1.1.6 crayon_1.5.3
#> [163] labeling_0.4.3 interp_1.1-6
#> [165] fs_1.6.6 ggbeeswarm_0.7.2
#> [167] stringi_1.8.7 viridisLite_0.4.2
#> [169] deldir_2.0-4 BiocParallel_1.42.0
#> [171] txdbmaker_1.4.1 Biostrings_2.76.0
#> [173] Matrix_1.7-3 dir.expiry_1.16.0
#> [175] BSgenome_1.76.0 hms_1.1.3
#> [177] sparseMatrixStats_1.20.0 bit64_4.6.0-1
#> [179] future_1.49.0 ggplot2_3.5.2
#> [181] Rhdf5lib_1.30.0 KEGGREST_1.48.0
#> [183] statmod_1.5.0 SummarizedExperiment_1.38.1
#> [185] igraph_2.1.4 memoise_2.0.1
#> [187] bslib_0.9.0 bit_4.6.0
#> [189] xgboost_1.7.11.1